@nx/rollup 22.4.0-beta.2 → 22.4.0-beta.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +7 -5
- package/src/plugins/postcss/index.d.ts +16 -0
- package/src/plugins/postcss/index.d.ts.map +1 -0
- package/src/plugins/postcss/index.js +19 -0
- package/src/plugins/postcss/loaders/index.d.ts +38 -0
- package/src/plugins/postcss/loaders/index.d.ts.map +1 -0
- package/src/plugins/postcss/loaders/index.js +90 -0
- package/src/plugins/postcss/loaders/less-loader.d.ts +7 -0
- package/src/plugins/postcss/loaders/less-loader.d.ts.map +1 -0
- package/src/plugins/postcss/loaders/less-loader.js +48 -0
- package/src/plugins/postcss/loaders/postcss-loader.d.ts +7 -0
- package/src/plugins/postcss/loaders/postcss-loader.d.ts.map +1 -0
- package/src/plugins/postcss/loaders/postcss-loader.js +172 -0
- package/src/plugins/postcss/loaders/sass-loader.d.ts +7 -0
- package/src/plugins/postcss/loaders/sass-loader.d.ts.map +1 -0
- package/src/plugins/postcss/loaders/sass-loader.js +164 -0
- package/src/plugins/postcss/loaders/stylus-loader.d.ts +7 -0
- package/src/plugins/postcss/loaders/stylus-loader.d.ts.map +1 -0
- package/src/plugins/postcss/loaders/stylus-loader.js +60 -0
- package/src/plugins/postcss/loaders/types.d.ts +88 -0
- package/src/plugins/postcss/loaders/types.d.ts.map +1 -0
- package/src/plugins/postcss/loaders/types.js +2 -0
- package/src/plugins/postcss/options.d.ts +111 -0
- package/src/plugins/postcss/options.d.ts.map +1 -0
- package/src/plugins/postcss/options.js +19 -0
- package/src/plugins/postcss/postcss-plugin.d.ts +10 -0
- package/src/plugins/postcss/postcss-plugin.d.ts.map +1 -0
- package/src/plugins/postcss/postcss-plugin.js +275 -0
- package/src/plugins/postcss/types/concat-with-sourcemaps.d.ts +29 -0
- package/src/plugins/postcss/utils/index.d.ts +5 -0
- package/src/plugins/postcss/utils/index.d.ts.map +1 -0
- package/src/plugins/postcss/utils/index.js +16 -0
- package/src/plugins/postcss/utils/load-module.d.ts +11 -0
- package/src/plugins/postcss/utils/load-module.d.ts.map +1 -0
- package/src/plugins/postcss/utils/load-module.js +36 -0
- package/src/plugins/postcss/utils/normalize-path.d.ts +10 -0
- package/src/plugins/postcss/utils/normalize-path.d.ts.map +1 -0
- package/src/plugins/postcss/utils/normalize-path.js +21 -0
- package/src/plugins/postcss/utils/safe-identifier.d.ts +14 -0
- package/src/plugins/postcss/utils/safe-identifier.d.ts.map +1 -0
- package/src/plugins/postcss/utils/safe-identifier.js +89 -0
- package/src/plugins/postcss/utils/style-inject.d.ts +21 -0
- package/src/plugins/postcss/utils/style-inject.d.ts.map +1 -0
- package/src/plugins/postcss/utils/style-inject.js +55 -0
- package/src/plugins/with-nx/with-nx.d.ts.map +1 -1
- package/src/plugins/with-nx/with-nx.js +3 -2
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nx/rollup",
|
|
3
|
-
"version": "22.4.0-beta.
|
|
3
|
+
"version": "22.4.0-beta.4",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "The Nx Plugin for Rollup contains executors and generators that support building applications using Rollup.",
|
|
6
6
|
"repository": {
|
|
@@ -29,8 +29,8 @@
|
|
|
29
29
|
"migrations": "./migrations.json"
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@nx/devkit": "22.4.0-beta.
|
|
33
|
-
"@nx/js": "22.4.0-beta.
|
|
32
|
+
"@nx/devkit": "22.4.0-beta.4",
|
|
33
|
+
"@nx/js": "22.4.0-beta.4",
|
|
34
34
|
"@rollup/plugin-babel": "^6.0.4",
|
|
35
35
|
"@rollup/plugin-commonjs": "^25.0.7",
|
|
36
36
|
"@rollup/plugin-image": "^3.0.3",
|
|
@@ -38,16 +38,18 @@
|
|
|
38
38
|
"@rollup/plugin-node-resolve": "^15.2.3",
|
|
39
39
|
"@rollup/plugin-typescript": "^12.1.0",
|
|
40
40
|
"autoprefixer": "^10.4.9",
|
|
41
|
+
"concat-with-sourcemaps": "^1.1.0",
|
|
41
42
|
"picocolors": "^1.1.0",
|
|
42
43
|
"picomatch": "4.0.2",
|
|
43
44
|
"postcss": "^8.4.38",
|
|
45
|
+
"postcss-modules": "^6.0.1",
|
|
44
46
|
"rollup": "^4.14.0",
|
|
45
|
-
"rollup-plugin-postcss": "^4.0.2",
|
|
46
47
|
"rollup-plugin-typescript2": "^0.36.0",
|
|
47
48
|
"tslib": "^2.3.0"
|
|
48
49
|
},
|
|
49
50
|
"devDependencies": {
|
|
50
|
-
"nx": "22.4.0-beta.
|
|
51
|
+
"nx": "22.4.0-beta.4",
|
|
52
|
+
"source-map-js": "^1.2.0"
|
|
51
53
|
},
|
|
52
54
|
"publishConfig": {
|
|
53
55
|
"access": "public"
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @nx/rollup PostCSS plugin
|
|
3
|
+
*
|
|
4
|
+
* An inlined, simplified version of rollup-plugin-postcss that:
|
|
5
|
+
* - Processes CSS files through PostCSS
|
|
6
|
+
* - Supports CSS preprocessors (Sass, Less, Stylus)
|
|
7
|
+
* - Supports CSS Modules
|
|
8
|
+
* - Can inject CSS into DOM or extract to separate files
|
|
9
|
+
*
|
|
10
|
+
* This replaces the external rollup-plugin-postcss dependency to avoid
|
|
11
|
+
* peer dependency conflicts and maintenance issues.
|
|
12
|
+
*/
|
|
13
|
+
export { postcss } from './postcss-plugin';
|
|
14
|
+
export { postcss as default } from './postcss-plugin';
|
|
15
|
+
export type { PostCSSPluginOptions, PostCSSModulesOptions, FilterPattern, UseOptions, LessOptions, SassOptions, StylusOptions, } from './options';
|
|
16
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/rollup/src/plugins/postcss/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAEtD,YAAY,EACV,oBAAoB,EACpB,qBAAqB,EACrB,aAAa,EACb,UAAU,EACV,WAAW,EACX,WAAW,EACX,aAAa,GACd,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @nx/rollup PostCSS plugin
|
|
4
|
+
*
|
|
5
|
+
* An inlined, simplified version of rollup-plugin-postcss that:
|
|
6
|
+
* - Processes CSS files through PostCSS
|
|
7
|
+
* - Supports CSS preprocessors (Sass, Less, Stylus)
|
|
8
|
+
* - Supports CSS Modules
|
|
9
|
+
* - Can inject CSS into DOM or extract to separate files
|
|
10
|
+
*
|
|
11
|
+
* This replaces the external rollup-plugin-postcss dependency to avoid
|
|
12
|
+
* peer dependency conflicts and maintenance issues.
|
|
13
|
+
*/
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.default = exports.postcss = void 0;
|
|
16
|
+
var postcss_plugin_1 = require("./postcss-plugin");
|
|
17
|
+
Object.defineProperty(exports, "postcss", { enumerable: true, get: function () { return postcss_plugin_1.postcss; } });
|
|
18
|
+
var postcss_plugin_2 = require("./postcss-plugin");
|
|
19
|
+
Object.defineProperty(exports, "default", { enumerable: true, get: function () { return postcss_plugin_2.postcss; } });
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { LoaderContext, LoaderResult, PostCSSLoaderOptions } from './types';
|
|
2
|
+
import type { UseOptions } from '../options';
|
|
3
|
+
export * from './types';
|
|
4
|
+
export { createPostCSSLoader } from './postcss-loader';
|
|
5
|
+
export { createLessLoader } from './less-loader';
|
|
6
|
+
export { createSassLoader } from './sass-loader';
|
|
7
|
+
export { createStylusLoader } from './stylus-loader';
|
|
8
|
+
interface LoadersOptions {
|
|
9
|
+
/** PostCSS loader options */
|
|
10
|
+
postcss: PostCSSLoaderOptions;
|
|
11
|
+
/** Preprocessor options */
|
|
12
|
+
use: UseOptions;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Manages the chain of CSS loaders (preprocessors + PostCSS)
|
|
16
|
+
*/
|
|
17
|
+
export declare class Loaders {
|
|
18
|
+
private loaders;
|
|
19
|
+
constructor(options: LoadersOptions);
|
|
20
|
+
/**
|
|
21
|
+
* Register preprocessor loaders based on the 'use' option
|
|
22
|
+
*/
|
|
23
|
+
private registerPreprocessors;
|
|
24
|
+
/**
|
|
25
|
+
* Check if any loader can process the given file
|
|
26
|
+
*/
|
|
27
|
+
isSupported(filepath: string): boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Check if a file matches a loader's test
|
|
30
|
+
*/
|
|
31
|
+
private matchesLoader;
|
|
32
|
+
/**
|
|
33
|
+
* Process a file through the loader chain
|
|
34
|
+
* Preprocessors run first (if matching), then PostCSS always runs
|
|
35
|
+
*/
|
|
36
|
+
process(code: string, context: LoaderContext): Promise<LoaderResult>;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../packages/rollup/src/plugins/postcss/loaders/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,aAAa,EACb,YAAY,EACZ,oBAAoB,EAIrB,MAAM,SAAS,CAAC;AAKjB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD,UAAU,cAAc;IACtB,6BAA6B;IAC7B,OAAO,EAAE,oBAAoB,CAAC;IAC9B,2BAA2B;IAC3B,GAAG,EAAE,UAAU,CAAC;CACjB;AAED;;GAEG;AACH,qBAAa,OAAO;IAClB,OAAO,CAAC,OAAO,CAAgB;gBAEnB,OAAO,EAAE,cAAc;IASnC;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAuB7B;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAItC;;OAEG;IACH,OAAO,CAAC,aAAa;IAOrB;;;OAGG;IACG,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;CAwB3E"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Loaders = exports.createStylusLoader = exports.createSassLoader = exports.createLessLoader = exports.createPostCSSLoader = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const postcss_loader_1 = require("./postcss-loader");
|
|
6
|
+
const less_loader_1 = require("./less-loader");
|
|
7
|
+
const sass_loader_1 = require("./sass-loader");
|
|
8
|
+
const stylus_loader_1 = require("./stylus-loader");
|
|
9
|
+
tslib_1.__exportStar(require("./types"), exports);
|
|
10
|
+
var postcss_loader_2 = require("./postcss-loader");
|
|
11
|
+
Object.defineProperty(exports, "createPostCSSLoader", { enumerable: true, get: function () { return postcss_loader_2.createPostCSSLoader; } });
|
|
12
|
+
var less_loader_2 = require("./less-loader");
|
|
13
|
+
Object.defineProperty(exports, "createLessLoader", { enumerable: true, get: function () { return less_loader_2.createLessLoader; } });
|
|
14
|
+
var sass_loader_2 = require("./sass-loader");
|
|
15
|
+
Object.defineProperty(exports, "createSassLoader", { enumerable: true, get: function () { return sass_loader_2.createSassLoader; } });
|
|
16
|
+
var stylus_loader_2 = require("./stylus-loader");
|
|
17
|
+
Object.defineProperty(exports, "createStylusLoader", { enumerable: true, get: function () { return stylus_loader_2.createStylusLoader; } });
|
|
18
|
+
/**
|
|
19
|
+
* Manages the chain of CSS loaders (preprocessors + PostCSS)
|
|
20
|
+
*/
|
|
21
|
+
class Loaders {
|
|
22
|
+
constructor(options) {
|
|
23
|
+
this.loaders = [];
|
|
24
|
+
// Register preprocessor loaders based on 'use' options
|
|
25
|
+
// These are registered first and process files before PostCSS
|
|
26
|
+
this.registerPreprocessors(options.use);
|
|
27
|
+
// Register the PostCSS loader last - it always processes
|
|
28
|
+
this.loaders.push((0, postcss_loader_1.createPostCSSLoader)(options.postcss));
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Register preprocessor loaders based on the 'use' option
|
|
32
|
+
*/
|
|
33
|
+
registerPreprocessors(use) {
|
|
34
|
+
// Less loader
|
|
35
|
+
if (use.less !== false) {
|
|
36
|
+
const lessOptions = typeof use.less === 'object' ? use.less : {};
|
|
37
|
+
this.loaders.push((0, less_loader_1.createLessLoader)(lessOptions));
|
|
38
|
+
}
|
|
39
|
+
// Sass loader
|
|
40
|
+
if (use.sass !== false) {
|
|
41
|
+
const sassOptions = typeof use.sass === 'object' ? use.sass : {};
|
|
42
|
+
this.loaders.push((0, sass_loader_1.createSassLoader)(sassOptions));
|
|
43
|
+
}
|
|
44
|
+
// Stylus loader
|
|
45
|
+
if (use.stylus !== false) {
|
|
46
|
+
const stylusOptions = typeof use.stylus === 'object' ? use.stylus : {};
|
|
47
|
+
this.loaders.push((0, stylus_loader_1.createStylusLoader)(stylusOptions));
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Check if any loader can process the given file
|
|
52
|
+
*/
|
|
53
|
+
isSupported(filepath) {
|
|
54
|
+
return this.loaders.some((loader) => this.matchesLoader(loader, filepath));
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Check if a file matches a loader's test
|
|
58
|
+
*/
|
|
59
|
+
matchesLoader(loader, filepath) {
|
|
60
|
+
if (typeof loader.test === 'function') {
|
|
61
|
+
return loader.test(filepath);
|
|
62
|
+
}
|
|
63
|
+
return loader.test.test(filepath);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Process a file through the loader chain
|
|
67
|
+
* Preprocessors run first (if matching), then PostCSS always runs
|
|
68
|
+
*/
|
|
69
|
+
async process(code, context) {
|
|
70
|
+
let result = { code };
|
|
71
|
+
// Process through each loader in order
|
|
72
|
+
for (const loader of this.loaders) {
|
|
73
|
+
// Skip non-matching loaders unless they always process
|
|
74
|
+
if (!loader.alwaysProcess && !this.matchesLoader(loader, context.id)) {
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
// Process with this loader
|
|
78
|
+
const loaderResult = await loader.process(result.code, context);
|
|
79
|
+
// Merge the result
|
|
80
|
+
result = {
|
|
81
|
+
...result,
|
|
82
|
+
...loaderResult,
|
|
83
|
+
// Preserve the map from the latest loader that produced one
|
|
84
|
+
map: loaderResult.map ?? result.map,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
return result;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
exports.Loaders = Loaders;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"less-loader.d.ts","sourceRoot":"","sources":["../../../../../../../packages/rollup/src/plugins/postcss/loaders/less-loader.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,MAAM,EAGN,iBAAiB,EAClB,MAAM,SAAS,CAAC;AAwCjB;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,GAAE,iBAAsB,GAAG,MAAM,CA2CxE"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createLessLoader = createLessLoader;
|
|
4
|
+
const util_1 = require("util");
|
|
5
|
+
const utils_1 = require("../utils");
|
|
6
|
+
let less;
|
|
7
|
+
/**
|
|
8
|
+
* Less preprocessor loader
|
|
9
|
+
* Compiles .less files to CSS
|
|
10
|
+
*/
|
|
11
|
+
function createLessLoader(options = {}) {
|
|
12
|
+
return {
|
|
13
|
+
name: 'less',
|
|
14
|
+
test: /\.less$/,
|
|
15
|
+
async process(code, context) {
|
|
16
|
+
if (!less) {
|
|
17
|
+
less = (0, utils_1.requireModule)('less', 'Less');
|
|
18
|
+
}
|
|
19
|
+
const render = (0, util_1.promisify)(less.render.bind(less));
|
|
20
|
+
const result = await render(code, {
|
|
21
|
+
...options,
|
|
22
|
+
filename: context.id,
|
|
23
|
+
sourceMap: context.sourceMap
|
|
24
|
+
? {
|
|
25
|
+
outputSourceFiles: true,
|
|
26
|
+
}
|
|
27
|
+
: undefined,
|
|
28
|
+
});
|
|
29
|
+
// Track dependencies
|
|
30
|
+
if (result.imports) {
|
|
31
|
+
for (const dep of result.imports) {
|
|
32
|
+
context.dependencies.add(dep);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
let map;
|
|
36
|
+
if (result.map) {
|
|
37
|
+
map = JSON.parse(result.map);
|
|
38
|
+
if (map && map.sources) {
|
|
39
|
+
map.sources = map.sources.map(utils_1.humanizePath);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return {
|
|
43
|
+
code: result.css,
|
|
44
|
+
map,
|
|
45
|
+
};
|
|
46
|
+
},
|
|
47
|
+
};
|
|
48
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Loader, PostCSSLoaderOptions } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* PostCSS loader - processes CSS through PostCSS plugins
|
|
4
|
+
* This loader always runs last in the chain
|
|
5
|
+
*/
|
|
6
|
+
export declare function createPostCSSLoader(options: PostCSSLoaderOptions): Loader;
|
|
7
|
+
//# sourceMappingURL=postcss-loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postcss-loader.d.ts","sourceRoot":"","sources":["../../../../../../../packages/rollup/src/plugins/postcss/loaders/postcss-loader.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,MAAM,EAGN,oBAAoB,EACrB,MAAM,SAAS,CAAC;AAejB;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,oBAAoB,GAAG,MAAM,CAsHzE"}
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createPostCSSLoader = createPostCSSLoader;
|
|
4
|
+
const path_1 = require("path");
|
|
5
|
+
const postcss_1 = require("postcss");
|
|
6
|
+
const utils_1 = require("../utils");
|
|
7
|
+
/**
|
|
8
|
+
* Check if a file should use CSS modules based on its filename
|
|
9
|
+
*/
|
|
10
|
+
function shouldUseCSSModules(filepath, autoModules) {
|
|
11
|
+
if (!autoModules) {
|
|
12
|
+
return false;
|
|
13
|
+
}
|
|
14
|
+
// Check for .module.xxx pattern
|
|
15
|
+
const filename = (0, path_1.basename)(filepath);
|
|
16
|
+
return /\.module\.[a-z]+$/i.test(filename);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* PostCSS loader - processes CSS through PostCSS plugins
|
|
20
|
+
* This loader always runs last in the chain
|
|
21
|
+
*/
|
|
22
|
+
function createPostCSSLoader(options) {
|
|
23
|
+
return {
|
|
24
|
+
name: 'postcss',
|
|
25
|
+
test: /\.(css|sss|pcss|sass|scss|less|styl|stylus)$/,
|
|
26
|
+
alwaysProcess: true,
|
|
27
|
+
async process(code, context) {
|
|
28
|
+
const { plugins, modules, autoModules, extract, inject } = options;
|
|
29
|
+
// Determine if CSS modules should be used
|
|
30
|
+
const shouldUseModules = modules || shouldUseCSSModules(context.id, autoModules);
|
|
31
|
+
// Collect CSS module exports
|
|
32
|
+
let cssModuleExports;
|
|
33
|
+
// Build the PostCSS plugins array
|
|
34
|
+
const postcssPlugins = [...plugins];
|
|
35
|
+
// Add CSS modules plugin if needed
|
|
36
|
+
if (shouldUseModules) {
|
|
37
|
+
try {
|
|
38
|
+
const postcssModules = require('postcss-modules');
|
|
39
|
+
const modulesOptions = typeof modules === 'object' ? modules : {};
|
|
40
|
+
postcssPlugins.unshift(postcssModules({
|
|
41
|
+
...modulesOptions,
|
|
42
|
+
getJSON(_cssFilename, json, _outputFilename) {
|
|
43
|
+
cssModuleExports = json;
|
|
44
|
+
},
|
|
45
|
+
}));
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
throw new Error('You need to install "postcss-modules" package in order to use CSS Modules.');
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
// Process with PostCSS
|
|
52
|
+
const processOptions = {
|
|
53
|
+
from: context.id,
|
|
54
|
+
to: context.id,
|
|
55
|
+
map: context.sourceMap
|
|
56
|
+
? {
|
|
57
|
+
inline: context.sourceMap === 'inline',
|
|
58
|
+
annotation: false,
|
|
59
|
+
sourcesContent: true,
|
|
60
|
+
}
|
|
61
|
+
: false,
|
|
62
|
+
};
|
|
63
|
+
const result = await (0, postcss_1.default)(postcssPlugins).process(code, processOptions);
|
|
64
|
+
// Track dependencies from PostCSS messages
|
|
65
|
+
for (const message of result.messages) {
|
|
66
|
+
if (message.type === 'dependency') {
|
|
67
|
+
context.dependencies.add(message.file);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
// Emit warnings
|
|
71
|
+
for (const warning of result.warnings()) {
|
|
72
|
+
context.warn(warning.toString());
|
|
73
|
+
}
|
|
74
|
+
// Get the source map
|
|
75
|
+
let map;
|
|
76
|
+
if (result.map) {
|
|
77
|
+
map = result.map.toJSON();
|
|
78
|
+
if (map?.sources) {
|
|
79
|
+
map.sources = map.sources.map(utils_1.humanizePath);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
// If extracting CSS, return the extracted content
|
|
83
|
+
if (extract) {
|
|
84
|
+
return {
|
|
85
|
+
code: generateModuleCode(cssModuleExports),
|
|
86
|
+
map: undefined,
|
|
87
|
+
extracted: {
|
|
88
|
+
code: result.css,
|
|
89
|
+
map,
|
|
90
|
+
},
|
|
91
|
+
exports: cssModuleExports,
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
// If injecting CSS, return code that injects at runtime
|
|
95
|
+
if (inject) {
|
|
96
|
+
return {
|
|
97
|
+
code: generateInjectCode(result.css, context.id, inject, cssModuleExports),
|
|
98
|
+
map: undefined,
|
|
99
|
+
exports: cssModuleExports,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
// Otherwise return the CSS as a string export
|
|
103
|
+
return {
|
|
104
|
+
code: generateModuleCode(cssModuleExports, result.css),
|
|
105
|
+
map,
|
|
106
|
+
exports: cssModuleExports,
|
|
107
|
+
};
|
|
108
|
+
},
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Generate JavaScript module code for CSS exports
|
|
113
|
+
*/
|
|
114
|
+
function generateModuleCode(exports, css) {
|
|
115
|
+
const lines = [];
|
|
116
|
+
if (exports && Object.keys(exports).length > 0) {
|
|
117
|
+
// Export each class name
|
|
118
|
+
for (const [key, value] of Object.entries(exports)) {
|
|
119
|
+
const safeName = (0, utils_1.safeIdentifier)(key);
|
|
120
|
+
lines.push(`export var ${safeName} = ${JSON.stringify(value)};`);
|
|
121
|
+
}
|
|
122
|
+
// Default export is the full exports object
|
|
123
|
+
lines.push(`export default ${JSON.stringify(exports)};`);
|
|
124
|
+
}
|
|
125
|
+
else if (css !== undefined) {
|
|
126
|
+
// Export the CSS string as default
|
|
127
|
+
lines.push(`export default ${JSON.stringify(css)};`);
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
// Empty export
|
|
131
|
+
lines.push(`export default {};`);
|
|
132
|
+
}
|
|
133
|
+
return lines.join('\n');
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Generate JavaScript code that injects CSS at runtime
|
|
137
|
+
*/
|
|
138
|
+
function generateInjectCode(css, id, inject, exports) {
|
|
139
|
+
const lines = [];
|
|
140
|
+
// Import style-inject
|
|
141
|
+
lines.push(`import styleInject from '${utils_1.STYLE_INJECT_PATH}';`);
|
|
142
|
+
lines.push('');
|
|
143
|
+
// CSS string variable
|
|
144
|
+
lines.push(`var css = ${JSON.stringify(css)};`);
|
|
145
|
+
lines.push('');
|
|
146
|
+
// Inject the CSS
|
|
147
|
+
if (typeof inject === 'function') {
|
|
148
|
+
// Custom inject function
|
|
149
|
+
lines.push(`(${inject.toString()})(css, ${JSON.stringify(id)});`);
|
|
150
|
+
}
|
|
151
|
+
else if (typeof inject === 'object') {
|
|
152
|
+
// Inject with options
|
|
153
|
+
lines.push(`styleInject(css, ${JSON.stringify(inject)});`);
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
// Default inject
|
|
157
|
+
lines.push(`styleInject(css);`);
|
|
158
|
+
}
|
|
159
|
+
lines.push('');
|
|
160
|
+
// Export CSS module classes if any
|
|
161
|
+
if (exports && Object.keys(exports).length > 0) {
|
|
162
|
+
for (const [key, value] of Object.entries(exports)) {
|
|
163
|
+
const safeName = (0, utils_1.safeIdentifier)(key);
|
|
164
|
+
lines.push(`export var ${safeName} = ${JSON.stringify(value)};`);
|
|
165
|
+
}
|
|
166
|
+
lines.push(`export default ${JSON.stringify(exports)};`);
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
lines.push(`export default css;`);
|
|
170
|
+
}
|
|
171
|
+
return lines.join('\n');
|
|
172
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Loader, SassLoaderOptions } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Sass/SCSS preprocessor loader
|
|
4
|
+
* Compiles .sass and .scss files to CSS
|
|
5
|
+
*/
|
|
6
|
+
export declare function createSassLoader(options?: SassLoaderOptions): Loader;
|
|
7
|
+
//# sourceMappingURL=sass-loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sass-loader.d.ts","sourceRoot":"","sources":["../../../../../../../packages/rollup/src/plugins/postcss/loaders/sass-loader.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,MAAM,EAGN,iBAAiB,EAClB,MAAM,SAAS,CAAC;AA4IjB;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,GAAE,iBAAsB,GAAG,MAAM,CAuGxE"}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createSassLoader = createSassLoader;
|
|
4
|
+
const path_1 = require("path");
|
|
5
|
+
const utils_1 = require("../utils");
|
|
6
|
+
let sassModule;
|
|
7
|
+
let isModernSass = false;
|
|
8
|
+
/**
|
|
9
|
+
* Get the sass module, trying modern sass first, then node-sass
|
|
10
|
+
*/
|
|
11
|
+
function getSassModule() {
|
|
12
|
+
if (sassModule) {
|
|
13
|
+
return sassModule;
|
|
14
|
+
}
|
|
15
|
+
// Try modern sass first
|
|
16
|
+
const modernSass = (0, utils_1.loadModule)('sass');
|
|
17
|
+
if (modernSass && typeof modernSass.compile === 'function') {
|
|
18
|
+
sassModule = modernSass;
|
|
19
|
+
isModernSass = true;
|
|
20
|
+
return sassModule;
|
|
21
|
+
}
|
|
22
|
+
// Try legacy sass (or node-sass)
|
|
23
|
+
const legacySass = (0, utils_1.loadModule)('sass') || (0, utils_1.loadModule)('node-sass');
|
|
24
|
+
if (legacySass && typeof legacySass.render === 'function') {
|
|
25
|
+
sassModule = legacySass;
|
|
26
|
+
isModernSass = false;
|
|
27
|
+
return sassModule;
|
|
28
|
+
}
|
|
29
|
+
throw new Error('You need to install "sass" or "node-sass" package in order to process Sass files.');
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Resolve a module import (handles ~ prefix for node_modules)
|
|
33
|
+
*/
|
|
34
|
+
function resolveModuleImport(url, prev) {
|
|
35
|
+
if (!url.startsWith('~')) {
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
const modulePath = url.slice(1);
|
|
39
|
+
const prevDir = (0, path_1.dirname)(prev);
|
|
40
|
+
// Try to resolve from node_modules
|
|
41
|
+
const paths = [
|
|
42
|
+
(0, path_1.join)(prevDir, 'node_modules', modulePath),
|
|
43
|
+
(0, path_1.join)(process.cwd(), 'node_modules', modulePath),
|
|
44
|
+
];
|
|
45
|
+
// Also try partial file (with underscore prefix)
|
|
46
|
+
const dir = (0, path_1.dirname)(modulePath);
|
|
47
|
+
const file = (0, path_1.basename)(modulePath);
|
|
48
|
+
const partialPaths = [
|
|
49
|
+
(0, path_1.join)(prevDir, 'node_modules', dir, `_${file}`),
|
|
50
|
+
(0, path_1.join)(process.cwd(), 'node_modules', dir, `_${file}`),
|
|
51
|
+
];
|
|
52
|
+
// Try all paths with various extensions
|
|
53
|
+
const extensions = ['', '.scss', '.sass', '.css'];
|
|
54
|
+
for (const basePath of [...partialPaths, ...paths]) {
|
|
55
|
+
for (const ext of extensions) {
|
|
56
|
+
const fullPath = basePath + ext;
|
|
57
|
+
try {
|
|
58
|
+
require.resolve(fullPath);
|
|
59
|
+
return fullPath;
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
// Continue trying
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Sass/SCSS preprocessor loader
|
|
70
|
+
* Compiles .sass and .scss files to CSS
|
|
71
|
+
*/
|
|
72
|
+
function createSassLoader(options = {}) {
|
|
73
|
+
return {
|
|
74
|
+
name: 'sass',
|
|
75
|
+
test: /\.(sass|scss)$/,
|
|
76
|
+
async process(code, context) {
|
|
77
|
+
const sass = getSassModule();
|
|
78
|
+
const { implementation: _, ...sassOptions } = options;
|
|
79
|
+
if (isModernSass) {
|
|
80
|
+
// Modern sass (Dart Sass) with compile API
|
|
81
|
+
const modernSass = sass;
|
|
82
|
+
const result = modernSass.compileString(code, {
|
|
83
|
+
...sassOptions,
|
|
84
|
+
loadPaths: [(0, path_1.dirname)(context.id), process.cwd(), 'node_modules'],
|
|
85
|
+
sourceMap: !!context.sourceMap,
|
|
86
|
+
importers: [
|
|
87
|
+
{
|
|
88
|
+
findFileUrl(url) {
|
|
89
|
+
const resolved = resolveModuleImport(url, context.id);
|
|
90
|
+
if (resolved) {
|
|
91
|
+
return new URL(`file://${(0, path_1.resolve)(resolved)}`);
|
|
92
|
+
}
|
|
93
|
+
return null;
|
|
94
|
+
},
|
|
95
|
+
},
|
|
96
|
+
],
|
|
97
|
+
});
|
|
98
|
+
// Track dependencies
|
|
99
|
+
for (const loadedUrl of result.loadedUrls) {
|
|
100
|
+
if (loadedUrl.protocol === 'file:') {
|
|
101
|
+
context.dependencies.add(loadedUrl.pathname);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
let map;
|
|
105
|
+
if (result.sourceMap) {
|
|
106
|
+
map = result.sourceMap;
|
|
107
|
+
if (map?.sources) {
|
|
108
|
+
map.sources = map.sources.map(utils_1.humanizePath);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
return {
|
|
112
|
+
code: result.css,
|
|
113
|
+
map,
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
// Legacy sass/node-sass with render API
|
|
118
|
+
const legacySass = sass;
|
|
119
|
+
return new Promise((resolvePromise, reject) => {
|
|
120
|
+
legacySass.render({
|
|
121
|
+
...sassOptions,
|
|
122
|
+
data: code,
|
|
123
|
+
file: context.id,
|
|
124
|
+
includePaths: [(0, path_1.dirname)(context.id), process.cwd()],
|
|
125
|
+
sourceMap: !!context.sourceMap,
|
|
126
|
+
outFile: context.id,
|
|
127
|
+
sourceMapContents: true,
|
|
128
|
+
importer: (url, prev, done) => {
|
|
129
|
+
const resolved = resolveModuleImport(url, prev);
|
|
130
|
+
if (resolved) {
|
|
131
|
+
done({ file: resolved });
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
done(null);
|
|
135
|
+
}
|
|
136
|
+
},
|
|
137
|
+
}, (error, result) => {
|
|
138
|
+
if (error) {
|
|
139
|
+
reject(error);
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
// Track dependencies
|
|
143
|
+
if (result.stats.includedFiles) {
|
|
144
|
+
for (const dep of result.stats.includedFiles) {
|
|
145
|
+
context.dependencies.add(dep);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
let map;
|
|
149
|
+
if (result.map) {
|
|
150
|
+
map = JSON.parse(result.map.toString());
|
|
151
|
+
if (map?.sources) {
|
|
152
|
+
map.sources = map.sources.map(utils_1.humanizePath);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
resolvePromise({
|
|
156
|
+
code: result.css.toString(),
|
|
157
|
+
map,
|
|
158
|
+
});
|
|
159
|
+
});
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
},
|
|
163
|
+
};
|
|
164
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Loader, StylusLoaderOptions } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Stylus preprocessor loader
|
|
4
|
+
* Compiles .styl and .stylus files to CSS
|
|
5
|
+
*/
|
|
6
|
+
export declare function createStylusLoader(options?: StylusLoaderOptions): Loader;
|
|
7
|
+
//# sourceMappingURL=stylus-loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stylus-loader.d.ts","sourceRoot":"","sources":["../../../../../../../packages/rollup/src/plugins/postcss/loaders/stylus-loader.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,MAAM,EAGN,mBAAmB,EACpB,MAAM,SAAS,CAAC;AAqBjB;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,GAAE,mBAAwB,GAAG,MAAM,CA0D5E"}
|