* Gets ordered chunk css modules. * @param {Chunk} chunk chunk * @param {ChunkGraph} chunkGraph chunk graph * @param {Compilation} compilation compilation * @returns {CssModule[]} ordered css modules
(chunk, chunkGraph, compilation)
| 841 | * @returns {CssModule[]} ordered css modules |
| 842 | */ |
| 843 | getOrderedChunkCssModules(chunk, chunkGraph, compilation) { |
| 844 | /** @type {string | undefined} */ |
| 845 | let charset; |
| 846 | |
| 847 | const hooks = CssModulesPlugin.getCompilationHooks(compilation); |
| 848 | |
| 849 | /** |
| 850 | * @param {Iterable<Module> | undefined} iter modules pre-sorted by full module name |
| 851 | * @returns {Module[]} ordered modules |
| 852 | */ |
| 853 | const orderModules = (iter) => { |
| 854 | const modules = iter ? [...iter] : []; |
| 855 | const result = hooks.orderModules.call(chunk, modules, compilation); |
| 856 | if (result !== undefined) return result; |
| 857 | return this.getModulesInOrder(chunk, modules, compilation); |
| 858 | }; |
| 859 | |
| 860 | return /** @type {CssModule[]} */ ([ |
| 861 | ...orderModules( |
| 862 | chunkGraph.getOrderedChunkModulesIterableBySourceType( |
| 863 | chunk, |
| 864 | CSS_IMPORT_TYPE, |
| 865 | compareModulesByFullName(compilation.compiler) |
| 866 | ) |
| 867 | ), |
| 868 | ...orderModules( |
| 869 | chunkGraph.getOrderedChunkModulesIterableBySourceType( |
| 870 | chunk, |
| 871 | CSS_TYPE, |
| 872 | compareModulesByFullName(compilation.compiler) |
| 873 | ) |
| 874 | ).map((module) => { |
| 875 | if ( |
| 876 | typeof ( |
| 877 | /** @type {CssModuleBuildInfo} */ (module.buildInfo).charset |
| 878 | ) !== "undefined" |
| 879 | ) { |
| 880 | if ( |
| 881 | typeof charset !== "undefined" && |
| 882 | charset !== |
| 883 | /** @type {CssModuleBuildInfo} */ (module.buildInfo).charset |
| 884 | ) { |
| 885 | const err = new WebpackError( |
| 886 | `Conflicting @charset at-rules detected: the module ${module.readableIdentifier( |
| 887 | compilation.requestShortener |
| 888 | )} (in chunk ${chunk.name || chunk.id}) specifies "${ |
| 889 | /** @type {CssModuleBuildInfo} */ (module.buildInfo).charset |
| 890 | }", but "${charset}" was expected, all modules must use the same character set` |
| 891 | ); |
| 892 | |
| 893 | err.chunk = chunk; |
| 894 | err.module = module; |
| 895 | err.hideStack = true; |
| 896 | |
| 897 | compilation.warnings.push(err); |
| 898 | } |
| 899 | |
| 900 | if (typeof charset === "undefined") { |
no test coverage detected