@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.
Files changed (46) hide show
  1. package/package.json +7 -5
  2. package/src/plugins/postcss/index.d.ts +16 -0
  3. package/src/plugins/postcss/index.d.ts.map +1 -0
  4. package/src/plugins/postcss/index.js +19 -0
  5. package/src/plugins/postcss/loaders/index.d.ts +38 -0
  6. package/src/plugins/postcss/loaders/index.d.ts.map +1 -0
  7. package/src/plugins/postcss/loaders/index.js +90 -0
  8. package/src/plugins/postcss/loaders/less-loader.d.ts +7 -0
  9. package/src/plugins/postcss/loaders/less-loader.d.ts.map +1 -0
  10. package/src/plugins/postcss/loaders/less-loader.js +48 -0
  11. package/src/plugins/postcss/loaders/postcss-loader.d.ts +7 -0
  12. package/src/plugins/postcss/loaders/postcss-loader.d.ts.map +1 -0
  13. package/src/plugins/postcss/loaders/postcss-loader.js +172 -0
  14. package/src/plugins/postcss/loaders/sass-loader.d.ts +7 -0
  15. package/src/plugins/postcss/loaders/sass-loader.d.ts.map +1 -0
  16. package/src/plugins/postcss/loaders/sass-loader.js +164 -0
  17. package/src/plugins/postcss/loaders/stylus-loader.d.ts +7 -0
  18. package/src/plugins/postcss/loaders/stylus-loader.d.ts.map +1 -0
  19. package/src/plugins/postcss/loaders/stylus-loader.js +60 -0
  20. package/src/plugins/postcss/loaders/types.d.ts +88 -0
  21. package/src/plugins/postcss/loaders/types.d.ts.map +1 -0
  22. package/src/plugins/postcss/loaders/types.js +2 -0
  23. package/src/plugins/postcss/options.d.ts +111 -0
  24. package/src/plugins/postcss/options.d.ts.map +1 -0
  25. package/src/plugins/postcss/options.js +19 -0
  26. package/src/plugins/postcss/postcss-plugin.d.ts +10 -0
  27. package/src/plugins/postcss/postcss-plugin.d.ts.map +1 -0
  28. package/src/plugins/postcss/postcss-plugin.js +275 -0
  29. package/src/plugins/postcss/types/concat-with-sourcemaps.d.ts +29 -0
  30. package/src/plugins/postcss/utils/index.d.ts +5 -0
  31. package/src/plugins/postcss/utils/index.d.ts.map +1 -0
  32. package/src/plugins/postcss/utils/index.js +16 -0
  33. package/src/plugins/postcss/utils/load-module.d.ts +11 -0
  34. package/src/plugins/postcss/utils/load-module.d.ts.map +1 -0
  35. package/src/plugins/postcss/utils/load-module.js +36 -0
  36. package/src/plugins/postcss/utils/normalize-path.d.ts +10 -0
  37. package/src/plugins/postcss/utils/normalize-path.d.ts.map +1 -0
  38. package/src/plugins/postcss/utils/normalize-path.js +21 -0
  39. package/src/plugins/postcss/utils/safe-identifier.d.ts +14 -0
  40. package/src/plugins/postcss/utils/safe-identifier.d.ts.map +1 -0
  41. package/src/plugins/postcss/utils/safe-identifier.js +89 -0
  42. package/src/plugins/postcss/utils/style-inject.d.ts +21 -0
  43. package/src/plugins/postcss/utils/style-inject.d.ts.map +1 -0
  44. package/src/plugins/postcss/utils/style-inject.js +55 -0
  45. package/src/plugins/with-nx/with-nx.d.ts.map +1 -1
  46. 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.2",
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.2",
33
- "@nx/js": "22.4.0-beta.2",
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.2"
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,7 @@
1
+ import type { Loader, LessLoaderOptions } from './types';
2
+ /**
3
+ * Less preprocessor loader
4
+ * Compiles .less files to CSS
5
+ */
6
+ export declare function createLessLoader(options?: LessLoaderOptions): Loader;
7
+ //# sourceMappingURL=less-loader.d.ts.map
@@ -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"}