Files
searchPopper/search.js
2024-09-05 04:00:27 +02:00

237 lines
5.6 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"]
}
/* {
test: /\.(woff(2)?|ttf|eot|svg)(\?v=\d+\.\d+\.\d+)?$/,
use: [
{
loader: 'file-loader',
options: {
name: '[name].[ext]',
outputPath: 'fonts/'
}
}
]
}*/
/*{
test: /\.(woff|woff2)$/i,
use: ['base64-inline-loader'],
type: 'javascript/auto'
}*/
]
},
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: rgb(192,208,208)"></body></html>'
}),
//new BundleAnalyzerPlugin({analyzerHost:'0.0.0.0'}),
...(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: "[name].[contenthash].js",
chunkFilename: "[name].[contenthash].js",
clean: true,
asyncChunks: true
}
});
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, callback) => {
try{
if(text.length > 2){
let queries = [];
let qstr = '';
for(const per of permute(text.toString().trim().replace(/ {2,}/g, " ").split(' '))){
queries.push('%'+(per.join('%'))+'%');
qstr+= ' OR cName LIKE ? ';
}
connection.query('SELECT tartikel.kArtikel,cArtNr,cName,cSeo FROM tartikel LEFT OUTER JOIN tartikelpict ON (tartikelpict.kArtikel = tartikel.kArtikel) WHERE 1=2 '+qstr+' limit 15',queries, function (error, results) {
if (callback) callback(error,results);
});
}else{
callback(true);
}
}
catch(e){
callback(e);
console.log('exception',e);
}
finally{
};
});
}