gina 0.5.3-alpha.1 → 0.5.3

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 (475) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/README.md +9 -4
  3. package/ROADMAP.md +1 -0
  4. package/bin/cli +20 -5
  5. package/bin/cmd +34 -1
  6. package/bin/gina-container +33 -11
  7. package/framework/v0.5.3/VERSION +1 -0
  8. package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/asset/plugin/dist/vendor/gina/js/gina.js +5 -2
  9. package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/asset/plugin/dist/vendor/gina/js/gina.min.js +1 -1
  10. package/framework/v0.5.3/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
  11. package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
  12. package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/config.js +9 -0
  13. package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/controller/controller.js +32 -1
  14. package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/controller/controller.render-nunjucks-async.js +14 -0
  15. package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/controller/controller.render-nunjucks.js +14 -0
  16. package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/controller/controller.render-swig-async.js +14 -0
  17. package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/controller/controller.render-swig.js +15 -0
  18. package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/gna.js +8 -1
  19. package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/plugins/lib/storage/src/main.js +5 -2
  20. package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/server.isaac.js +4 -1
  21. package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/server.js +4 -1
  22. package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/port/help.txt +11 -0
  23. package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/port/set.js +45 -2
  24. package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/generator/index.js +18 -3
  25. package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/proc.js +4 -1
  26. package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/state.js +26 -4
  27. package/framework/{v0.5.3-alpha.1 → v0.5.3}/package.json +1 -1
  28. package/gna.js +4 -4
  29. package/llms.txt +14 -2
  30. package/package.json +3 -3
  31. package/script/check_roadmap_consistency.js +56 -7
  32. package/utils/helper.js +22 -0
  33. package/framework/v0.5.3-alpha.1/VERSION +0 -1
  34. package/framework/v0.5.3-alpha.1/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
  35. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/AUTHORS +0 -0
  36. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/LICENSE +0 -0
  37. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/asset/html/nolayout.html +0 -0
  38. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/asset/html/static.html +0 -0
  39. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/asset/img/android-chrome-192x192.png +0 -0
  40. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/asset/img/android-chrome-512x512.png +0 -0
  41. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/asset/img/apple-touch-icon.png +0 -0
  42. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/asset/img/favicon-16x16.png +0 -0
  43. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/asset/img/favicon-32x32.png +0 -0
  44. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/asset/img/favicon.ico +0 -0
  45. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/asset/plugin/README.md +0 -0
  46. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.css +0 -0
  47. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.js +0 -0
  48. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/asset/plugin/dist/vendor/gina/beemaster/index.html +0 -0
  49. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/asset/plugin/dist/vendor/gina/css/gina.min.css +0 -0
  50. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
  51. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
  52. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/asset/plugin/dist/vendor/gina/html/statusbar.html +0 -0
  53. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.br +0 -0
  54. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.gz +0 -0
  55. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/asset/plugin/dist/vendor/gina/inspector/have_heart_one-webfont.woff2 +0 -0
  56. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/asset/plugin/dist/vendor/gina/inspector/index.html +0 -0
  57. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/asset/plugin/dist/vendor/gina/inspector/inspector.css +0 -0
  58. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/asset/plugin/dist/vendor/gina/inspector/inspector.js +0 -0
  59. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/asset/plugin/dist/vendor/gina/inspector/logo.svg +0 -0
  60. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +0 -0
  61. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.br +0 -0
  62. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.gz +0 -0
  63. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/connectors/ai/index.js +0 -0
  64. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/connectors/ai/lib/connector.js +0 -0
  65. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/connectors/couchbase/index.js +0 -0
  66. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/connectors/couchbase/lib/connector.js +0 -0
  67. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/connectors/couchbase/lib/connector.v3.js +0 -0
  68. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/connectors/couchbase/lib/connector.v4.js +0 -0
  69. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/connectors/couchbase/lib/n1ql.js +0 -0
  70. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/connectors/couchbase/lib/session-store.js +0 -0
  71. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/connectors/couchbase/lib/session-store.v3.js +0 -0
  72. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/connectors/couchbase/lib/session-store.v4.js +0 -0
  73. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/connectors/mongodb/index.js +0 -0
  74. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/connectors/mongodb/lib/connector.js +0 -0
  75. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/connectors/mongodb/lib/pipeline-loader.js +0 -0
  76. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/connectors/mongodb/lib/session-store.js +0 -0
  77. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/connectors/mysql/index.js +0 -0
  78. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/connectors/mysql/lib/connector.js +0 -0
  79. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/connectors/postgresql/index.js +0 -0
  80. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/connectors/postgresql/lib/connector.js +0 -0
  81. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/connectors/redis/index.js +0 -0
  82. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/connectors/redis/lib/session-store.js +0 -0
  83. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/connectors/scylladb/index.js +0 -0
  84. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/connectors/scylladb/lib/connector.js +0 -0
  85. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/connectors/scylladb/lib/session-store.js +0 -0
  86. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/connectors/sql-parser.js +0 -0
  87. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/connectors/sqlite/index.js +0 -0
  88. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/connectors/sqlite/lib/connector.js +0 -0
  89. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/connectors/sqlite/lib/session-store.js +0 -0
  90. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/content.encoding +0 -0
  91. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/controller/controller.framework.js +0 -0
  92. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/controller/controller.render-json.js +0 -0
  93. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/controller/controller.render-stream.js +0 -0
  94. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/controller/controller.render-v1.js +0 -0
  95. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/controller/index.js +0 -0
  96. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/controller/inspector-window-emit.js +0 -0
  97. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/deps/busboy-1.6.0/LICENSE +0 -0
  98. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/deps/busboy-1.6.0/README.md +0 -0
  99. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/deps/busboy-1.6.0/lib/index.js +0 -0
  100. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/deps/busboy-1.6.0/lib/types/multipart.js +0 -0
  101. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/deps/busboy-1.6.0/lib/types/urlencoded.js +0 -0
  102. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/deps/busboy-1.6.0/lib/utils.js +0 -0
  103. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/deps/busboy-1.6.0/package.json +0 -0
  104. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/deps/streamsearch-1.1.0/LICENSE +0 -0
  105. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/deps/streamsearch-1.1.0/lib/sbmh.js +0 -0
  106. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/deps/streamsearch-1.1.0/package.json +0 -0
  107. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/dev/index.js +0 -0
  108. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/dev/lib/class.js +0 -0
  109. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/dev/lib/factory.js +0 -0
  110. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/dev/lib/tools.js +0 -0
  111. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/locales/README.md +0 -0
  112. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/locales/currency.json +0 -0
  113. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/locales/dist/language/en.json +0 -0
  114. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/locales/dist/language/fr.json +0 -0
  115. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/locales/dist/region/en.json +0 -0
  116. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/locales/dist/region/fr.json +0 -0
  117. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/locales/index.js +0 -0
  118. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/mime.types +0 -0
  119. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/model/entity.js +0 -0
  120. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/model/index.js +0 -0
  121. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/model/template/entityFactory.js +0 -0
  122. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/model/template/index.js +0 -0
  123. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/plugins/README.md +0 -0
  124. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/plugins/index.js +0 -0
  125. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/plugins/lib/csrf/README.md +0 -0
  126. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/plugins/lib/csrf/package.json +0 -0
  127. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/plugins/lib/csrf/src/main.js +0 -0
  128. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/plugins/lib/security-headers/README.md +0 -0
  129. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/plugins/lib/security-headers/coep/README.md +0 -0
  130. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/plugins/lib/security-headers/coep/package.json +0 -0
  131. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/plugins/lib/security-headers/coep/src/main.js +0 -0
  132. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/plugins/lib/security-headers/coop/README.md +0 -0
  133. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/plugins/lib/security-headers/coop/package.json +0 -0
  134. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/plugins/lib/security-headers/coop/src/main.js +0 -0
  135. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/plugins/lib/security-headers/corp/README.md +0 -0
  136. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/plugins/lib/security-headers/corp/package.json +0 -0
  137. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/plugins/lib/security-headers/corp/src/main.js +0 -0
  138. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/plugins/lib/security-headers/csp/README.md +0 -0
  139. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/plugins/lib/security-headers/csp/package.json +0 -0
  140. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/plugins/lib/security-headers/csp/src/main.js +0 -0
  141. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/plugins/lib/security-headers/hide-powered-by/README.md +0 -0
  142. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/plugins/lib/security-headers/hide-powered-by/package.json +0 -0
  143. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/plugins/lib/security-headers/hide-powered-by/src/main.js +0 -0
  144. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/plugins/lib/security-headers/hsts/README.md +0 -0
  145. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/plugins/lib/security-headers/hsts/package.json +0 -0
  146. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/plugins/lib/security-headers/hsts/src/main.js +0 -0
  147. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/plugins/lib/security-headers/origin-agent-cluster/README.md +0 -0
  148. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/plugins/lib/security-headers/origin-agent-cluster/package.json +0 -0
  149. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/plugins/lib/security-headers/origin-agent-cluster/src/main.js +0 -0
  150. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/plugins/lib/security-headers/package.json +0 -0
  151. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/plugins/lib/security-headers/referrer-policy/README.md +0 -0
  152. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/plugins/lib/security-headers/referrer-policy/package.json +0 -0
  153. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/plugins/lib/security-headers/referrer-policy/src/main.js +0 -0
  154. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/plugins/lib/security-headers/src/main.js +0 -0
  155. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/plugins/lib/security-headers/x-content-type-options/README.md +0 -0
  156. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/plugins/lib/security-headers/x-content-type-options/package.json +0 -0
  157. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/plugins/lib/security-headers/x-content-type-options/src/main.js +0 -0
  158. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/plugins/lib/security-headers/x-dns-prefetch-control/README.md +0 -0
  159. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/plugins/lib/security-headers/x-dns-prefetch-control/package.json +0 -0
  160. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/plugins/lib/security-headers/x-dns-prefetch-control/src/main.js +0 -0
  161. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/plugins/lib/security-headers/x-download-options/README.md +0 -0
  162. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/plugins/lib/security-headers/x-download-options/package.json +0 -0
  163. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/plugins/lib/security-headers/x-download-options/src/main.js +0 -0
  164. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/plugins/lib/security-headers/x-frame-options/README.md +0 -0
  165. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/plugins/lib/security-headers/x-frame-options/package.json +0 -0
  166. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/plugins/lib/security-headers/x-frame-options/src/main.js +0 -0
  167. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/README.md +0 -0
  168. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/package.json +0 -0
  169. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/src/main.js +0 -0
  170. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/plugins/lib/security-headers/x-xss-protection/README.md +0 -0
  171. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/plugins/lib/security-headers/x-xss-protection/package.json +0 -0
  172. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/plugins/lib/security-headers/x-xss-protection/src/main.js +0 -0
  173. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/plugins/lib/session/README.md +0 -0
  174. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/plugins/lib/session/package.json +0 -0
  175. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/plugins/lib/session/src/main.js +0 -0
  176. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/plugins/lib/storage/README.md +0 -0
  177. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/plugins/lib/storage/build.json +0 -0
  178. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/plugins/lib/storage/package.json +0 -0
  179. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/plugins/lib/validator/README.md +0 -0
  180. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/plugins/lib/validator/build.json +0 -0
  181. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/plugins/lib/validator/package.json +0 -0
  182. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/plugins/lib/validator/src/form-validator.js +0 -0
  183. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/plugins/lib/validator/src/main.js +0 -0
  184. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/router.js +0 -0
  185. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/server.express.js +0 -0
  186. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/status.codes +0 -0
  187. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/template/_gitignore +0 -0
  188. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/template/boilerplate/bundle/config/app.json +0 -0
  189. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/template/boilerplate/bundle/config/connectors.json +0 -0
  190. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/template/boilerplate/bundle/config/routing.json +0 -0
  191. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/template/boilerplate/bundle/config/settings.json +0 -0
  192. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/template/boilerplate/bundle/config/settings.server.json +0 -0
  193. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/template/boilerplate/bundle/config/templates.json +0 -0
  194. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/template/boilerplate/bundle/config/watchers.json +0 -0
  195. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/template/boilerplate/bundle/controllers/controller.content.js +0 -0
  196. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/template/boilerplate/bundle/controllers/controller.js +0 -0
  197. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/template/boilerplate/bundle/controllers/setup.js +0 -0
  198. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/template/boilerplate/bundle/index.js +0 -0
  199. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/template/boilerplate/bundle/locales/en.json +0 -0
  200. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/template/boilerplate/bundle_namespace/controllers/controller.js +0 -0
  201. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/template/boilerplate/bundle_public/css/default.css +0 -0
  202. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/template/boilerplate/bundle_public/css/home.css +0 -0
  203. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/template/boilerplate/bundle_public/css/vendor/readme.md +0 -0
  204. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/template/boilerplate/bundle_public/favicon.ico +0 -0
  205. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/template/boilerplate/bundle_public/js/vendor/readme.md +0 -0
  206. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/template/boilerplate/bundle_public/manifest.webmanifest +0 -0
  207. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/template/boilerplate/bundle_public/readme.md +0 -0
  208. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/template/boilerplate/bundle_public/sw.js +0 -0
  209. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/template/boilerplate/bundle_templates/handlers/main.js +0 -0
  210. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/template/boilerplate/bundle_templates/html/content/homepage.html +0 -0
  211. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/template/boilerplate/bundle_templates/html/includes/error-msg-noscript.html +0 -0
  212. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/template/boilerplate/bundle_templates/html/includes/error-msg-outdated-browser.html +0 -0
  213. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/template/boilerplate/bundle_templates/html/layouts/main.html +0 -0
  214. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/template/command/gina.bat.tpl +0 -0
  215. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/template/command/gina.tpl +0 -0
  216. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/template/conf/env.json +0 -0
  217. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/template/conf/manifest.json +0 -0
  218. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/template/conf/package.json +0 -0
  219. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/template/conf/settings.json +0 -0
  220. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/template/conf/statics.json +0 -0
  221. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/template/conf/templates.json +0 -0
  222. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/template/error/client/json/401.json +0 -0
  223. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/template/error/client/json/403.json +0 -0
  224. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/template/error/client/json/404.json +0 -0
  225. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/template/error/server/html/50x.html +0 -0
  226. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/template/error/server/json/500.json +0 -0
  227. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/template/error/server/json/503.json +0 -0
  228. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/core/template/extensions/logger/config.json +0 -0
  229. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/helpers/console.js +0 -0
  230. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/helpers/context.js +0 -0
  231. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/helpers/data/LICENSE +0 -0
  232. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/helpers/data/README.md +0 -0
  233. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/helpers/data/package.json +0 -0
  234. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/helpers/data/src/main.js +0 -0
  235. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/helpers/dateFormat.js +0 -0
  236. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/helpers/index.js +0 -0
  237. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/helpers/json/LICENSE +0 -0
  238. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/helpers/json/README.md +0 -0
  239. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/helpers/json/package.json +0 -0
  240. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/helpers/json/src/main.js +0 -0
  241. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/helpers/path.js +0 -0
  242. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/helpers/plugins/README.md +0 -0
  243. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/helpers/plugins/package.json +0 -0
  244. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/helpers/plugins/src/api-error.js +0 -0
  245. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/helpers/plugins/src/main.js +0 -0
  246. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/helpers/prototypes.js +0 -0
  247. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/helpers/task.js +0 -0
  248. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/helpers/text.js +0 -0
  249. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/archiver/README.md +0 -0
  250. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/archiver/build.json +0 -0
  251. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/archiver/package.json +0 -0
  252. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/archiver/src/dep/jszip.min.js +0 -0
  253. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/archiver/src/main.js +0 -0
  254. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/async/package.json +0 -0
  255. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/async/src/main.js +0 -0
  256. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cache/README.md +0 -0
  257. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cache/build.json +0 -0
  258. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cache/package.json +0 -0
  259. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cache/src/main.js +0 -0
  260. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/aliases.json +0 -0
  261. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/bundle/add.js +0 -0
  262. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/bundle/arguments.json +0 -0
  263. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/bundle/build.js +0 -0
  264. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/bundle/copy.js +0 -0
  265. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/bundle/cp.js +0 -0
  266. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/bundle/help.js +0 -0
  267. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/bundle/help.txt +0 -0
  268. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/bundle/inc/name-rewrite.js +0 -0
  269. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/bundle/list.js +0 -0
  270. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/bundle/mcp-start.js +0 -0
  271. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/bundle/mcp.js +0 -0
  272. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/bundle/oas.js +0 -0
  273. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/bundle/openapi.js +0 -0
  274. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/bundle/remove.js +0 -0
  275. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/bundle/rename.js +0 -0
  276. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/bundle/restart.js +0 -0
  277. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/bundle/rm.js +0 -0
  278. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/bundle/start.js +0 -0
  279. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/bundle/status.js +0 -0
  280. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/bundle/stop.js +0 -0
  281. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/cache/stats.js +0 -0
  282. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/connector/add.js +0 -0
  283. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/connector/arguments.json +0 -0
  284. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/connector/help.js +0 -0
  285. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/connector/help.txt +0 -0
  286. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/connector/list.js +0 -0
  287. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/connector/migrate.js +0 -0
  288. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/connector/remove.js +0 -0
  289. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/connector/rm.js +0 -0
  290. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/env/add.js +0 -0
  291. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/env/get.js +0 -0
  292. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/env/help.js +0 -0
  293. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/env/help.txt +0 -0
  294. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/env/link-dev.js +0 -0
  295. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/env/list.js +0 -0
  296. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/env/remove.js +0 -0
  297. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/env/rm.js +0 -0
  298. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/env/set.js +0 -0
  299. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/env/unset.js +0 -0
  300. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/env/use.js +0 -0
  301. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/framework/arguments.json +0 -0
  302. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/framework/build.js +0 -0
  303. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/framework/dot.js +0 -0
  304. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/framework/get.js +0 -0
  305. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/framework/help.js +0 -0
  306. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/framework/help.txt +0 -0
  307. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/framework/init.js +0 -0
  308. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/framework/link-node-modules.js +0 -0
  309. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/framework/link.js +0 -0
  310. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/framework/msg.json +0 -0
  311. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/framework/open.js +0 -0
  312. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/framework/restart.js +0 -0
  313. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/framework/set.js +0 -0
  314. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/framework/start.js +0 -0
  315. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/framework/status.js +0 -0
  316. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/framework/stop.js +0 -0
  317. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/framework/tail.js +0 -0
  318. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/framework/update.js +0 -0
  319. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/framework/version.js +0 -0
  320. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/gina-dev.1.md +0 -0
  321. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/gina-framework.1.md +0 -0
  322. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/gina.1.md +0 -0
  323. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/helper.js +0 -0
  324. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/i18n/add.js +0 -0
  325. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/i18n/arguments.json +0 -0
  326. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/i18n/export.js +0 -0
  327. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/i18n/help.js +0 -0
  328. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/i18n/help.txt +0 -0
  329. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/i18n/import.js +0 -0
  330. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/i18n/scan.js +0 -0
  331. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/index.js +0 -0
  332. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/inspector/help.js +0 -0
  333. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/inspector/help.txt +0 -0
  334. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/inspector/open.js +0 -0
  335. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/minion/arguments.json +0 -0
  336. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/minion/help.js +0 -0
  337. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/minion/help.txt +0 -0
  338. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/minion/kill.js +0 -0
  339. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/minion/list.js +0 -0
  340. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/msg.json +0 -0
  341. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/port/help.js +0 -0
  342. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/port/inc/scan.js +0 -0
  343. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/port/list.js +0 -0
  344. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/port/reset.js +0 -0
  345. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/project/add.js +0 -0
  346. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/project/arguments.json +0 -0
  347. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/project/build.js +0 -0
  348. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/project/help.js +0 -0
  349. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/project/help.txt +0 -0
  350. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/project/import.js +0 -0
  351. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/project/list.js +0 -0
  352. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/project/move.js +0 -0
  353. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/project/remove.js +0 -0
  354. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/project/rename.js +0 -0
  355. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/project/restart.js +0 -0
  356. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/project/rm.js +0 -0
  357. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/project/start.js +0 -0
  358. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/project/status.js +0 -0
  359. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/project/stop.js +0 -0
  360. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/protocol/arguments.json +0 -0
  361. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/protocol/help.js +0 -0
  362. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/protocol/help.txt +0 -0
  363. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/protocol/list.js +0 -0
  364. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/protocol/remove.js +0 -0
  365. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/protocol/set.js +0 -0
  366. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/scope/add.js +0 -0
  367. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/scope/help.js +0 -0
  368. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/scope/help.txt +0 -0
  369. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/scope/link-local.js +0 -0
  370. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/scope/link-production.js +0 -0
  371. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/scope/list.js +0 -0
  372. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/scope/remove.js +0 -0
  373. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/scope/rm.js +0 -0
  374. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/scope/use.js +0 -0
  375. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/secrets/arguments.json +0 -0
  376. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/secrets/check.js +0 -0
  377. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/secrets/help.js +0 -0
  378. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/secrets/help.txt +0 -0
  379. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/secrets/scan.js +0 -0
  380. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/service/help.js +0 -0
  381. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/service/help.txt +0 -0
  382. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/service/list.js +0 -0
  383. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/service/start.js +0 -0
  384. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd/view/add.js +0 -0
  385. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd-status-format/package.json +0 -0
  386. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cmd-status-format/src/main.js +0 -0
  387. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/collection/README.md +0 -0
  388. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/collection/build.json +0 -0
  389. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/collection/package.json +0 -0
  390. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/collection/src/main.js +0 -0
  391. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/config.js +0 -0
  392. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/connector-registry/package.json +0 -0
  393. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/connector-registry/src/main.js +0 -0
  394. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cron/README.md +0 -0
  395. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cron/package.json +0 -0
  396. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/cron/src/main.js +0 -0
  397. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/domain/LICENSE +0 -0
  398. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/domain/README.md +0 -0
  399. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/domain/package.json +0 -0
  400. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/domain/src/main.js +0 -0
  401. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/i18n/package.json +0 -0
  402. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/i18n/src/main.js +0 -0
  403. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/index.js +0 -0
  404. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/inherits/LICENSE +0 -0
  405. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/inherits/README.md +0 -0
  406. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/inherits/package.json +0 -0
  407. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/inherits/src/main.js +0 -0
  408. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/inspector-redact/package.json +0 -0
  409. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/inspector-redact/src/main.js +0 -0
  410. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/instrument/package.json +0 -0
  411. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/instrument/src/main.js +0 -0
  412. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/job/package.json +0 -0
  413. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/job/src/main.js +0 -0
  414. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/logger/README.md +0 -0
  415. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/logger/package.json +0 -0
  416. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/logger/src/containers/default/index.js +0 -0
  417. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/logger/src/containers/file/index.js +0 -0
  418. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/logger/src/containers/file/lib/logrotator/README.md +0 -0
  419. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/logger/src/containers/file/lib/logrotator/index.js +0 -0
  420. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/logger/src/containers/mq/index.js +0 -0
  421. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/logger/src/containers/mq/listener.js +0 -0
  422. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/logger/src/containers/mq/speaker.js +0 -0
  423. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/logger/src/helper.js +0 -0
  424. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/logger/src/main.js +0 -0
  425. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/math/index.js +0 -0
  426. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/mcp-dispatch/package.json +0 -0
  427. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/mcp-dispatch/src/main.js +0 -0
  428. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/mcp-http/package.json +0 -0
  429. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/mcp-http/src/main.js +0 -0
  430. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/mcp-server/package.json +0 -0
  431. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/mcp-server/src/main.js +0 -0
  432. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/merge/README.md +0 -0
  433. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/merge/package.json +0 -0
  434. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/merge/src/main.js +0 -0
  435. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/metrics/package.json +0 -0
  436. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/metrics/src/main.js +0 -0
  437. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/model.js +0 -0
  438. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/nunjucks-filters/README.md +0 -0
  439. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/nunjucks-filters/package.json +0 -0
  440. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/nunjucks-filters/src/main.js +0 -0
  441. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/nunjucks-resolver/package.json +0 -0
  442. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/nunjucks-resolver/src/main.js +0 -0
  443. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/routing/README.md +0 -0
  444. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/routing/build.json +0 -0
  445. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/routing/package.json +0 -0
  446. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/routing/src/main.js +0 -0
  447. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/routing/src/radix.js +0 -0
  448. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/routing-introspect/package.json +0 -0
  449. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/routing-introspect/src/main.js +0 -0
  450. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/secrets/package.json +0 -0
  451. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/secrets/src/backends/env.js +0 -0
  452. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/secrets/src/main.js +0 -0
  453. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/session-store.js +0 -0
  454. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/shell.js +0 -0
  455. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/swig-filters/README.md +0 -0
  456. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/swig-filters/package.json +0 -0
  457. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/swig-filters/src/main.js +0 -0
  458. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/swig-resolver/package.json +0 -0
  459. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/swig-resolver/src/main.js +0 -0
  460. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/template-loaders/package.json +0 -0
  461. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/template-loaders/src/loaders/http.js +0 -0
  462. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/template-loaders/src/loaders/memory.js +0 -0
  463. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/template-loaders/src/main.js +0 -0
  464. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/url/README.md +0 -0
  465. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/url/index.js +0 -0
  466. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/url/routing.json +0 -0
  467. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/uuid/package.json +0 -0
  468. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/uuid/src/main.js +0 -0
  469. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/validator.js +0 -0
  470. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/watcher/package.json +0 -0
  471. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/watcher/src/main.js +0 -0
  472. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/ws-framing/package.json +0 -0
  473. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/ws-framing/src/main.js +0 -0
  474. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/ws-session/package.json +0 -0
  475. /package/framework/{v0.5.3-alpha.1 → v0.5.3}/lib/ws-session/src/main.js +0 -0
