go-duck-cli 1.2.25 → 1.3.2

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 (217) hide show
  1. package/README.md +6 -0
  2. package/generators/ai_docs.js +6 -0
  3. package/generators/config.js +3 -1
  4. package/generators/devops.js +68 -20
  5. package/generators/security.js +2 -2
  6. package/go-duck-planner/css/bootstrap.min.css +6 -0
  7. package/go-duck-planner/css/main.css +1 -0
  8. package/go-duck-planner/favicon.ico +0 -0
  9. package/go-duck-planner/fonts/icomoonf33b-2.html +0 -0
  10. package/go-duck-planner/fonts/icomoonf33b-3.html +0 -0
  11. package/go-duck-planner/fonts/icomoonf33b-4.html +0 -0
  12. package/go-duck-planner/fonts/icomoonf33b.html +0 -0
  13. package/go-duck-planner/fonts/open-sans/OpenSans-Bold.html +0 -0
  14. package/go-duck-planner/fonts/open-sans/OpenSans-ExtraBold.html +0 -0
  15. package/go-duck-planner/fonts/open-sans/OpenSans-Light.html +0 -0
  16. package/go-duck-planner/fonts/open-sans/OpenSans-Regular.html +0 -0
  17. package/go-duck-planner/fonts/open-sans/OpenSans-SemiBold.html +0 -0
  18. package/go-duck-planner/fonts/rubik-mono/RubikMonoOne-Regular.html +0 -0
  19. package/go-duck-planner/fonts/style.css +2735 -0
  20. package/go-duck-planner/img/cancel.html +0 -0
  21. package/go-duck-planner/img/consulting.html +0 -0
  22. package/go-duck-planner/img/consulting2.html +0 -0
  23. package/go-duck-planner/img/dashed-circles-dark.html +0 -0
  24. package/go-duck-planner/img/docs/doc.html +0 -0
  25. package/go-duck-planner/img/docs/pdf.html +0 -0
  26. package/go-duck-planner/img/docs/ppt.html +0 -0
  27. package/go-duck-planner/img/docs/xls.html +0 -0
  28. package/go-duck-planner/img/docs/zip.html +0 -0
  29. package/go-duck-planner/img/empty-chat-display.html +0 -0
  30. package/go-duck-planner/img/error-screen/stars.html +0 -0
  31. package/go-duck-planner/img/fav.png +0 -0
  32. package/go-duck-planner/img/flags/1x1/au.html +0 -0
  33. package/go-duck-planner/img/flags/1x1/br.html +0 -0
  34. package/go-duck-planner/img/flags/1x1/bv.html +131 -0
  35. package/go-duck-planner/img/flags/1x1/ca.html +0 -0
  36. package/go-duck-planner/img/flags/1x1/cw.html +131 -0
  37. package/go-duck-planner/img/flags/1x1/eu.html +131 -0
  38. package/go-duck-planner/img/flags/1x1/hn.html +131 -0
  39. package/go-duck-planner/img/flags/1x1/in.html +0 -0
  40. package/go-duck-planner/img/flags/1x1/ni.html +131 -0
  41. package/go-duck-planner/img/flags/1x1/se.html +131 -0
  42. package/go-duck-planner/img/flags/1x1/za.html +131 -0
  43. package/go-duck-planner/img/folder.html +0 -0
  44. package/go-duck-planner/img/followers.html +0 -0
  45. package/go-duck-planner/img/food/biscuit.html +0 -0
  46. package/go-duck-planner/img/food/cupcake.html +0 -0
  47. package/go-duck-planner/img/food/donut.html +0 -0
  48. package/go-duck-planner/img/food/ice-cream.html +0 -0
  49. package/go-duck-planner/img/food/pizza.html +0 -0
  50. package/go-duck-planner/img/food/tea-cup.html +0 -0
  51. package/go-duck-planner/img/hover-on-tabs.html +0 -0
  52. package/go-duck-planner/img/icon-search.html +0 -0
  53. package/go-duck-planner/img/lines-bg.html +0 -0
  54. package/go-duck-planner/img/lines-bg2.html +0 -0
  55. package/go-duck-planner/img/login-bg.html +0 -0
  56. package/go-duck-planner/img/logo-compact.html +0 -0
  57. package/go-duck-planner/img/logo-large.html +0 -0
  58. package/go-duck-planner/img/logo.png +0 -0
  59. package/go-duck-planner/img/logo.svg +19 -0
  60. package/go-duck-planner/img/pattern.html +0 -0
  61. package/go-duck-planner/img/products/bag.html +0 -0
  62. package/go-duck-planner/img/products/camera.html +0 -0
  63. package/go-duck-planner/img/products/clock.html +0 -0
  64. package/go-duck-planner/img/products/drone.html +0 -0
  65. package/go-duck-planner/img/products/pencils.html +0 -0
  66. package/go-duck-planner/img/products/ring.html +0 -0
  67. package/go-duck-planner/img/products/shirt.html +0 -0
  68. package/go-duck-planner/img/products/shoes.html +0 -0
  69. package/go-duck-planner/img/products/toy.html +0 -0
  70. package/go-duck-planner/img/realestate/img1.html +0 -0
  71. package/go-duck-planner/img/realestate/img10.html +0 -0
  72. package/go-duck-planner/img/realestate/img11.html +0 -0
  73. package/go-duck-planner/img/realestate/img12.html +0 -0
  74. package/go-duck-planner/img/realestate/img2.html +0 -0
  75. package/go-duck-planner/img/realestate/img3.html +0 -0
  76. package/go-duck-planner/img/realestate/img4.html +0 -0
  77. package/go-duck-planner/img/realestate/img5.html +0 -0
  78. package/go-duck-planner/img/realestate/img6.html +0 -0
  79. package/go-duck-planner/img/realestate/img7.html +0 -0
  80. package/go-duck-planner/img/realestate/img8.html +0 -0
  81. package/go-duck-planner/img/realestate/img9.html +0 -0
  82. package/go-duck-planner/img/shade.html +0 -0
  83. package/go-duck-planner/img/stock/img1.html +0 -0
  84. package/go-duck-planner/img/stock/img10.html +0 -0
  85. package/go-duck-planner/img/stock/img11.html +0 -0
  86. package/go-duck-planner/img/stock/img12.html +0 -0
  87. package/go-duck-planner/img/stock/img13.html +0 -0
  88. package/go-duck-planner/img/stock/img14.html +0 -0
  89. package/go-duck-planner/img/stock/img2.html +0 -0
  90. package/go-duck-planner/img/stock/img3.html +0 -0
  91. package/go-duck-planner/img/stock/img4.html +0 -0
  92. package/go-duck-planner/img/stock/img5.html +0 -0
  93. package/go-duck-planner/img/stock/img6.html +0 -0
  94. package/go-duck-planner/img/stock/img7.html +0 -0
  95. package/go-duck-planner/img/stock/img8.html +0 -0
  96. package/go-duck-planner/img/stock/img9.html +0 -0
  97. package/go-duck-planner/img/svg/box.html +0 -0
  98. package/go-duck-planner/img/svg/commisions.html +0 -0
  99. package/go-duck-planner/img/svg/customer.html +0 -0
  100. package/go-duck-planner/img/svg/income.html +0 -0
  101. package/go-duck-planner/img/trophy.html +0 -0
  102. package/go-duck-planner/img/user-2.html +0 -0
  103. package/go-duck-planner/img/user.html +0 -0
  104. package/go-duck-planner/img/user1.html +0 -0
  105. package/go-duck-planner/img/user10.html +0 -0
  106. package/go-duck-planner/img/user12.html +0 -0
  107. package/go-duck-planner/img/user13.html +0 -0
  108. package/go-duck-planner/img/user14.html +0 -0
  109. package/go-duck-planner/img/user15.html +0 -0
  110. package/go-duck-planner/img/user16.html +0 -0
  111. package/go-duck-planner/img/user17.html +0 -0
  112. package/go-duck-planner/img/user18.html +0 -0
  113. package/go-duck-planner/img/user19.html +0 -0
  114. package/go-duck-planner/img/user2.html +0 -0
  115. package/go-duck-planner/img/user20.html +0 -0
  116. package/go-duck-planner/img/user21.html +0 -0
  117. package/go-duck-planner/img/user22.html +0 -0
  118. package/go-duck-planner/img/user23.html +0 -0
  119. package/go-duck-planner/img/user24.html +0 -0
  120. package/go-duck-planner/img/user3.html +0 -0
  121. package/go-duck-planner/img/user4.html +0 -0
  122. package/go-duck-planner/img/user5.html +0 -0
  123. package/go-duck-planner/img/user6.html +0 -0
  124. package/go-duck-planner/img/user7.html +0 -0
  125. package/go-duck-planner/img/user8.html +0 -0
  126. package/go-duck-planner/img/user9.html +0 -0
  127. package/go-duck-planner/index.html +30 -0
  128. package/go-duck-planner/js/bootstrap.bundle.min.html +0 -0
  129. package/go-duck-planner/js/jquery.min.html +0 -0
  130. package/go-duck-planner/js/main.html +0 -0
  131. package/go-duck-planner/js/modernizr.html +0 -0
  132. package/go-duck-planner/js/moment.html +0 -0
  133. package/go-duck-planner/main-HHOZYGRI.js +47 -0
  134. package/go-duck-planner/styles-3LK4NBNX.css +1 -0
  135. package/go-duck-planner/vendor/apex/apexcharts.min.html +0 -0
  136. package/go-duck-planner/vendor/apex/custom/analytics/byChannelGraph.html +0 -0
  137. package/go-duck-planner/vendor/apex/custom/analytics/byCountryGraph.html +0 -0
  138. package/go-duck-planner/vendor/apex/custom/analytics/byDeviceGraph.html +0 -0
  139. package/go-duck-planner/vendor/apex/custom/analytics/ordersGraph.html +0 -0
  140. package/go-duck-planner/vendor/apex/custom/analytics/targets.html +0 -0
  141. package/go-duck-planner/vendor/apex/custom/crm/sales.html +0 -0
  142. package/go-duck-planner/vendor/apex/custom/crm/sparkline-graphs.html +0 -0
  143. package/go-duck-planner/vendor/apex/custom/home/customersGraph.html +0 -0
  144. package/go-duck-planner/vendor/apex/custom/home/earningsGraph.html +0 -0
  145. package/go-duck-planner/vendor/apex/custom/home/ordersGraph.html +0 -0
  146. package/go-duck-planner/vendor/apex/custom/home/salesGraph.html +0 -0
  147. package/go-duck-planner/vendor/apex/custom/home/sparkline.html +0 -0
  148. package/go-duck-planner/vendor/apex/custom/home/visitorsGraph.html +0 -0
  149. package/go-duck-planner/vendor/apex/custom/profile/revenue.html +0 -0
  150. package/go-duck-planner/vendor/apex/custom/reports/orders.html +0 -0
  151. package/go-duck-planner/vendor/apex/custom/reports/revenue.html +0 -0
  152. package/go-duck-planner/vendor/apex/custom/reports/sales.html +0 -0
  153. package/go-duck-planner/vendor/apex/custom/reports/sales2.html +0 -0
  154. package/go-duck-planner/vendor/apex/custom/reports/sparkline.html +0 -0
  155. package/go-duck-planner/vendor/apex/custom/saas/revenue.html +0 -0
  156. package/go-duck-planner/vendor/apex/custom/saas/sales.html +0 -0
  157. package/go-duck-planner/vendor/apex/custom/sales/revenue.html +0 -0
  158. package/go-duck-planner/vendor/apex/custom/sales/tickets.html +0 -0
  159. package/go-duck-planner/vendor/bs-select/bs-select-custom.html +0 -0
  160. package/go-duck-planner/vendor/bs-select/bs-select.html +0 -0
  161. package/go-duck-planner/vendor/bs-select/bs-select.min.html +0 -0
  162. package/go-duck-planner/vendor/calendar/css/custom.html +0 -0
  163. package/go-duck-planner/vendor/calendar/css/main.min.html +0 -0
  164. package/go-duck-planner/vendor/calendar/custom/custom-schedule-calendar.html +0 -0
  165. package/go-duck-planner/vendor/calendar/custom/daygrid-calendar.html +0 -0
  166. package/go-duck-planner/vendor/calendar/custom/draggable-calendar.html +0 -0
  167. package/go-duck-planner/vendor/calendar/custom/google-view-calendar.html +0 -0
  168. package/go-duck-planner/vendor/calendar/custom/list-view-calendar.html +0 -0
  169. package/go-duck-planner/vendor/calendar/custom/selectable-calendar.html +0 -0
  170. package/go-duck-planner/vendor/calendar/js/main.min.html +0 -0
  171. package/go-duck-planner/vendor/circliful/circliful.custom.html +0 -0
  172. package/go-duck-planner/vendor/circliful/circliful.min.html +0 -0
  173. package/go-duck-planner/vendor/datatables/buttons.bs.html +0 -0
  174. package/go-duck-planner/vendor/datatables/buttons.min.html +0 -0
  175. package/go-duck-planner/vendor/datatables/buttons.print.min.html +0 -0
  176. package/go-duck-planner/vendor/datatables/custom/custom-datatables.html +0 -0
  177. package/go-duck-planner/vendor/datatables/dataTables.bootstrap.min.html +0 -0
  178. package/go-duck-planner/vendor/datatables/dataTables.bs4-custom.html +0 -0
  179. package/go-duck-planner/vendor/datatables/dataTables.bs4.html +0 -0
  180. package/go-duck-planner/vendor/datatables/dataTables.min.html +0 -0
  181. package/go-duck-planner/vendor/datatables/html5.min.html +0 -0
  182. package/go-duck-planner/vendor/datatables/jszip.min.html +0 -0
  183. package/go-duck-planner/vendor/datatables/pdfmake.min.html +0 -0
  184. package/go-duck-planner/vendor/datatables/vfs_fonts.html +0 -0
  185. package/go-duck-planner/vendor/daterange/custom-daterange.html +0 -0
  186. package/go-duck-planner/vendor/daterange/daterange-2.html +0 -0
  187. package/go-duck-planner/vendor/daterange/daterange.html +0 -0
  188. package/go-duck-planner/vendor/dropzone/dropzone.min-2.html +0 -0
  189. package/go-duck-planner/vendor/dropzone/dropzone.min.html +0 -0
  190. package/go-duck-planner/vendor/gallery/baguetteBox.html +0 -0
  191. package/go-duck-planner/vendor/gallery/custom-gallery.html +0 -0
  192. package/go-duck-planner/vendor/gallery/gallery.html +0 -0
  193. package/go-duck-planner/vendor/gallery/plugins.html +0 -0
  194. package/go-duck-planner/vendor/input-tags/tagsinput-custom.html +0 -0
  195. package/go-duck-planner/vendor/input-tags/tagsinput.html +0 -0
  196. package/go-duck-planner/vendor/input-tags/tagsinput.min.html +0 -0
  197. package/go-duck-planner/vendor/input-tags/typeahead.html +0 -0
  198. package/go-duck-planner/vendor/megamenu/css/megamenu.css +591 -0
  199. package/go-duck-planner/vendor/megamenu/js/custom.html +0 -0
  200. package/go-duck-planner/vendor/megamenu/js/megamenu.html +0 -0
  201. package/go-duck-planner/vendor/rating/raty-custom.html +0 -0
  202. package/go-duck-planner/vendor/rating/raty.html +0 -0
  203. package/go-duck-planner/vendor/search-filter/custom-search-filter.css +122 -0
  204. package/go-duck-planner/vendor/search-filter/custom-search-filter.html +0 -0
  205. package/go-duck-planner/vendor/search-filter/search-filter.css +497 -0
  206. package/go-duck-planner/vendor/search-filter/search-filter.html +0 -0
  207. package/go-duck-planner/vendor/slimscroll/custom-scrollbar.html +0 -0
  208. package/go-duck-planner/vendor/slimscroll/slimscroll.min.html +0 -0
  209. package/go-duck-planner/vendor/summernote/summernote-bs4-2.html +0 -0
  210. package/go-duck-planner/vendor/summernote/summernote-bs4.html +0 -0
  211. package/go-duck-planner/vendor/wizard/jquery.steps.custom.html +0 -0
  212. package/go-duck-planner/vendor/wizard/jquery.steps.html +0 -0
  213. package/go-duck-planner/vendor/wizard/jquery.steps.min.html +0 -0
  214. package/index.js +37 -3
  215. package/package.json +1 -1
  216. package/templates/docs/pages/index.hbs +10 -0
  217. package/templates/go/router.go.hbs +8 -3
