From e7797e7a0da48adab5538c08429d18ca5f958405 Mon Sep 17 00:00:00 2001 From: Glen Maddern Date: Thu, 4 Jun 2015 10:02:36 +1000 Subject: [PATCH 01/82] drop the usage of the ES6 Set --- package.json | 2 +- src/file-system-loader.js | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/package.json b/package.json index 3d240e3..28386ab 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "css-modules-loader-core", - "version": "0.0.3", + "version": "0.0.4", "description": "A loader-agnostic CSS Modules implementation, based on PostCSS", "main": "lib/index.js", "directories": { diff --git a/src/file-system-loader.js b/src/file-system-loader.js index 24bdc72..d2d9983 100644 --- a/src/file-system-loader.js +++ b/src/file-system-loader.js @@ -23,7 +23,6 @@ export default class FileSystemLoader { constructor( root ) { this.root = root this.sources = {} - this.seenPaths = new Set() this.importNr = 0 } From 9f6aa0b5771bb421dfea0c51c2856b8b3730d18a Mon Sep 17 00:00:00 2001 From: Glen Maddern Date: Thu, 4 Jun 2015 11:22:43 +1000 Subject: [PATCH 02/82] bumped dependencies and things pass once more! --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 28386ab..36dcf5e 100644 --- a/package.json +++ b/package.json @@ -10,11 +10,11 @@ "postcss": "^4.1.11", "postcss-modules-extract-imports": "0.0.2", "postcss-modules-local-by-default": "0.0.7", - "postcss-modules-scope": "0.0.3" + "postcss-modules-scope": "0.0.4" }, "devDependencies": { "babel": "^5.4.7", - "babel-eslint": "^3.1.9", + "babel-eslint": "^3.1.11", "babelify": "^6.1.2", "chokidar-cli": "^0.2.1", "eslint": "^0.22.1", From 219785354899efaf4f456bb075553bc50b86f95d Mon Sep 17 00:00:00 2001 From: Glen Maddern Date: Thu, 4 Jun 2015 11:23:26 +1000 Subject: [PATCH 03/82] actually bumped version; --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 36dcf5e..a4ff9e7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "css-modules-loader-core", - "version": "0.0.4", + "version": "0.0.5", "description": "A loader-agnostic CSS Modules implementation, based on PostCSS", "main": "lib/index.js", "directories": { From fe90ee73cca595fae7056a006f4c84ea0a5fbec2 Mon Sep 17 00:00:00 2001 From: Glen Maddern Date: Thu, 4 Jun 2015 11:38:46 +1000 Subject: [PATCH 04/82] added travis --- .travis.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..5737015 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,5 @@ +language: node_js +node_js: + - "0.12" + - "0.10" + - "iojs" From cd052192e6fcae185e76f8c2d4d24ca8ca4bf8d1 Mon Sep 17 00:00:00 2001 From: Glen Maddern Date: Thu, 4 Jun 2015 11:42:33 +1000 Subject: [PATCH 05/82] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 8bc5622..69c6958 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,8 @@ # CSS Module Loader Core > A loader-agnostic CSS Modules implementation, based on PostCSS +[![Build Status](https://travis-ci.org/css-modules/css-modules-loader-core.svg?branch=master)](https://travis-ci.org/css-modules/css-modules-loader-core) + ## API ### core.load( sourceString , sourcePath , pathFetcher ) =>
  Promise({ injectableSource, exportTokens }) From 25f3cc0911abb23ab39261d2aecc7e179d905ac2 Mon Sep 17 00:00:00 2001 From: Glen Maddern Date: Fri, 5 Jun 2015 16:41:15 +1000 Subject: [PATCH 06/82] added a test for the cssi format explicity --- test/cssi/interchange-format/colors.css | 7 +++++++ test/cssi/interchange-format/expected.css | 8 ++++++++ test/cssi/interchange-format/expected.json | 3 +++ test/cssi/interchange-format/source.css | 11 +++++++++++ 4 files changed, 29 insertions(+) create mode 100644 test/cssi/interchange-format/colors.css create mode 100644 test/cssi/interchange-format/expected.css create mode 100644 test/cssi/interchange-format/expected.json create mode 100644 test/cssi/interchange-format/source.css diff --git a/test/cssi/interchange-format/colors.css b/test/cssi/interchange-format/colors.css new file mode 100644 index 0000000..07e0229 --- /dev/null +++ b/test/cssi/interchange-format/colors.css @@ -0,0 +1,7 @@ +:export { + blackShadow: _single_import_export_source__localName; +} + +._single_import_export_colors__blackShadow { + box-shadow: 0 0 10px -2px black; +} diff --git a/test/cssi/interchange-format/expected.css b/test/cssi/interchange-format/expected.css new file mode 100644 index 0000000..81b058d --- /dev/null +++ b/test/cssi/interchange-format/expected.css @@ -0,0 +1,8 @@ + +._single_import_export_colors__blackShadow { + box-shadow: 0 0 10px -2px black; +} + +._single_import_export_source__localName { + color: red; +} diff --git a/test/cssi/interchange-format/expected.json b/test/cssi/interchange-format/expected.json new file mode 100644 index 0000000..35b62eb --- /dev/null +++ b/test/cssi/interchange-format/expected.json @@ -0,0 +1,3 @@ +{ + "localName": "_single_import_export_source__localName _single_import_export_colors__blackShadow" +} diff --git a/test/cssi/interchange-format/source.css b/test/cssi/interchange-format/source.css new file mode 100644 index 0000000..19d0f51 --- /dev/null +++ b/test/cssi/interchange-format/source.css @@ -0,0 +1,11 @@ +:imports("./colors.css") { + __tmp_import_djhgdsag: blackShadow; +} + +:exports { + localName: _single_import_export_source__localName __tmp_import_djhgdsag; +} + +._single_import_export_source__localName { + color: red; +} From 049d2d87fce71d1298ea37e46044a54fdd0f8aa2 Mon Sep 17 00:00:00 2001 From: Glen Maddern Date: Fri, 5 Jun 2015 16:42:14 +1000 Subject: [PATCH 07/82] got that first test running --- src/file-system-loader.js | 5 +++-- src/index.js | 23 +++++++++++------------ test/test-cases.js | 37 ++++++++++++++++++++++--------------- 3 files changed, 36 insertions(+), 29 deletions(-) diff --git a/src/file-system-loader.js b/src/file-system-loader.js index d2d9983..7afcef1 100644 --- a/src/file-system-loader.js +++ b/src/file-system-loader.js @@ -20,10 +20,11 @@ const traceKeySorter = ( a, b ) => { }; export default class FileSystemLoader { - constructor( root ) { + constructor( root, plugins ) { this.root = root this.sources = {} this.importNr = 0 + this.core = new Core(plugins) } fetch( _newPath, relativeTo, _trace ) { @@ -35,7 +36,7 @@ export default class FileSystemLoader { fs.readFile( fileRelativePath, "utf-8", ( err, source ) => { if ( err ) reject( err ) - Core.load( source, rootRelativePath, trace, this.fetch.bind( this ) ) + this.core.load( source, rootRelativePath, trace, this.fetch.bind( this ) ) .then( ( { injectableSource, exportTokens } ) => { this.sources[trace] = injectableSource resolve( exportTokens ) diff --git a/src/index.js b/src/index.js index a0dc57b..f5994ef 100644 --- a/src/index.js +++ b/src/index.js @@ -5,18 +5,10 @@ import scope from 'postcss-modules-scope' import Parser from './parser' -export default { - // These three plugins are aliased under this package for simplicity. - localByDefault, - extractImports, - scope, - - // The default set of plugins - plugins: [ - localByDefault, - extractImports, - scope - ], +export default class Core { + constructor( plugins ) { + this.plugins = plugins || Core.defaultPlugins + } load( sourceString, sourcePath, trace, pathFetcher ) { let parser = new Parser( pathFetcher, trace ) @@ -28,3 +20,10 @@ export default { } ) } } + + +// These three plugins are aliased under this package for simplicity. +Core.localByDefault = localByDefault +Core.extractImports = extractImports +Core.scope = scope +Core.defaultPlugins = [localByDefault, extractImports, scope] diff --git a/test/test-cases.js b/test/test-cases.js index 616c01b..a457e87 100644 --- a/test/test-cases.js +++ b/test/test-cases.js @@ -9,19 +9,26 @@ let normalize = ( str ) => { return str.replace( /\r\n?/g, "\n" ); } -describe( "test-cases", () => { - let testDir = path.join( __dirname, "test-cases" ) - fs.readdirSync( testDir ).forEach( testCase => { - if ( fs.existsSync( path.join( testDir, testCase, "source.css" ) ) ) { - it( "should " + testCase.replace( /-/g, " " ), done => { - let expected = normalize( fs.readFileSync( path.join( testDir, testCase, "expected.css" ), "utf-8" ) ) - let loader = new FileSystemLoader( testDir ) - let expectedTokens = JSON.parse( fs.readFileSync( path.join( testDir, testCase, "expected.json" ), "utf-8" ) ) - loader.fetch( `${testCase}/source.css`, "/" ).then( tokens => { - assert.equal( loader.finalSource, expected ) - assert.equal( JSON.stringify( tokens ), JSON.stringify( expectedTokens ) ) - } ).then( done, done ) - } ); - } +const pipelines = { + "test-cases": undefined, + "cssi": [] +} + +Object.keys( pipelines ).forEach( dirname => { + describe( dirname, () => { + let testDir = path.join( __dirname, dirname ) + fs.readdirSync( testDir ).forEach( testCase => { + if ( fs.existsSync( path.join( testDir, testCase, "source.css" ) ) ) { + it( "should " + testCase.replace( /-/g, " " ), done => { + let expected = normalize( fs.readFileSync( path.join( testDir, testCase, "expected.css" ), "utf-8" ) ) + let loader = new FileSystemLoader( testDir, pipelines[dirname] ) + let expectedTokens = JSON.parse( fs.readFileSync( path.join( testDir, testCase, "expected.json" ), "utf-8" ) ) + loader.fetch( `${testCase}/source.css`, "/" ).then( tokens => { + assert.equal( loader.finalSource, expected ) + assert.equal( JSON.stringify( tokens ), JSON.stringify( expectedTokens ) ) + } ).then( done, done ) + } ); + } + } ); } ); -} ); +} ) From 1b08b3e96cd738bf476290d47ce63a139974e150 Mon Sep 17 00:00:00 2001 From: Glen Maddern Date: Fri, 5 Jun 2015 17:07:47 +1000 Subject: [PATCH 08/82] simple interchange format test passing --- test/cssi/interchange-format/expected.css | 2 -- test/cssi/interchange-format/expected.json | 2 +- test/cssi/interchange-format/source.css | 4 ++-- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/test/cssi/interchange-format/expected.css b/test/cssi/interchange-format/expected.css index 81b058d..7dac9a4 100644 --- a/test/cssi/interchange-format/expected.css +++ b/test/cssi/interchange-format/expected.css @@ -1,8 +1,6 @@ - ._single_import_export_colors__blackShadow { box-shadow: 0 0 10px -2px black; } - ._single_import_export_source__localName { color: red; } diff --git a/test/cssi/interchange-format/expected.json b/test/cssi/interchange-format/expected.json index 35b62eb..a12c901 100644 --- a/test/cssi/interchange-format/expected.json +++ b/test/cssi/interchange-format/expected.json @@ -1,3 +1,3 @@ { - "localName": "_single_import_export_source__localName _single_import_export_colors__blackShadow" + "localName": "_single_import_export_source__localName __tmp_import_djhgdsag" } diff --git a/test/cssi/interchange-format/source.css b/test/cssi/interchange-format/source.css index 19d0f51..ae44e5e 100644 --- a/test/cssi/interchange-format/source.css +++ b/test/cssi/interchange-format/source.css @@ -1,8 +1,8 @@ -:imports("./colors.css") { +:import("./colors.css") { __tmp_import_djhgdsag: blackShadow; } -:exports { +:export { localName: _single_import_export_source__localName __tmp_import_djhgdsag; } From 84c37f03c38db3754396088af40810675404b949 Mon Sep 17 00:00:00 2001 From: Glen Maddern Date: Sun, 7 Jun 2015 13:07:03 +1000 Subject: [PATCH 09/82] got replacement working in the CSSI tests, breaks the others --- src/parser.js | 11 ++++++++++- test/cssi/interchange-format/colors.css | 4 ++-- test/cssi/interchange-format/expected.css | 4 ++-- test/cssi/interchange-format/expected.json | 2 +- test/cssi/interchange-format/source.css | 6 +++--- test/cssi/pseudo-variables/colors.css | 4 ++++ test/cssi/pseudo-variables/expected.css | 5 +++++ test/cssi/pseudo-variables/expected.json | 3 +++ test/cssi/pseudo-variables/source.css | 13 +++++++++++++ 9 files changed, 43 insertions(+), 9 deletions(-) create mode 100644 test/cssi/pseudo-variables/colors.css create mode 100644 test/cssi/pseudo-variables/expected.css create mode 100644 test/cssi/pseudo-variables/expected.json create mode 100644 test/cssi/pseudo-variables/source.css diff --git a/src/parser.js b/src/parser.js index e28f199..536e9cd 100644 --- a/src/parser.js +++ b/src/parser.js @@ -11,6 +11,7 @@ export default class Parser { plugin( css, result ) { return Promise.all( this.fetchAllImports( css ) ) + .then( _ => this.linkImportedSymbols( css ) ) .then( _ => this.extractExports( css ) ) } @@ -24,6 +25,14 @@ export default class Parser { return imports } + linkImportedSymbols( css ) { + css.eachDecl( decl => { + Object.keys(this.translations).forEach( translation => { + decl.value = decl.value.replace(translation, this.translations[translation]) + } ) + }) + } + extractExports( css ) { css.each( node => { if ( node.type == "rule" && node.selector == ":export" ) this.handleExport( node ) @@ -48,7 +57,7 @@ export default class Parser { return this.pathFetcher( file, relativeTo, depTrace ).then( exports => { importNode.each( decl => { if ( decl.type == 'decl' ) { - this.translations[decl.value] = exports[decl.prop] + this.translations[decl.prop] = exports[decl.value] } } ) importNode.removeSelf() diff --git a/test/cssi/interchange-format/colors.css b/test/cssi/interchange-format/colors.css index 07e0229..4057aae 100644 --- a/test/cssi/interchange-format/colors.css +++ b/test/cssi/interchange-format/colors.css @@ -1,7 +1,7 @@ :export { - blackShadow: _single_import_export_source__localName; + blackShadow: x__single_import_export_colors__blackShadow; } -._single_import_export_colors__blackShadow { +.x__single_import_export_colors__blackShadow { box-shadow: 0 0 10px -2px black; } diff --git a/test/cssi/interchange-format/expected.css b/test/cssi/interchange-format/expected.css index 7dac9a4..36f1092 100644 --- a/test/cssi/interchange-format/expected.css +++ b/test/cssi/interchange-format/expected.css @@ -1,6 +1,6 @@ -._single_import_export_colors__blackShadow { +.x__single_import_export_colors__blackShadow { box-shadow: 0 0 10px -2px black; } -._single_import_export_source__localName { +.x__single_import_export_source__localName { color: red; } diff --git a/test/cssi/interchange-format/expected.json b/test/cssi/interchange-format/expected.json index a12c901..43311c7 100644 --- a/test/cssi/interchange-format/expected.json +++ b/test/cssi/interchange-format/expected.json @@ -1,3 +1,3 @@ { - "localName": "_single_import_export_source__localName __tmp_import_djhgdsag" + "localName": "x__single_import_export_source__localName x__single_import_export_colors__blackShadow" } diff --git a/test/cssi/interchange-format/source.css b/test/cssi/interchange-format/source.css index ae44e5e..d7125a0 100644 --- a/test/cssi/interchange-format/source.css +++ b/test/cssi/interchange-format/source.css @@ -1,11 +1,11 @@ :import("./colors.css") { - __tmp_import_djhgdsag: blackShadow; + i__tmp_import_djhgdsag: blackShadow; } :export { - localName: _single_import_export_source__localName __tmp_import_djhgdsag; + localName: x__single_import_export_source__localName i__tmp_import_djhgdsag; } -._single_import_export_source__localName { +.x__single_import_export_source__localName { color: red; } diff --git a/test/cssi/pseudo-variables/colors.css b/test/cssi/pseudo-variables/colors.css new file mode 100644 index 0000000..3ac72d9 --- /dev/null +++ b/test/cssi/pseudo-variables/colors.css @@ -0,0 +1,4 @@ +:export { + black: #222; + white: #ddd; +} diff --git a/test/cssi/pseudo-variables/expected.css b/test/cssi/pseudo-variables/expected.css new file mode 100644 index 0000000..371497c --- /dev/null +++ b/test/cssi/pseudo-variables/expected.css @@ -0,0 +1,5 @@ + +.x__lol { + color: #222; + background: #ddd; +} diff --git a/test/cssi/pseudo-variables/expected.json b/test/cssi/pseudo-variables/expected.json new file mode 100644 index 0000000..b8c3c23 --- /dev/null +++ b/test/cssi/pseudo-variables/expected.json @@ -0,0 +1,3 @@ +{ + "lol": "x__lol" +} diff --git a/test/cssi/pseudo-variables/source.css b/test/cssi/pseudo-variables/source.css new file mode 100644 index 0000000..cc4b95a --- /dev/null +++ b/test/cssi/pseudo-variables/source.css @@ -0,0 +1,13 @@ +:import("./colors.css") { + i__black: black; + i__white: white; +} + +:export { + lol: x__lol; +} + +.x__lol { + color: i__black; + background: i__white; +} From c60dba6838da9f11c892e97ecd60e2bffbdd38ee Mon Sep 17 00:00:00 2001 From: Glen Maddern Date: Sun, 7 Jun 2015 13:36:06 +1000 Subject: [PATCH 10/82] pulling in new extract-importer --- package.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index a4ff9e7..5740dfb 100644 --- a/package.json +++ b/package.json @@ -8,13 +8,13 @@ }, "dependencies": { "postcss": "^4.1.11", - "postcss-modules-extract-imports": "0.0.2", - "postcss-modules-local-by-default": "0.0.7", - "postcss-modules-scope": "0.0.4" + "postcss-modules-extract-imports": "0.0.3", + "postcss-modules-local-by-default": "^0.0.7", + "postcss-modules-scope": "^0.0.4" }, "devDependencies": { - "babel": "^5.4.7", - "babel-eslint": "^3.1.11", + "babel": "^5.5.4", + "babel-eslint": "^3.1.14", "babelify": "^6.1.2", "chokidar-cli": "^0.2.1", "eslint": "^0.22.1", From a578d0e44270be94798d106334622d631552d98e Mon Sep 17 00:00:00 2001 From: Glen Maddern Date: Sun, 7 Jun 2015 14:00:26 +1000 Subject: [PATCH 11/82] brought in latest postcss-modules-scope --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 5740dfb..3ff1f53 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ "postcss": "^4.1.11", "postcss-modules-extract-imports": "0.0.3", "postcss-modules-local-by-default": "^0.0.7", - "postcss-modules-scope": "^0.0.4" + "postcss-modules-scope": "^0.0.5" }, "devDependencies": { "babel": "^5.5.4", From 8ea4b6e2263dee56c9d7cdc5d22275b604f7d213 Mon Sep 17 00:00:00 2001 From: Glen Maddern Date: Sun, 7 Jun 2015 14:00:55 +1000 Subject: [PATCH 12/82] changing extends to composes and everything is passing! --- test/test-cases/multiple-dependencies/b.css | 2 +- test/test-cases/multiple-dependencies/source.css | 4 ++-- test/test-cases/single-import-export/source.css | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/test/test-cases/multiple-dependencies/b.css b/test/test-cases/multiple-dependencies/b.css index 859eda9..c4dcd92 100644 --- a/test/test-cases/multiple-dependencies/b.css +++ b/test/test-cases/multiple-dependencies/b.css @@ -1,4 +1,4 @@ .b { - extends: d from "./d.css"; + composes: d from "./d.css"; color: #bbb; } diff --git a/test/test-cases/multiple-dependencies/source.css b/test/test-cases/multiple-dependencies/source.css index 72e7221..ee0c9d9 100644 --- a/test/test-cases/multiple-dependencies/source.css +++ b/test/test-cases/multiple-dependencies/source.css @@ -1,6 +1,6 @@ .a { - extends: b from "./b.css"; - extends: c from "./c.css"; + composes: b from "./b.css"; + composes: c from "./c.css"; color: #aaa; } diff --git a/test/test-cases/single-import-export/source.css b/test/test-cases/single-import-export/source.css index 2b196fb..e2df5ca 100644 --- a/test/test-cases/single-import-export/source.css +++ b/test/test-cases/single-import-export/source.css @@ -1,4 +1,4 @@ .localName { - extends: blackShadow from "./colors.css"; + composes: blackShadow from "./colors.css"; color: red; } From b19de0b9dcc5f9edf45b547c8125d703e198984e Mon Sep 17 00:00:00 2001 From: Glen Maddern Date: Sun, 7 Jun 2015 14:02:48 +1000 Subject: [PATCH 13/82] updating readme --- README.md | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 8bc5622..9b47dc5 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,11 @@ ## API +```js +import Core from 'css-modules-loader-core' +let core = new Core() +``` + ### core.load( sourceString , sourcePath , pathFetcher ) =>
  Promise({ injectableSource, exportTokens }) Processes the input CSS `sourceString`, looking for dependencies such as `@import` or `:import`. Any localisation will happen by prefixing a sanitised version of `sourcePath` When dependencies are found, it will ask the `pathFetcher` for each dependency, resolve & inline any imports, and return the following object: @@ -12,22 +17,21 @@ Processes the input CSS `sourceString`, looking for dependencies such as `@impor These should map nicely to what your build-tool-specific loader needs to do its job. -### core.plugins = pluginArray +### new Core([plugins]) The default set of plugins is [[postcss-modules-local-by-default](https://github.com/css-modules/postcss-modules-local-by-default), [postcss-modules-extract-imports](https://github.com/css-modules/postcss-modules-extract-imports), [postcss-modules-scope](https://github.com/css-modules/postcss-modules-scope)] (i.e. the CSS Modules specification). This can override which PostCSS plugins you wish to execute, e.g. ```js -import core from 'css-loader-core' +import Core from 'css-loader-core' import autoprefixer from 'autoprefixer' import colorFunctions from 'postcss-color-function' // Don't run local-by-default, but use colorFunctions // beforehand and autoprefixer afterwards: -core.plugins = [ +let core = new Core([ colorFunctions, core.plugins.extractImports, core.plugins.scope, autoprefixer("Last 2 Versions") -] +]) ``` - From eef3868b685bd5d668eeaa87b1a982e685df77e1 Mon Sep 17 00:00:00 2001 From: Glen Maddern Date: Sun, 7 Jun 2015 14:04:58 +1000 Subject: [PATCH 14/82] version bump --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 3ff1f53..083fe8e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "css-modules-loader-core", - "version": "0.0.5", + "version": "0.0.6", "description": "A loader-agnostic CSS Modules implementation, based on PostCSS", "main": "lib/index.js", "directories": { From bbcce9e10e92f851b5ec6787b5b3651e4429d87b Mon Sep 17 00:00:00 2001 From: Ryan Tsao Date: Mon, 8 Jun 2015 21:09:43 -0700 Subject: [PATCH 15/82] Fixed relative paths --- src/file-system-loader.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/file-system-loader.js b/src/file-system-loader.js index 7afcef1..98c1d4f 100644 --- a/src/file-system-loader.js +++ b/src/file-system-loader.js @@ -31,8 +31,9 @@ export default class FileSystemLoader { let newPath = _newPath.replace( /^["']|["']$/g, "" ), trace = _trace || String.fromCharCode( this.importNr++ ) return new Promise( ( resolve, reject ) => { - let rootRelativePath = path.resolve( path.dirname( relativeTo ), newPath ), - fileRelativePath = this.root + rootRelativePath + let relativeDir = path.dirname( relativeTo ), + rootRelativePath = path.resolve( relativeDir, newPath ), + fileRelativePath = path.resolve( path.join( this.root, relativeDir ), newPath ) fs.readFile( fileRelativePath, "utf-8", ( err, source ) => { if ( err ) reject( err ) From ba5de86a9faf76a35fb0268123a10f0208549029 Mon Sep 17 00:00:00 2001 From: Glen Maddern Date: Tue, 9 Jun 2015 14:43:01 +1000 Subject: [PATCH 16/82] 0.0.7 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 083fe8e..cc44cf4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "css-modules-loader-core", - "version": "0.0.6", + "version": "0.0.7", "description": "A loader-agnostic CSS Modules implementation, based on PostCSS", "main": "lib/index.js", "directories": { From aa6b2ca6d4bdeed947a5713573ff0c30be845195 Mon Sep 17 00:00:00 2001 From: Glen Maddern Date: Thu, 11 Jun 2015 16:30:28 +1000 Subject: [PATCH 17/82] for some reason multiple imports work here --- test/test-cases/localise-export/expected.css | 1 - test/test-cases/multiple-dependencies/expected.css | 4 ---- test/test-cases/simple-export/expected.css | 1 - test/test-cases/single-import-export/colors.css | 4 ++++ test/test-cases/single-import-export/expected.css | 4 +++- test/test-cases/single-import-export/expected.json | 2 +- test/test-cases/single-import-export/source.css | 2 +- 7 files changed, 9 insertions(+), 9 deletions(-) diff --git a/test/test-cases/localise-export/expected.css b/test/test-cases/localise-export/expected.css index f09dca6..c4be0d9 100644 --- a/test/test-cases/localise-export/expected.css +++ b/test/test-cases/localise-export/expected.css @@ -1,4 +1,3 @@ - ._localise_export_source__one { color: red; } diff --git a/test/test-cases/multiple-dependencies/expected.css b/test/test-cases/multiple-dependencies/expected.css index 7b81d2a..8d46eb4 100644 --- a/test/test-cases/multiple-dependencies/expected.css +++ b/test/test-cases/multiple-dependencies/expected.css @@ -1,16 +1,12 @@ - ._multiple_dependencies_d__d { color: #ddd; } - ._multiple_dependencies_b__b { color: #bbb; } - ._multiple_dependencies_c__c { color: #ccc; } - ._multiple_dependencies_source__a { color: #aaa; } diff --git a/test/test-cases/simple-export/expected.css b/test/test-cases/simple-export/expected.css index 471585d..2f8e4da 100644 --- a/test/test-cases/simple-export/expected.css +++ b/test/test-cases/simple-export/expected.css @@ -1,4 +1,3 @@ - ._simple_export_source__localName { color: red; } diff --git a/test/test-cases/single-import-export/colors.css b/test/test-cases/single-import-export/colors.css index 334426e..a7c1ce1 100644 --- a/test/test-cases/single-import-export/colors.css +++ b/test/test-cases/single-import-export/colors.css @@ -1,3 +1,7 @@ .blackShadow { box-shadow: 0 0 10px -2px black; } + +.redBorder { + border: 1px solid red; +} diff --git a/test/test-cases/single-import-export/expected.css b/test/test-cases/single-import-export/expected.css index 81b058d..74398b2 100644 --- a/test/test-cases/single-import-export/expected.css +++ b/test/test-cases/single-import-export/expected.css @@ -1,8 +1,10 @@ - ._single_import_export_colors__blackShadow { box-shadow: 0 0 10px -2px black; } +._single_import_export_colors__redBorder { + border: 1px solid red; +} ._single_import_export_source__localName { color: red; } diff --git a/test/test-cases/single-import-export/expected.json b/test/test-cases/single-import-export/expected.json index 35b62eb..802cd4e 100644 --- a/test/test-cases/single-import-export/expected.json +++ b/test/test-cases/single-import-export/expected.json @@ -1,3 +1,3 @@ { - "localName": "_single_import_export_source__localName _single_import_export_colors__blackShadow" + "localName": "_single_import_export_source__localName _single_import_export_colors__blackShadow _single_import_export_colors__redBorder" } diff --git a/test/test-cases/single-import-export/source.css b/test/test-cases/single-import-export/source.css index e2df5ca..57dbc17 100644 --- a/test/test-cases/single-import-export/source.css +++ b/test/test-cases/single-import-export/source.css @@ -1,4 +1,4 @@ .localName { - composes: blackShadow from "./colors.css"; + composes: blackShadow redBorder from "./colors.css"; color: red; } From dc1d80eda66c887b84eba48775028167a1e846e2 Mon Sep 17 00:00:00 2001 From: Josh Johnston Date: Thu, 11 Jun 2015 16:44:05 +1000 Subject: [PATCH 18/82] Added a failing test showing duplication of styles when multiple sources compose the same shared style --- test/test-cases.js | 21 +++++++++++++++++++ test/test-cases/multiple-sources/b.css | 4 ++++ test/test-cases/multiple-sources/c.css | 3 +++ test/test-cases/multiple-sources/d.css | 3 +++ test/test-cases/multiple-sources/expected.css | 20 ++++++++++++++++++ .../test-cases/multiple-sources/expected.json | 4 ++++ test/test-cases/multiple-sources/source1.css | 5 +++++ test/test-cases/multiple-sources/source2.css | 4 ++++ 8 files changed, 64 insertions(+) create mode 100644 test/test-cases/multiple-sources/b.css create mode 100644 test/test-cases/multiple-sources/c.css create mode 100644 test/test-cases/multiple-sources/d.css create mode 100644 test/test-cases/multiple-sources/expected.css create mode 100644 test/test-cases/multiple-sources/expected.json create mode 100644 test/test-cases/multiple-sources/source1.css create mode 100644 test/test-cases/multiple-sources/source2.css diff --git a/test/test-cases.js b/test/test-cases.js index a457e87..c6adcff 100644 --- a/test/test-cases.js +++ b/test/test-cases.js @@ -32,3 +32,24 @@ Object.keys( pipelines ).forEach( dirname => { } ); } ); } ) + +// special case for testing multiple sources +describe( 'multiple sources', () => { + let testDir = path.join( __dirname, 'test-cases' ) + let testCase = 'multiple-sources'; + let dirname = 'test-cases'; + if ( fs.existsSync( path.join( testDir, testCase, "source1.css" ) ) ) { + it( "should " + testCase.replace( /-/g, " " ), done => { + let expected = normalize( fs.readFileSync( path.join( testDir, testCase, "expected.css" ), "utf-8" ) ) + let loader = new FileSystemLoader( testDir, pipelines[dirname] ) + let expectedTokens = JSON.parse( fs.readFileSync( path.join( testDir, testCase, "expected.json" ), "utf-8" ) ) + loader.fetch( `${testCase}/source1.css`, "/" ).then( tokens1 => { + loader.fetch( `${testCase}/source2.css`, "/" ).then( tokens2 => { + assert.equal( loader.finalSource, expected ) + const tokens = Object.assign({}, tokens1, tokens2); + assert.equal( JSON.stringify( tokens ), JSON.stringify( expectedTokens ) ) + } ).then( done, done ) + }) + } ); + } +} ); diff --git a/test/test-cases/multiple-sources/b.css b/test/test-cases/multiple-sources/b.css new file mode 100644 index 0000000..c4dcd92 --- /dev/null +++ b/test/test-cases/multiple-sources/b.css @@ -0,0 +1,4 @@ +.b { + composes: d from "./d.css"; + color: #bbb; +} diff --git a/test/test-cases/multiple-sources/c.css b/test/test-cases/multiple-sources/c.css new file mode 100644 index 0000000..e5a7b52 --- /dev/null +++ b/test/test-cases/multiple-sources/c.css @@ -0,0 +1,3 @@ +.c { + color: #ccc; +} diff --git a/test/test-cases/multiple-sources/d.css b/test/test-cases/multiple-sources/d.css new file mode 100644 index 0000000..4638a27 --- /dev/null +++ b/test/test-cases/multiple-sources/d.css @@ -0,0 +1,3 @@ +.d { + color: #ddd; +} diff --git a/test/test-cases/multiple-sources/expected.css b/test/test-cases/multiple-sources/expected.css new file mode 100644 index 0000000..37ca57f --- /dev/null +++ b/test/test-cases/multiple-sources/expected.css @@ -0,0 +1,20 @@ + +._multiple_sources_d__d { + color: #ddd; +} + +._multiple_sources_b__b { + color: #bbb; +} + +._multiple_sources_c__c { + color: #ccc; +} + +._multiple_sources_source1__a { + color: #aaa; +} + +._multiple_sources_source2__foo { + color: #f00; +} diff --git a/test/test-cases/multiple-sources/expected.json b/test/test-cases/multiple-sources/expected.json new file mode 100644 index 0000000..074abf9 --- /dev/null +++ b/test/test-cases/multiple-sources/expected.json @@ -0,0 +1,4 @@ +{ + "a": "_multiple_sources_source1__a _multiple_sources_b__b _multiple_sources_d__d _multiple_sources_c__c", + "foo": "_multiple_sources_source2__foo _multiple_sources_b__b _multiple_sources_d__d" +} diff --git a/test/test-cases/multiple-sources/source1.css b/test/test-cases/multiple-sources/source1.css new file mode 100644 index 0000000..983c7fd --- /dev/null +++ b/test/test-cases/multiple-sources/source1.css @@ -0,0 +1,5 @@ +.a { + composes: b from "./b.css"; + composes: c from "./c.css"; + color: #aaa; +} diff --git a/test/test-cases/multiple-sources/source2.css b/test/test-cases/multiple-sources/source2.css new file mode 100644 index 0000000..151a720 --- /dev/null +++ b/test/test-cases/multiple-sources/source2.css @@ -0,0 +1,4 @@ +.foo { + composes: b from "./b.css"; + color: #f00; +} From a4fe79601e78fa1c0176feedca1d78c1b88d89ae Mon Sep 17 00:00:00 2001 From: Josh Johnston Date: Thu, 11 Jun 2015 16:45:03 +1000 Subject: [PATCH 19/82] simple caching to prevent duplicate styles --- src/file-system-loader.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/file-system-loader.js b/src/file-system-loader.js index 98c1d4f..2f9ab02 100644 --- a/src/file-system-loader.js +++ b/src/file-system-loader.js @@ -25,6 +25,7 @@ export default class FileSystemLoader { this.sources = {} this.importNr = 0 this.core = new Core(plugins) + this.tokensByFile = {}; } fetch( _newPath, relativeTo, _trace ) { @@ -35,11 +36,15 @@ export default class FileSystemLoader { rootRelativePath = path.resolve( relativeDir, newPath ), fileRelativePath = path.resolve( path.join( this.root, relativeDir ), newPath ) + const tokens = this.tokensByFile[fileRelativePath] + if (tokens) { return resolve(tokens) } + fs.readFile( fileRelativePath, "utf-8", ( err, source ) => { if ( err ) reject( err ) this.core.load( source, rootRelativePath, trace, this.fetch.bind( this ) ) .then( ( { injectableSource, exportTokens } ) => { this.sources[trace] = injectableSource + this.tokensByFile[fileRelativePath] = exportTokens resolve( exportTokens ) }, reject ) } ) From b61a4f8b5dffd2b79a34667f8c2f6087c40ba462 Mon Sep 17 00:00:00 2001 From: Glen Maddern Date: Thu, 11 Jun 2015 17:07:14 +1000 Subject: [PATCH 20/82] got this passing --- test/test-cases/multiple-dependencies/b.css | 10 +++++++--- test/test-cases/multiple-dependencies/d.css | 7 +++++-- .../test-cases/multiple-dependencies/expected.css | 15 +++++++++++---- .../multiple-dependencies/expected.json | 2 +- test/test-cases/multiple-dependencies/source.css | 2 +- 5 files changed, 25 insertions(+), 11 deletions(-) diff --git a/test/test-cases/multiple-dependencies/b.css b/test/test-cases/multiple-dependencies/b.css index c4dcd92..e29560a 100644 --- a/test/test-cases/multiple-dependencies/b.css +++ b/test/test-cases/multiple-dependencies/b.css @@ -1,4 +1,8 @@ -.b { - composes: d from "./d.css"; - color: #bbb; +.b1 { + composes: d1 d2 from "./d.css"; + color: #b1b1b1; +} + +.b2 { + color: #b2b2b2; } diff --git a/test/test-cases/multiple-dependencies/d.css b/test/test-cases/multiple-dependencies/d.css index 4638a27..4e7ec24 100644 --- a/test/test-cases/multiple-dependencies/d.css +++ b/test/test-cases/multiple-dependencies/d.css @@ -1,3 +1,6 @@ -.d { - color: #ddd; +.d1 { + color: #d1d1d1; +} +.d2 { + color: #d2d2d2; } diff --git a/test/test-cases/multiple-dependencies/expected.css b/test/test-cases/multiple-dependencies/expected.css index 8d46eb4..01b0d9f 100644 --- a/test/test-cases/multiple-dependencies/expected.css +++ b/test/test-cases/multiple-dependencies/expected.css @@ -1,8 +1,15 @@ -._multiple_dependencies_d__d { - color: #ddd; +._multiple_dependencies_d__d1 { + color: #d1d1d1; } -._multiple_dependencies_b__b { - color: #bbb; +._multiple_dependencies_d__d2 { + color: #d2d2d2; +} +._multiple_dependencies_b__b1 { + color: #b1b1b1; +} + +._multiple_dependencies_b__b2 { + color: #b2b2b2; } ._multiple_dependencies_c__c { color: #ccc; diff --git a/test/test-cases/multiple-dependencies/expected.json b/test/test-cases/multiple-dependencies/expected.json index c457552..047434d 100644 --- a/test/test-cases/multiple-dependencies/expected.json +++ b/test/test-cases/multiple-dependencies/expected.json @@ -1,3 +1,3 @@ { - "a": "_multiple_dependencies_source__a _multiple_dependencies_b__b _multiple_dependencies_d__d _multiple_dependencies_c__c" + "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" } diff --git a/test/test-cases/multiple-dependencies/source.css b/test/test-cases/multiple-dependencies/source.css index ee0c9d9..46e1595 100644 --- a/test/test-cases/multiple-dependencies/source.css +++ b/test/test-cases/multiple-dependencies/source.css @@ -1,5 +1,5 @@ .a { - composes: b from "./b.css"; + composes: b1 b2 from "./b.css"; composes: c from "./c.css"; color: #aaa; } From 7190ae3e27411e0aade3407d35cd6ce137dcc6a9 Mon Sep 17 00:00:00 2001 From: Glen Maddern Date: Thu, 11 Jun 2015 17:12:39 +1000 Subject: [PATCH 21/82] 0.0.8 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index cc44cf4..67b3089 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "css-modules-loader-core", - "version": "0.0.7", + "version": "0.0.8", "description": "A loader-agnostic CSS Modules implementation, based on PostCSS", "main": "lib/index.js", "directories": { From 4ae3af4bf39ec33958561a297a6fa4e4a69315b2 Mon Sep 17 00:00:00 2001 From: Glen Maddern Date: Sun, 14 Jun 2015 16:53:47 +1000 Subject: [PATCH 22/82] forgot a \^ in my deps, think that's what was causing stale versions in jspm loader --- package.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 67b3089..33fe023 100644 --- a/package.json +++ b/package.json @@ -8,9 +8,9 @@ }, "dependencies": { "postcss": "^4.1.11", - "postcss-modules-extract-imports": "0.0.3", - "postcss-modules-local-by-default": "^0.0.7", - "postcss-modules-scope": "^0.0.5" + "postcss-modules-extract-imports": "^0.0.4", + "postcss-modules-local-by-default": "^0.0.9", + "postcss-modules-scope": "^0.0.6" }, "devDependencies": { "babel": "^5.5.4", From ca07314165eb1bdb97815611adbb1624e11f02ea Mon Sep 17 00:00:00 2001 From: Glen Maddern Date: Sun, 14 Jun 2015 16:53:52 +1000 Subject: [PATCH 23/82] 0.0.9 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 33fe023..92f7d6f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "css-modules-loader-core", - "version": "0.0.8", + "version": "0.0.9", "description": "A loader-agnostic CSS Modules implementation, based on PostCSS", "main": "lib/index.js", "directories": { From 6ebffbe5e152b07d4ae93ed55dd4e6ac41ed5543 Mon Sep 17 00:00:00 2001 From: Glen Maddern Date: Thu, 18 Jun 2015 15:33:04 +1000 Subject: [PATCH 24/82] these deps now support autoprefixer --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 92f7d6f..e172d23 100644 --- a/package.json +++ b/package.json @@ -8,9 +8,9 @@ }, "dependencies": { "postcss": "^4.1.11", - "postcss-modules-extract-imports": "^0.0.4", + "postcss-modules-extract-imports": "^0.0.5", "postcss-modules-local-by-default": "^0.0.9", - "postcss-modules-scope": "^0.0.6" + "postcss-modules-scope": "^0.0.7" }, "devDependencies": { "babel": "^5.5.4", From 070be54333c650bd9ae46f86d93633bae4cacebc Mon Sep 17 00:00:00 2001 From: Glen Maddern Date: Thu, 18 Jun 2015 15:33:09 +1000 Subject: [PATCH 25/82] 0.0.10 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e172d23..cd8e0f7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "css-modules-loader-core", - "version": "0.0.9", + "version": "0.0.10", "description": "A loader-agnostic CSS Modules implementation, based on PostCSS", "main": "lib/index.js", "directories": { From b4db1a50332cdb5f4c587fddbba4ce4851e28161 Mon Sep 17 00:00:00 2001 From: Josh Johnston Date: Fri, 19 Jun 2015 20:22:28 +1000 Subject: [PATCH 26/82] fixed expected whitespace to make test pass --- test/test-cases/multiple-sources/expected.css | 5 ----- 1 file changed, 5 deletions(-) diff --git a/test/test-cases/multiple-sources/expected.css b/test/test-cases/multiple-sources/expected.css index 37ca57f..da64401 100644 --- a/test/test-cases/multiple-sources/expected.css +++ b/test/test-cases/multiple-sources/expected.css @@ -1,20 +1,15 @@ - ._multiple_sources_d__d { color: #ddd; } - ._multiple_sources_b__b { color: #bbb; } - ._multiple_sources_c__c { color: #ccc; } - ._multiple_sources_source1__a { color: #aaa; } - ._multiple_sources_source2__foo { color: #f00; } From 07ce06824b45e5815ba0180eb7be4721f77d9561 Mon Sep 17 00:00:00 2001 From: Josh Johnston Date: Mon, 29 Jun 2015 21:42:47 +1000 Subject: [PATCH 27/82] upgrade postcss-modules-scope to 0.0.8 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index cd8e0f7..1790237 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ "postcss": "^4.1.11", "postcss-modules-extract-imports": "^0.0.5", "postcss-modules-local-by-default": "^0.0.9", - "postcss-modules-scope": "^0.0.7" + "postcss-modules-scope": "^0.0.8" }, "devDependencies": { "babel": "^5.5.4", From 6792d5eb0ba5955ee6885ef8d4c873531a9cbcee Mon Sep 17 00:00:00 2001 From: Glen Maddern Date: Thu, 2 Jul 2015 19:12:24 +1000 Subject: [PATCH 28/82] 0.0.11 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 1790237..8e31ad4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "css-modules-loader-core", - "version": "0.0.10", + "version": "0.0.11", "description": "A loader-agnostic CSS Modules implementation, based on PostCSS", "main": "lib/index.js", "directories": { From 6ba849e4998ed3e4430997b59f2f5732651fe507 Mon Sep 17 00:00:00 2001 From: Josh Johnston Date: Tue, 4 Aug 2015 16:36:09 +1000 Subject: [PATCH 29/82] resolve paths to node_modules --- .gitignore | 3 ++- node_modules/cool-styles/foo.css | 3 +++ src/file-system-loader.js | 8 ++++++++ test/test-cases/compose-node-module/expected.css | 5 +++++ test/test-cases/compose-node-module/expected.json | 3 +++ test/test-cases/compose-node-module/source.css | 3 +++ 6 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 node_modules/cool-styles/foo.css create mode 100644 test/test-cases/compose-node-module/expected.css create mode 100644 test/test-cases/compose-node-module/expected.json create mode 100644 test/test-cases/compose-node-module/source.css diff --git a/.gitignore b/.gitignore index 491fc35..017354f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ -node_modules +node_modules/* +!node_modules/cool-styles lib diff --git a/node_modules/cool-styles/foo.css b/node_modules/cool-styles/foo.css new file mode 100644 index 0000000..65f95db --- /dev/null +++ b/node_modules/cool-styles/foo.css @@ -0,0 +1,3 @@ +.example { + color: #F00; +} diff --git a/src/file-system-loader.js b/src/file-system-loader.js index 2f9ab02..2a3f47d 100644 --- a/src/file-system-loader.js +++ b/src/file-system-loader.js @@ -36,6 +36,14 @@ export default class FileSystemLoader { rootRelativePath = path.resolve( relativeDir, newPath ), fileRelativePath = path.resolve( path.join( this.root, relativeDir ), newPath ) + // if the path is not relative or absolute, try to resolve it in node_modules + if (newPath[0] !== '.' && newPath[0] !== '/') { + try { + fileRelativePath = require.resolve(newPath); + } + catch (e) {} + } + const tokens = this.tokensByFile[fileRelativePath] if (tokens) { return resolve(tokens) } diff --git a/test/test-cases/compose-node-module/expected.css b/test/test-cases/compose-node-module/expected.css new file mode 100644 index 0000000..0667b94 --- /dev/null +++ b/test/test-cases/compose-node-module/expected.css @@ -0,0 +1,5 @@ +._compose_node_module_cool_styles_foo__example { + color: #F00; +} +._compose_node_module_source__foo { +} diff --git a/test/test-cases/compose-node-module/expected.json b/test/test-cases/compose-node-module/expected.json new file mode 100644 index 0000000..a57448c --- /dev/null +++ b/test/test-cases/compose-node-module/expected.json @@ -0,0 +1,3 @@ +{ + "foo": "_compose_node_module_source__foo _compose_node_module_cool_styles_foo__example" +} diff --git a/test/test-cases/compose-node-module/source.css b/test/test-cases/compose-node-module/source.css new file mode 100644 index 0000000..6477b1d --- /dev/null +++ b/test/test-cases/compose-node-module/source.css @@ -0,0 +1,3 @@ +.foo { + composes: example from "cool-styles/foo.css"; +} From 51e34f3b023949bbc72ba380f5769462c132dcc1 Mon Sep 17 00:00:00 2001 From: Glen Maddern Date: Tue, 4 Aug 2015 16:44:18 +1000 Subject: [PATCH 30/82] 0.0.12 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 8e31ad4..ecec1f9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "css-modules-loader-core", - "version": "0.0.11", + "version": "0.0.12", "description": "A loader-agnostic CSS Modules implementation, based on PostCSS", "main": "lib/index.js", "directories": { From d6b3873e0d115f7556db991f226bc4a8913083e2 Mon Sep 17 00:00:00 2001 From: Glen Maddern Date: Mon, 7 Sep 2015 15:58:58 +1000 Subject: [PATCH 31/82] I'm reasonably happy with this example syntax --- test/test-cases.js | 39 +++++++++++++------------ test/test-cases/aliases/borders.css | 3 ++ test/test-cases/aliases/breakpoints.css | 1 + test/test-cases/aliases/colors.css | 2 ++ test/test-cases/aliases/expected.css | 12 ++++++++ test/test-cases/aliases/expected.json | 3 ++ test/test-cases/aliases/source.css | 15 ++++++++++ 7 files changed, 56 insertions(+), 19 deletions(-) create mode 100644 test/test-cases/aliases/borders.css create mode 100644 test/test-cases/aliases/breakpoints.css create mode 100644 test/test-cases/aliases/colors.css create mode 100644 test/test-cases/aliases/expected.css create mode 100644 test/test-cases/aliases/expected.json create mode 100644 test/test-cases/aliases/source.css diff --git a/test/test-cases.js b/test/test-cases.js index c6adcff..1c80fac 100644 --- a/test/test-cases.js +++ b/test/test-cases.js @@ -18,6 +18,7 @@ Object.keys( pipelines ).forEach( dirname => { describe( dirname, () => { let testDir = path.join( __dirname, dirname ) fs.readdirSync( testDir ).forEach( testCase => { + if (testCase !== 'aliases') return if ( fs.existsSync( path.join( testDir, testCase, "source.css" ) ) ) { it( "should " + testCase.replace( /-/g, " " ), done => { let expected = normalize( fs.readFileSync( path.join( testDir, testCase, "expected.css" ), "utf-8" ) ) @@ -34,22 +35,22 @@ Object.keys( pipelines ).forEach( dirname => { } ) // special case for testing multiple sources -describe( 'multiple sources', () => { - let testDir = path.join( __dirname, 'test-cases' ) - let testCase = 'multiple-sources'; - let dirname = 'test-cases'; - if ( fs.existsSync( path.join( testDir, testCase, "source1.css" ) ) ) { - it( "should " + testCase.replace( /-/g, " " ), done => { - let expected = normalize( fs.readFileSync( path.join( testDir, testCase, "expected.css" ), "utf-8" ) ) - let loader = new FileSystemLoader( testDir, pipelines[dirname] ) - let expectedTokens = JSON.parse( fs.readFileSync( path.join( testDir, testCase, "expected.json" ), "utf-8" ) ) - loader.fetch( `${testCase}/source1.css`, "/" ).then( tokens1 => { - loader.fetch( `${testCase}/source2.css`, "/" ).then( tokens2 => { - assert.equal( loader.finalSource, expected ) - const tokens = Object.assign({}, tokens1, tokens2); - assert.equal( JSON.stringify( tokens ), JSON.stringify( expectedTokens ) ) - } ).then( done, done ) - }) - } ); - } -} ); +//describe( 'multiple sources', () => { +// let testDir = path.join( __dirname, 'test-cases' ) +// let testCase = 'multiple-sources'; +// let dirname = 'test-cases'; +// if ( fs.existsSync( path.join( testDir, testCase, "source1.css" ) ) ) { +// it( "should " + testCase.replace( /-/g, " " ), done => { +// let expected = normalize( fs.readFileSync( path.join( testDir, testCase, "expected.css" ), "utf-8" ) ) +// let loader = new FileSystemLoader( testDir, pipelines[dirname] ) +// let expectedTokens = JSON.parse( fs.readFileSync( path.join( testDir, testCase, "expected.json" ), "utf-8" ) ) +// loader.fetch( `${testCase}/source1.css`, "/" ).then( tokens1 => { +// loader.fetch( `${testCase}/source2.css`, "/" ).then( tokens2 => { +// assert.equal( loader.finalSource, expected ) +// const tokens = Object.assign({}, tokens1, tokens2); +// assert.equal( JSON.stringify( tokens ), JSON.stringify( expectedTokens ) ) +// } ).then( done, done ) +// }) +// } ); +// } +//} ); diff --git a/test/test-cases/aliases/borders.css b/test/test-cases/aliases/borders.css new file mode 100644 index 0000000..f3670f7 --- /dev/null +++ b/test/test-cases/aliases/borders.css @@ -0,0 +1,3 @@ +.dashed { + border: 4px dashed; +} diff --git a/test/test-cases/aliases/breakpoints.css b/test/test-cases/aliases/breakpoints.css new file mode 100644 index 0000000..100c190 --- /dev/null +++ b/test/test-cases/aliases/breakpoints.css @@ -0,0 +1 @@ +@define small: (max-width: 599px); diff --git a/test/test-cases/aliases/colors.css b/test/test-cases/aliases/colors.css new file mode 100644 index 0000000..a713e49 --- /dev/null +++ b/test/test-cases/aliases/colors.css @@ -0,0 +1,2 @@ +@define primary: aquamarine; +@define secondary: red; diff --git a/test/test-cases/aliases/expected.css b/test/test-cases/aliases/expected.css new file mode 100644 index 0000000..1c2f926 --- /dev/null +++ b/test/test-cases/aliases/expected.css @@ -0,0 +1,12 @@ +._aliases_borders__bar { + color: red; +} +._aliases_source__foo { + background: aquamarine; + border-color: red; +} +@media (max-width: 599px) { + ._aliases_source__foo { + background: white; + } +} diff --git a/test/test-cases/aliases/expected.json b/test/test-cases/aliases/expected.json new file mode 100644 index 0000000..abf2cf7 --- /dev/null +++ b/test/test-cases/aliases/expected.json @@ -0,0 +1,3 @@ +{ + "foo": "_aliases_borders__bar _aliases_source__foo" +} diff --git a/test/test-cases/aliases/source.css b/test/test-cases/aliases/source.css new file mode 100644 index 0000000..aae3567 --- /dev/null +++ b/test/test-cases/aliases/source.css @@ -0,0 +1,15 @@ +@alias "./borders.css" as borders; +@alias small from "./breakpoints.css"; +@alias secondary, primary as blue from "./colors.css"; + +.foo { + composes: dashed from borders; + background: blue; + border-color: secondary; +} + +@media small { + .foo { + background: white; + } +} From f13d8ca63215db2101418077a566c7364f9f88bc Mon Sep 17 00:00:00 2001 From: Glen Maddern Date: Sun, 13 Sep 2015 17:08:14 +1000 Subject: [PATCH 32/82] ok smarty --- src/index.js | 3 ++- src/wip.js | 12 ++++++++++++ test/test-cases/aliases/breakpoints.css | 2 +- test/test-cases/aliases/colors.css | 4 ++-- test/test-cases/aliases/source.css | 6 +++--- 5 files changed, 20 insertions(+), 7 deletions(-) create mode 100644 src/wip.js diff --git a/src/index.js b/src/index.js index f5994ef..b72bfd9 100644 --- a/src/index.js +++ b/src/index.js @@ -2,6 +2,7 @@ import postcss from 'postcss' import localByDefault from 'postcss-modules-local-by-default' import extractImports from 'postcss-modules-extract-imports' import scope from 'postcss-modules-scope' +import wip from "./wip" import Parser from './parser' @@ -26,4 +27,4 @@ export default class Core { Core.localByDefault = localByDefault Core.extractImports = extractImports Core.scope = scope -Core.defaultPlugins = [localByDefault, extractImports, scope] +Core.defaultPlugins = [wip, localByDefault, extractImports, scope] diff --git a/src/wip.js b/src/wip.js new file mode 100644 index 0000000..394e8cf --- /dev/null +++ b/src/wip.js @@ -0,0 +1,12 @@ +const matchImports = /^(.+?)\s+from\s+(?:"([^"]+)"|'([^']+)')$/ + +export default css => { + css.eachAtRule('alias', atRule => { + let imports = matchImports.exec(atRule.params) + if (imports) { + + } else { + console.log(atRule.params) + } + }) +} diff --git a/test/test-cases/aliases/breakpoints.css b/test/test-cases/aliases/breakpoints.css index 100c190..bc85fe0 100644 --- a/test/test-cases/aliases/breakpoints.css +++ b/test/test-cases/aliases/breakpoints.css @@ -1 +1 @@ -@define small: (max-width: 599px); +@let small: (max-width: 599px); diff --git a/test/test-cases/aliases/colors.css b/test/test-cases/aliases/colors.css index a713e49..f6674cd 100644 --- a/test/test-cases/aliases/colors.css +++ b/test/test-cases/aliases/colors.css @@ -1,2 +1,2 @@ -@define primary: aquamarine; -@define secondary: red; +@let primary: aquamarine; +@let secondary: red; diff --git a/test/test-cases/aliases/source.css b/test/test-cases/aliases/source.css index aae3567..2a625b3 100644 --- a/test/test-cases/aliases/source.css +++ b/test/test-cases/aliases/source.css @@ -1,6 +1,6 @@ -@alias "./borders.css" as borders; -@alias small from "./breakpoints.css"; -@alias secondary, primary as blue from "./colors.css"; +@let borders: "./borders.css"; +@import small from "./breakpoints.css"; +@import secondary, blue as primary from "./colors.css"; .foo { composes: dashed from borders; From 514e8ace7e114ba463244fdf57408da1778733a5 Mon Sep 17 00:00:00 2001 From: Glen Maddern Date: Sun, 13 Sep 2015 18:08:01 +1000 Subject: [PATCH 33/82] think my regex fu is ok --- src/wip.js | 15 +++++++++++++-- test/test-cases/aliases/source.css | 4 ++-- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/wip.js b/src/wip.js index 394e8cf..daa3e0c 100644 --- a/src/wip.js +++ b/src/wip.js @@ -1,10 +1,21 @@ const matchImports = /^(.+?)\s+from\s+(?:"([^"]+)"|'([^']+)')$/ +const matchLet = /(?:,\s+|^)([\w-]+):?\s+("[^"]*"|'[^']*'|[^,]+)\s?/g export default css => { - css.eachAtRule('alias', atRule => { + let declarations = {} + css.eachAtRule(/^-?let$/, atRule => { + console.log(atRule.params) + + let matches + while (matches = matchLet.exec(atRule.params)) { + let [/*match*/, key, value] = matches + declarations[key] = value + } + }) + css.eachAtRule(/^-?import$/, atRule => { let imports = matchImports.exec(atRule.params) if (imports) { - + //console.log(imports) } else { console.log(atRule.params) } diff --git a/test/test-cases/aliases/source.css b/test/test-cases/aliases/source.css index 2a625b3..84f9d35 100644 --- a/test/test-cases/aliases/source.css +++ b/test/test-cases/aliases/source.css @@ -1,5 +1,5 @@ -@let borders: "./borders.css"; -@import small from "./breakpoints.css"; +@let borders: "./borders.css", breakpoints: "./breakpoints"; +@import small from breakpoints; @import secondary, blue as primary from "./colors.css"; .foo { From 2e294ae9b523b517d7557bbe3b1247976f569063 Mon Sep 17 00:00:00 2001 From: Glen Maddern Date: Sun, 13 Sep 2015 18:56:03 +1000 Subject: [PATCH 34/82] adding replacements for declaration values --- src/wip.js | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/wip.js b/src/wip.js index daa3e0c..ed03864 100644 --- a/src/wip.js +++ b/src/wip.js @@ -1,11 +1,10 @@ const matchImports = /^(.+?)\s+from\s+(?:"([^"]+)"|'([^']+)')$/ const matchLet = /(?:,\s+|^)([\w-]+):?\s+("[^"]*"|'[^']*'|[^,]+)\s?/g +const matchConstName = /[\w-]+/g export default css => { let declarations = {} css.eachAtRule(/^-?let$/, atRule => { - console.log(atRule.params) - let matches while (matches = matchLet.exec(atRule.params)) { let [/*match*/, key, value] = matches @@ -20,4 +19,15 @@ export default css => { console.log(atRule.params) } }) + /* Perform replacements */ + css.eachDecl(decl => { + let matches + while (matches = matchConstName.exec(decl.value)) { + let replacement = declarations[matches[0]] + if (replacement) { + decl.value = decl.value.slice(0, matches.index) + replacement + decl.value.slice(matchConstName.lastIndex) + matchConstName.lastIndex -= matches[0].length - replacement.length + } + } + }) } From 2b1952878c51d01649f457211c123995d0e22dfe Mon Sep 17 00:00:00 2001 From: Glen Maddern Date: Sun, 13 Sep 2015 19:50:07 +1000 Subject: [PATCH 35/82] got constants coming through in declaration values! --- src/index.js | 2 +- src/wip.js | 86 ++++++++++++++++++++++++------ test/test-cases/aliases/source.css | 2 +- 3 files changed, 73 insertions(+), 17 deletions(-) diff --git a/src/index.js b/src/index.js index b72bfd9..ba7ab71 100644 --- a/src/index.js +++ b/src/index.js @@ -27,4 +27,4 @@ export default class Core { Core.localByDefault = localByDefault Core.extractImports = extractImports Core.scope = scope -Core.defaultPlugins = [wip, localByDefault, extractImports, scope] +Core.defaultPlugins = [wip, css => console.log(css.toResult().css), localByDefault, extractImports, scope] diff --git a/src/wip.js b/src/wip.js index ed03864..e474ac4 100644 --- a/src/wip.js +++ b/src/wip.js @@ -1,8 +1,26 @@ -const matchImports = /^(.+?)\s+from\s+(?:"([^"]+)"|'([^']+)')$/ +import postcss from 'postcss'; + +const matchImports = /^(.+?)\s+from\s+("[^"]*"|'[^']*')$/ const matchLet = /(?:,\s+|^)([\w-]+):?\s+("[^"]*"|'[^']*'|[^,]+)\s?/g const matchConstName = /[\w-]+/g +const matchImport = /^([\w-]+)(?:\s+as\s+([\w-]+))?/ +let options = {} +let importIndex = 0 +let createImportedName = options && options.createImportedName || ((importName/*, path*/) => `i__const_${importName.replace(/\W/g, '_')}_${importIndex++}`) + +const replace = (declarations, object, propName) => { + let matches + while (matches = matchConstName.exec(object[propName])) { + let replacement = declarations[matches[0]] + if (replacement) { + object[propName] = object[propName].slice(0, matches.index) + replacement + object[propName].slice(matchConstName.lastIndex) + matchConstName.lastIndex -= matches[0].length - replacement.length + } + } +} export default css => { + /* Find any local let rules and store them*/ let declarations = {} css.eachAtRule(/^-?let$/, atRule => { let matches @@ -11,23 +29,61 @@ export default css => { declarations[key] = value } }) + + console.log(declarations) + /* We want to export anything defined by now, but don't add it to the CSS yet or + it well get picked up by the replacement stuff */ + let exportDeclarations = Object.keys(declarations).map(key => postcss.decl({ + value: declarations[key], + prop: key, + before: "\n ", + _autoprefixerDisabled: true + })) + + /* Find imports and insert ICSS tmp vars */ + let importAliases = [] css.eachAtRule(/^-?import$/, atRule => { - let imports = matchImports.exec(atRule.params) - if (imports) { - //console.log(imports) - } else { - console.log(atRule.params) + let matches = matchImports.exec(atRule.params) + if (matches) { + let [/*match*/, aliases, path] = matches + let imports = aliases.split(/\s*,\s*/).map(alias => { + let tokens = matchImport.exec(alias) + if (tokens) { + let [/*match*/, theirName, myName = theirName] = tokens + let importedName = createImportedName(myName) + declarations[myName] = importedName + return {theirName, importedName} + } else { + throw new Error(`@import statement "${alias}" is invalid!`) + } + }) + importAliases.push({path, imports}) } }) + /* Perform replacements */ - css.eachDecl(decl => { - let matches - while (matches = matchConstName.exec(decl.value)) { - let replacement = declarations[matches[0]] - if (replacement) { - decl.value = decl.value.slice(0, matches.index) + replacement + decl.value.slice(matchConstName.lastIndex) - matchConstName.lastIndex -= matches[0].length - replacement.length - } - } + css.eachDecl(decl => replace(declarations, decl, 'value')) + + /* Add import rules */ + importAliases.forEach(({path, imports}) => { + css.prepend(postcss.rule({ + selector: `:import(${path})`, + after: "\n", + nodes: imports.map(({theirName, importedName}) => postcss.decl({ + value: theirName, + prop: importedName, + before: "\n ", + _autoprefixerDisabled: true + })) + })) }) + + /* Add export rules if any */ + if (exportDeclarations.length > 0) { + css.prepend(postcss.rule({ + selector: `:export`, + after: "\n", + nodes: exportDeclarations + })) + } } diff --git a/test/test-cases/aliases/source.css b/test/test-cases/aliases/source.css index 84f9d35..932e74d 100644 --- a/test/test-cases/aliases/source.css +++ b/test/test-cases/aliases/source.css @@ -1,6 +1,6 @@ @let borders: "./borders.css", breakpoints: "./breakpoints"; @import small from breakpoints; -@import secondary, blue as primary from "./colors.css"; +@import secondary, primary as blue from "./colors.css"; .foo { composes: dashed from borders; From d2b89a1d6cdd2f28055cd90758901f9ca5dab251 Mon Sep 17 00:00:00 2001 From: Glen Maddern Date: Sun, 13 Sep 2015 20:02:13 +1000 Subject: [PATCH 36/82] YES IT IS PASSING OMG --- src/parser.js | 7 ++---- src/replace-symbols.js | 17 +++++++++++++ src/wip.js | 35 +++++++++++---------------- test/test-cases/aliases/expected.css | 7 ++++-- test/test-cases/aliases/expected.json | 4 ++- test/test-cases/aliases/source.css | 2 +- 6 files changed, 42 insertions(+), 30 deletions(-) create mode 100644 src/replace-symbols.js diff --git a/src/parser.js b/src/parser.js index 536e9cd..a54dabb 100644 --- a/src/parser.js +++ b/src/parser.js @@ -1,4 +1,5 @@ const importRegexp = /^:import\((.+)\)$/ +import replaceSymbols from './replace-symbols' export default class Parser { constructor( pathFetcher, trace ) { @@ -26,11 +27,7 @@ export default class Parser { } linkImportedSymbols( css ) { - css.eachDecl( decl => { - Object.keys(this.translations).forEach( translation => { - decl.value = decl.value.replace(translation, this.translations[translation]) - } ) - }) + replaceSymbols(css, this.translations) } extractExports( css ) { diff --git a/src/replace-symbols.js b/src/replace-symbols.js new file mode 100644 index 0000000..31b37e2 --- /dev/null +++ b/src/replace-symbols.js @@ -0,0 +1,17 @@ +const matchConstName = /[\w-]+/g + +const replace = (declarations, object, propName) => { + let matches + while (matches = matchConstName.exec(object[propName])) { + let replacement = declarations[matches[0]] + if (replacement) { + object[propName] = object[propName].slice(0, matches.index) + replacement + object[propName].slice(matchConstName.lastIndex) + matchConstName.lastIndex -= matches[0].length - replacement.length + } + } +} + +export default (css, translations) => { + css.eachDecl(decl => replace(translations, decl, 'value')) + css.eachAtRule('media', atRule => replace(translations, atRule, 'params')) +} diff --git a/src/wip.js b/src/wip.js index e474ac4..71b075f 100644 --- a/src/wip.js +++ b/src/wip.js @@ -1,40 +1,29 @@ -import postcss from 'postcss'; +import postcss from 'postcss' +import replaceSymbols from './replace-symbols' -const matchImports = /^(.+?)\s+from\s+("[^"]*"|'[^']*')$/ +const matchImports = /^(.+?)\s+from\s+("[^"]*"|'[^']*'|[\w-]+)$/ const matchLet = /(?:,\s+|^)([\w-]+):?\s+("[^"]*"|'[^']*'|[^,]+)\s?/g -const matchConstName = /[\w-]+/g const matchImport = /^([\w-]+)(?:\s+as\s+([\w-]+))?/ let options = {} let importIndex = 0 let createImportedName = options && options.createImportedName || ((importName/*, path*/) => `i__const_${importName.replace(/\W/g, '_')}_${importIndex++}`) -const replace = (declarations, object, propName) => { - let matches - while (matches = matchConstName.exec(object[propName])) { - let replacement = declarations[matches[0]] - if (replacement) { - object[propName] = object[propName].slice(0, matches.index) + replacement + object[propName].slice(matchConstName.lastIndex) - matchConstName.lastIndex -= matches[0].length - replacement.length - } - } -} - export default css => { /* Find any local let rules and store them*/ - let declarations = {} + let translations = {} css.eachAtRule(/^-?let$/, atRule => { let matches while (matches = matchLet.exec(atRule.params)) { let [/*match*/, key, value] = matches - declarations[key] = value + translations[key] = value + atRule.removeSelf() } }) - console.log(declarations) /* We want to export anything defined by now, but don't add it to the CSS yet or it well get picked up by the replacement stuff */ - let exportDeclarations = Object.keys(declarations).map(key => postcss.decl({ - value: declarations[key], + let exportDeclarations = Object.keys(translations).map(key => postcss.decl({ + value: translations[key], prop: key, before: "\n ", _autoprefixerDisabled: true @@ -46,23 +35,27 @@ export default css => { let matches = matchImports.exec(atRule.params) if (matches) { let [/*match*/, aliases, path] = matches + // We can use constants for path names + if (translations[path]) path = translations[path] let imports = aliases.split(/\s*,\s*/).map(alias => { let tokens = matchImport.exec(alias) if (tokens) { let [/*match*/, theirName, myName = theirName] = tokens let importedName = createImportedName(myName) - declarations[myName] = importedName + translations[myName] = importedName return {theirName, importedName} } else { throw new Error(`@import statement "${alias}" is invalid!`) } }) importAliases.push({path, imports}) + atRule.removeSelf() } }) + console.log(translations) /* Perform replacements */ - css.eachDecl(decl => replace(declarations, decl, 'value')) + replaceSymbols(css, translations) /* Add import rules */ importAliases.forEach(({path, imports}) => { diff --git a/test/test-cases/aliases/expected.css b/test/test-cases/aliases/expected.css index 1c2f926..26d4b12 100644 --- a/test/test-cases/aliases/expected.css +++ b/test/test-cases/aliases/expected.css @@ -1,10 +1,13 @@ -._aliases_borders__bar { - color: red; +._aliases_borders__dashed { + border: 4px dashed; } + + ._aliases_source__foo { background: aquamarine; border-color: red; } + @media (max-width: 599px) { ._aliases_source__foo { background: white; diff --git a/test/test-cases/aliases/expected.json b/test/test-cases/aliases/expected.json index abf2cf7..9cd043b 100644 --- a/test/test-cases/aliases/expected.json +++ b/test/test-cases/aliases/expected.json @@ -1,3 +1,5 @@ { - "foo": "_aliases_borders__bar _aliases_source__foo" + "borders": "\"./borders.css\"", + "breakpoints": "\"./breakpoints.css\"", + "foo": "_aliases_source__foo _aliases_borders__dashed" } diff --git a/test/test-cases/aliases/source.css b/test/test-cases/aliases/source.css index 932e74d..8d6e516 100644 --- a/test/test-cases/aliases/source.css +++ b/test/test-cases/aliases/source.css @@ -1,4 +1,4 @@ -@let borders: "./borders.css", breakpoints: "./breakpoints"; +@let borders: "./borders.css", breakpoints: "./breakpoints.css"; @import small from breakpoints; @import secondary, primary as blue from "./colors.css"; From 7b2501f3b332387ff95166442b6f19dd88903154 Mon Sep 17 00:00:00 2001 From: Glen Maddern Date: Sun, 13 Sep 2015 20:19:03 +1000 Subject: [PATCH 37/82] tidying up --- src/index.js | 2 +- src/wip.js | 4 +- test/test-cases.js | 39 +++++++++---------- .../{aliases => constants}/borders.css | 0 .../{aliases => constants}/breakpoints.css | 0 .../{aliases => constants}/colors.css | 0 .../{aliases => constants}/expected.css | 6 +-- .../{aliases => constants}/expected.json | 2 +- .../{aliases => constants}/source.css | 2 +- 9 files changed, 28 insertions(+), 27 deletions(-) rename test/test-cases/{aliases => constants}/borders.css (100%) rename test/test-cases/{aliases => constants}/breakpoints.css (100%) rename test/test-cases/{aliases => constants}/colors.css (100%) rename test/test-cases/{aliases => constants}/expected.css (61%) rename test/test-cases/{aliases => constants}/expected.json (56%) rename test/test-cases/{aliases => constants}/source.css (88%) diff --git a/src/index.js b/src/index.js index ba7ab71..b72bfd9 100644 --- a/src/index.js +++ b/src/index.js @@ -27,4 +27,4 @@ export default class Core { Core.localByDefault = localByDefault Core.extractImports = extractImports Core.scope = scope -Core.defaultPlugins = [wip, css => console.log(css.toResult().css), localByDefault, extractImports, scope] +Core.defaultPlugins = [wip, localByDefault, extractImports, scope] diff --git a/src/wip.js b/src/wip.js index 71b075f..2b3ef0a 100644 --- a/src/wip.js +++ b/src/wip.js @@ -53,7 +53,9 @@ export default css => { } }) - console.log(translations) + /* If we have no translations, don't continue */ + if (!Object.keys(translations).length) return + /* Perform replacements */ replaceSymbols(css, translations) diff --git a/test/test-cases.js b/test/test-cases.js index 1c80fac..c6adcff 100644 --- a/test/test-cases.js +++ b/test/test-cases.js @@ -18,7 +18,6 @@ Object.keys( pipelines ).forEach( dirname => { describe( dirname, () => { let testDir = path.join( __dirname, dirname ) fs.readdirSync( testDir ).forEach( testCase => { - if (testCase !== 'aliases') return if ( fs.existsSync( path.join( testDir, testCase, "source.css" ) ) ) { it( "should " + testCase.replace( /-/g, " " ), done => { let expected = normalize( fs.readFileSync( path.join( testDir, testCase, "expected.css" ), "utf-8" ) ) @@ -35,22 +34,22 @@ Object.keys( pipelines ).forEach( dirname => { } ) // special case for testing multiple sources -//describe( 'multiple sources', () => { -// let testDir = path.join( __dirname, 'test-cases' ) -// let testCase = 'multiple-sources'; -// let dirname = 'test-cases'; -// if ( fs.existsSync( path.join( testDir, testCase, "source1.css" ) ) ) { -// it( "should " + testCase.replace( /-/g, " " ), done => { -// let expected = normalize( fs.readFileSync( path.join( testDir, testCase, "expected.css" ), "utf-8" ) ) -// let loader = new FileSystemLoader( testDir, pipelines[dirname] ) -// let expectedTokens = JSON.parse( fs.readFileSync( path.join( testDir, testCase, "expected.json" ), "utf-8" ) ) -// loader.fetch( `${testCase}/source1.css`, "/" ).then( tokens1 => { -// loader.fetch( `${testCase}/source2.css`, "/" ).then( tokens2 => { -// assert.equal( loader.finalSource, expected ) -// const tokens = Object.assign({}, tokens1, tokens2); -// assert.equal( JSON.stringify( tokens ), JSON.stringify( expectedTokens ) ) -// } ).then( done, done ) -// }) -// } ); -// } -//} ); +describe( 'multiple sources', () => { + let testDir = path.join( __dirname, 'test-cases' ) + let testCase = 'multiple-sources'; + let dirname = 'test-cases'; + if ( fs.existsSync( path.join( testDir, testCase, "source1.css" ) ) ) { + it( "should " + testCase.replace( /-/g, " " ), done => { + let expected = normalize( fs.readFileSync( path.join( testDir, testCase, "expected.css" ), "utf-8" ) ) + let loader = new FileSystemLoader( testDir, pipelines[dirname] ) + let expectedTokens = JSON.parse( fs.readFileSync( path.join( testDir, testCase, "expected.json" ), "utf-8" ) ) + loader.fetch( `${testCase}/source1.css`, "/" ).then( tokens1 => { + loader.fetch( `${testCase}/source2.css`, "/" ).then( tokens2 => { + assert.equal( loader.finalSource, expected ) + const tokens = Object.assign({}, tokens1, tokens2); + assert.equal( JSON.stringify( tokens ), JSON.stringify( expectedTokens ) ) + } ).then( done, done ) + }) + } ); + } +} ); diff --git a/test/test-cases/aliases/borders.css b/test/test-cases/constants/borders.css similarity index 100% rename from test/test-cases/aliases/borders.css rename to test/test-cases/constants/borders.css diff --git a/test/test-cases/aliases/breakpoints.css b/test/test-cases/constants/breakpoints.css similarity index 100% rename from test/test-cases/aliases/breakpoints.css rename to test/test-cases/constants/breakpoints.css diff --git a/test/test-cases/aliases/colors.css b/test/test-cases/constants/colors.css similarity index 100% rename from test/test-cases/aliases/colors.css rename to test/test-cases/constants/colors.css diff --git a/test/test-cases/aliases/expected.css b/test/test-cases/constants/expected.css similarity index 61% rename from test/test-cases/aliases/expected.css rename to test/test-cases/constants/expected.css index 26d4b12..a843857 100644 --- a/test/test-cases/aliases/expected.css +++ b/test/test-cases/constants/expected.css @@ -1,15 +1,15 @@ -._aliases_borders__dashed { +._constants_borders__dashed { border: 4px dashed; } -._aliases_source__foo { +._constants_source__foo { background: aquamarine; border-color: red; } @media (max-width: 599px) { - ._aliases_source__foo { + ._constants_source__foo { background: white; } } diff --git a/test/test-cases/aliases/expected.json b/test/test-cases/constants/expected.json similarity index 56% rename from test/test-cases/aliases/expected.json rename to test/test-cases/constants/expected.json index 9cd043b..7cde827 100644 --- a/test/test-cases/aliases/expected.json +++ b/test/test-cases/constants/expected.json @@ -1,5 +1,5 @@ { "borders": "\"./borders.css\"", "breakpoints": "\"./breakpoints.css\"", - "foo": "_aliases_source__foo _aliases_borders__dashed" + "foo": "_constants_source__foo _constants_borders__dashed" } diff --git a/test/test-cases/aliases/source.css b/test/test-cases/constants/source.css similarity index 88% rename from test/test-cases/aliases/source.css rename to test/test-cases/constants/source.css index 8d6e516..a731753 100644 --- a/test/test-cases/aliases/source.css +++ b/test/test-cases/constants/source.css @@ -1,5 +1,5 @@ @let borders: "./borders.css", breakpoints: "./breakpoints.css"; -@import small from breakpoints; +@-import small from breakpoints; @import secondary, primary as blue from "./colors.css"; .foo { From 323d49d73fbe38fc9288db074e124e33df4f8ad7 Mon Sep 17 00:00:00 2001 From: Glen Maddern Date: Sun, 13 Sep 2015 20:56:25 +1000 Subject: [PATCH 38/82] expanded the breakpoints definition --- test/test-cases/constants/breakpoints.css | 4 +++- test/test-cases/constants/expected.css | 5 +++++ test/test-cases/constants/source.css | 7 ++++++- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/test/test-cases/constants/breakpoints.css b/test/test-cases/constants/breakpoints.css index bc85fe0..33257e3 100644 --- a/test/test-cases/constants/breakpoints.css +++ b/test/test-cases/constants/breakpoints.css @@ -1 +1,3 @@ -@let small: (max-width: 599px); +@let small (max-width: 599px); +@let medium (min-width: 600px) and (max-width: 959px); +@let large (min-width: 960px); diff --git a/test/test-cases/constants/expected.css b/test/test-cases/constants/expected.css index a843857..59ea63f 100644 --- a/test/test-cases/constants/expected.css +++ b/test/test-cases/constants/expected.css @@ -13,3 +13,8 @@ background: white; } } +@media (min-width: 600px) and (max-width: 959px) { + ._constants_source__foo { + background: peru; + } +} diff --git a/test/test-cases/constants/source.css b/test/test-cases/constants/source.css index a731753..ec8863c 100644 --- a/test/test-cases/constants/source.css +++ b/test/test-cases/constants/source.css @@ -1,5 +1,5 @@ @let borders: "./borders.css", breakpoints: "./breakpoints.css"; -@-import small from breakpoints; +@-import small, medium from breakpoints; @import secondary, primary as blue from "./colors.css"; .foo { @@ -13,3 +13,8 @@ background: white; } } +@media medium { + .foo { + background: peru; + } +} From d91582628ca3ce0460fcda8d050cd7d7a9f6011a Mon Sep 17 00:00:00 2001 From: Glen Maddern Date: Mon, 14 Sep 2015 00:47:39 +1000 Subject: [PATCH 39/82] added an example where a file is being imported and composed --- package.json | 2 +- src/index.js | 4 ++-- src/{wip.js => postcss-modules-constants.js} | 0 test/test-cases/constants/colors.css | 18 ++++++++++++++++-- test/test-cases/constants/expected.css | 16 ++++++++++++++-- test/test-cases/constants/expected.json | 2 +- test/test-cases/constants/source.css | 3 ++- 7 files changed, 36 insertions(+), 9 deletions(-) rename src/{wip.js => postcss-modules-constants.js} (100%) diff --git a/package.json b/package.json index ecec1f9..2742655 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ }, "dependencies": { "postcss": "^4.1.11", - "postcss-modules-extract-imports": "^0.0.5", + "postcss-modules-extract-imports": "^0.0.6", "postcss-modules-local-by-default": "^0.0.9", "postcss-modules-scope": "^0.0.8" }, diff --git a/src/index.js b/src/index.js index b72bfd9..b89be09 100644 --- a/src/index.js +++ b/src/index.js @@ -2,7 +2,7 @@ import postcss from 'postcss' import localByDefault from 'postcss-modules-local-by-default' import extractImports from 'postcss-modules-extract-imports' import scope from 'postcss-modules-scope' -import wip from "./wip" +import constants from "./postcss-modules-constants" import Parser from './parser' @@ -27,4 +27,4 @@ export default class Core { Core.localByDefault = localByDefault Core.extractImports = extractImports Core.scope = scope -Core.defaultPlugins = [wip, localByDefault, extractImports, scope] +Core.defaultPlugins = [constants, localByDefault, extractImports, scope] diff --git a/src/wip.js b/src/postcss-modules-constants.js similarity index 100% rename from src/wip.js rename to src/postcss-modules-constants.js diff --git a/test/test-cases/constants/colors.css b/test/test-cases/constants/colors.css index f6674cd..cf01725 100644 --- a/test/test-cases/constants/colors.css +++ b/test/test-cases/constants/colors.css @@ -1,2 +1,16 @@ -@let primary: aquamarine; -@let secondary: red; +@let primary: #f01; +@let secondary: #2f2; + +.text-primary { + color: primary; +} +.bg-primary { + background-color: primary; +} + +.text-secondary { + color: secondary; +} +.bg-secondary { + background-color: secondary; +} diff --git a/test/test-cases/constants/expected.css b/test/test-cases/constants/expected.css index 59ea63f..c47e0fc 100644 --- a/test/test-cases/constants/expected.css +++ b/test/test-cases/constants/expected.css @@ -1,11 +1,23 @@ ._constants_borders__dashed { border: 4px dashed; } +._constants_colors__text-primary { + color: #f01; +} +._constants_colors__bg-primary { + background-color: #f01; +} +._constants_colors__text-secondary { + color: #2f2; +} +._constants_colors__bg-secondary { + background-color: #2f2; +} ._constants_source__foo { - background: aquamarine; - border-color: red; + box-shadow: 0 0 10px #f01; + border-color: #2f2; } @media (max-width: 599px) { diff --git a/test/test-cases/constants/expected.json b/test/test-cases/constants/expected.json index 7cde827..2e70dc4 100644 --- a/test/test-cases/constants/expected.json +++ b/test/test-cases/constants/expected.json @@ -1,5 +1,5 @@ { "borders": "\"./borders.css\"", "breakpoints": "\"./breakpoints.css\"", - "foo": "_constants_source__foo _constants_borders__dashed" + "foo": "_constants_source__foo _constants_borders__dashed _constants_colors__text-secondary" } diff --git a/test/test-cases/constants/source.css b/test/test-cases/constants/source.css index ec8863c..fd4017f 100644 --- a/test/test-cases/constants/source.css +++ b/test/test-cases/constants/source.css @@ -4,7 +4,8 @@ .foo { composes: dashed from borders; - background: blue; + composes: text-secondary from "./colors.css"; + box-shadow: 0 0 10px blue; border-color: secondary; } From 08bae4d63d034b2ac51809bc873a194216bc7d51 Mon Sep 17 00:00:00 2001 From: Glen Maddern Date: Thu, 17 Sep 2015 18:23:35 +1000 Subject: [PATCH 40/82] changing to @define and @import-define --- src/postcss-modules-constants.js | 4 ++-- test/test-cases/constants/breakpoints.css | 6 +++--- test/test-cases/constants/colors.css | 4 ++-- test/test-cases/constants/expected.css | 3 +++ test/test-cases/constants/source.css | 7 +++++-- 5 files changed, 15 insertions(+), 9 deletions(-) diff --git a/src/postcss-modules-constants.js b/src/postcss-modules-constants.js index 2b3ef0a..79d5d3c 100644 --- a/src/postcss-modules-constants.js +++ b/src/postcss-modules-constants.js @@ -11,7 +11,7 @@ let createImportedName = options && options.createImportedName || ((importName/* export default css => { /* Find any local let rules and store them*/ let translations = {} - css.eachAtRule(/^-?let$/, atRule => { + css.eachAtRule(/^define$/, atRule => { let matches while (matches = matchLet.exec(atRule.params)) { let [/*match*/, key, value] = matches @@ -31,7 +31,7 @@ export default css => { /* Find imports and insert ICSS tmp vars */ let importAliases = [] - css.eachAtRule(/^-?import$/, atRule => { + css.eachAtRule(/^import(-define)?$/, atRule => { let matches = matchImports.exec(atRule.params) if (matches) { let [/*match*/, aliases, path] = matches diff --git a/test/test-cases/constants/breakpoints.css b/test/test-cases/constants/breakpoints.css index 33257e3..b1de8ac 100644 --- a/test/test-cases/constants/breakpoints.css +++ b/test/test-cases/constants/breakpoints.css @@ -1,3 +1,3 @@ -@let small (max-width: 599px); -@let medium (min-width: 600px) and (max-width: 959px); -@let large (min-width: 960px); +@define small (max-width: 599px); +@define medium (min-width: 600px) and (max-width: 959px); +@define large (min-width: 960px); diff --git a/test/test-cases/constants/colors.css b/test/test-cases/constants/colors.css index cf01725..969de28 100644 --- a/test/test-cases/constants/colors.css +++ b/test/test-cases/constants/colors.css @@ -1,5 +1,5 @@ -@let primary: #f01; -@let secondary: #2f2; +@define primary: #f01; +@define secondary: #2f2; .text-primary { color: primary; diff --git a/test/test-cases/constants/expected.css b/test/test-cases/constants/expected.css index c47e0fc..b5f566b 100644 --- a/test/test-cases/constants/expected.css +++ b/test/test-cases/constants/expected.css @@ -15,6 +15,9 @@ background-color: #2f2; } +/* Imports without a "from" are just passed through */ +@import url('./old-skool.css'); + ._constants_source__foo { box-shadow: 0 0 10px #f01; border-color: #2f2; diff --git a/test/test-cases/constants/source.css b/test/test-cases/constants/source.css index fd4017f..38016dd 100644 --- a/test/test-cases/constants/source.css +++ b/test/test-cases/constants/source.css @@ -1,7 +1,10 @@ -@let borders: "./borders.css", breakpoints: "./breakpoints.css"; -@-import small, medium from breakpoints; +@define borders: "./borders.css", breakpoints: "./breakpoints.css"; +@import-define small, medium from breakpoints; @import secondary, primary as blue from "./colors.css"; +/* Imports without a "from" are just passed through */ +@import url('./old-skool.css'); + .foo { composes: dashed from borders; composes: text-secondary from "./colors.css"; From eddbd967a004f7387a270b914efcf6be4a1aa9b9 Mon Sep 17 00:00:00 2001 From: Glen Maddern Date: Sat, 19 Sep 2015 14:20:56 +0200 Subject: [PATCH 41/82] using icss-replace-symbols --- package.json | 1 + src/parser.js | 2 +- src/postcss-modules-constants.js | 2 +- src/replace-symbols.js | 17 ----------------- 4 files changed, 3 insertions(+), 19 deletions(-) delete mode 100644 src/replace-symbols.js diff --git a/package.json b/package.json index 2742655..d15b372 100644 --- a/package.json +++ b/package.json @@ -7,6 +7,7 @@ "test": "test" }, "dependencies": { + "icss-replace-symbols": "^1.0.0", "postcss": "^4.1.11", "postcss-modules-extract-imports": "^0.0.6", "postcss-modules-local-by-default": "^0.0.9", diff --git a/src/parser.js b/src/parser.js index a54dabb..c3d1731 100644 --- a/src/parser.js +++ b/src/parser.js @@ -1,5 +1,5 @@ const importRegexp = /^:import\((.+)\)$/ -import replaceSymbols from './replace-symbols' +import replaceSymbols from 'icss-replace-symbols' export default class Parser { constructor( pathFetcher, trace ) { diff --git a/src/postcss-modules-constants.js b/src/postcss-modules-constants.js index 79d5d3c..9cbdc62 100644 --- a/src/postcss-modules-constants.js +++ b/src/postcss-modules-constants.js @@ -1,5 +1,5 @@ import postcss from 'postcss' -import replaceSymbols from './replace-symbols' +import replaceSymbols from 'icss-replace-symbols' const matchImports = /^(.+?)\s+from\s+("[^"]*"|'[^']*'|[\w-]+)$/ const matchLet = /(?:,\s+|^)([\w-]+):?\s+("[^"]*"|'[^']*'|[^,]+)\s?/g diff --git a/src/replace-symbols.js b/src/replace-symbols.js deleted file mode 100644 index 31b37e2..0000000 --- a/src/replace-symbols.js +++ /dev/null @@ -1,17 +0,0 @@ -const matchConstName = /[\w-]+/g - -const replace = (declarations, object, propName) => { - let matches - while (matches = matchConstName.exec(object[propName])) { - let replacement = declarations[matches[0]] - if (replacement) { - object[propName] = object[propName].slice(0, matches.index) + replacement + object[propName].slice(matchConstName.lastIndex) - matchConstName.lastIndex -= matches[0].length - replacement.length - } - } -} - -export default (css, translations) => { - css.eachDecl(decl => replace(translations, decl, 'value')) - css.eachAtRule('media', atRule => replace(translations, atRule, 'params')) -} From 38e38c75c17fdfecca0f5f69b3b51872abdee55c Mon Sep 17 00:00:00 2001 From: Glen Maddern Date: Sat, 19 Sep 2015 17:04:30 +0200 Subject: [PATCH 42/82] using the beta plugins, we are postcss v5 compliant! --- package.json | 17 ++++--- src/index.js | 7 +-- src/postcss-modules-constants.js | 84 -------------------------------- 3 files changed, 13 insertions(+), 95 deletions(-) delete mode 100644 src/postcss-modules-constants.js diff --git a/package.json b/package.json index d15b372..e97e6fb 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "css-modules-loader-core", - "version": "0.0.12", + "version": "1.0.0-beta1", "description": "A loader-agnostic CSS Modules implementation, based on PostCSS", "main": "lib/index.js", "directories": { @@ -8,17 +8,18 @@ }, "dependencies": { "icss-replace-symbols": "^1.0.0", - "postcss": "^4.1.11", - "postcss-modules-extract-imports": "^0.0.6", - "postcss-modules-local-by-default": "^0.0.9", - "postcss-modules-scope": "^0.0.8" + "postcss": "^5.0.5", + "postcss-modules-constants": "^1.0.0", + "postcss-modules-extract-imports": "1.0.0-beta2", + "postcss-modules-local-by-default": "css-modules/postcss-modules-local-by-default", + "postcss-modules-scope": "1.0.0-beta2" }, "devDependencies": { "babel": "^5.5.4", - "babel-eslint": "^3.1.14", + "babel-eslint": "^4.1.3", "babelify": "^6.1.2", - "chokidar-cli": "^0.2.1", - "eslint": "^0.22.1", + "chokidar-cli": "^1.0.1", + "eslint": "^1.5.0", "mocha": "^2.2.5" }, "scripts": { diff --git a/src/index.js b/src/index.js index b89be09..7a4ed09 100644 --- a/src/index.js +++ b/src/index.js @@ -2,7 +2,7 @@ import postcss from 'postcss' import localByDefault from 'postcss-modules-local-by-default' import extractImports from 'postcss-modules-extract-imports' import scope from 'postcss-modules-scope' -import constants from "./postcss-modules-constants" +import constants from 'postcss-modules-constants' import Parser from './parser' @@ -22,9 +22,10 @@ export default class Core { } } - -// These three plugins are aliased under this package for simplicity. +// These four plugins are aliased under this package for simplicity. Core.localByDefault = localByDefault Core.extractImports = extractImports Core.scope = scope +Core.constants = constants + Core.defaultPlugins = [constants, localByDefault, extractImports, scope] diff --git a/src/postcss-modules-constants.js b/src/postcss-modules-constants.js deleted file mode 100644 index 9cbdc62..0000000 --- a/src/postcss-modules-constants.js +++ /dev/null @@ -1,84 +0,0 @@ -import postcss from 'postcss' -import replaceSymbols from 'icss-replace-symbols' - -const matchImports = /^(.+?)\s+from\s+("[^"]*"|'[^']*'|[\w-]+)$/ -const matchLet = /(?:,\s+|^)([\w-]+):?\s+("[^"]*"|'[^']*'|[^,]+)\s?/g -const matchImport = /^([\w-]+)(?:\s+as\s+([\w-]+))?/ -let options = {} -let importIndex = 0 -let createImportedName = options && options.createImportedName || ((importName/*, path*/) => `i__const_${importName.replace(/\W/g, '_')}_${importIndex++}`) - -export default css => { - /* Find any local let rules and store them*/ - let translations = {} - css.eachAtRule(/^define$/, atRule => { - let matches - while (matches = matchLet.exec(atRule.params)) { - let [/*match*/, key, value] = matches - translations[key] = value - atRule.removeSelf() - } - }) - - /* We want to export anything defined by now, but don't add it to the CSS yet or - it well get picked up by the replacement stuff */ - let exportDeclarations = Object.keys(translations).map(key => postcss.decl({ - value: translations[key], - prop: key, - before: "\n ", - _autoprefixerDisabled: true - })) - - /* Find imports and insert ICSS tmp vars */ - let importAliases = [] - css.eachAtRule(/^import(-define)?$/, atRule => { - let matches = matchImports.exec(atRule.params) - if (matches) { - let [/*match*/, aliases, path] = matches - // We can use constants for path names - if (translations[path]) path = translations[path] - let imports = aliases.split(/\s*,\s*/).map(alias => { - let tokens = matchImport.exec(alias) - if (tokens) { - let [/*match*/, theirName, myName = theirName] = tokens - let importedName = createImportedName(myName) - translations[myName] = importedName - return {theirName, importedName} - } else { - throw new Error(`@import statement "${alias}" is invalid!`) - } - }) - importAliases.push({path, imports}) - atRule.removeSelf() - } - }) - - /* If we have no translations, don't continue */ - if (!Object.keys(translations).length) return - - /* Perform replacements */ - replaceSymbols(css, translations) - - /* Add import rules */ - importAliases.forEach(({path, imports}) => { - css.prepend(postcss.rule({ - selector: `:import(${path})`, - after: "\n", - nodes: imports.map(({theirName, importedName}) => postcss.decl({ - value: theirName, - prop: importedName, - before: "\n ", - _autoprefixerDisabled: true - })) - })) - }) - - /* Add export rules if any */ - if (exportDeclarations.length > 0) { - css.prepend(postcss.rule({ - selector: `:export`, - after: "\n", - nodes: exportDeclarations - })) - } -} From 377aeb0a59fa375ff328ea645b3315b998abefbf Mon Sep 17 00:00:00 2001 From: Glen Maddern Date: Tue, 22 Sep 2015 03:40:18 +0200 Subject: [PATCH 43/82] bumping to beta2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e97e6fb..049c7eb 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "css-modules-loader-core", - "version": "1.0.0-beta1", + "version": "1.0.0-beta2", "description": "A loader-agnostic CSS Modules implementation, based on PostCSS", "main": "lib/index.js", "directories": { From d66853a399e451f71b5b8d0a4d6045cddeabba5c Mon Sep 17 00:00:00 2001 From: Glen Maddern Date: Tue, 22 Sep 2015 08:12:06 +0200 Subject: [PATCH 44/82] using local-by-default beta --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 049c7eb..b5efd65 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "css-modules-loader-core", - "version": "1.0.0-beta2", + "version": "1.0.0-beta3", "description": "A loader-agnostic CSS Modules implementation, based on PostCSS", "main": "lib/index.js", "directories": { @@ -11,7 +11,7 @@ "postcss": "^5.0.5", "postcss-modules-constants": "^1.0.0", "postcss-modules-extract-imports": "1.0.0-beta2", - "postcss-modules-local-by-default": "css-modules/postcss-modules-local-by-default", + "postcss-modules-local-by-default": "1.0.0-beta1", "postcss-modules-scope": "1.0.0-beta2" }, "devDependencies": { From 1d8e60887adcc89c6feac3a85c3d68ebf5ec0685 Mon Sep 17 00:00:00 2001 From: Glen Maddern Date: Tue, 22 Sep 2015 11:47:25 +0200 Subject: [PATCH 45/82] renamed the project to values --- package.json | 2 +- src/index.js | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index b5efd65..8ba9035 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "dependencies": { "icss-replace-symbols": "^1.0.0", "postcss": "^5.0.5", - "postcss-modules-constants": "^1.0.0", + "postcss-modules-values": "^1.0.0", "postcss-modules-extract-imports": "1.0.0-beta2", "postcss-modules-local-by-default": "1.0.0-beta1", "postcss-modules-scope": "1.0.0-beta2" diff --git a/src/index.js b/src/index.js index 7a4ed09..92795bd 100644 --- a/src/index.js +++ b/src/index.js @@ -2,7 +2,7 @@ import postcss from 'postcss' import localByDefault from 'postcss-modules-local-by-default' import extractImports from 'postcss-modules-extract-imports' import scope from 'postcss-modules-scope' -import constants from 'postcss-modules-constants' +import values from 'postcss-modules-values' import Parser from './parser' @@ -23,9 +23,9 @@ export default class Core { } // These four plugins are aliased under this package for simplicity. +Core.values = values Core.localByDefault = localByDefault Core.extractImports = extractImports Core.scope = scope -Core.constants = constants -Core.defaultPlugins = [constants, localByDefault, extractImports, scope] +Core.defaultPlugins = [values, localByDefault, extractImports, scope] From 2b5a65dc43e39c1ed9ad40b7c1537ec4aff27bc3 Mon Sep 17 00:00:00 2001 From: Glen Maddern Date: Tue, 22 Sep 2015 11:51:59 +0200 Subject: [PATCH 46/82] updated test cases to use the new stuff --- test/test-cases/constants/breakpoints.css | 3 --- test/test-cases/constants/expected.json | 5 ----- .../test-cases/{constants => values}/borders.css | 0 test/test-cases/values/breakpoints.css | 3 +++ test/test-cases/{constants => values}/colors.css | 4 ++-- .../{constants => values}/expected.css | 16 ++++++++-------- test/test-cases/values/expected.json | 9 +++++++++ test/test-cases/{constants => values}/source.css | 6 +++--- 8 files changed, 25 insertions(+), 21 deletions(-) delete mode 100644 test/test-cases/constants/breakpoints.css delete mode 100644 test/test-cases/constants/expected.json rename test/test-cases/{constants => values}/borders.css (100%) create mode 100644 test/test-cases/values/breakpoints.css rename test/test-cases/{constants => values}/colors.css (78%) rename test/test-cases/{constants => values}/expected.css (60%) create mode 100644 test/test-cases/values/expected.json rename test/test-cases/{constants => values}/source.css (66%) diff --git a/test/test-cases/constants/breakpoints.css b/test/test-cases/constants/breakpoints.css deleted file mode 100644 index b1de8ac..0000000 --- a/test/test-cases/constants/breakpoints.css +++ /dev/null @@ -1,3 +0,0 @@ -@define small (max-width: 599px); -@define medium (min-width: 600px) and (max-width: 959px); -@define large (min-width: 960px); diff --git a/test/test-cases/constants/expected.json b/test/test-cases/constants/expected.json deleted file mode 100644 index 2e70dc4..0000000 --- a/test/test-cases/constants/expected.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "borders": "\"./borders.css\"", - "breakpoints": "\"./breakpoints.css\"", - "foo": "_constants_source__foo _constants_borders__dashed _constants_colors__text-secondary" -} diff --git a/test/test-cases/constants/borders.css b/test/test-cases/values/borders.css similarity index 100% rename from test/test-cases/constants/borders.css rename to test/test-cases/values/borders.css diff --git a/test/test-cases/values/breakpoints.css b/test/test-cases/values/breakpoints.css new file mode 100644 index 0000000..0b80b8b --- /dev/null +++ b/test/test-cases/values/breakpoints.css @@ -0,0 +1,3 @@ +@value small (max-width: 599px); +@value medium (min-width: 600px) and (max-width: 959px); +@value large (min-width: 960px); diff --git a/test/test-cases/constants/colors.css b/test/test-cases/values/colors.css similarity index 78% rename from test/test-cases/constants/colors.css rename to test/test-cases/values/colors.css index 969de28..ff83776 100644 --- a/test/test-cases/constants/colors.css +++ b/test/test-cases/values/colors.css @@ -1,5 +1,5 @@ -@define primary: #f01; -@define secondary: #2f2; +@value primary: #f01; +@value secondary: #2f2; .text-primary { color: primary; diff --git a/test/test-cases/constants/expected.css b/test/test-cases/values/expected.css similarity index 60% rename from test/test-cases/constants/expected.css rename to test/test-cases/values/expected.css index b5f566b..6713279 100644 --- a/test/test-cases/constants/expected.css +++ b/test/test-cases/values/expected.css @@ -1,35 +1,35 @@ -._constants_borders__dashed { +._values_borders__dashed { border: 4px dashed; } -._constants_colors__text-primary { +._values_colors__text-primary { color: #f01; } -._constants_colors__bg-primary { +._values_colors__bg-primary { background-color: #f01; } -._constants_colors__text-secondary { +._values_colors__text-secondary { color: #2f2; } -._constants_colors__bg-secondary { +._values_colors__bg-secondary { background-color: #2f2; } /* Imports without a "from" are just passed through */ @import url('./old-skool.css'); -._constants_source__foo { +._values_source__foo { box-shadow: 0 0 10px #f01; border-color: #2f2; } @media (max-width: 599px) { - ._constants_source__foo { + ._values_source__foo { background: white; } } @media (min-width: 600px) and (max-width: 959px) { - ._constants_source__foo { + ._values_source__foo { background: peru; } } diff --git a/test/test-cases/values/expected.json b/test/test-cases/values/expected.json new file mode 100644 index 0000000..ee98683 --- /dev/null +++ b/test/test-cases/values/expected.json @@ -0,0 +1,9 @@ +{ + "borders": "\"./borders.css\"", + "breakpoints": "\"./breakpoints.css\"", + "small": "(max-width: 599px)", + "medium": "(min-width: 600px) and (max-width: 959px)", + "secondary": "#2f2", + "blue": "#f01", + "foo": "_values_source__foo _values_borders__dashed _values_colors__text-secondary" +} diff --git a/test/test-cases/constants/source.css b/test/test-cases/values/source.css similarity index 66% rename from test/test-cases/constants/source.css rename to test/test-cases/values/source.css index 38016dd..2c63c32 100644 --- a/test/test-cases/constants/source.css +++ b/test/test-cases/values/source.css @@ -1,6 +1,6 @@ -@define borders: "./borders.css", breakpoints: "./breakpoints.css"; -@import-define small, medium from breakpoints; -@import secondary, primary as blue from "./colors.css"; +@value borders: "./borders.css", breakpoints: "./breakpoints.css"; +@value small, medium from breakpoints; +@value secondary, primary as blue from "./colors.css"; /* Imports without a "from" are just passed through */ @import url('./old-skool.css'); From 9f8e9b5523a38d37b1da81375db01bee726271bf Mon Sep 17 00:00:00 2001 From: Glen Maddern Date: Tue, 22 Sep 2015 11:52:11 +0200 Subject: [PATCH 47/82] beta4 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 8ba9035..cd00a56 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "css-modules-loader-core", - "version": "1.0.0-beta3", + "version": "1.0.0-beta4", "description": "A loader-agnostic CSS Modules implementation, based on PostCSS", "main": "lib/index.js", "directories": { From 08156aef147e35ae984839c142a96744fd036718 Mon Sep 17 00:00:00 2001 From: Glen Maddern Date: Tue, 20 Oct 2015 18:28:25 +1100 Subject: [PATCH 48/82] dont push old stuff --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index cd00a56..cb23091 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "build": "babel --out-dir lib src", "autotest": "chokidar src test -c 'npm test'", "test": "mocha --compilers js:babel/register", - "prepublish": "npm run build" + "prepublish": "rm -rf lib/* && npm run build" }, "repository": { "type": "git", From 75b21ebb433d48e034e3d5d584e4d61a47ce67ad Mon Sep 17 00:00:00 2001 From: Glen Maddern Date: Tue, 20 Oct 2015 18:43:41 +1100 Subject: [PATCH 49/82] update & lock down deps --- package.json | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index cb23091..6df9c00 100644 --- a/package.json +++ b/package.json @@ -7,20 +7,20 @@ "test": "test" }, "dependencies": { - "icss-replace-symbols": "^1.0.0", - "postcss": "^5.0.5", - "postcss-modules-values": "^1.0.0", + "icss-replace-symbols": "1.0.2", + "postcss": "5.0.10", + "postcss-modules-values": "1.1.0", "postcss-modules-extract-imports": "1.0.0-beta2", - "postcss-modules-local-by-default": "1.0.0-beta1", + "postcss-modules-local-by-default": "1.0.0", "postcss-modules-scope": "1.0.0-beta2" }, "devDependencies": { - "babel": "^5.5.4", - "babel-eslint": "^4.1.3", - "babelify": "^6.1.2", - "chokidar-cli": "^1.0.1", - "eslint": "^1.5.0", - "mocha": "^2.2.5" + "babel": "5.8.23", + "babel-eslint": "4.1.3", + "babelify": "6.3.0", + "chokidar-cli": "1.1.0", + "eslint": "1.7.2", + "mocha": "2.3.3" }, "scripts": { "lint": "eslint src", From 8cb6a18cc69d30dacdb1ebb185856157d8d038c1 Mon Sep 17 00:00:00 2001 From: Glen Maddern Date: Tue, 20 Oct 2015 18:46:15 +1100 Subject: [PATCH 50/82] whitespace diffs --- test/test-cases/values/expected.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test-cases/values/expected.css b/test/test-cases/values/expected.css index 6713279..0562fb8 100644 --- a/test/test-cases/values/expected.css +++ b/test/test-cases/values/expected.css @@ -1,6 +1,7 @@ ._values_borders__dashed { border: 4px dashed; } + ._values_colors__text-primary { color: #f01; } @@ -14,7 +15,6 @@ ._values_colors__bg-secondary { background-color: #2f2; } - /* Imports without a "from" are just passed through */ @import url('./old-skool.css'); From 62f4d1970f1a441100fb1da509a2cb585a488b4f Mon Sep 17 00:00:00 2001 From: Glen Maddern Date: Tue, 20 Oct 2015 18:50:22 +1100 Subject: [PATCH 51/82] woo no more deprecation warnings --- src/parser.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/parser.js b/src/parser.js index c3d1731..8dfb1dc 100644 --- a/src/parser.js +++ b/src/parser.js @@ -45,7 +45,7 @@ export default class Parser { this.exportTokens[decl.prop] = decl.value } } ) - exportNode.removeSelf() + exportNode.remove() } fetchImport( importNode, relativeTo, depNr ) { @@ -57,7 +57,7 @@ export default class Parser { this.translations[decl.prop] = exports[decl.value] } } ) - importNode.removeSelf() + importNode.remove() }, err => console.log( err ) ) } } From bad88832e7bd8b6d242508614aa5c05d47d27cb1 Mon Sep 17 00:00:00 2001 From: Glen Maddern Date: Wed, 21 Oct 2015 21:00:30 +1100 Subject: [PATCH 52/82] bumping deps to 1.0 --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 6df9c00..64c1f49 100644 --- a/package.json +++ b/package.json @@ -10,9 +10,9 @@ "icss-replace-symbols": "1.0.2", "postcss": "5.0.10", "postcss-modules-values": "1.1.0", - "postcss-modules-extract-imports": "1.0.0-beta2", + "postcss-modules-extract-imports": "1.0.0", "postcss-modules-local-by-default": "1.0.0", - "postcss-modules-scope": "1.0.0-beta2" + "postcss-modules-scope": "1.0.0" }, "devDependencies": { "babel": "5.8.23", From bf24ee6473694c9e924d645736f5115b21b28f34 Mon Sep 17 00:00:00 2001 From: Glen Maddern Date: Wed, 21 Oct 2015 21:02:46 +1100 Subject: [PATCH 53/82] just throwing a little global test case in there --- test/test-cases/multiple-dependencies/expected.json | 2 +- test/test-cases/multiple-dependencies/source.css | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/test/test-cases/multiple-dependencies/expected.json b/test/test-cases/multiple-dependencies/expected.json index 047434d..7327ebb 100644 --- a/test/test-cases/multiple-dependencies/expected.json +++ b/test/test-cases/multiple-dependencies/expected.json @@ -1,3 +1,3 @@ { - "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" + "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" } diff --git a/test/test-cases/multiple-dependencies/source.css b/test/test-cases/multiple-dependencies/source.css index 46e1595..0824a26 100644 --- a/test/test-cases/multiple-dependencies/source.css +++ b/test/test-cases/multiple-dependencies/source.css @@ -1,6 +1,7 @@ .a { composes: b1 b2 from "./b.css"; composes: c from "./c.css"; + composes: something-global from global; color: #aaa; } From 76335ca7e88f59198292019c1507e8394e1059ca Mon Sep 17 00:00:00 2001 From: Glen Maddern Date: Wed, 21 Oct 2015 21:06:44 +1100 Subject: [PATCH 54/82] oh yeah one point oh! Rubber baby buggy bumpers! --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 64c1f49..28f0282 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "css-modules-loader-core", - "version": "1.0.0-beta4", + "version": "1.0.0", "description": "A loader-agnostic CSS Modules implementation, based on PostCSS", "main": "lib/index.js", "directories": { From d41896c5f9b5cb126e457b266c87f6d8e10e26a1 Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Wed, 21 Oct 2015 21:13:03 +1100 Subject: [PATCH 55/82] chore(package): update dependencies http://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 28f0282..0cad382 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "devDependencies": { "babel": "5.8.23", "babel-eslint": "4.1.3", - "babelify": "6.3.0", + "babelify": "6.4.0", "chokidar-cli": "1.1.0", "eslint": "1.7.2", "mocha": "2.3.3" From 900bc7e3523a73fb2ddca2000553eaee8648465a Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Sun, 25 Oct 2015 03:34:43 +1100 Subject: [PATCH 56/82] chore(package): update babel to version 5.8.29 http://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 0cad382..53cb9c9 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "postcss-modules-scope": "1.0.0" }, "devDependencies": { - "babel": "5.8.23", + "babel": "5.8.29", "babel-eslint": "4.1.3", "babelify": "6.4.0", "chokidar-cli": "1.1.0", From 90a4fcf7f6277eabff5c904972f6930db84e7c04 Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Mon, 2 Nov 2015 11:20:46 +1100 Subject: [PATCH 57/82] chore(package): update postcss-modules-values to version 1.1.1 http://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 53cb9c9..2443f9a 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "dependencies": { "icss-replace-symbols": "1.0.2", "postcss": "5.0.10", - "postcss-modules-values": "1.1.0", + "postcss-modules-values": "1.1.1", "postcss-modules-extract-imports": "1.0.0", "postcss-modules-local-by-default": "1.0.0", "postcss-modules-scope": "1.0.0" From bfbe26012be72311fe7f0042372cd5c12bcb4ba9 Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Tue, 22 Dec 2015 20:14:45 +1100 Subject: [PATCH 58/82] chore(package): update postcss-modules-local-by-default to version 1.0.1 http://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 2443f9a..bb87ea1 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "postcss": "5.0.10", "postcss-modules-values": "1.1.1", "postcss-modules-extract-imports": "1.0.0", - "postcss-modules-local-by-default": "1.0.0", + "postcss-modules-local-by-default": "1.0.1", "postcss-modules-scope": "1.0.0" }, "devDependencies": { From 95fbb9c62e748ad5d72ea9bca31127e03dbf464a Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Mon, 21 Mar 2016 17:37:05 +1100 Subject: [PATCH 59/82] chore(package): update postcss-modules-values to version 1.1.2 http://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index bb87ea1..c3e7e90 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "dependencies": { "icss-replace-symbols": "1.0.2", "postcss": "5.0.10", - "postcss-modules-values": "1.1.1", + "postcss-modules-values": "1.1.2", "postcss-modules-extract-imports": "1.0.0", "postcss-modules-local-by-default": "1.0.1", "postcss-modules-scope": "1.0.0" From 8618ccf7dbaa4073ea0850421a26d3d6a6667e8f Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Sat, 13 Aug 2016 04:55:00 +1000 Subject: [PATCH 60/82] chore(package): update eslint to version 3.3.0 https://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index c3e7e90..72fb690 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,7 @@ "babel-eslint": "4.1.3", "babelify": "6.4.0", "chokidar-cli": "1.1.0", - "eslint": "1.7.2", + "eslint": "3.3.0", "mocha": "2.3.3" }, "scripts": { From 5d0d7c5b58120309fb9434e97ab598eb30dbc90c Mon Sep 17 00:00:00 2001 From: Glen Maddern Date: Mon, 15 Aug 2016 14:15:31 +1000 Subject: [PATCH 61/82] not using the multi-definition syntax since it has been broken for a while --- test/test-cases/values/source.css | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/test-cases/values/source.css b/test/test-cases/values/source.css index 2c63c32..3953a8d 100644 --- a/test/test-cases/values/source.css +++ b/test/test-cases/values/source.css @@ -1,4 +1,5 @@ -@value borders: "./borders.css", breakpoints: "./breakpoints.css"; +@value borders: "./borders.css"; +@value breakpoints: "./breakpoints.css"; @value small, medium from breakpoints; @value secondary, primary as blue from "./colors.css"; From e5e38657fcbb65e5dd3d086509bdca6c38498b26 Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Tue, 16 Aug 2016 07:41:54 +1000 Subject: [PATCH 62/82] chore(package): update eslint to version 3.3.1 https://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 72fb690..d8e0a34 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,7 @@ "babel-eslint": "4.1.3", "babelify": "6.4.0", "chokidar-cli": "1.1.0", - "eslint": "3.3.0", + "eslint": "3.3.1", "mocha": "2.3.3" }, "scripts": { From 6904eac46adeb1deea50e859b298d584f48bc893 Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Tue, 16 Aug 2016 12:32:30 +1000 Subject: [PATCH 63/82] chore(package): update postcss-modules-values to version 1.2.2 https://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d8e0a34..cb392e6 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "dependencies": { "icss-replace-symbols": "1.0.2", "postcss": "5.0.10", - "postcss-modules-values": "1.1.2", + "postcss-modules-values": "1.2.2", "postcss-modules-extract-imports": "1.0.0", "postcss-modules-local-by-default": "1.0.1", "postcss-modules-scope": "1.0.0" From 878512d1db68a16e5883bf8626886ad9691b709b Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Tue, 16 Aug 2016 12:32:33 +1000 Subject: [PATCH 64/82] chore(package): update mocha to version 3.0.2 https://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d8e0a34..9eb7e83 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,7 @@ "babelify": "6.4.0", "chokidar-cli": "1.1.0", "eslint": "3.3.1", - "mocha": "2.3.3" + "mocha": "3.0.2" }, "scripts": { "lint": "eslint src", From a4f641e1e1eecb319b5993c3dfcbb8e7e4e83b4f Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Tue, 16 Aug 2016 12:34:33 +1000 Subject: [PATCH 65/82] chore(package): update postcss to version 5.1.2 https://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 5ae1291..7b6f88b 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ }, "dependencies": { "icss-replace-symbols": "1.0.2", - "postcss": "5.0.10", + "postcss": "5.1.2", "postcss-modules-values": "1.2.2", "postcss-modules-extract-imports": "1.0.0", "postcss-modules-local-by-default": "1.0.1", From a67ab90e2f29848e0f83c86a5b058de930cbc77b Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Tue, 16 Aug 2016 12:34:33 +1000 Subject: [PATCH 66/82] chore(package): update postcss-modules-scope to version 1.0.2 https://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 5ae1291..a34272d 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "postcss-modules-values": "1.2.2", "postcss-modules-extract-imports": "1.0.0", "postcss-modules-local-by-default": "1.0.1", - "postcss-modules-scope": "1.0.0" + "postcss-modules-scope": "1.0.2" }, "devDependencies": { "babel": "5.8.29", From 9939f740e0a1fda467dbf4a82c142618da1c0f98 Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Tue, 16 Aug 2016 12:35:07 +1000 Subject: [PATCH 67/82] chore(package): update postcss-modules-local-by-default to version 1.1.1 https://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 7f07f52..e79e5e6 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "postcss": "5.1.2", "postcss-modules-values": "1.2.2", "postcss-modules-extract-imports": "1.0.0", - "postcss-modules-local-by-default": "1.0.1", + "postcss-modules-local-by-default": "1.1.1", "postcss-modules-scope": "1.0.2" }, "devDependencies": { From ea8601405b407360435cfe4db3f67e4586efaabe Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Tue, 16 Aug 2016 12:35:36 +1000 Subject: [PATCH 68/82] chore(package): update postcss-modules-extract-imports to version 1.0.1 https://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e79e5e6..572465c 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ "icss-replace-symbols": "1.0.2", "postcss": "5.1.2", "postcss-modules-values": "1.2.2", - "postcss-modules-extract-imports": "1.0.0", + "postcss-modules-extract-imports": "1.0.1", "postcss-modules-local-by-default": "1.1.1", "postcss-modules-scope": "1.0.2" }, From c419d46b9f8b0fc63676bc142a8f4ad79e7448e5 Mon Sep 17 00:00:00 2001 From: Josh Johnston Date: Mon, 30 Nov 2015 22:56:09 +1100 Subject: [PATCH 69/82] map sources by filename, so we can update a certain source --- src/file-system-loader.js | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/file-system-loader.js b/src/file-system-loader.js index 2a3f47d..e26c2c0 100644 --- a/src/file-system-loader.js +++ b/src/file-system-loader.js @@ -23,6 +23,7 @@ export default class FileSystemLoader { constructor( root, plugins ) { this.root = root this.sources = {} + this.traces = {} this.importNr = 0 this.core = new Core(plugins) this.tokensByFile = {}; @@ -51,7 +52,8 @@ export default class FileSystemLoader { if ( err ) reject( err ) this.core.load( source, rootRelativePath, trace, this.fetch.bind( this ) ) .then( ( { injectableSource, exportTokens } ) => { - this.sources[trace] = injectableSource + this.sources[fileRelativePath] = injectableSource + this.traces[trace] = fileRelativePath this.tokensByFile[fileRelativePath] = exportTokens resolve( exportTokens ) }, reject ) @@ -60,7 +62,16 @@ export default class FileSystemLoader { } get finalSource() { - return Object.keys( this.sources ).sort( traceKeySorter ).map( s => this.sources[s] ) - .join( "" ) + const traces = this.traces + const sources = this.sources + let written = new Set() + + return Object.keys( traces ).sort( traceKeySorter ).map(key => { + const filename = traces[key] + if (written.has(filename)) { return null } + written.add(filename) + + return sources[filename]; + }).join( "" ) } } From c905868308a0e768515b278720972c68c4be85e6 Mon Sep 17 00:00:00 2001 From: Glen Maddern Date: Fri, 19 Aug 2016 12:28:38 +1000 Subject: [PATCH 70/82] 1.0.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e79e5e6..18ebe13 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "css-modules-loader-core", - "version": "1.0.0", + "version": "1.0.1", "description": "A loader-agnostic CSS Modules implementation, based on PostCSS", "main": "lib/index.js", "directories": { From 0b1f15ee1875cd9d4430168c2edfac87bc127562 Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Wed, 7 Sep 2016 14:34:18 +1000 Subject: [PATCH 71/82] chore(package): update postcss to version 5.2.0 https://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 18ebe13..6f18d69 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ }, "dependencies": { "icss-replace-symbols": "1.0.2", - "postcss": "5.1.2", + "postcss": "5.2.0", "postcss-modules-values": "1.2.2", "postcss-modules-extract-imports": "1.0.0", "postcss-modules-local-by-default": "1.1.1", From bd96e79f2bb198cc5bdde15a53188ebce1cdaf54 Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Sat, 10 Sep 2016 06:16:18 +1000 Subject: [PATCH 72/82] chore(package): update eslint to version 3.5.0 https://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 6f18d69..6f0a0ad 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,7 @@ "babel-eslint": "4.1.3", "babelify": "6.4.0", "chokidar-cli": "1.1.0", - "eslint": "3.3.1", + "eslint": "3.5.0", "mocha": "3.0.2" }, "scripts": { From db0da2895d1032d0914d8eed5fde6d0e48f25cfe Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Thu, 27 Oct 2016 05:48:19 +1100 Subject: [PATCH 73/82] chore(package): update babel-eslint to version 7.1.0 https://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 6f0a0ad..0d3629c 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ }, "devDependencies": { "babel": "5.8.29", - "babel-eslint": "4.1.3", + "babel-eslint": "7.1.0", "babelify": "6.4.0", "chokidar-cli": "1.1.0", "eslint": "3.5.0", From 2913edbd8e5fa47f380b635b3da3a1187496b959 Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Tue, 1 Nov 2016 03:23:05 +0800 Subject: [PATCH 74/82] chore(package): update eslint to version 3.9.1 https://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 6f0a0ad..8dbd88e 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,7 @@ "babel-eslint": "4.1.3", "babelify": "6.4.0", "chokidar-cli": "1.1.0", - "eslint": "3.5.0", + "eslint": "3.9.1", "mocha": "3.0.2" }, "scripts": { From fa312371ea0331673774421f8d66671f9639455a Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Tue, 1 Nov 2016 07:55:15 +0800 Subject: [PATCH 75/82] chore: drop support for Node.js 0.10 BREAKING CHANGE: This module no longer supports Node.js 0.10 --- .travis.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 5737015..d669492 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,4 @@ language: node_js node_js: - - "0.12" - - "0.10" - - "iojs" + - 4 + - 6 From a4498c623b3ff86a16f8adfa19f4301a34264475 Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Mon, 7 Nov 2016 15:21:04 +1100 Subject: [PATCH 76/82] chore(package): update postcss to version 5.2.5 https://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 7ec64d1..06defb0 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ }, "dependencies": { "icss-replace-symbols": "1.0.2", - "postcss": "5.2.0", + "postcss": "5.2.5", "postcss-modules-values": "1.2.2", "postcss-modules-extract-imports": "1.0.0", "postcss-modules-local-by-default": "1.1.1", From d036ce23c3ba975039441769138cc26cf8e5c6fc Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Mon, 7 Nov 2016 15:21:14 +1100 Subject: [PATCH 77/82] chore(package): update mocha to version 3.1.2 https://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 06defb0..43387f7 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,7 @@ "babelify": "6.4.0", "chokidar-cli": "1.1.0", "eslint": "3.9.1", - "mocha": "3.0.2" + "mocha": "3.1.2" }, "scripts": { "lint": "eslint src", From 1a6b1b33ecf33ed1454c10f943f664b7f1ce09b6 Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Mon, 7 Nov 2016 15:21:14 +1100 Subject: [PATCH 78/82] chore(package): update babelify to version 7.3.0 https://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 06defb0..61aa404 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "devDependencies": { "babel": "5.8.29", "babel-eslint": "7.1.0", - "babelify": "6.4.0", + "babelify": "7.3.0", "chokidar-cli": "1.1.0", "eslint": "3.9.1", "mocha": "3.0.2" From 2be044e0e7e6a239a482496a00f02425817eb715 Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Sat, 12 Nov 2016 07:19:37 +1100 Subject: [PATCH 79/82] chore(package): update eslint to version 3.10.0 https://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 481c0d1..afdff29 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,7 @@ "babel-eslint": "7.1.0", "babelify": "7.3.0", "chokidar-cli": "1.1.0", - "eslint": "3.9.1", + "eslint": "3.10.0", "mocha": "3.1.2" }, "scripts": { From 464ad2ae0a5a3fb8018afeb489cce73e9ba575c9 Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Tue, 15 Nov 2016 06:30:05 +1100 Subject: [PATCH 80/82] chore(package): update eslint to version 3.10.1 https://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index afdff29..8677c21 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,7 @@ "babel-eslint": "7.1.0", "babelify": "7.3.0", "chokidar-cli": "1.1.0", - "eslint": "3.10.0", + "eslint": "3.10.1", "mocha": "3.1.2" }, "scripts": { From d3973313dcc10fcdf1ceaaf5a9bd6de162ef3a6f Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Mon, 9 Jan 2017 18:20:44 +1100 Subject: [PATCH 81/82] chore(package): update postcss to version 5.2.9 https://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 8677c21..d9c8d36 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ }, "dependencies": { "icss-replace-symbols": "1.0.2", - "postcss": "5.2.5", + "postcss": "5.2.9", "postcss-modules-values": "1.2.2", "postcss-modules-extract-imports": "1.0.1", "postcss-modules-local-by-default": "1.1.1", From 2d2640708400a0d05e5fe714a2b7f56e1a0f98f3 Mon Sep 17 00:00:00 2001 From: Alexey Litvinov Date: Mon, 22 May 2017 10:03:55 +0300 Subject: [PATCH 82/82] update to postcss v6 --- package.json | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index d9c8d36..01f795d 100644 --- a/package.json +++ b/package.json @@ -1,18 +1,18 @@ { "name": "css-modules-loader-core", - "version": "1.0.1", + "version": "1.1.0", "description": "A loader-agnostic CSS Modules implementation, based on PostCSS", "main": "lib/index.js", "directories": { "test": "test" }, "dependencies": { - "icss-replace-symbols": "1.0.2", - "postcss": "5.2.9", - "postcss-modules-values": "1.2.2", - "postcss-modules-extract-imports": "1.0.1", - "postcss-modules-local-by-default": "1.1.1", - "postcss-modules-scope": "1.0.2" + "icss-replace-symbols": "1.1.0", + "postcss": "6.0.1", + "postcss-modules-extract-imports": "1.1.0", + "postcss-modules-local-by-default": "1.2.0", + "postcss-modules-scope": "1.1.0", + "postcss-modules-values": "1.3.0" }, "devDependencies": { "babel": "5.8.29",