gina 0.1.6 → 0.1.8-alpha.1

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 (366) hide show
  1. package/CHANGELOG.md +60 -0
  2. package/README.md +8 -2
  3. package/ROADMAP.md +124 -0
  4. package/bin/cli +15 -0
  5. package/bin/gina-container +15 -0
  6. package/bin/gina-init +433 -0
  7. package/framework/v0.1.8-alpha.1/VERSION +1 -0
  8. package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
  9. package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/asset/plugin/dist/vendor/gina/html/toolbar.html.gz +0 -0
  10. package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/asset/plugin/dist/vendor/gina/js/gina.js +11 -0
  11. package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/asset/plugin/dist/vendor/gina/js/gina.min.js +31 -31
  12. package/framework/v0.1.8-alpha.1/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
  13. package/framework/v0.1.8-alpha.1/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
  14. package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.gz +0 -0
  15. package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/config.js +70 -9
  16. package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/connectors/couchbase/index.js +125 -31
  17. package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/controller/controller.js +278 -35
  18. package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/controller/controller.render-json.js +60 -14
  19. package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/controller/controller.render-swig.js +65 -6
  20. package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/deps/swig-1.4.2/package.json +0 -16
  21. package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/gna.js +116 -2
  22. package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/model/entity.js +194 -38
  23. package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/model/template/entityFactory.js +6 -6
  24. package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/server.isaac.js +92 -37
  25. package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/server.js +36 -2
  26. package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/template/boilerplate/bundle/config/app.json +1 -1
  27. package/framework/v0.1.8-alpha.1/core/template/boilerplate/bundle/config/connectors.json +18 -0
  28. package/framework/v0.1.8-alpha.1/core/template/boilerplate/bundle/config/settings.json +13 -0
  29. package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/template/boilerplate/bundle/config/settings.server.json +2 -2
  30. package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/template/boilerplate/bundle/config/templates.json +3 -3
  31. package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/template/boilerplate/bundle/controllers/controller.content.js +3 -3
  32. package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/template/boilerplate/bundle/controllers/controller.js +5 -5
  33. package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/template/boilerplate/bundle/controllers/setup.js +15 -18
  34. package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/template/boilerplate/bundle/index.js +11 -13
  35. package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/template/boilerplate/bundle_namespace/controllers/controller.js +3 -3
  36. package/framework/v0.1.8-alpha.1/core/template/boilerplate/bundle_public/css/home.css +3 -0
  37. package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/template/boilerplate/bundle_templates/handlers/main.js +3 -3
  38. package/framework/v0.1.8-alpha.1/core/template/boilerplate/bundle_templates/html/includes/error-msg-noscript.html +9 -0
  39. package/framework/v0.1.8-alpha.1/core/template/boilerplate/bundle_templates/html/includes/error-msg-outdated-browser.html +8 -0
  40. package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/template/conf/env.json +32 -30
  41. package/framework/v0.1.8-alpha.1/core/template/conf/manifest.json +7 -0
  42. package/framework/v0.1.8-alpha.1/core/template/conf/package.json +11 -0
  43. package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/template/conf/settings.json +11 -12
  44. package/framework/v0.1.8-alpha.1/core/template/conf/statics.json +12 -0
  45. package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/template/conf/templates.json +7 -7
  46. package/framework/{v0.1.6 → v0.1.8-alpha.1}/helpers/context.js +14 -6
  47. package/framework/v0.1.8-alpha.1/lib/cache/README.md +158 -0
  48. package/framework/v0.1.8-alpha.1/lib/cache/src/main.js +491 -0
  49. package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/bundle/add.js +32 -4
  50. package/framework/v0.1.8-alpha.1/lib/cmd/cache/stats.js +230 -0
  51. package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/framework/init.js +82 -4
  52. package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/domain/dist/public_suffix_list.dat.gz +0 -0
  53. package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/logger/src/containers/default/index.js +15 -8
  54. package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/logger/src/containers/mq/speaker.js +4 -1
  55. package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/logger/src/main.js +10 -0
  56. package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/model.js +7 -2
  57. package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/routing/src/main.js +11 -0
  58. package/migration_note.md +291 -0
  59. package/package.json +7 -6
  60. package/resources/home/framework/locals.json +5 -5
  61. package/resources/home/framework/project.json +2 -2
  62. package/resources/home/framework/projects.json +3 -3
  63. package/resources/home/main.json +26 -26
  64. package/resources/home/settings.json +30 -30
  65. package/script/pre_publish.js +207 -0
  66. package/utils/helper.js +33 -0
  67. package/bin/gina.bat +0 -8
  68. package/framework/v0.1.6/VERSION +0 -1
  69. package/framework/v0.1.6/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
  70. package/framework/v0.1.6/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
  71. package/framework/v0.1.6/core/template/boilerplate/bundle/config/settings.json +0 -12
  72. package/framework/v0.1.6/core/template/boilerplate/bundle_templates/html/includes/error-msg-noscript.html +0 -11
  73. package/framework/v0.1.6/core/template/boilerplate/bundle_templates/html/includes/error-msg-outdated-browser.html +0 -8
  74. package/framework/v0.1.6/core/template/conf/manifest.json +0 -7
  75. package/framework/v0.1.6/core/template/conf/package.json +0 -11
  76. package/framework/v0.1.6/core/template/conf/statics.json +0 -12
  77. package/framework/v0.1.6/lib/cache/README.md +0 -19
  78. package/framework/v0.1.6/lib/cache/src/main.js +0 -279
  79. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/AUTHORS +0 -0
  80. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/LICENSE +0 -0
  81. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/asset/html/nolayout.html +0 -0
  82. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/asset/html/static.html +0 -0
  83. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/asset/img/android-chrome-192x192.png +0 -0
  84. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/asset/img/android-chrome-512x512.png +0 -0
  85. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/asset/img/apple-touch-icon.png +0 -0
  86. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/asset/img/favicon-16x16.png +0 -0
  87. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/asset/img/favicon-32x32.png +0 -0
  88. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/asset/img/favicon.ico +0 -0
  89. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/asset/plugin/README.md +0 -0
  90. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/asset/plugin/dist/vendor/gina/css/gina.min.css +0 -0
  91. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
  92. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/asset/plugin/dist/vendor/gina/html/toolbar.html +0 -0
  93. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/asset/plugin/dist/vendor/gina/html/toolbar.html.br +0 -0
  94. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +0 -0
  95. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.br +0 -0
  96. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/asset/plugin/uuid.json +0 -0
  97. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/connectors/couchbase/lib/connector.js +0 -0
  98. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/connectors/couchbase/lib/connector.v2.js +0 -0
  99. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/connectors/couchbase/lib/connector.v3.js +0 -0
  100. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/connectors/couchbase/lib/connector.v4.js +0 -0
  101. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/connectors/couchbase/lib/n1ql.js +0 -0
  102. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/connectors/couchbase/lib/session-store.js +0 -0
  103. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/connectors/couchbase/lib/session-store.v2.js +0 -0
  104. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/connectors/couchbase/lib/session-store.v3.js +0 -0
  105. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/connectors/couchbase/lib/session-store.v4.js +0 -0
  106. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/content.encoding +0 -0
  107. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/controller/controller.framework.js +0 -0
  108. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/controller/controller.render-v1.js +0 -0
  109. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/controller/index.js +0 -0
  110. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/deps/busboy-1.6.0/LICENSE +0 -0
  111. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/deps/busboy-1.6.0/README.md +0 -0
  112. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/deps/busboy-1.6.0/lib/index.js +0 -0
  113. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/deps/busboy-1.6.0/lib/types/multipart.js +0 -0
  114. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/deps/busboy-1.6.0/lib/types/urlencoded.js +0 -0
  115. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/deps/busboy-1.6.0/lib/utils.js +0 -0
  116. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/deps/busboy-1.6.0/package.json +0 -0
  117. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/deps/optimist-0.6.1/LICENSE +0 -0
  118. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/deps/optimist-0.6.1/index.js +0 -0
  119. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/deps/optimist-0.6.1/package.json +0 -0
  120. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/deps/optimist-0.6.1/readme.markdown +0 -0
  121. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/deps/swig-1.4.2/HISTORY.md +0 -0
  122. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/deps/swig-1.4.2/LICENSE +0 -0
  123. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/deps/swig-1.4.2/README.md +0 -0
  124. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/deps/swig-1.4.2/bin/swig.js +0 -0
  125. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/deps/swig-1.4.2/dist/swig.min.js +0 -0
  126. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/deps/swig-1.4.2/index.js +0 -0
  127. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/deps/swig-1.4.2/lib/dateformatter.js +0 -0
  128. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/deps/swig-1.4.2/lib/filters.js +0 -0
  129. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/deps/swig-1.4.2/lib/lexer.js +0 -0
  130. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/deps/swig-1.4.2/lib/loaders/filesystem.js +0 -0
  131. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/deps/swig-1.4.2/lib/loaders/index.js +0 -0
  132. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/deps/swig-1.4.2/lib/loaders/memory.js +0 -0
  133. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/deps/swig-1.4.2/lib/parser.js +0 -0
  134. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/deps/swig-1.4.2/lib/swig.js +0 -0
  135. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/deps/swig-1.4.2/lib/tags/autoescape.js +0 -0
  136. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/deps/swig-1.4.2/lib/tags/block.js +0 -0
  137. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/deps/swig-1.4.2/lib/tags/else.js +0 -0
  138. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/deps/swig-1.4.2/lib/tags/elseif.js +0 -0
  139. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/deps/swig-1.4.2/lib/tags/extends.js +0 -0
  140. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/deps/swig-1.4.2/lib/tags/filter.js +0 -0
  141. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/deps/swig-1.4.2/lib/tags/for.js +0 -0
  142. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/deps/swig-1.4.2/lib/tags/if.js +0 -0
  143. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/deps/swig-1.4.2/lib/tags/import.js +0 -0
  144. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/deps/swig-1.4.2/lib/tags/include.js +0 -0
  145. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/deps/swig-1.4.2/lib/tags/index.js +0 -0
  146. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/deps/swig-1.4.2/lib/tags/macro.js +0 -0
  147. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/deps/swig-1.4.2/lib/tags/parent.js +0 -0
  148. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/deps/swig-1.4.2/lib/tags/raw.js +0 -0
  149. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/deps/swig-1.4.2/lib/tags/set.js +0 -0
  150. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/deps/swig-1.4.2/lib/tags/spaceless.js +0 -0
  151. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/deps/swig-1.4.2/lib/utils.js +0 -0
  152. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/deps/swig-client/swig-2.0.0.min.js +0 -0
  153. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/deps/swig-client/swig.js +0 -0
  154. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/dev/index.js +0 -0
  155. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/dev/lib/class.js +0 -0
  156. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/dev/lib/factory.js +0 -0
  157. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/dev/lib/tools.js +0 -0
  158. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/locales/README.md +0 -0
  159. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/locales/currency.json +0 -0
  160. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/locales/dist/language/en.json +0 -0
  161. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/locales/dist/language/fr.json +0 -0
  162. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/locales/dist/region/en.json +0 -0
  163. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/locales/dist/region/fr.json +0 -0
  164. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/locales/index.js +0 -0
  165. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/mime.types +0 -0
  166. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/model/index.js +0 -0
  167. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/model/template/index.js +0 -0
  168. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/plugins/README.md +0 -0
  169. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/plugins/index.js +0 -0
  170. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/plugins/lib/file/README.md +0 -0
  171. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/plugins/lib/file/build.json +0 -0
  172. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/plugins/lib/file/package.json +0 -0
  173. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/plugins/lib/intl/README.md +0 -0
  174. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/plugins/lib/intl/build.json +0 -0
  175. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/plugins/lib/intl/package.json +0 -0
  176. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/plugins/lib/intl/src/main.js +0 -0
  177. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/plugins/lib/storage/README.md +0 -0
  178. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/plugins/lib/storage/build.json +0 -0
  179. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/plugins/lib/storage/package.json +0 -0
  180. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/plugins/lib/storage/src/main.js +0 -0
  181. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/plugins/lib/validator/README.md +0 -0
  182. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/plugins/lib/validator/build.json +0 -0
  183. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/plugins/lib/validator/package.json +0 -0
  184. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/plugins/lib/validator/src/form-validator.js +0 -0
  185. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/plugins/lib/validator/src/main.js +0 -0
  186. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/router.js +0 -0
  187. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/server.express.js +0 -0
  188. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/status.codes +0 -0
  189. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/template/_gitignore +0 -0
  190. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/template/boilerplate/bundle/config/routing.json +0 -0
  191. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/template/boilerplate/bundle_public/css/default.css +0 -0
  192. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/template/boilerplate/bundle_public/css/vendor/readme.md +0 -0
  193. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/template/boilerplate/bundle_public/favicon.ico +0 -0
  194. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/template/boilerplate/bundle_public/js/vendor/readme.md +0 -0
  195. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/template/boilerplate/bundle_public/readme.md +0 -0
  196. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/template/boilerplate/bundle_templates/html/content/homepage.html +0 -0
  197. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/template/boilerplate/bundle_templates/html/layouts/main.html +0 -0
  198. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/template/command/gina.bat.tpl +0 -0
  199. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/template/command/gina.tpl +0 -0
  200. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/template/error/client/json/401.json +0 -0
  201. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/template/error/client/json/403.json +0 -0
  202. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/template/error/client/json/404.json +0 -0
  203. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/template/error/server/html/50x.html +0 -0
  204. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/template/error/server/json/500.json +0 -0
  205. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/template/error/server/json/503.json +0 -0
  206. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/core/template/extensions/logger/config.json +0 -0
  207. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/helpers/console.js +0 -0
  208. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/helpers/data/LICENSE +0 -0
  209. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/helpers/data/README.md +0 -0
  210. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/helpers/data/package.json +0 -0
  211. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/helpers/data/src/main.js +0 -0
  212. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/helpers/dateFormat.js +0 -0
  213. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/helpers/index.js +0 -0
  214. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/helpers/json/LICENSE +0 -0
  215. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/helpers/json/README.md +0 -0
  216. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/helpers/json/package.json +0 -0
  217. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/helpers/json/src/main.js +0 -0
  218. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/helpers/path.js +0 -0
  219. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/helpers/plugins/README.md +0 -0
  220. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/helpers/plugins/package.json +0 -0
  221. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/helpers/plugins/src/api-error.js +0 -0
  222. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/helpers/plugins/src/main.js +0 -0
  223. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/helpers/prototypes.js +0 -0
  224. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/helpers/task.js +0 -0
  225. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/helpers/text.js +0 -0
  226. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/archiver/README.md +0 -0
  227. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/archiver/build.json +0 -0
  228. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/archiver/package.json +0 -0
  229. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/archiver/src/dep/jszip.min.js +0 -0
  230. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/archiver/src/main.js +0 -0
  231. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cache/build.json +0 -0
  232. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cache/package.json +0 -0
  233. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/aliases.json +0 -0
  234. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/bundle/arguments.json +0 -0
  235. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/bundle/build.js +0 -0
  236. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/bundle/copy.js +0 -0
  237. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/bundle/cp.js +0 -0
  238. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/bundle/help.js +0 -0
  239. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/bundle/help.txt +0 -0
  240. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/bundle/list.js +0 -0
  241. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/bundle/remove.js +0 -0
  242. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/bundle/rename.js +0 -0
  243. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/bundle/restart.js +0 -0
  244. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/bundle/rm.js +0 -0
  245. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/bundle/start.js +0 -0
  246. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/bundle/status.js +0 -0
  247. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/bundle/stop.js +0 -0
  248. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/env/add.js +0 -0
  249. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/env/get.js +0 -0
  250. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/env/help.js +0 -0
  251. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/env/help.txt +0 -0
  252. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/env/link-dev.js +0 -0
  253. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/env/list.js +0 -0
  254. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/env/remove.js +0 -0
  255. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/env/rm.js +0 -0
  256. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/env/set.js +0 -0
  257. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/env/unset.js +0 -0
  258. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/env/use.js +0 -0
  259. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/framework/arguments.json +0 -0
  260. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/framework/build.js +0 -0
  261. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/framework/dot.js +0 -0
  262. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/framework/get.js +0 -0
  263. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/framework/help.js +0 -0
  264. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/framework/help.txt +0 -0
  265. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/framework/link-node-modules.js +0 -0
  266. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/framework/link.js +0 -0
  267. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/framework/msg.json +0 -0
  268. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/framework/open.js +0 -0
  269. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/framework/restart.js +0 -0
  270. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/framework/set.js +0 -0
  271. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/framework/start.js +0 -0
  272. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/framework/status.js +0 -0
  273. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/framework/stop.js +0 -0
  274. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/framework/tail.js +0 -0
  275. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/framework/update.js +0 -0
  276. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/framework/version.js +0 -0
  277. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/gina-dev.1.md +0 -0
  278. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/gina-framework.1.md +0 -0
  279. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/gina.1.md +0 -0
  280. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/helper.js +0 -0
  281. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/index.js +0 -0
  282. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/minion/help.js +0 -0
  283. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/minion/help.txt +0 -0
  284. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/msg.json +0 -0
  285. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/port/help.js +0 -0
  286. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/port/help.txt +0 -0
  287. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/port/inc/scan.js +0 -0
  288. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/port/list.js +0 -0
  289. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/port/reset.js +0 -0
  290. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/port/set.js +0 -0
  291. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/project/add.js +0 -0
  292. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/project/arguments.json +0 -0
  293. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/project/build.js +0 -0
  294. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/project/help.js +0 -0
  295. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/project/help.txt +0 -0
  296. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/project/import.js +0 -0
  297. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/project/list.js +0 -0
  298. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/project/move.js +0 -0
  299. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/project/remove.js +0 -0
  300. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/project/rename.js +0 -0
  301. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/project/restart.js +0 -0
  302. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/project/rm.js +0 -0
  303. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/project/start.js +0 -0
  304. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/project/status.js +0 -0
  305. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/project/stop.js +0 -0
  306. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/protocol/help.js +0 -0
  307. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/protocol/help.txt +0 -0
  308. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/protocol/list.js +0 -0
  309. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/protocol/set.js +0 -0
  310. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/scope/add.js +0 -0
  311. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/scope/help.js +0 -0
  312. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/scope/help.txt +0 -0
  313. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/scope/link-local.js +0 -0
  314. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/scope/link-production.js +0 -0
  315. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/scope/list.js +0 -0
  316. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/scope/remove.js +0 -0
  317. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/scope/rm.js +0 -0
  318. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/scope/use.js +0 -0
  319. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cmd/view/add.js +0 -0
  320. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/collection/README.md +0 -0
  321. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/collection/build.json +0 -0
  322. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/collection/package.json +0 -0
  323. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/collection/src/main.js +0 -0
  324. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/config.js +0 -0
  325. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cron/README.md +0 -0
  326. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cron/package.json +0 -0
  327. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/cron/src/main.js +0 -0
  328. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/domain/LICENSE +0 -0
  329. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/domain/README.md +0 -0
  330. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/domain/dist/2025-03-14_13-41-20_UTC.dat +0 -0
  331. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/domain/dist/public_suffix_list.dat +0 -0
  332. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/domain/dist/public_suffix_list.dat.br +0 -0
  333. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/domain/package.json +0 -0
  334. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/domain/src/main.js +0 -0
  335. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/generator/index.js +0 -0
  336. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/index.js +0 -0
  337. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/inherits/LICENSE +0 -0
  338. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/inherits/README.md +0 -0
  339. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/inherits/package.json +0 -0
  340. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/inherits/src/main.js +0 -0
  341. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/logger/README.md +0 -0
  342. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/logger/package.json +0 -0
  343. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/logger/src/containers/file/index.js +0 -0
  344. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/logger/src/containers/file/lib/logrotator/README.md +0 -0
  345. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/logger/src/containers/file/lib/logrotator/index.js +0 -0
  346. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/logger/src/containers/mq/index.js +0 -0
  347. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/logger/src/containers/mq/listener.js +0 -0
  348. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/logger/src/helper.js +0 -0
  349. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/math/index.js +0 -0
  350. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/merge/README.md +0 -0
  351. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/merge/package.json +0 -0
  352. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/merge/src/main.js +0 -0
  353. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/proc.js +0 -0
  354. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/routing/README.md +0 -0
  355. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/routing/build.json +0 -0
  356. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/routing/package.json +0 -0
  357. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/session-store.js +0 -0
  358. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/shell.js +0 -0
  359. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/swig-filters/README.md +0 -0
  360. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/swig-filters/package.json +0 -0
  361. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/swig-filters/src/main.js +0 -0
  362. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/url/README.md +0 -0
  363. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/url/index.js +0 -0
  364. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/url/routing.json +0 -0
  365. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/lib/validator.js +0 -0
  366. /package/framework/{v0.1.6 → v0.1.8-alpha.1}/package.json +0 -0
