gina 0.1.7 → 0.1.8

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 (364) hide show
  1. package/.github/dependabot.yml +12 -0
  2. package/CHANGELOG.md +47 -0
  3. package/CONTRIBUTING.md +190 -0
  4. package/GOVERNANCE.md +20 -0
  5. package/README.md +7 -3
  6. package/ROADMAP.md +165 -0
  7. package/bin/cli +15 -0
  8. package/bin/gina-container +15 -0
  9. package/bin/gina-init +433 -0
  10. package/framework/v0.1.8/VERSION +1 -0
  11. package/framework/{v0.1.7 → v0.1.8}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
  12. package/framework/{v0.1.7 → v0.1.8}/core/asset/plugin/dist/vendor/gina/html/toolbar.html.gz +0 -0
  13. package/framework/{v0.1.7 → v0.1.8}/core/asset/plugin/dist/vendor/gina/js/gina.js +16 -0
  14. package/framework/{v0.1.7 → v0.1.8}/core/asset/plugin/dist/vendor/gina/js/gina.min.js +235 -234
  15. package/framework/v0.1.8/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
  16. package/framework/v0.1.8/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
  17. package/framework/{v0.1.7 → v0.1.8}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.gz +0 -0
  18. package/framework/{v0.1.7 → v0.1.8}/core/config.js +66 -7
  19. package/framework/{v0.1.7 → v0.1.8}/core/connectors/couchbase/index.js +48 -1
  20. package/framework/{v0.1.7 → v0.1.8}/core/controller/controller.js +224 -26
  21. package/framework/{v0.1.7 → v0.1.8}/core/controller/controller.render-json.js +8 -0
  22. package/framework/{v0.1.7 → v0.1.8}/core/deps/swig-1.4.2/package.json +0 -16
  23. package/framework/{v0.1.7 → v0.1.8}/core/gna.js +116 -2
  24. package/framework/{v0.1.7 → v0.1.8}/core/model/entity.js +80 -7
  25. package/framework/{v0.1.7 → v0.1.8}/core/model/template/entityFactory.js +6 -6
  26. package/framework/{v0.1.7 → v0.1.8}/core/server.isaac.js +13 -22
  27. package/framework/{v0.1.7 → v0.1.8}/core/server.js +1 -1
  28. package/framework/{v0.1.7 → v0.1.8}/core/template/boilerplate/bundle/config/app.json +1 -1
  29. package/framework/v0.1.8/core/template/boilerplate/bundle/config/connectors.json +18 -0
  30. package/framework/v0.1.8/core/template/boilerplate/bundle/config/settings.json +13 -0
  31. package/framework/{v0.1.7 → v0.1.8}/core/template/boilerplate/bundle/config/settings.server.json +2 -2
  32. package/framework/{v0.1.7 → v0.1.8}/core/template/boilerplate/bundle/config/templates.json +3 -3
  33. package/framework/{v0.1.7 → v0.1.8}/core/template/boilerplate/bundle/controllers/controller.content.js +3 -3
  34. package/framework/{v0.1.7 → v0.1.8}/core/template/boilerplate/bundle/controllers/controller.js +5 -5
  35. package/framework/{v0.1.7 → v0.1.8}/core/template/boilerplate/bundle/controllers/setup.js +15 -18
  36. package/framework/{v0.1.7 → v0.1.8}/core/template/boilerplate/bundle/index.js +11 -13
  37. package/framework/{v0.1.7 → v0.1.8}/core/template/boilerplate/bundle_namespace/controllers/controller.js +3 -3
  38. package/framework/v0.1.8/core/template/boilerplate/bundle_public/css/home.css +3 -0
  39. package/framework/{v0.1.7 → v0.1.8}/core/template/boilerplate/bundle_templates/handlers/main.js +3 -3
  40. package/framework/v0.1.8/core/template/boilerplate/bundle_templates/html/includes/error-msg-noscript.html +9 -0
  41. package/framework/v0.1.8/core/template/boilerplate/bundle_templates/html/includes/error-msg-outdated-browser.html +8 -0
  42. package/framework/{v0.1.7 → v0.1.8}/core/template/conf/env.json +29 -29
  43. package/framework/v0.1.8/core/template/conf/manifest.json +7 -0
  44. package/framework/v0.1.8/core/template/conf/package.json +11 -0
  45. package/framework/{v0.1.7 → v0.1.8}/core/template/conf/settings.json +5 -5
  46. package/framework/v0.1.8/core/template/conf/statics.json +12 -0
  47. package/framework/{v0.1.7 → v0.1.8}/core/template/conf/templates.json +7 -7
  48. package/framework/{v0.1.7 → v0.1.8}/helpers/context.js +14 -7
  49. package/framework/{v0.1.7 → v0.1.8}/lib/cmd/bundle/add.js +32 -4
  50. package/framework/{v0.1.7 → v0.1.8}/lib/cmd/framework/init.js +82 -4
  51. package/framework/{v0.1.7 → v0.1.8}/lib/domain/dist/public_suffix_list.dat.gz +0 -0
  52. package/framework/{v0.1.7 → v0.1.8}/lib/logger/src/containers/default/index.js +15 -8
  53. package/framework/{v0.1.7 → v0.1.8}/lib/logger/src/containers/mq/speaker.js +4 -1
  54. package/framework/{v0.1.7 → v0.1.8}/lib/logger/src/main.js +10 -0
  55. package/framework/{v0.1.7 → v0.1.8}/lib/model.js +7 -2
  56. package/migration_note.md +37 -3
  57. package/package.json +5 -4
  58. package/resources/home/framework/locals.json +5 -5
  59. package/resources/home/framework/project.json +2 -2
  60. package/resources/home/framework/projects.json +3 -3
  61. package/resources/home/main.json +26 -26
  62. package/resources/home/settings.json +30 -30
  63. package/framework/v0.1.7/VERSION +0 -1
  64. package/framework/v0.1.7/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
  65. package/framework/v0.1.7/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
  66. package/framework/v0.1.7/core/template/boilerplate/bundle/config/settings.json +0 -12
  67. package/framework/v0.1.7/core/template/boilerplate/bundle_templates/html/includes/error-msg-noscript.html +0 -11
  68. package/framework/v0.1.7/core/template/boilerplate/bundle_templates/html/includes/error-msg-outdated-browser.html +0 -8
  69. package/framework/v0.1.7/core/template/conf/manifest.json +0 -7
  70. package/framework/v0.1.7/core/template/conf/package.json +0 -11
  71. package/framework/v0.1.7/core/template/conf/statics.json +0 -12
  72. /package/framework/{v0.1.7 → v0.1.8}/AUTHORS +0 -0
  73. /package/framework/{v0.1.7 → v0.1.8}/LICENSE +0 -0
  74. /package/framework/{v0.1.7 → v0.1.8}/core/asset/html/nolayout.html +0 -0
  75. /package/framework/{v0.1.7 → v0.1.8}/core/asset/html/static.html +0 -0
  76. /package/framework/{v0.1.7 → v0.1.8}/core/asset/img/android-chrome-192x192.png +0 -0
  77. /package/framework/{v0.1.7 → v0.1.8}/core/asset/img/android-chrome-512x512.png +0 -0
  78. /package/framework/{v0.1.7 → v0.1.8}/core/asset/img/apple-touch-icon.png +0 -0
  79. /package/framework/{v0.1.7 → v0.1.8}/core/asset/img/favicon-16x16.png +0 -0
  80. /package/framework/{v0.1.7 → v0.1.8}/core/asset/img/favicon-32x32.png +0 -0
  81. /package/framework/{v0.1.7 → v0.1.8}/core/asset/img/favicon.ico +0 -0
  82. /package/framework/{v0.1.7 → v0.1.8}/core/asset/plugin/README.md +0 -0
  83. /package/framework/{v0.1.7 → v0.1.8}/core/asset/plugin/dist/vendor/gina/css/gina.min.css +0 -0
  84. /package/framework/{v0.1.7 → v0.1.8}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
  85. /package/framework/{v0.1.7 → v0.1.8}/core/asset/plugin/dist/vendor/gina/html/toolbar.html +0 -0
  86. /package/framework/{v0.1.7 → v0.1.8}/core/asset/plugin/dist/vendor/gina/html/toolbar.html.br +0 -0
  87. /package/framework/{v0.1.7 → v0.1.8}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +0 -0
  88. /package/framework/{v0.1.7 → v0.1.8}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.br +0 -0
  89. /package/framework/{v0.1.7 → v0.1.8}/core/asset/plugin/uuid.json +0 -0
  90. /package/framework/{v0.1.7 → v0.1.8}/core/connectors/couchbase/lib/connector.js +0 -0
  91. /package/framework/{v0.1.7 → v0.1.8}/core/connectors/couchbase/lib/connector.v2.js +0 -0
  92. /package/framework/{v0.1.7 → v0.1.8}/core/connectors/couchbase/lib/connector.v3.js +0 -0
  93. /package/framework/{v0.1.7 → v0.1.8}/core/connectors/couchbase/lib/connector.v4.js +0 -0
  94. /package/framework/{v0.1.7 → v0.1.8}/core/connectors/couchbase/lib/n1ql.js +0 -0
  95. /package/framework/{v0.1.7 → v0.1.8}/core/connectors/couchbase/lib/session-store.js +0 -0
  96. /package/framework/{v0.1.7 → v0.1.8}/core/connectors/couchbase/lib/session-store.v2.js +0 -0
  97. /package/framework/{v0.1.7 → v0.1.8}/core/connectors/couchbase/lib/session-store.v3.js +0 -0
  98. /package/framework/{v0.1.7 → v0.1.8}/core/connectors/couchbase/lib/session-store.v4.js +0 -0
  99. /package/framework/{v0.1.7 → v0.1.8}/core/content.encoding +0 -0
  100. /package/framework/{v0.1.7 → v0.1.8}/core/controller/controller.framework.js +0 -0
  101. /package/framework/{v0.1.7 → v0.1.8}/core/controller/controller.render-swig.js +0 -0
  102. /package/framework/{v0.1.7 → v0.1.8}/core/controller/controller.render-v1.js +0 -0
  103. /package/framework/{v0.1.7 → v0.1.8}/core/controller/index.js +0 -0
  104. /package/framework/{v0.1.7 → v0.1.8}/core/deps/busboy-1.6.0/LICENSE +0 -0
  105. /package/framework/{v0.1.7 → v0.1.8}/core/deps/busboy-1.6.0/README.md +0 -0
  106. /package/framework/{v0.1.7 → v0.1.8}/core/deps/busboy-1.6.0/lib/index.js +0 -0
  107. /package/framework/{v0.1.7 → v0.1.8}/core/deps/busboy-1.6.0/lib/types/multipart.js +0 -0
  108. /package/framework/{v0.1.7 → v0.1.8}/core/deps/busboy-1.6.0/lib/types/urlencoded.js +0 -0
  109. /package/framework/{v0.1.7 → v0.1.8}/core/deps/busboy-1.6.0/lib/utils.js +0 -0
  110. /package/framework/{v0.1.7 → v0.1.8}/core/deps/busboy-1.6.0/package.json +0 -0
  111. /package/framework/{v0.1.7 → v0.1.8}/core/deps/optimist-0.6.1/LICENSE +0 -0
  112. /package/framework/{v0.1.7 → v0.1.8}/core/deps/optimist-0.6.1/index.js +0 -0
  113. /package/framework/{v0.1.7 → v0.1.8}/core/deps/optimist-0.6.1/package.json +0 -0
  114. /package/framework/{v0.1.7 → v0.1.8}/core/deps/optimist-0.6.1/readme.markdown +0 -0
  115. /package/framework/{v0.1.7 → v0.1.8}/core/deps/swig-1.4.2/HISTORY.md +0 -0
  116. /package/framework/{v0.1.7 → v0.1.8}/core/deps/swig-1.4.2/LICENSE +0 -0
  117. /package/framework/{v0.1.7 → v0.1.8}/core/deps/swig-1.4.2/README.md +0 -0
  118. /package/framework/{v0.1.7 → v0.1.8}/core/deps/swig-1.4.2/bin/swig.js +0 -0
  119. /package/framework/{v0.1.7 → v0.1.8}/core/deps/swig-1.4.2/dist/swig.min.js +0 -0
  120. /package/framework/{v0.1.7 → v0.1.8}/core/deps/swig-1.4.2/index.js +0 -0
  121. /package/framework/{v0.1.7 → v0.1.8}/core/deps/swig-1.4.2/lib/dateformatter.js +0 -0
  122. /package/framework/{v0.1.7 → v0.1.8}/core/deps/swig-1.4.2/lib/filters.js +0 -0
  123. /package/framework/{v0.1.7 → v0.1.8}/core/deps/swig-1.4.2/lib/lexer.js +0 -0
  124. /package/framework/{v0.1.7 → v0.1.8}/core/deps/swig-1.4.2/lib/loaders/filesystem.js +0 -0
  125. /package/framework/{v0.1.7 → v0.1.8}/core/deps/swig-1.4.2/lib/loaders/index.js +0 -0
  126. /package/framework/{v0.1.7 → v0.1.8}/core/deps/swig-1.4.2/lib/loaders/memory.js +0 -0
  127. /package/framework/{v0.1.7 → v0.1.8}/core/deps/swig-1.4.2/lib/parser.js +0 -0
  128. /package/framework/{v0.1.7 → v0.1.8}/core/deps/swig-1.4.2/lib/swig.js +0 -0
  129. /package/framework/{v0.1.7 → v0.1.8}/core/deps/swig-1.4.2/lib/tags/autoescape.js +0 -0
  130. /package/framework/{v0.1.7 → v0.1.8}/core/deps/swig-1.4.2/lib/tags/block.js +0 -0
  131. /package/framework/{v0.1.7 → v0.1.8}/core/deps/swig-1.4.2/lib/tags/else.js +0 -0
  132. /package/framework/{v0.1.7 → v0.1.8}/core/deps/swig-1.4.2/lib/tags/elseif.js +0 -0
  133. /package/framework/{v0.1.7 → v0.1.8}/core/deps/swig-1.4.2/lib/tags/extends.js +0 -0
  134. /package/framework/{v0.1.7 → v0.1.8}/core/deps/swig-1.4.2/lib/tags/filter.js +0 -0
  135. /package/framework/{v0.1.7 → v0.1.8}/core/deps/swig-1.4.2/lib/tags/for.js +0 -0
  136. /package/framework/{v0.1.7 → v0.1.8}/core/deps/swig-1.4.2/lib/tags/if.js +0 -0
  137. /package/framework/{v0.1.7 → v0.1.8}/core/deps/swig-1.4.2/lib/tags/import.js +0 -0
  138. /package/framework/{v0.1.7 → v0.1.8}/core/deps/swig-1.4.2/lib/tags/include.js +0 -0
  139. /package/framework/{v0.1.7 → v0.1.8}/core/deps/swig-1.4.2/lib/tags/index.js +0 -0
  140. /package/framework/{v0.1.7 → v0.1.8}/core/deps/swig-1.4.2/lib/tags/macro.js +0 -0
  141. /package/framework/{v0.1.7 → v0.1.8}/core/deps/swig-1.4.2/lib/tags/parent.js +0 -0
  142. /package/framework/{v0.1.7 → v0.1.8}/core/deps/swig-1.4.2/lib/tags/raw.js +0 -0
  143. /package/framework/{v0.1.7 → v0.1.8}/core/deps/swig-1.4.2/lib/tags/set.js +0 -0
  144. /package/framework/{v0.1.7 → v0.1.8}/core/deps/swig-1.4.2/lib/tags/spaceless.js +0 -0
  145. /package/framework/{v0.1.7 → v0.1.8}/core/deps/swig-1.4.2/lib/utils.js +0 -0
  146. /package/framework/{v0.1.7 → v0.1.8}/core/deps/swig-client/swig-2.0.0.min.js +0 -0
  147. /package/framework/{v0.1.7 → v0.1.8}/core/deps/swig-client/swig.js +0 -0
  148. /package/framework/{v0.1.7 → v0.1.8}/core/dev/index.js +0 -0
  149. /package/framework/{v0.1.7 → v0.1.8}/core/dev/lib/class.js +0 -0
  150. /package/framework/{v0.1.7 → v0.1.8}/core/dev/lib/factory.js +0 -0
  151. /package/framework/{v0.1.7 → v0.1.8}/core/dev/lib/tools.js +0 -0
  152. /package/framework/{v0.1.7 → v0.1.8}/core/locales/README.md +0 -0
  153. /package/framework/{v0.1.7 → v0.1.8}/core/locales/currency.json +0 -0
  154. /package/framework/{v0.1.7 → v0.1.8}/core/locales/dist/language/en.json +0 -0
  155. /package/framework/{v0.1.7 → v0.1.8}/core/locales/dist/language/fr.json +0 -0
  156. /package/framework/{v0.1.7 → v0.1.8}/core/locales/dist/region/en.json +0 -0
  157. /package/framework/{v0.1.7 → v0.1.8}/core/locales/dist/region/fr.json +0 -0
  158. /package/framework/{v0.1.7 → v0.1.8}/core/locales/index.js +0 -0
  159. /package/framework/{v0.1.7 → v0.1.8}/core/mime.types +0 -0
  160. /package/framework/{v0.1.7 → v0.1.8}/core/model/index.js +0 -0
  161. /package/framework/{v0.1.7 → v0.1.8}/core/model/template/index.js +0 -0
  162. /package/framework/{v0.1.7 → v0.1.8}/core/plugins/README.md +0 -0
  163. /package/framework/{v0.1.7 → v0.1.8}/core/plugins/index.js +0 -0
  164. /package/framework/{v0.1.7 → v0.1.8}/core/plugins/lib/file/README.md +0 -0
  165. /package/framework/{v0.1.7 → v0.1.8}/core/plugins/lib/file/build.json +0 -0
  166. /package/framework/{v0.1.7 → v0.1.8}/core/plugins/lib/file/package.json +0 -0
  167. /package/framework/{v0.1.7 → v0.1.8}/core/plugins/lib/intl/README.md +0 -0
  168. /package/framework/{v0.1.7 → v0.1.8}/core/plugins/lib/intl/build.json +0 -0
  169. /package/framework/{v0.1.7 → v0.1.8}/core/plugins/lib/intl/package.json +0 -0
  170. /package/framework/{v0.1.7 → v0.1.8}/core/plugins/lib/intl/src/main.js +0 -0
  171. /package/framework/{v0.1.7 → v0.1.8}/core/plugins/lib/storage/README.md +0 -0
  172. /package/framework/{v0.1.7 → v0.1.8}/core/plugins/lib/storage/build.json +0 -0
  173. /package/framework/{v0.1.7 → v0.1.8}/core/plugins/lib/storage/package.json +0 -0
  174. /package/framework/{v0.1.7 → v0.1.8}/core/plugins/lib/storage/src/main.js +0 -0
  175. /package/framework/{v0.1.7 → v0.1.8}/core/plugins/lib/validator/README.md +0 -0
  176. /package/framework/{v0.1.7 → v0.1.8}/core/plugins/lib/validator/build.json +0 -0
  177. /package/framework/{v0.1.7 → v0.1.8}/core/plugins/lib/validator/package.json +0 -0
  178. /package/framework/{v0.1.7 → v0.1.8}/core/plugins/lib/validator/src/form-validator.js +0 -0
  179. /package/framework/{v0.1.7 → v0.1.8}/core/plugins/lib/validator/src/main.js +0 -0
  180. /package/framework/{v0.1.7 → v0.1.8}/core/router.js +0 -0
  181. /package/framework/{v0.1.7 → v0.1.8}/core/server.express.js +0 -0
  182. /package/framework/{v0.1.7 → v0.1.8}/core/status.codes +0 -0
  183. /package/framework/{v0.1.7 → v0.1.8}/core/template/_gitignore +0 -0
  184. /package/framework/{v0.1.7 → v0.1.8}/core/template/boilerplate/bundle/config/routing.json +0 -0
  185. /package/framework/{v0.1.7 → v0.1.8}/core/template/boilerplate/bundle_public/css/default.css +0 -0
  186. /package/framework/{v0.1.7 → v0.1.8}/core/template/boilerplate/bundle_public/css/vendor/readme.md +0 -0
  187. /package/framework/{v0.1.7 → v0.1.8}/core/template/boilerplate/bundle_public/favicon.ico +0 -0
  188. /package/framework/{v0.1.7 → v0.1.8}/core/template/boilerplate/bundle_public/js/vendor/readme.md +0 -0
  189. /package/framework/{v0.1.7 → v0.1.8}/core/template/boilerplate/bundle_public/readme.md +0 -0
  190. /package/framework/{v0.1.7 → v0.1.8}/core/template/boilerplate/bundle_templates/html/content/homepage.html +0 -0
  191. /package/framework/{v0.1.7 → v0.1.8}/core/template/boilerplate/bundle_templates/html/layouts/main.html +0 -0
  192. /package/framework/{v0.1.7 → v0.1.8}/core/template/command/gina.bat.tpl +0 -0
  193. /package/framework/{v0.1.7 → v0.1.8}/core/template/command/gina.tpl +0 -0
  194. /package/framework/{v0.1.7 → v0.1.8}/core/template/error/client/json/401.json +0 -0
  195. /package/framework/{v0.1.7 → v0.1.8}/core/template/error/client/json/403.json +0 -0
  196. /package/framework/{v0.1.7 → v0.1.8}/core/template/error/client/json/404.json +0 -0
  197. /package/framework/{v0.1.7 → v0.1.8}/core/template/error/server/html/50x.html +0 -0
  198. /package/framework/{v0.1.7 → v0.1.8}/core/template/error/server/json/500.json +0 -0
  199. /package/framework/{v0.1.7 → v0.1.8}/core/template/error/server/json/503.json +0 -0
  200. /package/framework/{v0.1.7 → v0.1.8}/core/template/extensions/logger/config.json +0 -0
  201. /package/framework/{v0.1.7 → v0.1.8}/helpers/console.js +0 -0
  202. /package/framework/{v0.1.7 → v0.1.8}/helpers/data/LICENSE +0 -0
  203. /package/framework/{v0.1.7 → v0.1.8}/helpers/data/README.md +0 -0
  204. /package/framework/{v0.1.7 → v0.1.8}/helpers/data/package.json +0 -0
  205. /package/framework/{v0.1.7 → v0.1.8}/helpers/data/src/main.js +0 -0
  206. /package/framework/{v0.1.7 → v0.1.8}/helpers/dateFormat.js +0 -0
  207. /package/framework/{v0.1.7 → v0.1.8}/helpers/index.js +0 -0
  208. /package/framework/{v0.1.7 → v0.1.8}/helpers/json/LICENSE +0 -0
  209. /package/framework/{v0.1.7 → v0.1.8}/helpers/json/README.md +0 -0
  210. /package/framework/{v0.1.7 → v0.1.8}/helpers/json/package.json +0 -0
  211. /package/framework/{v0.1.7 → v0.1.8}/helpers/json/src/main.js +0 -0
  212. /package/framework/{v0.1.7 → v0.1.8}/helpers/path.js +0 -0
  213. /package/framework/{v0.1.7 → v0.1.8}/helpers/plugins/README.md +0 -0
  214. /package/framework/{v0.1.7 → v0.1.8}/helpers/plugins/package.json +0 -0
  215. /package/framework/{v0.1.7 → v0.1.8}/helpers/plugins/src/api-error.js +0 -0
  216. /package/framework/{v0.1.7 → v0.1.8}/helpers/plugins/src/main.js +0 -0
  217. /package/framework/{v0.1.7 → v0.1.8}/helpers/prototypes.js +0 -0
  218. /package/framework/{v0.1.7 → v0.1.8}/helpers/task.js +0 -0
  219. /package/framework/{v0.1.7 → v0.1.8}/helpers/text.js +0 -0
  220. /package/framework/{v0.1.7 → v0.1.8}/lib/archiver/README.md +0 -0
  221. /package/framework/{v0.1.7 → v0.1.8}/lib/archiver/build.json +0 -0
  222. /package/framework/{v0.1.7 → v0.1.8}/lib/archiver/package.json +0 -0
  223. /package/framework/{v0.1.7 → v0.1.8}/lib/archiver/src/dep/jszip.min.js +0 -0
  224. /package/framework/{v0.1.7 → v0.1.8}/lib/archiver/src/main.js +0 -0
  225. /package/framework/{v0.1.7 → v0.1.8}/lib/cache/README.md +0 -0
  226. /package/framework/{v0.1.7 → v0.1.8}/lib/cache/build.json +0 -0
  227. /package/framework/{v0.1.7 → v0.1.8}/lib/cache/package.json +0 -0
  228. /package/framework/{v0.1.7 → v0.1.8}/lib/cache/src/main.js +0 -0
  229. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/aliases.json +0 -0
  230. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/bundle/arguments.json +0 -0
  231. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/bundle/build.js +0 -0
  232. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/bundle/copy.js +0 -0
  233. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/bundle/cp.js +0 -0
  234. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/bundle/help.js +0 -0
  235. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/bundle/help.txt +0 -0
  236. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/bundle/list.js +0 -0
  237. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/bundle/remove.js +0 -0
  238. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/bundle/rename.js +0 -0
  239. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/bundle/restart.js +0 -0
  240. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/bundle/rm.js +0 -0
  241. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/bundle/start.js +0 -0
  242. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/bundle/status.js +0 -0
  243. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/bundle/stop.js +0 -0
  244. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/cache/stats.js +0 -0
  245. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/env/add.js +0 -0
  246. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/env/get.js +0 -0
  247. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/env/help.js +0 -0
  248. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/env/help.txt +0 -0
  249. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/env/link-dev.js +0 -0
  250. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/env/list.js +0 -0
  251. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/env/remove.js +0 -0
  252. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/env/rm.js +0 -0
  253. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/env/set.js +0 -0
  254. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/env/unset.js +0 -0
  255. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/env/use.js +0 -0
  256. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/framework/arguments.json +0 -0
  257. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/framework/build.js +0 -0
  258. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/framework/dot.js +0 -0
  259. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/framework/get.js +0 -0
  260. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/framework/help.js +0 -0
  261. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/framework/help.txt +0 -0
  262. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/framework/link-node-modules.js +0 -0
  263. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/framework/link.js +0 -0
  264. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/framework/msg.json +0 -0
  265. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/framework/open.js +0 -0
  266. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/framework/restart.js +0 -0
  267. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/framework/set.js +0 -0
  268. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/framework/start.js +0 -0
  269. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/framework/status.js +0 -0
  270. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/framework/stop.js +0 -0
  271. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/framework/tail.js +0 -0
  272. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/framework/update.js +0 -0
  273. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/framework/version.js +0 -0
  274. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/gina-dev.1.md +0 -0
  275. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/gina-framework.1.md +0 -0
  276. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/gina.1.md +0 -0
  277. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/helper.js +0 -0
  278. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/index.js +0 -0
  279. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/minion/help.js +0 -0
  280. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/minion/help.txt +0 -0
  281. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/msg.json +0 -0
  282. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/port/help.js +0 -0
  283. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/port/help.txt +0 -0
  284. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/port/inc/scan.js +0 -0
  285. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/port/list.js +0 -0
  286. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/port/reset.js +0 -0
  287. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/port/set.js +0 -0
  288. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/project/add.js +0 -0
  289. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/project/arguments.json +0 -0
  290. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/project/build.js +0 -0
  291. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/project/help.js +0 -0
  292. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/project/help.txt +0 -0
  293. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/project/import.js +0 -0
  294. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/project/list.js +0 -0
  295. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/project/move.js +0 -0
  296. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/project/remove.js +0 -0
  297. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/project/rename.js +0 -0
  298. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/project/restart.js +0 -0
  299. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/project/rm.js +0 -0
  300. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/project/start.js +0 -0
  301. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/project/status.js +0 -0
  302. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/project/stop.js +0 -0
  303. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/protocol/help.js +0 -0
  304. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/protocol/help.txt +0 -0
  305. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/protocol/list.js +0 -0
  306. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/protocol/set.js +0 -0
  307. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/scope/add.js +0 -0
  308. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/scope/help.js +0 -0
  309. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/scope/help.txt +0 -0
  310. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/scope/link-local.js +0 -0
  311. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/scope/link-production.js +0 -0
  312. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/scope/list.js +0 -0
  313. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/scope/remove.js +0 -0
  314. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/scope/rm.js +0 -0
  315. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/scope/use.js +0 -0
  316. /package/framework/{v0.1.7 → v0.1.8}/lib/cmd/view/add.js +0 -0
  317. /package/framework/{v0.1.7 → v0.1.8}/lib/collection/README.md +0 -0
  318. /package/framework/{v0.1.7 → v0.1.8}/lib/collection/build.json +0 -0
  319. /package/framework/{v0.1.7 → v0.1.8}/lib/collection/package.json +0 -0
  320. /package/framework/{v0.1.7 → v0.1.8}/lib/collection/src/main.js +0 -0
  321. /package/framework/{v0.1.7 → v0.1.8}/lib/config.js +0 -0
  322. /package/framework/{v0.1.7 → v0.1.8}/lib/cron/README.md +0 -0
  323. /package/framework/{v0.1.7 → v0.1.8}/lib/cron/package.json +0 -0
  324. /package/framework/{v0.1.7 → v0.1.8}/lib/cron/src/main.js +0 -0
  325. /package/framework/{v0.1.7 → v0.1.8}/lib/domain/LICENSE +0 -0
  326. /package/framework/{v0.1.7 → v0.1.8}/lib/domain/README.md +0 -0
  327. /package/framework/{v0.1.7 → v0.1.8}/lib/domain/dist/2025-03-14_13-41-20_UTC.dat +0 -0
  328. /package/framework/{v0.1.7 → v0.1.8}/lib/domain/dist/public_suffix_list.dat +0 -0
  329. /package/framework/{v0.1.7 → v0.1.8}/lib/domain/dist/public_suffix_list.dat.br +0 -0
  330. /package/framework/{v0.1.7 → v0.1.8}/lib/domain/package.json +0 -0
  331. /package/framework/{v0.1.7 → v0.1.8}/lib/domain/src/main.js +0 -0
  332. /package/framework/{v0.1.7 → v0.1.8}/lib/generator/index.js +0 -0
  333. /package/framework/{v0.1.7 → v0.1.8}/lib/index.js +0 -0
  334. /package/framework/{v0.1.7 → v0.1.8}/lib/inherits/LICENSE +0 -0
  335. /package/framework/{v0.1.7 → v0.1.8}/lib/inherits/README.md +0 -0
  336. /package/framework/{v0.1.7 → v0.1.8}/lib/inherits/package.json +0 -0
  337. /package/framework/{v0.1.7 → v0.1.8}/lib/inherits/src/main.js +0 -0
  338. /package/framework/{v0.1.7 → v0.1.8}/lib/logger/README.md +0 -0
  339. /package/framework/{v0.1.7 → v0.1.8}/lib/logger/package.json +0 -0
  340. /package/framework/{v0.1.7 → v0.1.8}/lib/logger/src/containers/file/index.js +0 -0
  341. /package/framework/{v0.1.7 → v0.1.8}/lib/logger/src/containers/file/lib/logrotator/README.md +0 -0
  342. /package/framework/{v0.1.7 → v0.1.8}/lib/logger/src/containers/file/lib/logrotator/index.js +0 -0
  343. /package/framework/{v0.1.7 → v0.1.8}/lib/logger/src/containers/mq/index.js +0 -0
  344. /package/framework/{v0.1.7 → v0.1.8}/lib/logger/src/containers/mq/listener.js +0 -0
  345. /package/framework/{v0.1.7 → v0.1.8}/lib/logger/src/helper.js +0 -0
  346. /package/framework/{v0.1.7 → v0.1.8}/lib/math/index.js +0 -0
  347. /package/framework/{v0.1.7 → v0.1.8}/lib/merge/README.md +0 -0
  348. /package/framework/{v0.1.7 → v0.1.8}/lib/merge/package.json +0 -0
  349. /package/framework/{v0.1.7 → v0.1.8}/lib/merge/src/main.js +0 -0
  350. /package/framework/{v0.1.7 → v0.1.8}/lib/proc.js +0 -0
  351. /package/framework/{v0.1.7 → v0.1.8}/lib/routing/README.md +0 -0
  352. /package/framework/{v0.1.7 → v0.1.8}/lib/routing/build.json +0 -0
  353. /package/framework/{v0.1.7 → v0.1.8}/lib/routing/package.json +0 -0
  354. /package/framework/{v0.1.7 → v0.1.8}/lib/routing/src/main.js +0 -0
  355. /package/framework/{v0.1.7 → v0.1.8}/lib/session-store.js +0 -0
  356. /package/framework/{v0.1.7 → v0.1.8}/lib/shell.js +0 -0
  357. /package/framework/{v0.1.7 → v0.1.8}/lib/swig-filters/README.md +0 -0
  358. /package/framework/{v0.1.7 → v0.1.8}/lib/swig-filters/package.json +0 -0
  359. /package/framework/{v0.1.7 → v0.1.8}/lib/swig-filters/src/main.js +0 -0
  360. /package/framework/{v0.1.7 → v0.1.8}/lib/url/README.md +0 -0
  361. /package/framework/{v0.1.7 → v0.1.8}/lib/url/index.js +0 -0
  362. /package/framework/{v0.1.7 → v0.1.8}/lib/url/routing.json +0 -0
  363. /package/framework/{v0.1.7 → v0.1.8}/lib/validator.js +0 -0
  364. /package/framework/{v0.1.7 → v0.1.8}/package.json +0 -0
