@statoscope/webpack-stats-extension-compressed
Advanced tools
Comparing version 5.9.0 to 5.13.0
@@ -1,5 +0,6 @@ | ||
import { Compilation } from 'webpack'; | ||
import { Compiler } from 'webpack'; | ||
import { ExtensionDescriptor } from '@statoscope/stats/spec/extension'; | ||
import CompressedExtensionGenerator, { Format, CompressorOrPreset } from '@statoscope/stats-extension-compressed/dist/generator'; | ||
export default class WebpackCompressedExtension { | ||
import CompressedExtensionGenerator, { CompressorOrPreset, Format, Payload } from '@statoscope/stats-extension-compressed/dist/generator'; | ||
import { StatsExtensionWebpackAdapter } from '@statoscope/webpack-model/src'; | ||
export default class WebpackCompressedExtension implements StatsExtensionWebpackAdapter<Payload> { | ||
compressor: CompressorOrPreset; | ||
@@ -9,4 +10,4 @@ descriptor: ExtensionDescriptor; | ||
constructor(compressor: CompressorOrPreset); | ||
get(): Format; | ||
handleCompilation(compilation: Compilation, recursive?: boolean): Promise<void>; | ||
getExtension(): Format; | ||
handleCompiler(compiler: Compiler): void; | ||
} |
@@ -11,2 +11,3 @@ "use strict"; | ||
const { author, homepage, name, version, description } = require('../package.json'); | ||
const pluginName = `${name}@${version}`; | ||
class WebpackCompressedExtension { | ||
@@ -18,62 +19,74 @@ constructor(compressor) { | ||
} | ||
get() { | ||
getExtension() { | ||
return this.compressedExtensionGenerator.get(); | ||
} | ||
async handleCompilation(compilation, recursive = true) { | ||
const stack = [compilation]; | ||
let cursor; | ||
while ((cursor = stack.pop())) { | ||
if (recursive) { | ||
handleCompiler(compiler) { | ||
compiler.hooks.done.tapAsync(pluginName, async (stats, cb) => { | ||
const stack = [stats.compilation]; | ||
let cursor; | ||
while ((cursor = stack.pop())) { | ||
stack.push(...cursor.children); | ||
} | ||
// webpack 4 | ||
let readFile = (0, util_1.promisify)(cursor.compiler.inputFileSystem.readFile.bind(cursor.compiler.inputFileSystem)); | ||
// webpack 5 | ||
if (cursor.compiler.outputFileSystem && | ||
typeof cursor.compiler.outputFileSystem.readFile === 'function') { | ||
readFile = (0, util_1.promisify)(cursor.compiler.outputFileSystem.readFile.bind(cursor.compiler.outputFileSystem)); | ||
} | ||
for (const name of Object.keys(cursor.assets)) { | ||
const assetPath = path_1.default.join(cursor.compiler.outputPath, name); | ||
let content; | ||
try { | ||
content = await readFile(assetPath); | ||
if (!content) { | ||
throw new Error(); | ||
// webpack 4 | ||
let readFile = (0, util_1.promisify)(cursor.compiler.inputFileSystem.readFile.bind(cursor.compiler.inputFileSystem)); | ||
// webpack 5 | ||
if (cursor.compiler.outputFileSystem && | ||
typeof cursor.compiler.outputFileSystem.readFile === 'function') { | ||
readFile = (0, util_1.promisify)(cursor.compiler.outputFileSystem.readFile.bind(cursor.compiler.outputFileSystem)); | ||
} | ||
for (const name of Object.keys(cursor.assets)) { | ||
const assetPath = path_1.default.join(cursor.compiler.outputPath, name); | ||
let content; | ||
try { | ||
content = await readFile(assetPath); | ||
if (!content) { | ||
throw new Error(); | ||
} | ||
this.compressedExtensionGenerator.handleResource(cursor.hash, name, content, this.compressor); | ||
} | ||
this.compressedExtensionGenerator.handleResource(cursor.hash, name, content, this.compressor); | ||
catch (e) { | ||
console.warn(`Can't read the asset ${name}`); | ||
} | ||
} | ||
catch (e) { | ||
console.warn(`Can't read the asset ${name}`); | ||
} | ||
} | ||
const modulesStack = [...cursor.modules]; | ||
let modulesCursor; | ||
while ((modulesCursor = modulesStack.pop())) { | ||
// @ts-ignore | ||
if (modulesCursor.modules) { | ||
const modulesStack = [...cursor.modules]; | ||
let modulesCursor; | ||
while ((modulesCursor = modulesStack.pop())) { | ||
// @ts-ignore | ||
modulesStack.push(...modulesCursor.modules); | ||
} | ||
let concatenated = Buffer.from(''); | ||
if (modulesCursor.constructor.name === 'CssModule' && | ||
// @ts-ignore | ||
(typeof modulesCursor.content === 'string' || | ||
if (modulesCursor.modules) { | ||
// @ts-ignore | ||
modulesCursor.content instanceof Buffer)) { | ||
this.compressedExtensionGenerator.handleResource(cursor.hash, modulesCursor.identifier(), | ||
// @ts-ignore | ||
modulesCursor.content, this.compressor); | ||
} | ||
else if (cursor.chunkGraph) { | ||
// webpack 5 | ||
for (const type of modulesCursor.getSourceTypes()) { | ||
const runtimeChunk = cursor.chunkGraph | ||
.getModuleChunks(modulesCursor) | ||
.find((chunk) => chunk.runtime); | ||
if (runtimeChunk) { | ||
const source = cursor.codeGenerationResults.getSource(modulesCursor, runtimeChunk.runtime, type); | ||
if (!source) { | ||
continue; | ||
modulesStack.push(...modulesCursor.modules); | ||
} | ||
let concatenated = Buffer.from(''); | ||
if (modulesCursor.constructor.name === 'CssModule' && | ||
// @ts-ignore | ||
(typeof modulesCursor.content === 'string' || | ||
// @ts-ignore | ||
modulesCursor.content instanceof Buffer)) { | ||
this.compressedExtensionGenerator.handleResource(cursor.hash, modulesCursor.identifier(), | ||
// @ts-ignore | ||
modulesCursor.content, this.compressor); | ||
} | ||
else if (cursor.chunkGraph) { | ||
// webpack 5 | ||
for (const type of modulesCursor.getSourceTypes()) { | ||
const runtimeChunk = cursor.chunkGraph | ||
.getModuleChunks(modulesCursor) | ||
.find((chunk) => chunk.runtime); | ||
if (runtimeChunk) { | ||
const source = cursor.codeGenerationResults.getSource(modulesCursor, runtimeChunk.runtime, type); | ||
if (!source) { | ||
continue; | ||
} | ||
const content = source.source(); | ||
concatenated = Buffer.concat([ | ||
concatenated, | ||
content instanceof Buffer ? content : Buffer.from(content), | ||
]); | ||
} | ||
} | ||
} | ||
else { | ||
// webpack 4 | ||
try { | ||
// @ts-ignore | ||
const source = cursor.moduleTemplates.javascript.render(modulesCursor, cursor.dependencyTemplates, { chunk: modulesCursor.getChunks()[0] }); | ||
const content = source.source(); | ||
@@ -85,25 +98,14 @@ concatenated = Buffer.concat([ | ||
} | ||
catch (e) { | ||
// in webpack 4 we can't generate source for all the modules :( | ||
} | ||
} | ||
} | ||
else { | ||
// webpack 4 | ||
try { | ||
// @ts-ignore | ||
const source = cursor.moduleTemplates.javascript.render(modulesCursor, cursor.dependencyTemplates, { chunk: modulesCursor.getChunks()[0] }); | ||
const content = source.source(); | ||
concatenated = Buffer.concat([ | ||
concatenated, | ||
content instanceof Buffer ? content : Buffer.from(content), | ||
]); | ||
if (!concatenated.length) { | ||
continue; | ||
} | ||
catch (e) { | ||
// in webpack 4 we can't generate source for all the modules :( | ||
} | ||
this.compressedExtensionGenerator.handleResource(cursor.hash, modulesCursor.identifier(), concatenated, this.compressor); | ||
} | ||
if (!concatenated.length) { | ||
continue; | ||
} | ||
this.compressedExtensionGenerator.handleResource(cursor.hash, modulesCursor.identifier(), concatenated, this.compressor); | ||
} | ||
} | ||
cb(); | ||
}); | ||
} | ||
@@ -110,0 +112,0 @@ } |
{ | ||
"name": "@statoscope/webpack-stats-extension-compressed", | ||
"version": "5.9.0", | ||
"version": "5.13.0", | ||
"description": "Webpack adapter for @statoscope/stats-extension-compressed", | ||
@@ -22,11 +22,10 @@ "main": "./dist/index.js", | ||
"@statoscope/stats": "5.7.0", | ||
"@statoscope/stats-extension-compressed": "5.9.0" | ||
"@statoscope/stats-extension-compressed": "5.9.0", | ||
"@statoscope/webpack-model": "5.13.0", | ||
"@types/webpack": "^5.0.0" | ||
}, | ||
"devDependencies": { | ||
"@types/webpack": "^5.28.0" | ||
}, | ||
"peerDependencies": { | ||
"webpack": "^4.0.0 || ^5.0.0" | ||
}, | ||
"gitHead": "f8e8a9cd721828a4bc53a2f808441d81e5fdbf84" | ||
"gitHead": "01e3953dc17249874436217248cde6a3ed53be80" | ||
} |
8610
0
122
5
+ Added@types/webpack@^5.0.0
+ Added@statoscope/extensions@5.7.1(transitive)
+ Added@statoscope/stats-extension-custom-reports@5.12.1(transitive)
+ Added@statoscope/stats-extension-package-info@5.9.0(transitive)
+ Added@statoscope/stats-extension-stats-validation-result@5.12.1(transitive)
+ Added@statoscope/types@5.12.1(transitive)
+ Added@statoscope/webpack-model@5.13.0(transitive)
+ Added@types/md5@2.3.5(transitive)
+ Added@types/webpack@5.28.5(transitive)
+ Addedcharenc@0.0.2(transitive)
+ Addedcrypt@0.0.2(transitive)
+ Addedis-buffer@1.1.6(transitive)
+ Addedmd5@2.3.0(transitive)