Skip to content

Commit f35e116

Browse files
committed
Merge pull request #28 from css-modules/feature/constants
Values!
2 parents 51e34f3 + bf24ee6 commit f35e116

File tree

11 files changed

+115
-23
lines changed

11 files changed

+115
-23
lines changed

package.json

+14-12
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,33 @@
11
{
22
"name": "css-modules-loader-core",
3-
"version": "0.0.12",
3+
"version": "1.0.0-beta4",
44
"description": "A loader-agnostic CSS Modules implementation, based on PostCSS",
55
"main": "lib/index.js",
66
"directories": {
77
"test": "test"
88
},
99
"dependencies": {
10-
"postcss": "^4.1.11",
11-
"postcss-modules-extract-imports": "^0.0.5",
12-
"postcss-modules-local-by-default": "^0.0.9",
13-
"postcss-modules-scope": "^0.0.8"
10+
"icss-replace-symbols": "1.0.2",
11+
"postcss": "5.0.10",
12+
"postcss-modules-values": "1.1.0",
13+
"postcss-modules-extract-imports": "1.0.0",
14+
"postcss-modules-local-by-default": "1.0.0",
15+
"postcss-modules-scope": "1.0.0"
1416
},
1517
"devDependencies": {
16-
"babel": "^5.5.4",
17-
"babel-eslint": "^3.1.14",
18-
"babelify": "^6.1.2",
19-
"chokidar-cli": "^0.2.1",
20-
"eslint": "^0.22.1",
21-
"mocha": "^2.2.5"
18+
"babel": "5.8.23",
19+
"babel-eslint": "4.1.3",
20+
"babelify": "6.3.0",
21+
"chokidar-cli": "1.1.0",
22+
"eslint": "1.7.2",
23+
"mocha": "2.3.3"
2224
},
2325
"scripts": {
2426
"lint": "eslint src",
2527
"build": "babel --out-dir lib src",
2628
"autotest": "chokidar src test -c 'npm test'",
2729
"test": "mocha --compilers js:babel/register",
28-
"prepublish": "npm run build"
30+
"prepublish": "rm -rf lib/* && npm run build"
2931
},
3032
"repository": {
3133
"type": "git",

src/index.js

+5-3
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import postcss from 'postcss'
22
import localByDefault from 'postcss-modules-local-by-default'
33
import extractImports from 'postcss-modules-extract-imports'
44
import scope from 'postcss-modules-scope'
5+
import values from 'postcss-modules-values'
56

67
import Parser from './parser'
78

@@ -21,9 +22,10 @@ export default class Core {
2122
}
2223
}
2324

24-
25-
// These three plugins are aliased under this package for simplicity.
25+
// These four plugins are aliased under this package for simplicity.
26+
Core.values = values
2627
Core.localByDefault = localByDefault
2728
Core.extractImports = extractImports
2829
Core.scope = scope
29-
Core.defaultPlugins = [localByDefault, extractImports, scope]
30+
31+
Core.defaultPlugins = [values, localByDefault, extractImports, scope]

src/parser.js

+4-7
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
const importRegexp = /^:import\((.+)\)$/
2+
import replaceSymbols from 'icss-replace-symbols'
23

34
export default class Parser {
45
constructor( pathFetcher, trace ) {
@@ -26,11 +27,7 @@ export default class Parser {
2627
}
2728

2829
linkImportedSymbols( css ) {
29-
css.eachDecl( decl => {
30-
Object.keys(this.translations).forEach( translation => {
31-
decl.value = decl.value.replace(translation, this.translations[translation])
32-
} )
33-
})
30+
replaceSymbols(css, this.translations)
3431
}
3532

3633
extractExports( css ) {
@@ -48,7 +45,7 @@ export default class Parser {
4845
this.exportTokens[decl.prop] = decl.value
4946
}
5047
} )
51-
exportNode.removeSelf()
48+
exportNode.remove()
5249
}
5350

5451
fetchImport( importNode, relativeTo, depNr ) {
@@ -60,7 +57,7 @@ export default class Parser {
6057
this.translations[decl.prop] = exports[decl.value]
6158
}
6259
} )
63-
importNode.removeSelf()
60+
importNode.remove()
6461
}, err => console.log( err ) )
6562
}
6663
}
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
{
2-
"a": "_multiple_dependencies_source__a _multiple_dependencies_b__b1 _multiple_dependencies_d__d1 _multiple_dependencies_d__d2 _multiple_dependencies_b__b2 _multiple_dependencies_c__c"
2+
"a": "_multiple_dependencies_source__a _multiple_dependencies_b__b1 _multiple_dependencies_d__d1 _multiple_dependencies_d__d2 _multiple_dependencies_b__b2 _multiple_dependencies_c__c something-global"
33
}
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
.a {
22
composes: b1 b2 from "./b.css";
33
composes: c from "./c.css";
4+
composes: something-global from global;
45
color: #aaa;
56
}
67

test/test-cases/values/borders.css

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
.dashed {
2+
border: 4px dashed;
3+
}
+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
@value small (max-width: 599px);
2+
@value medium (min-width: 600px) and (max-width: 959px);
3+
@value large (min-width: 960px);

test/test-cases/values/colors.css

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
@value primary: #f01;
2+
@value secondary: #2f2;
3+
4+
.text-primary {
5+
color: primary;
6+
}
7+
.bg-primary {
8+
background-color: primary;
9+
}
10+
11+
.text-secondary {
12+
color: secondary;
13+
}
14+
.bg-secondary {
15+
background-color: secondary;
16+
}

test/test-cases/values/expected.css

+35
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
._values_borders__dashed {
2+
border: 4px dashed;
3+
}
4+
5+
._values_colors__text-primary {
6+
color: #f01;
7+
}
8+
._values_colors__bg-primary {
9+
background-color: #f01;
10+
}
11+
12+
._values_colors__text-secondary {
13+
color: #2f2;
14+
}
15+
._values_colors__bg-secondary {
16+
background-color: #2f2;
17+
}
18+
/* Imports without a "from" are just passed through */
19+
@import url('./old-skool.css');
20+
21+
._values_source__foo {
22+
box-shadow: 0 0 10px #f01;
23+
border-color: #2f2;
24+
}
25+
26+
@media (max-width: 599px) {
27+
._values_source__foo {
28+
background: white;
29+
}
30+
}
31+
@media (min-width: 600px) and (max-width: 959px) {
32+
._values_source__foo {
33+
background: peru;
34+
}
35+
}

test/test-cases/values/expected.json

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{
2+
"borders": "\"./borders.css\"",
3+
"breakpoints": "\"./breakpoints.css\"",
4+
"small": "(max-width: 599px)",
5+
"medium": "(min-width: 600px) and (max-width: 959px)",
6+
"secondary": "#2f2",
7+
"blue": "#f01",
8+
"foo": "_values_source__foo _values_borders__dashed _values_colors__text-secondary"
9+
}

test/test-cases/values/source.css

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
@value borders: "./borders.css", breakpoints: "./breakpoints.css";
2+
@value small, medium from breakpoints;
3+
@value secondary, primary as blue from "./colors.css";
4+
5+
/* Imports without a "from" are just passed through */
6+
@import url('./old-skool.css');
7+
8+
.foo {
9+
composes: dashed from borders;
10+
composes: text-secondary from "./colors.css";
11+
box-shadow: 0 0 10px blue;
12+
border-color: secondary;
13+
}
14+
15+
@media small {
16+
.foo {
17+
background: white;
18+
}
19+
}
20+
@media medium {
21+
.foo {
22+
background: peru;
23+
}
24+
}

0 commit comments

Comments
 (0)