@@ -0,0 +1,12 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: "npm"
4
+ directory: "/"
5
+ schedule:
6
+ interval: "weekly"
7
+ ignore:
8
+ # Vendored dependencies under framework/v*/ are managed manually.
9
+ # They are not installed via npm — do not auto-update them.
10
+ - dependency-name: "*"
11
+ update-types: ["version-update:semver-patch"]
12
+ open-pull-requests-limit: 5
package/CHANGELOG.md CHANGED
@@ -6,6 +6,53 @@ 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 - 2026-03-27
10
+ ### Added
11
+ * Added .github/dependabot.yml — weekly npm dependency updates for root package.json; vendored framework deps excluded
12
+ * Added _debugLog / _isDebugLog to server.isaac.js (LOG_LEVEL=debug|trace outputs gray-coded timestamps with [gina:isaac] group tag, matching gna.js and server.js)
13
+ ### Changed
14
+ * package.json description updated to: Node.js MVC framework with built-in HTTP/2, multi-bundle architecture, and scope-based data isolation — no Express dependency
15
+ ### Fixed
16
+ * Removed swig devDependency declarations (package.json.dist) from git — eliminated 6 Dependabot false-positive alerts (lodash, express, phantomjs are swig test-only deps, never installed or reachable at runtime)
17
+ * Popin overlay stuck active after form submit: data-gina-popin-loading attribute was set on XHR readyState 1/3 but never removed on readyState 4 (response complete), leaving the overlay blocking subsequent interactions. Cleared in xhr.onreadystatechange readyState==4, popinClose, and popinReset.
18
+ * Couchbase connector: @include directives sent raw to Couchbase in dev mode — the dev-mode SQL re-read refreshed the query body without re-expanding @include tokens, causing N1QL syntax errors. Dev-mode re-read now applies the same @include expansion as the startup parser.
19
+
20
+ ## 0.1.8-alpha.1 - 2026-03-26
21
+ ### Added
22
+ * 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.
23
+ * 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
24
+ * 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
25
+ * 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)
26
+ * 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)
27
+ * 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)
28
+ * 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
29
+ * 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
30
+ * 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).
31
+ * 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.
32
+ * 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.
33
+ ### Changed
34
+ * whisper() now requires \${variable} syntax — bare {variable} placeholders are no longer replaced (migration: update config files and templates to use \${variable})
35
+ * bundle:add now auto-detects system locale and timezone when scaffolding settings.json (LANG/LC_ALL → Intl → en_CM / UTC fallbacks)
36
+ * conf/settings.json locale fallback now auto-detected from GINA_CULTURE at bundle config load (preferedLanguages, region, dateFormat.short, 24HourTimeFormat)
37
+ * 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
38
+ * 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()
39
+ ### Fixed
40
+ * 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.
41
+ * 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.
42
+ * 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)
43
+ * 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)
44
+ * 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.
45
+ * Fixed rootDomain placeholder detection in config.js to match both `{rootDomain}` (old format) and `${rootDomain}` (new format) after the W2 interpolation migration.
46
+ * getConfig() no-arg now exposes conf.settings — settings.json content is accessible as conf.settings on the bundle conf object, consistent with conf.security
47
+ * Fixed Couchbase connector path resolution in model loader: conf.connectorsPath was never set, causing a MODULE_NOT_FOUND crash on first Couchbase connect.
48
+ * Fixed entity loader in Couchbase connector crashing with TypeError when an entities directory contains helper modules that export plain objects instead of constructor functions.
49
+ * HTTP/2 timeout messages now display in seconds when the value exceeds 1000ms (e.g. 30s instead of 30000ms)
50
+ * 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.
51
+ * 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.
52
+ * 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
53
+ * Fixed iso_short derivation in framework init — was using country code (cm) instead of language code (en) from culture en_CM
54
+ * Fixed ReferenceError crash on startup: defIsoShort and defDate were referenced outside their declaring function in init.js
55
+
9
56
  ## 0.1.7 - 2026-03-20
