@@ -5,20 +5,19 @@ var fs = require("fs")
5
5
var path = require ( "path" )
6
6
7
7
var assign = require ( "object-assign" )
8
- var resolve = require ( "resolve" )
9
8
var postcss = require ( "postcss" )
10
9
var helpers = require ( "postcss-message-helpers" )
11
10
var glob = require ( "glob" )
12
11
var parseImports = require ( "./lib/parse-imports" )
13
12
var resolveMedia = require ( "./lib/resolve-media" )
13
+ var resolveId = require ( "./lib/resolve-id" )
14
14
15
15
/**
16
16
* Constants
17
17
*/
18
18
var moduleDirectories = [
19
19
"web_modules" ,
20
20
"node_modules" ,
21
- "bower_components" ,
22
21
]
23
22
24
23
/**
@@ -256,42 +255,48 @@ function readAtImport(
256
255
return Promise . resolve ( )
257
256
}
258
257
258
+ var dir = atRule . source && atRule . source . input && atRule . source . input . file
259
+ ? path . dirname ( path . resolve ( options . root , atRule . source . input . file ) )
260
+ : options . root
261
+
259
262
addInputToPath ( options )
260
- var resolvedFilename = resolveFilename (
261
- parsedAtImport . uri ,
262
- options . root ,
263
- options . path ,
264
- atRule . source ,
265
- options . resolve
266
- )
267
263
268
- if ( options . skipDuplicates ) {
269
- // skip files already imported at the same scope
270
- if (
271
- state . importedFiles [ resolvedFilename ] &&
272
- state . importedFiles [ resolvedFilename ] [ media ]
273
- ) {
274
- atRule . remove ( )
275
- return Promise . resolve ( )
264
+ return Promise . resolve ( ) . then ( function ( ) {
265
+ if ( options . resolve ) {
266
+ return options . resolve ( parsedAtImport . uri , dir , options )
276
267
}
268
+ return resolveId ( parsedAtImport . uri , dir , options . path )
269
+ } ) . then ( function ( resolvedFilename ) {
270
+ if ( options . skipDuplicates ) {
271
+ // skip files already imported at the same scope
272
+ if (
273
+ state . importedFiles [ resolvedFilename ] &&
274
+ state . importedFiles [ resolvedFilename ] [ media ]
275
+ ) {
276
+ atRule . remove ( )
277
+ return Promise . resolve ( )
278
+ }
277
279
278
- // save imported files to skip them next time
279
- if ( ! state . importedFiles [ resolvedFilename ] ) {
280
- state . importedFiles [ resolvedFilename ] = { }
280
+ // save imported files to skip them next time
281
+ if ( ! state . importedFiles [ resolvedFilename ] ) {
282
+ state . importedFiles [ resolvedFilename ] = { }
283
+ }
284
+ state . importedFiles [ resolvedFilename ] [ media ] = true
281
285
}
282
- state . importedFiles [ resolvedFilename ] [ media ] = true
283
- }
284
286
285
- return readImportedContent (
286
- result ,
287
- atRule ,
288
- parsedAtImport ,
289
- assign ( { } , options ) ,
290
- resolvedFilename ,
291
- state ,
292
- media ,
293
- processor
294
- )
287
+ return readImportedContent (
288
+ result ,
289
+ atRule ,
290
+ parsedAtImport ,
291
+ assign ( { } , options ) ,
292
+ resolvedFilename ,
293
+ state ,
294
+ media ,
295
+ processor
296
+ )
297
+ } ) . catch ( function ( err ) {
298
+ result . warn ( err . message , { node : atRule } )
299
+ } )
295
300
}
296
301
297
302
/**
@@ -414,63 +419,6 @@ function insertRules(atRule, parsedAtImport, newStyles) {
414
419
atRule . replaceWith ( newNodes )
415
420
}
416
421
417
- /**
418
- * Check if a file exists
419
- *
420
- * @param {String } name
421
- */
422
- function resolveFilename ( name , root , paths , source , resolver ) {
423
- var dir = source && source . input && source . input . file
424
- ? path . dirname ( path . resolve ( root , source . input . file ) )
425
- : root
426
-
427
- try {
428
- var resolveOpts = {
429
- basedir : dir ,
430
- moduleDirectory : moduleDirectories . concat ( paths ) ,
431
- paths : paths ,
432
- extensions : [ ".css" ] ,
433
- packageFilter : function processPackage ( pkg ) {
434
- pkg . main = pkg . style || "index.css"
435
- return pkg
436
- } ,
437
- }
438
- var file
439
- resolver = resolver || resolve . sync
440
- try {
441
- file = resolver ( name , resolveOpts )
442
- }
443
- catch ( e ) {
444
- // fix to try relative files on windows with "./"
445
- // if it's look like it doesn't start with a relative path already
446
- // if (name.match(/^\.\.?/)) {throw e}
447
- try {
448
- file = resolver ( "./" + name , resolveOpts )
449
- }
450
- catch ( err ) {
451
- // LAST HOPE
452
- if ( ! paths . some ( function ( dir2 ) {
453
- file = path . join ( dir2 , name )
454
- return fs . existsSync ( file )
455
- } ) ) {
456
- throw err
457
- }
458
- }
459
- }
460
-
461
- return path . normalize ( file )
462
- }
463
- catch ( e ) {
464
- throw new Error (
465
- "Failed to find '" + name + "' from " + root +
466
- "\n in [ " +
467
- "\n " + paths . join ( ",\n " ) +
468
- "\n ]" ,
469
- source
470
- )
471
- }
472
- }
473
-
474
422
/**
475
423
* Read the contents of a file
476
424
*
0 commit comments