|  | @@ -56138,20 +56138,6 @@ referencedClasses: []
 | 
	
		
			
				|  |  |  }),
 | 
	
		
			
				|  |  |  globals.AmberCli.klass);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -smalltalk.addMethod(
 | 
	
		
			
				|  |  | -smalltalk.method({
 | 
	
		
			
				|  |  | -selector: "create:",
 | 
	
		
			
				|  |  | -protocol: 'commands',
 | 
	
		
			
				|  |  | -fn: function (args){
 | 
	
		
			
				|  |  | -var self=this;
 | 
	
		
			
				|  |  | -return self},
 | 
	
		
			
				|  |  | -args: ["args"],
 | 
	
		
			
				|  |  | -source: "create: args",
 | 
	
		
			
				|  |  | -messageSends: [],
 | 
	
		
			
				|  |  | -referencedClasses: []
 | 
	
		
			
				|  |  | -}),
 | 
	
		
			
				|  |  | -globals.AmberCli.klass);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |  smalltalk.addMethod(
 | 
	
		
			
				|  |  |  smalltalk.method({
 | 
	
		
			
				|  |  |  selector: "handleArguments:",
 | 
	
	
		
			
				|  | @@ -56196,6 +56182,23 @@ referencedClasses: ["Transcript"]
 | 
	
		
			
				|  |  |  }),
 | 
	
		
			
				|  |  |  globals.AmberCli.klass);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +smalltalk.addMethod(
 | 
	
		
			
				|  |  | +smalltalk.method({
 | 
	
		
			
				|  |  | +selector: "init:",
 | 
	
		
			
				|  |  | +protocol: 'commands',
 | 
	
		
			
				|  |  | +fn: function (args){
 | 
	
		
			
				|  |  | +var self=this;
 | 
	
		
			
				|  |  | +function $Initer(){return globals.Initer||(typeof Initer=="undefined"?nil:Initer)}
 | 
	
		
			
				|  |  | +return smalltalk.withContext(function($ctx1) { 
 | 
	
		
			
				|  |  | +_st(_st($Initer())._new())._start();
 | 
	
		
			
				|  |  | +return self}, function($ctx1) {$ctx1.fill(self,"init:",{args:args},globals.AmberCli.klass)})},
 | 
	
		
			
				|  |  | +args: ["args"],
 | 
	
		
			
				|  |  | +source: "init: args\x0a\x09Initer new start",
 | 
	
		
			
				|  |  | +messageSends: ["start", "new"],
 | 
	
		
			
				|  |  | +referencedClasses: ["Initer"]
 | 
	
		
			
				|  |  | +}),
 | 
	
		
			
				|  |  | +globals.AmberCli.klass);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  smalltalk.addMethod(
 | 
	
		
			
				|  |  |  smalltalk.method({
 | 
	
		
			
				|  |  |  selector: "main",
 | 
	
	
		
			
				|  | @@ -57482,6 +57485,126 @@ referencedClasses: []
 | 
	
		
			
				|  |  |  globals.FileServer.klass);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +smalltalk.addClass('Initer', globals.Object, ['path', 'childProcess', 'nmPath'], 'AmberCli');
 | 
	
		
			
				|  |  | +smalltalk.addMethod(
 | 
	
		
			
				|  |  | +smalltalk.method({
 | 
	
		
			
				|  |  | +selector: "dirname",
 | 
	
		
			
				|  |  | +protocol: 'private',
 | 
	
		
			
				|  |  | +fn: function (){
 | 
	
		
			
				|  |  | +var self=this;
 | 
	
		
			
				|  |  | +return smalltalk.withContext(function($ctx1) { 
 | 
	
		
			
				|  |  | +return __dirname;
 | 
	
		
			
				|  |  | +return self}, function($ctx1) {$ctx1.fill(self,"dirname",{},globals.Initer)})},
 | 
	
		
			
				|  |  | +args: [],
 | 
	
		
			
				|  |  | +source: "dirname\x0a\x09<return __dirname>",
 | 
	
		
			
				|  |  | +messageSends: [],
 | 
	
		
			
				|  |  | +referencedClasses: []
 | 
	
		
			
				|  |  | +}),
 | 
	
		
			
				|  |  | +globals.Initer);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +smalltalk.addMethod(
 | 
	
		
			
				|  |  | +smalltalk.method({
 | 
	
		
			
				|  |  | +selector: "gruntInitThenDo:",
 | 
	
		
			
				|  |  | +protocol: 'action',
 | 
	
		
			
				|  |  | +fn: function (aBlock){
 | 
	
		
			
				|  |  | +var self=this;
 | 
	
		
			
				|  |  | +var child;
 | 
	
		
			
				|  |  | +return smalltalk.withContext(function($ctx1) { 
 | 
	
		
			
				|  |  | +var $1,$3,$4,$2,$5,$6,$7;
 | 
	
		
			
				|  |  | +$1=self["@childProcess"];
 | 
	
		
			
				|  |  | +$3=_st(_st(self["@path"])._join_with_with_(self["@nmPath"],".bin","grunt-init")).__comma(" ");
 | 
	
		
			
				|  |  | +$4=_st(_st(_st(self["@path"])._join_with_(self["@nmPath"],"grunt-init-amber"))._replace_with_("\x5c\x5c","\x5c\x5c"))._replace_with_(":","\x5c:");
 | 
	
		
			
				|  |  | +$ctx1.sendIdx["replace:with:"]=1;
 | 
	
		
			
				|  |  | +$2=_st($3).__comma($4);
 | 
	
		
			
				|  |  | +$ctx1.sendIdx[","]=1;
 | 
	
		
			
				|  |  | +child=_st($1)._exec_thenDo_($2,aBlock);
 | 
	
		
			
				|  |  | +$5=_st(child)._stdout();
 | 
	
		
			
				|  |  | +$ctx1.sendIdx["stdout"]=1;
 | 
	
		
			
				|  |  | +_st($5)._pipe_options_(_st(process)._stdout(),globals.HashedCollection._newFromPairs_(["end",false]));
 | 
	
		
			
				|  |  | +$ctx1.sendIdx["pipe:options:"]=1;
 | 
	
		
			
				|  |  | +$6=_st(process)._stdin();
 | 
	
		
			
				|  |  | +$ctx1.sendIdx["stdin"]=1;
 | 
	
		
			
				|  |  | +_st($6)._resume();
 | 
	
		
			
				|  |  | +$7=_st(process)._stdin();
 | 
	
		
			
				|  |  | +$ctx1.sendIdx["stdin"]=2;
 | 
	
		
			
				|  |  | +_st($7)._pipe_options_(_st(child)._stdin(),globals.HashedCollection._newFromPairs_(["end",false]));
 | 
	
		
			
				|  |  | +return self}, function($ctx1) {$ctx1.fill(self,"gruntInitThenDo:",{aBlock:aBlock,child:child},globals.Initer)})},
 | 
	
		
			
				|  |  | +args: ["aBlock"],
 | 
	
		
			
				|  |  | +source: "gruntInitThenDo: aBlock\x0a\x09| child |\x0a\x09child := childProcess\x0a\x09\x09exec: (path join: nmPath with: '.bin' with: 'grunt-init'), ' ', (((path join: nmPath with: 'grunt-init-amber') replace: '\x5c\x5c' with: '\x5c\x5c') replace: ':' with: '\x5c:')\x0a\x09\x09thenDo: aBlock.\x0a\x09child stdout pipe: process stdout options: #{ 'end' -> false }.\x0a\x09process stdin resume.\x0a\x09process stdin pipe: child stdin options: #{ 'end' -> false }",
 | 
	
		
			
				|  |  | +messageSends: ["exec:thenDo:", ",", "join:with:with:", "replace:with:", "join:with:", "pipe:options:", "stdout", "resume", "stdin"],
 | 
	
		
			
				|  |  | +referencedClasses: []
 | 
	
		
			
				|  |  | +}),
 | 
	
		
			
				|  |  | +globals.Initer);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +smalltalk.addMethod(
 | 
	
		
			
				|  |  | +smalltalk.method({
 | 
	
		
			
				|  |  | +selector: "initialize",
 | 
	
		
			
				|  |  | +protocol: 'initialization',
 | 
	
		
			
				|  |  | +fn: function (){
 | 
	
		
			
				|  |  | +var self=this;
 | 
	
		
			
				|  |  | +return smalltalk.withContext(function($ctx1) { 
 | 
	
		
			
				|  |  | +($ctx1.supercall = true, globals.Initer.superclass.fn.prototype._initialize.apply(_st(self), []));
 | 
	
		
			
				|  |  | +$ctx1.supercall = false;
 | 
	
		
			
				|  |  | +self["@path"]=_st(require)._value_("path");
 | 
	
		
			
				|  |  | +$ctx1.sendIdx["value:"]=1;
 | 
	
		
			
				|  |  | +self["@childProcess"]=_st(require)._value_("child_process");
 | 
	
		
			
				|  |  | +self["@nmPath"]=_st(self["@path"])._join_with_(self._rootDirname(),"node_modules");
 | 
	
		
			
				|  |  | +return self}, function($ctx1) {$ctx1.fill(self,"initialize",{},globals.Initer)})},
 | 
	
		
			
				|  |  | +args: [],
 | 
	
		
			
				|  |  | +source: "initialize\x0a\x09super initialize.\x0a\x09path := require value: 'path'.\x0a\x09childProcess := require value: 'child_process'.\x0a\x09nmPath := path join: self rootDirname with: 'node_modules'",
 | 
	
		
			
				|  |  | +messageSends: ["initialize", "value:", "join:with:", "rootDirname"],
 | 
	
		
			
				|  |  | +referencedClasses: []
 | 
	
		
			
				|  |  | +}),
 | 
	
		
			
				|  |  | +globals.Initer);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +smalltalk.addMethod(
 | 
	
		
			
				|  |  | +smalltalk.method({
 | 
	
		
			
				|  |  | +selector: "rootDirname",
 | 
	
		
			
				|  |  | +protocol: 'private',
 | 
	
		
			
				|  |  | +fn: function (){
 | 
	
		
			
				|  |  | +var self=this;
 | 
	
		
			
				|  |  | +return smalltalk.withContext(function($ctx1) { 
 | 
	
		
			
				|  |  | +var $1;
 | 
	
		
			
				|  |  | +$1=_st(self["@path"])._join_with_with_(self._dirname(),"..","..");
 | 
	
		
			
				|  |  | +return $1;
 | 
	
		
			
				|  |  | +}, function($ctx1) {$ctx1.fill(self,"rootDirname",{},globals.Initer)})},
 | 
	
		
			
				|  |  | +args: [],
 | 
	
		
			
				|  |  | +source: "rootDirname\x0a\x09^ path join: self dirname with: '..' with: '..'",
 | 
	
		
			
				|  |  | +messageSends: ["join:with:with:", "dirname"],
 | 
	
		
			
				|  |  | +referencedClasses: []
 | 
	
		
			
				|  |  | +}),
 | 
	
		
			
				|  |  | +globals.Initer);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +smalltalk.addMethod(
 | 
	
		
			
				|  |  | +smalltalk.method({
 | 
	
		
			
				|  |  | +selector: "start",
 | 
	
		
			
				|  |  | +protocol: 'action',
 | 
	
		
			
				|  |  | +fn: function (){
 | 
	
		
			
				|  |  | +var self=this;
 | 
	
		
			
				|  |  | +return smalltalk.withContext(function($ctx1) { 
 | 
	
		
			
				|  |  | +var $1,$2,$receiver;
 | 
	
		
			
				|  |  | +self._gruntInitThenDo_((function(error){
 | 
	
		
			
				|  |  | +return smalltalk.withContext(function($ctx2) {
 | 
	
		
			
				|  |  | +if(($receiver = error) == null || $receiver.isNil){
 | 
	
		
			
				|  |  | +return _st(process)._exit();
 | 
	
		
			
				|  |  | +} else {
 | 
	
		
			
				|  |  | +$1=console;
 | 
	
		
			
				|  |  | +_st($1)._log_("grunt-init exec error:");
 | 
	
		
			
				|  |  | +$ctx2.sendIdx["log:"]=1;
 | 
	
		
			
				|  |  | +$2=_st($1)._log_(error);
 | 
	
		
			
				|  |  | +return $2;
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  | +}, function($ctx2) {$ctx2.fillBlock({error:error},$ctx1,1)})}));
 | 
	
		
			
				|  |  | +return self}, function($ctx1) {$ctx1.fill(self,"start",{},globals.Initer)})},
 | 
	
		
			
				|  |  | +args: [],
 | 
	
		
			
				|  |  | +source: "start\x0a\x09self gruntInitThenDo: [ :error |\x0a\x09\x09error ifNotNil: [ console log: 'grunt-init exec error:'; log: error ]\x0a\x09\x09ifNil: [ process exit ]\x0a\x09]",
 | 
	
		
			
				|  |  | +messageSends: ["gruntInitThenDo:", "ifNotNil:ifNil:", "log:", "exit"],
 | 
	
		
			
				|  |  | +referencedClasses: []
 | 
	
		
			
				|  |  | +}),
 | 
	
		
			
				|  |  | +globals.Initer);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  smalltalk.addClass('NodeTestRunner', globals.Object, [], 'AmberCli');
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  smalltalk.addMethod(
 |