스크립트 기반을 WebPack + Babel + TypeScript + Vue3으로 변경 #191

Merged
Hide_D merged 122 commits from ts_convert into devel 2021-09-09 01:00:43 +09:00
10 changed files with 196 additions and 70 deletions
Showing only changes of commit 325f2c28f7 - Show all commits

No files matched your search

-2
View File
@@ -23,8 +23,6 @@ if($session->userGrade == 5){
<meta name="viewport" content="width=device-width, initial-scale=1" />
<?=WebUtil::printJS('../d_shared/common_path.js')?>
<?=WebUtil::printJS('js/vendors.js')?>
<?=WebUtil::printJS('js/common.js')?>
<?=WebUtil::printJS('../e_lib/jquery.validate.min.js')?>
<?=WebUtil::printJS('js/install_db.js')?>
<?=WebUtil::printCSS('css/normalize.css')?>
<?=WebUtil::printCSS('../e_lib/bootstrap.min.css')?>
+2 -65
View File
@@ -1,65 +1,2 @@
$(document).ready( function () {
$('#db_form').validate({
rules:{
db_host:"required",
db_port:"required",
db_id:"required",
db_pw:"required",
db_name:"required"
},
errorElement: "div",
errorPlacement: function ( error, element ) {
// Add the `help-block` class to the error element
error.addClass( "invalid-feedback" );
if ( element.prop( "type" ) === "checkbox" ) {
error.insertAfter( element.parent( "label" ) );
} else {
error.insertAfter( element );
}
},
highlight: function ( element, errorClass, validClass ) {
$( element ).addClass( "is-invalid" ).removeClass( "is-valid" );
},
unhighlight: function (element, errorClass, validClass) {
$( element ).addClass( "is-valid" ).removeClass( "is-invalid" );
}
});
$('#db_form').submit(function(e){
e.preventDefault();
if(!$("#db_form").valid()){
return;
}
$.ajax({
cache:false,
type:'post',
url:'j_install_db.php',
dataType:'json',
data:{
full_reset:$('#full_reset input:radio:checked').val(),
db_host:$('#db_host').val(),
db_port:$('#db_port').val(),
db_id:$('#db_id').val(),
db_pw:$('#db_pw').val(),
db_name:$('#db_name').val()
}
}).then(function(result){
var deferred = $.Deferred();
if(!result.result){
alert(result.reason);
deferred.reject('fail');
}
else{
alert('DB.php가 생성되었습니다.');
deferred.resolve();
}
return deferred.promise();
}).then(function(){
location.href = 'install.php';
});
});
});
(()=>{"use strict";var r,e={835:(r,e,t)=>{t(5666),t(1058),t(1539),t(8674);var n=t(9669),a=t.n(n),i=t(9755),o=t.n(i),u=t(1469),l=t.n(u),s=(t(9826),t(7941),t(715)),c=(t(1038),t(8783),t(2526),t(1817),t(2165),t(6992),t(3948),t(7037)),f=t.n(c);function d(r,e){(null==e||e>r.length)&&(e=r.length);for(var t=0,n=new Array(e);t<e;t++)n[t]=r[t];return n}function p(r){var e,t={},n=function(r,e){var t="undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(!t){if(Array.isArray(r)||(t=function(r,e){if(r){if("string"==typeof r)return d(r,e);var t=Object.prototype.toString.call(r).slice(8,-1);return"Object"===t&&r.constructor&&(t=r.constructor.name),"Map"===t||"Set"===t?Array.from(r):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?d(r,e):void 0}}(r))||e&&r&&"number"==typeof r.length){t&&(r=t);var n=0,a=function(){};return{s:a,n:function(){return n>=r.length?{done:!0}:{done:!1,value:r[n++]}},e:function(r){throw r},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,u=!1;return{s:function(){t=t.call(r)},n:function(){var r=t.next();return o=r.done,r},e:function(r){u=!0,i=r},f:function(){try{o||null==t.return||t.return()}finally{if(u)throw i}}}}(r);try{for(n.s();!(e=n.n()).done;){var a=e.value,i=a.name,o=a.value;if(!f()(i))throw new TypeError("".concat(i," is not string"));if(!f()(o))throw new TypeError("".concat(o," is not string"));if(""!==i&&Line truncated
//# sourceMappingURL=install_db.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"install_db.js","mappings":"uBAAIA,E,gUCOE,SAAUC,EAAaC,GACzB,IADgD,EAC1CC,EAAyC,GADC,E,25BAAA,CAGrBD,GAHqB,IAGhD,2BAAiC,eAAtBE,EAAsB,EAAtBA,KAAMC,EAAgB,EAAhBA,MACb,IAAI,IAASD,GACT,MAAM,IAAIE,UAAJ,UAAiBF,EAAjB,mBAEV,IAAI,IAASC,GACT,MAAM,IAAIC,UAAJ,UAAiBD,EAAjB,mBAGV,GAAY,KAATD,GAAwB,OAATA,EAGlB,GAAGA,EAAKG,OAAS,GAAuB,MAAlBH,EAAKI,OAAO,GAAlC,CACI,IAAMC,EAAUL,EAAKI,MAAM,GAAI,GAC1BC,KAAWN,EAIXA,EAAOM,GAAsBC,KAAKL,GAHnCF,EAAOM,GAAW,CAACJ,QAO3BF,EAAOC,GAAQC,GAxB6B,8BA0BhD,OAAOF,E,uSC5BJ,IAAMQ,EAAb,WAGI,WAA4BC,EAA6CC,I,4FAAW,SAAxD,KAAAD,OAAAA,EAA6C,KAAAC,KAAAA,EACrEC,KAAKC,UAAY,IAAI,IAAOF,GAC5BC,KAAKE,OAASJ,EAAOK,KAAK,S,UALlC,S,EAAA,G,EAAA,0BAQW,WACHH,KAAKE,OAAOE,YAAY,cACxBJ,KAAKE,OAAOE,YAAY,YACxBJ,KAAKF,OAAOK,KAAK,qBAAqBE,WAX9C,kCAcW,WAAoB,WAIvB,OAHAL,KAAKE,OAAOI,GAAG,UAAU,WAChB,EAAKC,cAEPP,OAlBf,uB,EAAA,yBAqBW,mHACGQ,EAAYrB,EAAaa,KAAKE,OAAOO,kBADxC,SAE0BT,KAAKC,UAAUM,SAASC,GAAWE,OAAM,YAAe,IAAZC,EAAY,EAAZA,OACrE,EAAKC,cACL,cAAiBC,OAAOC,KAAKH,GAA7B,eAAqC,CAAjC,IAAMI,EAAG,KACLC,OAA0B,EACxBC,EAASN,EAAOI,GAAK,GAAGG,SAE1BF,EADD,IAAQR,EAAUO,IACT,IAAE,wBAAD,OAAyBA,EAAzB,SAGD,IAAE,wBAAD,OAAyBA,EAAzB,QAEPI,SAAS,cAEf,IAAMC,EAAS,IAAE,SAAD,OAAUH,EAAV,YAEhBG,EAAOD,SAAU,oBAEa,aAAzBH,EAAMK,KAAM,QACbD,EAAOE,YAAaN,EAAMO,OAAQ,UAElCH,EAAOE,YAAaN,GAI5B,EAAKd,OAAOsB,MAAK,WACCxB,KAA0BV,QAC7BqB,GAGXX,KAAKyB,UAAUC,IAAI,kBA/BxB,eAmCmBC,KAjChBC,EAFH,sDAoCQD,GApCR,cAsCH3B,KAAKY,cACLZ,KAAKE,OAAOiB,SAAS,YAvClB,kBAwCIS,GAxCJ,+CArBX,E,8KAAA,gD,iBAAA,K,gjCCHM,SAAUC,EAAgBC,GAgB5B,IAfA,IAAMC,EALine truncated
+1 -1
View File
@@ -1,3 +1,3 @@
/*! For license information please see vendors.js.LICENSE.txt */
(self.webpackChunkhidche_lib=self.webpackChunkhidche_lib||[]).push([[216],{9669:(e,t,n)=>{e.exports=n(1609)},5448:(e,t,n)=>{"use strict";var r=n(4867),i=n(1309),o=n(4372),a=n(5327),s=n(4097),u=n(4109),l=n(7985),c=n(5061);e.exports=function(e){return new Promise((function(t,n){var f=e.data,d=e.headers;r.isFormData(f)&&delete d["Content-Type"];var h=new XMLHttpRequest;if(e.auth){var p=e.auth.username||"",m=e.auth.password?unescape(encodeURIComponent(e.auth.password)):"";d.Authorization="Basic "+btoa(p+":"+m)}var v=s(e.baseURL,e.url);if(h.open(e.method.toUpperCase(),a(v,e.params,e.paramsSerializer),!0),h.timeout=e.timeout,h.onreadystatechange=function(){if(h&&4===h.readyState&&(0!==h.status||h.responseURL&&0===h.responseURL.indexOf("file:"))){var r="getAllResponseHeaders"in h?u(h.getAllResponseHeaders()):null,o={data:e.responseType&&"text"!==e.responseType?h.response:h.responseText,status:h.status,statusText:h.statusText,headers:r,config:e,request:h};i(t,n,o),h=null}},h.onabort=function(){h&&(n(c("Request aborted",e,"ECONNABORTED",h)),h=null)},h.onerror=function(){n(c("Network Error",e,null,h)),h=null},h.ontimeout=function(){var t="timeout of "+e.timeout+"ms exceeded";e.timeoutErrorMessage&&(t=e.timeoutErrorMessage),n(c(t,e,"ECONNABORTED",h)),h=null},r.isStandardBrowserEnv()){var g=(e.withCredentials||l(v))&&e.xsrfCookieName?o.read(e.xsrfCookieName):void 0;g&&(d[e.xsrfHeaderName]=g)}if("setRequestHeader"in h&&r.forEach(d,(function(e,t){void 0===f&&"content-type"===t.toLowerCaseLine truncated
(self.webpackChunkhidche_lib=self.webpackChunkhidche_lib||[]).push([[216],{715:(e,t,n)=>{"use strict";function r(){return(r=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(this,arguments)}function i(e){return(i=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function o(e,t){return(o=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function a(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}function s(e,t,n){return(s=a()?Reflect.construct:function(e,t,n){var r=[null];r.push.apply(r,t);var i=new(Function.bind.apply(e,r));return n&&o(i,n.prototype),i}).apply(null,arguments)}function u(e){var t="function"==typeof Map?new Map:void 0;return(u=function(e){if(null===e||(n=e,-1===Function.toString.call(n).indexOf("[native code]")))return e;var n;if("function"!=typeof e)throw new TypeError("Super expression must either be null or a function");if(void 0!==t){if(t.has(e))return t.get(e);t.set(e,r)}function r(){return s(e,arguments,i(this).constructor)}return r.prototype=Object.create(e.prototype,{constructor:{value:r,enumerable:!1,writable:!0,configurable:!0}}),o(r,e)})(e)}n.d(t,{Z:()=>j});var l=/%[sdjLine truncated
//# sourceMappingURL=vendors.js.map
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"vendors.js","mappings":";0FAAAA,EAAOC,QAAU,EAAjB,mCCEA,IAAIC,EAAQ,EAAQ,MAChBC,EAAS,EAAQ,MACjBC,EAAU,EAAQ,MAClBC,EAAW,EAAQ,MACnBC,EAAgB,EAAQ,MACxBC,EAAe,EAAQ,MACvBC,EAAkB,EAAQ,MAC1BC,EAAc,EAAQ,MAE1BT,EAAOC,QAAU,SAAoBS,GACnC,OAAO,IAAIC,SAAQ,SAA4BC,EAASC,GACtD,IAAIC,EAAcJ,EAAOK,KACrBC,EAAiBN,EAAOO,QAExBf,EAAMgB,WAAWJ,WACZE,EAAe,gBAGxB,IAAIG,EAAU,IAAIC,eAGlB,GAAIV,EAAOW,KAAM,CACf,IAAIC,EAAWZ,EAAOW,KAAKC,UAAY,GACnCC,EAAWb,EAAOW,KAAKE,SAAWC,SAASC,mBAAmBf,EAAOW,KAAKE,WAAa,GAC3FP,EAAeU,cAAgB,SAAWC,KAAKL,EAAW,IAAMC,GAGlE,IAAIK,EAAWtB,EAAcI,EAAOmB,QAASnB,EAAOoB,KA4EpD,GA3EAX,EAAQY,KAAKrB,EAAOsB,OAAOC,cAAe5B,EAASuB,EAAUlB,EAAOwB,OAAQxB,EAAOyB,mBAAmB,GAGtGhB,EAAQiB,QAAU1B,EAAO0B,QAGzBjB,EAAQkB,mBAAqB,WAC3B,GAAKlB,GAAkC,IAAvBA,EAAQmB,aAQD,IAAnBnB,EAAQoB,QAAkBpB,EAAQqB,aAAwD,IAAzCrB,EAAQqB,YAAYC,QAAQ,UAAjF,CAKA,IAAIC,EAAkB,0BAA2BvB,EAAUZ,EAAaY,EAAQwB,yBAA2B,KAEvGC,EAAW,CACb7B,KAFkBL,EAAOmC,cAAwC,SAAxBnC,EAAOmC,aAAiD1B,EAAQyB,SAA/BzB,EAAQ2B,aAGlFP,OAAQpB,EAAQoB,OAChBQ,WAAY5B,EAAQ4B,WACpB9B,QAASyB,EACThC,OAAQA,EACRS,QAASA,GAGXhB,EAAOS,EAASC,EAAQ+B,GAGxBzB,EAAU,OAIZA,EAAQ6B,QAAU,WACX7B,IAILN,EAAOJ,EAAY,kBAAmBC,EAAQ,eAAgBS,IAG9DA,EAAU,OAIZA,EAAQ8B,QAAU,WAGhBpC,EAAOJ,EAAY,gBAAiBC,EAAQ,KAAMS,IAGlDA,EAAU,MAIZA,EAAQ+B,UAAY,WAClB,IAAIC,EAAsB,cAAgBzC,EAAO0B,QAAU,cACvD1B,EAAOyC,sBACTA,EAAsBzC,EAAOyC,qBAE/BtC,EAAOJ,EAAY0C,EAAqBzC,EAAQ,eAC9CS,IAGFA,EAAU,MAMRjB,EAAMkD,uBAAwB,CAEhC,IAAIC,GAAa3C,EAAO4C,iBAAmB9C,EAAgBoB,KAAclB,EAAO6C,eAC9EnD,EAAQoD,KAAK9C,EAAO6C,qBACpBE,EAEEJ,IACFrC,ELine truncated
{"version":3,"file":"vendors.js","mappings":";sGAAA,SAASA,IAeP,OAdAA,EAAWC,OAAOC,QAAU,SAAUC,GACpC,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CACzC,IAAIG,EAASF,UAAUD,GAEvB,IAAK,IAAII,KAAOD,EACVN,OAAOQ,UAAUC,eAAeC,KAAKJ,EAAQC,KAC/CL,EAAOK,GAAOD,EAAOC,IAK3B,OAAOL,IAGOS,MAAMC,KAAMR,WAU9B,SAASS,EAAgBC,GAIvB,OAHAD,EAAkBb,OAAOe,eAAiBf,OAAOgB,eAAiB,SAAyBF,GACzF,OAAOA,EAAEG,WAAajB,OAAOgB,eAAeF,KAEvBA,GAGzB,SAASI,EAAgBJ,EAAGK,GAM1B,OALAD,EAAkBlB,OAAOe,gBAAkB,SAAyBD,EAAGK,GAErE,OADAL,EAAEG,UAAYE,EACPL,IAGcA,EAAGK,GAG5B,SAASC,IACP,GAAuB,oBAAZC,UAA4BA,QAAQC,UAAW,OAAO,EACjE,GAAID,QAAQC,UAAUC,KAAM,OAAO,EACnC,GAAqB,mBAAVC,MAAsB,OAAO,EAExC,IAEE,OADAC,QAAQjB,UAAUkB,QAAQhB,KAAKW,QAAQC,UAAUG,QAAS,IAAI,iBACvD,EACP,MAAOE,GACP,OAAO,GAIX,SAASC,EAAWC,EAAQC,EAAMC,GAchC,OAZEH,EADER,IACWC,QAAQC,UAER,SAAoBO,EAAQC,EAAMC,GAC7C,IAAIC,EAAI,CAAC,MACTA,EAAEC,KAAKtB,MAAMqB,EAAGF,GAChB,IACII,EAAW,IADGC,SAASC,KAAKzB,MAAMkB,EAAQG,IAG9C,OADID,GAAOb,EAAgBgB,EAAUH,EAAMvB,WACpC0B,IAIOvB,MAAM,KAAMP,WAOhC,SAASiC,EAAiBN,GACxB,IAAIO,EAAwB,mBAARC,IAAqB,IAAIA,SAAQC,EA8BrD,OA5BAH,EAAmB,SAA0BN,GAC3C,GAAc,OAAVA,IARmBU,EAQkBV,GAPqB,IAAzDI,SAASO,SAAShC,KAAK+B,GAAIE,QAAQ,kBAOS,OAAOZ,EAR5D,IAA2BU,EAUvB,GAAqB,mBAAVV,EACT,MAAM,IAAIa,UAAU,sDAGtB,QAAsB,IAAXN,EAAwB,CACjC,GAAIA,EAAOO,IAAId,GAAQ,OAAOO,EAAOQ,IAAIf,GAEzCO,EAAOS,IAAIhB,EAAOiB,GAGpB,SAASA,IACP,OAAOpB,EAAWG,EAAO3B,UAAWS,EAAgBD,MAAMqC,aAW5D,OARAD,EAAQxC,UAAYR,OAAOkD,OAAOnB,EAAMvB,UAAW,CACjDyC,YAAa,CACXE,MAAOH,EACPI,YAAY,EACZC,UAAU,EACVC,cAAc,KAGXpC,EAAgB8B,EAASjB,KAGVA,oBAILine truncated
+79
View File
@@ -0,0 +1,79 @@
import axios from 'axios';
import jQuery from 'jquery';
import { Rules } from 'async-validator';
import { JQValidateForm } from './util/jqValidateForm';
import { convertFormData } from './util/convertFormData';
import { InvalidResponse } from './defs';
import { setAxiosXMLHttpRequest } from './util/setAxiosXMLHttpRequest';
jQuery(async function ($) {
setAxiosXMLHttpRequest();
const descriptor: Rules = {
full_reset: {
required: true,
},
db_host: {
type: 'string',
required: true,
},
db_port: {
type: 'integer',
validator: (rule, value: string) => {
const num = parseInt(value);
if (num <= 0 || num >= 65535) {
return new Error('올바른 포트 범위가 아닙니다.');
}
return true;
}
},
db_id: {
type: 'string',
required: true,
},
db_pw: {
type: 'string',
required: true,
},
db_name: {
type: 'string',
required: true,
}
};
const validator = new JQValidateForm($('#db_form'), descriptor);
validator.installChangeHandler();
$('#db_form').on('submit', async function (e) {
e.preventDefault();
const items = await validator.validate();
if(items === undefined){
return;
}
let data: InvalidResponse;
try{
const response = await axios({
url: 'j_install_db.php',
method: 'post',
responseType: 'json',
data: convertFormData(items)
})
data = response.data as InvalidResponse;
}
catch(e){
alert(e);
return false;
}
if(!data.result){
alert(`에러: ${data.reason}`);
return false;
}
alert('DB.php가 생성되었습니다.');
location.href = 'install.php';
});
});
+69
View File
@@ -0,0 +1,69 @@
import Schema, { Rules, Values } from "async-validator";
import { isArray } from "lodash";
import { mergeKVArray } from "./mergeKVArray";
import $ from 'jquery';
export class JQValidateForm {
public readonly validator: Schema;
public readonly inputs: JQuery<HTMLElement>;
constructor(public readonly target: JQuery<HTMLElement>, public readonly rule: Rules) {
this.validator = new Schema(rule);
this.inputs = target.find('input');
}
public clearErrMsg():void {
this.inputs.removeClass('is-invalid');
this.inputs.removeClass('is-valid');
this.target.find('.invalid-feedback').detach();
}
public installChangeHandler():this{
this.inputs.on('change', ()=>{
void this.validate();
});
return this;
}
public async validate(): Promise<undefined | Values> {
const rawValues = mergeKVArray(this.inputs.serializeArray());
const validateResult = await this.validator.validate(rawValues).catch(({ fields }) => {
this.clearErrMsg();
for(const key of Object.keys(fields)){
let $item: JQuery<HTMLElement>;
const errMsg = fields[key][0].message;
if(isArray(rawValues[key])){
$item = $(`#db_form input[name='${key}[]']`);
}
else{
$item = $(`#db_form input[name='${key}']`);
}
$item.addClass('is-invalid');
const $error = $(`<span>${errMsg}</span>`);
$error.addClass( "invalid-feedback" );
if ( $item.prop( "type" ) === "checkbox" ) {
$error.insertAfter( $item.parent( "label" ) );
} else {
$error.insertAfter( $item );
}
}
this.inputs.each(function(){
const name = (this as HTMLInputElement).name;
if(name in fields){
return;
}
this.classList.add('is-valid');
});
return undefined;
});
if(validateResult === undefined){
return undefined;
}
this.clearErrMsg();
this.inputs.addClass('is-valid');
return validateResult;
}
}
+35
View File
@@ -0,0 +1,35 @@
import { isString } from "lodash";
interface NameValuePair {
name: string,
value: string
}
export function mergeKVArray(array : NameValuePair[]):Record<string, string|string[]>{
const result:Record<string, string|string[]> = {};
for(const {name, value} of array){
if(!isString(name)){
throw new TypeError(`${name} is not string`);
}
if(!isString(value)){
throw new TypeError(`${value} is not string`);
}
if(name === '' || name === '[]'){
continue;
}
if(name.length > 2 && name.slice(-2) == '[]'){
const keyHead = name.slice(0, -2);
if(!(keyHead in result)){
result[keyHead] = [value];
}
else{
(result[keyHead] as string[]).push(value);
}
continue;
}
result[name] = value;
}
return result;
}
+6
View File
@@ -0,0 +1,6 @@
import axios from "axios";
export function setAxiosXMLHttpRequest(): void{
axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
//TODO: X-Requested-With 믿지 말자.
}
+2 -1
View File
@@ -13,7 +13,8 @@ module.exports = [
inheritPoint: './hwe/ts/inheritPoint.ts',
common: './hwe/ts/common_deprecated.ts',
troop: './hwe/ts/troop.ts',
map: './hwe/ts/map.ts'
map: './hwe/ts/map.ts',
install_db: './hwe/ts/install_db',
},
output: {
filename: '[name].js',