22
33const Command = require ( 'cmnd' ) . Command ;
44const Registry = require ( '../registry.js' ) ;
5+ const Transformers = require ( '../transformers.js' ) ;
56
67const fs = require ( 'fs' ) ;
78const zlib = require ( 'zlib' ) ;
@@ -17,7 +18,7 @@ const serviceConfig = require('../service_config');
1718
1819const RELEASE_ENV = 'release' ;
1920
20- function readFiles ( base , properties , dir , data ) {
21+ function readFiles ( base , properties , dir , data ) {
2122
2223 dir = dir || '/' ;
2324 data = data || [ ] ;
@@ -148,17 +149,53 @@ class UpCommand extends Command {
148149 }
149150 ignore = ignore . map ( v => v . endsWith ( '/' ) ? `${ v } *` : v ) ;
150151
152+ // Load transformers
153+ let env , stdlib ;
154+
155+ try {
156+ env = require ( path . join ( process . cwd ( ) , 'env.json' ) ) ;
157+ } catch ( e ) {
158+ console . error ( e ) ;
159+ console . error ( new Error ( 'Invalid env.json in this directory' ) ) ;
160+ process . exit ( 1 ) ;
161+ }
162+
163+ try {
164+ stdlib = require ( path . join ( process . cwd ( ) , 'stdlib.json' ) ) ;
165+ } catch ( e ) {
166+ console . error ( e ) ;
167+ console . error ( new Error ( 'Invalid stdlib.json in this directory' ) ) ;
168+ process . exit ( 1 ) ;
169+ }
170+
171+ const transformers = new Transformers ( env , stdlib , environment ) ;
172+ let preloadFiles = transformers . compile ( ) ;
173+
151174 let data = readFiles (
152175 process . cwd ( ) ,
153- { ignore : ignore }
176+ { ignore : ignore } ,
154177 ) ;
155178
179+ data . forEach ( file => {
180+ if ( preloadFiles [ file . filename ] ) {
181+ throw new Error (
182+ `Error with file "${ file . filename } ":` +
183+ `This file was preloaded as part of a transformer, ` +
184+ `it can not be overwritten.`
185+ ) ;
186+ }
187+ } ) ;
188+
189+ Object . keys ( preloadFiles ) . forEach ( filename => {
190+ data . push ( { filename : filename , buffer : preloadFiles [ filename ] } ) ;
191+ } ) ;
192+
156193 // pipe the pack stream to your file
157194 pack . pipe ( tarball ) ;
158195
159196 // Run everything in parallel...
160197
161- async . parallel ( data . map ( ( file ) => {
198+ async . parallel ( data . map ( file => {
162199 return ( callback ) => {
163200 pack . entry ( { name : file . filename } , file . buffer , callback ) ;
164201 } ;
0 commit comments