feat: initial
This commit is contained in:
commit
23635f7e32
15
.babelrc
Normal file
15
.babelrc
Normal file
@ -0,0 +1,15 @@
|
||||
{
|
||||
"presets": [[
|
||||
"@babel/preset-env",
|
||||
{
|
||||
"useBuiltIns": "entry",
|
||||
"targets": {
|
||||
"esmodules": true
|
||||
}
|
||||
}
|
||||
]],
|
||||
"plugins": [
|
||||
"@babel/plugin-syntax-dynamic-import",
|
||||
"@babel/plugin-proposal-object-rest-spread"
|
||||
]
|
||||
}
|
4
.eslintignore
Normal file
4
.eslintignore
Normal file
@ -0,0 +1,4 @@
|
||||
/public/bundle.js
|
||||
/public/index.html
|
||||
/npm
|
||||
/cdn
|
61
.eslintrc.js
Normal file
61
.eslintrc.js
Normal file
@ -0,0 +1,61 @@
|
||||
module.exports = {
|
||||
"env": {
|
||||
"browser": true,
|
||||
"es6": true,
|
||||
"node": true,
|
||||
"commonjs": true
|
||||
},
|
||||
"parserOptions": {
|
||||
"parser": "babel-eslint",
|
||||
"ecmaVersion": 2018,
|
||||
"ecmaFeatures": {
|
||||
"arrowFunctions": true,
|
||||
"classes": true,
|
||||
"modules": true,
|
||||
"defaultParams": true,
|
||||
"experimentalObjectRestSpread": true
|
||||
},
|
||||
"sourceType": "module",
|
||||
"parserOptions": {
|
||||
"allowImportExportEverywhere": true
|
||||
}
|
||||
},
|
||||
"globals": {
|
||||
"window": true,
|
||||
},
|
||||
"rules": {
|
||||
"no-extend-native": 0,
|
||||
"no-new": 0,
|
||||
"no-useless-escape": 0,
|
||||
"no-useless-constructor": 0,
|
||||
"no-trailing-spaces": ["error", { "skipBlankLines": true }],
|
||||
"indent": ["error", 4, {
|
||||
"SwitchCase": 1
|
||||
}],
|
||||
"space-infix-ops": ["error", {"int32Hint": false}],
|
||||
"space-before-function-paren": ["error", {
|
||||
"anonymous": "always",
|
||||
"named": "always",
|
||||
"asyncArrow": "always"
|
||||
}],
|
||||
"semi": ["error", "always"],
|
||||
"comma-dangle": 0,
|
||||
"no-console": 0,
|
||||
"no-debugger": 0,
|
||||
"id-length": 0,
|
||||
"eol-last": 0,
|
||||
"object-curly-spacing": ["error", "never"],
|
||||
"arrow-spacing": "error",
|
||||
"no-multiple-empty-lines": "error",
|
||||
"no-unused-vars": "error",
|
||||
"spaced-comment": "error",
|
||||
"quotes": ["error", "single", { "allowTemplateLiterals": true }],
|
||||
"no-unreachable": "error",
|
||||
"keyword-spacing": "error",
|
||||
"space-before-blocks": "error",
|
||||
"semi-spacing": "error",
|
||||
"comma-spacing": "error",
|
||||
"key-spacing": "error",
|
||||
"no-undef": "error"
|
||||
}
|
||||
}
|
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
/node_modules
|
29
.vscode/settings.json
vendored
Normal file
29
.vscode/settings.json
vendored
Normal file
@ -0,0 +1,29 @@
|
||||
{
|
||||
"editor.formatOnSave": false, // 每次保存的时候将代码按eslint格式进行修复
|
||||
"eslint.validate": [
|
||||
//开启对.vue文件中错误的检查
|
||||
"javascript",
|
||||
"javascriptreact",
|
||||
"html",
|
||||
"vue",
|
||||
{
|
||||
"language": "html",
|
||||
"autoFix": true
|
||||
},
|
||||
{
|
||||
"language": "vue",
|
||||
"autoFix": true
|
||||
}
|
||||
],
|
||||
"search.exclude": {
|
||||
"**/node_modules": true,
|
||||
"**/cdn": true,
|
||||
"**/npm": true
|
||||
},
|
||||
"eslint.autoFixOnSave": true,
|
||||
"typescript.validate.enable": true,
|
||||
"editor.codeActionsOnSave": {
|
||||
"source.fixAll.eslint": true
|
||||
}
|
||||
}
|
||||
|
21
LICENSE
Normal file
21
LICENSE
Normal file
@ -0,0 +1,21 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2019 - present
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
0
README.cn.md
Normal file
0
README.cn.md
Normal file
63
README.md
Normal file
63
README.md
Normal file
@ -0,0 +1,63 @@
|
||||
### This is a project build with [EBuild-Cli](https://github.com/theajack/ebuild-cli)
|
||||
|
||||
### Install dependencies
|
||||
|
||||
```
|
||||
npm install
|
||||
```
|
||||
|
||||
use taobao repository
|
||||
|
||||
```
|
||||
npm install --registry https://registry.npm.taobao.org
|
||||
```
|
||||
|
||||
### Init git repository
|
||||
|
||||
```
|
||||
git init
|
||||
git add README.md
|
||||
git commit -m "first commit"
|
||||
git remote add origin {Your remote git repository address}
|
||||
git push -u origin master
|
||||
```
|
||||
|
||||
### Commond
|
||||
|
||||
```
|
||||
npm run dev
|
||||
npm run build
|
||||
npm run publish
|
||||
npm run lint
|
||||
```
|
||||
|
||||
### ebuild.config.js
|
||||
|
||||
```js
|
||||
module.exports = {
|
||||
'tranToEs5InNpm': true, // wether use babel
|
||||
'packageFiles': [
|
||||
'./package.json'
|
||||
// config which package.json files need to modify version
|
||||
// '../npm/package.json', // this is an example
|
||||
],
|
||||
'versioJsEs6Module': true, // use es6(export default) or require(module.exports=)
|
||||
'versioJsFiles': [
|
||||
// config which version.js files need to modify version
|
||||
// '../npm/version.js', // this is an example
|
||||
],
|
||||
'name': '',
|
||||
'version': '0.0.1',
|
||||
'npmExternals': {
|
||||
// example
|
||||
// 'md5': 'md5'
|
||||
},
|
||||
'npmPaths': [
|
||||
'npm'
|
||||
]
|
||||
};
|
||||
```
|
||||
|
||||
### Vscode plugin
|
||||
|
||||
Install 'ESLint' plugin
|
10
commitlint.config.js
Normal file
10
commitlint.config.js
Normal file
@ -0,0 +1,10 @@
|
||||
module.exports = {
|
||||
extends: ['@commitlint/config-conventional'],
|
||||
rules: {
|
||||
'type-enum': [2, 'always', [
|
||||
'feat', 'fix', 'docs', 'style', 'refactor', 'perf', 'test', 'build', 'ci', 'chore', 'revert'
|
||||
]],
|
||||
'subject-full-stop': [0, 'never'],
|
||||
'subject-case': [0, 'never']
|
||||
}
|
||||
};
|
30
helper/copy-to-npm.js
Normal file
30
helper/copy-to-npm.js
Normal file
@ -0,0 +1,30 @@
|
||||
const gulp = require('gulp');
|
||||
|
||||
const pkg = require('../package.json');
|
||||
const util = require('./util');
|
||||
|
||||
|
||||
function main () {
|
||||
copyPkg();
|
||||
copyFiles();
|
||||
}
|
||||
|
||||
function copyPkg () {
|
||||
let npmPkg = util.pick({
|
||||
target: pkg,
|
||||
attrs: [
|
||||
'name', 'version', 'description', 'main', 'scripts', 'unpkg', 'jsdelivr',
|
||||
'typings', 'repository', 'keywords', 'author', 'license', 'bugs', 'homepage'
|
||||
]
|
||||
});
|
||||
util.write('npm/package.json', JSON.stringify(npmPkg, null, 4));
|
||||
}
|
||||
|
||||
function copyFiles () {
|
||||
gulp.src(['README.md', 'README.cn.md', 'LICENSE', 'src/index.d.ts'], {
|
||||
allowEmpty: true
|
||||
})
|
||||
.pipe(gulp.dest('npm'));
|
||||
}
|
||||
|
||||
main();
|
21
helper/util.js
Normal file
21
helper/util.js
Normal file
@ -0,0 +1,21 @@
|
||||
let fs = require('fs');
|
||||
|
||||
module.exports = {
|
||||
write: function (file, txt, cb) {
|
||||
fs.writeFile(file, txt, 'utf8', (err) => {
|
||||
if (err) throw err;
|
||||
if (cb)cb();
|
||||
});
|
||||
},
|
||||
|
||||
pick: function ({data = {}, target, attrs}) {
|
||||
if (!attrs) {
|
||||
attrs = Object.keys(target);
|
||||
}
|
||||
attrs.forEach(name => {
|
||||
if (typeof target[name] !== 'undefined')
|
||||
data[name] = target[name];
|
||||
});
|
||||
return data;
|
||||
}
|
||||
};
|
21
npm/LICENSE
Normal file
21
npm/LICENSE
Normal file
@ -0,0 +1,21 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2019 - present
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
0
npm/README.cn.md
Normal file
0
npm/README.cn.md
Normal file
67
npm/README.md
Normal file
67
npm/README.md
Normal file
@ -0,0 +1,67 @@
|
||||
### This is a project build with [EBuild-Cli](https://github.com/theajack/ebuild-cli)
|
||||
|
||||
### Install dependencies
|
||||
|
||||
```
|
||||
npm install
|
||||
```
|
||||
|
||||
use taobao repository
|
||||
|
||||
```
|
||||
npm install --registry https://registry.npm.taobao.org
|
||||
```
|
||||
|
||||
### Init git repository
|
||||
|
||||
```
|
||||
git init
|
||||
git add README.md
|
||||
git commit -m "first commit"
|
||||
git remote add origin {Your remote git repository address}
|
||||
git push -u origin master
|
||||
```
|
||||
|
||||
### Commond
|
||||
|
||||
```
|
||||
npm run dev
|
||||
npm run build
|
||||
npm run build:npm
|
||||
npm run publish
|
||||
npm run lint
|
||||
npm run copy-latest
|
||||
npm run modify-version
|
||||
npm run copy-npm
|
||||
```
|
||||
|
||||
### ebuild.config.js
|
||||
|
||||
```js
|
||||
module.exports = {
|
||||
'tranToEs5InNpm': true, // wether use babel
|
||||
'packageFiles': [
|
||||
'./package.json'
|
||||
// config which package.json files need to modify version
|
||||
// '../npm/package.json', // this is an example
|
||||
],
|
||||
'versioJsEs6Module': true, // use es6(export default) or require(module.exports=)
|
||||
'versioJsFiles': [
|
||||
// config which version.js files need to modify version
|
||||
// '../npm/version.js', // this is an example
|
||||
],
|
||||
'name': '',
|
||||
'version': '0.0.1',
|
||||
'npmExternals': {
|
||||
// example
|
||||
// 'md5': 'md5'
|
||||
},
|
||||
'npmPaths': [
|
||||
'npm'
|
||||
]
|
||||
};
|
||||
```
|
||||
|
||||
### Vscode plugin
|
||||
|
||||
Install 'ESLint' plugin
|
1
npm/ebuild.min.js
vendored
Normal file
1
npm/ebuild.min.js
vendored
Normal file
@ -0,0 +1 @@
|
||||
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("ebuild",[],t):"object"==typeof exports?exports.ebuild=t():e.ebuild=t()}(this,(function(){return function(e){var t={};function o(n){if(t[n])return t[n].exports;var r=t[n]={i:n,l:!1,exports:{}};return e[n].call(r.exports,r,r.exports,o),r.l=!0,r.exports}return o.m=e,o.c=t,o.d=function(e,t,n){o.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},o.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},o.t=function(e,t){if(1&t&&(e=o(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(o.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)o.d(n,r,function(t){return e[t]}.bind(null,r));return n},o.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(t,"a",t),t},o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},o.p="",o(o.s=0)}([function(e,t){console.log("Hello world!"),alert("Hello world!")}])}));
|
0
npm/index.d.ts
vendored
Normal file
0
npm/index.d.ts
vendored
Normal file
28
npm/package.json
Normal file
28
npm/package.json
Normal file
@ -0,0 +1,28 @@
|
||||
{
|
||||
"name": "disable-devtool",
|
||||
"version": "0.0.1",
|
||||
"description": "Ebuild project",
|
||||
"main": "ebuild.min.js",
|
||||
"scripts": {
|
||||
"build": "webpack --config webpack-config/build.js",
|
||||
"publish": "npm publish npm",
|
||||
"dev": "webpack-dev-server --open --config webpack-config/dev.js",
|
||||
"lint": "eslint src --ext js"
|
||||
},
|
||||
"unpkg": "ebuild.min.js",
|
||||
"jsdelivr": "ebuild.min.js",
|
||||
"typings": "index.d.ts",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/theajack/ebuild-cli"
|
||||
},
|
||||
"keywords": [
|
||||
"ebuild-cli"
|
||||
],
|
||||
"author": "theajack",
|
||||
"license": "MIT",
|
||||
"bugs": {
|
||||
"url": ""
|
||||
},
|
||||
"homepage": ""
|
||||
}
|
60
package.json
Normal file
60
package.json
Normal file
@ -0,0 +1,60 @@
|
||||
{
|
||||
"name": "disable-devtool",
|
||||
"version": "0.0.1",
|
||||
"description": "Ebuild project",
|
||||
"main": "ebuild.min.js",
|
||||
"unpkg": "ebuild.min.js",
|
||||
"jsdelivr": "ebuild.min.js",
|
||||
"typings": "index.d.ts",
|
||||
"bugs": {
|
||||
"url": ""
|
||||
},
|
||||
"homepage": "",
|
||||
"scripts": {
|
||||
"dev": "webpack-dev-server --open --config webpack-config/dev.js",
|
||||
"start": "npm run dev",
|
||||
"build": "webpack --config webpack-config/build.js",
|
||||
"publish": "npm publish npm",
|
||||
"lint": "eslint src --ext js"
|
||||
},
|
||||
"author": "theajack",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/theajack/ebuild-cli"
|
||||
},
|
||||
"keywords": [
|
||||
"ebuild-cli"
|
||||
],
|
||||
"license": "MIT",
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.6.4",
|
||||
"@babel/plugin-proposal-object-rest-spread": "^7.6.2",
|
||||
"@babel/plugin-syntax-dynamic-import": "^7.2.0",
|
||||
"@babel/preset-env": "^7.6.3",
|
||||
"@commitlint/cli": "^8.2.0",
|
||||
"@commitlint/config-conventional": "^8.2.0",
|
||||
"babel-eslint": "^10.0.3",
|
||||
"babel-loader": "^8.0.6",
|
||||
"babel-plugin-transform-object-rest-spread": "^6.26.0",
|
||||
"eslint": "^6.5.1",
|
||||
"eslint-config-standard": "^14.1.0",
|
||||
"eslint-loader": "^3.0.2",
|
||||
"eslint-plugin-import": "^2.18.2",
|
||||
"eslint-plugin-node": "^10.0.0",
|
||||
"eslint-plugin-promise": "^4.2.1",
|
||||
"gulp": "^4.0.2",
|
||||
"gulp-babel": "^8.0.0",
|
||||
"gulp-rename": "^2.0.0",
|
||||
"husky": "^3.0.9",
|
||||
"lint-staged": "^9.4.2",
|
||||
"webpack": "^4.41.2",
|
||||
"webpack-cli": "^3.3.9",
|
||||
"webpack-dev-server": "^3.8.2"
|
||||
},
|
||||
"dependencies": {},
|
||||
"husky": {
|
||||
"hooks": {
|
||||
"commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
|
||||
}
|
||||
}
|
||||
}
|
0
public/bundle.js
Normal file
0
public/bundle.js
Normal file
12
public/index.html
Normal file
12
public/index.html
Normal file
@ -0,0 +1,12 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta http-equiv="X-UA-Compatible" content="ie=edge">
|
||||
<title>A project build with EBuild-Cli</title>
|
||||
</head>
|
||||
<body>
|
||||
<script src="./bundle.js"></script>
|
||||
</body>
|
||||
</html>
|
3
public/main.js
Normal file
3
public/main.js
Normal file
@ -0,0 +1,3 @@
|
||||
import {disableDevtool} from '../src';
|
||||
|
||||
disableDevtool();
|
16
src/config.js
Normal file
16
src/config.js
Normal file
@ -0,0 +1,16 @@
|
||||
import {closeWindow} from './util';
|
||||
|
||||
export let config = {
|
||||
md5: '',
|
||||
ondevtoolopen: closeWindow,
|
||||
homeUrl: 'http://localhost',
|
||||
tkName: 'ddtk',
|
||||
};
|
||||
|
||||
export function mergeConfig (opts = {}) {
|
||||
for (let k in config) {
|
||||
if (opts[k] && typeof config[k] === typeof opts[k]) {
|
||||
config[k] = opts[k];
|
||||
}
|
||||
}
|
||||
}
|
0
src/index.d.ts
vendored
Normal file
0
src/index.d.ts
vendored
Normal file
65
src/index.js
Normal file
65
src/index.js
Normal file
@ -0,0 +1,65 @@
|
||||
import {disableKeyAndMenu} from './key-menu';
|
||||
import {initInterval, registInterval} from './interval';
|
||||
import {closeWindow, getNowTime, getUrlParam} from './util';
|
||||
import {mergeConfig, config} from './config';
|
||||
import md5 from './md5';
|
||||
|
||||
let _onDevToolOpen = closeWindow;
|
||||
|
||||
export function disableDevtool (opts) {
|
||||
mergeConfig(opts);
|
||||
if (checkTk()) {
|
||||
return;
|
||||
}
|
||||
initInterval();
|
||||
disableKeyAndMenu();
|
||||
initDebugger();
|
||||
initDevTool();
|
||||
}
|
||||
|
||||
export function onDevToolOpen () {
|
||||
_onDevToolOpen();
|
||||
}
|
||||
|
||||
function checkTk () {
|
||||
if (config.md5) { // 启用了 md5
|
||||
let tk = getUrlParam(config.tkName);
|
||||
if (md5(tk) === config.md5) { // 命中tk
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function initDebugger () {
|
||||
let last = getNowTime();
|
||||
registInterval(() => {
|
||||
eval('debugger');
|
||||
let now = getNowTime();
|
||||
if (now - last > 1200) {
|
||||
onDevToolOpen();
|
||||
} else {
|
||||
last = now;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function initDevTool () {
|
||||
const isFF = ~navigator.userAgent.indexOf('Firefox');
|
||||
let toTest = '';
|
||||
if (isFF) {
|
||||
toTest = /./;
|
||||
toTest.toString = function () {
|
||||
onDevToolOpen();
|
||||
};
|
||||
} else {
|
||||
toTest = new Image();
|
||||
toTest.__defineGetter__('id', function () {
|
||||
onDevToolOpen();
|
||||
});
|
||||
}
|
||||
registInterval(() => {
|
||||
console.log(toTest);
|
||||
console.clear && console.clear();
|
||||
});
|
||||
}
|
16
src/interval.js
Normal file
16
src/interval.js
Normal file
@ -0,0 +1,16 @@
|
||||
let interval = null;
|
||||
let calls = [];
|
||||
|
||||
export function initInterval (time = 1000) {
|
||||
interval = window.setInterval(() => {
|
||||
calls.forEach(fn => {fn();});
|
||||
}, time);
|
||||
}
|
||||
|
||||
export function registInterval (fn) {
|
||||
calls.push(fn);
|
||||
}
|
||||
|
||||
export function clearInterval () {
|
||||
window.clearInterval(interval);
|
||||
}
|
12
src/key-menu.js
Normal file
12
src/key-menu.js
Normal file
@ -0,0 +1,12 @@
|
||||
export function disableKeyAndMenu () {
|
||||
window.addEventListener('keydown', (e) => {
|
||||
if (e.keyCode === 123 || (e.shiftKey && e.ctrlKey && e.keyCode === 73)) {
|
||||
e.returnValue = false;
|
||||
return false;
|
||||
}
|
||||
});
|
||||
window.addEventListener('contextmenu', (e) => {
|
||||
e.returnValue = false;
|
||||
return false;
|
||||
});
|
||||
}
|
198
src/md5.js
Normal file
198
src/md5.js
Normal file
@ -0,0 +1,198 @@
|
||||
/*
|
||||
* Configurable variables. You may need to tweak these to be compatible with
|
||||
* the server-side, but the defaults work in most cases.
|
||||
*/
|
||||
var hexcase = 0; /* hex output format. 0 - lowercase; 1 - uppercase */
|
||||
var chrsz = 8; /* bits per input character. 8 - ASCII; 16 - Unicode */
|
||||
|
||||
|
||||
/*
|
||||
* These are the functions you'll usually want to call
|
||||
* They take string arguments and return either hex or base-64 encoded strings
|
||||
*/
|
||||
function hex_md5 (s) { return binl2hex(core_md5(str2binl(s), s.length * chrsz));}
|
||||
|
||||
/*
|
||||
* Calculate the MD5 of an array of little-endian words, and a bit length
|
||||
*/
|
||||
function core_md5 (x, len)
|
||||
{
|
||||
/* append padding */
|
||||
x[len >> 5] |= 0x80 << ((len) % 32);
|
||||
x[(((len + 64) >>> 9) << 4) + 14] = len;
|
||||
|
||||
|
||||
var a = 1732584193;
|
||||
var b = -271733879;
|
||||
var c = -1732584194;
|
||||
var d = 271733878;
|
||||
|
||||
|
||||
for (var i = 0; i < x.length; i += 16)
|
||||
{
|
||||
var olda = a;
|
||||
var oldb = b;
|
||||
var oldc = c;
|
||||
var oldd = d;
|
||||
|
||||
|
||||
a = md5_ff(a, b, c, d, x[i + 0], 7, -680876936);
|
||||
d = md5_ff(d, a, b, c, x[i + 1], 12, -389564586);
|
||||
c = md5_ff(c, d, a, b, x[i + 2], 17, 606105819);
|
||||
b = md5_ff(b, c, d, a, x[i + 3], 22, -1044525330);
|
||||
a = md5_ff(a, b, c, d, x[i + 4], 7, -176418897);
|
||||
d = md5_ff(d, a, b, c, x[i + 5], 12, 1200080426);
|
||||
c = md5_ff(c, d, a, b, x[i + 6], 17, -1473231341);
|
||||
b = md5_ff(b, c, d, a, x[i + 7], 22, -45705983);
|
||||
a = md5_ff(a, b, c, d, x[i + 8], 7, 1770035416);
|
||||
d = md5_ff(d, a, b, c, x[i + 9], 12, -1958414417);
|
||||
c = md5_ff(c, d, a, b, x[i + 10], 17, -42063);
|
||||
b = md5_ff(b, c, d, a, x[i + 11], 22, -1990404162);
|
||||
a = md5_ff(a, b, c, d, x[i + 12], 7, 1804603682);
|
||||
d = md5_ff(d, a, b, c, x[i + 13], 12, -40341101);
|
||||
c = md5_ff(c, d, a, b, x[i + 14], 17, -1502002290);
|
||||
b = md5_ff(b, c, d, a, x[i + 15], 22, 1236535329);
|
||||
|
||||
|
||||
a = md5_gg(a, b, c, d, x[i + 1], 5, -165796510);
|
||||
d = md5_gg(d, a, b, c, x[i + 6], 9, -1069501632);
|
||||
c = md5_gg(c, d, a, b, x[i + 11], 14, 643717713);
|
||||
b = md5_gg(b, c, d, a, x[i + 0], 20, -373897302);
|
||||
a = md5_gg(a, b, c, d, x[i + 5], 5, -701558691);
|
||||
d = md5_gg(d, a, b, c, x[i + 10], 9, 38016083);
|
||||
c = md5_gg(c, d, a, b, x[i + 15], 14, -660478335);
|
||||
b = md5_gg(b, c, d, a, x[i + 4], 20, -405537848);
|
||||
a = md5_gg(a, b, c, d, x[i + 9], 5, 568446438);
|
||||
d = md5_gg(d, a, b, c, x[i + 14], 9, -1019803690);
|
||||
c = md5_gg(c, d, a, b, x[i + 3], 14, -187363961);
|
||||
b = md5_gg(b, c, d, a, x[i + 8], 20, 1163531501);
|
||||
a = md5_gg(a, b, c, d, x[i + 13], 5, -1444681467);
|
||||
d = md5_gg(d, a, b, c, x[i + 2], 9, -51403784);
|
||||
c = md5_gg(c, d, a, b, x[i + 7], 14, 1735328473);
|
||||
b = md5_gg(b, c, d, a, x[i + 12], 20, -1926607734);
|
||||
|
||||
|
||||
a = md5_hh(a, b, c, d, x[i + 5], 4, -378558);
|
||||
d = md5_hh(d, a, b, c, x[i + 8], 11, -2022574463);
|
||||
c = md5_hh(c, d, a, b, x[i + 11], 16, 1839030562);
|
||||
b = md5_hh(b, c, d, a, x[i + 14], 23, -35309556);
|
||||
a = md5_hh(a, b, c, d, x[i + 1], 4, -1530992060);
|
||||
d = md5_hh(d, a, b, c, x[i + 4], 11, 1272893353);
|
||||
c = md5_hh(c, d, a, b, x[i + 7], 16, -155497632);
|
||||
b = md5_hh(b, c, d, a, x[i + 10], 23, -1094730640);
|
||||
a = md5_hh(a, b, c, d, x[i + 13], 4, 681279174);
|
||||
d = md5_hh(d, a, b, c, x[i + 0], 11, -358537222);
|
||||
c = md5_hh(c, d, a, b, x[i + 3], 16, -722521979);
|
||||
b = md5_hh(b, c, d, a, x[i + 6], 23, 76029189);
|
||||
a = md5_hh(a, b, c, d, x[i + 9], 4, -640364487);
|
||||
d = md5_hh(d, a, b, c, x[i + 12], 11, -421815835);
|
||||
c = md5_hh(c, d, a, b, x[i + 15], 16, 530742520);
|
||||
b = md5_hh(b, c, d, a, x[i + 2], 23, -995338651);
|
||||
|
||||
|
||||
a = md5_ii(a, b, c, d, x[i + 0], 6, -198630844);
|
||||
d = md5_ii(d, a, b, c, x[i + 7], 10, 1126891415);
|
||||
c = md5_ii(c, d, a, b, x[i + 14], 15, -1416354905);
|
||||
b = md5_ii(b, c, d, a, x[i + 5], 21, -57434055);
|
||||
a = md5_ii(a, b, c, d, x[i + 12], 6, 1700485571);
|
||||
d = md5_ii(d, a, b, c, x[i + 3], 10, -1894986606);
|
||||
c = md5_ii(c, d, a, b, x[i + 10], 15, -1051523);
|
||||
b = md5_ii(b, c, d, a, x[i + 1], 21, -2054922799);
|
||||
a = md5_ii(a, b, c, d, x[i + 8], 6, 1873313359);
|
||||
d = md5_ii(d, a, b, c, x[i + 15], 10, -30611744);
|
||||
c = md5_ii(c, d, a, b, x[i + 6], 15, -1560198380);
|
||||
b = md5_ii(b, c, d, a, x[i + 13], 21, 1309151649);
|
||||
a = md5_ii(a, b, c, d, x[i + 4], 6, -145523070);
|
||||
d = md5_ii(d, a, b, c, x[i + 11], 10, -1120210379);
|
||||
c = md5_ii(c, d, a, b, x[i + 2], 15, 718787259);
|
||||
b = md5_ii(b, c, d, a, x[i + 9], 21, -343485551);
|
||||
|
||||
|
||||
a = safe_add(a, olda);
|
||||
b = safe_add(b, oldb);
|
||||
c = safe_add(c, oldc);
|
||||
d = safe_add(d, oldd);
|
||||
}
|
||||
return Array(a, b, c, d);
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* These functions implement the four basic operations the algorithm uses.
|
||||
*/
|
||||
function md5_cmn (q, a, b, x, s, t)
|
||||
{
|
||||
return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b);
|
||||
}
|
||||
function md5_ff (a, b, c, d, x, s, t)
|
||||
{
|
||||
return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
|
||||
}
|
||||
function md5_gg (a, b, c, d, x, s, t)
|
||||
{
|
||||
return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
|
||||
}
|
||||
function md5_hh (a, b, c, d, x, s, t)
|
||||
{
|
||||
return md5_cmn(b ^ c ^ d, a, b, x, s, t);
|
||||
}
|
||||
function md5_ii (a, b, c, d, x, s, t)
|
||||
{
|
||||
return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Add integers, wrapping at 2^32. This uses 16-bit operations internally
|
||||
* to work around bugs in some JS interpreters.
|
||||
*/
|
||||
function safe_add (x, y)
|
||||
{
|
||||
var lsw = (x & 0xFFFF) + (y & 0xFFFF);
|
||||
var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
|
||||
return (msw << 16) | (lsw & 0xFFFF);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Bitwise rotate a 32-bit number to the left.
|
||||
*/
|
||||
function bit_rol (num, cnt)
|
||||
{
|
||||
return (num << cnt) | (num >>> (32 - cnt));
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Convert a string to an array of little-endian words
|
||||
* If chrsz is ASCII, characters >255 have their hi-byte silently ignored.
|
||||
*/
|
||||
function str2binl (str)
|
||||
{
|
||||
var bin = Array();
|
||||
var mask = (1 << chrsz) - 1;
|
||||
for (var i = 0; i < str.length * chrsz; i += chrsz)
|
||||
bin[i >> 5] |= (str.charCodeAt(i / chrsz) & mask) << (i % 32);
|
||||
return bin;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Convert an array of little-endian words to a hex string.
|
||||
*/
|
||||
function binl2hex (binarray)
|
||||
{
|
||||
var hex_tab = hexcase ? '0123456789ABCDEF' : '0123456789abcdef';
|
||||
var str = '';
|
||||
for (var i = 0; i < binarray.length * 4; i++)
|
||||
{
|
||||
str += hex_tab.charAt((binarray[i >> 2] >> ((i % 4) * 8 + 4)) & 0xF) +
|
||||
hex_tab.charAt((binarray[i >> 2] >> ((i % 4) * 8 )) & 0xF);
|
||||
}
|
||||
return str;
|
||||
}
|
||||
|
||||
|
||||
export default hex_md5;
|
26
src/util.js
Normal file
26
src/util.js
Normal file
@ -0,0 +1,26 @@
|
||||
export function isPC () {
|
||||
return !/(iphone|ipad|ipod|ios|android)/i.test(navigator.userAgent.toLowerCase());
|
||||
}
|
||||
|
||||
export function closeWindow (url = 'https://localhost') {
|
||||
window.opener = null;
|
||||
window.open('', '_self');
|
||||
window.close();
|
||||
window.location.href = url;
|
||||
}
|
||||
|
||||
export function getNowTime () {
|
||||
return new Date().getTime();
|
||||
}
|
||||
|
||||
export function getUrlParam (name) {
|
||||
let search = window.location.search;
|
||||
if (search !== '') {
|
||||
let reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i');
|
||||
let r = search.substr(1).match(reg);
|
||||
if (r != null) {
|
||||
return unescape(r[2]);
|
||||
}
|
||||
}
|
||||
return '';
|
||||
}
|
23
webpack-config/build.js
Normal file
23
webpack-config/build.js
Normal file
@ -0,0 +1,23 @@
|
||||
const path = require('path');
|
||||
require('../helper/copy-to-npm');
|
||||
|
||||
module.exports = {
|
||||
mode: 'production',
|
||||
entry: path.resolve('./', 'src/index.js'),
|
||||
output: {
|
||||
path: path.resolve('./', 'npm'),
|
||||
filename: 'ebuild.min.js',
|
||||
library: 'ebuild',
|
||||
libraryTarget: 'umd',
|
||||
umdNamedDefine: true,
|
||||
globalObject: 'this'
|
||||
},
|
||||
module: {
|
||||
rules: [{
|
||||
test: /(.js)$/,
|
||||
use: [{
|
||||
loader: 'babel-loader',
|
||||
}]
|
||||
}]
|
||||
}
|
||||
};
|
32
webpack-config/dev.js
Normal file
32
webpack-config/dev.js
Normal file
@ -0,0 +1,32 @@
|
||||
const path = require('path');
|
||||
|
||||
module.exports = {
|
||||
entry: path.resolve('./', 'public/main.js'),
|
||||
output: {
|
||||
path: path.resolve('./', 'public'),
|
||||
filename: 'bundle.js'
|
||||
},
|
||||
devtool: 'eval-source-map',
|
||||
devServer: {
|
||||
contentBase: path.resolve('./', 'public'),
|
||||
historyApiFallback: true,
|
||||
inline: true,
|
||||
host: 'localhost'// '0.0.0.0' //
|
||||
},
|
||||
module: {
|
||||
rules: [{
|
||||
test: /(.js)$/,
|
||||
use: [{
|
||||
loader: 'babel-loader',
|
||||
}]
|
||||
}, {
|
||||
test: /(.js)$/,
|
||||
loader: 'eslint-loader',
|
||||
enforce: 'pre',
|
||||
exclude: /node_modules/,
|
||||
options: {
|
||||
configFile: './.eslintrc.js'
|
||||
}
|
||||
}]
|
||||
}
|
||||
};
|
Loading…
x
Reference in New Issue
Block a user