@@ -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
@@ -620,7 +620,7 @@ program
620
620
  if (await fs.pathExists(p)) await fs.remove(p);
621
621
  }
622
622
 
623
- await generateConfigLoader(absoluteOutputDir);
623
+ await generateConfigLoader(absoluteOutputDir, config);
624
624
  await generateLoggerCode(config, absoluteOutputDir);
625
625
  await generateMQTTCode(config, absoluteOutputDir);
626
626
  await generateCacheCode(config, absoluteOutputDir);
@@ -805,7 +805,7 @@ require (
805
805
  console.log(chalk.green('āœ… go.mod file created!'));
806
806
  }
807
807
 
808
- await generateConfigLoader(absoluteOutputDir);
808
+ await generateConfigLoader(absoluteOutputDir, config);
809
809
  await generateLoggerCode(config, absoluteOutputDir);
810
810
  await generateMQTTCode(config, absoluteOutputDir);
811
811
  await generateCacheCode(config, absoluteOutputDir);
@@ -880,7 +880,8 @@ const generateYAMLConfigs = async (config, outputDir) => {
880
880
  server: {
881
881
  rest: {
882
882
  port: cleanConfig.server?.rest?.port || cleanConfig.server?.port || 8080,
883
- protocol: cleanConfig.server?.rest?.protocol || 'json'
883
+ protocol: cleanConfig.server?.rest?.protocol || 'json',
884
+ 'api-path-prefix': cleanConfig.server?.rest?.['api-path-prefix'] || `/${cleanConfig.name || 'api'}/api`
884
885
  },
885
886
  'read-timeout': cleanConfig.server?.['read-timeout'] || '30s',
886
887
  'write-timeout': cleanConfig.server?.['write-timeout'] || '30s',
@@ -1157,4 +1158,37 @@ program
1157
1158
  });
