go-duck-cli 1.2.11 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (226) hide show
  1. package/README.md +79 -0
  2. package/generators/ai_docs.js +22 -8
  3. package/generators/config.js +16 -8
  4. package/generators/devops.js +591 -1
  5. package/generators/postman.js +156 -6
  6. package/generators/security.js +2 -2
  7. package/go-duck-planner/css/bootstrap.min.css +6 -0
  8. package/go-duck-planner/css/main.css +1 -0
  9. package/go-duck-planner/favicon.ico +0 -0
  10. package/go-duck-planner/fonts/icomoonf33b-2.html +0 -0
  11. package/go-duck-planner/fonts/icomoonf33b-3.html +0 -0
  12. package/go-duck-planner/fonts/icomoonf33b-4.html +0 -0
  13. package/go-duck-planner/fonts/icomoonf33b.html +0 -0
  14. package/go-duck-planner/fonts/open-sans/OpenSans-Bold.html +0 -0
  15. package/go-duck-planner/fonts/open-sans/OpenSans-ExtraBold.html +0 -0
  16. package/go-duck-planner/fonts/open-sans/OpenSans-Light.html +0 -0
  17. package/go-duck-planner/fonts/open-sans/OpenSans-Regular.html +0 -0
  18. package/go-duck-planner/fonts/open-sans/OpenSans-SemiBold.html +0 -0
  19. package/go-duck-planner/fonts/rubik-mono/RubikMonoOne-Regular.html +0 -0
  20. package/go-duck-planner/fonts/style.css +2735 -0
  21. package/go-duck-planner/img/cancel.html +0 -0
  22. package/go-duck-planner/img/consulting.html +0 -0
  23. package/go-duck-planner/img/consulting2.html +0 -0
  24. package/go-duck-planner/img/dashed-circles-dark.html +0 -0
  25. package/go-duck-planner/img/docs/doc.html +0 -0
  26. package/go-duck-planner/img/docs/pdf.html +0 -0
  27. package/go-duck-planner/img/docs/ppt.html +0 -0
  28. package/go-duck-planner/img/docs/xls.html +0 -0
  29. package/go-duck-planner/img/docs/zip.html +0 -0
  30. package/go-duck-planner/img/empty-chat-display.html +0 -0
  31. package/go-duck-planner/img/error-screen/stars.html +0 -0
  32. package/go-duck-planner/img/fav.png +0 -0
  33. package/go-duck-planner/img/flags/1x1/au.html +0 -0
  34. package/go-duck-planner/img/flags/1x1/br.html +0 -0
  35. package/go-duck-planner/img/flags/1x1/bv.html +131 -0
  36. package/go-duck-planner/img/flags/1x1/ca.html +0 -0
  37. package/go-duck-planner/img/flags/1x1/cw.html +131 -0
  38. package/go-duck-planner/img/flags/1x1/eu.html +131 -0
  39. package/go-duck-planner/img/flags/1x1/hn.html +131 -0
  40. package/go-duck-planner/img/flags/1x1/in.html +0 -0
  41. package/go-duck-planner/img/flags/1x1/ni.html +131 -0
  42. package/go-duck-planner/img/flags/1x1/se.html +131 -0
  43. package/go-duck-planner/img/flags/1x1/za.html +131 -0
  44. package/go-duck-planner/img/folder.html +0 -0
  45. package/go-duck-planner/img/followers.html +0 -0
  46. package/go-duck-planner/img/food/biscuit.html +0 -0
  47. package/go-duck-planner/img/food/cupcake.html +0 -0
  48. package/go-duck-planner/img/food/donut.html +0 -0
  49. package/go-duck-planner/img/food/ice-cream.html +0 -0
  50. package/go-duck-planner/img/food/pizza.html +0 -0
  51. package/go-duck-planner/img/food/tea-cup.html +0 -0
  52. package/go-duck-planner/img/hover-on-tabs.html +0 -0
  53. package/go-duck-planner/img/icon-search.html +0 -0
  54. package/go-duck-planner/img/lines-bg.html +0 -0
  55. package/go-duck-planner/img/lines-bg2.html +0 -0
  56. package/go-duck-planner/img/login-bg.html +0 -0
  57. package/go-duck-planner/img/logo-compact.html +0 -0
  58. package/go-duck-planner/img/logo-large.html +0 -0
  59. package/go-duck-planner/img/logo.png +0 -0
  60. package/go-duck-planner/img/logo.svg +19 -0
  61. package/go-duck-planner/img/pattern.html +0 -0
  62. package/go-duck-planner/img/products/bag.html +0 -0
  63. package/go-duck-planner/img/products/camera.html +0 -0
  64. package/go-duck-planner/img/products/clock.html +0 -0
  65. package/go-duck-planner/img/products/drone.html +0 -0
  66. package/go-duck-planner/img/products/pencils.html +0 -0
  67. package/go-duck-planner/img/products/ring.html +0 -0
  68. package/go-duck-planner/img/products/shirt.html +0 -0
  69. package/go-duck-planner/img/products/shoes.html +0 -0
  70. package/go-duck-planner/img/products/toy.html +0 -0
  71. package/go-duck-planner/img/realestate/img1.html +0 -0
  72. package/go-duck-planner/img/realestate/img10.html +0 -0
  73. package/go-duck-planner/img/realestate/img11.html +0 -0
  74. package/go-duck-planner/img/realestate/img12.html +0 -0
  75. package/go-duck-planner/img/realestate/img2.html +0 -0
  76. package/go-duck-planner/img/realestate/img3.html +0 -0
  77. package/go-duck-planner/img/realestate/img4.html +0 -0
  78. package/go-duck-planner/img/realestate/img5.html +0 -0
  79. package/go-duck-planner/img/realestate/img6.html +0 -0
  80. package/go-duck-planner/img/realestate/img7.html +0 -0
  81. package/go-duck-planner/img/realestate/img8.html +0 -0
  82. package/go-duck-planner/img/realestate/img9.html +0 -0
  83. package/go-duck-planner/img/shade.html +0 -0
  84. package/go-duck-planner/img/stock/img1.html +0 -0
  85. package/go-duck-planner/img/stock/img10.html +0 -0
  86. package/go-duck-planner/img/stock/img11.html +0 -0
  87. package/go-duck-planner/img/stock/img12.html +0 -0
  88. package/go-duck-planner/img/stock/img13.html +0 -0
  89. package/go-duck-planner/img/stock/img14.html +0 -0
  90. package/go-duck-planner/img/stock/img2.html +0 -0
  91. package/go-duck-planner/img/stock/img3.html +0 -0
  92. package/go-duck-planner/img/stock/img4.html +0 -0
  93. package/go-duck-planner/img/stock/img5.html +0 -0
  94. package/go-duck-planner/img/stock/img6.html +0 -0
  95. package/go-duck-planner/img/stock/img7.html +0 -0
  96. package/go-duck-planner/img/stock/img8.html +0 -0
  97. package/go-duck-planner/img/stock/img9.html +0 -0
  98. package/go-duck-planner/img/svg/box.html +0 -0
  99. package/go-duck-planner/img/svg/commisions.html +0 -0
  100. package/go-duck-planner/img/svg/customer.html +0 -0
  101. package/go-duck-planner/img/svg/income.html +0 -0
  102. package/go-duck-planner/img/trophy.html +0 -0
  103. package/go-duck-planner/img/user-2.html +0 -0
  104. package/go-duck-planner/img/user.html +0 -0
  105. package/go-duck-planner/img/user1.html +0 -0
  106. package/go-duck-planner/img/user10.html +0 -0
  107. package/go-duck-planner/img/user12.html +0 -0
  108. package/go-duck-planner/img/user13.html +0 -0
  109. package/go-duck-planner/img/user14.html +0 -0
  110. package/go-duck-planner/img/user15.html +0 -0
  111. package/go-duck-planner/img/user16.html +0 -0
  112. package/go-duck-planner/img/user17.html +0 -0
  113. package/go-duck-planner/img/user18.html +0 -0
  114. package/go-duck-planner/img/user19.html +0 -0
  115. package/go-duck-planner/img/user2.html +0 -0
  116. package/go-duck-planner/img/user20.html +0 -0
  117. package/go-duck-planner/img/user21.html +0 -0
  118. package/go-duck-planner/img/user22.html +0 -0
  119. package/go-duck-planner/img/user23.html +0 -0
  120. package/go-duck-planner/img/user24.html +0 -0
  121. package/go-duck-planner/img/user3.html +0 -0
  122. package/go-duck-planner/img/user4.html +0 -0
  123. package/go-duck-planner/img/user5.html +0 -0
  124. package/go-duck-planner/img/user6.html +0 -0
  125. package/go-duck-planner/img/user7.html +0 -0
  126. package/go-duck-planner/img/user8.html +0 -0
  127. package/go-duck-planner/img/user9.html +0 -0
  128. package/go-duck-planner/index.html +30 -0
  129. package/go-duck-planner/js/bootstrap.bundle.min.html +0 -0
  130. package/go-duck-planner/js/jquery.min.html +0 -0
  131. package/go-duck-planner/js/main.html +0 -0
  132. package/go-duck-planner/js/modernizr.html +0 -0
  133. package/go-duck-planner/js/moment.html +0 -0
  134. package/go-duck-planner/main-HHOZYGRI.js +47 -0
  135. package/go-duck-planner/styles-3LK4NBNX.css +1 -0
  136. package/go-duck-planner/vendor/apex/apexcharts.min.html +0 -0
  137. package/go-duck-planner/vendor/apex/custom/analytics/byChannelGraph.html +0 -0
  138. package/go-duck-planner/vendor/apex/custom/analytics/byCountryGraph.html +0 -0
  139. package/go-duck-planner/vendor/apex/custom/analytics/byDeviceGraph.html +0 -0
  140. package/go-duck-planner/vendor/apex/custom/analytics/ordersGraph.html +0 -0
  141. package/go-duck-planner/vendor/apex/custom/analytics/targets.html +0 -0
  142. package/go-duck-planner/vendor/apex/custom/crm/sales.html +0 -0
  143. package/go-duck-planner/vendor/apex/custom/crm/sparkline-graphs.html +0 -0
  144. package/go-duck-planner/vendor/apex/custom/home/customersGraph.html +0 -0
  145. package/go-duck-planner/vendor/apex/custom/home/earningsGraph.html +0 -0
  146. package/go-duck-planner/vendor/apex/custom/home/ordersGraph.html +0 -0
  147. package/go-duck-planner/vendor/apex/custom/home/salesGraph.html +0 -0
  148. package/go-duck-planner/vendor/apex/custom/home/sparkline.html +0 -0
  149. package/go-duck-planner/vendor/apex/custom/home/visitorsGraph.html +0 -0
  150. package/go-duck-planner/vendor/apex/custom/profile/revenue.html +0 -0
  151. package/go-duck-planner/vendor/apex/custom/reports/orders.html +0 -0
  152. package/go-duck-planner/vendor/apex/custom/reports/revenue.html +0 -0
  153. package/go-duck-planner/vendor/apex/custom/reports/sales.html +0 -0
  154. package/go-duck-planner/vendor/apex/custom/reports/sales2.html +0 -0
  155. package/go-duck-planner/vendor/apex/custom/reports/sparkline.html +0 -0
  156. package/go-duck-planner/vendor/apex/custom/saas/revenue.html +0 -0
  157. package/go-duck-planner/vendor/apex/custom/saas/sales.html +0 -0
  158. package/go-duck-planner/vendor/apex/custom/sales/revenue.html +0 -0
  159. package/go-duck-planner/vendor/apex/custom/sales/tickets.html +0 -0
  160. package/go-duck-planner/vendor/bs-select/bs-select-custom.html +0 -0
  161. package/go-duck-planner/vendor/bs-select/bs-select.html +0 -0
  162. package/go-duck-planner/vendor/bs-select/bs-select.min.html +0 -0
  163. package/go-duck-planner/vendor/calendar/css/custom.html +0 -0
  164. package/go-duck-planner/vendor/calendar/css/main.min.html +0 -0
  165. package/go-duck-planner/vendor/calendar/custom/custom-schedule-calendar.html +0 -0
  166. package/go-duck-planner/vendor/calendar/custom/daygrid-calendar.html +0 -0
  167. package/go-duck-planner/vendor/calendar/custom/draggable-calendar.html +0 -0
  168. package/go-duck-planner/vendor/calendar/custom/google-view-calendar.html +0 -0
  169. package/go-duck-planner/vendor/calendar/custom/list-view-calendar.html +0 -0
  170. package/go-duck-planner/vendor/calendar/custom/selectable-calendar.html +0 -0
  171. package/go-duck-planner/vendor/calendar/js/main.min.html +0 -0
  172. package/go-duck-planner/vendor/circliful/circliful.custom.html +0 -0
  173. package/go-duck-planner/vendor/circliful/circliful.min.html +0 -0
  174. package/go-duck-planner/vendor/datatables/buttons.bs.html +0 -0
  175. package/go-duck-planner/vendor/datatables/buttons.min.html +0 -0
  176. package/go-duck-planner/vendor/datatables/buttons.print.min.html +0 -0
  177. package/go-duck-planner/vendor/datatables/custom/custom-datatables.html +0 -0
  178. package/go-duck-planner/vendor/datatables/dataTables.bootstrap.min.html +0 -0
  179. package/go-duck-planner/vendor/datatables/dataTables.bs4-custom.html +0 -0
  180. package/go-duck-planner/vendor/datatables/dataTables.bs4.html +0 -0
  181. package/go-duck-planner/vendor/datatables/dataTables.min.html +0 -0
  182. package/go-duck-planner/vendor/datatables/html5.min.html +0 -0
  183. package/go-duck-planner/vendor/datatables/jszip.min.html +0 -0
  184. package/go-duck-planner/vendor/datatables/pdfmake.min.html +0 -0
  185. package/go-duck-planner/vendor/datatables/vfs_fonts.html +0 -0
  186. package/go-duck-planner/vendor/daterange/custom-daterange.html +0 -0
  187. package/go-duck-planner/vendor/daterange/daterange-2.html +0 -0
  188. package/go-duck-planner/vendor/daterange/daterange.html +0 -0
  189. package/go-duck-planner/vendor/dropzone/dropzone.min-2.html +0 -0
  190. package/go-duck-planner/vendor/dropzone/dropzone.min.html +0 -0
  191. package/go-duck-planner/vendor/gallery/baguetteBox.html +0 -0
  192. package/go-duck-planner/vendor/gallery/custom-gallery.html +0 -0
  193. package/go-duck-planner/vendor/gallery/gallery.html +0 -0
  194. package/go-duck-planner/vendor/gallery/plugins.html +0 -0
  195. package/go-duck-planner/vendor/input-tags/tagsinput-custom.html +0 -0
  196. package/go-duck-planner/vendor/input-tags/tagsinput.html +0 -0
  197. package/go-duck-planner/vendor/input-tags/tagsinput.min.html +0 -0
  198. package/go-duck-planner/vendor/input-tags/typeahead.html +0 -0
  199. package/go-duck-planner/vendor/megamenu/css/megamenu.css +591 -0
  200. package/go-duck-planner/vendor/megamenu/js/custom.html +0 -0
  201. package/go-duck-planner/vendor/megamenu/js/megamenu.html +0 -0
  202. package/go-duck-planner/vendor/rating/raty-custom.html +0 -0
  203. package/go-duck-planner/vendor/rating/raty.html +0 -0
  204. package/go-duck-planner/vendor/search-filter/custom-search-filter.css +122 -0
  205. package/go-duck-planner/vendor/search-filter/custom-search-filter.html +0 -0
  206. package/go-duck-planner/vendor/search-filter/search-filter.css +497 -0
  207. package/go-duck-planner/vendor/search-filter/search-filter.html +0 -0
  208. package/go-duck-planner/vendor/slimscroll/custom-scrollbar.html +0 -0
  209. package/go-duck-planner/vendor/slimscroll/slimscroll.min.html +0 -0
  210. package/go-duck-planner/vendor/summernote/summernote-bs4-2.html +0 -0
  211. package/go-duck-planner/vendor/summernote/summernote-bs4.html +0 -0
  212. package/go-duck-planner/vendor/wizard/jquery.steps.custom.html +0 -0
  213. package/go-duck-planner/vendor/wizard/jquery.steps.html +0 -0
  214. package/go-duck-planner/vendor/wizard/jquery.steps.min.html +0 -0
  215. package/index.js +98 -9
  216. package/package.json +1 -1
  217. package/parser/gdl.js +2 -0
  218. package/templates/docs/index.html.hbs +13 -1
  219. package/templates/docs/pages/cli.hbs +20 -4
  220. package/templates/docs/pages/gdl-annotations.hbs +17 -0
  221. package/templates/docs/pages/rest.hbs +21 -0
  222. package/templates/go/controller.go.hbs +107 -20
  223. package/templates/go/main.go.hbs +16 -2
  224. package/templates/go/router.go.hbs +8 -3
  225. package/templates/kratos/service.go.hbs +25 -2
  226. package/templates/proto/entity.proto.hbs +1 -0
