Compare commits
21 Commits
Author | SHA1 | Date | |
---|---|---|---|
8c18b4b28d | |||
c3d05e0e2d | |||
0c848a33ad | |||
57357f5c8d | |||
6bfd1f2c29 | |||
8b20aa5f14 | |||
81e171e684 | |||
7b4dbbfe2d | |||
a972dfdeed | |||
f190ca6069 | |||
adb2f7ed50 | |||
d6de741ddc | |||
b5f708a1e6 | |||
15248bf85a | |||
5d691af8a1 | |||
722f1c806c | |||
522449adc1 | |||
07b4e53718 | |||
c6e6042726 | |||
94b9d08719 | |||
064b152e2a |
1
.gitignore
vendored
1
.gitignore
vendored
@ -4,6 +4,7 @@ node_modules
|
||||
*.css.d.ts
|
||||
build
|
||||
*.o
|
||||
.DS_Store
|
||||
|
||||
# Auto-generated by lib/feature-plugin.js
|
||||
src/features-worker/index.ts
|
||||
|
BIN
cli/.DS_Store
vendored
BIN
cli/.DS_Store
vendored
Binary file not shown.
1
cli/.gitignore
vendored
1
cli/.gitignore
vendored
@ -1,2 +1,3 @@
|
||||
node_modules
|
||||
build
|
||||
.DS_Store
|
||||
|
@ -47,7 +47,7 @@ The default values for each `config` option can be found in the [`codecs.js`][co
|
||||
|
||||
Squoosh CLI has an _experimental_ auto optimizer that compresses an image as much as possible, trying to hit a specific [Butteraugli] target value. The higher the Butteraugli target value, the more artifacts can be introduced.
|
||||
|
||||
You can make use of the auto optimizer buy using “auto” as the config object.
|
||||
You can make use of the auto optimizer by using “auto” as the config object.
|
||||
|
||||
```
|
||||
$ npx @squoosh/cli --wp2 auto test.png
|
||||
|
Binary file not shown.
Binary file not shown.
Before Width: | Height: | Size: 35 KiB |
Binary file not shown.
Binary file not shown.
Before Width: | Height: | Size: 65 KiB |
2
cli/package-lock.json
generated
2
cli/package-lock.json
generated
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@squoosh/cli",
|
||||
"version": "0.5.0",
|
||||
"version": "0.6.0",
|
||||
"lockfileVersion": 1,
|
||||
"requires": true,
|
||||
"dependencies": {
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@squoosh/cli",
|
||||
"version": "0.5.0",
|
||||
"version": "0.6.0",
|
||||
"description": "A CLI for Squoosh",
|
||||
"public": true,
|
||||
"bin": {
|
||||
|
@ -4,6 +4,7 @@ import { isMainThread } from 'worker_threads';
|
||||
import { cpus } from 'os';
|
||||
import { extname, join, basename } from 'path';
|
||||
import { promises as fsp } from 'fs';
|
||||
import { resolve as resolvePath } from 'path';
|
||||
import { version } from 'json:../package.json';
|
||||
import ora from 'ora';
|
||||
import kleur from 'kleur';
|
||||
@ -182,7 +183,32 @@ function progressTracker(results) {
|
||||
return tracker;
|
||||
}
|
||||
|
||||
async function checkInputFilesValid(files) {
|
||||
const validFiles = [];
|
||||
|
||||
for (const file of files) {
|
||||
try {
|
||||
await fsp.stat(file);
|
||||
} catch (err) {
|
||||
if (err.code === 'ENOENT') {
|
||||
console.warn(
|
||||
`Warning: Input file does not exist: ${resolvePath(file)}`,
|
||||
);
|
||||
continue;
|
||||
} else {
|
||||
throw err;
|
||||
}
|
||||
}
|
||||
|
||||
validFiles.push(file);
|
||||
}
|
||||
|
||||
return validFiles;
|
||||
}
|
||||
|
||||
async function processFiles(files) {
|
||||
files = await checkInputFilesValid(files);
|
||||
|
||||
const parallelism = cpus().length;
|
||||
|
||||
const results = new Map();
|
||||
|
12
cli/tmp.txt
12
cli/tmp.txt
File diff suppressed because one or more lines are too long
60
package-lock.json
generated
60
package-lock.json
generated
@ -166,6 +166,63 @@
|
||||
"picomatch": "^2.2.2"
|
||||
}
|
||||
},
|
||||
"@sentry/browser": {
|
||||
"version": "5.29.0",
|
||||
"resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-5.29.0.tgz",
|
||||
"integrity": "sha512-kRlt1mE2wrYjspnIupNnPxqsUrRuy02SuXhbpP7J6uu8QasoEmJ78hk0hHz4jOZRmuWwfs2zIXD4tLGgWOKq8A==",
|
||||
"requires": {
|
||||
"@sentry/core": "5.29.0",
|
||||
"@sentry/types": "5.29.0",
|
||||
"@sentry/utils": "5.29.0",
|
||||
"tslib": "^1.9.3"
|
||||
}
|
||||
},
|
||||
"@sentry/core": {
|
||||
"version": "5.29.0",
|
||||
"resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.29.0.tgz",
|
||||
"integrity": "sha512-a1sZBJ2u3NG0YDlGvOTwUCWiNjhfmDtAQiKK1o6RIIbcrWy9TlSps7CYDkBP239Y3A4pnvohjEEKEP3v3L3LZQ==",
|
||||
"requires": {
|
||||
"@sentry/hub": "5.29.0",
|
||||
"@sentry/minimal": "5.29.0",
|
||||
"@sentry/types": "5.29.0",
|
||||
"@sentry/utils": "5.29.0",
|
||||
"tslib": "^1.9.3"
|
||||
}
|
||||
},
|
||||
"@sentry/hub": {
|
||||
"version": "5.29.0",
|
||||
"resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.29.0.tgz",
|
||||
"integrity": "sha512-kcDPQsRG4cFdmqDh+TzjeO7lWYxU8s1dZYAbbl1J4uGKmhNB0J7I4ak4SGwTsXLY6fhbierxr6PRaoNojCxjPw==",
|
||||
"requires": {
|
||||
"@sentry/types": "5.29.0",
|
||||
"@sentry/utils": "5.29.0",
|
||||
"tslib": "^1.9.3"
|
||||
}
|
||||
},
|
||||
"@sentry/minimal": {
|
||||
"version": "5.29.0",
|
||||
"resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.29.0.tgz",
|
||||
"integrity": "sha512-nhXofdjtO41/caiF1wk1oT3p/QuhOZDYdF/b29DoD2MiAMK9IjhhOXI/gqaRpDKkXlDvd95fDTcx4t/MqqcKXA==",
|
||||
"requires": {
|
||||
"@sentry/hub": "5.29.0",
|
||||
"@sentry/types": "5.29.0",
|
||||
"tslib": "^1.9.3"
|
||||
}
|
||||
},
|
||||
"@sentry/types": {
|
||||
"version": "5.29.0",
|
||||
"resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.29.0.tgz",
|
||||
"integrity": "sha512-iDkxT/9sT3UF+Xb+JyLjZ5caMXsgLfRyV9VXQEiR2J6mgpMielj184d9jeF3bm/VMuAf/VFFqrHlcVsVgmrrMw=="
|
||||
},
|
||||
"@sentry/utils": {
|
||||
"version": "5.29.0",
|
||||
"resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.29.0.tgz",
|
||||
"integrity": "sha512-b2B1gshw2u3EHlAi84PuI5sfmLKXW1z9enMMhNuuNT/CoRp+g5kMAcUv/qYTws7UNnYSvTuVGuZG30v1e0hP9A==",
|
||||
"requires": {
|
||||
"@sentry/types": "5.29.0",
|
||||
"tslib": "^1.9.3"
|
||||
}
|
||||
},
|
||||
"@surma/rollup-plugin-off-main-thread": {
|
||||
"version": "1.4.2",
|
||||
"resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-1.4.2.tgz",
|
||||
@ -6920,8 +6977,7 @@
|
||||
"tslib": {
|
||||
"version": "1.14.1",
|
||||
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
|
||||
"integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
|
||||
"dev": true
|
||||
"integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
|
||||
},
|
||||
"type-fest": {
|
||||
"version": "0.11.0",
|
||||
|
@ -55,6 +55,7 @@
|
||||
"*.rs": "rustfmt"
|
||||
},
|
||||
"dependencies": {
|
||||
"@sentry/browser": "^5.29.0",
|
||||
"wasm-feature-detect": "^1.2.9"
|
||||
}
|
||||
}
|
||||
|
@ -112,7 +112,9 @@ export default async function ({ watch }) {
|
||||
plugins: [
|
||||
{ resolveFileUrl, resolveImportMeta },
|
||||
OMT({ loader: await omtLoaderPromise }),
|
||||
serviceWorkerPlugin({ output: 'static/sw.js' }),
|
||||
serviceWorkerPlugin({
|
||||
output: 'static/serviceworker.js',
|
||||
}),
|
||||
...commonPlugins(),
|
||||
commonjs(),
|
||||
resolve(),
|
||||
|
@ -12,10 +12,15 @@
|
||||
*/
|
||||
import { h, render } from 'preact';
|
||||
import App from './App';
|
||||
import { init as initSentry } from '@sentry/browser';
|
||||
|
||||
const root = document.getElementById('app') as HTMLElement;
|
||||
|
||||
async function main() {
|
||||
initSentry({
|
||||
dsn:
|
||||
'https://1bf731600de64315b8ac4d38bf6b9c25@o482280.ingest.sentry.io/5532246',
|
||||
});
|
||||
if (!__PRODUCTION__) await import('preact/debug');
|
||||
render(<App />, root);
|
||||
}
|
||||
|
137
src/copy/sw-bridge.894ac.js
Normal file
137
src/copy/sw-bridge.894ac.js
Normal file
@ -0,0 +1,137 @@
|
||||
(self.webpackJsonp = self.webpackJsonp || []).push([
|
||||
[0],
|
||||
{
|
||||
54: function (e, t, n) {
|
||||
'use strict';
|
||||
n.d(t, 'a', function () {
|
||||
return o;
|
||||
}),
|
||||
n.d(t, 'b', function () {
|
||||
return s;
|
||||
});
|
||||
class r {
|
||||
constructor(e = 'keyval-store', t = 'keyval') {
|
||||
(this.storeName = t),
|
||||
(this._dbp = new Promise((n, r) => {
|
||||
const a = indexedDB.open(e, 1);
|
||||
(a.onerror = () => r(a.error)),
|
||||
(a.onsuccess = () => n(a.result)),
|
||||
(a.onupgradeneeded = () => {
|
||||
a.result.createObjectStore(t);
|
||||
});
|
||||
}));
|
||||
}
|
||||
_withIDBStore(e, t) {
|
||||
return this._dbp.then(
|
||||
(n) =>
|
||||
new Promise((r, a) => {
|
||||
const i = n.transaction(this.storeName, e);
|
||||
(i.oncomplete = () => r()),
|
||||
(i.onabort = i.onerror = () => a(i.error)),
|
||||
t(i.objectStore(this.storeName));
|
||||
}),
|
||||
);
|
||||
}
|
||||
}
|
||||
let a;
|
||||
function i() {
|
||||
return a || (a = new r()), a;
|
||||
}
|
||||
function o(e, t = i()) {
|
||||
let n;
|
||||
return t
|
||||
._withIDBStore('readonly', (t) => {
|
||||
n = t.get(e);
|
||||
})
|
||||
.then(() => n.result);
|
||||
}
|
||||
function s(e, t, n = i()) {
|
||||
return n._withIDBStore('readwrite', (n) => {
|
||||
n.put(t, e);
|
||||
});
|
||||
}
|
||||
},
|
||||
56: function (e, t, n) {
|
||||
'use strict';
|
||||
n.r(t),
|
||||
function (e) {
|
||||
n.d(t, 'getSharedImage', function () {
|
||||
return i;
|
||||
}),
|
||||
n.d(t, 'offliner', function () {
|
||||
return o;
|
||||
}),
|
||||
n.d(t, 'mainAppLoaded', function () {
|
||||
return s;
|
||||
});
|
||||
var r = n(54);
|
||||
async function a(e) {
|
||||
if (e.waiting) return;
|
||||
const t = await (async function (e) {
|
||||
return e.installing
|
||||
? e.installing
|
||||
: new Promise((t) => {
|
||||
e.addEventListener('updatefound', () => t(e.installing), {
|
||||
once: !0,
|
||||
});
|
||||
});
|
||||
})(e);
|
||||
return new Promise((e) => {
|
||||
t.addEventListener('statechange', () => {
|
||||
'installed' === t.state && e();
|
||||
});
|
||||
});
|
||||
}
|
||||
function i() {
|
||||
return new Promise((e) => {
|
||||
const t = (n) => {
|
||||
'load-image' === n.data.action &&
|
||||
(e(n.data.file),
|
||||
navigator.serviceWorker.removeEventListener('message', t));
|
||||
};
|
||||
navigator.serviceWorker.addEventListener('message', t),
|
||||
navigator.serviceWorker.controller.postMessage('share-ready');
|
||||
});
|
||||
}
|
||||
async function o(t) {
|
||||
if ('boolean' == typeof PRERENDER) return;
|
||||
navigator.serviceWorker.register(e);
|
||||
const n = !!navigator.serviceWorker.controller;
|
||||
if (
|
||||
(navigator.serviceWorker.addEventListener(
|
||||
'controllerchange',
|
||||
async () => {
|
||||
n
|
||||
? location.reload()
|
||||
: t('Ready to work offline', { timeout: 5e3 });
|
||||
},
|
||||
),
|
||||
!n)
|
||||
)
|
||||
return;
|
||||
const r = await navigator.serviceWorker.getRegistration();
|
||||
r &&
|
||||
(await a(r),
|
||||
'reload' ===
|
||||
(await t('Update available', {
|
||||
actions: ['reload', 'dismiss'],
|
||||
})) &&
|
||||
(async function () {
|
||||
const e = await navigator.serviceWorker.getRegistration();
|
||||
e && e.waiting && e.waiting.postMessage('skip-waiting');
|
||||
})());
|
||||
}
|
||||
async function s() {
|
||||
if (await Object(r.a)('user-interacted')) return;
|
||||
Object(r.b)('user-interacted', !0);
|
||||
const e = await (async function () {
|
||||
const e = await navigator.serviceWorker.getRegistration();
|
||||
return e ? e.active || e.waiting || e.installing : null;
|
||||
})();
|
||||
e && e.postMessage('cache-all');
|
||||
}
|
||||
}.call(this, n.p + 'serviceworker.js');
|
||||
},
|
||||
},
|
||||
]);
|
||||
//# sourceMappingURL=sw-bridge.894ac.js.map
|
4
src/copy/sw.js
Normal file
4
src/copy/sw.js
Normal file
@ -0,0 +1,4 @@
|
||||
// I accidentally shipped with the wrong service worker name.
|
||||
// This picks up users that still might be using that version.
|
||||
// We'll be able to delete this file eventually.
|
||||
skipWaiting();
|
File diff suppressed because one or more lines are too long
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
@ -28,7 +28,7 @@ const branchOriginTrialIds = new Map([
|
||||
],
|
||||
[
|
||||
'live',
|
||||
'AgoKiDqjr0GVPtrwV/vuVlrrSvbDa5Yb99s+q66ly816DrrAQ8Cdas33NgDtmhxM4BtDP9PEdyuxHPyTQHD5ZAcAAABUeyJvcmlnaW4iOiJodHRwczovL3NxdW9vc2guYXBwOjQ0MyIsImZlYXR1cmUiOiJXZWJBc3NlbWJseVNpbWQiLCJleHBpcnkiOjE2MDg2NzI5OTR9',
|
||||
'Ak9YMaDZyWUUZFbVJng8FM2LWWNeBcWaHTtHzzaTAq044kMlQH5/hsMb/90Ii2I7m/lPx8EpgOIUMWkWeoaKfgIAAABUeyJvcmlnaW4iOiJodHRwczovL3NxdW9vc2guYXBwOjQ0MyIsImZlYXR1cmUiOiJXZWJBc3NlbWJseVNpbWQiLCJleHBpcnkiOjE2MTExNTkwNjZ9',
|
||||
],
|
||||
]);
|
||||
|
||||
|
Reference in New Issue
Block a user