1158
1159
  });
1159
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
+
1160
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.25",
3
+ "version": "1.3.2",
4
4
  "description": "The Ultimate Evolutionary Go Microservice Scaffolder.",
5
5
  "main": "index.js",
6
6
  "type": "module",
@@ -120,6 +120,16 @@
120
120
  <span class="px-4 py-1.5 bg-orange-100 text-orange-700 text-[9px] font-black rounded-lg">WSO2 REST PROXY</span>
121
121
  </div>
122
122
  </div>
123
+
124
+ <div class="lg:col-span-12 bg-white p-10 rounded-[2.5rem] border border-fuchsia-100 shadow-sm hover:shadow-2xl transition-all group relative overflow-hidden cursor-crosshair bg-gradient-to-br from-white to-fuchsia-50/30">
125
+ <p class="text-[9px] font-bold text-fuchsia-600 uppercase tracking-widest mb-4">Elite Extension (+12%)</p>
126
+ <h4 class="text-2xl font-black text-slate-900 mb-3 tracking-tight italic">K8s Network Isolation & NodePorts</h4>
127
+ <p class="text-slate-600 leading-relaxed mb-8">Deploys every microservice component into its own dynamically generated namespace. Uses internal FQDN routing for secure communication and predictable NodePorts for host access.</p>
128
+ <div class="flex gap-3">
129
+ <span class="px-4 py-1.5 bg-fuchsia-100 text-fuchsia-700 text-[9px] font-black rounded-lg">ISOLATED NAMESPACES</span>
130
+ <span class="px-4 py-1.5 bg-fuchsia-100 text-fuchsia-700 text-[9px] font-black rounded-lg">FQDN ROUTING</span>
131
+ </div>
132
+ </div>
123
133
  </div>