@@ -0,0 +1,497 @@
1
+
2
+ /*
3
+ * # Semantic UI - 1.12.3
4
+ * https://github.com/Semantic-Org/Semantic-UI
5
+ * http://www.semantic-ui.com/
6
+ *
7
+ * Copyright 2014 Contributors
8
+ * Released under the MIT license
9
+ * http://opensource.org/licenses/MIT
10
+ *
11
+ */
12
+
13
+ /*!
14
+ * # Semantic UI - Search
15
+ * http://github.com/semantic-org/semantic-ui/
16
+ *
17
+ *
18
+ * Copyright 2014 Contributors
19
+ * Released under the MIT license
20
+ * http://opensource.org/licenses/MIT
21
+ *
22
+ */
23
+
24
+ /*******************************
25
+ Search
26
+ *******************************/
27
+
28
+ .ui.search {
29
+ position: relative;
30
+ }
31
+
32
+ .ui.search > .prompt {
33
+ margin: 0em;
34
+ outline: none;
35
+ -webkit-appearance: none;
36
+ -webkit-tap-highlight-color: rgba(255, 255, 255, 0);
37
+ text-shadow: none;
38
+ font-style: normal;
39
+ font-weight: normal;
40
+ line-height: 1.2;
41
+ padding: 0.68571em 1em;
42
+ font-size: .825rem;
43
+ background: #ffffff;
44
+ border: 1px solid rgba(39, 41, 43, 0.15);
45
+ color: rgba(0, 0, 0, 0.8);
46
+ box-shadow: 0em 0em 0em 0em transparent inset;
47
+ -webkit-transition: background-color 0.2s ease, color 0.2s ease, box-shadow 0.2s ease, border-color 0.2s ease;
48
+ transition: background-color 0.2s ease, color 0.2s ease, box-shadow 0.2s ease, border-color 0.2s ease;
49
+ }
50
+
51
+ .ui.search .prompt {
52
+ border-radius: 500rem;
53
+ }
54
+
55
+ /*--------------
56
+ Icon
57
+ ---------------*/
58
+
59
+ .ui.search .prompt ~ .search.icon {
60
+ cursor: pointer;
61
+ }
62
+
63
+ /*--------------
64
+ Results
65
+ ---------------*/
66
+
67
+ .ui.search > .results {
68
+ display: none;
69
+ position: absolute;
70
+ top: 100%;
71
+ left: 0%;
72
+ background: #ffffff;
73
+ margin-top: 0.5em;
74
+ width: 16em;
75
+ border-radius: 0.25em;
76
+ box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.2);
77
+ z-index: 998;
78
+ }
79
+
80
+ /*--------------
81
+ Result
82
+ ---------------*/
83
+
84
+ .ui.search > .results .result {
85
+ cursor: pointer;
86
+ display: block;
87
+ overflow: hidden;
88
+ font-size: 1em;
89
+ padding: 0.5em 1em;
90
+ color: rgba(0, 0, 0, 0.8);
91
+ line-height: 1.33;
92
+ border-bottom: 1px solid rgba(39, 41, 43, 0.15);
93
+ }
94
+
95
+ .ui.search > .results .result:last-child {
96
+ border-bottom: none;
97
+ }
98
+
99
+ /* Image */
100
+
101
+ .ui.search > .results .result .image {
102
+ float: right;
103
+ overflow: hidden;
104
+ background: none;
105
+ width: 5em;
106
+ height: 3em;
107
+ border-radius: 0.25em;
108
+ }
109
+
110
+ .ui.search > .results .result .image img {
111
+ display: block;
112
+ width: auto;
113
+ height: 100%;
114
+ }
115
+
116
+ /*--------------
117
+ Info
118
+ ---------------*/
119
+
120
+ .ui.search > .results .result .image + .content {
121
+ margin: 0em 6em 0em 0em;
122
+ }
123
+
124
+ .ui.search > .results .result .title {
125
+ font-size: .75rem;
126
+ }
127
+
128
+ .ui.search > .results .result .description {
129
+ margin-top: 0em;
130
+ font-size: .755rem;
131
+ color: rgba(0, 0, 0, 0.4);
132
+ }
133
+
134
+ .ui.search > .results .result .price {
135
+ float: right;
136
+ color: #5bbd72;
137
+ }
138
+
139
+ /*--------------
140
+ Message
141
+ ---------------*/
142
+
143
+ .ui.search > .results > .message {
144
+ padding: 1em 1em;
145
+ }
146
+
147
+ .ui.search > .results > .message .header {
148
+ font-size: .825rem;
149
+ color: #111111;
150
+ }
151
+
152
+ .ui.search > .results > .message .description {
153
+ margin-top: 15px;
154
+ font-size: 12px;
155
+ color: #5e6973;
156
+ }
157
+
158
+ /* View All Results */
159
+
160
+ .ui.search > .results > .action {
161
+ display: block;
162
+ border-top: none;
163
+ background: #f0f0f0;
164
+ padding: 0.5em 1em;
165
+ color: rgba(0, 0, 0, 0.8);
166
+ font-weight: bold;
167
+ text-align: center;
168
+ }
169
+
170
+ /*******************************
171
+ States
172
+ *******************************/
173
+
174
+ /*--------------------
175
+ Loading
176
+ ---------------------*/
177
+
178
+ .ui.loading.search .input > .icon:before {
179
+ position: absolute;
180
+ content: '';
181
+ top: 50%;
182
+ left: 50%;
183
+ margin: -0.64285em 0em 0em -0.64285em;
184
+ width: 1.2857em;
185
+ height: 1.2857em;
186
+ border-radius: 500rem;
187
+ border: 0.2em solid rgba(0, 0, 0, 0.1);
188
+ }
189
+
190
+ .ui.loading.search .input > .icon:after {
191
+ position: absolute;
192
+ content: '';
193
+ top: 50%;
194
+ left: 50%;
195
+ margin: -0.64285em 0em 0em -0.64285em;
196
+ width: 1.2857em;
197
+ height: 1.2857em;
198
+ -webkit-animation: button-spin 0.6s linear;
199
+ animation: button-spin 0.6s linear;
200
+ -webkit-animation-iteration-count: infinite;
201
+ animation-iteration-count: infinite;
202
+ border-radius: 500rem;
203
+ border-color: #aaaaaa transparent transparent;
204
+ border-style: solid;
205
+ border-width: 0.2em;
206
+ box-shadow: 0px 0px 0px 1px transparent;
207
+ }
208
+
209
+ /*--------------
210
+ Hover
211
+ ---------------*/
212
+
213
+ .ui.search > .results .result:hover,
214
+ .ui.category.search > .results .category .result:hover {
215
+ background: #e5f0ff;
216
+ }
217
+
218
+ .ui.search .action:hover {
219
+ background: #e0e0e0;
220
+ }
221
+
222
+ /*--------------
223
+ Active
224
+ ---------------*/
225
+
226
+ .ui.search > .results .category.active {
227
+ background: #f0f0f0;
228
+ }
229
+
230
+ .ui.search > .results .category.active > .name {
231
+ color: rgba(0, 0, 0, 0.8);
232
+ }
233
+
234
+ .ui.search > .results .result.active,
235
+ .ui.category.search > .results .category .result.active {
236
+ position: relative;
237
+ border-left-color: transparent;
238
+ background: #f0f0f0;
239
+ box-shadow: 3px 0px 3px 0px rgba(39, 41, 43, 0.15);
240
+ }
241
+
242
+ .ui.search > .results .result.active .title {
243
+ color: rgba(0, 0, 0, 0.85);
244
+ }
245
+
246
+ .ui.search > .results .result.active .description {
247
+ color: rgba(0, 0, 0, 0.85);
248
+ }
249
+
250
+ /*******************************
251
+ Types
252
+ *******************************/
253
+
254
+ /*--------------
255
+ Categories
256
+ ---------------*/
257
+
258
+ .ui.category.search .results {
259
+ width: 28em;
260
+ }
261
+
262
+ /* Category */
263
+
264
+ .ui.category.search > .results .category {
265
+ background: #ebf4ff;
266
+ box-shadow: none;
267
+ border-bottom: 1px solid #efeff7;
268
+ -webkit-transition: background 0.2s ease, border-color 0.2s ease;
269
+ transition: background 0.2s ease, border-color 0.2s ease;
270
+ }
271
+
272
+ .ui.category.search > .results .category:last-child {
273
+ border-bottom: none;
274
+ }
275
+
276
+ /* Category Result */
277
+
278
+ .ui.category.search > .results .category .result {
279
+ background: #ffffff;
280
+ margin-left: 120px;
281
+ border-left: 1px solid #dedeef;
282
+ border-bottom: 1px solid #ffffff;
283
+ -webkit-transition: background 0.2s ease, border-color 0.2s ease;
284
+ transition: background 0.2s ease, border-color 0.2s ease;
285
+ }
286
+
287
+ .ui.category.search > .results .category .result:last-child {
288
+ border-bottom: none;
289
+ }
290
+
291
+ /* Category Result Name */
292
+
293
+ .ui.category.search > .results .category > .name {
294
+ width: 120px;
295
+ background: #ebf4ff;
296
+ font-size: .725rem;
297
+ float: left;
298
+ padding: 0.5em 1em;
299
+ font-weight: 600;
300
+ color: #1273eb;
301
+ }
302
+
303
+ /*******************************
304
+ Variations
305
+ *******************************/
306
+
307
+ /*-------------------
308
+ Left / Right
309
+ --------------------*/
310
+
311
+ .ui[class*="left aligned"].search > .results {
312
+ right: auto;
313
+ left: 0%;
314
+ }
315
+
316
+ .ui[class*="right aligned"].search > .results {
317
+ right: 0%;
318
+ left: auto;
319
+ }
320
+
321
+ /*--------------
322
+ Fluid
323
+ ---------------*/
324
+
325
+ .ui.fluid.search .results {
326
+ width: 100%;
327
+ }
328
+
329
+ /*--------------
330
+ Sizes
331
+ ---------------*/
332
+
333
+ .ui.search {
334
+ font-size: 1em;
335
+ }
336
+
337
+ .ui.large.search {
338
+ font-size: 1.1em;
339
+ }
340
+
341
+ /*******************************
342
+ Theme Overrides
343
+ *******************************/
344
+
345
+ /*******************************
346
+ Site Overrides
347
+ *******************************/
348
+ /*
349
+ * # Semantic UI - 1.12.3
350
+ * https://github.com/Semantic-Org/Semantic-UI
351
+ * http://www.semantic-ui.com/
352
+ *
353
+ * Copyright 2014 Contributors
354
+ * Released under the MIT license
355
+ * http://opensource.org/licenses/MIT
356
+ *
357
+ */
358
+
359
+
360
+ /*!
361
+ * # Semantic UI - Transition
362
+ * http://github.com/semantic-org/semantic-ui/
363
+ *
364
+ *
365
+ * Copyright 2014 Contributorss
366
+ * Released under the MIT license
367
+ * http://opensource.org/licenses/MIT
368
+ *
369
+ */
370
+
371
+ /*******************************
372
+ Transitions
373
+ *******************************/
374
+
375
+ .transition {
376
+ -webkit-animation-iteration-count: 1;
377
+ animation-iteration-count: 1;
378
+ -webkit-animation-duration: 300ms;
379
+ animation-duration: 300ms;
380
+ -webkit-animation-timing-function: ease;
381
+ animation-timing-function: ease;
382
+ -webkit-animation-fill-mode: both;
383
+ animation-fill-mode: both;
384
+ }
385
+
386
+ /*******************************
387
+ States
388
+ *******************************/
389
+
390
+ /* Animating */
391
+
392
+ .animating.transition {
393
+ -webkit-backface-visibility: hidden;
394
+ backface-visibility: hidden;
395
+ -webkit-transform: translateZ(0);
396
+ transform: translateZ(0);
397
+ visibility: visible !important;
398
+ }
399
+
400
+ /* Loading */
401
+
402
+ .loading.transition {
403
+ position: absolute;
404
+ top: -99999px;
405
+ left: -99999px;
406
+ }
407
+
408
+ /* Hidden */
409
+
410
+ .hidden.transition {
411
+ display: none;
412
+ visibility: hidden;
413
+ }
414
+
415
+ /* Visible */
416
+
417
+ .visible.transition {
418
+ display: block !important;
419
+ visibility: visible !important;
420
+ -webkit-backface-visibility: hidden;
421
+ backface-visibility: hidden;
422
+ -webkit-transform: translateZ(0);
423
+ transform: translateZ(0);
424
+ }
425
+
426
+ /* Disabled */
427
+
428
+ .disabled.transition {
429
+ -webkit-animation-play-state: paused;
430
+ animation-play-state: paused;
431
+ }
432
+
433
+ /*******************************
434
+ Variations
435
+ *******************************/
436
+
437
+ .looping.transition {
438
+ -webkit-animation-iteration-count: infinite;
439
+ animation-iteration-count: infinite;
440
+ }
441
+
442
+ /*******************************
443
+ Transitions
444
+ *******************************/
445
+
446
+ /*
447
+ Some transitions adapted from Animate CSS
448
+ https://github.com/daneden/animate.css
449
+
450
+ Additional transitions adapted from Glide
451
+ by Nick Pettit - https://github.com/nickpettit/glide
452
+ */
453
+
454
+
455
+ /*--------------
456
+ Scale
457
+ ---------------*/
458
+
459
+ .scale.transition.in {
460
+ -webkit-animation-name: scaleIn;
461
+ animation-name: scaleIn;
462
+ }
463
+
464
+ .scale.transition.out {
465
+ -webkit-animation-name: scaleOut;
466
+ animation-name: scaleOut;
467
+ }
468
+
469
+ /* In */
470
+
471
+ @-webkit-keyframes scaleIn {
472
+ 0% {
473
+ opacity: 0;
474
+ -webkit-transform: scale(0.7);
475
+ transform: scale(0.7);
476
+ }
477
+
478
+ 100% {
479
+ opacity: 1;
480
+ -webkit-transform: scale(1);
481
+ transform: scale(1);
482
+ }
483
+ }
484
+
485
+ @keyframes scaleIn {
486
+ 0% {
487
+ opacity: 0;
488
+ -webkit-transform: scale(0.7);
489
+ transform: scale(0.7);
490
+ }
491
+
492
+ 100% {
493
+ opacity: 1;
494
+ -webkit-transform: scale(1);
495
+ transform: scale(1);
496
+ }
497
+ }
package/index.js CHANGED
@@ -357,7 +357,7 @@ const getPreviousEntities = async (outputDir) => {
357
357
  return entities;
358
358
  };
