ng-packagr 17.2.0-next.0 → 17.2.0

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/README.md CHANGED
@@ -74,6 +74,7 @@ Create one `package.json` per npm package, run _ng-packagr_ for each!
74
74
  - [Change the Entry File of a Library](docs/entry-file.md)
75
75
  - [Change Configuration Locations](docs/configuration-locations.md)
76
76
  - [Override tsconfig](docs/override-tsconfig.md)
77
+ - [Use PostCSS](docs/postcss-config.md)
77
78
  - [Add Style Include Paths](docs/style-include-paths.md)
78
79
  - [Package Secondary Entrypoints (sub packages)](docs/secondary-entrypoints.md)
79
80
 
@@ -0,0 +1,18 @@
1
+ /**
2
+ * @license
3
+ * Copyright Google LLC All Rights Reserved.
4
+ *
5
+ * Use of this source code is governed by an MIT-style license that can be
6
+ * found in the LICENSE file at https://angular.io/license
7
+ */
8
+ import type { Plugin } from 'esbuild';
9
+ import { CssUrl } from './stylesheet-processor';
10
+ /**
11
+ * Creates an esbuild {@link Plugin} that loads all CSS url token references using the
12
+ * built-in esbuild `file` loader. A plugin is used to allow for all file extensions
13
+ * and types to be supported without needing to manually specify all extensions
14
+ * within the build configuration.
15
+ *
16
+ * @returns An esbuild {@link Plugin} instance.
17
+ */
18
+ export declare function createCssResourcePlugin(url: CssUrl): Plugin;
@@ -0,0 +1,110 @@
1
+ "use strict";
2
+ /**
3
+ * @license
4
+ * Copyright Google LLC All Rights Reserved.
5
+ *
6
+ * Use of this source code is governed by an MIT-style license that can be
7
+ * found in the LICENSE file at https://angular.io/license
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.createCssResourcePlugin = void 0;
11
+ const promises_1 = require("node:fs/promises");
12
+ const node_path_1 = require("node:path");
13
+ const stylesheet_processor_1 = require("./stylesheet-processor");
14
+ const CSS_RESOURCE_NAMESPACE = 'angular:css-resource';
15
+ /**
16
+ * Symbol marker used to indicate CSS resource resolution is being attempted.
17
+ * This is used to prevent an infinite loop within the plugin's resolve hook.
18
+ */
19
+ const CSS_RESOURCE_RESOLUTION = Symbol('CSS_RESOURCE_RESOLUTION');
20
+ /**
21
+ * Creates an esbuild {@link Plugin} that loads all CSS url token references using the
22
+ * built-in esbuild `file` loader. A plugin is used to allow for all file extensions
23
+ * and types to be supported without needing to manually specify all extensions
24
+ * within the build configuration.
25
+ *
26
+ * @returns An esbuild {@link Plugin} instance.
27
+ */
28
+ function createCssResourcePlugin(url) {
29
+ return {
30
+ name: 'angular-css-resource',
31
+ setup(build) {
32
+ build.onResolve({ filter: /.*/ }, async (args) => {
33
+ var _a, _b;
34
+ // Only attempt to resolve url tokens which only exist inside CSS.
35
+ // Also, skip this plugin if already attempting to resolve the url-token.
36
+ if (args.kind !== 'url-token' || ((_a = args.pluginData) === null || _a === void 0 ? void 0 : _a[CSS_RESOURCE_RESOLUTION])) {
37
+ return null;
38
+ }
39
+ // If root-relative, absolute or protocol relative url, mark as external to leave the
40
+ // path/URL in place.
41
+ if (url !== stylesheet_processor_1.CssUrl.inline || /^((?:\w+:)?\/\/|data:|chrome:|#|\/)/.test(args.path)) {
42
+ return {
43
+ path: args.path,
44
+ external: true,
45
+ };
46
+ }
47
+ const { importer, kind, resolveDir, namespace, pluginData = {} } = args;
48
+ pluginData[CSS_RESOURCE_RESOLUTION] = true;
49
+ const result = await build.resolve(args.path, {
50
+ importer,
51
+ kind,
52
+ namespace,
53
+ pluginData,
54
+ resolveDir,
55
+ });
56
+ if (result.errors.length) {
57
+ const error = result.errors[0];
58
+ if (args.path[0] === '~') {
59
+ error.notes = [
60
+ {
61
+ location: null,
62
+ text: 'You can remove the tilde and use a relative path to reference it, which should remove this error.',
63
+ },
64
+ ];
65
+ }
66
+ else if (args.path[0] === '^') {
67
+ error.notes = [
68
+ {
69
+ location: null,
70
+ text: 'You can remove the caret and add the path to the `externalDependencies` build option,' +
71
+ ' which should remove this error.',
72
+ },
73
+ ];
74
+ }
75
+ const extension = importer && (0, node_path_1.extname)(importer);
76
+ if (extension !== '.css') {
77
+ error.notes.push({
78
+ location: null,
79
+ text: 'Preprocessor stylesheets may not show the exact file location of the error.',
80
+ });
81
+ }
82
+ }
83
+ // Return results that are not files since these are most likely specific to another plugin
84
+ // and cannot be loaded by this plugin.
85
+ if (result.namespace !== 'file') {
86
+ return result;
87
+ }
88
+ // All file results are considered CSS resources and will be loaded via the file loader
89
+ return {
90
+ ...result,
91
+ // Use a relative path to prevent fully resolved paths in the metafile (JSON stats file).
92
+ // This is only necessary for custom namespaces. esbuild will handle the file namespace.
93
+ path: (0, node_path_1.relative)((_b = build.initialOptions.absWorkingDir) !== null && _b !== void 0 ? _b : '', result.path),
94
+ namespace: CSS_RESOURCE_NAMESPACE,
95
+ };
96
+ });
97
+ build.onLoad({ filter: /./, namespace: CSS_RESOURCE_NAMESPACE }, async (args) => {
98
+ var _a;
99
+ const resourcePath = (0, node_path_1.join)((_a = build.initialOptions.absWorkingDir) !== null && _a !== void 0 ? _a : '', args.path);
100
+ return {
101
+ contents: await (0, promises_1.readFile)(resourcePath),
102
+ loader: 'dataurl',
103
+ watchFiles: [resourcePath],
104
+ };
105
+ });
106
+ },
107
+ };
108
+ }
109
+ exports.createCssResourcePlugin = createCssResourcePlugin;
110
+ //# sourceMappingURL=css-resource-plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"css-resource-plugin.js","sourceRoot":"","sources":["../../../src/lib/styles/css-resource-plugin.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAGH,+CAA4C;AAC5C,yCAAoD;AACpD,iEAAgD;AAEhD,MAAM,sBAAsB,GAAG,sBAAsB,CAAC;AAEtD;;;GAGG;AACH,MAAM,uBAAuB,GAAG,MAAM,CAAC,yBAAyB,CAAC,CAAC;AAElE;;;;;;;GAOG;AACH,SAAgB,uBAAuB,CAAC,GAAW;IACjD,OAAO;QACL,IAAI,EAAE,sBAAsB;QAC5B,KAAK,CAAC,KAAkB;YACtB,KAAK,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,KAAK,EAAC,IAAI,EAAC,EAAE;;gBAC7C,kEAAkE;gBAClE,yEAAyE;gBACzE,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,KAAI,MAAA,IAAI,CAAC,UAAU,0CAAG,uBAAuB,CAAC,CAAA,EAAE,CAAC;oBAC5E,OAAO,IAAI,CAAC;gBACd,CAAC;gBAED,qFAAqF;gBACrF,qBAAqB;gBACrB,IAAI,GAAG,KAAK,6BAAM,CAAC,MAAM,IAAI,qCAAqC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;oBACnF,OAAO;wBACL,IAAI,EAAE,IAAI,CAAC,IAAI;wBACf,QAAQ,EAAE,IAAI;qBACf,CAAC;gBACJ,CAAC;gBAED,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC;gBACxE,UAAU,CAAC,uBAAuB,CAAC,GAAG,IAAI,CAAC;gBAE3C,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE;oBAC5C,QAAQ;oBACR,IAAI;oBACJ,SAAS;oBACT,UAAU;oBACV,UAAU;iBACX,CAAC,CAAC;gBAEH,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;oBACzB,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;oBAC/B,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;wBACzB,KAAK,CAAC,KAAK,GAAG;4BACZ;gCACE,QAAQ,EAAE,IAAI;gCACd,IAAI,EAAE,mGAAmG;6BAC1G;yBACF,CAAC;oBACJ,CAAC;yBAAM,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;wBAChC,KAAK,CAAC,KAAK,GAAG;4BACZ;gCACE,QAAQ,EAAE,IAAI;gCACd,IAAI,EACF,uFAAuF;oCACvF,kCAAkC;6BACrC;yBACF,CAAC;oBACJ,CAAC;oBAED,MAAM,SAAS,GAAG,QAAQ,IAAI,IAAA,mBAAO,EAAC,QAAQ,CAAC,CAAC;oBAChD,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;wBACzB,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;4BACf,QAAQ,EAAE,IAAI;4BACd,IAAI,EAAE,6EAA6E;yBACpF,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;gBAED,2FAA2F;gBAC3F,uCAAuC;gBACvC,IAAI,MAAM,CAAC,SAAS,KAAK,MAAM,EAAE,CAAC;oBAChC,OAAO,MAAM,CAAC;gBAChB,CAAC;gBAED,uFAAuF;gBACvF,OAAO;oBACL,GAAG,MAAM;oBACT,yFAAyF;oBACzF,wFAAwF;oBACxF,IAAI,EAAE,IAAA,oBAAQ,EAAC,MAAA,KAAK,CAAC,cAAc,CAAC,aAAa,mCAAI,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC;oBACrE,SAAS,EAAE,sBAAsB;iBAClC,CAAC;YACJ,CAAC,CAAC,CAAC;YAEH,KAAK,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,sBAAsB,EAAE,EAAE,KAAK,EAAC,IAAI,EAAC,EAAE;;gBAC5E,MAAM,YAAY,GAAG,IAAA,gBAAI,EAAC,MAAA,KAAK,CAAC,cAAc,CAAC,aAAa,mCAAI,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;gBAE/E,OAAO;oBACL,QAAQ,EAAE,MAAM,IAAA,mBAAQ,EAAC,YAAY,CAAC;oBACtC,MAAM,EAAE,SAAS;oBACjB,UAAU,EAAE,CAAC,YAAY,CAAC;iBAC3B,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC;AAvFD,0DAuFC","sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport type { Plugin, PluginBuild } from 'esbuild';\nimport { readFile } from 'node:fs/promises';\nimport { extname, join, relative } from 'node:path';\nimport { CssUrl } from './stylesheet-processor';\n\nconst CSS_RESOURCE_NAMESPACE = 'angular:css-resource';\n\n/**\n * Symbol marker used to indicate CSS resource resolution is being attempted.\n * This is used to prevent an infinite loop within the plugin's resolve hook.\n */\nconst CSS_RESOURCE_RESOLUTION = Symbol('CSS_RESOURCE_RESOLUTION');\n\n/**\n * Creates an esbuild {@link Plugin} that loads all CSS url token references using the\n * built-in esbuild `file` loader. A plugin is used to allow for all file extensions\n * and types to be supported without needing to manually specify all extensions\n * within the build configuration.\n *\n * @returns An esbuild {@link Plugin} instance.\n */\nexport function createCssResourcePlugin(url: CssUrl): Plugin {\n return {\n name: 'angular-css-resource',\n setup(build: PluginBuild): void {\n build.onResolve({ filter: /.*/ }, async args => {\n // Only attempt to resolve url tokens which only exist inside CSS.\n // Also, skip this plugin if already attempting to resolve the url-token.\n if (args.kind !== 'url-token' || args.pluginData?.[CSS_RESOURCE_RESOLUTION]) {\n return null;\n }\n\n // If root-relative, absolute or protocol relative url, mark as external to leave the\n // path/URL in place.\n if (url !== CssUrl.inline || /^((?:\\w+:)?\\/\\/|data:|chrome:|#|\\/)/.test(args.path)) {\n return {\n path: args.path,\n external: true,\n };\n }\n\n const { importer, kind, resolveDir, namespace, pluginData = {} } = args;\n pluginData[CSS_RESOURCE_RESOLUTION] = true;\n\n const result = await build.resolve(args.path, {\n importer,\n kind,\n namespace,\n pluginData,\n resolveDir,\n });\n\n if (result.errors.length) {\n const error = result.errors[0];\n if (args.path[0] === '~') {\n error.notes = [\n {\n location: null,\n text: 'You can remove the tilde and use a relative path to reference it, which should remove this error.',\n },\n ];\n } else if (args.path[0] === '^') {\n error.notes = [\n {\n location: null,\n text:\n 'You can remove the caret and add the path to the `externalDependencies` build option,' +\n ' which should remove this error.',\n },\n ];\n }\n\n const extension = importer && extname(importer);\n if (extension !== '.css') {\n error.notes.push({\n location: null,\n text: 'Preprocessor stylesheets may not show the exact file location of the error.',\n });\n }\n }\n\n // Return results that are not files since these are most likely specific to another plugin\n // and cannot be loaded by this plugin.\n if (result.namespace !== 'file') {\n return result;\n }\n\n // All file results are considered CSS resources and will be loaded via the file loader\n return {\n ...result,\n // Use a relative path to prevent fully resolved paths in the metafile (JSON stats file).\n // This is only necessary for custom namespaces. esbuild will handle the file namespace.\n path: relative(build.initialOptions.absWorkingDir ?? '', result.path),\n namespace: CSS_RESOURCE_NAMESPACE,\n };\n });\n\n build.onLoad({ filter: /./, namespace: CSS_RESOURCE_NAMESPACE }, async args => {\n const resourcePath = join(build.initialOptions.absWorkingDir ?? '', args.path);\n\n return {\n contents: await readFile(resourcePath),\n loader: 'dataurl',\n watchFiles: [resourcePath],\n };\n });\n },\n };\n}\n"]}
@@ -1,4 +1,4 @@
1
1
  export interface PostcssConfiguration {
2
- plugins: [name: string, options?: object][];
2
+ plugins: [name: string, options?: object | string][];
3
3
  }
4
4
  export declare function loadPostcssConfiguration(projectRoot: string): Promise<PostcssConfiguration | undefined>;
@@ -60,7 +60,7 @@ async function loadPostcssConfiguration(projectRoot) {
60
60
  }
61
61
  const config = { plugins: [] };
62
62
  for (const [name, options] of entries) {
63
- if (!options || typeof options !== 'object') {
63
+ if (!options || (typeof options !== 'object' && typeof options !== 'string')) {
64
64
  continue;
65
65
  }
66
66
  config.plugins.push([name, options]);
@@ -1 +1 @@
1
- {"version":3,"file":"postcss-configuration.js","sourceRoot":"","sources":["../../../src/lib/styles/postcss-configuration.ts"],"names":[],"mappings":"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","sourcesContent":["import { readFile, readdir } from 'node:fs/promises';\nimport { join } from 'node:path';\n\nexport interface PostcssConfiguration {\n plugins: [name: string, options?: object][];\n}\n\ninterface RawPostcssConfiguration {\n plugins?: Record<string, object | boolean> | (string | [string, object])[];\n}\n\nconst postcssConfigurationFiles: string[] = ['postcss.config.json', '.postcssrc.json'];\n\ninterface SearchDirectory {\n root: string;\n files: Set<string>;\n}\n\nasync function generateSearchDirectories(roots: string[]): Promise<SearchDirectory[]> {\n return await Promise.all(\n roots.map(root =>\n readdir(root, { withFileTypes: true }).then(entries => ({\n root,\n files: new Set(entries.filter(entry => entry.isFile()).map(entry => entry.name)),\n })),\n ),\n );\n}\n\nfunction findFile(searchDirectories: SearchDirectory[], potentialFiles: string[]): string | undefined {\n for (const { root, files } of searchDirectories) {\n for (const potential of potentialFiles) {\n if (files.has(potential)) {\n return join(root, potential);\n }\n }\n }\n\n return undefined;\n}\n\nasync function readPostcssConfiguration(configurationFile: string): Promise<RawPostcssConfiguration> {\n const data = await readFile(configurationFile, 'utf-8');\n const config = JSON.parse(data) as RawPostcssConfiguration;\n\n return config;\n}\n\nexport async function loadPostcssConfiguration(\n projectRoot: string,\n): Promise<PostcssConfiguration | undefined> {\n // A configuration file can exist in the project or workspace root\n const searchDirectories = await generateSearchDirectories([projectRoot]);\n\n const configPath = findFile(searchDirectories, postcssConfigurationFiles);\n if (!configPath) {\n return undefined;\n }\n\n const raw = await readPostcssConfiguration(configPath);\n\n // If no plugins are defined, consider it equivalent to no configuration\n if (!raw.plugins || typeof raw.plugins !== 'object') {\n return undefined;\n }\n\n // Normalize plugin array form\n if (Array.isArray(raw.plugins)) {\n if (raw.plugins.length < 1) {\n return undefined;\n }\n\n const config: PostcssConfiguration = { plugins: [] };\n for (const element of raw.plugins) {\n if (typeof element === 'string') {\n config.plugins.push([element]);\n } else {\n config.plugins.push(element);\n }\n }\n\n return config;\n }\n\n // Normalize plugin object map form\n const entries = Object.entries(raw.plugins);\n if (entries.length < 1) {\n return undefined;\n }\n\n const config: PostcssConfiguration = { plugins: [] };\n for (const [name, options] of entries) {\n if (!options || typeof options !== 'object') {\n continue;\n }\n\n config.plugins.push([name, options]);\n }\n\n return config;\n}\n"]}
1
+ {"version":3,"file":"postcss-configuration.js","sourceRoot":"","sources":["../../../src/lib/styles/postcss-configuration.ts"],"names":[],"mappings":"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","sourcesContent":["import { readFile, readdir } from 'node:fs/promises';\nimport { join } from 'node:path';\n\nexport interface PostcssConfiguration {\n plugins: [name: string, options?: object | string][];\n}\n\ninterface RawPostcssConfiguration {\n plugins?: Record<string, object | string | boolean> | (string | [string, object])[];\n}\n\nconst postcssConfigurationFiles: string[] = ['postcss.config.json', '.postcssrc.json'];\n\ninterface SearchDirectory {\n root: string;\n files: Set<string>;\n}\n\nasync function generateSearchDirectories(roots: string[]): Promise<SearchDirectory[]> {\n return await Promise.all(\n roots.map(root =>\n readdir(root, { withFileTypes: true }).then(entries => ({\n root,\n files: new Set(entries.filter(entry => entry.isFile()).map(entry => entry.name)),\n })),\n ),\n );\n}\n\nfunction findFile(searchDirectories: SearchDirectory[], potentialFiles: string[]): string | undefined {\n for (const { root, files } of searchDirectories) {\n for (const potential of potentialFiles) {\n if (files.has(potential)) {\n return join(root, potential);\n }\n }\n }\n\n return undefined;\n}\n\nasync function readPostcssConfiguration(configurationFile: string): Promise<RawPostcssConfiguration> {\n const data = await readFile(configurationFile, 'utf-8');\n const config = JSON.parse(data) as RawPostcssConfiguration;\n\n return config;\n}\n\nexport async function loadPostcssConfiguration(projectRoot: string): Promise<PostcssConfiguration | undefined> {\n // A configuration file can exist in the project or workspace root\n const searchDirectories = await generateSearchDirectories([projectRoot]);\n\n const configPath = findFile(searchDirectories, postcssConfigurationFiles);\n if (!configPath) {\n return undefined;\n }\n\n const raw = await readPostcssConfiguration(configPath);\n\n // If no plugins are defined, consider it equivalent to no configuration\n if (!raw.plugins || typeof raw.plugins !== 'object') {\n return undefined;\n }\n\n // Normalize plugin array form\n if (Array.isArray(raw.plugins)) {\n if (raw.plugins.length < 1) {\n return undefined;\n }\n\n const config: PostcssConfiguration = { plugins: [] };\n for (const element of raw.plugins) {\n if (typeof element === 'string') {\n config.plugins.push([element]);\n } else {\n config.plugins.push(element);\n }\n }\n\n return config;\n }\n\n // Normalize plugin object map form\n const entries = Object.entries(raw.plugins);\n if (entries.length < 1) {\n return undefined;\n }\n\n const config: PostcssConfiguration = { plugins: [] };\n for (const [name, options] of entries) {\n if (!options || (typeof options !== 'object' && typeof options !== 'string')) {\n continue;\n }\n\n config.plugins.push([name, options]);\n }\n\n return config;\n}\n"]}
@@ -33,7 +33,7 @@ const postcss_1 = __importDefault(require("postcss"));
33
33
  const esbuild_executor_1 = require("../esbuild/esbuild-executor");
34
34
  const cache_1 = require("../utils/cache");
35
35
  const log = __importStar(require("../utils/log"));
36
- const stylesheet_processor_1 = require("./stylesheet-processor");
36
+ const css_resource_plugin_1 = require("./css-resource-plugin");
37
37
  const { tailwindConfigPath, projectBasePath, browserslistData, targets, cssUrl, styleIncludePaths, postcssConfiguration, } = node_worker_threads_1.workerData;
38
38
  let cacheDirectory = node_worker_threads_1.workerData.cacheDirectory;
39
39
  let postCssProcessor;
@@ -87,31 +87,18 @@ async function render({ content, filePath }) {
87
87
  warnings.push(...result.warnings().map(w => w.toString()));
88
88
  renderedCss = result.css;
89
89
  }
90
- const loader = cssUrl === stylesheet_processor_1.CssUrl.none ? 'empty' : 'dataurl';
91
90
  const { outputFiles, warnings: esBuildWarnings, errors: esbuildErrors, } = await esbuild.build({
92
91
  stdin: {
93
92
  contents: renderedCss,
94
93
  loader: 'css',
95
94
  resolveDir: (0, node_path_1.dirname)(filePath),
96
95
  },
97
- loader: {
98
- '.svg': loader,
99
- '.jpg': loader,
100
- '.jpeg': loader,
101
- '.png': loader,
102
- '.apng': loader,
103
- '.webp': loader,
104
- '.avif': loader,
105
- '.gif': loader,
106
- '.otf': loader,
107
- '.ttf': loader,
108
- '.woff': loader,
109
- '.woff2': loader,
110
- },
96
+ plugins: [(0, css_resource_plugin_1.createCssResourcePlugin)(cssUrl)],
111
97
  write: false,
112
98
  sourcemap: false,
113
99
  minify: true,
114
100
  bundle: true,
101
+ absWorkingDir: projectBasePath,
115
102
  target: targets,
116
103
  });
117
104
  const code = outputFiles[0].text;
@@ -1 +1 @@
1
- {"version":3,"file":"stylesheet-processor-worker.js","sourceRoot":"","sources":["../../../src/lib/styles/stylesheet-processor-worker.ts"],"names":[],"mappings":"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","sourcesContent":["import { dirname, extname, relative } from 'node:path';\nimport { pathToFileURL } from 'node:url';\nimport { workerData } from 'node:worker_threads';\nimport postcss from 'postcss';\nimport { EsbuildExecutor } from '../esbuild/esbuild-executor';\nimport { generateKey, readCacheEntry, saveCacheEntry } from '../utils/cache';\nimport * as log from '../utils/log';\nimport { PostcssConfiguration } from './postcss-configuration';\nimport { CssUrl } from './stylesheet-processor';\n\nconst {\n tailwindConfigPath,\n projectBasePath,\n browserslistData,\n targets,\n cssUrl,\n styleIncludePaths,\n postcssConfiguration,\n} = workerData as {\n tailwindConfigPath: string | undefined;\n postcssConfiguration: PostcssConfiguration | undefined;\n browserslistData: string;\n targets: string[];\n projectBasePath: string;\n cssUrl: CssUrl;\n styleIncludePaths: string[];\n cacheDirectory: string | undefined;\n};\n\nlet cacheDirectory = workerData.cacheDirectory;\nlet postCssProcessor: ReturnType<typeof postcss> | undefined;\nlet esbuild: EsbuildExecutor;\n\ninterface RenderRequest {\n content: string;\n filePath: string;\n}\n\nconst CACHE_KEY_VALUES = [...browserslistData, ...styleIncludePaths, cssUrl].join(':');\n\n/**\n * An array of keywords that indicate Tailwind CSS processing is required for a stylesheet.\n *\n * Based on https://tailwindcss.com/docs/functions-and-directives\n */\nconst TAILWIND_KEYWORDS = [\n '@tailwind',\n '@layer',\n '@apply',\n '@config',\n 'theme(',\n 'screen(',\n '@screen', // Undocumented in version 3, see: https://github.com/tailwindlabs/tailwindcss/discussions/7516.\n];\n\nasync function render({ content, filePath }: RenderRequest): Promise<string> {\n let key: string | undefined;\n if (cacheDirectory && !content.includes('@import') && !content.includes('@use')) {\n // No transitive deps, we can cache more aggressively.\n key = await generateKey(content, CACHE_KEY_VALUES);\n const result = await readCacheEntry(cacheDirectory, key);\n if (result) {\n result.warnings.forEach(msg => log.warn(msg));\n\n return result.css;\n }\n }\n\n // Render pre-processor language (sass, styl, less)\n let renderedCss = await renderCss(filePath, content);\n\n // We cannot cache CSS re-rendering phase, because a transitive dependency via (@import) can case different CSS output.\n // Example a change in a mixin or SCSS variable.\n if (!key) {\n key = await generateKey(renderedCss, CACHE_KEY_VALUES);\n }\n\n if (cacheDirectory) {\n const cachedResult = await readCacheEntry(cacheDirectory, key);\n if (cachedResult) {\n cachedResult.warnings.forEach(msg => log.warn(msg));\n\n return cachedResult.css;\n }\n }\n\n const warnings: string[] = [];\n if (postCssProcessor && (postcssConfiguration || (tailwindConfigPath && hasTailwindKeywords(renderedCss)))) {\n const result = await postCssProcessor.process(renderedCss, {\n from: filePath,\n to: filePath.replace(extname(filePath), '.css'),\n });\n\n warnings.push(...result.warnings().map(w => w.toString()));\n renderedCss = result.css;\n }\n\n const loader = cssUrl === CssUrl.none ? 'empty' : 'dataurl';\n\n const {\n outputFiles,\n warnings: esBuildWarnings,\n errors: esbuildErrors,\n } = await esbuild.build({\n stdin: {\n contents: renderedCss,\n loader: 'css',\n resolveDir: dirname(filePath),\n },\n loader: {\n '.svg': loader,\n '.jpg': loader,\n '.jpeg': loader,\n '.png': loader,\n '.apng': loader,\n '.webp': loader,\n '.avif': loader,\n '.gif': loader,\n '.otf': loader,\n '.ttf': loader,\n '.woff': loader,\n '.woff2': loader,\n },\n write: false,\n sourcemap: false,\n minify: true,\n bundle: true,\n target: targets,\n });\n\n const code = outputFiles[0].text;\n if (esBuildWarnings.length > 0) {\n warnings.push(...(await esbuild.formatMessages(esBuildWarnings, { kind: 'warning' })));\n warnings.forEach(msg => log.warn(msg));\n }\n\n if (esbuildErrors.length > 0) {\n const errors = await esbuild.formatMessages(esBuildWarnings, { kind: 'error' });\n errors.forEach(msg => log.error(msg));\n\n throw new Error(`An error has occuried while processing ${filePath}.`);\n }\n\n if (cacheDirectory) {\n await saveCacheEntry(\n cacheDirectory,\n key,\n JSON.stringify({\n css: code,\n warnings,\n }),\n );\n }\n\n return code;\n}\n\nasync function renderCss(filePath: string, css: string): Promise<string> {\n const ext = extname(filePath);\n\n switch (ext) {\n case '.sass':\n case '.scss': {\n return (await import('sass')).compileString(css, {\n url: pathToFileURL(filePath),\n syntax: '.sass' === ext ? 'indented' : 'scss',\n loadPaths: styleIncludePaths,\n }).css;\n }\n case '.less': {\n const { css: content } = await (\n await import('less')\n ).default.render(css, {\n filename: filePath,\n javascriptEnabled: true,\n paths: styleIncludePaths,\n });\n\n return content;\n }\n\n case '.css':\n default:\n return css;\n }\n}\n\nfunction getTailwindPlugin() {\n // Attempt to setup Tailwind CSS\n // Only load Tailwind CSS plugin if configuration file was found.\n // This acts as a guard to ensure the project actually wants to use Tailwind CSS.\n // The package may be unknowningly present due to a third-party transitive package dependency.\n if (tailwindConfigPath) {\n let tailwindPackagePath;\n try {\n tailwindPackagePath = require.resolve('tailwindcss', { paths: [projectBasePath] });\n } catch {\n const relativeTailwindConfigPath = relative(projectBasePath, tailwindConfigPath);\n log.warn(\n `Tailwind CSS configuration file found (${relativeTailwindConfigPath})` +\n ` but the 'tailwindcss' package is not installed.` +\n ` To enable Tailwind CSS, please install the 'tailwindcss' package.`,\n );\n }\n\n if (tailwindPackagePath) {\n return require(tailwindPackagePath)({ config: tailwindConfigPath });\n }\n }\n}\n\nasync function initialize() {\n const postCssPlugins = [];\n if (postcssConfiguration) {\n for (const [pluginName, pluginOptions] of postcssConfiguration.plugins) {\n const { default: plugin } = await import(pluginName);\n\n if (typeof plugin !== 'function' || plugin.postcss !== true) {\n throw new Error(`Attempted to load invalid Postcss plugin: \"${pluginName}\"`);\n }\n\n postCssPlugins.push(plugin(pluginOptions));\n }\n } else {\n const tailwinds = getTailwindPlugin();\n if (tailwinds) {\n postCssPlugins.push(tailwinds);\n cacheDirectory = undefined;\n }\n }\n\n if (postCssPlugins.length) {\n postCssProcessor = postcss(postCssPlugins);\n }\n\n esbuild = new EsbuildExecutor();\n\n // Return the render function for use\n return render;\n}\n\n/**\n * Searches the provided contents for keywords that indicate Tailwind is used\n * within a stylesheet.\n */\nfunction hasTailwindKeywords(contents: string): boolean {\n // TODO: use better search algorithm for keywords\n return TAILWIND_KEYWORDS.some(keyword => contents.includes(keyword));\n}\n\n/**\n * The default export will be the promise returned by the initialize function.\n * This is awaited by piscina prior to using the Worker.\n */\nexport default initialize();\n"]}
1
+ {"version":3,"file":"stylesheet-processor-worker.js","sourceRoot":"","sources":["../../../src/lib/styles/stylesheet-processor-worker.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yCAAuD;AACvD,uCAAyC;AACzC,6DAAiD;AACjD,sDAA8B;AAC9B,kEAA8D;AAC9D,0CAA6E;AAC7E,kDAAoC;AACpC,+DAA8D;AAI9D,MAAM,EACJ,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,OAAO,EACP,MAAM,EACN,iBAAiB,EACjB,oBAAoB,GACrB,GAAG,gCASH,CAAC;AAEF,IAAI,cAAc,GAAG,gCAAU,CAAC,cAAc,CAAC;AAC/C,IAAI,gBAAwD,CAAC;AAC7D,IAAI,OAAwB,CAAC;AAO7B,MAAM,gBAAgB,GAAG,CAAC,GAAG,gBAAgB,EAAE,GAAG,iBAAiB,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAEvF;;;;GAIG;AACH,MAAM,iBAAiB,GAAG;IACxB,WAAW;IACX,QAAQ;IACR,QAAQ;IACR,SAAS;IACT,QAAQ;IACR,SAAS;IACT,SAAS,EAAE,gGAAgG;CAC5G,CAAC;AAEF,KAAK,UAAU,MAAM,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAiB;IACxD,IAAI,GAAuB,CAAC;IAC5B,IAAI,cAAc,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAChF,sDAAsD;QACtD,GAAG,GAAG,MAAM,IAAA,mBAAW,EAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;QACnD,MAAM,MAAM,GAAG,MAAM,IAAA,sBAAc,EAAC,cAAc,EAAE,GAAG,CAAC,CAAC;QACzD,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YAE9C,OAAO,MAAM,CAAC,GAAG,CAAC;QACpB,CAAC;IACH,CAAC;IAED,mDAAmD;IACnD,IAAI,WAAW,GAAG,MAAM,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAErD,uHAAuH;IACvH,gDAAgD;IAChD,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,GAAG,GAAG,MAAM,IAAA,mBAAW,EAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC;IACzD,CAAC;IAED,IAAI,cAAc,EAAE,CAAC;QACnB,MAAM,YAAY,GAAG,MAAM,IAAA,sBAAc,EAAC,cAAc,EAAE,GAAG,CAAC,CAAC;QAC/D,IAAI,YAAY,EAAE,CAAC;YACjB,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YAEpD,OAAO,YAAY,CAAC,GAAG,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,IAAI,gBAAgB,IAAI,CAAC,oBAAoB,IAAI,CAAC,kBAAkB,IAAI,mBAAmB,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3G,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,OAAO,CAAC,WAAW,EAAE;YACzD,IAAI,EAAE,QAAQ;YACd,EAAE,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAA,mBAAO,EAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;SAChD,CAAC,CAAC;QAEH,QAAQ,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAC3D,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC;IAC3B,CAAC;IAED,MAAM,EACJ,WAAW,EACX,QAAQ,EAAE,eAAe,EACzB,MAAM,EAAE,aAAa,GACtB,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC;QACtB,KAAK,EAAE;YACL,QAAQ,EAAE,WAAW;YACrB,MAAM,EAAE,KAAK;YACb,UAAU,EAAE,IAAA,mBAAO,EAAC,QAAQ,CAAC;SAC9B;QACD,OAAO,EAAE,CAAC,IAAA,6CAAuB,EAAC,MAAM,CAAC,CAAC;QAC1C,KAAK,EAAE,KAAK;QACZ,SAAS,EAAE,KAAK;QAChB,MAAM,EAAE,IAAI;QACZ,MAAM,EAAE,IAAI;QACZ,aAAa,EAAE,eAAe;QAC9B,MAAM,EAAE,OAAO;KAChB,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACjC,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,OAAO,CAAC,cAAc,CAAC,eAAe,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;QACvF,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACzC,CAAC;IAED,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,cAAc,CAAC,eAAe,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QAChF,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;QAEtC,MAAM,IAAI,KAAK,CAAC,0CAA0C,QAAQ,GAAG,CAAC,CAAC;IACzE,CAAC;IAED,IAAI,cAAc,EAAE,CAAC;QACnB,MAAM,IAAA,sBAAc,EAClB,cAAc,EACd,GAAG,EACH,IAAI,CAAC,SAAS,CAAC;YACb,GAAG,EAAE,IAAI;YACT,QAAQ;SACT,CAAC,CACH,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,QAAgB,EAAE,GAAW;IACpD,MAAM,GAAG,GAAG,IAAA,mBAAO,EAAC,QAAQ,CAAC,CAAC;IAE9B,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,OAAO,CAAC;QACb,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,OAAO,CAAC,wDAAa,MAAM,GAAC,CAAC,CAAC,aAAa,CAAC,GAAG,EAAE;gBAC/C,GAAG,EAAE,IAAA,wBAAa,EAAC,QAAQ,CAAC;gBAC5B,MAAM,EAAE,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM;gBAC7C,SAAS,EAAE,iBAAiB;aAC7B,CAAC,CAAC,GAAG,CAAC;QACT,CAAC;QACD,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,MAAM,CAC7B,wDAAa,MAAM,GAAC,CACrB,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE;gBACpB,QAAQ,EAAE,QAAQ;gBAClB,iBAAiB,EAAE,IAAI;gBACvB,KAAK,EAAE,iBAAiB;aACzB,CAAC,CAAC;YAEH,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,KAAK,MAAM,CAAC;QACZ;YACE,OAAO,GAAG,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB;IACxB,gCAAgC;IAChC,iEAAiE;IACjE,iFAAiF;IACjF,8FAA8F;IAC9F,IAAI,kBAAkB,EAAE,CAAC;QACvB,IAAI,mBAAmB,CAAC;QACxB,IAAI,CAAC;YACH,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,KAAK,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;QACrF,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,0BAA0B,GAAG,IAAA,oBAAQ,EAAC,eAAe,EAAE,kBAAkB,CAAC,CAAC;YACjF,GAAG,CAAC,IAAI,CACN,0CAA0C,0BAA0B,GAAG;gBACrE,kDAAkD;gBAClD,oEAAoE,CACvE,CAAC;QACJ,CAAC;QAED,IAAI,mBAAmB,EAAE,CAAC;YACxB,OAAO,OAAO,CAAC,mBAAmB,CAAC,CAAC,EAAE,MAAM,EAAE,kBAAkB,EAAE,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;AACH,CAAC;AAED,KAAK,UAAU,UAAU;IACvB,MAAM,cAAc,GAAG,EAAE,CAAC;IAC1B,IAAI,oBAAoB,EAAE,CAAC;QACzB,KAAK,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,IAAI,oBAAoB,CAAC,OAAO,EAAE,CAAC;YACvE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,yBAAa,UAAU,uCAAC,CAAC;YAErD,IAAI,OAAO,MAAM,KAAK,UAAU,IAAI,MAAM,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;gBAC5D,MAAM,IAAI,KAAK,CAAC,8CAA8C,UAAU,GAAG,CAAC,CAAC;YAC/E,CAAC;YAED,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,SAAS,GAAG,iBAAiB,EAAE,CAAC;QACtC,IAAI,SAAS,EAAE,CAAC;YACd,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC/B,cAAc,GAAG,SAAS,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,IAAI,cAAc,CAAC,MAAM,EAAE,CAAC;QAC1B,gBAAgB,GAAG,IAAA,iBAAO,EAAC,cAAc,CAAC,CAAC;IAC7C,CAAC;IAED,OAAO,GAAG,IAAI,kCAAe,EAAE,CAAC;IAEhC,qCAAqC;IACrC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,SAAS,mBAAmB,CAAC,QAAgB;IAC3C,iDAAiD;IACjD,OAAO,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;AACvE,CAAC;AAED;;;GAGG;AACH,kBAAe,UAAU,EAAE,CAAC","sourcesContent":["import { dirname, extname, relative } from 'node:path';\nimport { pathToFileURL } from 'node:url';\nimport { workerData } from 'node:worker_threads';\nimport postcss from 'postcss';\nimport { EsbuildExecutor } from '../esbuild/esbuild-executor';\nimport { generateKey, readCacheEntry, saveCacheEntry } from '../utils/cache';\nimport * as log from '../utils/log';\nimport {createCssResourcePlugin} from './css-resource-plugin';\nimport { PostcssConfiguration } from './postcss-configuration';\nimport { CssUrl } from './stylesheet-processor';\n\nconst {\n tailwindConfigPath,\n projectBasePath,\n browserslistData,\n targets,\n cssUrl,\n styleIncludePaths,\n postcssConfiguration,\n} = workerData as {\n tailwindConfigPath: string | undefined;\n postcssConfiguration: PostcssConfiguration | undefined;\n browserslistData: string;\n targets: string[];\n projectBasePath: string;\n cssUrl: CssUrl;\n styleIncludePaths: string[];\n cacheDirectory: string | undefined;\n};\n\nlet cacheDirectory = workerData.cacheDirectory;\nlet postCssProcessor: ReturnType<typeof postcss> | undefined;\nlet esbuild: EsbuildExecutor;\n\ninterface RenderRequest {\n content: string;\n filePath: string;\n}\n\nconst CACHE_KEY_VALUES = [...browserslistData, ...styleIncludePaths, cssUrl].join(':');\n\n/**\n * An array of keywords that indicate Tailwind CSS processing is required for a stylesheet.\n *\n * Based on https://tailwindcss.com/docs/functions-and-directives\n */\nconst TAILWIND_KEYWORDS = [\n '@tailwind',\n '@layer',\n '@apply',\n '@config',\n 'theme(',\n 'screen(',\n '@screen', // Undocumented in version 3, see: https://github.com/tailwindlabs/tailwindcss/discussions/7516.\n];\n\nasync function render({ content, filePath }: RenderRequest): Promise<string> {\n let key: string | undefined;\n if (cacheDirectory && !content.includes('@import') && !content.includes('@use')) {\n // No transitive deps, we can cache more aggressively.\n key = await generateKey(content, CACHE_KEY_VALUES);\n const result = await readCacheEntry(cacheDirectory, key);\n if (result) {\n result.warnings.forEach(msg => log.warn(msg));\n\n return result.css;\n }\n }\n\n // Render pre-processor language (sass, styl, less)\n let renderedCss = await renderCss(filePath, content);\n\n // We cannot cache CSS re-rendering phase, because a transitive dependency via (@import) can case different CSS output.\n // Example a change in a mixin or SCSS variable.\n if (!key) {\n key = await generateKey(renderedCss, CACHE_KEY_VALUES);\n }\n\n if (cacheDirectory) {\n const cachedResult = await readCacheEntry(cacheDirectory, key);\n if (cachedResult) {\n cachedResult.warnings.forEach(msg => log.warn(msg));\n\n return cachedResult.css;\n }\n }\n\n const warnings: string[] = [];\n if (postCssProcessor && (postcssConfiguration || (tailwindConfigPath && hasTailwindKeywords(renderedCss)))) {\n const result = await postCssProcessor.process(renderedCss, {\n from: filePath,\n to: filePath.replace(extname(filePath), '.css'),\n });\n\n warnings.push(...result.warnings().map(w => w.toString()));\n renderedCss = result.css;\n }\n\n const {\n outputFiles,\n warnings: esBuildWarnings,\n errors: esbuildErrors,\n } = await esbuild.build({\n stdin: {\n contents: renderedCss,\n loader: 'css',\n resolveDir: dirname(filePath),\n },\n plugins: [createCssResourcePlugin(cssUrl)],\n write: false,\n sourcemap: false,\n minify: true,\n bundle: true,\n absWorkingDir: projectBasePath,\n target: targets,\n });\n\n const code = outputFiles[0].text;\n if (esBuildWarnings.length > 0) {\n warnings.push(...(await esbuild.formatMessages(esBuildWarnings, { kind: 'warning' })));\n warnings.forEach(msg => log.warn(msg));\n }\n\n if (esbuildErrors.length > 0) {\n const errors = await esbuild.formatMessages(esBuildWarnings, { kind: 'error' });\n errors.forEach(msg => log.error(msg));\n\n throw new Error(`An error has occuried while processing ${filePath}.`);\n }\n\n if (cacheDirectory) {\n await saveCacheEntry(\n cacheDirectory,\n key,\n JSON.stringify({\n css: code,\n warnings,\n }),\n );\n }\n\n return code;\n}\n\nasync function renderCss(filePath: string, css: string): Promise<string> {\n const ext = extname(filePath);\n\n switch (ext) {\n case '.sass':\n case '.scss': {\n return (await import('sass')).compileString(css, {\n url: pathToFileURL(filePath),\n syntax: '.sass' === ext ? 'indented' : 'scss',\n loadPaths: styleIncludePaths,\n }).css;\n }\n case '.less': {\n const { css: content } = await (\n await import('less')\n ).default.render(css, {\n filename: filePath,\n javascriptEnabled: true,\n paths: styleIncludePaths,\n });\n\n return content;\n }\n\n case '.css':\n default:\n return css;\n }\n}\n\nfunction getTailwindPlugin() {\n // Attempt to setup Tailwind CSS\n // Only load Tailwind CSS plugin if configuration file was found.\n // This acts as a guard to ensure the project actually wants to use Tailwind CSS.\n // The package may be unknowningly present due to a third-party transitive package dependency.\n if (tailwindConfigPath) {\n let tailwindPackagePath;\n try {\n tailwindPackagePath = require.resolve('tailwindcss', { paths: [projectBasePath] });\n } catch {\n const relativeTailwindConfigPath = relative(projectBasePath, tailwindConfigPath);\n log.warn(\n `Tailwind CSS configuration file found (${relativeTailwindConfigPath})` +\n ` but the 'tailwindcss' package is not installed.` +\n ` To enable Tailwind CSS, please install the 'tailwindcss' package.`,\n );\n }\n\n if (tailwindPackagePath) {\n return require(tailwindPackagePath)({ config: tailwindConfigPath });\n }\n }\n}\n\nasync function initialize() {\n const postCssPlugins = [];\n if (postcssConfiguration) {\n for (const [pluginName, pluginOptions] of postcssConfiguration.plugins) {\n const { default: plugin } = await import(pluginName);\n\n if (typeof plugin !== 'function' || plugin.postcss !== true) {\n throw new Error(`Attempted to load invalid Postcss plugin: \"${pluginName}\"`);\n }\n\n postCssPlugins.push(plugin(pluginOptions));\n }\n } else {\n const tailwinds = getTailwindPlugin();\n if (tailwinds) {\n postCssPlugins.push(tailwinds);\n cacheDirectory = undefined;\n }\n }\n\n if (postCssPlugins.length) {\n postCssProcessor = postcss(postCssPlugins);\n }\n\n esbuild = new EsbuildExecutor();\n\n // Return the render function for use\n return render;\n}\n\n/**\n * Searches the provided contents for keywords that indicate Tailwind is used\n * within a stylesheet.\n */\nfunction hasTailwindKeywords(contents: string): boolean {\n // TODO: use better search algorithm for keywords\n return TAILWIND_KEYWORDS.some(keyword => contents.includes(keyword));\n}\n\n/**\n * The default export will be the promise returned by the initialize function.\n * This is awaited by piscina prior to using the Worker.\n */\nexport default initialize();\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ng-packagr",
3
- "version": "17.2.0-next.0",
3
+ "version": "17.2.0",
4
4
  "description": "Compile and package Angular libraries in Angular Package Format (APF)",
5
5
  "keywords": [
6
6
  "apf",
@@ -40,7 +40,7 @@
40
40
  "browserslist": "^4.22.1",
41
41
  "cacache": "^18.0.0",
42
42
  "chokidar": "^3.5.3",
43
- "commander": "^11.1.0",
43
+ "commander": "^12.0.0",
44
44
  "convert-source-map": "^2.0.0",
45
45
  "dependency-graph": "^1.0.0",
46
46
  "esbuild-wasm": "^0.20.0",
@@ -60,7 +60,7 @@
60
60
  "rollup": "^4.5.0"
61
61
  },
62
62
  "peerDependencies": {
63
- "@angular/compiler-cli": "^17.0.0 || ^17.1.0-next.0 || ^17.2.0-next.0",
63
+ "@angular/compiler-cli": "^17.0.0 || ^17.2.0-next.0 || ^17.3.0-next.0",
64
64
  "tailwindcss": "^2.0.0 || ^3.0.0",
65
65
  "tslib": "^2.3.0",
66
66
  "typescript": ">=5.2 <5.4"