124
134
  </div>
125
135
  </section>
@@ -209,8 +209,13 @@ func SetupRouter(appConfig *config.Config) *gin.Engine {
209
209
  }
210
210
  {{/if}}
211
211
 
212
+ apiPrefix := appConfig.GoDuck.Server.REST.ApiPathPrefix
213
+ if apiPrefix == "" {
214
+ apiPrefix = "/api"
215
+ }
216
+
212
217
  // Open Application APIs (No Auth)
213
- openApi := r.Group("/open/api")
218
+ openApi := r.Group("/open" + apiPrefix)
214
219
  if appConfig.GoDuck.Multitenancy.Enabled {
215
220
  openApi.Use(middleware.PublicTenantMiddleware(masterDB, appConfig))
216
221
  }
@@ -246,7 +251,7 @@ func SetupRouter(appConfig *config.Config) *gin.Engine {
246
251
  }
247
252
 
248
253
  // Secured Application APIs
249
- api := r.Group("/api")
254
+ api := r.Group(apiPrefix)
250
255
  api.Use(middleware.JWTMiddleware())
251
256
  api.Use(middleware.TenantMiddleware(masterDB, appConfig))
252
257
  // Log request DB resolution for debugging
@@ -270,7 +275,7 @@ func SetupRouter(appConfig *config.Config) *gin.Engine {
270
275
  api.GET("/metering/history", meteringCtrl.GetHistory)
271
276
 
272
277
  // --- Infrastructure/Confidential Layer ---
273
- admin := r.Group("/api/admin")
278
+ admin := r.Group(apiPrefix + "/admin")
274
279
  admin.Use(middleware.JWTMiddleware())
275
280
  admin.Use(middleware.SuperAdminRoleMiddleware(appConfig))
276
281
  {