migrating to typescript
This commit is contained in:
parent
a9fed8adc8
commit
40d9a83485
282
package-lock.json
generated
282
package-lock.json
generated
|
@ -11,29 +11,29 @@
|
|||
"dev": true
|
||||
},
|
||||
"@types/mysql": {
|
||||
"version": "2.15.4",
|
||||
"resolved": "https://registry.npmjs.org/@types/mysql/-/mysql-2.15.4.tgz",
|
||||
"integrity": "sha512-qjiJUk8vPIuTtvIPx5sAtwVwProXAQm6t6+fvJOIfL0bO8Pj0ap8PEFJ3df5MVyjYzTKRxLudidhoCk642RoZQ==",
|
||||
"version": "2.15.5",
|
||||
"resolved": "https://registry.npmjs.org/@types/mysql/-/mysql-2.15.5.tgz",
|
||||
"integrity": "sha512-4QAISTUGZbcFh7bqdndo08xRdES5OTU+JODy8VCZbe1yiXyGjqw1H83G43XjQ3IbC10wn9xlGd44A5RXJwNh0Q==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@types/node": "10.0.2"
|
||||
"@types/node": "*"
|
||||
}
|
||||
},
|
||||
"@types/node": {
|
||||
"version": "10.0.2",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-10.0.2.tgz",
|
||||
"integrity": "sha512-DPbG0qQ5kdvXBK0jGdv1yd8vGN7hwH8sB2Q1z1kGaxtCnXkSxYJ009VccGlcgknYoLeMTYu4TTzOditDJMdP2Q==",
|
||||
"version": "10.5.4",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-10.5.4.tgz",
|
||||
"integrity": "sha512-8TqvB0ReZWwtcd3LXq3YSrBoLyXFgBX/sBZfGye9+YS8zH7/g+i6QRIuiDmwBoTzcQ/pk89nZYTYU4c5akKkzw==",
|
||||
"dev": true
|
||||
},
|
||||
"@types/pg": {
|
||||
"version": "7.4.8",
|
||||
"resolved": "https://registry.npmjs.org/@types/pg/-/pg-7.4.8.tgz",
|
||||
"integrity": "sha512-naSYLMOIBU+/BddUlQUyQuba9reG5yN0MR7g4EcN/AEt3zll48fGozX8s7xjaXuKmFOS1qqOrr/ZeF6SSOjKCw==",
|
||||
"version": "7.4.10",
|
||||
"resolved": "https://registry.npmjs.org/@types/pg/-/pg-7.4.10.tgz",
|
||||
"integrity": "sha512-IQ9vRZ3oX99TXZiVq5PgODNoqgHvn2girbkxa6gBT7DPGgvRiJ7kZNwmPiLqSOzlRgMHBIujFeiwD5Sf5TIJqg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@types/events": "1.2.0",
|
||||
"@types/node": "10.0.2",
|
||||
"@types/pg-types": "1.11.4"
|
||||
"@types/events": "*",
|
||||
"@types/node": "*",
|
||||
"@types/pg-types": "*"
|
||||
}
|
||||
},
|
||||
"@types/pg-types": {
|
||||
|
@ -42,7 +42,7 @@
|
|||
"integrity": "sha512-WdIiQmE347LGc1Vq3Ki8sk3iyCuLgnccqVzgxek6gEHp2H0p3MQ3jniIHt+bRODXKju4kNQ+mp53lmP5+/9moQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"moment": "2.22.1"
|
||||
"moment": ">=2.14.0"
|
||||
}
|
||||
},
|
||||
"balanced-match": {
|
||||
|
@ -52,9 +52,9 @@
|
|||
"dev": true
|
||||
},
|
||||
"bignumber.js": {
|
||||
"version": "4.0.4",
|
||||
"resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-4.0.4.tgz",
|
||||
"integrity": "sha512-LDXpJKVzEx2/OqNbG9mXBNvHuiRL4PzHCGfnANHMJ+fv68Ads3exDVJeGDJws+AoNEuca93bU3q+S0woeUaCdg=="
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-4.1.0.tgz",
|
||||
"integrity": "sha512-eJzYkFYy9L4JzXsbymsFn3p54D+llV27oTQ+ziJG7WFRheJcNZilgVXMG0LoZtlQSKBsJdWtLFqOD0u+U0jZKA=="
|
||||
},
|
||||
"brace-expansion": {
|
||||
"version": "1.1.11",
|
||||
|
@ -62,7 +62,7 @@
|
|||
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"balanced-match": "1.0.0",
|
||||
"balanced-match": "^1.0.0",
|
||||
"concat-map": "0.0.1"
|
||||
}
|
||||
},
|
||||
|
@ -94,8 +94,8 @@
|
|||
"integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"foreach": "2.0.5",
|
||||
"object-keys": "1.0.11"
|
||||
"foreach": "^2.0.5",
|
||||
"object-keys": "^1.0.8"
|
||||
}
|
||||
},
|
||||
"defined": {
|
||||
|
@ -105,16 +105,16 @@
|
|||
"dev": true
|
||||
},
|
||||
"es-abstract": {
|
||||
"version": "1.10.0",
|
||||
"resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.10.0.tgz",
|
||||
"integrity": "sha512-/uh/DhdqIOSkAWifU+8nG78vlQxdLckUdI/sPgy0VhuXi2qJ7T8czBmqIYtLQVpCIFYafChnsRsB5pyb1JdmCQ==",
|
||||
"version": "1.12.0",
|
||||
"resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz",
|
||||
"integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"es-to-primitive": "1.1.1",
|
||||
"function-bind": "1.1.1",
|
||||
"has": "1.0.1",
|
||||
"is-callable": "1.1.3",
|
||||
"is-regex": "1.0.4"
|
||||
"es-to-primitive": "^1.1.1",
|
||||
"function-bind": "^1.1.1",
|
||||
"has": "^1.0.1",
|
||||
"is-callable": "^1.1.3",
|
||||
"is-regex": "^1.0.4"
|
||||
}
|
||||
},
|
||||
"es-to-primitive": {
|
||||
|
@ -123,18 +123,18 @@
|
|||
"integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"is-callable": "1.1.3",
|
||||
"is-date-object": "1.0.1",
|
||||
"is-symbol": "1.0.1"
|
||||
"is-callable": "^1.1.1",
|
||||
"is-date-object": "^1.0.1",
|
||||
"is-symbol": "^1.0.1"
|
||||
}
|
||||
},
|
||||
"for-each": {
|
||||
"version": "0.3.2",
|
||||
"resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.2.tgz",
|
||||
"integrity": "sha1-LEBFC5NI6X8oEyJZO6lnBLmr1NQ=",
|
||||
"version": "0.3.3",
|
||||
"resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
|
||||
"integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"is-function": "1.0.1"
|
||||
"is-callable": "^1.1.3"
|
||||
}
|
||||
},
|
||||
"foreach": {
|
||||
|
@ -161,21 +161,21 @@
|
|||
"integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"fs.realpath": "1.0.0",
|
||||
"inflight": "1.0.6",
|
||||
"inherits": "2.0.3",
|
||||
"minimatch": "3.0.4",
|
||||
"once": "1.4.0",
|
||||
"path-is-absolute": "1.0.1"
|
||||
"fs.realpath": "^1.0.0",
|
||||
"inflight": "^1.0.4",
|
||||
"inherits": "2",
|
||||
"minimatch": "^3.0.4",
|
||||
"once": "^1.3.0",
|
||||
"path-is-absolute": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"has": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz",
|
||||
"integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=",
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
|
||||
"integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"function-bind": "1.1.1"
|
||||
"function-bind": "^1.1.1"
|
||||
}
|
||||
},
|
||||
"inflight": {
|
||||
|
@ -184,8 +184,8 @@
|
|||
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"once": "1.4.0",
|
||||
"wrappy": "1.0.2"
|
||||
"once": "^1.3.0",
|
||||
"wrappy": "1"
|
||||
}
|
||||
},
|
||||
"inherits": {
|
||||
|
@ -194,9 +194,9 @@
|
|||
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
|
||||
},
|
||||
"is-callable": {
|
||||
"version": "1.1.3",
|
||||
"resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.3.tgz",
|
||||
"integrity": "sha1-hut1OSgF3cM69xySoO7fdO52BLI=",
|
||||
"version": "1.1.4",
|
||||
"resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz",
|
||||
"integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==",
|
||||
"dev": true
|
||||
},
|
||||
"is-date-object": {
|
||||
|
@ -205,19 +205,13 @@
|
|||
"integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=",
|
||||
"dev": true
|
||||
},
|
||||
"is-function": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.1.tgz",
|
||||
"integrity": "sha1-Es+5i2W1fdPRk6MSH19uL0N2ArU=",
|
||||
"dev": true
|
||||
},
|
||||
"is-regex": {
|
||||
"version": "1.0.4",
|
||||
"resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz",
|
||||
"integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"has": "1.0.1"
|
||||
"has": "^1.0.1"
|
||||
}
|
||||
},
|
||||
"is-symbol": {
|
||||
|
@ -231,18 +225,13 @@
|
|||
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
|
||||
"integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
|
||||
},
|
||||
"js-string-escape": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz",
|
||||
"integrity": "sha1-4mJbrbwNZ8dTPp7cEGjFh65BN+8="
|
||||
},
|
||||
"minimatch": {
|
||||
"version": "3.0.4",
|
||||
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
|
||||
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"brace-expansion": "1.1.11"
|
||||
"brace-expansion": "^1.1.7"
|
||||
}
|
||||
},
|
||||
"minimist": {
|
||||
|
@ -252,32 +241,32 @@
|
|||
"dev": true
|
||||
},
|
||||
"moment": {
|
||||
"version": "2.22.1",
|
||||
"resolved": "https://registry.npmjs.org/moment/-/moment-2.22.1.tgz",
|
||||
"integrity": "sha512-shJkRTSebXvsVqk56I+lkb2latjBs8I+pc2TzWc545y2iFnSjm7Wg0QMh+ZWcdSLQyGEau5jI8ocnmkyTgr9YQ==",
|
||||
"version": "2.22.2",
|
||||
"resolved": "https://registry.npmjs.org/moment/-/moment-2.22.2.tgz",
|
||||
"integrity": "sha1-PCV/mDn8DpP/UxSWMiOeuQeD/2Y=",
|
||||
"dev": true
|
||||
},
|
||||
"mysql": {
|
||||
"version": "2.15.0",
|
||||
"resolved": "https://registry.npmjs.org/mysql/-/mysql-2.15.0.tgz",
|
||||
"integrity": "sha512-C7tjzWtbN5nzkLIV+E8Crnl9bFyc7d3XJcBAvHKEVkjrYjogz3llo22q6s/hw+UcsE4/844pDob9ac+3dVjQSA==",
|
||||
"version": "2.16.0",
|
||||
"resolved": "https://registry.npmjs.org/mysql/-/mysql-2.16.0.tgz",
|
||||
"integrity": "sha512-dPbN2LHonQp7D5ja5DJXNbCLe/HRdu+f3v61aguzNRQIrmZLOeRoymBYyeThrR6ug+FqzDL95Gc9maqZUJS+Gw==",
|
||||
"requires": {
|
||||
"bignumber.js": "4.0.4",
|
||||
"readable-stream": "2.3.3",
|
||||
"safe-buffer": "5.1.1",
|
||||
"sqlstring": "2.3.0"
|
||||
"bignumber.js": "4.1.0",
|
||||
"readable-stream": "2.3.6",
|
||||
"safe-buffer": "5.1.2",
|
||||
"sqlstring": "2.3.1"
|
||||
}
|
||||
},
|
||||
"object-inspect": {
|
||||
"version": "1.3.0",
|
||||
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.3.0.tgz",
|
||||
"integrity": "sha512-OHHnLgLNXpM++GnJRyyhbr2bwl3pPVm4YvaraHrRvDt/N3r+s/gDVHciA7EJBTkijKXj61ssgSAikq1fb0IBRg==",
|
||||
"version": "1.6.0",
|
||||
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.6.0.tgz",
|
||||
"integrity": "sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ==",
|
||||
"dev": true
|
||||
},
|
||||
"object-keys": {
|
||||
"version": "1.0.11",
|
||||
"resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz",
|
||||
"integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=",
|
||||
"version": "1.0.12",
|
||||
"resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz",
|
||||
"integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==",
|
||||
"dev": true
|
||||
},
|
||||
"once": {
|
||||
|
@ -286,7 +275,7 @@
|
|||
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"wrappy": "1.0.2"
|
||||
"wrappy": "1"
|
||||
}
|
||||
},
|
||||
"packet-reader": {
|
||||
|
@ -307,17 +296,16 @@
|
|||
"dev": true
|
||||
},
|
||||
"pg": {
|
||||
"version": "7.4.1",
|
||||
"resolved": "https://registry.npmjs.org/pg/-/pg-7.4.1.tgz",
|
||||
"integrity": "sha512-Pi5qYuXro5PAD9xXx8h7bFtmHgAQEG6/SCNyi7gS3rvb/ZQYDmxKchfB0zYtiSJNWq9iXTsYsHjrM+21eBcN1A==",
|
||||
"version": "7.4.3",
|
||||
"resolved": "https://registry.npmjs.org/pg/-/pg-7.4.3.tgz",
|
||||
"integrity": "sha1-97b5P1NA7MJZavu5ShPj1rYJg0s=",
|
||||
"requires": {
|
||||
"buffer-writer": "1.0.1",
|
||||
"js-string-escape": "1.0.1",
|
||||
"packet-reader": "0.3.1",
|
||||
"pg-connection-string": "0.1.3",
|
||||
"pg-pool": "2.0.3",
|
||||
"pg-types": "1.12.1",
|
||||
"pgpass": "1.0.2",
|
||||
"pg-pool": "~2.0.3",
|
||||
"pg-types": "~1.12.1",
|
||||
"pgpass": "1.x",
|
||||
"semver": "4.3.2"
|
||||
}
|
||||
},
|
||||
|
@ -341,10 +329,10 @@
|
|||
"resolved": "https://registry.npmjs.org/pg-types/-/pg-types-1.12.1.tgz",
|
||||
"integrity": "sha1-1kCH45A7WP+q0nnnWVxSIIoUw9I=",
|
||||
"requires": {
|
||||
"postgres-array": "1.0.2",
|
||||
"postgres-bytea": "1.0.0",
|
||||
"postgres-date": "1.0.3",
|
||||
"postgres-interval": "1.1.1"
|
||||
"postgres-array": "~1.0.0",
|
||||
"postgres-bytea": "~1.0.0",
|
||||
"postgres-date": "~1.0.0",
|
||||
"postgres-interval": "^1.1.0"
|
||||
}
|
||||
},
|
||||
"pgpass": {
|
||||
|
@ -352,7 +340,7 @@
|
|||
"resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.2.tgz",
|
||||
"integrity": "sha1-Knu0G2BltnkH6R2hsHwYR8h3swY=",
|
||||
"requires": {
|
||||
"split": "1.0.1"
|
||||
"split": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"postgres-array": {
|
||||
|
@ -371,39 +359,39 @@
|
|||
"integrity": "sha1-4tiXAu/bJY/52c7g/pG9BpdSV6g="
|
||||
},
|
||||
"postgres-interval": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.1.1.tgz",
|
||||
"integrity": "sha512-OkuCi9t/3CZmeQreutGgx/OVNv9MKHGIT5jH8KldQ4NLYXkvmT9nDVxEuCENlNwhlGPE374oA/xMqn05G49pHA==",
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.1.2.tgz",
|
||||
"integrity": "sha512-fC3xNHeTskCxL1dC8KOtxXt7YeFmlbTYtn7ul8MkVERuTmf7pI4DrkAxcw3kh1fQ9uz4wQmd03a1mRiXUZChfQ==",
|
||||
"requires": {
|
||||
"xtend": "4.0.1"
|
||||
"xtend": "^4.0.0"
|
||||
}
|
||||
},
|
||||
"process-nextick-args": {
|
||||
"version": "1.0.7",
|
||||
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
|
||||
"integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M="
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
|
||||
"integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw=="
|
||||
},
|
||||
"readable-stream": {
|
||||
"version": "2.3.3",
|
||||
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
|
||||
"integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
|
||||
"version": "2.3.6",
|
||||
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
|
||||
"integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
|
||||
"requires": {
|
||||
"core-util-is": "1.0.2",
|
||||
"inherits": "2.0.3",
|
||||
"isarray": "1.0.0",
|
||||
"process-nextick-args": "1.0.7",
|
||||
"safe-buffer": "5.1.1",
|
||||
"string_decoder": "1.0.3",
|
||||
"util-deprecate": "1.0.2"
|
||||
"core-util-is": "~1.0.0",
|
||||
"inherits": "~2.0.3",
|
||||
"isarray": "~1.0.0",
|
||||
"process-nextick-args": "~2.0.0",
|
||||
"safe-buffer": "~5.1.1",
|
||||
"string_decoder": "~1.1.1",
|
||||
"util-deprecate": "~1.0.1"
|
||||
}
|
||||
},
|
||||
"resolve": {
|
||||
"version": "1.4.0",
|
||||
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.4.0.tgz",
|
||||
"integrity": "sha512-aW7sVKPufyHqOmyyLzg/J+8606v5nevBgaliIlV7nUpVMsDnoBGV/cbSLNjZAg9q0Cfd/+easKVKQ8vOu8fn1Q==",
|
||||
"version": "1.7.1",
|
||||
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz",
|
||||
"integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"path-parse": "1.0.5"
|
||||
"path-parse": "^1.0.5"
|
||||
}
|
||||
},
|
||||
"resumer": {
|
||||
|
@ -412,13 +400,13 @@
|
|||
"integrity": "sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"through": "2.3.8"
|
||||
"through": "~2.3.4"
|
||||
}
|
||||
},
|
||||
"safe-buffer": {
|
||||
"version": "5.1.1",
|
||||
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
|
||||
"integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg=="
|
||||
"version": "5.1.2",
|
||||
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
|
||||
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
|
||||
},
|
||||
"semver": {
|
||||
"version": "4.3.2",
|
||||
|
@ -430,13 +418,13 @@
|
|||
"resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz",
|
||||
"integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==",
|
||||
"requires": {
|
||||
"through": "2.3.8"
|
||||
"through": "2"
|
||||
}
|
||||
},
|
||||
"sqlstring": {
|
||||
"version": "2.3.0",
|
||||
"resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.0.tgz",
|
||||
"integrity": "sha1-UluKT9Jtb3GqYegipsr5dtMa0qg="
|
||||
"version": "2.3.1",
|
||||
"resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.1.tgz",
|
||||
"integrity": "sha1-R1OT/56RR5rqYtyvDKPRSYOn+0A="
|
||||
},
|
||||
"string.prototype.trim": {
|
||||
"version": "1.1.2",
|
||||
|
@ -444,38 +432,38 @@
|
|||
"integrity": "sha1-0E3iyJ4Tf019IG8Ia17S+ua+jOo=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"define-properties": "1.1.2",
|
||||
"es-abstract": "1.10.0",
|
||||
"function-bind": "1.1.1"
|
||||
"define-properties": "^1.1.2",
|
||||
"es-abstract": "^1.5.0",
|
||||
"function-bind": "^1.0.2"
|
||||
}
|
||||
},
|
||||
"string_decoder": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
|
||||
"integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
|
||||
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
|
||||
"requires": {
|
||||
"safe-buffer": "5.1.1"
|
||||
"safe-buffer": "~5.1.0"
|
||||
}
|
||||
},
|
||||
"tape": {
|
||||
"version": "4.8.0",
|
||||
"resolved": "https://registry.npmjs.org/tape/-/tape-4.8.0.tgz",
|
||||
"integrity": "sha512-TWILfEnvO7I8mFe35d98F6T5fbLaEtbFTG/lxWvid8qDfFTxt19EBijWmB4j3+Hoh5TfHE2faWs73ua+EphuBA==",
|
||||
"version": "4.9.1",
|
||||
"resolved": "https://registry.npmjs.org/tape/-/tape-4.9.1.tgz",
|
||||
"integrity": "sha512-6fKIXknLpoe/Jp4rzHKFPpJUHDHDqn8jus99IfPnHIjyz78HYlefTGD3b5EkbQzuLfaEvmfPK3IolLgq2xT3kw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"deep-equal": "1.0.1",
|
||||
"defined": "1.0.0",
|
||||
"for-each": "0.3.2",
|
||||
"function-bind": "1.1.1",
|
||||
"glob": "7.1.2",
|
||||
"has": "1.0.1",
|
||||
"inherits": "2.0.3",
|
||||
"minimist": "1.2.0",
|
||||
"object-inspect": "1.3.0",
|
||||
"resolve": "1.4.0",
|
||||
"resumer": "0.0.0",
|
||||
"string.prototype.trim": "1.1.2",
|
||||
"through": "2.3.8"
|
||||
"deep-equal": "~1.0.1",
|
||||
"defined": "~1.0.0",
|
||||
"for-each": "~0.3.3",
|
||||
"function-bind": "~1.1.1",
|
||||
"glob": "~7.1.2",
|
||||
"has": "~1.0.3",
|
||||
"inherits": "~2.0.3",
|
||||
"minimist": "~1.2.0",
|
||||
"object-inspect": "~1.6.0",
|
||||
"resolve": "~1.7.1",
|
||||
"resumer": "~0.0.0",
|
||||
"string.prototype.trim": "~1.1.2",
|
||||
"through": "~2.3.8"
|
||||
}
|
||||
},
|
||||
"through": {
|
||||
|
@ -484,9 +472,9 @@
|
|||
"integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU="
|
||||
},
|
||||
"typescript": {
|
||||
"version": "2.8.3",
|
||||
"resolved": "https://registry.npmjs.org/typescript/-/typescript-2.8.3.tgz",
|
||||
"integrity": "sha512-K7g15Bb6Ra4lKf7Iq2l/I5/En+hLIHmxWZGq3D4DIRNFxMNV6j2SHSvDOqs2tGd4UvD/fJvrwopzQXjLrT7Itw==",
|
||||
"version": "2.9.2",
|
||||
"resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz",
|
||||
"integrity": "sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w==",
|
||||
"dev": true
|
||||
},
|
||||
"util-deprecate": {
|
||||
|
|
14
package.json
14
package.json
|
@ -12,16 +12,16 @@
|
|||
"node": ">=8.0.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"mysql": "^2.15.0",
|
||||
"pg": "^7.4.1",
|
||||
"mysql": "^2.16.0",
|
||||
"pg": "^7.4.3",
|
||||
"pg-copy-streams": "^1.2.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/mysql": "^2.15.4",
|
||||
"@types/node": "^10.0.2",
|
||||
"@types/pg": "^7.4.8",
|
||||
"tape": "^4.8.0",
|
||||
"typescript": "^2.8.3"
|
||||
"@types/mysql": "^2.15.5",
|
||||
"@types/node": "^10.5.4",
|
||||
"@types/pg": "^7.4.10",
|
||||
"tape": "^4.9.1",
|
||||
"typescript": "^2.9.2"
|
||||
},
|
||||
"scripts": {
|
||||
"compile_test": "tsc --outDir ./build --module commonjs ./src/*.ts && node ./build/Main.js",
|
||||
|
|
|
@ -18,7 +18,6 @@
|
|||
*
|
||||
* @author Anatoly Khaytovich <anatolyuss@gmail.com>
|
||||
*/
|
||||
import * as path from 'path';
|
||||
import * as csvStringify from './CsvStringifyModified';
|
||||
import log from './Logger';
|
||||
import generateError from './ErrorGenerator';
|
||||
|
@ -30,6 +29,8 @@ import MessageToMaster from './MessageToMaster';
|
|||
import { enforceConsistency } from './ConsistencyEnforcer';
|
||||
import * as extraConfigProcessor from './ExtraConfigProcessor';
|
||||
import BufferStream from './BufferStream';
|
||||
import * as path from 'path';
|
||||
import { PoolClient } from 'pg';
|
||||
const { from } = require('pg-copy-streams'); // No declaration file for module "pg-copy-streams".
|
||||
|
||||
process.on('message', async (signal: any) => {
|
||||
|
@ -39,22 +40,42 @@ process.on('message', async (signal: any) => {
|
|||
const promises: Promise<void>[] = signal.chunks.map(async (chunk: any) => {
|
||||
const isNormalFlow: boolean = await enforceConsistency(conv, chunk);
|
||||
|
||||
return isNormalFlow
|
||||
? populateTableWorker(conv, chunk._tableName, chunk._selectFieldList, chunk._offset, chunk._rowsInChunk, chunk._rowsCnt, chunk._id)
|
||||
: deleteChunk(conv, chunk._id);
|
||||
if (isNormalFlow) {
|
||||
return populateTableWorker(conv, chunk._tableName, chunk._selectFieldList, chunk._offset, chunk._rowsInChunk, chunk._rowsCnt, chunk._id);
|
||||
}
|
||||
|
||||
const dbAccess: DBAccess = new DBAccess(conv);
|
||||
const client: PoolClient = await dbAccess.getPgClient();
|
||||
return deleteChunk(conv, chunk._id, client);
|
||||
});
|
||||
|
||||
await Promise.all(promises);
|
||||
process.send('processed');
|
||||
processSend('processed');
|
||||
});
|
||||
|
||||
/**
|
||||
* Wraps "process.send" method to avoid "cannot invoke an object which is possibly undefined" warning.
|
||||
*/
|
||||
function processSend(x: any): void {
|
||||
if (process.send) {
|
||||
process.send(x);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Deletes given record from the data-pool.
|
||||
*/
|
||||
async function deleteChunk(conv: Conversion, dataPoolId: number): Promise<void> {
|
||||
async function deleteChunk(conv: Conversion, dataPoolId: number, client: PoolClient): Promise<void> {
|
||||
const sql: string = `DELETE FROM "${ conv._schema }"."data_pool_${ conv._schema }${ conv._mySqlDbName }" WHERE id = ${ dataPoolId };`;
|
||||
const dbAccess: DBAccess = new DBAccess(conv);
|
||||
await dbAccess.query('DataLoader::deleteChunk', sql, DBVendors.PG, false, false);
|
||||
|
||||
try {
|
||||
await client.query(sql);
|
||||
} catch (error) {
|
||||
generateError(conv, `\t--[DataLoader::deleteChunk] ${ error }`, sql);
|
||||
} finally {
|
||||
dbAccess.releasePgClient(client);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -73,12 +94,13 @@ function processDataError(
|
|||
sql: string,
|
||||
sqlCopy: string,
|
||||
tableName: string,
|
||||
dataPoolId: number
|
||||
dataPoolId: number,
|
||||
client: PoolClient
|
||||
): Promise<void> {
|
||||
generateError(conv, `\t--[populateTableWorker] ${ streamError }`, sqlCopy);
|
||||
const rejectedData: string = `\t--[populateTableWorker] Error loading table data:\n${ sql }\n`;
|
||||
log(conv, rejectedData, path.join(conv._logsDirPath, `${ tableName }.log`));
|
||||
return deleteChunk(conv, dataPoolId);
|
||||
return deleteChunk(conv, dataPoolId, client);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -93,96 +115,53 @@ async function populateTableWorker(
|
|||
rowsCnt: number,
|
||||
dataPoolId: number
|
||||
): Promise<void> {
|
||||
//
|
||||
return new Promise<void>(async resolvePopulateTableWorker => {
|
||||
const originalTableName: string = extraConfigProcessor.getTableName(conv, tableName, true);
|
||||
const sql: string = buildChunkQuery(originalTableName, strSelectFieldList, offset, rowsInChunk);
|
||||
const dbAccess: DBAccess = new DBAccess(conv);
|
||||
const logTitle: string = 'DataLoader::populateTableWorker';
|
||||
const result: DBAccessQueryResult = await dbAccess.query(logTitle, sql, DBVendors.MYSQL, false, false);
|
||||
|
||||
if (result.error) {
|
||||
return resolvePopulateTableWorker();
|
||||
}
|
||||
|
||||
return new Promise(resolvePopulateTableWorker => {
|
||||
self._mysql.getConnection((error, connection) => {
|
||||
if (error) {
|
||||
// The connection is undefined.
|
||||
generateError(self, '\t--[populateTableWorker] Cannot connect to MySQL server...\n\t' + error);
|
||||
resolvePopulateTableWorker();
|
||||
} else {
|
||||
const originalTableName = extraConfigProcessor.getTableName(self, tableName, true);
|
||||
const sql = buildChunkQuery(originalTableName, strSelectFieldList, offset, rowsInChunk);
|
||||
rowsInChunk = result.data.length;
|
||||
result.data[0][`${ conv._schema }_${ originalTableName }_data_chunk_id_temp`] = dataPoolId;
|
||||
|
||||
connection.query(sql, (err, rows) => {
|
||||
connection.release();
|
||||
|
||||
if (err) {
|
||||
generateError(self, '\t--[populateTableWorker] ' + err, sql);
|
||||
resolvePopulateTableWorker();
|
||||
} else {
|
||||
rowsInChunk = rows.length;
|
||||
rows[0][self._schema + '_' + originalTableName + '_data_chunk_id_temp'] = dataPoolId;
|
||||
|
||||
csvStringify(rows, (csvError, csvString) => {
|
||||
rows = null;
|
||||
|
||||
if (csvError) {
|
||||
generateError(self, '\t--[populateTableWorker] ' + csvError);
|
||||
resolvePopulateTableWorker();
|
||||
} else {
|
||||
const buffer = Buffer.from(csvString, self._encoding);
|
||||
csvString = null;
|
||||
|
||||
self._pg.connect((error, client, done) => {
|
||||
if (error) {
|
||||
generateError(self, '\t--[populateTableWorker] Cannot connect to PostgreSQL server...\n' + error, sql);
|
||||
resolvePopulateTableWorker();
|
||||
} else {
|
||||
const sqlCopy = 'COPY "' + self._schema + '"."' + tableName + '" FROM STDIN DELIMITER \'' + self._delimiter + '\' CSV;';
|
||||
const copyStream = client.query(from(sqlCopy));
|
||||
const bufferStream = new BufferStream(buffer);
|
||||
|
||||
copyStream.on('end', () => {
|
||||
/*
|
||||
* COPY FROM STDIN does not return the number of rows inserted.
|
||||
* But the transactional behavior still applies (no records inserted if at least one failed).
|
||||
* That is why in case of 'on end' the rowsInChunk value is actually the number of records inserted.
|
||||
*/
|
||||
process.send(new MessageToMaster(tableName, rowsInChunk, rowsCnt));
|
||||
deleteChunk(self, dataPoolId, client, done).then(() => resolvePopulateTableWorker());
|
||||
});
|
||||
|
||||
copyStream.on('error', copyStreamError => {
|
||||
processDataError(
|
||||
self,
|
||||
copyStreamError,
|
||||
sql,
|
||||
sqlCopy,
|
||||
tableName,
|
||||
dataPoolId,
|
||||
client,
|
||||
done,
|
||||
resolvePopulateTableWorker
|
||||
);
|
||||
});
|
||||
|
||||
bufferStream.on('error', bufferStreamError => {
|
||||
processDataError(
|
||||
self,
|
||||
bufferStreamError,
|
||||
sql,
|
||||
sqlCopy,
|
||||
tableName,
|
||||
dataPoolId,
|
||||
client,
|
||||
done,
|
||||
resolvePopulateTableWorker
|
||||
);
|
||||
});
|
||||
|
||||
bufferStream
|
||||
.setEncoding(self._encoding)
|
||||
.pipe(copyStream);
|
||||
}
|
||||
});
|
||||
}
|
||||
}, self._encoding);
|
||||
}
|
||||
});
|
||||
csvStringify(result.data, async (csvError: any, csvString: string) => {
|
||||
if (csvError) {
|
||||
generateError(conv, `\t--[${ logTitle }] ${ csvError }`);
|
||||
return resolvePopulateTableWorker();
|
||||
}
|
||||
});
|
||||
|
||||
const buffer: Buffer = Buffer.from(csvString, conv._encoding);
|
||||
const sqlCopy: string = `COPY "${ conv._schema }"."${ tableName }" FROM STDIN DELIMITER ${ conv._delimiter } CSV;`;
|
||||
const client: PoolClient = await dbAccess.getPgClient();
|
||||
const copyStream: any = client.query(from(sqlCopy));
|
||||
const bufferStream: BufferStream = new BufferStream(buffer);
|
||||
|
||||
copyStream.on('end', () => {
|
||||
/*
|
||||
* COPY FROM STDIN does not return the number of rows inserted.
|
||||
* But the transactional behavior still applies (no records inserted if at least one failed).
|
||||
* That is why in case of 'on end' the rowsInChunk value is actually the number of records inserted.
|
||||
*/
|
||||
processSend(new MessageToMaster(tableName, rowsInChunk, rowsCnt));
|
||||
return deleteChunk(conv, dataPoolId, client).then(() => resolvePopulateTableWorker());
|
||||
});
|
||||
|
||||
copyStream.on('error', (copyStreamError: string) => {
|
||||
return processDataError(conv, copyStreamError, sql, sqlCopy, tableName, dataPoolId, client)
|
||||
.then(() => resolvePopulateTableWorker());
|
||||
});
|
||||
|
||||
bufferStream.on('error', (bufferStreamError: string) => {
|
||||
return processDataError(conv, bufferStreamError, sql, sqlCopy, tableName, dataPoolId, client)
|
||||
.then(() => resolvePopulateTableWorker());
|
||||
});
|
||||
|
||||
bufferStream.setEncoding(conv._encoding).pipe(copyStream);
|
||||
}, conv._encoding);
|
||||
});
|
||||
}
|
||||
|
|
|
@ -32,6 +32,12 @@ import * as extraConfigProcessor from './ExtraConfigProcessor';
|
|||
export async function setSequenceValue(conversion: Conversion, tableName: string): Promise<void> {
|
||||
const originalTableName: string = extraConfigProcessor.getTableName(conversion, tableName, true);
|
||||
const autoIncrementedColumn: any = conversion._dicTables[tableName].arrTableColumns.find((column: any) => column.Extra === 'auto_increment');
|
||||
|
||||
if (!autoIncrementedColumn) {
|
||||
// No auto-incremented column found.
|
||||
return;
|
||||
}
|
||||
|
||||
const dbAccess: DBAccess = new DBAccess(conversion);
|
||||
const columnName: string = extraConfigProcessor.getColumnName(conversion, originalTableName, autoIncrementedColumn.Field, false);
|
||||
const seqName: string = `${ tableName }_${ columnName }_seq`;
|
||||
|
@ -53,6 +59,12 @@ export async function setSequenceValue(conversion: Conversion, tableName: string
|
|||
export async function createSequence(conversion: Conversion, tableName: string): Promise<void> {
|
||||
const originalTableName: string = extraConfigProcessor.getTableName(conversion, tableName, true);
|
||||
const autoIncrementedColumn: any = conversion._dicTables[tableName].arrTableColumns.find((column: any) => column.Extra === 'auto_increment');
|
||||
|
||||
if (!autoIncrementedColumn) {
|
||||
// No auto-incremented column found.
|
||||
return;
|
||||
}
|
||||
|
||||
const columnName: string = extraConfigProcessor.getColumnName(conversion, originalTableName, autoIncrementedColumn.Field, false);
|
||||
const logTitle: string = 'SequencesProcessor::createSequence';
|
||||
const dbAccess: DBAccess = new DBAccess(conversion);
|
||||
|
|
Loading…
Reference in a new issue