Skip to content

Commit e3712be

Browse files
authored
Support --pkg-importer=node (#267)
* Support --pkg-importer=node * Code review
1 parent 8b80d14 commit e3712be

9 files changed

+77
-8
lines changed

CHANGELOG.md

+7
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
## 2.3.0
2+
3+
* Add a `--pkg-importer` flag to enable loading dependencies from `pkg:` URLs
4+
with the same behavior as the compiler. Currently this only supports the
5+
Node.js package resolution algorithm, via `--pkg-importer=node`. For example,
6+
`@use "pkg:bootstrap"` will load `node_modules/bootstrap/scss/bootstrap.scss`.
7+
18
## 2.2.1
29

310
### Module Migrator

lib/src/migrator.dart

+5-3
Original file line numberDiff line numberDiff line change
@@ -68,9 +68,11 @@ abstract class Migrator extends Command<Map<Uri, String>> {
6868
Map<Uri, String> run() {
6969
var allMigrated = <Uri, String>{};
7070
var importer = FilesystemImporter('.');
71-
var importCache = ImportCache(
72-
importers: [NodeModulesImporter()],
73-
loadPaths: globalResults!['load-path']);
71+
var importCache = ImportCache(importers: [
72+
NodeModulesImporter(),
73+
for (var item in globalResults!['pkg-importer'] as List<String>)
74+
if (item == 'node') NodePackageImporter('.')
75+
], loadPaths: globalResults!['load-path']);
7476

7577
var entrypoints = [
7678
for (var argument in argResults!.rest)

lib/src/migrators/module/reference_source.dart

+2-2
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,8 @@ class ImportSource extends ReferenceSource {
4949
/// Returns the preferred namespace to use for this module, based on
5050
/// [originalRuleUrl].
5151
String get preferredNamespace {
52-
var path = url.path;
53-
var basename = p.url.basenameWithoutExtension(url.path);
52+
var path = (originalRuleUrl ?? url).path;
53+
var basename = p.url.basenameWithoutExtension(path);
5454
if (basename == 'index' || basename == '_index') path = p.url.dirname(path);
5555
return namespaceForPath(path);
5656
}

lib/src/runner.dart

+7-1
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,12 @@ import 'dart:isolate';
99
import 'package:args/args.dart';
1010
import 'package:args/command_runner.dart';
1111
import 'package:path/path.dart' as p;
12-
import 'package:sass_migrator/src/migrators/color.dart';
1312
import 'package:source_span/source_span.dart';
1413
import 'package:term_glyph/term_glyph.dart' as glyph;
1514

1615
import 'io.dart';
1716
import 'migrators/calc_interpolation.dart';
17+
import 'migrators/color.dart';
1818
import 'migrators/division.dart';
1919
import 'migrators/module.dart';
2020
import 'migrators/namespace.dart';
@@ -42,6 +42,12 @@ class MigratorRunner extends CommandRunner<Map<Uri, String>> {
4242
abbr: 'd',
4343
help: 'Migrate dependencies in addition to entrypoints.',
4444
negatable: false)
45+
..addMultiOption('pkg-importer',
46+
abbr: 'p',
47+
valueHelp: 'TYPE',
48+
allowed: ['node'],
49+
help: 'Built-in importer(s) to use for pkg: URLs.',
50+
allowedHelp: {'node': 'Load files like Node.js package resolution.'})
4551
..addFlag('dry-run',
4652
abbr: 'n',
4753
help: 'Show which files would be migrated but make no changes.',

pubspec.yaml

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name: sass_migrator
2-
version: 2.2.1
2+
version: 2.3.0
33
description: A tool for running migrations on Sass files
44
homepage: https://github.com/sass/migrator
55

@@ -17,7 +17,7 @@ dependencies:
1717
node_interop: ^2.0.2
1818
node_io: ^2.3.0
1919
path: ^1.8.0
20-
sass_api: ^14.1.0
20+
sass_api: ^14.4.0
2121
source_span: ^1.8.1
2222
stack_trace: ^1.10.0
2323
string_scanner: ^1.1.0
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
<==> arguments
2+
--migrate-deps --pkg-importer=node
3+
4+
<==> input/entrypoint.scss
5+
@import "pkg:module";
6+
7+
a {
8+
color: $variable;
9+
}
10+
11+
<==> input/node_modules/module/styles/index.scss
12+
$variable: green;
13+
14+
<==> input/node_modules/module/package.json
15+
{
16+
"exports": {
17+
"sass": "./styles/index.scss"
18+
}
19+
}
20+
21+
<==> output/entrypoint.scss
22+
@use "pkg:module";
23+
24+
a {
25+
color: module.$variable;
26+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<==> arguments
2+
--migrate-deps --pkg-importer=node
3+
4+
<==> input/entrypoint.scss
5+
@import "pkg:module/foo";
6+
7+
a {
8+
color: $variable;
9+
}
10+
11+
<==> input/node_modules/module/styles/test.scss
12+
$variable: green;
13+
14+
<==> input/node_modules/module/package.json
15+
{
16+
"exports": {
17+
"./foo.scss": {
18+
"sass": "./styles/test.scss"
19+
}
20+
}
21+
}
22+
23+
<==> output/entrypoint.scss
24+
@use "pkg:module/foo";
25+
26+
a {
27+
color: foo.$variable;
28+
}

0 commit comments

Comments
 (0)