241 lines
5.8 KiB
JavaScript
241 lines
5.8 KiB
JavaScript
const webpack = require("webpack");
|
|
const ReactRefreshWebpackPlugin = require("@pmmmwh/react-refresh-webpack-plugin");
|
|
const HtmlWebpackPlugin = require("html-webpack-plugin");
|
|
const ESLintPlugin = require("eslint-webpack-plugin");
|
|
const fs = require("fs");
|
|
const isDev = false;
|
|
|
|
const compiler = webpack({
|
|
mode: isDev ? "development" : "production",
|
|
entry: ["./src/index.js", ...(isDev ? ["webpack-hot-middleware/client?reload=true&overlay=true"] : [])],
|
|
module: {
|
|
rules: [
|
|
{
|
|
test: /\.js$/,
|
|
exclude: /node_modules/,
|
|
use: [
|
|
{
|
|
loader: require.resolve("babel-loader"),
|
|
options: {
|
|
plugins: [isDev && require.resolve("react-refresh/babel")].filter(Boolean),
|
|
presets: [["@babel/preset-react", { runtime: "automatic" }]]
|
|
}
|
|
}
|
|
]
|
|
},
|
|
{
|
|
test: /\.css$/,
|
|
use: ["style-loader", "css-loader"]
|
|
}
|
|
]
|
|
},
|
|
plugins: [
|
|
new HtmlWebpackPlugin({
|
|
templateContent: "<!DOCTYPE html>\n<html><head>" + '<meta name="viewport" content="width=device-width, initial-scale=1"><link rel="icon" href="data:;base64,iVBORw0KGgo="></head><body style="background-color: #c5cbe3"><div id="react_insert"></div></body></html>'
|
|
}),
|
|
...(isDev ? [new ReactRefreshWebpackPlugin(), new webpack.HotModuleReplacementPlugin(), new ESLintPlugin()] : [])
|
|
],
|
|
resolve: {
|
|
extensions: ["*", ".js"],
|
|
fallback: { crypto: false }
|
|
},
|
|
performance: {
|
|
maxEntrypointSize: 2024000,
|
|
maxAssetSize: 2024000
|
|
},
|
|
devtool: isDev ? "source-map" : false,
|
|
optimization: {
|
|
moduleIds: "deterministic",
|
|
splitChunks: {
|
|
//chunks: "all",
|
|
/*cacheGroups: {
|
|
commons: {
|
|
test: /[\\/]node_modules[\\/]/,
|
|
name: "vendors",
|
|
chunks: "all"
|
|
}
|
|
}*/
|
|
}
|
|
},
|
|
output: {
|
|
filename: "searchPopper.js",//"[name].[contenthash].js",
|
|
chunkFilename: "searchPopper.js",//"[name].[contenthash].js",
|
|
clean: true,
|
|
asyncChunks: false
|
|
}
|
|
});
|
|
|
|
const express = require("express");
|
|
const app = express();
|
|
const http = require("http");
|
|
const server = http.createServer(app);
|
|
const compression = require("compression");
|
|
const { Server } = require("socket.io");
|
|
const async = require("async");
|
|
|
|
var onlyOnce = true;
|
|
|
|
async function run() {
|
|
|
|
const io = new Server(server);
|
|
const interval = setInterval(async () => {
|
|
const sockets = await io.fetchSockets();
|
|
|
|
async.forEachOf(
|
|
sockets,
|
|
async function (socket, key, callback) {
|
|
if (socket.data && socket.data.auth) {
|
|
callback();
|
|
} else {
|
|
callback();
|
|
}
|
|
},
|
|
async function (err) {}
|
|
);
|
|
}, 1000 * 10);
|
|
|
|
let globalHash;
|
|
|
|
var connListener = io.on("connection", (socket) => {
|
|
if (socket.handshake.headers.authorization) {
|
|
const authheader = socket.handshake.headers.authorization;
|
|
const auth = new Buffer.from(authheader.split(" ")[1], "base64").toString().split(":");
|
|
console.log(auth);
|
|
}
|
|
socket.on("getHash", () => {
|
|
if (globalHash) socket.emit("hash", globalHash);
|
|
});
|
|
runapp(socket);
|
|
});
|
|
|
|
if (isDev) {
|
|
app.use(
|
|
require("webpack-dev-middleware")(compiler, {
|
|
headers: (req, res, context) => {
|
|
if (req.url == "/") {
|
|
res.setHeader("Cache-Control", "max-age=0");
|
|
}
|
|
}
|
|
})
|
|
);
|
|
app.use(require("webpack-hot-middleware")(compiler));
|
|
|
|
compiler.hooks.done.tap("MyPlugin", (params) => {
|
|
globalHash = params.toJson().hash;
|
|
if (onlyOnce) io.emit("hash", globalHash);
|
|
onlyOnce = false;
|
|
});
|
|
|
|
} else {
|
|
compiler.run((err, stats) => {
|
|
if (err || stats.hasErrors()) {
|
|
console.log(err);
|
|
}
|
|
globalHash = "prod" + stats.hash;
|
|
io.emit("hash", globalHash);
|
|
console.log("prod" + stats.hash);
|
|
console.log(stats.toString({ colors: true }));
|
|
});
|
|
|
|
app.use(function (req, res, next) {
|
|
if (req.path == "/") {
|
|
express.static("dist")(req, res, next);
|
|
} else {
|
|
express.static("dist", { maxAge: 60 * 60 * 24 * 100 * 1000 })(req, res, next);
|
|
}
|
|
});
|
|
app.use(compression());
|
|
}
|
|
|
|
|
|
|
|
let printerOnline = false;
|
|
|
|
|
|
server.listen(1111, "0.0.0.0", () => {});
|
|
}
|
|
|
|
run();
|
|
|
|
var mysql = require('mysql');
|
|
var connection = mysql.createConnection({
|
|
host : 'localhost',
|
|
user : 'jtlshop',
|
|
password : 'jtlshop',
|
|
database : 'jtldb'
|
|
});
|
|
connection.connect();
|
|
|
|
function permute(nums) {
|
|
let result = [];
|
|
if (nums.length === 0) return [];
|
|
if (nums.length === 1) return [nums];
|
|
for (let i = 0; i < nums.length; i++) {
|
|
const currentNum = nums[i];
|
|
const remainingNums = nums.slice(0, i).concat(nums.slice(i + 1));
|
|
const remainingNumsPermuted = permute(remainingNums);
|
|
for (let j = 0; j < remainingNumsPermuted.length; j++) {
|
|
const permutedArray = [currentNum].concat(remainingNumsPermuted[j]);
|
|
result.push(permutedArray);
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
|
|
function runapp(socket){
|
|
|
|
socket.on("search", (text, offset, callback) => {
|
|
|
|
try{
|
|
|
|
text = text.toString().trim().replace(/(\D)-/g, "$1 ").replace(/ {2,}/g, " ");
|
|
|
|
let queries = [];
|
|
let qstr = '';
|
|
|
|
for(const per of permute(text.split(' '))){
|
|
for(let i=0;i<per.length;i++) if (!isNaN(parseInt(per[i], 10))) {
|
|
per[i] = ' '+per[i];
|
|
}
|
|
queries.push('%'+(per.join('%'))+'%');
|
|
qstr+= ' OR cName LIKE ? ';
|
|
}
|
|
|
|
qstr = qstr.substring(3);
|
|
|
|
queries.push(offset*10);
|
|
|
|
if((text.length < 200)&&(text.length > 2)&&(queries.length < 129)){
|
|
|
|
connection.query(`
|
|
SELECT
|
|
tartikel.kArtikel,
|
|
cArtNr,
|
|
cName,
|
|
cSeo,
|
|
fLieferantenlagerbestand > 0 as bLieferantenlagerbestand,
|
|
fLagerbestand > 0 as bLagerbestand,
|
|
fStandardpreisNetto,
|
|
fMwSt
|
|
FROM tartikel
|
|
LEFT OUTER JOIN tartikelpict ON (tartikelpict.kArtikel = tartikel.kArtikel AND nNr = 1)
|
|
WHERE nIstVater = 0 and ( `+qstr+` ) ORDER BY cName limit 11 OFFSET ?`,
|
|
queries, function (error, results)
|
|
{
|
|
if (callback) callback(error,results);
|
|
});
|
|
|
|
}else{
|
|
callback({length:text.length,permutations:queries.length});
|
|
}
|
|
}
|
|
catch(e){
|
|
callback(e);
|
|
console.log('exception',e);
|
|
}
|
|
finally{
|
|
};
|
|
});
|
|
|
|
}
|