mirror of
https://github.com/mdgriffith/elm-optimize-level-2.git
synced 2024-11-25 22:50:42 +03:00
add crossplatform gzip lib
This commit is contained in:
parent
baedc3a665
commit
f0c80f6912
9
package-lock.json
generated
9
package-lock.json
generated
@ -408,6 +408,15 @@
|
||||
"to-fast-properties": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"@gfx/zopfli": {
|
||||
"version": "1.0.15",
|
||||
"resolved": "https://registry.npmjs.org/@gfx/zopfli/-/zopfli-1.0.15.tgz",
|
||||
"integrity": "sha512-7mBgpi7UD82fsff5ThQKet0uBTl4BYerQuc+/qA1ELTwWEiIedRTcD3JgiUu9wwZ2kytW8JOb165rSdAt8PfcQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"base64-js": "^1.3.0"
|
||||
}
|
||||
},
|
||||
"@nodelib/fs.scandir": {
|
||||
"version": "2.1.3",
|
||||
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz",
|
||||
|
@ -32,6 +32,7 @@
|
||||
"author": "",
|
||||
"module": "dist/lib.esm.js",
|
||||
"devDependencies": {
|
||||
"@gfx/zopfli": "^1.0.15",
|
||||
"@types/commander": "^2.12.2",
|
||||
"chalk": "^4.1.0",
|
||||
"chromedriver": "^84.0.1",
|
||||
|
@ -5,6 +5,7 @@ import * as Visit from './visit';
|
||||
import chalk from 'chalk';
|
||||
import * as Transform from '../transform';
|
||||
import { compileToStringSync } from 'node-elm-compiler';
|
||||
import * as Post from '../postprocess';
|
||||
export interface Stat {
|
||||
name: string;
|
||||
bytes: number;
|
||||
@ -443,7 +444,7 @@ export const run = async function (
|
||||
instance.dir,
|
||||
source,
|
||||
path.join(instance.dir, instance.elmFile),
|
||||
false,
|
||||
options.verbose,
|
||||
options.transforms
|
||||
)
|
||||
fs.writeFileSync(
|
||||
@ -454,6 +455,14 @@ export const run = async function (
|
||||
path.join(instance.dir, 'output', 'elm.opt.transformed.js'),
|
||||
transformed
|
||||
);
|
||||
if (options.minify) {
|
||||
await Post.minify(path.join(instance.dir, 'output', 'elm.opt.js'), path.join(instance.dir, 'output', 'elm.opt.min.js'))
|
||||
await Post.minify(path.join(instance.dir, 'output', 'elm.opt.transformed.js'), path.join(instance.dir, 'output', 'elm.opt.transformed.min.js'))
|
||||
}
|
||||
if (options.minify && options.gzip) {
|
||||
await Post.gzip(path.join(instance.dir, 'output', 'elm.opt.min.js'), path.join(instance.dir, 'output', 'elm.opt.min.js.gz'))
|
||||
await Post.gzip(path.join(instance.dir, 'output', 'elm.opt.transformed.min.js'), path.join(instance.dir, 'output', 'elm.opt.transformed.min.js.gz'))
|
||||
}
|
||||
|
||||
if (options.assetSizes) {
|
||||
assets[instance.name] = assetSizeStats(path.join(instance.dir, 'output'));
|
||||
@ -597,23 +606,7 @@ export const runWithBreakdown = async function (
|
||||
}
|
||||
});
|
||||
|
||||
const final = await Transform.transform(
|
||||
instance.dir,
|
||||
source,
|
||||
path.join(instance.dir, instance.elmFile),
|
||||
false,
|
||||
options.transforms
|
||||
)
|
||||
fs.writeFileSync(
|
||||
path.join(instance.dir, 'output', 'elm.opt.js'),
|
||||
source
|
||||
);
|
||||
fs.writeFileSync(
|
||||
path.join(instance.dir, 'output', 'elm.opt.transformed.js'),
|
||||
final
|
||||
);
|
||||
|
||||
assets[instance.name] = assetSizeStats(path.join(instance.dir, 'output'));
|
||||
|
||||
for (let browser of options.runBenchmark) {
|
||||
results.push(
|
||||
@ -641,7 +634,7 @@ export const runWithBreakdown = async function (
|
||||
instance.dir,
|
||||
source,
|
||||
path.join(instance.dir, instance.elmFile),
|
||||
false,
|
||||
options.verbose,
|
||||
steps[i].options
|
||||
)
|
||||
fs.writeFileSync(
|
||||
@ -663,6 +656,33 @@ export const runWithBreakdown = async function (
|
||||
);
|
||||
}
|
||||
}
|
||||
fs.writeFileSync(
|
||||
path.join(instance.dir, 'output', 'elm.opt.js'),
|
||||
source
|
||||
);
|
||||
const final = await Transform.transform(
|
||||
instance.dir,
|
||||
source,
|
||||
path.join(instance.dir, instance.elmFile),
|
||||
options.verbose,
|
||||
options.transforms
|
||||
)
|
||||
fs.writeFileSync(
|
||||
path.join(instance.dir, 'output', 'elm.opt.transformed.js'),
|
||||
final
|
||||
);
|
||||
|
||||
if (options.minify) {
|
||||
await Post.minify(path.join(instance.dir, 'output', 'elm.opt.js'), path.join(instance.dir, 'output', 'elm.opt.min.js'))
|
||||
await Post.minify(path.join(instance.dir, 'output', 'elm.opt.transformed.js'), path.join(instance.dir, 'output', 'elm.opt.transformed.min.js'))
|
||||
}
|
||||
if (options.minify && options.gzip) {
|
||||
await Post.gzip(path.join(instance.dir, 'output', 'elm.opt.min.js'), path.join(instance.dir, 'output', 'elm.opt.min.js.gz'))
|
||||
await Post.gzip(path.join(instance.dir, 'output', 'elm.opt.transformed.min.js'), path.join(instance.dir, 'output', 'elm.opt.transformed.min.js.gz'))
|
||||
}
|
||||
assets[instance.name] = assetSizeStats(path.join(instance.dir, 'output'));
|
||||
|
||||
|
||||
}
|
||||
|
||||
return { assets: assets, benchmarks: reformat(results) };
|
||||
@ -693,21 +713,6 @@ export const runWithKnockout = async function (
|
||||
}
|
||||
});
|
||||
|
||||
const final = await Transform.transform(
|
||||
instance.dir,
|
||||
source,
|
||||
path.join(instance.dir, instance.elmFile),
|
||||
false,
|
||||
options.transforms
|
||||
)
|
||||
fs.writeFileSync(
|
||||
path.join(instance.dir, 'output', 'elm.opt.js'),
|
||||
source
|
||||
);
|
||||
fs.writeFileSync(
|
||||
path.join(instance.dir, 'output', 'elm.opt.transformed.js'),
|
||||
final
|
||||
);
|
||||
assets[instance.name] = assetSizeStats(path.join(instance.dir, 'output'));
|
||||
|
||||
for (let browser of options.runBenchmark) {
|
||||
@ -735,7 +740,7 @@ export const runWithKnockout = async function (
|
||||
instance.dir,
|
||||
source,
|
||||
path.join(instance.dir, instance.elmFile),
|
||||
false,
|
||||
options.verbose,
|
||||
steps[i].options
|
||||
)
|
||||
fs.writeFileSync(
|
||||
@ -756,6 +761,31 @@ export const runWithKnockout = async function (
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
const final = await Transform.transform(
|
||||
instance.dir,
|
||||
source,
|
||||
path.join(instance.dir, instance.elmFile),
|
||||
options.verbose,
|
||||
options.transforms
|
||||
)
|
||||
fs.writeFileSync(
|
||||
path.join(instance.dir, 'output', 'elm.opt.js'),
|
||||
source
|
||||
);
|
||||
fs.writeFileSync(
|
||||
path.join(instance.dir, 'output', 'elm.opt.transformed.js'),
|
||||
final
|
||||
);
|
||||
if (options.minify) {
|
||||
await Post.minify(path.join(instance.dir, 'output', 'elm.opt.js'), path.join(instance.dir, 'output', 'elm.opt.min.js'))
|
||||
await Post.minify(path.join(instance.dir, 'output', 'elm.opt.transformed.js'), path.join(instance.dir, 'output', 'elm.opt.transformed.min.js'))
|
||||
}
|
||||
if (options.minify && options.gzip) {
|
||||
await Post.gzip(path.join(instance.dir, 'output', 'elm.opt.min.js'), path.join(instance.dir, 'output', 'elm.opt.min.js.gz'))
|
||||
await Post.gzip(path.join(instance.dir, 'output', 'elm.opt.transformed.min.js'), path.join(instance.dir, 'output', 'elm.opt.transformed.min.js.gz'))
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return { assets: assets, benchmarks: reformat(results) };
|
||||
|
@ -37,28 +37,28 @@ const test: Transforms = {
|
||||
|
||||
const options = {
|
||||
compile: true,
|
||||
gzip: false,
|
||||
minify: false,
|
||||
gzip: true,
|
||||
minify: true,
|
||||
verbose: true,
|
||||
assetSizes: false,
|
||||
assetSizes: true,
|
||||
runBenchmark: [
|
||||
{
|
||||
browser: Browser.Chrome,
|
||||
headless: false,
|
||||
headless: true,
|
||||
},
|
||||
{
|
||||
browser: Browser.Firefox,
|
||||
headless: false,
|
||||
headless: true,
|
||||
},
|
||||
],
|
||||
transforms: defaultOptions,
|
||||
};
|
||||
|
||||
async function go() {
|
||||
// const report = await Reporting.run(options, [
|
||||
// Use `runWithBreakdown` if you want the breakdown
|
||||
// const report = await Reporting.runWithKnockout(options, [
|
||||
const report = await Reporting.runWithBreakdown(options, [
|
||||
const report = await Reporting.run(options, [
|
||||
// Use `runWithBreakdown` if you want the breakdown
|
||||
// const report = await Reporting.runWithKnockout(options, [
|
||||
// const report = await Reporting.runWithBreakdown(options, [
|
||||
// {
|
||||
// name: 'Elm Core',
|
||||
// dir: 'testcases/bench',
|
||||
|
@ -29,8 +29,8 @@ export const benchmark = async (
|
||||
// https://www.selenium.dev/selenium/docs/api/javascript/module/selenium-webdriver/index_exports_WebDriver.html
|
||||
let result = [];
|
||||
try {
|
||||
const tagStr: string = tag == null ? '' : ", " + tag;
|
||||
console.log(name + tagStr + chalk.green(" -> ") + chalk.yellow(options.browser))
|
||||
const label: string = tag == null ? name : name + ", " + tag;
|
||||
console.log(label.padEnd(20, ' ') + chalk.green(" -> ") + chalk.yellow(options.browser))
|
||||
await driver.get('file://' + Path.resolve(file));
|
||||
await driver.wait(Webdriver.until.titleIs('done'), 480000);
|
||||
result = await driver.executeScript('return window.results;');
|
||||
|
@ -14,6 +14,8 @@ import * as fs from 'fs';
|
||||
import { prepackFileSync } from 'prepack';
|
||||
import * as Terser from 'terser';
|
||||
import { execSync } from 'child_process';
|
||||
import * as Compress from "@gfx/zopfli";
|
||||
import { resolveModuleName } from 'typescript';
|
||||
|
||||
|
||||
export function prepack(input: string): string {
|
||||
@ -75,9 +77,21 @@ export async function minify(inputFilename: string, outputFilename: string) {
|
||||
console.log('Error mangling with Terser');
|
||||
}
|
||||
}
|
||||
export async function gzip(file: string) {
|
||||
export async function gzip(file: string, output: string) {
|
||||
// --keep = keep the original file
|
||||
// --force = overwrite the exisign gzip file if it's there
|
||||
execSync('gzip --keep --force ' + file);
|
||||
// execSync('gzip --keep --force ' + file);
|
||||
const fileContents = fs.readFileSync(file, 'utf8');
|
||||
const promise = Compress.gzipAsync(fileContents, {})
|
||||
.then(
|
||||
(compressed) => {
|
||||
fs.writeFileSync(
|
||||
output,
|
||||
compressed
|
||||
);
|
||||
}
|
||||
);
|
||||
|
||||
await promise;
|
||||
}
|
||||
|
||||
|
@ -98,9 +98,7 @@ function reportInlineTransformResult(ctx: InlineContext) {
|
||||
|
||||
|
||||
|
||||
export const createFunctionInlineTransformer = (logOverview: boolean
|
||||
|
||||
): ts.TransformerFactory<ts.SourceFile> => context => {
|
||||
export const createFunctionInlineTransformer = (logOverview: boolean): ts.TransformerFactory<ts.SourceFile> => context => {
|
||||
return sourceFile => {
|
||||
const inlineContext: InlineContext = createInlineContext();
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user