package/CHANGELOG.md CHANGED
@@ -6,6 +6,66 @@ 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.1.8-alpha.1 - 2026-03-26
10
+ ### Added
11
+ * Config variable interpolation now accepts \${variable} syntax in addition to {variable}. Both forms work in all config files (routing.json, app.json, settings.json, etc.). The {variable} syntax continues to work unchanged — migration to \${variable} is optional and will be documented in a future release.
12
+ * GINA_LOG_STDOUT=true — stdout-only mode for containerised deployments: logs emit as JSON lines (ts, level, group, msg), MQ transport disabled; compatible with kubectl logs, Fluentd, Datadog
13
+ * gina-init: stateless ~/.gina/ bootstrap for Docker/K8s containers — generates projects.json, ports.json, ports.reverse.json, and settings.json from env vars or a mounted JSON config file, with no gina CLI ceremony required
14
+ * critical: false option on this.query(): fire-and-forget HTTP/2 calls can now pass { critical: false } to swallow errors silently (log-only) instead of propagating to throwError and terminating the user-facing response (#H3)
15
+ * critical: false option on this.query(): fire-and-forget HTTP/2 calls can now pass { critical: false } to swallow errors silently (log-only) instead of propagating to throwError and terminating the user-facing response (#H3)
16
+ * HTTP/2 startup warmup: bundles can now declare server.warmup: ['https://upstream:port'] in their server config to pre-establish HTTP/2 sessions at startup. Warmup fires after bundle start, sends an initial PING to verify connectivity, then starts the 5s keepalive cycle — so the first real request reuses a live session instead of cold-connecting (#H5)
17
+ * Couchbase connector: _scope property on entities (mirrors _collection), $scope placeholder substitution in N1QL queries, _scope stored in bulkInsert records. scope read from connectors.json config, falls back to NODE_SCOPE env var
18
+ * Mockable service locator (#R2): getConfig() and getModel() now check for a __mock__ context override before hitting the real implementation. Test setup calls setContext('__mock__', { config: fn, model: fn }) — zero breaking changes, zero business logic changes. Lifts testability from E2E-only to unit-testable models and helpers
19
+ * EntitySuper now accepts optional `injected` 3rd constructor param — `{connector, config}` — for unit testing entities without a running database or framework server (#R3). getConnection() returns injected.connector when set. New this.getConfig() instance method routes through injected.config, falling back to the global getConfig()/__mock__ chain (#R2).
20
+ * SuperController.createTestInstance(deps) — static factory for controller unit testing (#R4). Creates a fresh instance with isolated local closure, wires mock req/res/next/options via setOptions(), marks it with _isTestInstance=true. Production singleton is never modified. Normalises missing conf structure so setOptions doesn't crash on minimal test deps.
21
+ * Auto-migrate main.json and settings.json on first startup of a new short version (e.g. 0.1 → 0.2, 0.5 → 1.0): copies all namespaced keys from the previous release, seeds port/hostname from the previous settings.json. Downgrade is free — old keys are never removed.
22
+ ### Changed
23
+ * whisper() now requires \${variable} syntax — bare {variable} placeholders are no longer replaced (migration: update config files and templates to use \${variable})
24
+ * bundle:add now auto-detects system locale and timezone when scaffolding settings.json (LANG/LC_ALL → Intl → en_CM / UTC fallbacks)
25
+ * conf/settings.json locale fallback now auto-detected from GINA_CULTURE at bundle config load (preferedLanguages, region, dateFormat.short, 24HourTimeFormat)
26
+ * conf/settings.json locale defaults now resolved from built-in locale database: currency.code (ISO 4217) and preferedLanguages pulled from core/locales/dist/region/ by country code
27
+ * conf/settings.json locale defaults fully auto-detected: measurementUnits (imperial for US/LR/MM), temperature (fahrenheit for US/BS/KY/PW), firstDayOfWeek from Intl.Locale.getWeekInfo()
28
+ ### Fixed
29
+ * Fixed dev-mode resource churn (#B3): DNS resolver and cache wrapper were recreated on every HTTP request because controller.js is re-required each time by the hot-reload mechanism. Both are now persisted on process.gina and reused across re-requires. Eliminates silent abandonment of in-flight DNS lookups and loss of cache-invalidation listeners between requests.
30
+ * Fixed W2 migration regression: resource template placeholders were written as \${} (empty variable) instead of \${variableName}, causing gina CLI to crash with RangeError on container startup. Also added mq_port validation in MQSpeaker to guard against malformed settings values.
31
+ * Fixed W2 migration regression: {variable} → ${variable} in bin/cli, bin/gina-container, core/config.js, entityFactory.js, framework/init.js, bundle/add.js, and resources/locals.json (#B4)
32
+ * Fixed remaining W2 regression: {gina}/{version} in templates test, {Model} in entityFactory boilerplate, {projectPath} in merge test; updated stale framework version import in merge.test.js (#B4)
33
+ * Fixed HTTPS bundle abort on startup: verifyCertificate failure during dev startup (e.g. DNS failure or self-signed cert in containers) was logged at emerg severity, triggering start.js abort detection even though the server was already listening. Downgraded to warn.
34
+ * Fixed rootDomain placeholder detection in config.js to match both `{rootDomain}` (old format) and `${rootDomain}` (new format) after the W2 interpolation migration.
35
+ * getConfig() no-arg now exposes conf.settings — settings.json content is accessible as conf.settings on the bundle conf object, consistent with conf.security
36
+ * Fixed Couchbase connector path resolution in model loader: conf.connectorsPath was never set, causing a MODULE_NOT_FOUND crash on first Couchbase connect.
37
+ * Fixed entity loader in Couchbase connector crashing with TypeError when an entities directory contains helper modules that export plain objects instead of constructor functions.
38
+ * HTTP/2 timeout messages now display in seconds when the value exceeds 1000ms (e.g. 30s instead of 30000ms)
39
+ * HTTP/2 client now retries on GOAWAY mid-stream premature close and on 502 upstream responses. Previously both failures surfaced immediately to callers with no retry, requiring application-level degraded-mode fallbacks. The 502 retry also adds a req.on('response') handler that captures the :status pseudo-header — previously unread, making nginx-level errors indistinguishable from JSON parse failures.
40
+ * renderJSON no longer throws ERR_HTTP2_INVALID_STREAM when the client disconnects (nginx timeout, browser navigation) before an async callback (Couchbase, HTTP/2 upstream) completes. The ServerHttp2Stream destroyed/closed state is now checked before stream.respond() and the request is silently dropped with a warning log.
41
+ * entity.js: guard _resolver before .then() callbacks — prevents uncaught TypeError when a Promise-returning method has no registered trigger in _triggers, which corrupted the event loop
42
+ * Fixed iso_short derivation in framework init — was using country code (cm) instead of language code (en) from culture en_CM
43
+ * Fixed ReferenceError crash on startup: defIsoShort and defDate were referenced outside their declaring function in init.js
44
+
45
+ ## 0.1.7 - 2026-03-20
46
+ ### Added
47
+ * Cache: sliding-window expiration and absolute ceiling (maxAge) for HTML and JSON response caches
48
+ * Added gina cache:stats <bundle> @<project> CLI command. Fetches and prints a grouped table of in-memory cache entries from a running bundle. Requires the bundle to be running.
49
+ * Cached routes now emit `Cache-Control` headers synchronised with the server-side TTL. A new optional `visibility` field (`"public" | "private"`, default `"private"`) in the per-route cache config controls the directive sent to browsers and CDNs. The hit path uses the remaining TTL so downstream caches do not over-serve stale content.
50
+ * Per-route outgoing query timeout: add "queryTimeout": <ms> to any routing.json rule and self.query() will use it as the request timeout budget when options.requestTimeout is not explicitly set. The hardcoded 10 s default still applies when neither is set.
51
+ ### Changed
52
+ * Cache FS writes in the JSON renderer are now asynchronous (fs.promises.writeFile), avoiding event-loop blocking on cache misses.
53
+ * routing.json queryTimeout field now accepts human-readable strings ("30s", "500ms", "2m", "1h") in addition to integer milliseconds (30000). The value is normalised to ms at parse time so req.routing.queryTimeout is always a number.
54
+ * app.json proxy target field "timeout" renamed to "requestTimeout" — unambiguous name for the per-request outgoing timeout. Update any app.json proxy target that declares a "timeout" to use "requestTimeout" instead. self.query() call sites that passed options.timeout must also be updated to options.requestTimeout.
55
+ * self.query() options field "timeout" renamed to "requestTimeout" — consistent with app.json::proxy.<service>.requestTimeout. The internal pipeline (both HTTP/1 and HTTP/2 handlers) and the defaultOptions fallback now use requestTimeout throughout
56
+ * Entity methods and Couchbase N1QL methods now return a native Promise (Option B). await entity.method(args) works directly without util.promisify. .onComplete(cb) remains fully backward-compatible. Removes the _isRegisteredFromProto guard that was silently dropping queries when a callback-path call preceded a Promise-path call on the same entity.
57
+ ### Fixed
58
+ * Sub-second TTL and maxAge values (e.g. ttl: 0.5) now work correctly in the cache. Previously, fractional seconds were truncated to zero, causing immediate eviction.
59
+ * Completed sub-second maxAge fix (#C1): both renderers were pre-truncating maxAge with ~~ before passing it to lib/cache, bypassing the Math.round fix. Removed ~~ from render-swig.js and render-json.js. Also fixed Cache-Status header calculation in server.isaac.js.
60
+ * Cache keys now include the bundle name ("static:{bundle}:{url}" and "data:{bundle}:{url}") to prevent silent cache collisions when two bundles serve the same URL path on the same server instance.
61
+ * Cache entries are now capped via LRU eviction. Cache(options) accepts a `maxEntries` option (default 0 = unlimited); when reached, the least-recently-accessed entry is evicted before each insert. The shared server cache defaults to 1000 entries, configurable via `server.cache.maxEntries` in env.json. The routing cache is capped at 5000 entries (FIFO).
62
+ * Fixed handler files returning 404 when a catch-all root statics mapping (empty key) was defined: staticResources is now sorted by descending path length so specific prefixes like /handlers/ are matched before / in the prefix-regex loop
63
+ * CORS preflight (OPTIONS) requests are now handled before routing: the server responds with HTTP 204 and the correct Access-Control-Allow-Origin header immediately, instead of forwarding to the controller action which returned an error without CORS headers. CORS response headers are now also included on all HTTP/2 JSON responses.
64
+ * self.query() queryTimeout fallback now fires correctly: moved the req.routing.queryTimeout check to before the merge with defaultOptions, which was silently overwriting timeout with the "10s" framework default before the check could run
65
+ * controller.render-swig.js: isRenderingCustomError now detected from both userData and localOptions (set by renderCustomError() in controller.js). Adds null-guard on userData. localOptions is now resolved before the flag check.
66
+ ### Security
67
+ * Removed dead framework version v0.1.1-alpha.1 from the repository. Its package.json declared sanitize-html ^2.5.0 (CVE-2021-26539, CVE-2021-26540 — XSS, high severity) and busboy ^0.2.14 (dicer ReDoS). Neither version nor its dependencies were in use.
68
+
9
69
  ## 0.1.6 - 2026-03-08
10
70
  ### Added
11
71
  * Added JSDoc across core/controller/, core/model/, and helpers/: constructor @class/@constructor/@extends, @inner on private helpers, complete @param/@returns on all public methods, @global on the _ path helper, @module on controller/index.js
package/README.md CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  [![GitHub version](https://badge.fury.io/gh/Rhinostone%2Fgina.svg)](https://badge.fury.io/gh/Rhinostone%2Fgina) [![npm version](https://badge.fury.io/js/gina.svg)](https://badge.fury.io/js/gina)
4
4
 
5
+ > **Documentation:** [https://gina.io/docs/](https://gina.io/docs/)
6
+
5
7
  <strong>Gina I/O</strong> - Node.js MVC and Event Driven framework
6
8
 
7
9
  > We are looking for people to help us test and improve `Windows` support.
@@ -169,7 +171,7 @@ __NB.:__ If you are launching the command from the project directory, you don't
169
171
  We have just created a frontend application that will host our homepage.
170
172
  You will find all bundle sources under `myproject/src`.
171
173
 
172
- __Important:__ Since you are not running a local DNS Server, you have to change the host informations. Go to `myproject/env.json` & replace `dev` hostname from `frontend-{env}-{scope}-v{projectVersionMajor}.{rootDomain}` to `localhost`.
174
+ __Important:__ Since you are not running a local DNS Server, you have to change the host informations. Go to `myproject/env.json` & replace `dev` hostname from `frontend-${env}-${scope}-v${projectVersionMajor}.${rootDomain}` to `localhost`.
173
175
  This is a temporary hack and gina will soon be provided with its own local DNS Server.
174
176
 
175
177
  You can start the bundle with the following command:
@@ -537,7 +539,7 @@ We just need to override Gina default certificate paths
537
539
 
538
540
  ```json
539
541
  {
540
- "ca": "{GINA_HOMEDIR}/certificates/scopes/{scope}/{host}/certificate.combined.pem"
542
+ "ca": "${GINA_HOMEDIR}/certificates/scopes/${scope}/${host}/certificate.combined.pem"
541
543
  }
542
544
  ```
543
545
 
@@ -613,6 +615,10 @@ After this, try again to start, it should run better.
613
615
 
614
616
  More documentation and tutorials are coming soon !
615
617
 
618
+ ---
619
+
620
+ For the full documentation, visit [https://gina.io/docs/](https://gina.io/docs/)
621
+
616
622
  ## License (MIT)
617
623
 
618
624
  Copyright © 2009-2026 [Rhinostone](http://www.rhinostone.com/)
package/ROADMAP.md ADDED
@@ -0,0 +1,124 @@
1
+ # Gina — Roadmap
2
+
3
+ This roadmap covers planned features, architectural improvements, new connectors, and AI integration. Items marked ✅ are shipped. All planned items are open to community contribution — see [CONTRIBUTING.md](./CONTRIBUTING.md) for how to get involved.
4
+
5
+ > **Docs:** [gina.io/docs](https://gina.io/docs/) · **Issues:** [github.com/Rhinostone/gina/issues](https://github.com/Rhinostone/gina/issues)
6
+
7
+ ---
8
+
9
+ ## Timeline
10
+
11
+ | Period | Version | Focus |
12
+ | --- | --- | --- |
13
+ | **Apr 2026** | `0.1.8` ✅ | Scaffold correctness · K8s support · Dependency injection · Automatic version migration |
14
+ | **Q2 2026** | `0.2.0` | Stability · WatcherService · Redis & SQLite connectors · K8s session storage |
15
+ | **Q3 2026** | `0.3.0` | Async/await · Dev hot-reload · MySQL & PostgreSQL connectors · AI Phase 2 |
16
+ | **Q4 2026** | `0.4.0` | TypeScript declarations · AI agents (OpenAPI, MCP) · ScyllaDB connector |
17
+ | **Q1 2027** | `0.5.0` | ESM support · Template engine migration · Structured logging |
18
+
19
+ ---
20
+
21
+ ## Features
22
+
23
+ | Status | Feature | Version | Target |
24
+ | --- | --- | --- | --- |
25
+ | ✅ | **Automatic version migration** — Upgrading or downgrading gina (e.g. `0.1.x → 0.2.0`, `0.5.x → 1.0.0`) automatically migrates `~/.gina/` config to the new version on first startup. Downgrade is free — old version data is never removed. | `0.1.8` | 2026-03-26 |
26
+ | 📋 | **`watchers.json`** — First-class bundle config for file watchers. Declare watchers on config files with event-based notification (no polling). Foundation for the dev-mode hot-reload system. | `0.2.0` | Q2 2026 |
27
+
28
+ ---
29
+
30
+ ## Modernisation
31
+
32
+ ### Phase 1 — Stability
33
+
34
+ | Status | Feature | Version | Target |
35
+ | --- | --- | --- | --- |
36
+ | 📋 | **Per-request controller instances** — Each request gets its own controller instance, eliminating shared mutable state under concurrency. | `0.2.0` | Q2 2026 |
37
+ | 📋 | **Entity `_arguments` buffer scoped to call** — Move the event result buffer from the entity to the individual call, preventing concurrent callers from sharing state. | `0.2.0` | Q2 2026 |
38
+ | 📋 | **Retire `freeMemory`** — Once per-request instances land (#M1), there is no shared `local` closure to null. Replace `freeMemory` call sites with explicit `local.req = null; local.res = null; local.next = null` at response exit points. | `0.2.0` | Q2 2026 |
39
+
40
+ ### Phase 2 — Async
41
+
42
+ | Status | Feature | Version | Target |
43
+ | --- | --- | --- | --- |
44
+ | 📋 | **Promise adapter for entity calls** — `entityCall(emitter)` wraps the EventEmitter `.onComplete(cb)` pattern in a Promise. Controllers can switch to `async/await` immediately without rewriting entities. | `0.3.0` | Q3 2026 |
45
+ | 📋 | **Async controller actions** — Controller actions become `async function`. Single `try/catch` per action replaces ad-hoc error guards. | `0.3.0` | Q3 2026 |
46
+
47
+ ### Phase 3 — Dev Tooling
48
+
49
+ | Status | Feature | Version | Target |
50
+ | --- | --- | --- | --- |
51
+ | 📋 | **File-watcher hot-reload** — Replace `delete require.cache` per-request with a `WatcherService` that evicts modules only on actual file change. Controllers and SQL files reload on save with zero per-request overhead. | `0.3.0` | Q3 2026 |
52
+ | 📋 | **SQL annotation parser** — Replace the single-pass regex for N1QL file parsing with a state-machine parser. Handles nested block comments and `--` in string literals correctly. | `0.3.0` | Q3 2026 |
53
+
54
+ ### Phase 4 — DX
55
+
56
+ | Status | Feature | Version | Target |
57
+ | --- | --- | --- | --- |
58
+ | 📋 | **Explicit exports for global helpers** — `getContext`, `setContext`, `_`, `requireJSON` etc. available as explicit `require('gina/gna').getContext` imports alongside the existing global injection. Enables IDE navigation and static analysis. | `0.4.0` | Q4 2026 |
59
+ | 📋 | **TypeScript declaration files** — `.d.ts` declarations for the public surface: `SuperController`, `EntitySuper`, connector config shapes, `routing.json` schema. No TS migration of internals — just declarations for consumer projects. | `0.4.0` | Q4 2026 |
60
+
61
+ ### Phase 5 — Future
62
+
63
+ | Status | Feature | Version | Target |
64
+ | --- | --- | --- | --- |
65
+ | 📋 | **ESM compatibility layer** — Dual CJS/ESM entry points via `"exports"` in `package.json`. Framework internals stay CJS; public API gets ESM re-exports. | `0.5.0` | Q1 2027 |
66
+ | 📋 | **Template engine migration** — Replace the abandoned Swig 1.4.2 with a maintained engine. Leading candidate: Nunjucks (identical Jinja2-style syntax — existing templates require no changes). | `0.5.0` | Q1 2027 |
67
+ | 📋 | **Structured logging** — JSON log output (`{ level, message, bundle, requestId, durationMs }`). Additive — existing consumers are unaffected. Enables log aggregation (Loki, Datadog, CloudWatch). | `0.5.0` | Q1 2027 |
68
+
69
+ ---
70
+
71
+ ## Connectors
72
+
73
+ New database connectors follow the same interface as the existing Couchbase connector: declared in `connectors.json`, acquired via `getConnection()`.
74
+
75
+ | Status | Connector | Version | Target | Notes |
76
+ | --- | --- | --- | --- | --- |
77
+ | 📋 | **Redis** | `0.2.0` | Q2 2026 | Session store and general-purpose cache. Client: `ioredis`. Required for K8s horizontal scaling. |
78
+ | 📋 | **SQLite** | `0.2.0` | Q2 2026 | Three use cases: framework state storage (replaces JSON files under `~/.gina/`), session store for single-pod/dev deployments, and embedded ORM connector. Uses `node:sqlite` (Node.js built-in since v22.5.0 — zero npm deps). |
79
+ | 📋 | **MySQL / MariaDB** | `0.3.0` | Q3 2026 | ORM connector. Client: `mysql2`. |
80
+ | 📋 | **PostgreSQL** | `0.3.0` | Q3 2026 | ORM connector. Client: `pg` (node-postgres). |
81
+ | 📋 | **ScyllaDB** | `0.4.0` | Q4 2026 | Cassandra-compatible wide-column store. Client: `@scylladb/scylla-driver`. |
82
+ | 📋 | **MongoDB** | `0.4.0` | Q4 2026 | Document store connector. Client: `mongodb` (official driver). Interface approach TBD — MongoDB's document model differs from the N1QL/SQL pattern used by existing connectors. |
83
+
84
+ ---
85
+
86
+ ## K8s & Docker
87
+
88
+ | Status | Feature | Version | Date |
89
+ | --- | --- | --- | --- |
90
+ | ✅ | **Graceful shutdown on SIGTERM** — `server.close()` drains in-flight requests with configurable hard timeout (`GINA_SHUTDOWN_TIMEOUT`). | `0.1.8` | 2026-03-06 |
91
+ | ✅ | **`gina-container` foreground launcher** — Drop-in entrypoint for Docker/K8s. Spawns the bundle non-detached, forwards SIGTERM, exits with the child's code. No framework socket server required. | `0.1.8` | 2026-03-06 |
92
+ | ✅ | **Stdout/stderr structured logging** — `GINA_LOG_STDOUT=true` emits JSON lines compatible with `kubectl logs`, Fluentd, and Datadog. | `0.1.8` | 2026-03-21 |
93
+ | ✅ | **`gina-init` — stateless container bootstrap** — Generates all required `~/.gina/` config from env vars or a mounted JSON file. Idempotent. Makes the framework init-container friendly. | `0.1.8` | 2026-03-22 |
94
+ | 📋 | **Session storage for horizontal scaling** — Plug-in session store backed by Redis (#CN1) for multi-pod deployments. Default in-memory store remains available for single-pod and development. | `0.2.0` | Q2 2026 |
95
+
96
+ ---
97
+
98
+ ## AI
99
+
100
+ ### Phase 1 — AI can write Gina code correctly
101
+
102
+ | Status | Feature | Version | Target |
103
+ | --- | --- | --- | --- |
104
+ | 📋 | **JSON Schemas for config files** — Machine-readable schemas for `routing.json`, `connectors.json`, `app.json`, `settings.json`, `app.crons.json`. Adds `"$schema"` references to generated scaffold files. Gives editors free validation and autocomplete; gives AI assistants authoritative field names so generated config is correct on the first attempt. | `0.2.0` | Q2 2026 |
105
+ | 📋 | **TypeScript declaration files** — Cross-listed with Modernisation Phase 4. Essential for AI code generation accuracy. | `0.4.0` | Q4 2026 |
106
+
107
+ ### Phase 2 — Gina apps can use AI
108
+
109
+ | Status | Feature | Version | Target |
110
+ | --- | --- | --- | --- |
111
+ | 📋 | **AI connector** — Declare an AI provider in `connectors.json` and acquire a client via `getConnection()`. Supported protocols: `anthropic://`, `openai://`. Follows the same pattern as database connectors. | `0.3.0` | Q3 2026 |
112
+ | 📋 | **`renderStream` — streaming responses** — `self.renderStream(asyncIterable, contentType)` streams SSE or chunked JSON without buffering. Required for LLM token streaming without bypassing the render pipeline. | `0.3.0` | Q3 2026 |
113
+ | 📋 | **Async job pattern for slow AI calls** — First-class "start job → return jobId → poll or webhook on completion" pattern integrated with the cron/queue infrastructure. Prevents LLM latency (1–30s) from blocking the response pipeline. | `0.4.0` | Q4 2026 |
114
+
115
+ ### Phase 3 — AI agents can consume Gina apps
116
+
117
+ | Status | Feature | Version | Target |
118
+ | --- | --- | --- | --- |
119
+ | 📋 | **OpenAPI spec generation** — `gina bundle:openapi @myproject` emits `openapi.json` from `routing.json`. Zero manual spec writing — route annotations become `description` fields. Makes any Gina app consumable by AI agents, API gateways, and testing tools. | `0.4.0` | Q4 2026 |
120
+ | 📋 | **MCP server wrapper** — `gina bundle:mcp @myproject` exposes `routing.json` routes as MCP (Model Context Protocol) tools. Makes any Gina app a native MCP server discoverable by AI agents. | `0.4.0` | Q4 2026 |
121
+
122
+ ---
123
+
124
+ *Last updated: 2026-03-26 · To suggest a feature, [open an issue](https://github.com/Rhinostone/gina/issues).*
package/bin/cli CHANGED
@@ -133,6 +133,21 @@ async function onExec() {
133
133
  settings = requireJSON(settingsPath);// jshint ignore:line
134
134
  }
135
135
 
136
+ // Guard: settings.json may contain unresolved ${} template placeholders
137
+ // if it was written by a broken W2 migration. Null out any such values
138
+ // so env helpers fall back to safe OS defaults and init.js can regenerate
139
+ // the file correctly on the next framework start.
140
+ var _hasUnresolved = function(v) { return typeof(v) === 'string' && v.indexOf('${') >= 0; };// jshint ignore:line
141
+ if (_hasUnresolved(settings['log_level'])) { settings['log_level'] = 'info'; }
142
+ if (_hasUnresolved(settings['rundir'])) { settings['rundir'] = undefined; }
143
+ if (_hasUnresolved(settings['logdir'])) { settings['logdir'] = undefined; }
144
+ if (_hasUnresolved(settings['tmpdir'])) { settings['tmpdir'] = undefined; }
145
+ if (_hasUnresolved(settings['env'])) { settings['env'] = undefined; }
146
+ if (_hasUnresolved(settings['scope'])) { settings['scope'] = undefined; }
147
+ if (_hasUnresolved(settings['mq_port'])) { settings['mq_port'] = 8125; }
148
+ if (_hasUnresolved(settings['port'])) { settings['port'] = 8124; }
149
+ if (_hasUnresolved(settings['host_v4'])) { settings['host_v4'] = '127.0.0.1'; }
150
+ if (_hasUnresolved(settings['hostname'])) { settings['hostname'] = undefined; }
136
151
 
137
152
  setEnvVar('GINA_LOG_LEVEL', settings['log_level']);// jshint ignore:line
138
153
  setEnvVar('GINA_VERSION', version);// jshint ignore:line
@@ -59,6 +59,21 @@ if (fs.existsSync(settingsPath)) {
59
59
  settings = JSON.parse(fs.readFileSync(settingsPath, 'utf8'));
60
60
  }
61
61
 
62
+ // Guard: settings.json may contain unresolved ${} template placeholders
63
+ // if it was written by a broken W2 migration. Null out any such values
64
+ // so env helpers fall back to safe OS defaults.
65
+ var _hasUnresolved = function(v) { return typeof(v) === 'string' && v.indexOf('${') >= 0; };// jshint ignore:line
66
+ if (_hasUnresolved(settings['log_level'])) { settings['log_level'] = 'info'; }
67
+ if (_hasUnresolved(settings['rundir'])) { settings['rundir'] = undefined; }
68
+ if (_hasUnresolved(settings['logdir'])) { settings['logdir'] = undefined; }
69
+ if (_hasUnresolved(settings['tmpdir'])) { settings['tmpdir'] = undefined; }
70
+ if (_hasUnresolved(settings['env'])) { settings['env'] = undefined; }
71
+ if (_hasUnresolved(settings['scope'])) { settings['scope'] = undefined; }
72
+ if (_hasUnresolved(settings['mq_port'])) { settings['mq_port'] = 8125; }
73
+ if (_hasUnresolved(settings['port'])) { settings['port'] = 8124; }
74
+ if (_hasUnresolved(settings['host_v4'])) { settings['host_v4'] = '127.0.0.1'; }
75
+ if (_hasUnresolved(settings['hostname'])) { settings['hostname'] = undefined; }
76
+
62
77
  // ── 3. Set all GINA_* env vars (mirrors bin/cli bootstrap) ───────────────────
63
78
  var arch = process.arch;
64
79
  switch (process.arch) {