Compare commits

...

21 Commits

Author SHA1 Message Date
8c18b4b28d Try Sentry integration 2020-12-11 12:55:32 +00:00
c3d05e0e2d Merge pull request #892 from XhmikosR/gitignore 2020-12-10 14:00:56 +00:00
0c848a33ad Merge branch 'dev' into gitignore 2020-12-10 13:49:38 +00:00
57357f5c8d Merge pull request #894 from fernap3/validate-input-files
Validate that input files exist before attempting to process them
2020-12-10 13:22:11 +00:00
6bfd1f2c29 Merge branch 'dev' into validate-input-files 2020-12-10 13:18:41 +00:00
8b20aa5f14 Merge branch 'dev' into gitignore 2020-12-10 13:11:45 +00:00
81e171e684 Merge pull request #891 from kurtextrem/patch-1
Fix typo
2020-12-10 13:06:52 +00:00
7b4dbbfe2d Merge branch 'dev' into patch-1 2020-12-10 13:03:27 +00:00
a972dfdeed Update .gitignore 2020-12-10 14:29:53 +02:00
f190ca6069 Merge branch 'dev' into validate-input-files 2020-12-10 12:26:54 +00:00
adb2f7ed50 Use real font. Fixes #895 2020-12-10 10:45:43 +00:00
d6de741ddc Copying over old sw-bridge
This is from the webpack build, but the old build failed to make this file work offline. It's the file that handles the "update available" stuff, which is why users using the old version aren't seeing the UI update. We can remove this file once everyone's off the old version.
2020-12-10 10:33:56 +00:00
b5f708a1e6 Fix formatting 2020-12-09 17:17:31 -05:00
15248bf85a Validate that input files exist before attempting to process them 2020-12-09 17:14:43 -05:00
5d691af8a1 Simpler fallback 2020-12-09 22:03:34 +00:00
722f1c806c Correct service worker name 2020-12-09 21:54:08 +00:00
522449adc1 Add .DS_Store to .gitignore. 2020-12-09 22:35:41 +02:00
07b4e53718 Fix typo 2020-12-09 19:15:12 +01:00
c6e6042726 Merge branch 'plan-b' into dev 2020-12-09 17:33:54 +00:00
94b9d08719 Update SIMD token (#889) 2020-12-09 16:26:30 +00:00
064b152e2a CLI v0.6.0 2020-12-09 16:06:58 +00:00
20 changed files with 250 additions and 20 deletions

1
.gitignore vendored
View File

@ -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

Binary file not shown.

1
cli/.gitignore vendored
View File

@ -1,2 +1,3 @@
node_modules
build
.DS_Store

View File

@ -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
View File

@ -1,6 +1,6 @@
{
"name": "@squoosh/cli",
"version": "0.5.0",
"version": "0.6.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {

View File

@ -1,6 +1,6 @@
{
"name": "@squoosh/cli",
"version": "0.5.0",
"version": "0.6.0",
"description": "A CLI for Squoosh",
"public": true,
"bin": {

View File

@ -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();

File diff suppressed because one or more lines are too long

60
package-lock.json generated
View File

@ -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",

View File

@ -55,6 +55,7 @@
"*.rs": "rustfmt"
},
"dependencies": {
"@sentry/browser": "^5.29.0",
"wasm-feature-detect": "^1.2.9"
}
}

View File

@ -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(),

View File

@ -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
View 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
View 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

View File

@ -28,7 +28,7 @@ const branchOriginTrialIds = new Map([
],
[
'live',
'AgoKiDqjr0GVPtrwV/vuVlrrSvbDa5Yb99s+q66ly816DrrAQ8Cdas33NgDtmhxM4BtDP9PEdyuxHPyTQHD5ZAcAAABUeyJvcmlnaW4iOiJodHRwczovL3NxdW9vc2guYXBwOjQ0MyIsImZlYXR1cmUiOiJXZWJBc3NlbWJseVNpbWQiLCJleHBpcnkiOjE2MDg2NzI5OTR9',
'Ak9YMaDZyWUUZFbVJng8FM2LWWNeBcWaHTtHzzaTAq044kMlQH5/hsMb/90Ii2I7m/lPx8EpgOIUMWkWeoaKfgIAAABUeyJvcmlnaW4iOiJodHRwczovL3NxdW9vc2guYXBwOjQ0MyIsImZlYXR1cmUiOiJXZWJBc3NlbWJseVNpbWQiLCJleHBpcnkiOjE2MTExNTkwNjZ9',
],
]);