@@ -9,18 +9,68 @@ module.exports = function(grunt) {
99 var Help = require ( '../lib/help' ) ( grunt ) ;
1010 var path = require ( 'path' ) ;
1111
12+ grunt . registerTask ( 'packageRewriteComposer' , '' , function ( ) {
13+ var pathBuild = grunt . config ( 'config.buildPaths.html' ) ;
14+ var pathPackage = grunt . config ( 'config.packages.dest.docroot' ) ;
15+ var pathVendor = grunt . config ( 'config.packages.dest.vendor' ) ;
16+ // Check if we are packaging to a custom destination.
17+ if ( ( pathBuild !== pathPackage ) || pathVendor ) {
18+ // Load `composer.json` as JSON, convert to object.
19+ var destPath = grunt . option ( 'package-dest' ) ;
20+ var composer = grunt . file . readJSON ( destPath + '/composer.json' ) ;
21+ // Determine new installer-paths
22+ var pathInstall = pathPackage ? pathPackage + '/' : '' ;
23+ if ( pathVendor ) {
24+ // Make sure install path is relative to vendor location.
25+ var regexVendor = new RegExp ( '^' + pathVendor + '/' ) ;
26+ pathInstall = pathInstall . replace ( regexVendor , '' ) ;
27+ }
28+ var regex = new RegExp ( '^' + pathBuild + '/' ) ;
29+ for ( var key in composer . extra [ 'installer-paths' ] ) {
30+ // Add an unnecessary if check just for eslint rules.
31+ if ( composer . extra [ 'installer-paths' ] . hasOwnProperty ( key ) ) {
32+ var newKey = key . replace ( regex , pathInstall ) ;
33+ if ( newKey !== key ) {
34+ // Alter keys in `extra.installer-paths` object to change `build/html`
35+ // to `html` or an alternative path from the config.
36+ var value = composer . extra [ 'installer-paths' ] [ key ] ;
37+ delete composer . extra [ 'installer-paths' ] [ key ] ;
38+ composer . extra [ 'installer-paths' ] [ newKey ] = value ;
39+ }
40+ }
41+ }
42+
43+ // Next, generate the composer.json in the correct path.
44+ var destComposer = ( pathVendor ) ? destPath + '/' + pathVendor : destPath ;
45+ // Write out data to `composer.json` in the package output.
46+ var composerString = JSON . stringify ( composer , null , 2 ) ;
47+ grunt . file . write ( destComposer + '/composer.json' , composerString ) ;
48+ if ( pathVendor ) {
49+ // Remove the original file if we moved it.
50+ grunt . file . delete ( destPath + '/composer.json' ) ;
51+ // Change working directory for later `composer install`.
52+ grunt . config ( [ 'composer' ] , {
53+ options : {
54+ flags : [ 'no-dev' ] ,
55+ cwd : destComposer
56+ }
57+ } ) ;
58+ }
59+ }
60+ } ) ;
61+
1262 grunt . registerTask ( 'package' , 'Package the operational codebase for deployment. Use package:compress to create an archive.' , function ( ) {
1363 grunt . loadNpmTasks ( 'grunt-contrib-copy' ) ;
1464
1565 var config = grunt . config . get ( 'config.packages' ) ;
1666 var srcFiles = [ '**' , '!**/.gitkeep' ] . concat ( ( config && config . srcFiles && config . srcFiles . length ) ? config . srcFiles : '**' ) ;
1767 var projFiles = ( config && config . projFiles && config . projFiles . length ) ? config . projFiles : [ ] ;
18- console . log ( projFiles ) ;
1968
2069 // Look for a package target spec, build destination path.
2170 var packageName = grunt . option ( 'name' ) || config . name || 'package' ;
2271 var destPath = grunt . config . get ( 'config.buildPaths.packages' ) + '/' + packageName ;
2372 var tasks = [ ] ;
73+ grunt . option ( 'package-dest' , destPath ) ;
2474
2575 grunt . config ( 'copy.package' , {
2676 files : [
@@ -55,13 +105,16 @@ module.exports = function(grunt) {
55105 if ( projFiles . find ( function ( pattern ) {
56106 return pattern . startsWith ( 'composer' ) ;
57107 } ) ) {
108+ tasks . push ( 'packageRewriteComposer' ) ;
58109 grunt . config ( [ 'composer' ] , {
59110 options : {
60111 flags : [ 'no-dev' ] ,
61112 cwd : destPath
62113 }
63114 } ) ;
64115 tasks . push ( 'composer:install' ) ;
116+ grunt . config ( [ 'composer' , 'drupal-scaffold' ] , { } ) ;
117+ tasks . push ( 'composer:drupal-scaffold' ) ;
65118 }
66119
67120 if ( this . args [ 0 ] && this . args [ 0 ] === 'compress' ) {
0 commit comments