initial commit
commit
e55bc1e500
|
@ -0,0 +1 @@
|
||||||
|
node_modules
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,330 @@
|
||||||
|
/*!
|
||||||
|
* Bootstrap Reboot v4.0.0 (https://getbootstrap.com)
|
||||||
|
* Copyright 2011-2018 The Bootstrap Authors
|
||||||
|
* Copyright 2011-2018 Twitter, Inc.
|
||||||
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||||
|
* Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)
|
||||||
|
*/
|
||||||
|
*,
|
||||||
|
*::before,
|
||||||
|
*::after {
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
html {
|
||||||
|
font-family: sans-serif;
|
||||||
|
line-height: 1.15;
|
||||||
|
-webkit-text-size-adjust: 100%;
|
||||||
|
-ms-text-size-adjust: 100%;
|
||||||
|
-ms-overflow-style: scrollbar;
|
||||||
|
-webkit-tap-highlight-color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
@-ms-viewport {
|
||||||
|
width: device-width;
|
||||||
|
}
|
||||||
|
|
||||||
|
article, aside, dialog, figcaption, figure, footer, header, hgroup, main, nav, section {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
margin: 0;
|
||||||
|
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
|
||||||
|
font-size: 1rem;
|
||||||
|
font-weight: 400;
|
||||||
|
line-height: 1.5;
|
||||||
|
color: #212529;
|
||||||
|
text-align: left;
|
||||||
|
background-color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
[tabindex="-1"]:focus {
|
||||||
|
outline: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
hr {
|
||||||
|
box-sizing: content-box;
|
||||||
|
height: 0;
|
||||||
|
overflow: visible;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1, h2, h3, h4, h5, h6 {
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
p {
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
abbr[title],
|
||||||
|
abbr[data-original-title] {
|
||||||
|
text-decoration: underline;
|
||||||
|
-webkit-text-decoration: underline dotted;
|
||||||
|
text-decoration: underline dotted;
|
||||||
|
cursor: help;
|
||||||
|
border-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
address {
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
font-style: normal;
|
||||||
|
line-height: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
ol,
|
||||||
|
ul,
|
||||||
|
dl {
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
ol ol,
|
||||||
|
ul ul,
|
||||||
|
ol ul,
|
||||||
|
ul ol {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
dt {
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
|
||||||
|
dd {
|
||||||
|
margin-bottom: .5rem;
|
||||||
|
margin-left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
blockquote {
|
||||||
|
margin: 0 0 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
dfn {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
b,
|
||||||
|
strong {
|
||||||
|
font-weight: bolder;
|
||||||
|
}
|
||||||
|
|
||||||
|
small {
|
||||||
|
font-size: 80%;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub,
|
||||||
|
sup {
|
||||||
|
position: relative;
|
||||||
|
font-size: 75%;
|
||||||
|
line-height: 0;
|
||||||
|
vertical-align: baseline;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub {
|
||||||
|
bottom: -.25em;
|
||||||
|
}
|
||||||
|
|
||||||
|
sup {
|
||||||
|
top: -.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: #007bff;
|
||||||
|
text-decoration: none;
|
||||||
|
background-color: transparent;
|
||||||
|
-webkit-text-decoration-skip: objects;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:hover {
|
||||||
|
color: #0056b3;
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:not([href]):not([tabindex]) {
|
||||||
|
color: inherit;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:not([href]):not([tabindex]):hover, a:not([href]):not([tabindex]):focus {
|
||||||
|
color: inherit;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:not([href]):not([tabindex]):focus {
|
||||||
|
outline: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre,
|
||||||
|
code,
|
||||||
|
kbd,
|
||||||
|
samp {
|
||||||
|
font-family: monospace, monospace;
|
||||||
|
font-size: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre {
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
overflow: auto;
|
||||||
|
-ms-overflow-style: scrollbar;
|
||||||
|
}
|
||||||
|
|
||||||
|
figure {
|
||||||
|
margin: 0 0 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
img {
|
||||||
|
vertical-align: middle;
|
||||||
|
border-style: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
svg:not(:root) {
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
table {
|
||||||
|
border-collapse: collapse;
|
||||||
|
}
|
||||||
|
|
||||||
|
caption {
|
||||||
|
padding-top: 0.75rem;
|
||||||
|
padding-bottom: 0.75rem;
|
||||||
|
color: #6c757d;
|
||||||
|
text-align: left;
|
||||||
|
caption-side: bottom;
|
||||||
|
}
|
||||||
|
|
||||||
|
th {
|
||||||
|
text-align: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
label {
|
||||||
|
display: inline-block;
|
||||||
|
margin-bottom: .5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
button {
|
||||||
|
border-radius: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
button:focus {
|
||||||
|
outline: 1px dotted;
|
||||||
|
outline: 5px auto -webkit-focus-ring-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
input,
|
||||||
|
button,
|
||||||
|
select,
|
||||||
|
optgroup,
|
||||||
|
textarea {
|
||||||
|
margin: 0;
|
||||||
|
font-family: inherit;
|
||||||
|
font-size: inherit;
|
||||||
|
line-height: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
button,
|
||||||
|
input {
|
||||||
|
overflow: visible;
|
||||||
|
}
|
||||||
|
|
||||||
|
button,
|
||||||
|
select {
|
||||||
|
text-transform: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
button,
|
||||||
|
html [type="button"],
|
||||||
|
[type="reset"],
|
||||||
|
[type="submit"] {
|
||||||
|
-webkit-appearance: button;
|
||||||
|
}
|
||||||
|
|
||||||
|
button::-moz-focus-inner,
|
||||||
|
[type="button"]::-moz-focus-inner,
|
||||||
|
[type="reset"]::-moz-focus-inner,
|
||||||
|
[type="submit"]::-moz-focus-inner {
|
||||||
|
padding: 0;
|
||||||
|
border-style: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type="radio"],
|
||||||
|
input[type="checkbox"] {
|
||||||
|
box-sizing: border-box;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type="date"],
|
||||||
|
input[type="time"],
|
||||||
|
input[type="datetime-local"],
|
||||||
|
input[type="month"] {
|
||||||
|
-webkit-appearance: listbox;
|
||||||
|
}
|
||||||
|
|
||||||
|
textarea {
|
||||||
|
overflow: auto;
|
||||||
|
resize: vertical;
|
||||||
|
}
|
||||||
|
|
||||||
|
fieldset {
|
||||||
|
min-width: 0;
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
border: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
legend {
|
||||||
|
display: block;
|
||||||
|
width: 100%;
|
||||||
|
max-width: 100%;
|
||||||
|
padding: 0;
|
||||||
|
margin-bottom: .5rem;
|
||||||
|
font-size: 1.5rem;
|
||||||
|
line-height: inherit;
|
||||||
|
color: inherit;
|
||||||
|
white-space: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
progress {
|
||||||
|
vertical-align: baseline;
|
||||||
|
}
|
||||||
|
|
||||||
|
[type="number"]::-webkit-inner-spin-button,
|
||||||
|
[type="number"]::-webkit-outer-spin-button {
|
||||||
|
height: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
[type="search"] {
|
||||||
|
outline-offset: -2px;
|
||||||
|
-webkit-appearance: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
[type="search"]::-webkit-search-cancel-button,
|
||||||
|
[type="search"]::-webkit-search-decoration {
|
||||||
|
-webkit-appearance: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
::-webkit-file-upload-button {
|
||||||
|
font: inherit;
|
||||||
|
-webkit-appearance: button;
|
||||||
|
}
|
||||||
|
|
||||||
|
output {
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
summary {
|
||||||
|
display: list-item;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
template {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
[hidden] {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
/*# sourceMappingURL=bootstrap-reboot.css.map */
|
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,8 @@
|
||||||
|
/*!
|
||||||
|
* Bootstrap Reboot v4.0.0 (https://getbootstrap.com)
|
||||||
|
* Copyright 2011-2018 The Bootstrap Authors
|
||||||
|
* Copyright 2011-2018 Twitter, Inc.
|
||||||
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||||
|
* Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)
|
||||||
|
*/*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:transparent}@-ms-viewport{width:device-width}article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent;-webkit-text-decoration-skip:objects}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg:not(:root){overflow:hidden}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}
|
||||||
|
/*# sourceMappingURL=bootstrap-reboot.min.css.map */
|
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,119 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>DAO & RowMapper Generator</title>
|
||||||
|
<link rel="stylesheet" href="./css/bootstrap.min.css">
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
min-height: 100vh;
|
||||||
|
}
|
||||||
|
[data-attribute-name] {
|
||||||
|
background: transparent;
|
||||||
|
padding: 0.25rem 0;
|
||||||
|
margin-bottom: 0.25rem;
|
||||||
|
transition: background 0.15s ease-in-out;
|
||||||
|
}
|
||||||
|
[data-attribute-name]:hover {
|
||||||
|
background: rgba(0, 0, 0, 0.1);
|
||||||
|
}
|
||||||
|
[data-scroll-bottom] {
|
||||||
|
font-size: 4em;
|
||||||
|
display: block;
|
||||||
|
width: 60px;
|
||||||
|
height: 60px;
|
||||||
|
transform: rotate(90deg);
|
||||||
|
color: #fff;
|
||||||
|
background: #333;
|
||||||
|
border-radius: 5px;
|
||||||
|
line-height: 45px;
|
||||||
|
text-align: center;
|
||||||
|
position: fixed;
|
||||||
|
bottom: 30px;
|
||||||
|
right: 30px;
|
||||||
|
}
|
||||||
|
[data-scroll-bottom]:hover {
|
||||||
|
color: #fff;
|
||||||
|
text-decoration: none;
|
||||||
|
background: #222;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div class="container">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-sm my-4">
|
||||||
|
<ul class="nav nav-pills">
|
||||||
|
<li class="nav-item"><a href="index.html" class="nav-link">Schema Info</a></li>
|
||||||
|
<li class="nav-item"><a href="generate-daos-row-mapper.html" class="nav-link active">DAO Generator</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-sm">
|
||||||
|
<h2 class="mb-4">DAO & RowMapper Generator</h2>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<form class="form mb-4" data-schema-form>
|
||||||
|
<h5>Step 1: Enter Schema Credentials & Classpath</h5>
|
||||||
|
<div class="form-row">
|
||||||
|
<div class="form-group col-sm">
|
||||||
|
<label>DB Name</label>
|
||||||
|
<input type="text" class="form-control" value="inventory" data-db-name required>
|
||||||
|
</div>
|
||||||
|
<div class="form-group col-sm">
|
||||||
|
<label>Username</label>
|
||||||
|
<input type="text" class="form-control" value="utopia" data-db-user required>
|
||||||
|
</div>
|
||||||
|
<div class="form-group col-sm">
|
||||||
|
<label>Password</label>
|
||||||
|
<input type="password" class="form-control" value="Utopia01" data-db-password required>
|
||||||
|
</div>
|
||||||
|
<div class="form-group col-sm">
|
||||||
|
<label>Host</label>
|
||||||
|
<input type="text" class="form-control" value="192.168.90.97" data-db-host required>
|
||||||
|
</div>
|
||||||
|
<div class="form-group col-sm">
|
||||||
|
<label>Port</label>
|
||||||
|
<input type="text" class="form-control" value="3306" data-db-port required>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-row">
|
||||||
|
<div class="form-group col-sm">
|
||||||
|
<label>Classpath</label>
|
||||||
|
<input type="text" class="form-control" value="D:\Projects\UIND-git\utopia-industries-bare\target\classes\com\utopiaindustries\uind\model\inventory" data-class-path>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-row">
|
||||||
|
<div class="form-group col-sm">
|
||||||
|
<label>Base Package</label>
|
||||||
|
<input type="text" class="form-control" value="com.utopiaindustries.uind" data-base-package>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<button class="btn btn-primary" type="submit">Map Tables to POJOs</button>
|
||||||
|
</form>
|
||||||
|
<form class="form mb-5" data-generate-dao-form style="display: none;">
|
||||||
|
<h5>Step 2: Select Table-POJO Mapping</h5>
|
||||||
|
<div class="form-row">
|
||||||
|
<div class="col-sm form-group">
|
||||||
|
<label>DataSource Type</label>
|
||||||
|
<input type="text" class="form-control" value="NamedParameterJdbcTemplate" data-source-type required>
|
||||||
|
</div>
|
||||||
|
<div class="col-sm form-group">
|
||||||
|
<label>DataSource Name</label>
|
||||||
|
<input type="text" class="form-control" value="namedParameterJdbcTemplate" data-source-name required>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div data-mapping-area></div>
|
||||||
|
<button class="btn btn-primary" type="submit">Generate DAOs and RowMappers</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<a href="#" class="scroll-to-bottom" data-scroll-bottom>›</a>
|
||||||
|
|
||||||
|
<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
|
||||||
|
<!-- <script src="https://cdn.jsdelivr.net/npm/vue"></script> -->
|
||||||
|
<script src="./js/main.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,134 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>DAO & RowMapper Generator</title>
|
||||||
|
<link rel="stylesheet" href="./css/bootstrap.min.css">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div class="container">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-sm my-4">
|
||||||
|
<ul class="nav nav-pills">
|
||||||
|
<li class="nav-item"><a href="index.html" class="nav-link active">Schema Info</a></li>
|
||||||
|
<li class="nav-item"><a href="generate-daos-row-mapper.html" class="nav-link">DAO Generator</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-sm">
|
||||||
|
<h2 class="mb-4">Schema Definition</h2>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<form class="form" data-schema-form>
|
||||||
|
<div class="form-row">
|
||||||
|
<div class="form-group col-sm">
|
||||||
|
<label>DB Name</label>
|
||||||
|
<input type="text" class="form-control" value="inventory" data-db-name>
|
||||||
|
</div>
|
||||||
|
<div class="form-group col-sm">
|
||||||
|
<label>Username</label>
|
||||||
|
<input type="text" class="form-control" value="root" data-db-user>
|
||||||
|
</div>
|
||||||
|
<div class="form-group col-sm">
|
||||||
|
<label>Password</label>
|
||||||
|
<input type="password" class="form-control" value="qwerty" data-db-password>
|
||||||
|
</div>
|
||||||
|
<div class="form-group col-sm">
|
||||||
|
<label>Host</label>
|
||||||
|
<input type="text" class="form-control" value="localhost" data-db-host>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<button class="btn btn-primary">Get Schema Info</button>
|
||||||
|
</form>
|
||||||
|
<div class="bg-light p-3 mt-5" data-results></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
|
||||||
|
<script>
|
||||||
|
(async function( $ ) {
|
||||||
|
// caching dom elements
|
||||||
|
let $formDb = $( '[data-schema-form]' ),
|
||||||
|
$inputDbName = $( '[data-db-name]' ),
|
||||||
|
$inputDbUser = $( '[data-db-user]' ),
|
||||||
|
$inputDbPass = $( '[data-db-password]' ),
|
||||||
|
$inputDbHost = $( '[data-db-host]' ),
|
||||||
|
$inputClassPath = $( '[data-class-path]' ),
|
||||||
|
$containerResults = $( '[data-results]' );
|
||||||
|
|
||||||
|
// function to prepare html string
|
||||||
|
let showSchemaStr = function( schemaInfo ) {
|
||||||
|
let htmlStr = '<div>';
|
||||||
|
for ( table in schemaInfo ) {
|
||||||
|
htmlStr += '<div class="mb-3">';
|
||||||
|
htmlStr += `<h5>Table: ${table}</h5>`;
|
||||||
|
|
||||||
|
// console.log( schemaInfo[table] );
|
||||||
|
for ( column in schemaInfo[table] ) {
|
||||||
|
htmlStr += `<div><code>${column}: ${schemaInfo[table][column]}</code></div>`;
|
||||||
|
}
|
||||||
|
|
||||||
|
// query string
|
||||||
|
htmlStr += '<br />'
|
||||||
|
htmlStr += '<div><code>INSERT INTO %s (';
|
||||||
|
let columnCount = 0;
|
||||||
|
for ( column in schemaInfo[table] ) {
|
||||||
|
columnCount++;
|
||||||
|
htmlStr += `${column}`;
|
||||||
|
if ( columnCount < Object.keys( schemaInfo[table] ).length ) {
|
||||||
|
htmlStr += ', ';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
htmlStr += ') VALUES (';
|
||||||
|
columnCount = 0;
|
||||||
|
for ( column in schemaInfo[table] ) {
|
||||||
|
columnCount++;
|
||||||
|
htmlStr += `:${column}`;
|
||||||
|
if ( columnCount < Object.keys( schemaInfo[table] ).length ) {
|
||||||
|
htmlStr += ', ';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
htmlStr += ') ON DUPLICATE KEY UPDATE ';
|
||||||
|
columnCount = 0;
|
||||||
|
for ( column in schemaInfo[table] ) {
|
||||||
|
columnCount++;
|
||||||
|
if ( 'id' === column ) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
htmlStr += `${column} = :${column}`;
|
||||||
|
if ( columnCount < Object.keys( schemaInfo[table] ).length ) {
|
||||||
|
htmlStr += ', ';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
htmlStr += '</code></div>';
|
||||||
|
|
||||||
|
htmlStr += '</div><hr />';
|
||||||
|
}
|
||||||
|
|
||||||
|
htmlStr += '</div>';
|
||||||
|
return htmlStr;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
$formDb.on( 'submit', async function( e ) {
|
||||||
|
e.preventDefault();
|
||||||
|
|
||||||
|
let schemaInfo = await $.post( 'http://localhost:3001/get-schema-info', {
|
||||||
|
dbConfig: {
|
||||||
|
host: $inputDbHost.val(),
|
||||||
|
user: $inputDbUser.val(),
|
||||||
|
password: $inputDbPass.val(),
|
||||||
|
database: $inputDbName.val(),
|
||||||
|
insecureAuth: true
|
||||||
|
},
|
||||||
|
classpath: $inputClassPath.val()
|
||||||
|
} );
|
||||||
|
|
||||||
|
$containerResults.html( showSchemaStr( schemaInfo ) );
|
||||||
|
});
|
||||||
|
|
||||||
|
})( jQuery );
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,299 @@
|
||||||
|
(async function( $ ) {
|
||||||
|
/**
|
||||||
|
* global variables
|
||||||
|
*/
|
||||||
|
let tablePojoInfo = {};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* pascal case to underscore
|
||||||
|
*/
|
||||||
|
let pascalCaseToUnderscore = function( str ) {
|
||||||
|
return str.replace( /(?:^|\.?)([A-Z])/g, function ( x, y ){ return "_" + y.toLowerCase() }).replace( /^_/, "" );
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* caching dom elements
|
||||||
|
*/
|
||||||
|
let $body = $( 'body' ),
|
||||||
|
$formDb = $( '[data-schema-form]' ),
|
||||||
|
$inputDbName = $( '[data-db-name]' ),
|
||||||
|
$inputDbUser = $( '[data-db-user]' ),
|
||||||
|
$inputDbPass = $( '[data-db-password]' ),
|
||||||
|
$inputDbHost = $( '[data-db-host]' ),
|
||||||
|
$inputDbPort = $( '[data-db-port]' ),
|
||||||
|
$inputClassPath = $( '[data-class-path]' ),
|
||||||
|
$inputBasePackage = $( '[data-base-package]' ),
|
||||||
|
$inputDataSourceType = $( '[data-source-type]' ),
|
||||||
|
$inputDataSourceName = $( '[data-source-name]' ),
|
||||||
|
$formGenerateDAO = $( '[data-generate-dao-form]' ),
|
||||||
|
$btnScrollBottom = $( '[data-scroll-bottom]' );
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* populate table attribute options
|
||||||
|
*/
|
||||||
|
let populateTableAttributeOptions = function( table, modelProperty ) {
|
||||||
|
let str = '<option value="">PLEASE SELECT RESPECTIVE ATTRIBUTE</option>';
|
||||||
|
for ( attribute in tablePojoInfo.schemaInfo[table] ) {
|
||||||
|
let selected = ( attribute === pascalCaseToUnderscore( modelProperty ) ? "selected" : "" );
|
||||||
|
str += `<option value="${attribute}" data-attribute-type="${tablePojoInfo.schemaInfo[table][attribute]}" ${ selected }>${attribute}</option>`;
|
||||||
|
}
|
||||||
|
|
||||||
|
return str;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* populate table attributes on table select
|
||||||
|
*/
|
||||||
|
$body.on( 'change', '[data-select-table]', function( e ) {
|
||||||
|
let $selectTable = $( this ),
|
||||||
|
$row = $selectTable.closest( '[data-pojo-table-mapping]' ),
|
||||||
|
$attributesContainer = $row.find( '[data-attributes]' ),
|
||||||
|
$attributeSelects = $attributesContainer.find( '[data-table-attribute]' ),
|
||||||
|
table = $selectTable.val();
|
||||||
|
|
||||||
|
$row.attr( 'data-pojo-table-mapping', `${$row.attr('data-pojo')}:${table}` );
|
||||||
|
|
||||||
|
if ( table === '' ) {
|
||||||
|
// $attributesContainer.hide();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$attributeSelects.each(function() {
|
||||||
|
let $attributeSelect = $( this );
|
||||||
|
let modelProperty = $attributeSelect.closest( '[data-attribute-name]' ).attr( 'data-attribute-name' );
|
||||||
|
$attributeSelect.html( populateTableAttributeOptions( table, modelProperty ) );
|
||||||
|
});
|
||||||
|
|
||||||
|
// $attributesContainer.show();
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* show attributes if enabled
|
||||||
|
*/
|
||||||
|
$body.on( 'change', '[name="enabled"]', function( e ) {
|
||||||
|
let $checkboxEnabled = $( this ),
|
||||||
|
$containerAttributes = $checkboxEnabled.closest( '[data-pojo-table-mapping]' ).find( '[data-attributes]' );
|
||||||
|
|
||||||
|
if ( $checkboxEnabled.prop( 'checked' ) ) {
|
||||||
|
$containerAttributes.show();
|
||||||
|
} else {
|
||||||
|
$containerAttributes.hide();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* create map-tables-pojos payload
|
||||||
|
*/
|
||||||
|
let createMapTablesPojosPayload = function() {
|
||||||
|
return {
|
||||||
|
dbConfig: {
|
||||||
|
host: $inputDbHost.val(),
|
||||||
|
port: parseInt( $inputDbPort.val() ),
|
||||||
|
user: $inputDbUser.val(),
|
||||||
|
password: $inputDbPass.val(),
|
||||||
|
database: $inputDbName.val(),
|
||||||
|
insecureAuth: true
|
||||||
|
},
|
||||||
|
classpath: $inputClassPath.val()
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* function to generate option for each pojo
|
||||||
|
*/
|
||||||
|
let createTableOptions = function( pojo ) {
|
||||||
|
let str = '<option value="">Select Table</option>';
|
||||||
|
for ( table in tablePojoInfo.schemaInfo ) {
|
||||||
|
str += `<option value="${table}" ${ table === pascalCaseToUnderscore( pojo ) ? "selected" : "" }>${table}</option>`;
|
||||||
|
}
|
||||||
|
return str;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* function to create entries for attribute mapping
|
||||||
|
*/
|
||||||
|
let createAttributeMapping = function( pojo ) {
|
||||||
|
let str = '';
|
||||||
|
|
||||||
|
for ( attribute in tablePojoInfo.pojoInfo[pojo] ) {
|
||||||
|
str += `
|
||||||
|
<div class="form-row" data-attribute-name="${attribute}" data-attribute-type="${tablePojoInfo.pojoInfo[pojo][attribute]}">
|
||||||
|
<div class="col-sm-6">
|
||||||
|
<code>${attribute}</code>
|
||||||
|
</div>
|
||||||
|
<div class="col-sm-6">
|
||||||
|
<select class="form-control form-control-sm" data-table-attribute></select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
`;
|
||||||
|
}
|
||||||
|
|
||||||
|
return str;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* function to create rows for each table
|
||||||
|
*/
|
||||||
|
let createPojoRow = function( pojo ) {
|
||||||
|
let str = `
|
||||||
|
<div class="bg-light p-3 my-3" data-pojo-table-mapping="${pojo}:" data-pojo="${pojo}">
|
||||||
|
<div class="form-row">
|
||||||
|
<div class="form-group col-sm-6">
|
||||||
|
<h4>
|
||||||
|
<input type="checkbox" name="enabled" id="${pojo}" value="1" />
|
||||||
|
<label for="${pojo}"><code>${pojo}</code></label>
|
||||||
|
</h4>
|
||||||
|
</div>
|
||||||
|
<div class="form-group col-sm-6">
|
||||||
|
<select class="form-control" data-select-table>${createTableOptions( pojo )}</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div data-attributes style="display:none;">
|
||||||
|
${createAttributeMapping( pojo )}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
`;
|
||||||
|
return str;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* function to create html string for table-pojo mapping form
|
||||||
|
*/
|
||||||
|
let createTablePojoMappingHTMLStr = function( results ) {
|
||||||
|
let htmlStr = '';
|
||||||
|
// iterate over each table and get the string
|
||||||
|
for ( pojo in tablePojoInfo.pojoInfo ) {
|
||||||
|
htmlStr += createPojoRow( pojo );
|
||||||
|
}
|
||||||
|
return htmlStr;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* map table-pojo form submit
|
||||||
|
*/
|
||||||
|
$formDb.on( 'submit', async function( e ) {
|
||||||
|
e.preventDefault();
|
||||||
|
// hide mapping form
|
||||||
|
$formGenerateDAO.hide();
|
||||||
|
// send the request
|
||||||
|
tablePojoInfo = await $.post( 'http://localhost:3001/map-tables-pojos', createMapTablesPojosPayload() );
|
||||||
|
// show mapping form
|
||||||
|
$formGenerateDAO.show();
|
||||||
|
// create html string for mapping form
|
||||||
|
$formGenerateDAO.find( '[data-mapping-area]' ).html( createTablePojoMappingHTMLStr( tablePojoInfo ) );
|
||||||
|
// trigger change on all table selects
|
||||||
|
$( '[data-select-table]' ).each(function( i ) {
|
||||||
|
$( this ).trigger( 'change' );
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* function to prepare model package
|
||||||
|
*/
|
||||||
|
let prepareModelPackage = function() {
|
||||||
|
return $inputClassPath.val().replace( /\\/g, '.' ).split( 'classes.' )[1];
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* function to prepare pojo-table mapping
|
||||||
|
*/
|
||||||
|
let preparePojoTableMapping = function() {
|
||||||
|
let pojoTableMappingPayload = {};
|
||||||
|
pojoTableMappingPayload['dataSourceName'] = $inputDataSourceName.val();
|
||||||
|
pojoTableMappingPayload['dataSourceType'] = $inputDataSourceType.val();
|
||||||
|
pojoTableMappingPayload['databaseName'] = $inputDbName.val();
|
||||||
|
pojoTableMappingPayload['modelPackage'] = prepareModelPackage();
|
||||||
|
pojoTableMappingPayload['basePackage'] = $inputBasePackage.val();
|
||||||
|
pojoTableMappingPayload['pojoTableMapping'] = [];
|
||||||
|
|
||||||
|
$( '[data-pojo-table-mapping]' ).each(function() {
|
||||||
|
let $row = $( this ),
|
||||||
|
$checkboxEnabled = $row.find( '[name="enabled"]' ),
|
||||||
|
pojo = $row.attr( 'data-pojo' ),
|
||||||
|
table = $row.attr( 'data-pojo-table-mapping' ).split( ':' )[1];
|
||||||
|
|
||||||
|
if ( '' === table ) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( ! $checkboxEnabled.prop( 'checked' ) ) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let obj = {};
|
||||||
|
obj['pojoName'] = pojo;
|
||||||
|
obj['tableName'] = table;
|
||||||
|
obj['attributes'] = [];
|
||||||
|
|
||||||
|
$row.find( '[data-attributes] [data-attribute-name]' ).each(function() {
|
||||||
|
let attr = {};
|
||||||
|
let $attr = $( this );
|
||||||
|
attr['pojoAttribute'] = $attr.attr( 'data-attribute-name' );
|
||||||
|
attr['tableAttribute'] = $attr.find( '[data-table-attribute]' ).val();
|
||||||
|
attr['pojoAttributeType'] = $attr.attr( 'data-attribute-type' );
|
||||||
|
attr['tableAttributeType'] = $attr.find( '[data-table-attribute] option:selected' ).attr( 'data-attribute-type' );
|
||||||
|
if ( '' === attr['tableAttribute'] ) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
obj['attributes'].push( attr );
|
||||||
|
});
|
||||||
|
|
||||||
|
pojoTableMappingPayload['pojoTableMapping'].push( obj );
|
||||||
|
});
|
||||||
|
|
||||||
|
return pojoTableMappingPayload;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* generate dao-rowmapper form submit
|
||||||
|
*/
|
||||||
|
$formGenerateDAO.on( 'submit', async function( e ) {
|
||||||
|
e.preventDefault();
|
||||||
|
let payload = {
|
||||||
|
payload: preparePojoTableMapping()
|
||||||
|
};
|
||||||
|
let filesCreated = await $.post( 'http://localhost:3001/create-files', payload );
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* scroll to bottom
|
||||||
|
*/
|
||||||
|
$btnScrollBottom.on( 'click', function( e ) {
|
||||||
|
e.preventDefault();
|
||||||
|
$( 'html, body' ).animate({
|
||||||
|
scrollTop: $( document ).height()
|
||||||
|
}, 100 );
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
})( jQuery );
|
|
@ -0,0 +1,879 @@
|
||||||
|
{
|
||||||
|
"name": "dao-rowmapper-generator",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"lockfileVersion": 2,
|
||||||
|
"requires": true,
|
||||||
|
"packages": {
|
||||||
|
"": {
|
||||||
|
"name": "dao-rowmapper-generator",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"license": "ISC",
|
||||||
|
"dependencies": {
|
||||||
|
"concurrently": "^5.2.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/ansi-regex": {
|
||||||
|
"version": "4.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
|
||||||
|
"integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/ansi-styles": {
|
||||||
|
"version": "3.2.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
|
||||||
|
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
|
||||||
|
"dependencies": {
|
||||||
|
"color-convert": "^1.9.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/camelcase": {
|
||||||
|
"version": "5.3.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
|
||||||
|
"integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/chalk": {
|
||||||
|
"version": "2.4.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
|
||||||
|
"integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
|
||||||
|
"dependencies": {
|
||||||
|
"ansi-styles": "^3.2.1",
|
||||||
|
"escape-string-regexp": "^1.0.5",
|
||||||
|
"supports-color": "^5.3.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/chalk/node_modules/supports-color": {
|
||||||
|
"version": "5.5.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
|
||||||
|
"integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
|
||||||
|
"dependencies": {
|
||||||
|
"has-flag": "^3.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/cliui": {
|
||||||
|
"version": "5.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
|
||||||
|
"integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
|
||||||
|
"dependencies": {
|
||||||
|
"string-width": "^3.1.0",
|
||||||
|
"strip-ansi": "^5.2.0",
|
||||||
|
"wrap-ansi": "^5.1.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/color-convert": {
|
||||||
|
"version": "1.9.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
|
||||||
|
"integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
|
||||||
|
"dependencies": {
|
||||||
|
"color-name": "1.1.3"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/color-name": {
|
||||||
|
"version": "1.1.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
|
||||||
|
"integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
|
||||||
|
},
|
||||||
|
"node_modules/concurrently": {
|
||||||
|
"version": "5.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/concurrently/-/concurrently-5.2.0.tgz",
|
||||||
|
"integrity": "sha512-XxcDbQ4/43d6CxR7+iV8IZXhur4KbmEJk1CetVMUqCy34z9l0DkszbY+/9wvmSnToTej0SYomc2WSRH+L0zVJw==",
|
||||||
|
"dependencies": {
|
||||||
|
"chalk": "^2.4.2",
|
||||||
|
"date-fns": "^2.0.1",
|
||||||
|
"lodash": "^4.17.15",
|
||||||
|
"read-pkg": "^4.0.1",
|
||||||
|
"rxjs": "^6.5.2",
|
||||||
|
"spawn-command": "^0.0.2-1",
|
||||||
|
"supports-color": "^6.1.0",
|
||||||
|
"tree-kill": "^1.2.2",
|
||||||
|
"yargs": "^13.3.0"
|
||||||
|
},
|
||||||
|
"bin": {
|
||||||
|
"concurrently": "bin/concurrently.js"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=6.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/date-fns": {
|
||||||
|
"version": "2.14.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.14.0.tgz",
|
||||||
|
"integrity": "sha512-1zD+68jhFgDIM0rF05rcwYO8cExdNqxjq4xP1QKM60Q45mnO6zaMWB4tOzrIr4M4GSLntsKeE4c9Bdl2jhL/yw==",
|
||||||
|
"funding": {
|
||||||
|
"type": "opencollective",
|
||||||
|
"url": "https://opencollective.com/date-fns"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/decamelize": {
|
||||||
|
"version": "1.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
|
||||||
|
"integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.10.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/emoji-regex": {
|
||||||
|
"version": "7.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
|
||||||
|
"integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA=="
|
||||||
|
},
|
||||||
|
"node_modules/error-ex": {
|
||||||
|
"version": "1.3.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
|
||||||
|
"integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
|
||||||
|
"dependencies": {
|
||||||
|
"is-arrayish": "^0.2.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/escape-string-regexp": {
|
||||||
|
"version": "1.0.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
|
||||||
|
"integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.8.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/find-up": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
|
||||||
|
"integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
|
||||||
|
"dependencies": {
|
||||||
|
"locate-path": "^3.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/get-caller-file": {
|
||||||
|
"version": "2.0.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
|
||||||
|
"integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
|
||||||
|
"engines": {
|
||||||
|
"node": "6.* || 8.* || >= 10.*"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/has-flag": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
|
||||||
|
"integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/hosted-git-info": {
|
||||||
|
"version": "2.8.8",
|
||||||
|
"resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz",
|
||||||
|
"integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg=="
|
||||||
|
},
|
||||||
|
"node_modules/is-arrayish": {
|
||||||
|
"version": "0.2.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
|
||||||
|
"integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0="
|
||||||
|
},
|
||||||
|
"node_modules/is-fullwidth-code-point": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
|
||||||
|
"integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/json-parse-better-errors": {
|
||||||
|
"version": "1.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
|
||||||
|
"integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw=="
|
||||||
|
},
|
||||||
|
"node_modules/locate-path": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
|
||||||
|
"integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
|
||||||
|
"dependencies": {
|
||||||
|
"p-locate": "^3.0.0",
|
||||||
|
"path-exists": "^3.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/lodash": {
|
||||||
|
"version": "4.17.19",
|
||||||
|
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz",
|
||||||
|
"integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ=="
|
||||||
|
},
|
||||||
|
"node_modules/normalize-package-data": {
|
||||||
|
"version": "2.5.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
|
||||||
|
"integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
|
||||||
|
"dependencies": {
|
||||||
|
"hosted-git-info": "^2.1.4",
|
||||||
|
"resolve": "^1.10.0",
|
||||||
|
"semver": "2 || 3 || 4 || 5",
|
||||||
|
"validate-npm-package-license": "^3.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/p-limit": {
|
||||||
|
"version": "2.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
|
||||||
|
"integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
|
||||||
|
"dependencies": {
|
||||||
|
"p-try": "^2.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=6"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/sindresorhus"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/p-locate": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
|
||||||
|
"integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
|
||||||
|
"dependencies": {
|
||||||
|
"p-limit": "^2.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/p-try": {
|
||||||
|
"version": "2.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
|
||||||
|
"integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/parse-json": {
|
||||||
|
"version": "4.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
|
||||||
|
"integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
|
||||||
|
"dependencies": {
|
||||||
|
"error-ex": "^1.3.1",
|
||||||
|
"json-parse-better-errors": "^1.0.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/path-exists": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
|
||||||
|
"integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/path-parse": {
|
||||||
|
"version": "1.0.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
|
||||||
|
"integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw=="
|
||||||
|
},
|
||||||
|
"node_modules/pify": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
|
||||||
|
"integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/read-pkg": {
|
||||||
|
"version": "4.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-4.0.1.tgz",
|
||||||
|
"integrity": "sha1-ljYlN48+HE1IyFhytabsfV0JMjc=",
|
||||||
|
"dependencies": {
|
||||||
|
"normalize-package-data": "^2.3.2",
|
||||||
|
"parse-json": "^4.0.0",
|
||||||
|
"pify": "^3.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/require-directory": {
|
||||||
|
"version": "2.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
|
||||||
|
"integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.10.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/require-main-filename": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
|
||||||
|
"integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg=="
|
||||||
|
},
|
||||||
|
"node_modules/resolve": {
|
||||||
|
"version": "1.17.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz",
|
||||||
|
"integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==",
|
||||||
|
"dependencies": {
|
||||||
|
"path-parse": "^1.0.6"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/ljharb"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/rxjs": {
|
||||||
|
"version": "6.6.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.0.tgz",
|
||||||
|
"integrity": "sha512-3HMA8z/Oz61DUHe+SdOiQyzIf4tOx5oQHmMir7IZEu6TMqCLHT4LRcmNaUS0NwOz8VLvmmBduMsoaUvMaIiqzg==",
|
||||||
|
"dependencies": {
|
||||||
|
"tslib": "^1.9.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"npm": ">=2.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/semver": {
|
||||||
|
"version": "5.7.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
|
||||||
|
"integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
|
||||||
|
"bin": {
|
||||||
|
"semver": "bin/semver"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/set-blocking": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
|
||||||
|
"integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
|
||||||
|
},
|
||||||
|
"node_modules/spawn-command": {
|
||||||
|
"version": "0.0.2-1",
|
||||||
|
"resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz",
|
||||||
|
"integrity": "sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A="
|
||||||
|
},
|
||||||
|
"node_modules/spdx-correct": {
|
||||||
|
"version": "3.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz",
|
||||||
|
"integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==",
|
||||||
|
"dependencies": {
|
||||||
|
"spdx-expression-parse": "^3.0.0",
|
||||||
|
"spdx-license-ids": "^3.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/spdx-exceptions": {
|
||||||
|
"version": "2.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
|
||||||
|
"integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A=="
|
||||||
|
},
|
||||||
|
"node_modules/spdx-expression-parse": {
|
||||||
|
"version": "3.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
|
||||||
|
"integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
|
||||||
|
"dependencies": {
|
||||||
|
"spdx-exceptions": "^2.1.0",
|
||||||
|
"spdx-license-ids": "^3.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/spdx-license-ids": {
|
||||||
|
"version": "3.0.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz",
|
||||||
|
"integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q=="
|
||||||
|
},
|
||||||
|
"node_modules/string-width": {
|
||||||
|
"version": "3.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
|
||||||
|
"integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
|
||||||
|
"dependencies": {
|
||||||
|
"emoji-regex": "^7.0.1",
|
||||||
|
"is-fullwidth-code-point": "^2.0.0",
|
||||||
|
"strip-ansi": "^5.1.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/strip-ansi": {
|
||||||
|
"version": "5.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
|
||||||
|
"integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
|
||||||
|
"dependencies": {
|
||||||
|
"ansi-regex": "^4.1.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/supports-color": {
|
||||||
|
"version": "6.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
|
||||||
|
"integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
|
||||||
|
"dependencies": {
|
||||||
|
"has-flag": "^3.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/tree-kill": {
|
||||||
|
"version": "1.2.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz",
|
||||||
|
"integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==",
|
||||||
|
"bin": {
|
||||||
|
"tree-kill": "cli.js"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/tslib": {
|
||||||
|
"version": "1.13.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz",
|
||||||
|
"integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q=="
|
||||||
|
},
|
||||||
|
"node_modules/validate-npm-package-license": {
|
||||||
|
"version": "3.0.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
|
||||||
|
"integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
|
||||||
|
"dependencies": {
|
||||||
|
"spdx-correct": "^3.0.0",
|
||||||
|
"spdx-expression-parse": "^3.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/which-module": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
|
||||||
|
"integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho="
|
||||||
|
},
|
||||||
|
"node_modules/wrap-ansi": {
|
||||||
|
"version": "5.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
|
||||||
|
"integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
|
||||||
|
"dependencies": {
|
||||||
|
"ansi-styles": "^3.2.0",
|
||||||
|
"string-width": "^3.0.0",
|
||||||
|
"strip-ansi": "^5.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/y18n": {
|
||||||
|
"version": "4.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
|
||||||
|
"integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w=="
|
||||||
|
},
|
||||||
|
"node_modules/yargs": {
|
||||||
|
"version": "13.3.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz",
|
||||||
|
"integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==",
|
||||||
|
"dependencies": {
|
||||||
|
"cliui": "^5.0.0",
|
||||||
|
"find-up": "^3.0.0",
|
||||||
|
"get-caller-file": "^2.0.1",
|
||||||
|
"require-directory": "^2.1.1",
|
||||||
|
"require-main-filename": "^2.0.0",
|
||||||
|
"set-blocking": "^2.0.0",
|
||||||
|
"string-width": "^3.0.0",
|
||||||
|
"which-module": "^2.0.0",
|
||||||
|
"y18n": "^4.0.0",
|
||||||
|
"yargs-parser": "^13.1.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/yargs-parser": {
|
||||||
|
"version": "13.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz",
|
||||||
|
"integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==",
|
||||||
|
"dependencies": {
|
||||||
|
"camelcase": "^5.0.0",
|
||||||
|
"decamelize": "^1.2.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"ansi-regex": {
|
||||||
|
"version": "4.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
|
||||||
|
"integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg=="
|
||||||
|
},
|
||||||
|
"ansi-styles": {
|
||||||
|
"version": "3.2.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
|
||||||
|
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
|
||||||
|
"requires": {
|
||||||
|
"color-convert": "^1.9.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"camelcase": {
|
||||||
|
"version": "5.3.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
|
||||||
|
"integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="
|
||||||
|
},
|
||||||
|
"chalk": {
|
||||||
|
"version": "2.4.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
|
||||||
|
"integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
|
||||||
|
"requires": {
|
||||||
|
"ansi-styles": "^3.2.1",
|
||||||
|
"escape-string-regexp": "^1.0.5",
|
||||||
|
"supports-color": "^5.3.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"supports-color": {
|
||||||
|
"version": "5.5.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
|
||||||
|
"integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
|
||||||
|
"requires": {
|
||||||
|
"has-flag": "^3.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"cliui": {
|
||||||
|
"version": "5.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
|
||||||
|
"integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
|
||||||
|
"requires": {
|
||||||
|
"string-width": "^3.1.0",
|
||||||
|
"strip-ansi": "^5.2.0",
|
||||||
|
"wrap-ansi": "^5.1.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"color-convert": {
|
||||||
|
"version": "1.9.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
|
||||||
|
"integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
|
||||||
|
"requires": {
|
||||||
|
"color-name": "1.1.3"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"color-name": {
|
||||||
|
"version": "1.1.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
|
||||||
|
"integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
|
||||||
|
},
|
||||||
|
"concurrently": {
|
||||||
|
"version": "5.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/concurrently/-/concurrently-5.2.0.tgz",
|
||||||
|
"integrity": "sha512-XxcDbQ4/43d6CxR7+iV8IZXhur4KbmEJk1CetVMUqCy34z9l0DkszbY+/9wvmSnToTej0SYomc2WSRH+L0zVJw==",
|
||||||
|
"requires": {
|
||||||
|
"chalk": "^2.4.2",
|
||||||
|
"date-fns": "^2.0.1",
|
||||||
|
"lodash": "^4.17.15",
|
||||||
|
"read-pkg": "^4.0.1",
|
||||||
|
"rxjs": "^6.5.2",
|
||||||
|
"spawn-command": "^0.0.2-1",
|
||||||
|
"supports-color": "^6.1.0",
|
||||||
|
"tree-kill": "^1.2.2",
|
||||||
|
"yargs": "^13.3.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"date-fns": {
|
||||||
|
"version": "2.14.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.14.0.tgz",
|
||||||
|
"integrity": "sha512-1zD+68jhFgDIM0rF05rcwYO8cExdNqxjq4xP1QKM60Q45mnO6zaMWB4tOzrIr4M4GSLntsKeE4c9Bdl2jhL/yw=="
|
||||||
|
},
|
||||||
|
"decamelize": {
|
||||||
|
"version": "1.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
|
||||||
|
"integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
|
||||||
|
},
|
||||||
|
"emoji-regex": {
|
||||||
|
"version": "7.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
|
||||||
|
"integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA=="
|
||||||
|
},
|
||||||
|
"error-ex": {
|
||||||
|
"version": "1.3.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
|
||||||
|
"integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
|
||||||
|
"requires": {
|
||||||
|
"is-arrayish": "^0.2.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"escape-string-regexp": {
|
||||||
|
"version": "1.0.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
|
||||||
|
"integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
|
||||||
|
},
|
||||||
|
"find-up": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
|
||||||
|
"integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
|
||||||
|
"requires": {
|
||||||
|
"locate-path": "^3.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"get-caller-file": {
|
||||||
|
"version": "2.0.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
|
||||||
|
"integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="
|
||||||
|
},
|
||||||
|
"has-flag": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
|
||||||
|
"integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
|
||||||
|
},
|
||||||
|
"hosted-git-info": {
|
||||||
|
"version": "2.8.8",
|
||||||
|
"resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz",
|
||||||
|
"integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg=="
|
||||||
|
},
|
||||||
|
"is-arrayish": {
|
||||||
|
"version": "0.2.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
|
||||||
|
"integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0="
|
||||||
|
},
|
||||||
|
"is-fullwidth-code-point": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
|
||||||
|
"integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8="
|
||||||
|
},
|
||||||
|
"json-parse-better-errors": {
|
||||||
|
"version": "1.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
|
||||||
|
"integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw=="
|
||||||
|
},
|
||||||
|
"locate-path": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
|
||||||
|
"integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
|
||||||
|
"requires": {
|
||||||
|
"p-locate": "^3.0.0",
|
||||||
|
"path-exists": "^3.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"lodash": {
|
||||||
|
"version": "4.17.19",
|
||||||
|
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz",
|
||||||
|
"integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ=="
|
||||||
|
},
|
||||||
|
"normalize-package-data": {
|
||||||
|
"version": "2.5.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
|
||||||
|
"integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
|
||||||
|
"requires": {
|
||||||
|
"hosted-git-info": "^2.1.4",
|
||||||
|
"resolve": "^1.10.0",
|
||||||
|
"semver": "2 || 3 || 4 || 5",
|
||||||
|
"validate-npm-package-license": "^3.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"p-limit": {
|
||||||
|
"version": "2.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
|
||||||
|
"integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
|
||||||
|
"requires": {
|
||||||
|
"p-try": "^2.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"p-locate": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
|
||||||
|
"integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
|
||||||
|
"requires": {
|
||||||
|
"p-limit": "^2.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"p-try": {
|
||||||
|
"version": "2.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
|
||||||
|
"integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
|
||||||
|
},
|
||||||
|
"parse-json": {
|
||||||
|
"version": "4.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
|
||||||
|
"integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
|
||||||
|
"requires": {
|
||||||
|
"error-ex": "^1.3.1",
|
||||||
|
"json-parse-better-errors": "^1.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"path-exists": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
|
||||||
|
"integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU="
|
||||||
|
},
|
||||||
|
"path-parse": {
|
||||||
|
"version": "1.0.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
|
||||||
|
"integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw=="
|
||||||
|
},
|
||||||
|
"pify": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
|
||||||
|
"integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY="
|
||||||
|
},
|
||||||
|
"read-pkg": {
|
||||||
|
"version": "4.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-4.0.1.tgz",
|
||||||
|
"integrity": "sha1-ljYlN48+HE1IyFhytabsfV0JMjc=",
|
||||||
|
"requires": {
|
||||||
|
"normalize-package-data": "^2.3.2",
|
||||||
|
"parse-json": "^4.0.0",
|
||||||
|
"pify": "^3.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"require-directory": {
|
||||||
|
"version": "2.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
|
||||||
|
"integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I="
|
||||||
|
},
|
||||||
|
"require-main-filename": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
|
||||||
|
"integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg=="
|
||||||
|
},
|
||||||
|
"resolve": {
|
||||||
|
"version": "1.17.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz",
|
||||||
|
"integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==",
|
||||||
|
"requires": {
|
||||||
|
"path-parse": "^1.0.6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"rxjs": {
|
||||||
|
"version": "6.6.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.0.tgz",
|
||||||
|
"integrity": "sha512-3HMA8z/Oz61DUHe+SdOiQyzIf4tOx5oQHmMir7IZEu6TMqCLHT4LRcmNaUS0NwOz8VLvmmBduMsoaUvMaIiqzg==",
|
||||||
|
"requires": {
|
||||||
|
"tslib": "^1.9.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"semver": {
|
||||||
|
"version": "5.7.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
|
||||||
|
"integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
|
||||||
|
},
|
||||||
|
"set-blocking": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
|
||||||
|
"integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
|
||||||
|
},
|
||||||
|
"spawn-command": {
|
||||||
|
"version": "0.0.2-1",
|
||||||
|
"resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz",
|
||||||
|
"integrity": "sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A="
|
||||||
|
},
|
||||||
|
"spdx-correct": {
|
||||||
|
"version": "3.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz",
|
||||||
|
"integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==",
|
||||||
|
"requires": {
|
||||||
|
"spdx-expression-parse": "^3.0.0",
|
||||||
|
"spdx-license-ids": "^3.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"spdx-exceptions": {
|
||||||
|
"version": "2.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
|
||||||
|
"integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A=="
|
||||||
|
},
|
||||||
|
"spdx-expression-parse": {
|
||||||
|
"version": "3.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
|
||||||
|
"integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
|
||||||
|
"requires": {
|
||||||
|
"spdx-exceptions": "^2.1.0",
|
||||||
|
"spdx-license-ids": "^3.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"spdx-license-ids": {
|
||||||
|
"version": "3.0.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz",
|
||||||
|
"integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q=="
|
||||||
|
},
|
||||||
|
"string-width": {
|
||||||
|
"version": "3.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
|
||||||
|
"integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
|
||||||
|
"requires": {
|
||||||
|
"emoji-regex": "^7.0.1",
|
||||||
|
"is-fullwidth-code-point": "^2.0.0",
|
||||||
|
"strip-ansi": "^5.1.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"strip-ansi": {
|
||||||
|
"version": "5.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
|
||||||
|
"integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
|
||||||
|
"requires": {
|
||||||
|
"ansi-regex": "^4.1.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"supports-color": {
|
||||||
|
"version": "6.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
|
||||||
|
"integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
|
||||||
|
"requires": {
|
||||||
|
"has-flag": "^3.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tree-kill": {
|
||||||
|
"version": "1.2.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz",
|
||||||
|
"integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A=="
|
||||||
|
},
|
||||||
|
"tslib": {
|
||||||
|
"version": "1.13.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz",
|
||||||
|
"integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q=="
|
||||||
|
},
|
||||||
|
"validate-npm-package-license": {
|
||||||
|
"version": "3.0.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
|
||||||
|
"integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
|
||||||
|
"requires": {
|
||||||
|
"spdx-correct": "^3.0.0",
|
||||||
|
"spdx-expression-parse": "^3.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"which-module": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
|
||||||
|
"integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho="
|
||||||
|
},
|
||||||
|
"wrap-ansi": {
|
||||||
|
"version": "5.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
|
||||||
|
"integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
|
||||||
|
"requires": {
|
||||||
|
"ansi-styles": "^3.2.0",
|
||||||
|
"string-width": "^3.0.0",
|
||||||
|
"strip-ansi": "^5.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"y18n": {
|
||||||
|
"version": "4.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
|
||||||
|
"integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w=="
|
||||||
|
},
|
||||||
|
"yargs": {
|
||||||
|
"version": "13.3.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz",
|
||||||
|
"integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==",
|
||||||
|
"requires": {
|
||||||
|
"cliui": "^5.0.0",
|
||||||
|
"find-up": "^3.0.0",
|
||||||
|
"get-caller-file": "^2.0.1",
|
||||||
|
"require-directory": "^2.1.1",
|
||||||
|
"require-main-filename": "^2.0.0",
|
||||||
|
"set-blocking": "^2.0.0",
|
||||||
|
"string-width": "^3.0.0",
|
||||||
|
"which-module": "^2.0.0",
|
||||||
|
"y18n": "^4.0.0",
|
||||||
|
"yargs-parser": "^13.1.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"yargs-parser": {
|
||||||
|
"version": "13.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz",
|
||||||
|
"integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==",
|
||||||
|
"requires": {
|
||||||
|
"camelcase": "^5.0.0",
|
||||||
|
"decamelize": "^1.2.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,15 @@
|
||||||
|
{
|
||||||
|
"name": "dao-rowmapper-generator",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "",
|
||||||
|
"main": "index.js",
|
||||||
|
"scripts": {
|
||||||
|
"test": "echo \"Error: no test specified\" && exit 1",
|
||||||
|
"start": "concurrently \"nodemon ./server/index.js\" \"http-server ./client/ -p 8085 -c-1 -s\""
|
||||||
|
},
|
||||||
|
"author": "",
|
||||||
|
"license": "ISC",
|
||||||
|
"dependencies": {
|
||||||
|
"concurrently": "^5.2.0"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,131 @@
|
||||||
|
function capitalizeFirstLetter( string ) {
|
||||||
|
return string.charAt( 0 ).toUpperCase() + string.slice( 1 );
|
||||||
|
}
|
||||||
|
|
||||||
|
function lowerFirstLetter( string ) {
|
||||||
|
return string.charAt( 0 ).toLowerCase() + string.slice( 1 );
|
||||||
|
}
|
||||||
|
|
||||||
|
function prepareInsertQuery( attributes ) {
|
||||||
|
let columnCount = 0;
|
||||||
|
let str = 'INSERT INTO %s (';
|
||||||
|
for ( attribute of attributes ) {
|
||||||
|
columnCount++;
|
||||||
|
str += `${attribute.tableAttribute}`;
|
||||||
|
if ( columnCount < attributes.length ) {
|
||||||
|
str += ', ';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
str += ') VALUES (';
|
||||||
|
columnCount = 0;
|
||||||
|
for ( attribute of attributes ) {
|
||||||
|
columnCount++;
|
||||||
|
str += `:${attribute.tableAttribute}`;
|
||||||
|
if ( columnCount < attributes.length ) {
|
||||||
|
str += ', ';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
str += ') ON DUPLICATE KEY UPDATE ';
|
||||||
|
columnCount = 0;
|
||||||
|
for ( attribute of attributes ) {
|
||||||
|
columnCount++;
|
||||||
|
if ( 'id' === attribute.tableAttribute ) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
str += `${attribute.tableAttribute} = VALUES(${attribute.tableAttribute})`;
|
||||||
|
if ( columnCount < attributes.length ) {
|
||||||
|
str += ', ';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
|
||||||
|
function addParamValue( attributes, pojoName ) {
|
||||||
|
let str = '';
|
||||||
|
let i = 0;
|
||||||
|
let attrCount = Object.keys( attributes ).length;
|
||||||
|
for ( attribute of attributes ) {
|
||||||
|
i++
|
||||||
|
str += `.addValue( "${attribute.tableAttribute}", ${lowerFirstLetter(mapping.pojoName)}.get${capitalizeFirstLetter(attribute.pojoAttribute)}() )`;
|
||||||
|
if ( i < attrCount ) {
|
||||||
|
str += `\n\t\t\t`;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.createFileContent = function( mapping, payload ) {
|
||||||
|
return `import ${payload.modelPackage}.${mapping.pojoName};
|
||||||
|
import ${payload.basePackage}.util.KeyHolderFunctions;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
|
||||||
|
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
|
||||||
|
import org.springframework.jdbc.support.GeneratedKeyHolder;
|
||||||
|
import org.springframework.jdbc.support.KeyHolder;
|
||||||
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Repository
|
||||||
|
public class ${mapping.pojoName}DAO {
|
||||||
|
@Autowired
|
||||||
|
private ${payload.dataSourceType} ${payload.dataSourceName};
|
||||||
|
|
||||||
|
private final String TABLE_NAME = "${payload.databaseName}.${mapping.tableName}";
|
||||||
|
private final String SELECT_QUERY = String.format( "SELECT * FROM %s WHERE id = :id", TABLE_NAME );
|
||||||
|
private final String SELECT_ALL_QUERY = String.format( "SELECT * FROM %s ORDER BY id DESC", TABLE_NAME );
|
||||||
|
private final String DELETE_QUERY = String.format( "DELETE FROM %s WHERE id = :id", TABLE_NAME );
|
||||||
|
private final String INSERT_QUERY = String.format( "${prepareInsertQuery(mapping.attributes)}", TABLE_NAME );
|
||||||
|
|
||||||
|
// prepare query params
|
||||||
|
private MapSqlParameterSource prepareInsertQueryParams( ${mapping.pojoName} ${lowerFirstLetter(mapping.pojoName)} ) {
|
||||||
|
MapSqlParameterSource params = new MapSqlParameterSource();
|
||||||
|
params${addParamValue( mapping.attributes, mapping.pojoName )};
|
||||||
|
return params;
|
||||||
|
}
|
||||||
|
|
||||||
|
// find
|
||||||
|
public ${mapping.pojoName} find( long id ) {
|
||||||
|
MapSqlParameterSource params = new MapSqlParameterSource();
|
||||||
|
params.addValue( "id", id );
|
||||||
|
List<${mapping.pojoName}> ${lowerFirstLetter(mapping.pojoName)}s = ${payload.dataSourceName}.query( SELECT_QUERY, params, new ${mapping.pojoName}RowMapper() );
|
||||||
|
if ( ${lowerFirstLetter(mapping.pojoName)}s.size() > 0 ) {
|
||||||
|
return ${lowerFirstLetter(mapping.pojoName)}s.get( 0 );
|
||||||
|
} else {
|
||||||
|
return new ${mapping.pojoName}();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// find all
|
||||||
|
public List<${mapping.pojoName}> findAll() {
|
||||||
|
return ${payload.dataSourceName}.query( SELECT_ALL_QUERY, new ${mapping.pojoName}RowMapper() );
|
||||||
|
}
|
||||||
|
|
||||||
|
// save
|
||||||
|
public long save( ${mapping.pojoName} ${lowerFirstLetter(mapping.pojoName)} ) {
|
||||||
|
KeyHolder keyHolder = new GeneratedKeyHolder();
|
||||||
|
MapSqlParameterSource params = prepareInsertQueryParams( ${lowerFirstLetter(mapping.pojoName)} );
|
||||||
|
${payload.dataSourceName}.update( INSERT_QUERY, params, keyHolder );
|
||||||
|
return KeyHolderFunctions.getKey( ${lowerFirstLetter(mapping.pojoName)}.getId(), keyHolder );
|
||||||
|
}
|
||||||
|
|
||||||
|
// save all
|
||||||
|
public int[] saveAll( List<${mapping.pojoName}> ${lowerFirstLetter(mapping.pojoName)}s ) {
|
||||||
|
List<MapSqlParameterSource> batchArgs = new ArrayList<>();
|
||||||
|
for ( ${mapping.pojoName} ${lowerFirstLetter(mapping.pojoName)}: ${lowerFirstLetter(mapping.pojoName)}s ) {
|
||||||
|
MapSqlParameterSource params = prepareInsertQueryParams( ${lowerFirstLetter(mapping.pojoName)} );
|
||||||
|
batchArgs.add( params );
|
||||||
|
}
|
||||||
|
return ${payload.dataSourceName}.batchUpdate( INSERT_QUERY, batchArgs.toArray(new MapSqlParameterSource[${lowerFirstLetter(mapping.pojoName)}s.size()]) );
|
||||||
|
}
|
||||||
|
|
||||||
|
// delete
|
||||||
|
public boolean delete( long id ) {
|
||||||
|
MapSqlParameterSource params = new MapSqlParameterSource();
|
||||||
|
params.addValue( "id", id );
|
||||||
|
return ${payload.dataSourceName}.update( DELETE_QUERY, params ) > 0;
|
||||||
|
}
|
||||||
|
}`;
|
||||||
|
};
|
|
@ -0,0 +1,235 @@
|
||||||
|
/**
|
||||||
|
* require necessary packages
|
||||||
|
*/
|
||||||
|
const express = require( 'express' );
|
||||||
|
const app = express();
|
||||||
|
const cors = require( 'cors' );
|
||||||
|
const bodyParser = require( 'body-parser' );
|
||||||
|
const db = require( 'mysql-promise' )();
|
||||||
|
const { promisify } = require( 'util' );
|
||||||
|
const readdir = promisify( require('fs').readdir );
|
||||||
|
const writeFile = promisify( require( 'fs' ).writeFile );
|
||||||
|
const { JavaClassFileReader } = require('java-class-tools');
|
||||||
|
const dao = require( './dao' );
|
||||||
|
const rowMapper = require( './rowMapper' );
|
||||||
|
const port = '3001';
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* enable all cors and use body parser
|
||||||
|
*/
|
||||||
|
app.use( cors() );
|
||||||
|
app.use( bodyParser.json( {
|
||||||
|
limit: '50mb'
|
||||||
|
} ) );
|
||||||
|
app.use( bodyParser.urlencoded( {
|
||||||
|
extended: true,
|
||||||
|
limit: '50mb',
|
||||||
|
parameterLimit: 1000000
|
||||||
|
} ) );
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* datatypes
|
||||||
|
*/
|
||||||
|
let dataTypes = {
|
||||||
|
'Ljava/lang/String;': 'String',
|
||||||
|
'Ljava/lang/Long;': 'Long',
|
||||||
|
'Ljava/lang/Integer;': 'Integer',
|
||||||
|
'Ljava/math/BigInteger;': 'BigInteger',
|
||||||
|
'Ljava/math/BigDecimal;': 'BigDecimal',
|
||||||
|
'Ljava/lang/Double;': 'Double',
|
||||||
|
'Ljava/lang/Float;': 'Float',
|
||||||
|
'Ljava/lang/Boolean;': 'Boolean',
|
||||||
|
'Ljava/time/LocalDate;': 'LocalDate',
|
||||||
|
'Ljava/time/LocalDateTime;': 'LocalDateTime',
|
||||||
|
'Ljava/time/LocalTime;': 'LocalTime',
|
||||||
|
'J': 'long',
|
||||||
|
'I':'int',
|
||||||
|
'D':'double',
|
||||||
|
'F':'float',
|
||||||
|
'Z':'boolean',
|
||||||
|
'C':'char'
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* write file path
|
||||||
|
*/
|
||||||
|
const writeFileDir = `${__dirname}/files`;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* reader
|
||||||
|
*/
|
||||||
|
const reader = new JavaClassFileReader();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* utility functions
|
||||||
|
*/
|
||||||
|
// camel case to underscore
|
||||||
|
let camelCaseToUnderscore = function( str ) {
|
||||||
|
return str.replace( /(?:^|\.?)([A-Z])/g, function ( x, y ){ return "_" + y.toLowerCase() }).replace( /^_/, "" );
|
||||||
|
};
|
||||||
|
|
||||||
|
// query db for tables
|
||||||
|
let queryDbForTables = async function( req, db, dbName ) {
|
||||||
|
let tables = [];
|
||||||
|
|
||||||
|
// query for tables
|
||||||
|
let tableResults = await db.query( 'SHOW TABLES' );
|
||||||
|
for ( tableRow of tableResults[0] ) {
|
||||||
|
tables.push( tableRow[`Tables_in_${dbName}`] )
|
||||||
|
}
|
||||||
|
|
||||||
|
return tables;
|
||||||
|
};
|
||||||
|
|
||||||
|
// query a table for columns
|
||||||
|
let queryTableForColumns = async function( req, table, db, dbName ) {
|
||||||
|
|
||||||
|
let tableColumns = {};
|
||||||
|
let columnResults = await db.query( `DESCRIBE \`${dbName}\`.\`${table}\`` );
|
||||||
|
|
||||||
|
// iterate over columns
|
||||||
|
for ( column of columnResults[0] ) {
|
||||||
|
let columnType = '';
|
||||||
|
|
||||||
|
if ( column['Type'].indexOf( '(' ) > -1 ) {
|
||||||
|
columnType = column['Type'].split( '(' )[0].toUpperCase();
|
||||||
|
} else {
|
||||||
|
columnType = column['Type'].toUpperCase();
|
||||||
|
}
|
||||||
|
|
||||||
|
tableColumns[column['Field']] = columnType;
|
||||||
|
}
|
||||||
|
|
||||||
|
return tableColumns;
|
||||||
|
};
|
||||||
|
|
||||||
|
// get attributes of pojo
|
||||||
|
let getPOJOAttributes = async function( classpath, db ) {
|
||||||
|
// pojo info
|
||||||
|
let pojoInfo = {};
|
||||||
|
|
||||||
|
let files = await readdir( classpath );
|
||||||
|
files.forEach(async function( file ) {
|
||||||
|
try {
|
||||||
|
const javaFile = reader.read( classpath + '\\' + file );
|
||||||
|
let pojoName = file.replace( '.class', '' );
|
||||||
|
|
||||||
|
pojoInfo[pojoName] = {};
|
||||||
|
|
||||||
|
javaFile.fields.forEach(function ( entry ) {
|
||||||
|
// Get method name & descriptor from constant_pool
|
||||||
|
let nameCpEntry = javaFile.constant_pool[entry.name_index];
|
||||||
|
let descriptorCpEntry = javaFile.constant_pool[entry.descriptor_index];
|
||||||
|
|
||||||
|
// Convert to string
|
||||||
|
let name = String.fromCharCode.apply( null, nameCpEntry.bytes );
|
||||||
|
let descriptor = String.fromCharCode.apply( null, descriptorCpEntry.bytes );
|
||||||
|
|
||||||
|
pojoInfo[pojoName][name] = dataTypes[descriptor];
|
||||||
|
});
|
||||||
|
} catch ( e ) {
|
||||||
|
console.log( e );
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return pojoInfo;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* get schema info
|
||||||
|
*/
|
||||||
|
app.post( '/get-schema-info', async function( req, res ) {
|
||||||
|
// schema info
|
||||||
|
let schemaInfo = {};
|
||||||
|
|
||||||
|
// connection properties
|
||||||
|
let connectionProperties = req.body.dbConfig;
|
||||||
|
let dbName = connectionProperties.database;
|
||||||
|
|
||||||
|
// create connection
|
||||||
|
db.configure( connectionProperties );
|
||||||
|
|
||||||
|
// query for tables
|
||||||
|
let tables = await queryDbForTables( req, db, dbName );
|
||||||
|
|
||||||
|
// query for table columns
|
||||||
|
for ( table of tables ) {
|
||||||
|
schemaInfo[table] = await queryTableForColumns( req, table, db, dbName );
|
||||||
|
}
|
||||||
|
|
||||||
|
res.json( schemaInfo );
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* map table and pojos
|
||||||
|
*/
|
||||||
|
app.post( '/map-tables-pojos', async function( req, res ) {
|
||||||
|
try {
|
||||||
|
// let table-pojo map
|
||||||
|
let tablePojoInfo = {};
|
||||||
|
|
||||||
|
// schema info
|
||||||
|
tablePojoInfo['schemaInfo'] = {};
|
||||||
|
|
||||||
|
// pojo info
|
||||||
|
tablePojoInfo['pojoInfo'] = {};
|
||||||
|
|
||||||
|
// connection properties
|
||||||
|
let connectionProperties = req.body.dbConfig;
|
||||||
|
let dbName = connectionProperties.database;
|
||||||
|
|
||||||
|
// create connection
|
||||||
|
db.configure( connectionProperties );
|
||||||
|
|
||||||
|
// query for tables
|
||||||
|
let tables = await queryDbForTables( req, db, dbName );
|
||||||
|
|
||||||
|
// query for table columns
|
||||||
|
for ( table of tables ) {
|
||||||
|
tablePojoInfo['schemaInfo'][table] = await queryTableForColumns( req, table, db, dbName );
|
||||||
|
}
|
||||||
|
|
||||||
|
// get class attributes
|
||||||
|
tablePojoInfo['pojoInfo'] = await getPOJOAttributes( req.body.classpath, db );
|
||||||
|
|
||||||
|
res.json( tablePojoInfo );
|
||||||
|
} catch ( e ) {
|
||||||
|
console.log( e );
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* create files
|
||||||
|
*/
|
||||||
|
app.post( '/create-files', async function( req, res ) {
|
||||||
|
let payload = req.body.payload;
|
||||||
|
for ( mapping of payload.pojoTableMapping ) {
|
||||||
|
await writeFile( `${writeFileDir}/${mapping.pojoName}DAO.java`, dao.createFileContent( mapping, payload ) );
|
||||||
|
await writeFile( `${writeFileDir}/${mapping.pojoName}RowMapper.java`, rowMapper.createFileContent( mapping, payload ) );
|
||||||
|
}
|
||||||
|
res.status( 200 ).send( true );
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* start the app
|
||||||
|
*/
|
||||||
|
app.listen( port, function() {
|
||||||
|
console.log( `Listening on port: ${port}` );
|
||||||
|
});
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,20 @@
|
||||||
|
{
|
||||||
|
"name": "dao-rowmapper-generator",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "",
|
||||||
|
"main": "index.js",
|
||||||
|
"scripts": {
|
||||||
|
"test": "echo \"Error: no test specified\" && exit 1"
|
||||||
|
},
|
||||||
|
"author": "",
|
||||||
|
"license": "ISC",
|
||||||
|
"dependencies": {
|
||||||
|
"async": "^3.1.1",
|
||||||
|
"body-parser": "^1.19.0",
|
||||||
|
"cors": "^2.8.5",
|
||||||
|
"express": "^4.17.1",
|
||||||
|
"java-class-tools": "^1.3.2",
|
||||||
|
"mysql": "^2.18.1",
|
||||||
|
"mysql-promise": "^5.0.0"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,61 @@
|
||||||
|
const additionalTypeMapping = {
|
||||||
|
'LocalDate': 'Date',
|
||||||
|
'LocalTime': 'Time',
|
||||||
|
'LocalDateTime': 'Timestamp',
|
||||||
|
'BigDecimal': 'BigDecimal',
|
||||||
|
'BigInteger': 'BigInteger'
|
||||||
|
};
|
||||||
|
|
||||||
|
function capitalizeFirstLetter( string ) {
|
||||||
|
return string.charAt( 0 ).toUpperCase() + string.slice( 1 );
|
||||||
|
}
|
||||||
|
|
||||||
|
function lowerFirstLetter( string ) {
|
||||||
|
return string.charAt( 0 ).toLowerCase() + string.slice( 1 );
|
||||||
|
}
|
||||||
|
|
||||||
|
function isDateTimeAttribute( attributeType ) {
|
||||||
|
return ['LocalDate', 'LocalTime', 'LocalDateTime'].includes( attributeType );
|
||||||
|
}
|
||||||
|
|
||||||
|
function preparePojoSetters( mapping ) {
|
||||||
|
let str = '';
|
||||||
|
let i = 0;
|
||||||
|
let attrCount = Object.keys( mapping.attributes ).length;
|
||||||
|
for ( const attr of mapping.attributes ) {
|
||||||
|
i++
|
||||||
|
if ( Object.keys( additionalTypeMapping ).includes( attr.pojoAttributeType ) ) {
|
||||||
|
// null condition for date/time/datetime
|
||||||
|
if ( isDateTimeAttribute( attr.pojoAttributeType ) ) {
|
||||||
|
str += `if ( rs.get${additionalTypeMapping[attr.pojoAttributeType]}( "${attr.tableAttribute}" ) != null ) {\n\t\t`;
|
||||||
|
}
|
||||||
|
str += `${lowerFirstLetter( mapping.pojoName )}.set${capitalizeFirstLetter(attr.pojoAttribute)}( rs.get${additionalTypeMapping[attr.pojoAttributeType]}( "${attr.tableAttribute}" ).to${attr.pojoAttributeType}() );`;
|
||||||
|
// null condition for date/time/datetime
|
||||||
|
if ( isDateTimeAttribute( attr.pojoAttributeType ) ) {
|
||||||
|
str += `\n\t}`;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
str += `${lowerFirstLetter( mapping.pojoName )}.set${capitalizeFirstLetter(attr.pojoAttribute)}( rs.get${capitalizeFirstLetter(attr.pojoAttributeType)}( "${attr.tableAttribute}" ) );`;
|
||||||
|
}
|
||||||
|
if ( i < attrCount ) {
|
||||||
|
str += `\n\t`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.createFileContent = function( mapping, payload ) {
|
||||||
|
return `import ${payload.modelPackage}.${mapping.pojoName};
|
||||||
|
import org.springframework.jdbc.core.RowMapper;
|
||||||
|
|
||||||
|
import java.sql.ResultSet;
|
||||||
|
import java.sql.SQLException;
|
||||||
|
|
||||||
|
public class ${mapping.pojoName}RowMapper implements RowMapper {
|
||||||
|
public ${mapping.pojoName} mapRow( ResultSet rs, int rowNum ) throws SQLException {
|
||||||
|
${mapping.pojoName} ${lowerFirstLetter( mapping.pojoName )} = new ${mapping.pojoName}();
|
||||||
|
${preparePojoSetters( mapping )}
|
||||||
|
return ${lowerFirstLetter( mapping.pojoName )};
|
||||||
|
}
|
||||||
|
}`;
|
||||||
|
};
|
Loading…
Reference in New Issue