1
1
2
2
var debug = require ( 'debug' ) ( 'component-builder:scripts' ) ;
3
- var path = pathUtil = require ( 'path' ) ;
3
+ var path = require ( 'path' ) ;
4
4
var relative = path . relative ;
5
5
var requires = require ( 'requires' ) ;
6
6
var fs = require ( 'graceful-fs' ) ;
7
- var url = require ( 'url ' ) ;
7
+ var lookup = require ( './lookup.js ' ) ;
8
8
9
9
var Builder = require ( './builder' ) ;
10
10
var utils = require ( '../utils' ) ;
11
- var manifest = require ( 'component-manifest' ) ;
12
-
13
- // default extension to look up
14
- var extensions = [
15
- '' ,
16
- '.js' ,
17
- '.json' ,
18
- '/index.js' ,
19
- ]
20
11
21
12
module . exports = Scripts
22
13
@@ -207,7 +198,7 @@ Scripts.prototype.register = function* (file) {
207
198
for ( var i = 0 ; i < result . length ; i ++ ) {
208
199
var require = result [ i ] ;
209
200
var quote = require . string . match ( / " / ) ? '"' : "'" ;
210
- var resolvedPath = yield * self . lookup ( file , require . path ) ;
201
+ var resolvedPath = yield * lookup ( file , require . path , self ) ;
211
202
var resolvedRequire = 'require(' + quote + resolvedPath + quote + ')' ;
212
203
js = js . replace ( require . string , resolvedRequire ) ;
213
204
}
@@ -314,176 +305,6 @@ Scripts.prototype.aliasModule = function (manifest) {
314
305
} ) . join ( '' ) + '\n\n' ;
315
306
}
316
307
317
- /**
318
- * From a file, lookup another file within that dep.
319
- * For use within `require()`s.
320
- *
321
- * To do:
322
- *
323
- * - people like @raynos will want to be able to do require('component/lib') or something but F that!
324
- *
325
- * @param {Object } file
326
- * @param {String } target
327
- * @return {String } name
328
- * @api private
329
- */
330
-
331
- Scripts . prototype . lookup = function * ( file , target ) {
332
- target = target . toLowerCase ( ) ;
333
-
334
- var currentDir = target . slice ( 0 , 2 ) === './' ;
335
- var parentDir = target . slice ( 0 , 3 ) === '../' ;
336
- if ( currentDir || parentDir ) {
337
- var lookup = this . lookupRelative ( file , target ) ;
338
- if ( lookup != null ) return lookup ;
339
- return target ;
340
- } else {
341
- return yield * this . lookupDependency ( file , target ) ;
342
- }
343
- }
344
-
345
- /**
346
- * Lookup a relative file.
347
- *
348
- * @param {Object } file
349
- * @param {String } target
350
- * @return {String } name
351
- * @api private
352
- */
353
-
354
- Scripts . prototype . lookupRelative = function ( file , target ) {
355
- var path = url . resolve ( file . path , target ) ;
356
- var files = file . manifest . files ;
357
-
358
- for ( var i = 0 ; i < files . length ; i ++ ) {
359
- var f = files [ i ] ;
360
- // we need this fallback to check relatives from a foreign local
361
- var name = f . name || pathUtil . join ( f . manifest . name , pathUtil . relative ( f . manifest . path , f . filename ) ) ;
362
- for ( var j = 0 ; j < extensions . length ; j ++ ) {
363
- // check by adding extensions
364
- if ( f . path . toLowerCase ( ) === path + extensions [ j ] ) return name ;
365
- }
366
- // check by removing extensions
367
- if ( f . path . replace ( / \. \w + $ / , '' ) . toLowerCase ( ) === path ) return name ;
368
- }
369
-
370
- var message = 'ignore "' + target + '" , could not resolve from "' + file . branch . name + '"\'s file "' + file . path + '"' ;
371
- debug ( message ) ;
372
- return null ;
373
- }
374
-
375
- /**
376
- * Look up a remote dependency.
377
- * Valid references:
378
- *
379
- * <repo>
380
- * <user>-<repo>
381
- * <user>~<repo>
382
- *
383
- * or:
384
- *
385
- * <reference>/<filename>
386
- *
387
- * @param {Object } component
388
- * @param {Object } file
389
- * @param {String } target
390
- * @return {String } name
391
- * @api private
392
- */
393
-
394
- Scripts . prototype . lookupDependency = function * ( file , target ) {
395
- var frags = target . split ( '/' ) ;
396
- var reference = frags [ 0 ] ;
397
- var tail = frags . length > 1
398
- ? ( '/' + frags . slice ( 1 ) . join ( '/' ) )
399
- : ''
400
-
401
- var branch = file . branch ;
402
- var deps = branch . dependencies ;
403
- var names = Object . keys ( deps ) ;
404
-
405
- // <user>~<repo>
406
- if ( ~ reference . indexOf ( '~' ) ) {
407
- var name = reference . replace ( '~' , '/' ) ;
408
- if ( deps [ name ] ) return deps [ name ] . canonical + tail ;
409
- }
410
-
411
- // <user>-<repo>
412
- if ( ~ reference . indexOf ( '-' ) ) {
413
- for ( var i = 0 ; i < names . length ; i ++ ) {
414
- var name = names [ i ] ;
415
- if ( reference === name . replace ( '/' , '-' ) ) {
416
- return deps [ name ] . canonical + tail ;
417
- }
418
- }
419
- }
420
-
421
- // local
422
- var localDeps = Object . keys ( branch . locals ) ;
423
- for ( var i = 0 ; i < localDeps . length ; i ++ ) {
424
- // Find a local dependency that matches as a prefix of the target
425
- // or the whole target, and return the canonical path.
426
- var re = new RegExp ( "^(" + localDeps [ i ] + ")(/.*)?$" ) ;
427
- if ( m = re . exec ( target ) ) {
428
- var dep = m [ 1 ] ;
429
- var tail = m [ 2 ] || '' ;
430
- if ( tail !== '' ) {
431
- var relativeFile = '.' + tail ;
432
- var resolvedTail = yield * this . lookupRelativeForLocal ( branch . locals [ dep ] , relativeFile ) ;
433
- if ( resolvedTail != null ) {
434
- debug ( 'resolved relative file for local "' + dep + '/' + resolvedTail + '"' ) ;
435
- return branch . locals [ dep ] . canonical + '/' + resolvedTail ;
436
- }
437
- }
438
- return branch . locals [ dep ] . canonical + tail ;
439
-
440
- }
441
- }
442
-
443
- // <repo>
444
- for ( var i = 0 ; i < names . length ; i ++ ) {
445
- var name = names [ i ] ;
446
- var repo = name . split ( '/' ) [ 1 ] ;
447
- if ( repo === reference ) {
448
- return deps [ name ] . canonical + tail ;
449
- }
450
- }
451
-
452
- // component.json name, if different than repo
453
- for ( var i = 0 ; i < names . length ; i ++ ) {
454
- var name = names [ i ] ;
455
- var dep = deps [ name ] ;
456
- if ( dep . node . name . toLowerCase ( ) === reference ) {
457
- return dep . canonical + tail ;
458
- }
459
- }
460
-
461
- // to do: look up stuff outside the dependencies
462
- debug ( 'could not resolve "%s" from "%s"' , target , file . name )
463
- return target
464
- }
465
-
466
- Scripts . prototype . lookupRelativeForLocal = function * ( localBranch , relativeTarget ) {
467
- var createManifest = require ( 'component-manifest' ) ;
468
-
469
- var manifestGenerator = createManifest ( this ) ;
470
- var manifest = yield * manifestGenerator ( localBranch ) ;
471
-
472
- var obj = {
473
- path : '' , // it should simulate a url-relative path
474
- manifest : manifest ,
475
- branch : localBranch
476
- }
477
- // resolve the file (if extension is not provided)
478
- var resolved = this . lookupRelative ( obj , relativeTarget ) ;
479
- if ( resolved == null ) return null ;
480
-
481
- var relative = pathUtil . relative ( manifest . name , resolved ) ;
482
-
483
- return relative ;
484
- }
485
-
486
-
487
308
// private helpers
488
309
489
310
function assetPaths ( source , replacer ) {
0 commit comments