package/CHANGELOG.md CHANGED
@@ -6,6 +6,22 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html),
6
6
  and is generated by [Changie](https://github.com/miniscruff/changie).
7
7
 
8
8
 
9
+ ## 0.5.3 - 2026-06-14
10
+
11
+ _Patch release — no breaking changes. Finishes the released-response crash-family hardening (a late two-/three-argument `throwError()` and the swig / nunjucks render delegates, including their async variants, no longer crash or emit unhandled rejections when invoked on an already-released response) and adds bundle-boot / startup robustness — atomic `~/.gina` state-file writes, framework command-socket hardening, protection of the framework socket port from a bundle's `--port`, and synchronous boot-failure diagnostics under piped output — plus storage `_id` collision hardening, clearer unresolved-`${secret:KEY}` diagnostics, and the new `gina port:set --force`._
12
+
13
+ ### Added
14
+ * `gina port:set --force` reassigns a port already held by another bundle (the prior holder is evicted from both port maps); without `--force`, an in-use port is still rejected as before. Enables deterministic per-bundle port pinning for one-bundle-per-container deployments.
15
+ ### Fixed
16
+ * Hardened the storage plugin's record `_id` generation against same-millisecond collisions by widening the random suffix to 16 base-62 characters, matching the collection ID convention.
17
+ * Containerised and daemonless bundle boot failures no longer exit without a message: the gina-container launcher and the framework boot path now flush the failure reason synchronously before calling process.exit, so a crash on a piped stdout/stderr (the norm under container log collectors) surfaces its cause instead of being truncated.
18
+ * Fixed sub-topic CLI commands (e.g. `gina port:set`, `gina bundle:start`) that were passed `--port` overwriting the framework socket port in `~/.gina/<short>/settings.json` with the bundle port. The corrupted framework port made later online commands fail with "[ gina ] not started" and prevented the bundle from binding its port. The framework-connection flags (`--port`, `--mq-port`, `--host-v4`, `--hostname`, `--debug-port`) are now applied as framework settings only for framework-scoped commands (`gina start`/`stop`/`restart`, `framework:*`); for any other command they are left for that command to interpret.
19
+ * Hardened the framework command socket against a malformed or fragmented payload. The socket handler parsed each incoming TCP chunk as JSON directly, so a partial, empty, or non-JSON payload threw an uncaught exception that dropped the command (and could trigger a framework shutdown). Incoming command data is now accumulated per connection and parsed only once the payload is complete; a payload that is valid JSON but not the expected argument array is ignored instead of crashing.
20
+ * When a ${secret:KEY} placeholder cannot be resolved during config load, the framework now logs the failing key name and the bundle/environment config path at debug level, so operators can pinpoint which secret is unset. Previously the load failed with a generic "Secret resolution failed" message that named neither the key nor the bundle. The propagated error message still intentionally omits the key.
21
+ * Hardened the HTML render delegates (swig and nunjucks, including their async variants) against being invoked after the response was already released. A controller that renders again after a terminal exit — for example an action that fires several parallel self.query() calls and renders a degraded response from the first failure callback, then renders again from a later callback — no longer emits a framework-level unhandled promise rejection; the render delegates now no-op on a released response, matching renderJSON and the streaming delegate.
22
+ * The five ~/.gina state files (main.json, projects.json, settings.json, env.json, locals.json) are now written atomically via a temp file plus rename, so a concurrent boot of many bundles or containers against the same home directory can no longer read a partially-written file and crash on startup.
23
+ * A late `self.throwError(statusCode, error)` call — fired after the response was already sent or released (for example from an async callback that resumes after a redirect) — no longer crashes the bundle. Only the single-argument `throwError(err)` form was previously guarded; the two- and three-argument forms resolved the response reference earlier and could dereference it (on HTTP/2 bundles, or while building the error payload on any bundle) before reaching that guard. These late calls are now logged and ignored, like the single-argument form.
24
+
9
25
  ## 0.5.2 - 2026-06-13
10
26
  ### Fixed
11
27
  * Fixed an inter-bundle self.query() over HTTP/2 reporting an upstream 502 as success once its retries were exhausted: the 502 response body was handed to the query callback as if it were valid data (and a JSON-shaped body was even relabelled with status 200), so a caller could silently consume a Bad Gateway error page as a real response. Exhausted 502s now surface a typed error to the caller (status 502, code BAD_GATEWAY), matching how timeout, stream-error, and premature-close exhaustion are already reported; non-critical queries still swallow it. (#B34)
package/README.md CHANGED
@@ -39,10 +39,15 @@ gina bundle:start api @myproject
39
39
  open https://localhost:3100
40
40
  ```
41
41
 
42
- ## What's in 0.5.2
43
-
44
- - **Released-response crash family completed across the synchronous controller surface (bundle-killing).** Building on the `throwError()` and HTTP/2 query-path guards in 0.5.1, thirteen more synchronous controller APIs — `renderJSON()`, `redirect()`, `store()`, `push()`, `renderStream()`, `pauseRequest()` / `resumeRequest()`, `downloadFromLocal()`, and the request-method / popin / form-rule helpers no longer crash the bundle when a controller action keeps running after a terminal exit (typically a `redirect()` that lets the middleware chain continue) and then dereferences the already-released request or response. Each now no-ops or notifies through its existing callback/event channel instead of escalating to an `uncaughtException` and a SIGTERM shutdown; live requests are byte-for-byte unaffected.
45
- - **Exhausted HTTP/2 502 retries now surface a typed error instead of success.** An inter-bundle `self.query()` over HTTP/2 that exhausted its retries against an upstream returning 502 used to hand the Bad Gateway response body to the caller as if it were valid data (a JSON-shaped body was even relabelled `status: 200`). Exhausted 502s now surface `status: 502`, `code: BAD_GATEWAY` to the caller, matching how timeout, stream-error, and premature-close exhaustion are already reported; non-critical queries still swallow it.
42
+ ## What's in 0.5.3
43
+
44
+ - **Released-response crash family finished (bundle-killing).** The two remaining members are now guarded: a late `self.throwError(statusCode, error)` in its two- and three-argument forms (only the single-argument form was guarded before), and the HTML render delegates (swig and nunjucks, including their async variants) invoked after the response was already released. Both now log-and-ignore or no-op instead of dereferencing the released response no `uncaughtException`, no SIGTERM, no unhandled promise rejection matching `renderJSON()` and the streaming delegate.
45
+ - **Atomic `~/.gina` state-file writes.** The five state files (`main.json`, `projects.json`, `settings.json`, `env.json`, `locals.json`) are now written via a temp file plus rename, so a concurrent boot of many bundles or containers against the same home directory can no longer read a partially-written file and crash on startup.
46
+ - **Framework command-socket hardening.** The command socket now accumulates each connection's payload and parses it only once complete; a malformed, partial, or non-JSON payload is ignored instead of throwing an uncaught exception that could drop the command or shut the framework down.
47
+ - **Framework socket port no longer corrupted by bundle flags.** A sub-topic command passed `--port` (e.g. `gina port:set`, `gina bundle:start`) no longer overwrites the framework socket port in `~/.gina/<short>/settings.json` — which previously made later online commands fail with `[ gina ] not started`. The framework-connection flags (`--port`, `--mq-port`, `--host-v4`, `--hostname`, `--debug-port`) now apply as framework settings only for framework-scoped commands.
48
+ - **Boot failures surface their cause.** The `gina-container` launcher and the framework boot path now flush the failure reason synchronously before `process.exit`, so a crash on a piped stdout/stderr (the norm under container log collectors) reports its cause instead of exiting with no message.
49
+ - **`gina port:set --force`.** Reassigns a port already held by another bundle (evicting the prior holder from both port maps); without `--force`, an in-use port is still rejected as before. Enables deterministic per-bundle port pinning for one-bundle-per-container deployments.
50
+ - **Storage `_id` collision hardening** (16 base-62 random suffix, matching the collection ID convention) and **clearer unresolved-`${secret:KEY}` diagnostics** (the failing key name and config path are logged at debug level; the propagated error still omits the key).
46
51
 
47
52
  See the full [Changelog](./CHANGELOG.md) and [Roadmap](./ROADMAP.md).
48
53
 
package/ROADMAP.md CHANGED
@@ -27,6 +27,7 @@ This roadmap covers planned features, architectural improvements, new connectors
27
27
  | **Q2 2026** | `0.5.0` ✅ | ESM entry points (dual CJS/ESM `exports` map) · Mixed template engines per bundle (extension-keyed `.njk` / `.swig` dispatch) · Nunjucks Inspector parity — the other items originally targeted here shipped earlier: structured logging (`0.4.5`), Alt-Svc (`0.4.2`), WebSocket over HTTP/2 (`0.4.7`), Inspector production auth (`0.4.0`) |
28
28
  | **Q2 2026** | `0.5.1` ✅ | Patch: released-response crash family — late `throwError()` and the HTTP/2 inter-bundle query retry / late-response / redirect-intercept paths no longer kill the bundle · dev-mode hot-reload `module.children` heap leak fixed (OOM under sustained load) · inter-bundle proxy JSON bodies keep their `application/json` label · ROADMAP consistency release gate |
29
29
  | **Q2 2026** | `0.5.2` ✅ | Patch: released-response crash family completed across the remaining synchronous controller surface — `renderJSON()` / `redirect()` / `store()` / `push()` / `renderStream()` / request-method + form-rule helpers no longer kill the bundle when called on an already-released response · exhausted HTTP/2 502 retries surface a typed `BAD_GATEWAY` error instead of being consumed as success |
30
+ | **Q2 2026** | `0.5.3` ✅ | Patch: released-response crash family finished — late `throwError(status, error)` (2- and 3-argument forms) and the HTML render delegates (swig / nunjucks + async variants) no longer crash or emit unhandled rejections when invoked on an already-released response · atomic `~/.gina` state-file writes (concurrent multi-bundle / multi-container boot can't read a torn file) · framework command-socket hardened against malformed / fragmented payloads · framework socket port no longer corrupted by a bundle's `--port` · synchronous boot-failure diagnostics under piped stdout/stderr · storage `_id` collision hardening · `gina port:set --force` |
30
31
  | **Q1 2027** | `0.5.x` | HTTP/2 priorities (blocked on Node scheduler hooks) · CLI Tier 3 (project:move, framework:update, backup/restore, man pages) · Beemaster admin + visual translation editor |
31
32
  | **Q3 2027** | `1.0.0` | First stable release — Windows alpha compatibility is a hard gate |
32
33
 
package/bin/cli CHANGED
@@ -83,38 +83,53 @@ async function onExec() {
83
83
  // catching debug|inspect arg
84
84
  //process.stdout.write('params '+ params.join(', ') + '\n');
85
85
 
86
+ // #B40 — Framework-connection params (--port, --mq-port, --host-v4,
87
+ // --hostname, --debug-port) are FRAMEWORK settings. Only hoist them into
88
+ // GINA_* (and persist them to ~/.gina/<short>/settings.json via
89
+ // isUpdateRequired) for framework-scoped commands: bare commands
90
+ // (`start`/`stop`/`restart`/`status`/... — prefixed to `framework:*` below)
91
+ // and explicit `framework:*` commands. For a sub-topic command
92
+ // (`port:set <bundle> --port=N`, `bundle:start <bundle> --port=N`, ...)
93
+ // `--port` is the BUNDLE's port, NOT the framework socket port; hoisting it
94
+ // overwrote settings.json `port` (8124 -> bundle port), so every later
95
+ // online command connected to the wrong framework port and reported
96
+ // "[ gina ] not started". The `--inspect`/`--debug` splice below stays
97
+ // unconditional — `bundle:start ... --inspect=<port>` relies on it.
98
+ var _topic = process.argv[2] || '';
99
+ var isFrameworkScopedCmd = ( _topic.indexOf(':') < 0 || /^framework:/.test(_topic) );
100
+
86
101
  if ( params.length > 0 ) {
87
102
  for (let p = 0, len = params.length; p < len; ++p) {
88
103
 
89
- if ( /^\-\-port/.test(params[p]) ) {
104
+ if ( isFrameworkScopedCmd && /^\-\-port/.test(params[p]) ) {
90
105
  let port = params[p].split(/\=/)[1];
91
106
  setEnvVar('GINA_PORT', ~~port);// jshint ignore:line
92
107
  isUpdateRequired = true;
93
108
  continue;
94
109
  }
95
110
 
96
- if ( /^\-\-mq\-port/.test(params[p]) ) {
111
+ if ( isFrameworkScopedCmd && /^\-\-mq\-port/.test(params[p]) ) {
97
112
  let mqPort = params[p].split(/\=/)[1];
98
113
  setEnvVar('GINA_MQ_PORT', ~~mqPort);// jshint ignore:line
99
114
  isUpdateRequired = true;
100
115
  continue;
101
116
  }
102
117
 
103
- if ( /^\-\-host\-v4/.test(params[p]) ) {
118
+ if ( isFrameworkScopedCmd && /^\-\-host\-v4/.test(params[p]) ) {
104
119
  let host = params[p].split(/\=/)[1];
105
120
  setEnvVar('GINA_HOST_V4', host);// jshint ignore:line
106
121
  isUpdateRequired = true;
107
122
  continue;
108
123
  }
109
124
 
110
- if ( /^\-\-hostname/.test(params[p]) ) {
125
+ if ( isFrameworkScopedCmd && /^\-\-hostname/.test(params[p]) ) {
111
126
  hostname = params[p].split(/\=/)[1];
112
127
  setEnvVar('GINA_HOSTNAME', hostname);// jshint ignore:line
113
128
  isUpdateRequired = true;
114
129
  continue;
115
130
  }
116
131
 
117
- if ( /^\-\-debug(\_|\-)port/.test(params[p]) ) {
132
+ if ( isFrameworkScopedCmd && /^\-\-debug(\_|\-)port/.test(params[p]) ) {
118
133
  let port = params[p].split(/\=/)[1];
119
134
  setEnvVar('GINA_DEBUG_PORT', ~~port);// jshint ignore:line
120
135
  isUpdateRequired = true;
package/bin/cmd CHANGED
@@ -41,6 +41,18 @@ function Cmd(opt, runOffine) {
41
41
  var launchFramework = function(){
42
42
 
43
43
  var framework = net.createServer( function(conn) {//'connection' listener
44
+
45
+ // #B41 — per-connection accumulation buffer for the command JSON
46
+ // payload. The client sends `JSON.stringify(process.argv)` in a
47
+ // single write (bin/cli), but TCP may split or coalesce it across
48
+ // 'data' chunks, so we accumulate and only parse once the payload
49
+ // is complete. A partial chunk fails to parse and we keep waiting;
50
+ // a malformed / empty payload never completes and is ignored here
51
+ // — an unguarded JSON.parse would otherwise throw, surfacing as a
52
+ // [ FRAMEWORK ][ uncaughtException ] that drops the command (and
53
+ // risks a SIGTERM via proc.js).
54
+ var _payload = '';
55
+
44
56
  //feedback.
45
57
  conn.once('end', function() {
46
58
  console.debug('[ CLI ] task completed');
@@ -57,7 +69,28 @@ function Cmd(opt, runOffine) {
57
69
  //Receiving.
58
70
  conn.on('data', function(data) {
59
71
 
60
- var argv = JSON.parse( data.toString() );
72
+ _payload += data.toString();
73
+
74
+ var argv;
75
+ try {
76
+ argv = JSON.parse( _payload );
77
+ } catch (parseErr) {
78
+ // Payload not yet complete (TCP split) — keep accumulating.
79
+ // A non-JSON / empty payload never parses and is ignored,
80
+ // so the framework does not crash on a malformed command.
81
+ return;
82
+ }
83
+ // Complete payload consumed — reset for any further command on
84
+ // this connection.
85
+ _payload = '';
86
+
87
+ if ( !Array.isArray(argv) ) {
88
+ // Valid JSON but not the expected argv array — drop without
89
+ // crashing (argv.join below would otherwise throw). The
90
+ // real client always sends process.argv (an array).
91
+ console.warn( '[ FRAMEWORK ] ignoring non-argv command payload' );
92
+ return;
93
+ }
61
94
 
62
95
  console.debug( '[ FRAMEWORK ] CMD received "'+ argv.join(' ') +'"' );
63
96
 
@@ -34,6 +34,28 @@ var spawn = require('child_process').spawn;
34
34
  var binPath = __dirname;
35
35
  var ginaPath = binPath.replace(/\/bin$/, '');
36
36
 
37
+ // ── 0. Synchronous stdout writer ──────────────────────────────────────────────
38
+ /**
39
+ * Writes a message synchronously to stdout (fd 1).
40
+ *
41
+ * `process.stdout.write` is ASYNCHRONOUS when stdout is a pipe — the norm under
42
+ * a container log collector (kubectl/Fluentd/Datadog) or a test harness that
43
+ * pipes the launcher's stdio. A `process.stdout.write` immediately followed by
44
+ * `process.exit(1)` therefore loses its message: the process tears down before
45
+ * libuv drains the pipe. Every diagnostic this launcher prints precedes either
46
+ * the bundle spawn or a `process.exit`, so on the failure paths the message
47
+ * vanishes — exactly the empty-log signature seen in the container-boot CI
48
+ * flake. `fs.writeSync(1, …)` blocks until the bytes are handed to the pipe, so
49
+ * the diagnostic always survives. (It does not reproduce on a local TTY, where
50
+ * stdout is synchronous.)
51
+ *
52
+ * @param {string} msg - Message to write to stdout.
53
+ * @returns {void}
54
+ */
55
+ function out(msg) {
56
+ try { fs.writeSync(1, msg); } catch (e) { /* stdout gone — nothing better to do */ }
57
+ }
58
+
37
59
  // ── 1. Bootstrap utils/helper ─────────────────────────────────────────────────
38
60
  // Injects globals: _, setEnvVar, getEnvVar, getUserHome, getTmpDir, etc.
39
61
  require(ginaPath + '/utils/helper'); // jshint ignore:line
@@ -117,7 +139,7 @@ if (fs.existsSync(_mainJsonPath)) {
117
139
  try {
118
140
  var _mainData = JSON.parse(fs.readFileSync(_mainJsonPath, 'utf8'));
119
141
  if (_mainData.def_framework !== version) {
120
- process.stdout.write('[gina-container] def_framework: ' + (_mainData.def_framework || 'unset') + ' → ' + version + '\n');
142
+ out('[gina-container] def_framework: ' + (_mainData.def_framework || 'unset') + ' → ' + version + '\n');
121
143
  _mainData.def_framework = version;
122
144
  if (!_mainData.frameworks) { _mainData.frameworks = {}; }
123
145
  if (!_mainData.frameworks[shortVersion]) { _mainData.frameworks[shortVersion] = []; }
@@ -127,7 +149,7 @@ if (fs.existsSync(_mainJsonPath)) {
127
149
  fs.writeFileSync(_mainJsonPath, JSON.stringify(_mainData, null, 4));
128
150
  }
129
151
  } catch(e) {
130
- process.stdout.write('[gina-container] warn: could not sync def_framework — ' + (e.message || e) + '\n');
152
+ out('[gina-container] warn: could not sync def_framework — ' + (e.message || e) + '\n');
131
153
  }
132
154
  }
133
155
 
@@ -146,7 +168,7 @@ for (var a = 0; a < rawArgs.length; a++) {
146
168
  }
147
169
 
148
170
  if (!bundleName || !projectName) {
149
- process.stdout.write('Usage: gina-container <bundle> @<project>\n');
171
+ out('Usage: gina-container <bundle> @<project>\n');
150
172
  process.exit(1);
151
173
  }
152
174
 
@@ -155,7 +177,7 @@ var projectsPath = home + '/projects.json';
155
177
  var portsReversePath = home + '/ports.reverse.json';
156
178
 
157
179
  if (!fs.existsSync(projectsPath)) {
158
- process.stdout.write(
180
+ out(
159
181
  '[ gina-container ] ' + projectsPath + ' not found.\n' +
160
182
  ' Run: gina project:import @' + projectName + '\n'
161
183
  );
@@ -169,7 +191,7 @@ var portsReverse = fs.existsSync(portsReversePath)
169
191
 
170
192
  var projectEntry = projects[projectName];
171
193
  if (!projectEntry) {
172
- process.stdout.write(
194
+ out(
173
195
  '[ gina-container ] project @' + projectName + ' not registered in projects.json\n' +
174
196
  ' Run: gina project:import @' + projectName + '\n'
175
197
  );
@@ -199,12 +221,12 @@ try {
199
221
  }
200
222
  } catch (err) {
201
223
  // fallback: bundles/<bundle>/index.js (mirrors start.js catch block)
202
- process.stdout.write('[ gina-container ] manifest.json warning: ' + (err.message || err) + '\n');
224
+ out('[ gina-container ] manifest.json warning: ' + (err.message || err) + '\n');
203
225
  appPath = projectRoot + '/bundles/' + bundleName + '/index.js';
204
226
  }
205
227
 
206
228
  if (!fs.existsSync(appPath)) {
207
- process.stdout.write('[ gina-container ] bundle entry point not found: ' + appPath + '\n');
229
+ out('[ gina-container ] bundle entry point not found: ' + appPath + '\n');
208
230
  process.exit(1);
209
231
  }
210
232
 
@@ -239,9 +261,9 @@ var ctxJSON = JSON.stringify({
239
261
  // stdio: 'inherit' — bundle stdout/stderr go directly to the container's
240
262
  // stdout/stderr, which is what K8s log collectors (kubectl logs, Fluentd,
241
263
  // Datadog, etc.) expect. No MQ logger intermediary is needed here.
242
- process.stdout.write('[ gina-container ] Starting ' + bundleName + '@' + projectName + '\n');
243
- process.stdout.write('[ gina-container ] App: ' + appPath + '\n');
244
- process.stdout.write('[ gina-container ] Env: ' + env + ' Scope: ' + scope + '\n');
264
+ out('[ gina-container ] Starting ' + bundleName + '@' + projectName + '\n');
265
+ out('[ gina-container ] App: ' + appPath + '\n');
266
+ out('[ gina-container ] Env: ' + env + ' Scope: ' + scope + '\n');
245
267
 
246
268
  var child = spawn(process.argv[0], [appPath, ctxJSON, projectName, bundleName], {
247
269
  detached: false,
@@ -264,7 +286,7 @@ process.on('SIGINT', function() { forwardSignal('SIGINT'); });
264
286
 
265
287
  // ── 10. Exit when child exits ─────────────────────────────────────────────────
266
288
  child.on('error', function(err) {
267
- process.stdout.write('[ gina-container ] failed to spawn bundle: ' + (err.message || err) + '\n');
289
+ out('[ gina-container ] failed to spawn bundle: ' + (err.message || err) + '\n');
268
290
  process.exit(1);
269
291
  });
270
292
 
@@ -0,0 +1 @@
1
+ 0.5.3
@@ -20261,8 +20261,11 @@ function StoragePlugin(options) {
20261
20261
  * */
20262
20262
  function collectionInsert(content) {
20263
20263
 
20264
- // TODO - add uuid
20265
- content['_id'] = Date.now().toString(36) + '-' + uuid();
20264
+ // uuid(16): a 16-char base-62 suffix (62^16) avoids the birthday-paradox
20265
+ // _id collision the 4-char default risks when several records are inserted
20266
+ // within the same millisecond (the Date.now() prefix is shared at ms
20267
+ // granularity). Mirrors the lib/collection #COLL1 size=16 opt-in.
20268
+ content['_id'] = Date.now().toString(36) + '-' + uuid(16);
20266
20269
  content['_createdAt'] = new Date().format("isoDateTime");
20267
20270
  content['_updatedAt'] = new Date().format("isoDateTime");
20268
20271
 
@@ -514,7 +514,7 @@ ra(x.name,a,R)}),na=U.childNodes,fa=0,lLen=na.length,lLen>0)))for(;fa<lLen;++fa)
514
514
  va.target,'init.'+va.id,function(G){G=null;typeof va.$popins['gina-popin-'+va.id+'-'+x.name]=='undefined'&&(G=B({},xa),ya(G,x));va.isReady=!0;gina.hasPopinHandler=!0;gina.popin=B(gina.popin,va);triggerEvent(gina,va.target,'ready.'+va.id,G)});va.initialized=!0;return va}(e)}});
515
515
  function StoragePlugin(n){function D(v){k=JSON.parse(Z.getItem(this.bucket));typeof k[v]=='undefined'&&(k[v]=[],Z.setItem(this.bucket,JSON.stringify(k)),k=JSON.parse(Z.getItem(this.bucket)));p[v]={_collection:v,_bucket:this.bucket};p[v]=O(p[v],ka);return p[v]}function H(v){if(typeof v!=='object')throw Error('filter must be an object');var u=k[this._collection],Y=v.count(),l=0,g=null;if(Y==0)return null;for(var r in u)for(var I in v){var N=typeof v[I]!='boolean'?v[I].toLocaleLowerCase():v[I];v[I]&&
516
516
  e.indexOf(N)>-1&&N=='not null'&&typeof u[r][I]!='undefined'&&typeof u[r][I]!=='object'&&u[r][I]===v[I]&&u[r][I]!='null'&&u[r][I]!='undefined'?g.indexOf(u[r][I])<0&&(++l,l===Y&&(g=u[r],g._index=r,g._collection=this._collection,g._bucket=this._bucket)):typeof u[r][I]!='undefined'&&typeof u[r][I]!=='object'&&u[r][I]===v[I]&&(++l,l===Y&&(g=u[r],g._index=r,g._collection=this._collection,g._bucket=this._bucket,g._filter=v))}g&&(g.save=ca);return g}var O=O||require('lib/merge');D=D||require('lib/collection');
517
- var E=E||require('lib/uuid'),B=B||require('helpers/dateFormat'),X={bucket:'default'},C={},Z=null,p={},k={},e=['not null'],V={bucket:void 0,drop:function(){Z.removeItem(X.bucket);C=null;for(var v in this)delete this[v];return C},Collection:D},ka={insert:function(v){v._id=Date.now().toString(36)+'-'+E();v._createdAt=(new Date).format('isoDateTime');v._updatedAt=(new Date).format('isoDateTime');k[this._collection][k[this._collection].length]=v;Z.setItem(this._bucket,JSON.stringify(k))},find:function(v,
517
+ var E=E||require('lib/uuid'),B=B||require('helpers/dateFormat'),X={bucket:'default'},C={},Z=null,p={},k={},e=['not null'],V={bucket:void 0,drop:function(){Z.removeItem(X.bucket);C=null;for(var v in this)delete this[v];return C},Collection:D},ka={insert:function(v){v._id=Date.now().toString(36)+'-'+E(16);v._createdAt=(new Date).format('isoDateTime');v._updatedAt=(new Date).format('isoDateTime');k[this._collection][k[this._collection].length]=v;Z.setItem(this._bucket,JSON.stringify(k))},find:function(v,
518
518
  u){if(!v)return k[this._collection];if(typeof v!=='object')throw Error('filter must be an object');u=k[this._collection];v.count();var Y=0,l=[],g;for(g in u)for(var r in v){var I=typeof v[r]!='boolean'?v[r].toLocaleLowerCase():v[r];v[r]&&e.indexOf(I)>-1&&I=='not null'&&typeof u[g][r]!='undefined'&&typeof u[g][r]!=='object'&&u[g][r]!='null'&&u[g][r]!='undefined'?l.indexOf(u[g][r])<0&&(l[Y]=u[g][r],++Y):typeof u[g][r]!='undefined'&&typeof u[g][r]!=='object'&&u[g][r]===v[r]&&(l[Y]=u[g],++Y)}return l},
519
519
  findOne:H,update:null,'delete':function(v){if(typeof v!=='object')throw Error('filter must be an object');var u=JSON.clone(k[this._collection]),Y=0,l=[],g;for(g in u)for(var r in v)v[r]&&e.indexOf(v[r].toLocaleLowerCase())>-1&&v[r].toLowerCase()=='not null'&&typeof u[g][r]!='undefined'&&typeof u[g][r]!=='object'&&u[g][r]!='null'&&u[g][r]!='undefined'?l.indexOf(u[g][r])<0&&(l[Y]=u[g][r],delete k[this._collection][g][r],++Y):typeof u[g][r]!='undefined'&&typeof u[g][r]!=='object'&&u[g][r]===v[r]&&(l[Y]=
520
520
  u[g],k[this._collection].splice(g,1),++Y);return l.length>0?(Z.setItem(this._bucket,JSON.stringify(k)),!0):!1},drop:function(v){if(typeof k[this._collection]=='undefined')throw Error('Collection `'+v+'` not found');delete p[this._collection];delete k[this._collection];Z.setItem(this._bucket,JSON.stringify(k))}},ca=function(v){v=v||!1;try{var u=JSON.clone(k),Y=this._index,l=this._collection,g=this._bucket,r=this._filter;this._updatedAt=(new Date).format('isoDateTime');u[l][Y]=O(u[l][Y],this,!0);delete u[l][Y]._index;
@@ -2795,6 +2795,15 @@ function Config(opt, contextResetNeeded) {
2795
2795
  try {
2796
2796
  secrets.resolve(self.envConf[bundle][env]);
2797
2797
  } catch (secretErr) {
2798
+ // #B42 — name the failing secret + config path at debug level so
2799
+ // operators can locate it. The user-facing message intentionally
2800
+ // omits the key (lib/secrets/backends/env.js); the key rides on the
2801
+ // non-enumerable `_ginaSecretKey` and is surfaced here only.
2802
+ console.debug(
2803
+ '[CONFIG][loadBundleConfig] Secret resolution failed for `'
2804
+ + (secretErr._ginaSecretKey || '<unknown>')
2805
+ + '` in `'+ bundle +'/'+ env +':'+ scope +'` configuration'
2806
+ );
2798
2807
  return callback(secretErr);
2799
2808
  }
