Skip to content

Commit 7089b02

Browse files
committed
Merging in a monkey-patching of Module::load, unfortunately.
1 parent bd45180 commit 7089b02

File tree

2 files changed

+44
-56
lines changed

2 files changed

+44
-56
lines changed

lib/coffee-script/coffee-script.js

Lines changed: 22 additions & 28 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/coffee-script.coffee

Lines changed: 22 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -154,34 +154,28 @@ if require.extensions
154154
for ext in ['.coffee', '.litcoffee', '.coffee.md']
155155
require.extensions[ext] = loadFile
156156

157-
# Patch Node's module loader to be able to handle .coffee.md in require.extensions
158-
do (Module = require 'module') ->
159-
NATIVELOAD = "function(filename){debug('load'+JSON.stringify(filename)+'formodule'+JSON.stringify(this.id));assert(!this.loaded);this.filename=filename;this.paths=Module._nodeModulePaths(path.dirname(filename));varextension=path.extname(filename)||'.js';if(!Module._extensions[extension])extension='.js';Module._extensions[extension](this,filename);this.loaded=true;}"
160-
161-
# Only keep going if we're sure module.prototype.load is what we expect
162-
return unless Module::load.toString().replace(/\s+/g, '') is NATIVELOAD
163-
164-
findExtension = (filename) ->
165-
extensions = path.basename(filename).split '.'
166-
167-
# Remove initial dot from dotfiles
168-
extensions.shift() if extensions[0] is ''
169-
170-
# Start with the longest extension and work our way shortwards
171-
while extensions.shift()
172-
curExtension = '.' + extensions.join '.'
173-
return curExtension if Module._extensions[curExtension]
174-
175-
'.js'
176-
177-
Module::load = (filename) ->
178-
@filename = filename
179-
@paths = Module._nodeModulePaths path.dirname filename
180-
181-
extension = findExtension filename
182-
Module._extensions[extension](this, filename)
183-
@loaded = true
184-
157+
# Patch Node's module loader to be able to handle mult-dot extensions.
158+
# This is a horrible thing that should not be required. Perhaps, one day,
159+
# when a truly benevolent dictator comes to rule over the Republik of Node,
160+
# it won't be.
161+
Module = require 'module'
162+
163+
findExtension = (filename) ->
164+
extensions = path.basename(filename).split '.'
165+
# Remove the initial dot from dotfiles.
166+
extensions.shift() if extensions[0] is ''
167+
# Start with the longest possible extension and work our way shortwards.
168+
while extensions.shift()
169+
curExtension = '.' + extensions.join '.'
170+
return curExtension if Module._extensions[curExtension]
171+
'.js'
172+
173+
Module::load = (filename) ->
174+
@filename = filename
175+
@paths = Module._nodeModulePaths path.dirname filename
176+
extension = findExtension filename
177+
Module._extensions[extension](this, filename)
178+
@loaded = true
185179

186180
# If we're on Node, patch `child_process.fork` so that Coffee scripts are able
187181
# to fork both CoffeeScript files, and JavaScript files, directly.

0 commit comments

Comments
 (0)