This commit is contained in:
antelle 2021-05-23 08:25:01 +02:00
parent b46533d243
commit 02a505e2f9
No known key found for this signature in database
GPG Key ID: 63C9777AAB7C563C
11 changed files with 907 additions and 89 deletions

View File

@ -1,6 +1,12 @@
{ {
"presets": [], "presets": [
["@babel/typescript", { "jsxPragma": "h" }]
],
"plugins": [ "plugins": [
["@babel/transform-react-jsx", {
"runtime": "automatic",
"importSource": "preact"
}],
["@babel/plugin-proposal-class-properties", { "loose": true }], ["@babel/plugin-proposal-class-properties", { "loose": true }],
["@babel/plugin-proposal-object-rest-spread", { "loose": true, ["@babel/plugin-proposal-object-rest-spread", { "loose": true,
"useBuiltIns": true "useBuiltIns": true

View File

@ -1,7 +1,6 @@
/* eslint-env node */ /* eslint-env node */
const fs = require('fs-extra'); const fs = require('fs-extra');
const path = require('path');
const { execSync } = require('child_process'); const { execSync } = require('child_process');
const debug = require('debug'); const debug = require('debug');
@ -92,11 +91,6 @@ module.exports = function (grunt) {
desktop: ['tmp/desktop', 'dist/desktop'] desktop: ['tmp/desktop', 'dist/desktop']
}, },
copy: { copy: {
html: {
src: 'app/index.html',
dest: 'tmp/index.html',
nonull: true
},
'content-dist': { 'content-dist': {
cwd: 'app/content/', cwd: 'app/content/',
src: '**', src: '**',
@ -104,13 +98,6 @@ module.exports = function (grunt) {
expand: true, expand: true,
nonull: true nonull: true
}, },
icons: {
cwd: 'app/icons/',
src: ['*.png', '*.svg'],
dest: 'tmp/icons/',
expand: true,
nonull: true
},
'dist-icons': { 'dist-icons': {
cwd: 'app/icons/', cwd: 'app/icons/',
src: ['*.png', '*.svg'], src: ['*.png', '*.svg'],
@ -118,13 +105,6 @@ module.exports = function (grunt) {
expand: true, expand: true,
nonull: true nonull: true
}, },
manifest: {
cwd: 'app/manifest/',
src: ['*.json', '*.xml'],
dest: 'tmp/',
expand: true,
nonull: true
},
'dist-manifest': { 'dist-manifest': {
cwd: 'app/manifest/', cwd: 'app/manifest/',
src: ['*.json', '*.xml'], src: ['*.json', '*.xml'],
@ -340,25 +320,6 @@ module.exports = function (grunt) {
webpack: { webpack: {
app: webpackConfig.config(webpackOptions) app: webpackConfig.config(webpackOptions)
}, },
'webpack-dev-server': {
options: {
webpack: webpackConfig.config({
...webpackOptions,
mode: 'development',
sha: 'dev'
}),
publicPath: '/',
contentBase: [
path.resolve(__dirname, 'tmp'),
path.resolve(__dirname, 'app/content')
],
progress: false
},
js: {
keepalive: true,
port: 8085
}
},
electron: { electron: {
options: { options: {
name: 'KeeWeb', name: 'KeeWeb',

View File

@ -1,3 +1,7 @@
/* eslint-disable import/first */
if (process.env.NODE_ENV === 'development') {
require('preact/debug');
}
import { h, render } from 'preact'; import { h, render } from 'preact';
import { App } from 'ui/app'; import { App } from 'ui/app';
import { Events } from 'util/events'; import { Events } from 'util/events';
@ -21,6 +25,7 @@ import { Logger } from 'util/logger';
import { FeatureTester } from 'util/browser/feature-tester'; import { FeatureTester } from 'util/browser/feature-tester';
import { UsbListener } from 'comp/devices/usb-listener'; import { UsbListener } from 'comp/devices/usb-listener';
import { noop } from 'util/fn'; import { noop } from 'util/fn';
/* eslint-enable */
declare global { declare global {
interface Window { interface Window {

View File

@ -1,4 +1,3 @@
import 'preact/debug';
import { h, FunctionComponent } from 'preact'; import { h, FunctionComponent } from 'preact';
import { AppView } from 'views/app-view'; import { AppView } from 'views/app-view';

View File

@ -0,0 +1,7 @@
const webpackConfig = require('./webpack.config');
module.exports = webpackConfig.config({
date: new Date(),
mode: 'development',
sha: 'dev'
});

View File

@ -6,6 +6,7 @@ const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPl
const MiniCssExtractPlugin = require('mini-css-extract-plugin'); const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin'); const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin');
const TerserPlugin = require('terser-webpack-plugin'); const TerserPlugin = require('terser-webpack-plugin');
const CopyPlugin = require('copy-webpack-plugin');
const rootDir = path.join(__dirname, '..'); const rootDir = path.join(__dirname, '..');
@ -37,8 +38,6 @@ function config(options) {
modules: true, modules: true,
reasons: true reasons: true
}, },
progress: false,
failOnError: true,
resolve: { resolve: {
modules: [ modules: [
path.join(rootDir, 'app/scripts'), path.join(rootDir, 'app/scripts'),
@ -125,16 +124,11 @@ function config(options) {
options: { type: 'module', exports: 'default babelHelpers' } options: { type: 'module', exports: 'default babelHelpers' }
}, },
{ {
test: /\.js$/, test: /\.(js|tsx|ts)$/,
exclude: /(node_modules|babel-helpers\.js)/, exclude: /(node_modules|babel-helpers\.js)/,
loader: 'babel-loader', loader: 'babel-loader',
options: { cacheDirectory: true } options: { cacheDirectory: true }
}, },
{
test: /\.tsx?$/,
use: 'ts-loader',
exclude: /node_modules/
},
{ test: /argon2\.wasm/, type: 'javascript/auto', loader: 'base64-loader' }, { test: /argon2\.wasm/, type: 'javascript/auto', loader: 'base64-loader' },
{ test: /argon2(\.min)?\.js/, loader: 'raw-loader' }, { test: /argon2(\.min)?\.js/, loader: 'raw-loader' },
{ {
@ -177,6 +171,14 @@ function config(options) {
] ]
}, },
plugins: [ plugins: [
new CopyPlugin({
patterns: [
{ from: 'app/index.html', to: 'index.html' },
{ from: 'app/icons', to: 'icons' },
{ from: 'app/manifest/manifest.json', to: 'manifest.json' },
{ from: 'app/manifest/browserconfig.xml', to: 'browserconfig.xml' }
]
}),
new webpack.BannerPlugin( new webpack.BannerPlugin(
'keeweb v' + 'keeweb v' +
pkg.version + pkg.version +

View File

@ -5,15 +5,6 @@ module.exports = function(grunt) {
'build-web-app' 'build-web-app'
]); ]);
grunt.registerTask('dev', 'Build project and start web server and watcher', [
'build-web-app',
'devsrv'
]);
grunt.registerTask('devsrv', 'Start web server and watcher', [
'webpack-dev-server'
]);
grunt.registerTask('desktop', 'Build web and desktop apps for all platforms', [ grunt.registerTask('desktop', 'Build web and desktop apps for all platforms', [
'default', 'default',
'build-desktop' 'build-desktop'

View File

@ -4,9 +4,6 @@ module.exports = function (grunt) {
grunt.registerTask('build-web-app', [ grunt.registerTask('build-web-app', [
'clean', 'clean',
'eslint', 'eslint',
'copy:html',
'copy:icons',
'copy:manifest',
'webpack:app', 'webpack:app',
'inline', 'inline',
'htmlmin', 'htmlmin',

896
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -14,7 +14,9 @@
"@babel/plugin-external-helpers": "^7.12.13", "@babel/plugin-external-helpers": "^7.12.13",
"@babel/plugin-proposal-class-properties": "^7.13.0", "@babel/plugin-proposal-class-properties": "^7.13.0",
"@babel/plugin-proposal-optional-chaining": "^7.14.2", "@babel/plugin-proposal-optional-chaining": "^7.14.2",
"@babel/plugin-transform-react-jsx": "^7.14.3",
"@babel/preset-env": "^7.14.2", "@babel/preset-env": "^7.14.2",
"@babel/preset-typescript": "^7.13.0",
"@fortawesome/fontawesome-free": "^5.15.3", "@fortawesome/fontawesome-free": "^5.15.3",
"@keeweb/keeweb-native-messaging-host": "https://github.com/keeweb/keeweb-connect/releases/download/0.3.5/keeweb-native-messaging-host.tgz", "@keeweb/keeweb-native-messaging-host": "https://github.com/keeweb/keeweb-connect/releases/download/0.3.5/keeweb-native-messaging-host.tgz",
"@keeweb/keeweb-native-modules": "https://github.com/keeweb/keeweb-native-modules/releases/download/0.11.6/keeweb-native-modules.tgz", "@keeweb/keeweb-native-modules": "https://github.com/keeweb/keeweb-native-modules/releases/download/0.11.6/keeweb-native-modules.tgz",
@ -37,6 +39,7 @@
"base64-loader": "1.0.0", "base64-loader": "1.0.0",
"bourbon": "^7.0.0", "bourbon": "^7.0.0",
"chai": "^4.3.4", "chai": "^4.3.4",
"copy-webpack-plugin": "^9.0.0",
"cross-env": "^7.0.3", "cross-env": "^7.0.3",
"css-loader": "^5.2.4", "css-loader": "^5.2.4",
"dompurify": "^2.2.8", "dompurify": "^2.2.8",
@ -113,6 +116,7 @@
"wawoff2": "^2.0.0", "wawoff2": "^2.0.0",
"webpack": "^5.37.0", "webpack": "^5.37.0",
"webpack-bundle-analyzer": "^4.4.1", "webpack-bundle-analyzer": "^4.4.1",
"webpack-cli": "^4.7.0",
"webpack-dev-server": "^3.11.2" "webpack-dev-server": "^3.11.2"
}, },
"optionalDependencies": { "optionalDependencies": {
@ -125,7 +129,7 @@
"eslint": "grunt eslint", "eslint": "grunt eslint",
"build-beta": "grunt --beta && cp dist/index.html ../keeweb-beta/index.html && cd ../keeweb-beta && git add index.html && git commit -a -m 'beta' && git push origin master", "build-beta": "grunt --beta && cp dist/index.html ../keeweb-beta/index.html && cd ../keeweb-beta && git add index.html && git commit -a -m 'beta' && git push origin master",
"electron": "cross-env KEEWEB_IS_PORTABLE=0 ELECTRON_DISABLE_SECURITY_WARNINGS=1 KEEWEB_EMULATE_HARDWARE_ENCRYPTION=persistent KEEWEB_HTML_PATH=http://localhost:8085 electron desktop --no-sandbox", "electron": "cross-env KEEWEB_IS_PORTABLE=0 ELECTRON_DISABLE_SECURITY_WARNINGS=1 KEEWEB_EMULATE_HARDWARE_ENCRYPTION=persistent KEEWEB_HTML_PATH=http://localhost:8085 electron desktop --no-sandbox",
"dev": "grunt dev", "dev": "webpack serve --config build/webpack.config.dev.js --port 8085 --content-base tmp --content-base app/content",
"dev-desktop-macos": "grunt dev-desktop-darwin --skip-sign", "dev-desktop-macos": "grunt dev-desktop-darwin --skip-sign",
"dev-desktop-macos-signed": "grunt dev-desktop-darwin-signed", "dev-desktop-macos-signed": "grunt dev-desktop-darwin-signed",
"dev-desktop-windows": "grunt dev-desktop-win32 --skip-sign", "dev-desktop-windows": "grunt dev-desktop-win32 --skip-sign",

View File

@ -5,8 +5,10 @@
"preserveConstEnums": true, "preserveConstEnums": true,
"sourceMap": true, "sourceMap": true,
"strict": true, "strict": true,
"jsx": "react-jsx", "jsx": "preserve",
"jsxImportSource": "preact", "jsxImportSource": "preact",
"jsxFactory": "h",
"jsxFragmentFactory": "Fragment",
"baseUrl": "app/scripts", "baseUrl": "app/scripts",
"noEmitOnError": true, "noEmitOnError": true,
"esModuleInterop": true "esModuleInterop": true