@@ -5,12 +5,46 @@ const fs = require('fs-extra');
55module . exports = {
66 name : require ( './package' ) . name ,
77 outputReady ( ) {
8+ const netlifyOptions = this . app . options [ 'ember-cli-netlify' ] ;
9+ const pluginRedirectFunctions = loadNetlifyRedirects ( this ) ;
10+
11+ let redirectsFromPlugins = pluginRedirectFunctions . reduce ( ( redirects , pluginRedirectFunction ) => {
12+ return redirects . concat ( pluginRedirectFunction ( ) ) ;
13+ } , [ ] ) ;
14+
815 if ( fs . pathExistsSync ( '.netlifyheaders' ) ) {
916 fs . copySync ( '.netlifyheaders' , 'dist/_headers' , { clobber : true } ) ;
1017 }
1118
1219 if ( fs . pathExistsSync ( '.netlifyredirects' ) ) {
1320 fs . copySync ( '.netlifyredirects' , 'dist/_redirects' , { clobber : true } ) ;
21+ } else if ( netlifyOptions && netlifyOptions . redirects ) {
22+ fs . writeFileSync ( 'dist/_redirects' ) ;
23+ }
24+
25+ const stream = fs . createWriteStream ( 'dist/_redirects' , { flags : 'a' } ) ;
26+
27+ if ( netlifyOptions && netlifyOptions . redirects ) {
28+ netlifyOptions . redirects . forEach ( ( redirect ) => {
29+ stream . write ( `${ redirect } \n` ) ;
30+ } ) ;
1431 }
32+
33+ if ( redirectsFromPlugins && redirectsFromPlugins . length ) {
34+ redirectsFromPlugins . forEach ( ( redirect ) => {
35+ stream . write ( `${ redirect } \n` ) ;
36+ } ) ;
37+ }
38+
39+ stream . end ( ) ;
1540 }
1641} ;
42+
43+ function loadNetlifyRedirects ( context ) {
44+ const addons = context . project . addons || [ ] ;
45+
46+ return addons
47+ . filter ( ( addon ) => addon . pkg . keywords . includes ( 'ember-cli-netlify-plugin' ) )
48+ . filter ( ( addon ) => typeof addon . netlifyRedirects === 'function' )
49+ . map ( ( addon ) => addon . netlifyRedirects . bind ( addon ) ) ;
50+ }
0 commit comments