Files
meteor/tools/isobuild/minifier-plugin.js

103 lines
2.2 KiB
JavaScript

import buildmessage from '../utils/buildmessage.js';
import {
optimisticReadFile,
optimisticHashOrNull,
} from "../fs/optimistic";
import {
convertToPosixPath
} from '../fs/files';
const buildPluginModule = require('./build-plugin.js');
class InputFile extends buildPluginModule.InputFile {
constructor(source, options = {}) {
super();
this._source = source;
this._arch = options.arch;
this._watchSet = options.watchSet;
this._minifiedFiles = [];
}
getContentsAsBuffer() {
return this._source.contents();
}
getPathInPackage() {
throw new Error("Compiled files don't belong to any package");
}
getPackageName() {
throw new Error("Compiled files don't belong to any package");
}
getSourceHash() {
return this._source.hash();
}
getArch() {
return this._arch;
}
getSourcePath() {
return this._source.sourcePath || null;
}
error({message, sourcePath, line, column, func}) {
const relPath = this.getPathInBundle();
buildmessage.error(message || ('error minifying ' + relPath), {
file: sourcePath || relPath,
line: line ? line : undefined,
column: column ? column : undefined,
func: func ? func : undefined
});
}
/**
* @summary Returns the path of the compiled file in the bundle.
* @memberof InputFile
* @returns {String}
*/
getPathInBundle() {
return this._source.targetPath;
}
/**
* @summary Returns the source-map associated with the file.
* @memberof InputFile
* @returns {String}
*/
getSourceMap() {
return this._source.sourceMap;
}
}
export class JsFile extends InputFile {
// - data
// - sourceMap
// - path
// - hash?
// - stats?
addJavaScript(options) {
this._minifiedFiles.push({ ...options });
}
}
export class CssFile extends InputFile {
// - data
// - sourceMap
// - path
// - hash?
// - stats?
addStylesheet(options) {
this._minifiedFiles.push({ ...options });
}
readAndWatchFileWithHash(path) {
const filePath = convertToPosixPath(path);
const hash = optimisticHashOrNull(filePath);
const contents = optimisticReadFile(filePath);
this._watchSet.addFile(filePath, hash);
return {
hash,
contents
}
}
}