2800
2809
 
@@ -5409,7 +5409,12 @@ if ( /^local$/i.test(process.env.NODE_SCOPE) ) {
5409
5409
  * Late calls: when throwError fires after a response terminal exit has
5410
5410
  * already released the per-request refs (`local.res` is null — e.g. an
5411
5411
  * entity/query callback resuming after a redirect() sent its 301), the
5412
- * call is logged and ignored instead of crashing the bundle (#B31).
5412
+ * call is logged and ignored instead of crashing the bundle. This holds
5413
+ * for every call shape: the 1-arg `throwError(err)` form is caught by the
5414
+ * guard after the errorObject build (#B31), and the 2-arg/3-arg forms —
5415
+ * whose `res` is already the released `local.res` before that build — are
5416
+ * caught by an up-front guard so the HTTP/2 `res.stream` and the
5417
+ * errorObject-build `res.error` reads can't deref null first (#B44).
5413
5418
  *
5414
5419
  * @param {object} [ res ]
5415
5420
  * @param {number} code
@@ -5436,6 +5441,32 @@ if ( /^local$/i.test(process.env.NODE_SCOPE) ) {
5436
5441
  res = local.res;
5437
5442
  }
5438
5443
 
5444
+ // #B44 — for the 2-arg `throwError(code, Error|string)` and 3-arg
5445
+ // `throwError(local.res, code, msg)` shapes, `res` is already `local.res`
5446
+ // here (set by the shift above, or passed by the caller) — which is null
5447
+ // when a terminal exit has released the response. The reads below all
5448
+ // deref `res` BEFORE the #B31 guard further down: `res.stream` in the
5449
+ // protocol branch (HTTP/2 bundles crash there) and `res.error` /
5450
+ // `res.stack` / `res.message` / `res.fallback` in the errorObject build
5451
+ // (every bundle crashes there). So a released response would crash
5452
+ // (uncaughtException → SIGTERM) instead of being ignored. Bail up-front
5453
+ // with the same no-op contract as the #B31 guard. The 1-arg shapes keep
5454
+ // a truthy `res` (the Error/errorObj) here, so they are unaffected and
5455
+ // still reach the #B31 guard after `res` is reassigned to `local.res` at
5456
+ // the end of the errorObject build.
5457
+ if ( !res ) {
5458
+ self.isProcessingError = true;
5459
+ var _b44LateError = msg || code;
5460
+ var _b44LateErrorStr = '';
5461
+ try {
5462
+ _b44LateErrorStr = ( _b44LateError && typeof(_b44LateError) == 'object' ) ? JSON.stringify(_b44LateError) : String(_b44LateError || '');
5463
+ } catch (_b44JsonErr) {
5464
+ _b44LateErrorStr = String(_b44LateError);
5465
+ }
5466
+ console.warn('[ Controller ] throwError() called after the response was released — ignoring late error: '+ _b44LateErrorStr);
5467
+ return false;
5468
+ }
5469
+
5439
5470
  var protocol = getResponseProtocol(res);
5440
5471
  var stream = ( /http\/2/.test(protocol) && res.stream ) ? res.stream : null;
5441
5472
  var header = ( /http\/2/.test(protocol) && res.stream ) ? {} : null;
@@ -512,6 +512,20 @@ module.exports = async function renderNunjucksAsync(userData, displayInspector,
512
512
  var res = local.res;
513
513
  var _next = local.next;
514
514
 
515
+ // #B45 — released-response guard. render() can be re-entered on a controller
516
+ // instance whose terminal exit already nulled the per-request triplet — e.g.
517
+ // an action that fired several parallel self.query() calls against a downed
518
+ // upstream: the first failure callback renders a degraded response and
519
+ // releases the triplet, then a later callback re-enters render() here with
520
+ // local.res === null. A later res.stream / setResources(local.req.headers)
521
+ // deref then throws; since render() is async, that escapes as an unhandled
522
+ // promise rejection. Nothing to render to a response already sent/released —
523
+ // no-op. Mirrors render-json.js (#B36) / render-stream.js (#B38); distinct
524
+ // from the #M1 in-flight null-out the captures above isolate.
525
+ if ( local.res == null ) {
526
+ return;
527
+ }
528
+
515
529
  // #HDR5/#HDR16 — per-request CSP nonce (set on req by gina.plugins.Csp({useNonce:true})).
516
530
  var _cspNonce = (req && req._ginaCspNonce) ? req._ginaCspNonce : null;
517
531
 
@@ -968,6 +968,20 @@ module.exports = async function renderNunjucks(userData, displayInspector, errOp
968
968
  var res = local.res;
969
969
  var _next = local.next;
970
970
 
971
+ // #B45 — released-response guard. render() can be re-entered on a controller
972
+ // instance whose terminal exit already nulled the per-request triplet — e.g.
973
+ // an action that fired several parallel self.query() calls against a downed
974
+ // upstream: the first failure callback renders a degraded response and
975
+ // releases the triplet, then a later callback re-enters render() here with
976
+ // local.res === null. A later res.stream / setResources(local.req.headers)
977
+ // deref then throws; since render() is async, that escapes as an unhandled
978
+ // promise rejection. Nothing to render to a response already sent/released —
979
+ // no-op. Mirrors render-json.js (#B36) / render-stream.js (#B38); distinct
980
+ // from the #M1 in-flight null-out the captures above isolate.
981
+ if ( local.res == null ) {
982
+ return;
983
+ }
984
+
971
985
  // #HDR5 — per-request CSP nonce (set on req by gina.plugins.Csp({useNonce:true})).
972
986
  // Mirrored onto every framework-injected inline <script> so a bundle can drop
973
987
  // 'unsafe-inline' from script-src. Threaded into injectAssets() (which has no
@@ -426,6 +426,20 @@ module.exports = async function renderSwigAsync(userData, displayInspector, errO
426
426
  var res = local.res;
427
427
  var _next = local.next;
428
428
 
429
+ // #B45 — released-response guard. render() can be re-entered on a controller
430
+ // instance whose terminal exit already nulled the per-request triplet — e.g.
431
+ // an action that fired several parallel self.query() calls against a downed
432
+ // upstream: the first failure callback renders a degraded response and
433
+ // releases the triplet, then a later callback re-enters render() here with
434
+ // local.res === null. A later res.stream / setResources(local.req.headers)
435
+ // deref then throws; since render() is async, that escapes as an unhandled
436
+ // promise rejection. Nothing to render to a response already sent/released —
437
+ // no-op. Mirrors render-json.js (#B36) / render-stream.js (#B38); distinct
438
+ // from the #M1 in-flight null-out the captures above isolate.
439
+ if ( local.res == null ) {
440
+ return;
441
+ }
442
+
429
443
  // No-view short-circuit (e.g. redirect responses reach render() without a
430
444
  // configured template).
431
445
  if (!hasViews || !hasViews()) {
@@ -186,6 +186,21 @@ module.exports = async function render(userData, displayInspector, errOptions, d
186
186
  var req = local.req;
187
187
  var res = local.res;
188
188
  var _next = local.next;
189
+
190
+ // #B45 — released-response guard. render() can be re-entered on a controller
191
+ // instance whose terminal exit already nulled the per-request triplet — e.g.
192
+ // an action that fired several parallel self.query() calls against a downed
193
+ // upstream: the first failure callback renders a degraded response and
194
+ // releases the triplet, then a later callback re-enters render() here with
195
+ // local.res === null. A later res.stream / setResources(local.req.headers)
196
+ // deref then throws; since render() is async, that escapes as an unhandled
197
+ // promise rejection. Nothing to render to a response already sent/released —
198
+ // no-op. Mirrors render-json.js (#B36) / render-stream.js (#B38); distinct
199
+ // from the #M1 in-flight null-out the captures above isolate.
200
+ if ( local.res == null ) {
201
+ return;
202
+ }
203
+
189
204
  // #H10 — opt-in HTTP/2 response trailers (registered via self.sendTrailers()).
190
205
  var _trailers = (local._trailers && typeof(local._trailers) === 'object') ? local._trailers : null;
191
206
  // #HDR5 — per-request CSP nonce (set on req by gina.plugins.Csp({useNonce:true})).
@@ -431,6 +431,10 @@ var abort = function(err, bundle) {
431
431
  console.emerg(err.stack||err);
432
432
  }
433
433
 
434
+ // Guarantee the abort reason survives process.exit(): process.stdout/stderr
435
+ // are async on a pipe (e.g. under bin/gina-container), so the console.emerg
436
+ // above is truncated by the immediate exit. fs.writeSync blocks until flushed.
437
+ try { fs.writeSync(2, '[ FRAMEWORK ] abort: ' + ((err && err.stack) || err) + '\n'); } catch (_e) { /* best-effort */ }
434
438
  process.exit(1);
435
439
  };
436
440
 
@@ -695,7 +699,10 @@ gna.mount = process.mount = function(bundlesPath, source, target, type, callback
695
699
 
696
700
  } catch (err) {
697
701
  if (err) {
698
- console.emerg('[ FRAMEWORK ] '+ (err.stack||err.message));
702
+ var _mountMsg = '[ FRAMEWORK ] '+ (err.stack||err.message);
703
+ console.emerg(_mountMsg);
704
+ // Guarantee the reason survives process.exit() on an async pipe (e.g. bin/gina-container).
705
+ try { fs.writeSync(2, _mountMsg + '\n'); } catch (_e) { /* best-effort */ }
699
706
  process.exit(1)
700
707
  }
701
708
  if ( fs.existsSync(target) ) {
@@ -223,8 +223,11 @@ function StoragePlugin(options) {
223
223
  * */
224
224
  function collectionInsert(content) {
225
225
 
226
- // TODO - add uuid
227
- content['_id'] = Date.now().toString(36) + '-' + uuid();
226
+ // uuid(16): a 16-char base-62 suffix (62^16) avoids the birthday-paradox
227
+ // _id collision the 4-char default risks when several records are inserted
228
+ // within the same millisecond (the Date.now() prefix is shared at ms
229
+ // granularity). Mirrors the lib/collection #COLL1 size=16 opt-in.
230
+ content['_id'] = Date.now().toString(36) + '-' + uuid(16);
228
231
  content['_createdAt'] = new Date().format("isoDateTime");
229
232
  content['_updatedAt'] = new Date().format("isoDateTime");
230
233
 
@@ -488,7 +488,10 @@ function ServerEngineClass(options) {
488
488
  cert: readSync(options.credentials.certificate)
489
489
  };
490
490
  } catch(err) {
491
- console.emerg('You are trying to start a secured server (https) wihtout suficient credentials: check your `server settings`\n'+ err.stack);
491
+ var _credMsg = 'You are trying to start a secured server (https) wihtout suficient credentials: check your `server settings`\n'+ err.stack;
492
+ console.emerg(_credMsg);
493
+ // Guarantee the reason survives process.exit() on an async pipe (e.g. bin/gina-container).
494
+ try { fs.writeSync(2, _credMsg + '\n'); } catch (_e) { /* best-effort */ }
492
495
  process.exit(1)
493
496
  }
494
497
  }
@@ -691,7 +691,10 @@ function Server(options) {
691
691
  self.emit('configured', false, engine.instance, engine.middleware, self.conf[self.appName][self.env]);
692
692
 
693
693
  } catch (err) {
694
- console.emerg('[ BUNDLE ] [ '+ self.appName +' ] ServerEngine ' + err.stack)
694
+ var _engineMsg = '[ BUNDLE ] [ '+ self.appName +' ] ServerEngine ' + err.stack;
695
+ console.emerg(_engineMsg)
696
+ // Guarantee the reason survives process.exit() on an async pipe (e.g. bin/gina-container).
697
+ try { fs.writeSync(2, _engineMsg + '\n'); } catch (_e) { /* best-effort */ }
695
698
  process.exit(1)
696
699
  }
697
700
  }
@@ -56,6 +56,17 @@
56
56
 
57
57
  Ports 4100-4199 are reserved for Gina infrastructure and will be rejected.
58
58
 
59
+ Reassign a port already held by another bundle (--force)
60
+ ----------
61
+
62
+ By default, setting a port that another bundle/environment already holds is
63
+ rejected. Pass --force to take the port anyway: the prior holder is evicted
64
+ (it loses that port for the protocol/scheme and re-pins itself the next time
65
+ its own context runs port:set). This is the intended shape for one-bundle-per-
66
+ container deployments that pin each bundle to a fixed port.
67
+
68
+ $ gina port:set <bundle_name> @<project_name> --protocol=<protocol> --scheme=<scheme> --port=<port_number> --env=<environment> --force
69
+
59
70
  [ Listing port numbers ]
60
71
 
61
72
  $ gina port:list <bundle_name> @<project_name>