359
359
 
360
- const generateEntities = async (gdlPath, outputDir, config) => {
360
+ const generateEntities = async (gdlPath, outputDir, config, isImport = false) => {
361
361
  let entities = [];
362
362
  let relationships = [];
363
363
  let enums = [];
@@ -399,6 +399,47 @@ const generateEntities = async (gdlPath, outputDir, config) => {
399
399
  console.log(chalk.green(`āœ… Parsed ${entities.length} entities, ${relationships.length} relationships, ${enums.length} enums, and detected ${openEntities.length} open rules`));
400
400
 
401
401
  const previousEntities = await getPreviousEntities(outputDir);
402
+
403
+ // Any parsed entity with @Delete is mapped as a deletion
404
+ const deletedParsed = entities.filter(e => e.isDelete);
405
+
406
+ // Remove deleted entities from active entities array
407
+ entities = entities.filter(e => !e.isDelete);
408
+
409
+ // Filter out relationships & open rule entries that involve deleted entities
410
+ relationships = relationships.filter(rel =>
411
+ !deletedParsed.some(d => d.name === rel.from.entity || d.name === rel.to.entity)
412
+ );
413
+ openEntities = openEntities.filter(oe =>
414
+ !deletedParsed.some(d => d.name === oe.name)
415
+ );
416
+
417
+ if (isImport) {
418
+ for (const prev of previousEntities) {
419
+ if (!entities.some(e => e.name === prev.name) && !deletedParsed.some(d => d.name === prev.name)) {
420
+ entities.push(prev);
421
+ if (prev.relationships) {
422
+ for (const r of prev.relationships) {
423
+ const exists = relationships.some(rel =>
424
+ (rel.from.entity === r.from.entity && rel.from.field === r.from.field && rel.to.entity === r.to.entity && rel.to.field === r.to.field) ||
425
+ (rel.from.entity === r.to.entity && rel.from.field === r.to.field && rel.to.entity === r.from.entity && rel.to.field === r.from.field)
426
+ );
427
+ if (!exists) relationships.push(r);
428
+ }
429
+ }
430
+ if (prev.enums) {
431
+ for (const en of prev.enums) {
432
+ if (!enums.some(e => e.name === en.name)) enums.push(en);
433
+ }
434
+ }
435
+ if (prev.openEntities) {
436
+ for (const oe of prev.openEntities) {
437
+ if (!openEntities.some(o => o.name === oe.name)) openEntities.push(oe);
438
+ }
439
+ }
440
+ }
441
+ }
442
+ }
402
443
  const delta = {
403
444
  newEntities: [],
404
445
  newFields: {},
@@ -443,9 +484,18 @@ const generateEntities = async (gdlPath, outputDir, config) => {
443
484
  }
444
485
 
445
486
  // Check for deleted entities
446
- for (const prev of previousEntities) {
447
- if (!entities.some(e => e.name === prev.name)) {
448
- delta.deletedEntities.push(prev);
487
+ if (isImport) {
488
+ for (const d of deletedParsed) {
489
+ const prev = previousEntities.find(e => e.name === d.name);
490
+ if (prev) {
491
+ delta.deletedEntities.push(prev);
492
+ }
493
+ }
494
+ } else {
495
+ for (const prev of previousEntities) {
496
+ if (!entities.some(e => e.name === prev.name)) {
497
+ delta.deletedEntities.push(prev);
498
+ }
449
499
  }
450
500
  }
451
501
 
@@ -570,7 +620,7 @@ program
570
620
  if (await fs.pathExists(p)) await fs.remove(p);
571
621
  }
572
622
 
573
- await generateConfigLoader(absoluteOutputDir);
623
+ await generateConfigLoader(absoluteOutputDir, config);
574
624
  await generateLoggerCode(config, absoluteOutputDir);
575
625
  await generateMQTTCode(config, absoluteOutputDir);
576
626
  await generateCacheCode(config, absoluteOutputDir);
@@ -755,14 +805,14 @@ require (
755
805
  console.log(chalk.green('āœ… go.mod file created!'));
756
806
  }
757
807
 
758
- await generateConfigLoader(absoluteOutputDir);
808
+ await generateConfigLoader(absoluteOutputDir, config);
759
809
  await generateLoggerCode(config, absoluteOutputDir);
760
810
  await generateMQTTCode(config, absoluteOutputDir);
761
811
  await generateCacheCode(config, absoluteOutputDir);
762
812
  await generateResilienceCode(config, absoluteOutputDir);
763
813
  await generateTelemetryCode(config, absoluteOutputDir);
764
814
  await generateDeploymentArtifacts(config, absoluteOutputDir);
765
- const { entities, relationships, enums, openEntities } = await generateEntities(gdlPath, absoluteOutputDir, config);
815
+ const { entities, relationships, enums, openEntities } = await generateEntities(gdlPath, absoluteOutputDir, config, true);
766
816
  await generateKratosCode(entities, absoluteOutputDir, config.name, enums);
767
817
 
768
818
  await generateRepositoryCode(absoluteOutputDir);
@@ -828,13 +878,19 @@ const generateYAMLConfigs = async (config, outputDir) => {
828
878
  const extendedConfig = {
829
879
  ...cleanConfig,
830
880
  server: {
831
- port: cleanConfig.server?.port || 8080,
881
+ rest: {
882
+ port: cleanConfig.server?.rest?.port || cleanConfig.server?.port || 8080,
883
+ protocol: cleanConfig.server?.rest?.protocol || 'json',
884
+ 'api-path-prefix': cleanConfig.server?.rest?.['api-path-prefix'] || `/${cleanConfig.name || 'api'}/api`
885
+ },
832
886
  'read-timeout': cleanConfig.server?.['read-timeout'] || '30s',
833
887
  'write-timeout': cleanConfig.server?.['write-timeout'] || '30s',
834
888
  grpc: {
835
889
  addr: cleanConfig.server?.grpc?.addr || ':9000',
836
890
  network: cleanConfig.server?.grpc?.network || 'tcp',
837
- timeout: cleanConfig.server?.grpc?.timeout || '1s'
891
+ timeout: cleanConfig.server?.grpc?.timeout || '1s',
892
+ web_enabled: cleanConfig.server?.grpc?.web_enabled ?? true,
893
+ web_port: cleanConfig.server?.grpc?.web_port || 9090
838
894
  },
839
895
  cors: {
840
896
  'allow-origins': cleanConfig.server?.cors?.['allow-origins'] || ['*'],
@@ -1102,4 +1158,37 @@ program
1102
1158
  });
1103
1159
  });
1104
1160
 
1161
+ program
1162
+ .command('gdl-planner')
1163
+ .description('Spin up a diagram viewer to view and plan GDL files')
1164
+ .option('-p, --port <number>', 'Port to run the planner server', 8000)
1165
+ .action(async (options) => {
1166
+ const port = options.port;
1167
+ const app = express();
1168
+
1169
+ console.log(chalk.blue('šŸ¦† Initializing GO-DUCK GDL Planner...'));
1170
+
1171
+ // Serve the compiled Angular app
1172
+ const plannerPath = path.join(__dirname, 'go-duck-planner');
1173
+ if (!fs.existsSync(plannerPath)) {
1174
+ console.log(chalk.red('āŒ Planner UI build not found! Run "npm run build:cli" in GO-DUCK-PLANNER first.'));
1175
+ process.exit(1);
1176
+ }
1177
+
1178
+ app.use(express.static(plannerPath));
1179
+
1180
+ // Fallback for Angular routing
1181
+ app.get('*', (req, res) => {
1182
+ res.sendFile(path.join(plannerPath, 'index.html'));
1183
+ });
1184
+
1185
+ app.listen(port, async () => {
1186
+ console.log(chalk.bold.green(`\nšŸš€ GO-DUCK GDL Planner Server is ALIVE!`));
1187
+ console.log(chalk.cyan(`🌐 Planner UI: http://localhost:${port}`));
1188
+ console.log(chalk.gray(`Press Ctrl+C to terminate the server.\n`));
1189
+
1190
+ await open(`http://localhost:${port}`);
1191
+ });
1192
+ });
1193
+
1105
1194
  program.parse(process.argv);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "go-duck-cli",
3
- "version": "1.2.11",
3
+ "version": "1.3.0",
4
4
  "description": "The Ultimate Evolutionary Go Microservice Scaffolder.",
5
5
  "main": "index.js",
6
6
  "type": "module",
package/parser/gdl.js CHANGED
@@ -179,6 +179,7 @@ export const parseGDL = async (filePath) => {
179
179
  const isSearchable = annotation?.includes('@Searchable');
180
180
  const isDocument = annotation?.includes('@Document') || annotation?.includes('@isDocument');
181
181
  const isEmbedded = annotation?.includes('@Embed');
182
+ const isDelete = annotation?.includes('@Delete');
182
183
 
183
184
  const fields = parseFields(block.fieldBlock);
184
185
 
@@ -190,6 +191,7 @@ export const parseGDL = async (filePath) => {
190
191
  isSearchable,
191
192
  isDocument,
192
193
  isEmbedded,
194
+ isDelete,
193
195
  fields
194
196
  });
195
197
  }