@@ -61,52 +61,46 @@ var Couch = {
6161 compileFunction : function ( source , ddoc , name ) {
6262 if ( ! source ) throw ( [ "error" , "not_found" , "missing function" ] ) ;
6363
64- var evaluate_function_source = function ( source , evalFunction , sandbox ) {
65- sandbox = sandbox || { } ;
66- if ( typeof CoffeeScript === "undefined" ) {
67- return evalFunction ( source , sandbox , name ) ;
68- } else {
69- var coffee = CoffeeScript . compile ( source , { bare : true } ) ;
70- return evalFunction ( coffee , sandbox , name ) ;
64+ var functionObject = null ;
65+ var sandbox = create_sandbox ( ) ;
66+
67+ var require = function ( name , module ) {
68+ module = module || { } ;
69+ var newModule = resolveModule ( name . split ( '/' ) , module . parent , ddoc ) ;
70+ if ( ! ddoc . _module_cache . hasOwnProperty ( newModule . id ) ) {
71+ // create empty exports object before executing the module,
72+ // stops circular requires from filling the stack
73+ ddoc . _module_cache [ newModule . id ] = { } ;
74+ var s = "function (module, exports, require) { " + newModule . current + "\n }" ;
75+ try {
76+ var func = sandbox ? evalcx ( s , sandbox , newModule . id ) : eval ( s ) ;
77+ func . apply ( sandbox , [ newModule , newModule . exports , function ( name ) {
78+ return require ( name , newModule ) ;
79+ } ] ) ;
80+ } catch ( e ) {
81+ throw [
82+ "error" ,
83+ "compilation_error" ,
84+ "Module require('" + name + "') raised error " +
85+ ( e . toSource ? e . toSource ( ) : e . stack )
86+ ] ;
87+ }
88+ ddoc . _module_cache [ newModule . id ] = newModule . exports ;
7189 }
90+ return ddoc . _module_cache [ newModule . id ] ;
91+ } ;
92+
93+ if ( ddoc ) {
94+ sandbox . require = require ;
95+ if ( ! ddoc . _module_cache ) ddoc . _module_cache = { } ;
7296 }
7397
7498 try {
75- if ( sandbox ) {
76- if ( ddoc ) {
77- if ( ! ddoc . _module_cache ) {
78- ddoc . _module_cache = { } ;
79- }
80- var require = function ( name , module ) {
81- module = module || { } ;
82- var newModule = resolveModule ( name . split ( '/' ) , module . parent , ddoc ) ;
83- if ( ! ddoc . _module_cache . hasOwnProperty ( newModule . id ) ) {
84- // create empty exports object before executing the module,
85- // stops circular requires from filling the stack
86- ddoc . _module_cache [ newModule . id ] = { } ;
87- var s = "function (module, exports, require) { " + newModule . current + "\n }" ;
88- try {
89- var func = sandbox ? evalcx ( s , sandbox , newModule . id ) : eval ( s ) ;
90- func . apply ( sandbox , [ newModule , newModule . exports , function ( name ) {
91- return require ( name , newModule ) ;
92- } ] ) ;
93- } catch ( e ) {
94- throw [
95- "error" ,
96- "compilation_error" ,
97- "Module require('" + name + "') raised error " +
98- ( e . toSource ? e . toSource ( ) : e . stack )
99- ] ;
100- }
101- ddoc . _module_cache [ newModule . id ] = newModule . exports ;
102- }
103- return ddoc . _module_cache [ newModule . id ] ;
104- } ;
105- sandbox . require = require ;
106- }
107- var functionObject = evaluate_function_source ( source , evalcx , sandbox ) ;
99+ if ( typeof CoffeeScript === "undefined" ) {
100+ functionObject = evalcx ( source , sandbox , name ) ;
108101 } else {
109- var functionObject = evaluate_function_source ( source , eval ) ;
102+ var transpiled = CoffeeScript . compile ( source , { bare : true } ) ;
103+ functionObject = evalcx ( transpiled , sandbox , name ) ;
110104 }
111105 } catch ( err ) {
112106 throw ( [
0 commit comments