10
57
  ### Added
11
58
  * Cache: sliding-window expiration and absolute ceiling (maxAge) for HTML and JSON response caches
@@ -0,0 +1,190 @@
1
+ # Contributing to Gina
2
+
3
+ Gina follows a BDFL governance model — see [GOVERNANCE.md](./GOVERNANCE.md) for how decisions are made. Contributions of all experience levels are welcome.
4
+
5
+ ---
6
+
7
+ ## Table of contents
8
+
9
+ - [Requirements](#requirements)
10
+ - [Getting started locally](#getting-started-locally)
11
+ - [Running the tests](#running-the-tests)
12
+ - [Development environment](#development-environment)
13
+ - [Debugging](#debugging)
14
+ - [Branch model](#branch-model)
15
+ - [Commit style](#commit-style)
16
+ - [Changelog](#changelog)
17
+ - [Pull request checklist](#pull-request-checklist)
18
+ - [Reporting bugs](#reporting-bugs)
19
+ - [Proposing features](#proposing-features)
20
+
21
+ ---
22
+
23
+ ## Requirements
24
+
25
+ | Requirement | Version |
26
+ | --- | --- |
27
+ | OS | macOS or Linux (Windows: Docker only) |
28
+ | Node.js | >= 18 |
29
+ | npm | >= 8 |
30
+ | Changie | >= 1.24 |
31
+
32
+ ---
33
+
34
+ ## Getting started locally
35
+
36
+ Gina must be installed globally — the CLI and framework bootstrapper expect to run from the npm global prefix. Contributors clone directly into that location instead of using `npm install -g .`.
37
+
38
+ #### 1. Find your global prefix
39
+
40
+ ```bash
41
+ npm config get prefix --quiet
42
+ ```
43
+
44
+ The default is `/usr/local` (system) or `~/.npm-global` (user). The target directory is `${prefix}/lib/node_modules/gina`.
45
+
46
+ #### 2. Clone into the prefix
47
+
48
+ ```bash
49
+ cd $(npm config get prefix)/lib/node_modules
50
+ git clone https://github.com/Rhinostone/gina.git gina
51
+ cd gina && git checkout develop
52
+ ```
53
+
54
+ #### 3. Run the install scripts
55
+
56
+ ```bash
57
+ node ./script/pre_install.js
58
+ node ./script/post_install.js
59
+ ```
60
+
61
+ #### 4. Verify
62
+
63
+ ```bash
64
+ gina version
65
+ ```
66
+
67
+ ---
68
+
69
+ ## Running the tests
70
+
71
+ The test suite uses Node's built-in `node:test` runner — no additional test dependencies needed.
72
+
73
+ ```bash
74
+ # Run all tests
75
+ node --test test/**/*.test.js
76
+
77
+ # Run a single file
78
+ node --test test/core/controller.test.js
79
+ ```
80
+
81
+ ---
82
+
83
+ ## Development environment
84
+
85
+ When contributing to the framework, use the `dev` environment. It enables hot-reload, the debug toolbar, and verbose logging that makes it easier to follow what the framework is doing internally.
86
+
87
+ ```bash
88
+ gina framework:set --env=dev
89
+ ```
90
+
91
+ This sets the default environment so you can omit `--env=dev` from subsequent commands. To start the framework:
92
+
93
+ ```bash
94
+ gina start
95
+ ```
96
+
97
+ To follow logs in real time:
98
+
99
+ ```bash
100
+ gina tail --follow
101
+ ```
102
+
103
+ To revert to production defaults:
104
+
105
+ ```bash
106
+ gina framework:set --env=prod
107
+ ```
108
+
109
+ ---
110
+
111
+ ## Debugging
112
+
113
+ ### Framework
114
+
115
+ ```bash
116
+ gina start --inspect-gina
117
+ ```
118
+
119
+ ### Bundle
120
+
121
+ ```bash
122
+ gina bundle:restart <bundle_name> @<project_name> --inspect=<port_number>
123
+ ```
124
+
125
+ ---
126
+
127
+ ## Branch model
128
+
129
+ | Branch | Purpose |
130
+ | --- | --- |
131
+ | `master` | Stable — merged from `develop` via PR at release time |
132
+ | `develop` | Working branch — all PRs target this branch |
133
+
134
+ Always branch from `develop` and open your PR against `develop`.
135
+
136
+ ---
137
+
138
+ ## Commit style
139
+
140
+ Use imperative or gerund sentences, matching the existing log:
141
+
142
+ ```text
143
+ Fixed GlobalContext::whisper() memory leak
144
+ Added _debugLog to server.isaac.js
145
+ Allowing bundle:build to build for dev env
146
+ ```
147
+
148
+ - One logical change per commit
149
+ - No references to AI tools in commit messages, comments, or files
150
+
151
+ ---
152
+
153
+ ## Changelog
154
+
155
+ Gina uses [changie](https://changie.dev) for changelog management. After any user-facing change, run:
156
+
157
+ ```bash
158
+ changie new
159
+ ```
160
+
161
+ Pick the kind (`Added`, `Changed`, `Fixed`, `Removed`, `Security`) and write the body from the user's perspective. Do **not** edit `CHANGELOG.md` directly — changie generates it at release time from entries in `.changes/unreleased/`.
162
+
163
+ ---
164
+
165
+ ## Pull request checklist
166
+
167
+ Before opening a PR against `develop`:
168
+
169
+ - [ ] Tests pass — `node --test test/**/*.test.js`
170
+ - [ ] New behaviour is covered by a test (or an explanation is provided for why it cannot be)
171
+ - [ ] A `changie new` entry exists for any user-facing change
172
+ - [ ] Commit messages follow the style above
173
+ - [ ] Docs updated if public API, CLI, or config schema changed
174
+
175
+ ---
176
+
177
+ ## Reporting bugs
178
+
179
+ Open a [GitHub issue](https://github.com/Rhinostone/gina/issues) and include:
180
+
181
+ - Node.js version (`node --version`)
182
+ - Gina version (`gina --version`)
183
+ - Minimal reproduction steps
184
+ - Expected vs actual behaviour
185
+
186
+ ---
187
+
188
+ ## Proposing features
189
+
190
+ Open a GitHub issue describing the use case **before** writing code. Features that align with the [roadmap](./ROADMAP.md) and architecture are most likely to be accepted. Significant API changes go through a public discussion period before being finalised.
package/GOVERNANCE.md ADDED
@@ -0,0 +1,20 @@
1
+ # Governance
2
+
3
+ Gina follows the **BDFL** (Benevolent Dictator For Life) model with a commitment to transparency.
4
+
5
+ Gina is developed and maintained by **Martin Luther** ([Rhinostone](https://www.rhinostone.com/)). Final decisions on direction, API design, and releases rest with the maintainer. Community contributions and RFCs are welcome and taken seriously.
6
+
7
+ ## How decisions are made
8
+
9
+ - **Patches and bug fixes** — reviewed and merged by the maintainer. Open a pull request against `develop`.
10
+ - **New features** — open a GitHub issue describing the use case before writing code. Features that align with the roadmap and architecture are most likely to be accepted.
11
+ - **Breaking changes and API design** — decided by the maintainer after considering community input. Significant changes go through a public discussion period on GitHub before being finalised.
12
+ - **Releases** — scheduled and cut by the maintainer following the [roadmap](./ROADMAP.md).
13
+
14
+ ## Contributing
15
+
16
+ See [CONTRIBUTING.md](./CONTRIBUTING.md) for how to set up the project locally, the commit style, and the PR checklist.
17
+
18
+ ## Code of Conduct
19
+
20
+ Be respectful. Contributions of all experience levels are welcome.
package/README.md CHANGED
@@ -171,7 +171,7 @@ __NB.:__ If you are launching the command from the project directory, you don't
171
171
  We have just created a frontend application that will host our homepage.
172
172
  You will find all bundle sources under `myproject/src`.
173
173
 
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`.
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`.
175
175
  This is a temporary hack and gina will soon be provided with its own local DNS Server.
176
176
 
177
177
  You can start the bundle with the following command:
@@ -229,7 +229,7 @@ Gina is shipped with [Swig](https://node-swig.github.io/swig-templates/) as the
229
229
 
230
230
  Please, note that you have 2 types of environments : one for the framework, and one for your project & your bundles.
231
231
 
232
- > By default, Gina (the framework) comes with 2 environments : `dev` and `prod`. The default is `prod`. If you are [contributing](./README-4Contributors.md) to the framework or prototyping your application or service, we advise using the `dev` environment.
232
+ > By default, Gina (the framework) comes with 2 environments : `dev` and `prod`. The default is `prod`. If you are [contributing](./CONTRIBUTING.md) to the framework or prototyping your application or service, we advise using the `dev` environment.
233
233
  >
234
234
  > ```tty
235
235
  > gina framework:set --env=dev
@@ -539,7 +539,7 @@ We just need to override Gina default certificate paths
539
539
 
540
540
  ```json
541
541
  {
542
- "ca": "{GINA_HOMEDIR}/certificates/scopes/{scope}/{host}/certificate.combined.pem"
542
+ "ca": "${GINA_HOMEDIR}/certificates/scopes/${scope}/${host}/certificate.combined.pem"
543
543
  }
544
544
  ```
545
545
 
@@ -619,6 +619,10 @@ More documentation and tutorials are coming soon !
619
619
 
620
620
  For the full documentation, visit [https://gina.io/docs/](https://gina.io/docs/)
621
621
 
622
+ ## Governance
623
+
624
+ Gina is led by Martin Luther (Rhinostone). Final decisions on direction, API design, and releases rest with the maintainer. Community contributions and RFCs are welcome and taken seriously. See [GOVERNANCE.md](./GOVERNANCE.md) for details.
625
+
622
626
  ## License (MIT)
623
627
 
624
628
  Copyright © 2009-2026 [Rhinostone](http://www.rhinostone.com/)
package/ROADMAP.md ADDED
@@ -0,0 +1,165 @@
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 · Startup cache |
15
+ | **Q3 2026** | `0.3.0` | Async/await · Dev hot-reload · MySQL & PostgreSQL connectors · AI Phase 2 · Tutorials · Mobile backend guide · Route radix tree |
16
+ | **Q4 2026** | `0.4.0` | TypeScript declarations · AI agents (OpenAPI, MCP) · ScyllaDB connector · PWA scaffold · Advanced tutorial · Website redesign · Bun investigation |
17
+ | **Q1 2027** | `0.5.0` | ESM support · Template engine migration · Structured logging |
18
+ | **Q3 2027** | `1.0.0` | First stable release — Windows alpha compatibility is a hard gate |
19
+
20
+ ---
21
+
22
+ ## Features
23
+
24
+ | Status | Feature | Version | Target |
25
+ | --- | --- | --- | --- |
26
+ | ✅ | **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 |
27
+ | 📋 | **`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 |
28
+ | 📋 | **PWA scaffold** — `gina bundle:add` drops `manifest.json`, a service worker stub (`sw.js`), and the required `<meta>` / `<link>` tags into the bundle boilerplate. Zero runtime dependency. Enables Gina apps to be installed on mobile as PWAs without additional tooling. | `0.4.0` | Q4 2026 |
29
+
30
+ ---
31
+
32
+ ## Modernisation
33
+
34
+ ### Phase 1 — Stability
35
+
36
+ | Status | Feature | Version | Target |
37
+ | --- | --- | --- | --- |
38
+ | 📋 | **Per-request controller instances** — Each request gets its own controller instance, eliminating shared mutable state under concurrency. | `0.2.0` | Q2 2026 |
39
+ | 📋 | **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 |
40
+ | 📋 | **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 |
41
+
42
+ ### Phase 2 — Async
43
+
44
+ | Status | Feature | Version | Target |
45
+ | --- | --- | --- | --- |
46
+ | 📋 | **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 |
47
+ | 📋 | **Async controller actions** — Controller actions become `async function`. Single `try/catch` per action replaces ad-hoc error guards. | `0.3.0` | Q3 2026 |
48
+
49
+ ### Phase 3 — Dev Tooling
50
+
51
+ | Status | Feature | Version | Target |
52
+ | --- | --- | --- | --- |
53
+ | 📋 | **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 |
54
+ | 📋 | **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 |
55
+
56
+ ### Phase 4 — DX
57
+
58
+ | Status | Feature | Version | Target |
59
+ | --- | --- | --- | --- |
60
+ | 📋 | **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 |
61
+ | 📋 | **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 |
62
+
63
+ ### Phase 5 — Future
64
+
65
+ | Status | Feature | Version | Target |
66
+ | --- | --- | --- | --- |
67
+ | 📋 | **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 |
68
+ | 📋 | **Pluggable template engine** — Swig 1.4.2 stays fully integrated and remains the default. Nunjucks added as a supported alternative (opt-in per project via config). The render layer is abstracted behind a common interface so both engines co-exist. Switching to Nunjucks requires a per-project migration guide (breaking differences: `{% parent %}` → `{{ super() }}`, filter renames, autoescape default, `date` format strings, no `{% spaceless %}` — see docs). | `0.5.0` | Q1 2027 |
69
+ | 📋 | **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 |
70
+
71
+ ---
72
+
73
+ ## Connectors
74
+
75
+ New database connectors follow the same interface as the existing Couchbase connector: declared in `connectors.json`, acquired via `getConnection()`.
76
+
77
+ | Status | Connector | Version | Target | Notes |
78
+ | --- | --- | --- | --- | --- |
79
+ | 📋 | **Redis** | `0.2.0` | Q2 2026 | Session store and general-purpose cache. Client: `ioredis`. Required for K8s horizontal scaling. |
80
+ | 📋 | **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). |
81
+ | 📋 | **MySQL / MariaDB** | `0.3.0` | Q3 2026 | ORM connector. Client: `mysql2`. |
82
+ | 📋 | **PostgreSQL** | `0.3.0` | Q3 2026 | ORM connector. Client: `pg` (node-postgres). |
83
+ | 📋 | **ScyllaDB** | `0.4.0` | Q4 2026 | Cassandra-compatible wide-column store. Client: `@scylladb/scylla-driver`. |
84
+ | 📋 | **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. |
85
+
86
+ ---
87
+
88
+ ## K8s & Docker
89
+
90
+ | Status | Feature | Version | Date |
91
+ | --- | --- | --- | --- |
92
+ | ✅ | **Graceful shutdown on SIGTERM** — `server.close()` drains in-flight requests with configurable hard timeout (`GINA_SHUTDOWN_TIMEOUT`). | `0.1.8` | 2026-03-06 |
93
+ | ✅ | **`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 |
94
+ | ✅ | **Stdout/stderr structured logging** — `GINA_LOG_STDOUT=true` emits JSON lines compatible with `kubectl logs`, Fluentd, and Datadog. | `0.1.8` | 2026-03-21 |
95
+ | ✅ | **`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 |
96
+ | 📋 | **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 |
97
+
98
+ ---
99
+
100
+ ## AI
101
+
102
+ ### Phase 1 — AI can write Gina code correctly
103
+
104
+ | Status | Feature | Version | Target |
105
+ | --- | --- | --- | --- |
106
+ | 📋 | **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 |
107
+ | 📋 | **TypeScript declaration files** — Cross-listed with Modernisation Phase 4. Essential for AI code generation accuracy. | `0.4.0` | Q4 2026 |
108
+
109
+ ### Phase 2 — Gina apps can use AI
110
+
111
+ | Status | Feature | Version | Target |
112
+ | --- | --- | --- | --- |
113
+ | 📋 | **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 |
114
+ | 📋 | **`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 |
115
+ | 📋 | **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 |
116
+
117
+ ### Phase 3 — AI agents can consume Gina apps
118
+
119
+ | Status | Feature | Version | Target |
120
+ | --- | --- | --- | --- |
121
+ | 📋 | **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 |
122
+ | 📋 | **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 |
123
+
124
+ ---
125
+
126
+ ## Performance
127
+
128
+ | Status | Feature | Version | Target | Notes |
129
+ | --- | --- | --- | --- | --- |
130
+ | 📋 | **`NODE_COMPILE_CACHE` — V8 bytecode startup cache** | `0.2.0` | Q2 2026 | Node.js 22.8+ caches compiled V8 bytecode to disk. Set once at startup — 30–60% faster cold start on subsequent runs with zero code changes to user bundles. No-op on Node < 22.8, so safe to ship unconditionally. |
131
+ | 📋 | **Route radix tree — compile `routing.json` at startup** | `0.3.0` | Q3 2026 | Current router does linear matching against `routing.json` on every request. Pre-compile routes into a radix tree at bundle startup for O(log n) matching. 2–3x faster routing layer. Internal change — no user-facing API change. |
132
+ | 📋 | **Bun runtime compatibility investigation** | `0.4.0` | Q4 2026 | Prototype Gina under Bun. Two blockers to verify: `require.cache` deletion (dev hot-reload) and `node:http2` completeness. If both pass, Bun gives 3–10x faster startup and meaningful throughput gains. Deliverable: a compatibility report. |
133
+
134
+ ---
135
+
136
+ ## Windows
137
+
138
+ Windows compatibility is a hard requirement for `1.0.0`. The alpha scope covers all core features: install, scaffold, bundle start/stop, routing, rendering, and basic CLI. Full production-grade parity is post-1.0.0.
139
+
140
+ | Status | Feature | Version | Target |
141
+ | --- | --- | --- | --- |
142
+ | 📋 | **Windows alpha compatibility** — Install scripts, path handling, symlinks, and bundle lifecycle (start/stop/restart) work correctly on Windows. `bin/gina.bat` kept in sync with `bin/gina`. CI Windows runner required before this can be marked done. Out of scope for alpha: full build system (bash-based), Windows service integration, production-grade process management. | `1.0.0` | Q3 2027 |
143
+
144
+ ---
145
+
146
+ ## Tutorials
147
+
148
+ | Status | Tutorial | Duration | Version | Target |
149
+ | --- | --- | --- | --- | --- |
150
+ | 📋 | **Using Gina as a mobile backend** — REST API patterns, JSON-only bundles, token auth, CORS, HTTP/2, and the path to OpenAPI/MCP for SDK generation. Docs only — no code changes. | — | `0.3.0` | Q3 2026 |
151
+ | 📋 | **Beginner** — Your first Gina app: install, scaffold, one route, one controller, browser response. Starts from `gina new` — no prior project needed. | 5 min | `0.3.0` | Q3 2026 |
152
+ | 📋 | **Intermediate** — Multi-bundle setup, routing with URL params, entity + connector wiring, template rendering, form handling. Starts from scratch. | ~30 min | `0.3.0` | Q3 2026 |
153
+ | 📋 | **Advanced** — Full production project: authentication, scoped data isolation, async/await, HTTP/2, structured logging, Docker/K8s deployment. Starts from the intermediate tutorial's finished state. | ~60 min | `0.4.0` | Q4 2026 |
154
+
155
+ ---
156
+
157
+ ## Website
158
+
159
+ | Status | Feature | Version | Target |
160
+ | --- | --- | --- | --- |
161
+ | 📋 | **Official website redesign + docs integration** — Refactor gina.io as a proper project homepage (landing page, feature highlights, showcase) with the documentation fully integrated. Single coherent web presence. Prerequisite: tutorials complete. | `0.4.0` | Q4 2026 |
162
+
163
+ ---
164
+
165
+ *Last updated: 2026-03-27 · 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) {