Revert "Remove some polyfills"
This commit is contained in:
parent
643287e235
commit
71587a604e
|
@ -5,24 +5,21 @@ env:
|
||||||
extends:
|
extends:
|
||||||
- eslint:recommended
|
- eslint:recommended
|
||||||
- prettier
|
- prettier
|
||||||
- plugin:n/recommended
|
- plugin:node/recommended
|
||||||
- plugin:security/recommended
|
- plugin:security/recommended
|
||||||
|
|
||||||
plugins:
|
plugins:
|
||||||
- n
|
- node
|
||||||
- security
|
- security
|
||||||
|
|
||||||
root: true
|
root: true
|
||||||
|
|
||||||
rules:
|
rules:
|
||||||
n/no-deprecated-api: off
|
node/no-deprecated-api: off
|
||||||
n/no-unsupported-features/es-syntax: off
|
node/no-unsupported-features/es-syntax: off
|
||||||
n/no-unsupported-features/node-builtins: off
|
node/no-unsupported-features/node-builtins: off
|
||||||
n/no-unpublished-require: off
|
node/no-unpublished-require: off
|
||||||
n/no-unpublished-import: off
|
node/no-unpublished-import: off
|
||||||
n/no-process-exit: off
|
|
||||||
# This forces using file extensions in imports, which is a best practice, but refactoring would take some time
|
|
||||||
n/no-missing-import: off
|
|
||||||
|
|
||||||
security/detect-non-literal-fs-filename: off
|
security/detect-non-literal-fs-filename: off
|
||||||
security/detect-object-injection: off
|
security/detect-object-injection: off
|
||||||
|
|
|
@ -63,6 +63,7 @@ COPY --chown=app:app server server
|
||||||
COPY --chown=app:app --from=builder /app/dist dist
|
COPY --chown=app:app --from=builder /app/dist dist
|
||||||
|
|
||||||
RUN npm ci --production && npm cache clean --force
|
RUN npm ci --production && npm cache clean --force
|
||||||
|
RUN mkdir -p /app/.config/configstore
|
||||||
RUN ln -s dist/version.json version.json
|
RUN ln -s dist/version.json version.json
|
||||||
|
|
||||||
ENV PORT=1443
|
ENV PORT=1443
|
||||||
|
|
|
@ -6,4 +6,4 @@ parserOptions:
|
||||||
sourceType: module
|
sourceType: module
|
||||||
|
|
||||||
rules:
|
rules:
|
||||||
n/no-unsupported-features: off
|
node/no-unsupported-features: off
|
||||||
|
|
|
@ -45,7 +45,13 @@ async function checkCrypto() {
|
||||||
);
|
);
|
||||||
return true;
|
return true;
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
return false;
|
try {
|
||||||
|
window.asmCrypto = await import('asmcrypto.js');
|
||||||
|
await import('@dannycoates/webcrypto-liner/build/shim');
|
||||||
|
return true;
|
||||||
|
} catch (e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -60,12 +66,25 @@ function checkStreams() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function polyfillStreams() {
|
||||||
|
try {
|
||||||
|
await import('@mattiasbuelens/web-streams-polyfill');
|
||||||
|
return true;
|
||||||
|
} catch (e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export default async function getCapabilities() {
|
export default async function getCapabilities() {
|
||||||
const browser = browserName();
|
const browser = browserName();
|
||||||
const isMobile = /mobi|android/i.test(navigator.userAgent);
|
const isMobile = /mobi|android/i.test(navigator.userAgent);
|
||||||
const serviceWorker = 'serviceWorker' in navigator && browser !== 'edge';
|
const serviceWorker = 'serviceWorker' in navigator && browser !== 'edge';
|
||||||
let crypto = await checkCrypto();
|
let crypto = await checkCrypto();
|
||||||
const nativeStreams = checkStreams();
|
const nativeStreams = checkStreams();
|
||||||
|
let polyStreams = false;
|
||||||
|
if (!nativeStreams) {
|
||||||
|
polyStreams = await polyfillStreams();
|
||||||
|
}
|
||||||
let account = typeof AUTH_CONFIG !== 'undefined';
|
let account = typeof AUTH_CONFIG !== 'undefined';
|
||||||
try {
|
try {
|
||||||
account = account && !!localStorage;
|
account = account && !!localStorage;
|
||||||
|
@ -87,10 +106,10 @@ export default async function getCapabilities() {
|
||||||
account,
|
account,
|
||||||
crypto,
|
crypto,
|
||||||
serviceWorker,
|
serviceWorker,
|
||||||
streamUpload: nativeStreams,
|
streamUpload: nativeStreams || polyStreams,
|
||||||
streamDownload:
|
streamDownload:
|
||||||
nativeStreams && serviceWorker && browser !== 'safari' && !mobileFirefox,
|
nativeStreams && serviceWorker && browser !== 'safari' && !mobileFirefox,
|
||||||
multifile: nativeStreams,
|
multifile: nativeStreams || polyStreams,
|
||||||
share,
|
share,
|
||||||
standalone
|
standalone
|
||||||
};
|
};
|
||||||
|
|
|
@ -48,7 +48,7 @@ class ECETransformer {
|
||||||
name: 'AES-GCM',
|
name: 'AES-GCM',
|
||||||
length: 128
|
length: 128
|
||||||
},
|
},
|
||||||
false,
|
true, // Edge polyfill requires key to be extractable to encrypt :/
|
||||||
['encrypt', 'decrypt']
|
['encrypt', 'decrypt']
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
/* global DEFAULTS LIMITS WEB_UI PREFS */
|
/* global DEFAULTS LIMITS WEB_UI PREFS */
|
||||||
import 'core-js';
|
import 'core-js';
|
||||||
|
import 'fast-text-encoding'; // MS Edge support
|
||||||
import 'intl-pluralrules';
|
import 'intl-pluralrules';
|
||||||
import choo from 'choo';
|
import choo from 'choo';
|
||||||
import nanotiming from 'nanotiming';
|
import nanotiming from 'nanotiming';
|
||||||
|
|
|
@ -110,7 +110,7 @@ class Storage {
|
||||||
}
|
}
|
||||||
|
|
||||||
set user(info) {
|
set user(info) {
|
||||||
this.engine.setItem('user', JSON.stringify(info));
|
return this.engine.setItem('user', JSON.stringify(info));
|
||||||
}
|
}
|
||||||
|
|
||||||
getFileById(id) {
|
getFileById(id) {
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
/* global TransformStream */
|
||||||
|
|
||||||
export function transformStream(readable, transformer, oncancel) {
|
export function transformStream(readable, transformer, oncancel) {
|
||||||
try {
|
try {
|
||||||
return readable.pipeThrough(new TransformStream(transformer));
|
return readable.pipeThrough(new TransformStream(transformer));
|
||||||
|
|
52
app/utils.js
52
app/utils.js
|
@ -23,34 +23,39 @@ function locale() {
|
||||||
return document.querySelector('html').lang;
|
return document.querySelector('html').lang;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function loadShim(polyfill) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
const shim = document.createElement('script');
|
||||||
|
shim.src = polyfill;
|
||||||
|
shim.addEventListener('load', () => resolve(true));
|
||||||
|
shim.addEventListener('error', () => resolve(false));
|
||||||
|
document.head.appendChild(shim);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
function isFile(id) {
|
function isFile(id) {
|
||||||
return /^[0-9a-fA-F]{10,16}$/.test(id);
|
return /^[0-9a-fA-F]{10,16}$/.test(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
async function copyToClipboard(str) {
|
function copyToClipboard(str) {
|
||||||
try {
|
const aux = document.createElement('input');
|
||||||
await navigator.clipboard.writeText(str);
|
aux.setAttribute('value', str);
|
||||||
} catch {
|
aux.contentEditable = true;
|
||||||
// Older browsers or the clipboard API fails because of a missing permission
|
aux.readOnly = true;
|
||||||
const aux = document.createElement('input');
|
document.body.appendChild(aux);
|
||||||
aux.setAttribute('value', str);
|
if (navigator.userAgent.match(/iphone|ipad|ipod/i)) {
|
||||||
aux.contentEditable = true;
|
const range = document.createRange();
|
||||||
aux.readOnly = true;
|
range.selectNodeContents(aux);
|
||||||
document.body.appendChild(aux);
|
const sel = getSelection();
|
||||||
if (navigator.userAgent.match(/iphone|ipad|ipod/i)) {
|
sel.removeAllRanges();
|
||||||
const range = document.createRange();
|
sel.addRange(range);
|
||||||
range.selectNodeContents(aux);
|
aux.setSelectionRange(0, str.length);
|
||||||
const sel = getSelection();
|
} else {
|
||||||
sel.removeAllRanges();
|
aux.select();
|
||||||
sel.addRange(range);
|
|
||||||
aux.setSelectionRange(0, str.length);
|
|
||||||
} else {
|
|
||||||
aux.select();
|
|
||||||
}
|
|
||||||
const result = document.execCommand('copy');
|
|
||||||
document.body.removeChild(aux);
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
const result = document.execCommand('copy');
|
||||||
|
document.body.removeChild(aux);
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
const LOCALIZE_NUMBERS = !!(
|
const LOCALIZE_NUMBERS = !!(
|
||||||
|
@ -282,6 +287,7 @@ module.exports = {
|
||||||
copyToClipboard,
|
copyToClipboard,
|
||||||
arrayToB64,
|
arrayToB64,
|
||||||
b64ToArray,
|
b64ToArray,
|
||||||
|
loadShim,
|
||||||
isFile,
|
isFile,
|
||||||
openLinksInNewTab,
|
openLinksInNewTab,
|
||||||
browserName,
|
browserName,
|
||||||
|
|
|
@ -3,7 +3,7 @@ const isServer = typeof genmap === 'function';
|
||||||
let prefix = '';
|
let prefix = '';
|
||||||
let manifest = {};
|
let manifest = {};
|
||||||
try {
|
try {
|
||||||
//eslint-disable-next-line n/no-missing-require
|
//eslint-disable-next-line node/no-missing-require
|
||||||
manifest = require('../dist/manifest.json');
|
manifest = require('../dist/manifest.json');
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
// use middleware
|
// use middleware
|
||||||
|
|
|
@ -6,6 +6,8 @@
|
||||||
- https://github.com/whatwg/streams/tree/master/reference-implementation
|
- https://github.com/whatwg/streams/tree/master/reference-implementation
|
||||||
- Examples
|
- Examples
|
||||||
- https://github.com/mdn/dom-examples/tree/master/streams
|
- https://github.com/mdn/dom-examples/tree/master/streams
|
||||||
|
- Polyfill
|
||||||
|
- https://github.com/MattiasBuelens/web-streams-polyfill
|
||||||
|
|
||||||
# Encrypted Content Encoding
|
# Encrypted Content Encoding
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* global window, document */
|
/* global window, document, fetch */
|
||||||
|
|
||||||
const MAXFILESIZE = 1024 * 1024 * 1024 * 2;
|
const MAXFILESIZE = 1024 * 1024 * 1024 * 2;
|
||||||
|
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
23
package.json
23
package.json
|
@ -66,10 +66,13 @@
|
||||||
"@babel/plugin-proposal-class-properties": "^7.16.7",
|
"@babel/plugin-proposal-class-properties": "^7.16.7",
|
||||||
"@babel/plugin-syntax-dynamic-import": "^7.2.0",
|
"@babel/plugin-syntax-dynamic-import": "^7.2.0",
|
||||||
"@babel/preset-env": "^7.16.11",
|
"@babel/preset-env": "^7.16.11",
|
||||||
|
"@dannycoates/webcrypto-liner": "^0.1.37",
|
||||||
"@fullhuman/postcss-purgecss": "^4.1.3",
|
"@fullhuman/postcss-purgecss": "^4.1.3",
|
||||||
|
"@mattiasbuelens/web-streams-polyfill": "0.2.1",
|
||||||
"@sentry/browser": "^5.30.0",
|
"@sentry/browser": "^5.30.0",
|
||||||
|
"asmcrypto.js": "^0.22.0",
|
||||||
"babel-loader": "^8.2.4",
|
"babel-loader": "^8.2.4",
|
||||||
"babel-plugin-istanbul": "^6.1.1",
|
"babel-plugin-istanbul": "^5.2.0",
|
||||||
"base64-js": "^1.5.1",
|
"base64-js": "^1.5.1",
|
||||||
"content-disposition": "^0.5.4",
|
"content-disposition": "^0.5.4",
|
||||||
"copy-webpack-plugin": "^6.4.0",
|
"copy-webpack-plugin": "^6.4.0",
|
||||||
|
@ -77,15 +80,20 @@
|
||||||
"crc": "^3.8.0",
|
"crc": "^3.8.0",
|
||||||
"cross-env": "^6.0.3",
|
"cross-env": "^6.0.3",
|
||||||
"css-loader": "^5.2.7",
|
"css-loader": "^5.2.7",
|
||||||
|
"css-mqpacker": "^7.0.0",
|
||||||
"cssnano": "^5.1.12",
|
"cssnano": "^5.1.12",
|
||||||
"eslint": "^8.21.0",
|
"eslint": "^6.6.0",
|
||||||
"eslint-config-prettier": "^8.5.0",
|
"eslint-config-prettier": "^6.15.0",
|
||||||
"eslint-plugin-mocha": "^10.1.0",
|
"eslint-plugin-mocha": "^6.2.1",
|
||||||
"eslint-plugin-n": "^15.2.4",
|
"eslint-plugin-node": "^10.0.0",
|
||||||
"eslint-plugin-security": "^1.5.0",
|
"eslint-plugin-security": "^1.4.0",
|
||||||
|
"expose-loader": "^0.7.5",
|
||||||
|
"extract-loader": "^3.2.0",
|
||||||
"extract-text-webpack-plugin": "^4.0.0-beta.0",
|
"extract-text-webpack-plugin": "^4.0.0-beta.0",
|
||||||
|
"fast-text-encoding": "^1.0.3",
|
||||||
"file-loader": "^6.2.0",
|
"file-loader": "^6.2.0",
|
||||||
"git-rev-sync": "^3.0.2",
|
"git-rev-sync": "^3.0.2",
|
||||||
|
"html-loader": "^0.5.5",
|
||||||
"http_ece": "^1.1.0",
|
"http_ece": "^1.1.0",
|
||||||
"husky": "^3.0.9",
|
"husky": "^3.0.9",
|
||||||
"intl-pluralrules": "^1.3.1",
|
"intl-pluralrules": "^1.3.1",
|
||||||
|
@ -105,6 +113,7 @@
|
||||||
"puppeteer": "^2.0.0",
|
"puppeteer": "^2.0.0",
|
||||||
"raw-loader": "^3.1.0",
|
"raw-loader": "^3.1.0",
|
||||||
"rimraf": "^3.0.0",
|
"rimraf": "^3.0.0",
|
||||||
|
"script-loader": "^0.7.2",
|
||||||
"sinon": "^7.5.0",
|
"sinon": "^7.5.0",
|
||||||
"string-hash": "^1.1.3",
|
"string-hash": "^1.1.3",
|
||||||
"stylelint": "^14.9.1",
|
"stylelint": "^14.9.1",
|
||||||
|
@ -131,8 +140,10 @@
|
||||||
"body-parser": "^1.20.0",
|
"body-parser": "^1.20.0",
|
||||||
"choo": "^7.0.0",
|
"choo": "^7.0.0",
|
||||||
"cldr-core": "^35.1.0",
|
"cldr-core": "^35.1.0",
|
||||||
|
"configstore": "github:dannycoates/configstore#master",
|
||||||
"convict": "^6.2.3",
|
"convict": "^6.2.3",
|
||||||
"convict-format-with-validator": "^6.2.0",
|
"convict-format-with-validator": "^6.2.0",
|
||||||
|
"double-ended-queue": "^2.1.0-0",
|
||||||
"express": "^4.17.3",
|
"express": "^4.17.3",
|
||||||
"helmet": "^3.23.3",
|
"helmet": "^3.23.3",
|
||||||
"mozlog": "^3.0.1",
|
"mozlog": "^3.0.1",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
rules:
|
rules:
|
||||||
n/shebang: off
|
node/shebang: off
|
||||||
security/detect-child-process: off
|
security/detect-child-process: off
|
||||||
|
|
||||||
no-console: off
|
no-console: off
|
||||||
|
|
|
@ -5,7 +5,7 @@ const clientConstants = require('./clientConstants');
|
||||||
|
|
||||||
let sentry = '';
|
let sentry = '';
|
||||||
if (config.sentry_id) {
|
if (config.sentry_id) {
|
||||||
//eslint-disable-next-line n/no-missing-require
|
//eslint-disable-next-line node/no-missing-require
|
||||||
const version = require('../dist/version.json');
|
const version = require('../dist/version.json');
|
||||||
sentry = `
|
sentry = `
|
||||||
var SENTRY_CONFIG = {
|
var SENTRY_CONFIG = {
|
||||||
|
|
|
@ -120,7 +120,7 @@ module.exports = function(app) {
|
||||||
);
|
);
|
||||||
app.post(`/api/info/:id${ID_REGEX}`, auth.owner, require('./info'));
|
app.post(`/api/info/:id${ID_REGEX}`, auth.owner, require('./info'));
|
||||||
app.get('/__version__', function(req, res) {
|
app.get('/__version__', function(req, res) {
|
||||||
// eslint-disable-next-line n/no-missing-require
|
// eslint-disable-next-line node/no-missing-require
|
||||||
res.sendFile(require.resolve('../../dist/version.json'));
|
res.sendFile(require.resolve('../../dist/version.json'));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -6,10 +6,10 @@ extends:
|
||||||
|
|
||||||
plugins:
|
plugins:
|
||||||
- mocha
|
- mocha
|
||||||
- n
|
- node
|
||||||
|
|
||||||
rules:
|
rules:
|
||||||
n/no-unpublished-require: off
|
node/no-unpublished-require: off
|
||||||
|
|
||||||
mocha/handle-done-callback: error
|
mocha/handle-done-callback: error
|
||||||
mocha/no-exclusive-tests: error
|
mocha/no-exclusive-tests: error
|
||||||
|
|
|
@ -5,4 +5,4 @@ parserOptions:
|
||||||
sourceType: module
|
sourceType: module
|
||||||
|
|
||||||
rules:
|
rules:
|
||||||
n/no-unsupported-features: off
|
node/no-unsupported-features: off
|
|
@ -9,7 +9,7 @@ module.exports = function() {
|
||||||
const files = fs
|
const files = fs
|
||||||
.readdirSync(path.join(__dirname, 'tests'))
|
.readdirSync(path.join(__dirname, 'tests'))
|
||||||
.filter(p => /\.js$/.test(p));
|
.filter(p => /\.js$/.test(p));
|
||||||
const code = files.map(kv).join(';\n');
|
const code = "require('fast-text-encoding');\n" + files.map(kv).join(';\n');
|
||||||
return {
|
return {
|
||||||
code,
|
code,
|
||||||
dependencies: files.map(f => require.resolve('./tests/' + f)),
|
dependencies: files.map(f => require.resolve('./tests/' + f)),
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
// eslint-disable-next-line n/no-extraneous-require
|
// eslint-disable-next-line node/no-extraneous-require
|
||||||
const ip = require('ip');
|
const ip = require('ip');
|
||||||
const common = require('./wdio.common.conf');
|
const common = require('./wdio.common.conf');
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
// eslint-disable-next-line n/no-extraneous-require
|
// eslint-disable-next-line node/no-extraneous-require
|
||||||
const ip = require('ip');
|
const ip = require('ip');
|
||||||
const common = require('./wdio.common.conf');
|
const common = require('./wdio.common.conf');
|
||||||
const dir =
|
const dir =
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
// eslint-disable-next-line n/no-extraneous-require
|
// eslint-disable-next-line node/no-extraneous-require
|
||||||
const ip = require('ip');
|
const ip = require('ip');
|
||||||
const common = require('./wdio.common.conf');
|
const common = require('./wdio.common.conf');
|
||||||
|
|
||||||
|
|
|
@ -111,6 +111,10 @@ const web = {
|
||||||
path.resolve(__dirname, 'common'),
|
path.resolve(__dirname, 'common'),
|
||||||
// some dependencies need to get re-babeled because we
|
// some dependencies need to get re-babeled because we
|
||||||
// have different targets than their default configs
|
// have different targets than their default configs
|
||||||
|
path.resolve(
|
||||||
|
__dirname,
|
||||||
|
'node_modules/@dannycoates/webcrypto-liner'
|
||||||
|
),
|
||||||
path.resolve(__dirname, 'node_modules/@fluent'),
|
path.resolve(__dirname, 'node_modules/@fluent'),
|
||||||
path.resolve(__dirname, 'node_modules/intl-pluralrules')
|
path.resolve(__dirname, 'node_modules/intl-pluralrules')
|
||||||
],
|
],
|
||||||
|
@ -123,7 +127,8 @@ const web = {
|
||||||
path.resolve(__dirname, 'node_modules/crc'),
|
path.resolve(__dirname, 'node_modules/crc'),
|
||||||
path.resolve(__dirname, 'node_modules/@fluent'),
|
path.resolve(__dirname, 'node_modules/@fluent'),
|
||||||
path.resolve(__dirname, 'node_modules/@sentry'),
|
path.resolve(__dirname, 'node_modules/@sentry'),
|
||||||
path.resolve(__dirname, 'node_modules/tslib')
|
path.resolve(__dirname, 'node_modules/tslib'),
|
||||||
|
path.resolve(__dirname, 'node_modules/webcrypto-core')
|
||||||
],
|
],
|
||||||
loader: 'webpack-unassert-loader'
|
loader: 'webpack-unassert-loader'
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue