gina 0.1.9-alpha.5 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (463) hide show
  1. package/.github/FUNDING.yml +1 -0
  2. package/CHANGELOG.md +48 -0
  3. package/README.md +2 -2
  4. package/ROADMAP.md +6 -5
  5. package/framework/v0.2.0/VERSION +1 -0
  6. package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/gna.js +19 -1
  7. package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/model/entity.js +69 -65
  8. package/framework/v0.2.0/core/template/boilerplate/bundle/config/watchers.json +3 -0
  9. package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/template/conf/env.json +1 -1
  10. package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/bundle/add.js +11 -0
  11. package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/framework/init.js +19 -5
  12. package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/index.js +3 -0
  13. package/framework/v0.2.0/lib/watcher/package.json +20 -0
  14. package/framework/v0.2.0/lib/watcher/src/main.js +248 -0
  15. package/package.json +20 -8
  16. package/framework/v0.1.9-alpha.5/VERSION +0 -1
  17. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/AUTHORS +0 -0
  18. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/LICENSE +0 -0
  19. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/asset/html/nolayout.html +0 -0
  20. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/asset/html/static.html +0 -0
  21. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/asset/img/android-chrome-192x192.png +0 -0
  22. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/asset/img/android-chrome-512x512.png +0 -0
  23. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/asset/img/apple-touch-icon.png +0 -0
  24. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/asset/img/favicon-16x16.png +0 -0
  25. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/asset/img/favicon-32x32.png +0 -0
  26. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/asset/img/favicon.ico +0 -0
  27. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/asset/plugin/README.md +0 -0
  28. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/asset/plugin/dist/vendor/gina/css/gina.min.css +0 -0
  29. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
  30. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
  31. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/asset/plugin/dist/vendor/gina/html/toolbar.html +0 -0
  32. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/asset/plugin/dist/vendor/gina/html/toolbar.html.br +0 -0
  33. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/asset/plugin/dist/vendor/gina/html/toolbar.html.gz +0 -0
  34. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/asset/plugin/dist/vendor/gina/js/gina.js +0 -0
  35. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/asset/plugin/dist/vendor/gina/js/gina.min.js +0 -0
  36. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
  37. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
  38. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +0 -0
  39. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.br +0 -0
  40. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.gz +0 -0
  41. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/asset/plugin/uuid.json +0 -0
  42. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/config.js +0 -0
  43. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/connectors/couchbase/index.js +0 -0
  44. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/connectors/couchbase/lib/connector.js +0 -0
  45. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/connectors/couchbase/lib/connector.v2.js +0 -0
  46. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/connectors/couchbase/lib/connector.v3.js +0 -0
  47. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/connectors/couchbase/lib/connector.v4.js +0 -0
  48. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/connectors/couchbase/lib/n1ql.js +0 -0
  49. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/connectors/couchbase/lib/session-store.js +0 -0
  50. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/connectors/couchbase/lib/session-store.v2.js +0 -0
  51. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/connectors/couchbase/lib/session-store.v3.js +0 -0
  52. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/connectors/couchbase/lib/session-store.v4.js +0 -0
  53. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/connectors/redis/index.js +0 -0
  54. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/connectors/redis/lib/session-store.js +0 -0
  55. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/connectors/sqlite/index.js +0 -0
  56. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/connectors/sqlite/lib/connector.js +0 -0
  57. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/connectors/sqlite/lib/session-store.js +0 -0
  58. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/content.encoding +0 -0
  59. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/controller/controller.framework.js +0 -0
  60. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/controller/controller.js +0 -0
  61. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/controller/controller.render-json.js +0 -0
  62. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/controller/controller.render-swig.js +0 -0
  63. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/controller/controller.render-v1.js +0 -0
  64. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/controller/index.js +0 -0
  65. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/busboy-1.6.0/LICENSE +0 -0
  66. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/busboy-1.6.0/README.md +0 -0
  67. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/busboy-1.6.0/lib/index.js +0 -0
  68. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/busboy-1.6.0/lib/types/multipart.js +0 -0
  69. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/busboy-1.6.0/lib/types/urlencoded.js +0 -0
  70. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/busboy-1.6.0/lib/utils.js +0 -0
  71. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/busboy-1.6.0/package.json +0 -0
  72. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/optimist-0.6.1/LICENSE +0 -0
  73. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/optimist-0.6.1/index.js +0 -0
  74. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/optimist-0.6.1/package.json +0 -0
  75. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/optimist-0.6.1/readme.markdown +0 -0
  76. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/CONTRIBUTING.md +0 -0
  77. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/HISTORY.md +0 -0
  78. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/LICENSE +0 -0
  79. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/Makefile +0 -0
  80. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/README.md +0 -0
  81. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/bin/swig.js +0 -0
  82. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/browser/comments.js +0 -0
  83. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/browser/index.js +0 -0
  84. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/docs/docs/api.html +0 -0
  85. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/docs/docs/browser.html +0 -0
  86. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/docs/docs/cli.html +0 -0
  87. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/docs/docs/extending.html +0 -0
  88. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/docs/docs/filters.html +0 -0
  89. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/docs/docs/includes/TYPES.html +0 -0
  90. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/docs/docs/includes/macros.html +0 -0
  91. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/docs/docs/index.html +0 -0
  92. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/docs/docs/layout.html +0 -0
  93. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/docs/docs/loaders.html +0 -0
  94. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/docs/docs/previous.html +0 -0
  95. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/docs/docs/tags.html +0 -0
  96. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/docs/docs.json +0 -0
  97. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/docs/index.html +0 -0
  98. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/docs/index.json +0 -0
  99. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/docs/js/lib/rainbow.min.js +0 -0
  100. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/docs/js/master.js +0 -0
  101. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/docs/layouts/html5.html +0 -0
  102. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/docs/layouts/master.html +0 -0
  103. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/docs/less/button.less +0 -0
  104. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/docs/less/fork.less +0 -0
  105. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/docs/less/header.less +0 -0
  106. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/docs/less/layout.less +0 -0
  107. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/docs/less/mixins.less +0 -0
  108. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/docs/less/rainbow.less +0 -0
  109. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/docs/less/reset.less +0 -0
  110. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/docs/less/sidenav.less +0 -0
  111. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/docs/less/swig.less +0 -0
  112. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/docs/less/variables.less +0 -0
  113. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/index.js +0 -0
  114. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/lib/dateformatter.js +0 -0
  115. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/lib/filters.js +0 -0
  116. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/lib/lexer.js +0 -0
  117. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/lib/loaders/filesystem.js +0 -0
  118. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/lib/loaders/index.js +0 -0
  119. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/lib/loaders/memory.js +0 -0
  120. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/lib/parser.js +0 -0
  121. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/lib/swig.js +0 -0
  122. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/lib/tags/autoescape.js +0 -0
  123. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/lib/tags/block.js +0 -0
  124. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/lib/tags/else.js +0 -0
  125. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/lib/tags/elseif.js +0 -0
  126. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/lib/tags/extends.js +0 -0
  127. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/lib/tags/filter.js +0 -0
  128. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/lib/tags/for.js +0 -0
  129. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/lib/tags/if.js +0 -0
  130. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/lib/tags/import.js +0 -0
  131. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/lib/tags/include.js +0 -0
  132. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/lib/tags/index.js +0 -0
  133. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/lib/tags/macro.js +0 -0
  134. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/lib/tags/parent.js +0 -0
  135. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/lib/tags/raw.js +0 -0
  136. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/lib/tags/set.js +0 -0
  137. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/lib/tags/spaceless.js +0 -0
  138. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/lib/utils.js +0 -0
  139. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/package.json +0 -0
  140. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/scripts/config-lint.js +0 -0
  141. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/scripts/githooks/post-merge +0 -0
  142. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/scripts/githooks/pre-commit +0 -0
  143. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/basic.test.js +0 -0
  144. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/bin/bin.filters.js +0 -0
  145. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/bin/bin.locals.js +0 -0
  146. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/bin/bin.locals.json +0 -0
  147. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/bin/bin.tags.js +0 -0
  148. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/bin/bin.test.js +0 -0
  149. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/bin/custom_filter.bin.html +0 -0
  150. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/bin/custom_tag.bin.html +0 -0
  151. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/bin/custom_tagControls.bin.html +0 -0
  152. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/bin/custom_varControls.bin.html +0 -0
  153. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/bin/options.js +0 -0
  154. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/extends_1.expectation.html +0 -0
  155. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/extends_1.test.html +0 -0
  156. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/extends_2.expectation.html +0 -0
  157. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/extends_2.test.html +0 -0
  158. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/extends_base.html +0 -0
  159. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/extends_layouts/extends_4.base.html +0 -0
  160. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/extends_layouts/extends_4.middle.html +0 -0
  161. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/extends_layouts/extends_bare.html +0 -0
  162. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/extends_layouts/extends_base.html +0 -0
  163. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/extends_layouts/extends_include.html +0 -0
  164. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/extends_layouts/extends_real_base.html +0 -0
  165. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/extends_set.expectation.html +0 -0
  166. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/extends_set.test.html +0 -0
  167. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/extends_tests/extends_3.expectation.html +0 -0
  168. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/extends_tests/extends_3.test.html +0 -0
  169. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/extends_tests/extends_4.expectation.html +0 -0
  170. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/extends_tests/extends_4.test.html +0 -0
  171. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/import.expectation.html +0 -0
  172. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/import.test.html +0 -0
  173. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/include.expectation.html +0 -0
  174. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/include.test.html +0 -0
  175. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/include_bar.html +0 -0
  176. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/include_extends.expectation.html +0 -0
  177. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/include_extends.test.html +0 -0
  178. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/includes.html +0 -0
  179. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/macros.expectation.html +0 -0
  180. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/macros.html +0 -0
  181. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/macros.test.html +0 -0
  182. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/nested_blocks.expectation.html +0 -0
  183. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/nested_blocks.test.html +0 -0
  184. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/nested_blocks_parent.html +0 -0
  185. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/parent-parent.expectation.html +0 -0
  186. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/parent-parent.test.html +0 -0
  187. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/parent.expectation.html +0 -0
  188. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/parent.test.html +0 -0
  189. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/set.expectation.html +0 -0
  190. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/set.test.html +0 -0
  191. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases-error/circular.test.html +0 -0
  192. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases-error/circular_parent.html +0 -0
  193. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases-error/extends-non-existent.test.html +0 -0
  194. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases-error/report-filename-partial.html +0 -0
  195. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/cases-error/report-filename.test.html +0 -0
  196. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/comments.test.js +0 -0
  197. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/filters.test.js +0 -0
  198. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/loaders.test.js +0 -0
  199. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/regressions.test.js +0 -0
  200. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/tags/autoescape.test.js +0 -0
  201. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/tags/else.test.js +0 -0
  202. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/tags/extend.test.js +0 -0
  203. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/tags/filter.test.js +0 -0
  204. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/tags/for.test.js +0 -0
  205. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/tags/if.test.js +0 -0
  206. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/tags/import.test.js +0 -0
  207. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/tags/include.test.js +0 -0
  208. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/tags/macro.test.js +0 -0
  209. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/tags/parent.test.js +0 -0
  210. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/tags/raw.test.js +0 -0
  211. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/tags/set.test.js +0 -0
  212. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/tags/spaceless.test.js +0 -0
  213. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/tags.test.js +0 -0
  214. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/templates.test.js +0 -0
  215. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/variables.test.js +0 -0
  216. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-1.4.2/tests/whitespace.test.js +0 -0
  217. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-client/swig-2.0.0.min.js +0 -0
  218. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/deps/swig-client/swig.js +0 -0
  219. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/dev/index.js +0 -0
  220. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/dev/lib/class.js +0 -0
  221. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/dev/lib/factory.js +0 -0
  222. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/dev/lib/tools.js +0 -0
  223. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/locales/README.md +0 -0
  224. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/locales/currency.json +0 -0
  225. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/locales/dist/language/en.json +0 -0
  226. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/locales/dist/language/fr.json +0 -0
  227. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/locales/dist/region/en.json +0 -0
  228. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/locales/dist/region/fr.json +0 -0
  229. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/locales/index.js +0 -0
  230. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/mime.types +0 -0
  231. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/model/index.js +0 -0
  232. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/model/template/entityFactory.js +0 -0
  233. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/model/template/index.js +0 -0
  234. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/plugins/README.md +0 -0
  235. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/plugins/index.js +0 -0
  236. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/plugins/lib/file/README.md +0 -0
  237. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/plugins/lib/file/build.json +0 -0
  238. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/plugins/lib/file/package.json +0 -0
  239. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/plugins/lib/intl/README.md +0 -0
  240. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/plugins/lib/intl/build.json +0 -0
  241. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/plugins/lib/intl/package.json +0 -0
  242. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/plugins/lib/intl/src/main.js +0 -0
  243. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/plugins/lib/storage/README.md +0 -0
  244. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/plugins/lib/storage/build.json +0 -0
  245. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/plugins/lib/storage/package.json +0 -0
  246. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/plugins/lib/storage/src/main.js +0 -0
  247. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/plugins/lib/validator/README.md +0 -0
  248. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/plugins/lib/validator/build.json +0 -0
  249. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/plugins/lib/validator/package.json +0 -0
  250. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/plugins/lib/validator/src/form-validator.js +0 -0
  251. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/plugins/lib/validator/src/main.js +0 -0
  252. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/router.js +0 -0
  253. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/server.express.js +0 -0
  254. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/server.isaac.js +0 -0
  255. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/server.js +0 -0
  256. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/status.codes +0 -0
  257. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/template/_gitignore +0 -0
  258. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/template/boilerplate/bundle/config/app.json +0 -0
  259. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/template/boilerplate/bundle/config/connectors.json +0 -0
  260. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/template/boilerplate/bundle/config/routing.json +0 -0
  261. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/template/boilerplate/bundle/config/settings.json +0 -0
  262. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/template/boilerplate/bundle/config/settings.server.json +0 -0
  263. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/template/boilerplate/bundle/config/templates.json +0 -0
  264. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/template/boilerplate/bundle/controllers/controller.content.js +0 -0
  265. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/template/boilerplate/bundle/controllers/controller.js +0 -0
  266. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/template/boilerplate/bundle/controllers/setup.js +0 -0
  267. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/template/boilerplate/bundle/index.js +0 -0
  268. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/template/boilerplate/bundle_namespace/controllers/controller.js +0 -0
  269. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/template/boilerplate/bundle_public/css/default.css +0 -0
  270. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/template/boilerplate/bundle_public/css/home.css +0 -0
  271. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/template/boilerplate/bundle_public/css/vendor/readme.md +0 -0
  272. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/template/boilerplate/bundle_public/favicon.ico +0 -0
  273. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/template/boilerplate/bundle_public/js/vendor/readme.md +0 -0
  274. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/template/boilerplate/bundle_public/readme.md +0 -0
  275. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/template/boilerplate/bundle_templates/handlers/main.js +0 -0
  276. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/template/boilerplate/bundle_templates/html/content/homepage.html +0 -0
  277. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/template/boilerplate/bundle_templates/html/includes/error-msg-noscript.html +0 -0
  278. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/template/boilerplate/bundle_templates/html/includes/error-msg-outdated-browser.html +0 -0
  279. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/template/boilerplate/bundle_templates/html/layouts/main.html +0 -0
  280. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/template/command/gina.bat.tpl +0 -0
  281. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/template/command/gina.tpl +0 -0
  282. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/template/conf/manifest.json +0 -0
  283. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/template/conf/package.json +0 -0
  284. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/template/conf/settings.json +0 -0
  285. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/template/conf/statics.json +0 -0
  286. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/template/conf/templates.json +0 -0
  287. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/template/error/client/json/401.json +0 -0
  288. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/template/error/client/json/403.json +0 -0
  289. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/template/error/client/json/404.json +0 -0
  290. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/template/error/server/html/50x.html +0 -0
  291. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/template/error/server/json/500.json +0 -0
  292. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/template/error/server/json/503.json +0 -0
  293. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/core/template/extensions/logger/config.json +0 -0
  294. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/helpers/console.js +0 -0
  295. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/helpers/context.js +0 -0
  296. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/helpers/data/LICENSE +0 -0
  297. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/helpers/data/README.md +0 -0
  298. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/helpers/data/package.json +0 -0
  299. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/helpers/data/src/main.js +0 -0
  300. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/helpers/dateFormat.js +0 -0
  301. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/helpers/index.js +0 -0
  302. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/helpers/json/LICENSE +0 -0
  303. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/helpers/json/README.md +0 -0
  304. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/helpers/json/package.json +0 -0
  305. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/helpers/json/src/main.js +0 -0
  306. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/helpers/path.js +0 -0
  307. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/helpers/plugins/README.md +0 -0
  308. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/helpers/plugins/package.json +0 -0
  309. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/helpers/plugins/src/api-error.js +0 -0
  310. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/helpers/plugins/src/main.js +0 -0
  311. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/helpers/prototypes.js +0 -0
  312. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/helpers/task.js +0 -0
  313. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/helpers/text.js +0 -0
  314. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/archiver/README.md +0 -0
  315. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/archiver/build.json +0 -0
  316. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/archiver/package.json +0 -0
  317. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/archiver/src/dep/jszip.min.js +0 -0
  318. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/archiver/src/main.js +0 -0
  319. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cache/README.md +0 -0
  320. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cache/build.json +0 -0
  321. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cache/package.json +0 -0
  322. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cache/src/main.js +0 -0
  323. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/aliases.json +0 -0
  324. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/bundle/arguments.json +0 -0
  325. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/bundle/build.js +0 -0
  326. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/bundle/copy.js +0 -0
  327. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/bundle/cp.js +0 -0
  328. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/bundle/help.js +0 -0
  329. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/bundle/help.txt +0 -0
  330. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/bundle/list.js +0 -0
  331. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/bundle/remove.js +0 -0
  332. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/bundle/rename.js +0 -0
  333. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/bundle/restart.js +0 -0
  334. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/bundle/rm.js +0 -0
  335. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/bundle/start.js +0 -0
  336. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/bundle/status.js +0 -0
  337. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/bundle/stop.js +0 -0
  338. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/cache/stats.js +0 -0
  339. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/env/add.js +0 -0
  340. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/env/get.js +0 -0
  341. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/env/help.js +0 -0
  342. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/env/help.txt +0 -0
  343. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/env/link-dev.js +0 -0
  344. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/env/list.js +0 -0
  345. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/env/remove.js +0 -0
  346. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/env/rm.js +0 -0
  347. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/env/set.js +0 -0
  348. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/env/unset.js +0 -0
  349. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/env/use.js +0 -0
  350. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/framework/arguments.json +0 -0
  351. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/framework/build.js +0 -0
  352. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/framework/dot.js +0 -0
  353. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/framework/get.js +0 -0
  354. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/framework/help.js +0 -0
  355. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/framework/help.txt +0 -0
  356. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/framework/link-node-modules.js +0 -0
  357. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/framework/link.js +0 -0
  358. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/framework/msg.json +0 -0
  359. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/framework/open.js +0 -0
  360. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/framework/restart.js +0 -0
  361. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/framework/set.js +0 -0
  362. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/framework/start.js +0 -0
  363. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/framework/status.js +0 -0
  364. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/framework/stop.js +0 -0
  365. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/framework/tail.js +0 -0
  366. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/framework/update.js +0 -0
  367. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/framework/version.js +0 -0
  368. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/gina-dev.1.md +0 -0
  369. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/gina-framework.1.md +0 -0
  370. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/gina.1.md +0 -0
  371. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/helper.js +0 -0
  372. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/index.js +0 -0
  373. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/minion/help.js +0 -0
  374. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/minion/help.txt +0 -0
  375. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/msg.json +0 -0
  376. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/port/help.js +0 -0
  377. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/port/help.txt +0 -0
  378. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/port/inc/scan.js +0 -0
  379. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/port/list.js +0 -0
  380. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/port/reset.js +0 -0
  381. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/port/set.js +0 -0
  382. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/project/add.js +0 -0
  383. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/project/arguments.json +0 -0
  384. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/project/build.js +0 -0
  385. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/project/help.js +0 -0
  386. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/project/help.txt +0 -0
  387. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/project/import.js +0 -0
  388. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/project/list.js +0 -0
  389. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/project/move.js +0 -0
  390. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/project/remove.js +0 -0
  391. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/project/rename.js +0 -0
  392. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/project/restart.js +0 -0
  393. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/project/rm.js +0 -0
  394. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/project/start.js +0 -0
  395. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/project/status.js +0 -0
  396. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/project/stop.js +0 -0
  397. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/protocol/help.js +0 -0
  398. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/protocol/help.txt +0 -0
  399. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/protocol/list.js +0 -0
  400. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/protocol/set.js +0 -0
  401. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/scope/add.js +0 -0
  402. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/scope/help.js +0 -0
  403. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/scope/help.txt +0 -0
  404. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/scope/link-local.js +0 -0
  405. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/scope/link-production.js +0 -0
  406. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/scope/list.js +0 -0
  407. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/scope/remove.js +0 -0
  408. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/scope/rm.js +0 -0
  409. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/scope/use.js +0 -0
  410. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cmd/view/add.js +0 -0
  411. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/collection/README.md +0 -0
  412. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/collection/build.json +0 -0
  413. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/collection/package.json +0 -0
  414. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/collection/src/main.js +0 -0
  415. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/config.js +0 -0
  416. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cron/README.md +0 -0
  417. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cron/package.json +0 -0
  418. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/cron/src/main.js +0 -0
  419. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/domain/LICENSE +0 -0
  420. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/domain/README.md +0 -0
  421. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/domain/dist/2025-03-14_13-41-20_UTC.dat +0 -0
  422. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/domain/dist/public_suffix_list.dat +0 -0
  423. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/domain/dist/public_suffix_list.dat.br +0 -0
  424. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/domain/dist/public_suffix_list.dat.gz +0 -0
  425. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/domain/package.json +0 -0
  426. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/domain/src/main.js +0 -0
  427. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/generator/index.js +0 -0
  428. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/inherits/LICENSE +0 -0
  429. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/inherits/README.md +0 -0
  430. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/inherits/package.json +0 -0
  431. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/inherits/src/main.js +0 -0
  432. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/logger/README.md +0 -0
  433. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/logger/package.json +0 -0
  434. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/logger/src/containers/default/index.js +0 -0
  435. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/logger/src/containers/file/index.js +0 -0
  436. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/logger/src/containers/file/lib/logrotator/README.md +0 -0
  437. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/logger/src/containers/file/lib/logrotator/index.js +0 -0
  438. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/logger/src/containers/mq/index.js +0 -0
  439. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/logger/src/containers/mq/listener.js +0 -0
  440. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/logger/src/containers/mq/speaker.js +0 -0
  441. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/logger/src/helper.js +0 -0
  442. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/logger/src/main.js +0 -0
  443. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/math/index.js +0 -0
  444. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/merge/README.md +0 -0
  445. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/merge/package.json +0 -0
  446. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/merge/src/main.js +0 -0
  447. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/model.js +0 -0
  448. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/proc.js +0 -0
  449. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/routing/README.md +0 -0
  450. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/routing/build.json +0 -0
  451. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/routing/package.json +0 -0
  452. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/routing/src/main.js +0 -0
  453. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/session-store.js +0 -0
  454. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/shell.js +0 -0
  455. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/state.js +0 -0
  456. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/swig-filters/README.md +0 -0
  457. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/swig-filters/package.json +0 -0
  458. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/swig-filters/src/main.js +0 -0
  459. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/url/README.md +0 -0
  460. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/url/index.js +0 -0
  461. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/url/routing.json +0 -0
  462. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/lib/validator.js +0 -0
  463. /package/framework/{v0.1.9-alpha.5 → v0.2.0}/package.json +0 -0
@@ -0,0 +1 @@
1
+ github: gina-automator
package/CHANGELOG.md CHANGED
@@ -6,6 +6,54 @@ 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.2.0 - 2026-03-29
10
+ ### Added
11
+ * NODE_COMPILE_CACHE (#P1): set at startup in gna.js to ~/.gina/cache/v8 — Node.js >= 22.8 caches V8 bytecode to disk, reducing cold-start time by 30–60% on subsequent runs. No-op on older Node versions.
12
+ * JSON Schemas for routing.json, app.json, connectors.json, settings.json, app.crons.json — machine-readable schemas at schema/ in the package root. Scaffold templates now include "$schema" references to https://gina.io/schema/ for free editor validation and autocomplete in VS Code and any JSON Schema-aware IDE (#AI1)
13
+ * GitHub Discussions enabled — community Q&A and Show and Tell categories now available on the repo (#A10)
14
+ * Added V8 pointer compression detection at startup: sets GINA_V8_POINTER_COMPRESSED=true and logs heap limit when Node.js is built with --experimental-enable-pointer-compression (#P4)
15
+ * Added unit tests for #M2 entity._arguments buffer management — covers Promise path deletion and DISPATCH:BUFFER_CALLBACK deletion (3 tests, test/core/entity-arguments.test.js)
16
+ * Redis session store connector (CN1): ioredis-backed store with standalone, Cluster, and TLS support; configured via connectors.json — no credentials in application code
17
+ * SQLite session store connector (CN2 v1): node:sqlite-backed store (built-in since Node 22.5.0, zero npm deps) with WAL mode, prepared-statement caching, and background expiry cleanup; supports file-based and ':memory:' databases
18
+ * Added GitHub Actions CI pipeline — runs the full test suite (494+ tests) on Node.js 18, 20, and 22 on every push and PR to `develop` and `master` (#A1)
19
+ * Stable release now auto-tags, merges to master, and publishes the next alpha to npm
20
+ * SQLite ORM connector v2: entity wiring + SQL method generation from .sql files, Option-B Promise/.onComplete() pattern, connector.js (WAL, FK, synchronous open), 56 unit tests
21
+ * Added llms.txt — LLM-optimised framework reference for Cursor, Copilot, Claude.ai
22
+ * Added peerDependencies (all optional) for connector client libraries: couchbase, ioredis, mysql2, pg, mongodb, @scylladb/scylla-driver
23
+ * Added GitHub issue templates (bug_report, feature_request) and PR template
24
+ * SQLite state storage for ~/.gina/ config files (CN2 v3): lib/state.js StateStore routes all state-file writes through node:sqlite (DatabaseSync) for atomic writes and concurrent access safety; JSON sidecars kept for backwards-compat read paths
25
+ * Added WatcherService (lib/watcher): fs.watch-based file-change registry. Reads watchers.json bundle config and starts native file watchers on server startup. Exposes gna.watcher for framework-internal registration (#M6). 9 new tests in test/core/watcher.test.js.
26
+ * bundle:add preserves existing bundle source when the src/ directory already exists and rewrite is false — cloned starter repos are no longer overwritten
27
+ ### Changed
28
+ * README: added 3-bullet why-Gina summary, feature highlights table, and Quick start section at the top; added MIT license and Node.js >= 18 badges; updated npm keywords to be search-relevant (http2, multi-bundle, event-driven, rest, api, couchbase) (#A9, #V3)
29
+ ### Fixed
30
+ * Removed dead singleton infrastructure from SuperController (SuperController.instance, SuperController.initialized, init()/getInstance() singleton path); removed 4 no-op freeMemory([], false) calls; fixed throwError() HTML error path missing local.req/res/next = null after res.end() (#M1)
31
+ * Added deprecation warning to Couchbase SDK v2 connector: logs on every connection when sdk.version is 2 (EOL since 2021, removal planned for 0.4.0). Adds a separate fatal error when GINA_V8_POINTER_COMPRESSED=true, as v2 NAN bindings are incompatible with pointer-compressed Node.js builds.
32
+ * Fixed DISPATCH:BUFFER_CALLBACK path (util.promisify path in entity method wrappers): entity._arguments[trigger] was consumed but not deleted after use, allowing a buffered result from one request to persist and resolve all subsequent callers with stale data. Now deletes the buffer after consuming, matching the Promise path behaviour (#M2).
33
+ * Retired freeMemory() helper in controller pipeline — replaced all call sites with explicit local.req/res/next nulling so intent is visible at each response exit point (#M3)
34
+ * Fixed `/_gina/info` HTTP/2 endpoint returning `[object Object]` — `stream.end(infoHeaders)` was passing the headers object instead of the JSON string `infoStatus` (#H1)
35
+ * Added stream-closed guard (`stream.destroyed || stream.closed`) to `throwError()` HTML error response path — prevents unhandled error on HTTP/2 when a stream closes between error trigger and response write (#H2)
36
+ * Fixed infinite recursion in connector ping() when keepAlive is false (CB-BUG-4): replaced unconditional self.ping() recursive call with return in v2/v3/v4
37
+ * Removed redundant modelUtil.setConnection() call in connector v2/v3/v4 onConnect() (CB-PERF-3): first unconditional call before the existsSync guard was a no-op duplicate
38
+ * Fixed gina.onError() handler accumulation on Couchbase reconnect (CB-BUG-1): guarded registration with _errorHandlerRegistered flag so only one handler is registered per connector instance across reconnections (v2/v3/v4)
39
+ * Fixed session-store.v3 get() always returning session-not-found (CB-BUG-2): converted to async/await so Promise resolves before checks run — every session lookup was failing silently, forcing re-authentication on every request
40
+ * Fixed session-store.v3 set() silently discarding writes (CB-BUG-3): converted to async/await so upsert is awaited before calling fn() — writes appeared to succeed but were never confirmed
41
+ * Fixed CB-PERF-1 (300ms startup delay), CB-PERF-2 (ping reconnect drops callback), CB-QUAL-2 (eval() for @options parsing), CB-QUAL-3 (bulkInsert returns plain object instead of Promise) in Couchbase connector
42
+ * Fixed CB-QUAL-4, CB-LOW-1–5, CB-LOW-7: sanitised bulkInsert key in N1QL, fixed uuid implicit global, re-enabled strict mode in index.js, removed dead os.version import, removed duplicate use-strict in session-store.v4, added exponential backoff for Couchbase reconnects, removed dead commented-out blocks in connector files
43
+ * Fixed bundle:start hang: JSON.parse(process.argv[3]) in gna.start() threw SyntaxError in CLI mode where argv[3] is the project name (plain string), causing every bundle to crash silently and wait the full 60-second timeout. Added JSON format guard. Also added immediate crash detection in the start.js child watcher for non-zero exits during startup (#B9).
44
+ * Made engine.io a lazy require in server.isaac.js — loaded only when options.ioServer is configured, so bundles without WebSocket support no longer crash at startup if engine.io is absent
45
+ * Made ssl-checker a lazy require in server.js — loaded only inside verifyCertificate(), so bundles not using HTTPS cert verification no longer crash at startup if ssl-checker is absent
46
+ * Fixed Couchbase entity methods called via util.promisify without .bind(): instead of crashing with a cryptic 'Cannot set properties of undefined (setting _isRegisteredFromProto)', the framework now transparently recovers the entity singleton so the call succeeds
47
+ * Fixed EventEmitter listener leak on entity singleton when using util.promisify without .bind() (intermittent 500 errors under repeated requests on the same entity method)
48
+ * Boilerplate templates installed by view:add now render correctly — doubled html/ prefix removed from extends and include paths
49
+ * cache:stats now falls back through all assigned port/scheme combinations instead of trying only the first — fixes ECONNREFUSED on bundles that run HTTP/2 only
50
+ * Fixed entity method concurrency: concurrent callers on the same method now each receive their own result (FIFO queue dispatch replaces single-slot _callbacks; DISPATCH:PREEMPTIVE_BUFFER and consume paths queue-aware)
51
+ * All user-customisable settings (port, debug_port, mq_port, host_v4, hostname, logdir, tmpdir, rundir, log_level) now survive a shortVersion bump (e.g. 0.1 → 0.2) — previously they were silently reset to defaults because post_install pre-creates ~/.gina/<shortVersion>/settings.json from the template before init.js runs, making the migration block unreachable; fixed by detecting the unresolved template and triggering migration in that case too
52
+ ### Security
53
+ * Added four missing HTTP/2 server security settings in `isaac.js`: `maxHeaderListSize: 65536` (HPACK bomb defense), `enablePush: false` (deprecated in browsers), `maxSessionRejectedStreams: 100` (RST/rapid reset flood defense — CVE-2019-9514, CVE-2023-44487), `maxSessionInvalidFrames: 1000` (CONTINUATION flood defense — CVE-2024-27316, CVE-2024-27983) (#H3)
54
+ * Fixed Couchbase restQuery() credential exposure and shell injection (CB-SEC-1, CB-SEC-2): replaced exec(curl...) with http.request(), credentials now sent via Authorization header, no shell involved
55
+ * Removed err.stack from HTTP 500 JSON response body in Couchbase connector (CB-QUAL-1): stack traces with filesystem paths now logged server-side only, never sent to clients
56
+
9
57
  ## 0.1.8 - 2026-03-27
10
58
  ### Added
11
59
  * Added .github/dependabot.yml — weekly npm dependency updates for root package.json; vendored framework deps excluded
package/README.md CHANGED
@@ -1,8 +1,8 @@
1
1
  # Gina <img src="https://gina.io/favicon-16x16.png" alt="Gina icon" style="position: absolute; top:10px; margin-right: 10px;" />
2
2
 
3
- [![npm version](https://badge.fury.io/js/gina.svg)](https://badge.fury.io/js/gina) [![GitHub version](https://badge.fury.io/gh/Rhinostone%2Fgina.svg)](https://badge.fury.io/gh/Rhinostone%2Fgina) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) [![Node.js >= 18](https://img.shields.io/badge/node-%3E%3D%2018-brightgreen)](https://nodejs.org) [![Tests](https://github.com/Rhinostone/gina/actions/workflows/test.yml/badge.svg)](https://github.com/Rhinostone/gina/actions/workflows/test.yml)
3
+ [![npm version](https://badge.fury.io/js/gina.svg)](https://badge.fury.io/js/gina) [![GitHub version](https://badge.fury.io/gh/gina-io%2Fgina.svg)](https://badge.fury.io/gh/gina-io%2Fgina) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) [![Node.js >= 18](https://img.shields.io/badge/node-%3E%3D%2018-brightgreen)](https://nodejs.org) [![Tests](https://github.com/gina-io/gina/actions/workflows/test.yml/badge.svg)](https://github.com/gina-io/gina/actions/workflows/test.yml)
4
4
 
5
- > **Documentation:** [https://gina.io/docs/](https://gina.io/docs/) · **Issues:** [GitHub](https://github.com/Rhinostone/gina/issues)
5
+ > **Documentation:** [https://gina.io/docs/](https://gina.io/docs/) · **Issues:** [GitHub](https://github.com/gina-io/gina/issues)
6
6
 
7
7
  Node.js MVC framework with built-in HTTP/2, multi-bundle architecture, and scope-based data isolation — no Express dependency.
8
8
 
package/ROADMAP.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
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
4
 
5
- > **Docs:** [gina.io/docs](https://gina.io/docs/) · **Issues:** [github.com/Rhinostone/gina/issues](https://github.com/Rhinostone/gina/issues)
5
+ > **Docs:** [gina.io/docs](https://gina.io/docs/) · **Issues:** [github.com/gina-io/gina/issues](https://github.com/gina-io/gina/issues)
6
6
 
7
7
  ---
8
8
 
@@ -12,7 +12,7 @@ This roadmap covers planned features, architectural improvements, new connectors
12
12
  | --- | --- | --- |
13
13
  | **Apr 2026** | `0.1.8` ✅ | Scaffold correctness · K8s support · Dependency injection · Automatic version migration |
14
14
  | **Q2 2026** | `0.2.0` | Stability · WatcherService · Redis & SQLite connectors · K8s session storage · Startup cache · Pointer compression · Couchbase v2 deprecation · Couchbase security & critical bug fixes · HTTP/2 security hardening |
15
- | **Q3 2026** | `0.3.0` | Async/await · Dev hot-reload · MySQL & PostgreSQL connectors · AI Phase 2 · Tutorials · Mobile backend guide · Route radix tree · Connector peerDependencies · 103 Early Hints · HTTP/2 observability · Security & CVE page · Couchbase connector hardening · Beemaster Phase 1 |
15
+ | **Q3 2026** | `0.3.0` | Async/await · Dev hot-reload · MySQL & PostgreSQL connectors · AI Phase 2 · Tutorials · Mobile backend guide · Route radix tree · Connector peerDependencies · 103 Early Hints · HTTP/2 observability · Security & CVE page · Per-bundle framework version · Couchbase connector hardening · Beemaster Phase 1 |
16
16
  | **Q4 2026** | `0.4.0` | TypeScript declarations · AI agents (OpenAPI, MCP) · ScyllaDB connector · PWA scaffold · Advanced tutorial · Website redesign · Docs offline ZIP · Bun investigation · Couchbase v2 removal · HTTP/2 hardening · Trailer support · Beemaster core |
17
17
  | **Q1 2027** | `0.5.0` | ESM support · Template engine migration · Structured logging · Alt-Svc · HTTP/2 priorities · WebSocket over HTTP/2 · Beemaster admin |
18
18
  | **Q3 2027** | `1.0.0` | First stable release — Windows alpha compatibility is a hard gate |
@@ -24,8 +24,9 @@ This roadmap covers planned features, architectural improvements, new connectors
24
24
  | Status | Feature | Version | Target |
25
25
  | --- | --- | --- | --- |
26
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 |
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` | 2026-03-29 |
28
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
+ | 📋 | **Per-bundle framework version** — Declare `"gina_version": "0.1.8"` on any bundle entry in `manifest.json` to pin that bundle to a specific installed framework version. The socket server continues running its own version; only the spawned bundle process uses the declared version. Validated against the tracked version list in `main.json` before start. `--gina-version=X.Y.Z` flag on `bundle:start` provides the same override without touching config files. | `0.3.0` | Q3 2026 |
29
30
 
30
31
  ---
31
32
 
@@ -36,7 +37,7 @@ This roadmap covers planned features, architectural improvements, new connectors
36
37
  | Status | Feature | Version | Target |
37
38
  | --- | --- | --- | --- |
38
39
  | ✅ | **Per-request controller instances** — Each HTTP request gets its own isolated controller instance with its own request state. Removes dead singleton infrastructure and fixes edge-case memory retention in error paths. | `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
+ | | **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` | 2026-03-29 |
40
41
  | ✅ | **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
 
42
43
  ### Phase 2 — Async
@@ -261,4 +262,4 @@ Standalone gina dev and admin tool. A dedicated browser-tab app (`services/src/b
261
262
 
262
263
  ---
263
264
 
264
- *Last updated: 2026-03-28 (Beemaster added) · To suggest a feature, [open an issue](https://github.com/Rhinostone/gina/issues).*
265
+ *Last updated: 2026-03-29 (Per-bundle framework version added) · To suggest a feature, [open an issue](https://github.com/gina-io/gina/issues).*
@@ -0,0 +1 @@
1
+ 0.2.0
@@ -805,7 +805,25 @@ isBundleMounted(projects, bundlesPath, getContext('bundle'), function onBundleMo
805
805
  // }
806
806
  // }
807
807
 
808
- // will start watchers from here
808
+ // #R1 start user-defined watchers declared in watchers.json via WatcherService.
809
+ // conf.watchers is the parsed content of the bundle's watchers.json (auto-loaded
810
+ // by config.js). conf.bundlePath is the absolute bundle source directory.
811
+ // Framework internal watchers (#M6) will register against gna.watcher using
812
+ // WatcherService.register() before calling start().
813
+ var _watchersConf = (conf && conf.watchers && typeof conf.watchers === 'object')
814
+ ? conf.watchers
815
+ : null;
816
+ var _hasUserWatchers = _watchersConf && Object.keys(_watchersConf).some(function(k) {
817
+ return k.charAt(0) !== '$';
818
+ });
819
+ if (_hasUserWatchers && lib.Watcher) {
820
+ var _watcher = new lib.Watcher();
821
+ var _configDir = conf.bundlePath + '/config';
822
+ _watcher.load(_configDir, _watchersConf);
823
+ _watcher.start();
824
+ // expose so #M6 and user bundle code can register against the same service
825
+ gna.watcher = _watcher;
826
+ }
809
827
  callback()
810
828
  })
811
829
  }
@@ -214,32 +214,31 @@ function EntitySuper(conn, caller, injected) {
214
214
  if (entity._triggers.indexOf(events[i].shortName) > -1) {
215
215
  console.debug('[ MODEL ][ ENTITY ] Setting promise listener for: [ ' + self.model + '/' + events[i].entityName + '::' + events[i].shortName + ' ]');
216
216
 
217
- if (typeof(entity._arguments) == 'undefined' || typeof(entity._arguments) != 'undefined' && typeof(entity._arguments[events[i].shortName]) == 'undefined') {
218
-
219
- if (entity.listenerCount(events[i].shortName) > 0) {
220
- entity.removeAllListeners([events[i].shortName])
221
- }
217
+ // #M2 queue check: buffer is now an array; treat missing/empty as "no buffer".
218
+ if (!entity._arguments || !entity._arguments[events[i].shortName] || entity._arguments[events[i].shortName].length === 0) {
222
219
 
220
+ // #M2 — removeAllListeners removed: it was killing the queue
221
+ // dispatch listener registered by concurrent in-flight callers.
223
222
  entity.once(events[i].shortName, function () { // cannot be `entity.on` for prod/stage
224
223
  // check if not already fired
225
224
  if (entity._callbacks[events[i].shortName]) {
226
225
 
227
- entity.removeAllListeners([events[i].shortName]);
228
226
  console.log('\nDISPATCH:ONCE_LISTENER ' + events[i].shortName +'('+ events[i].index +')');
229
227
  cb.apply(this, arguments);
230
228
  }
231
229
  });
232
230
 
233
231
 
234
- // backing up callback
232
+ // backing up callback (scalar — promisify fast-path bypasses queue)
235
233
  entity._callbacks[events[i].shortName] = cb;
236
234
  } else { // in case the event is not ready yet
237
235
  console.log('\nDISPATCH:BUFFER_CALLBACK ' + events[i].shortName);
238
- // #M2 — consume and delete the buffer so the next caller
239
- // gets a fresh listener instead of this stale result.
240
- // Mirrors the delete in the Promise path (Option B, below).
241
- var _firing2Args = entity._arguments[events[i].shortName];
242
- delete entity._arguments[events[i].shortName];
236
+ // #M2 — queue consume: shift oldest buffered result so concurrent
237
+ // callers each receive their own result, not a shared stale one.
238
+ var _firing2Args = entity._arguments[events[i].shortName].shift();
239
+ if (entity._arguments[events[i].shortName].length === 0) {
240
+ delete entity._arguments[events[i].shortName];
241
+ }
243
242
  cb.apply(entity[m], _firing2Args);
244
243
  }
245
244
  }
@@ -270,9 +269,9 @@ function EntitySuper(conn, caller, injected) {
270
269
  // existing callers keep working unchanged:
271
270
  // entity.method(args).onComplete(function(err, data) {...})
272
271
  //
273
- // entity._callbacks[shortName] is now used as a boolean
274
- // guard only (truthy = listener active, null = consumed).
275
- // The same check as before, just no longer stores the cb.
272
+ // entity._callbacks[shortName] is a FIFO queue (array) of
273
+ // per-invocation resolvers (#M2). A single persistent .on
274
+ // listener dequeues the oldest resolver on each emit.
276
275
  //
277
276
  // The util.promisify fast-path above (lines 192-229) is
278
277
  // untouched — it fires when this[m] is undefined (called
@@ -289,56 +288,57 @@ function EntitySuper(conn, caller, injected) {
289
288
 
290
289
  if (entity._triggers.indexOf(events[i].shortName) > -1) {
291
290
 
292
- if (typeof(entity._arguments) == 'undefined' || typeof(entity._arguments) != 'undefined' && typeof(entity._arguments[events[i].shortName]) == 'undefined') {
291
+ // #M2 queue check: buffer is now an array; treat missing/empty as "no buffer".
292
+ if (!entity._arguments || !entity._arguments[events[i].shortName] || entity._arguments[events[i].shortName].length === 0) {
293
293
 
294
- if (entity.listenerCount(events[i].shortName) > 0) {
295
- entity.removeAllListeners([events[i].shortName]);
296
- }
297
-
298
- // Shared resolver — whichever fires first (DISPATCH:CALLBACK_FLUSH or the
299
- // once-listener) resolves/rejects the Promise. The second call
300
- // is a no-op (guard: _callbacks[shortName] is null after first).
294
+ // #M2 resolver: double-resolution guard replaces the old _callbacks
295
+ // delete guard. The queue dispatch listener manages _callbacks —
296
+ // _resolver no longer needs to touch it.
301
297
  //
302
- // Why store a function in _callbacks (not `true`):
303
- // The entity's custom emit (entity.js:~494) has three conditions
304
- // that call setListener(). Condition 3 fires when
305
- // `typeof(_callbacks[type]) != 'undefined'` — which includes
306
- // boolean `true`. setListener's DISPATCH:CALLBACK_FLUSH then calls
307
- // `_callbacks[trigger].apply(this, args)` — `true.apply` throws.
308
- // Storing a function makes DISPATCH:CALLBACK_FLUSH the primary resolution
309
- // path (same as old code where _callbacks stored the cb).
298
+ // _innerResult.then() (connector Promise path) and the queue dispatch
299
+ // listener may both call _resolver; the _resolved flag ensures only
300
+ // the first call wins.
301
+ var _resolved = false;
310
302
  var _resolver = function(err, data) {
311
- // Guard: delete after first call to prevent double-resolution.
312
- // Using delete (not null) so that DISPATCH:CALLBACK_FLUSH's
313
- // typeof(_callbacks[trigger]) != 'undefined' check correctly
314
- // sees 'undefined' and skips the null.apply() call.
315
- if (!entity._callbacks[events[i].shortName]) return;
316
- delete entity._callbacks[events[i].shortName];
317
- entity.removeAllListeners([events[i].shortName]);
303
+ if (_resolved) return;
304
+ _resolved = true;
318
305
  if (err) _reject(err);
319
306
  else _resolve(data);
320
307
  };
321
308
 
322
- // once-listener as fallback in case DISPATCH:CALLBACK_FLUSH doesn't run
323
- // (e.g. custom emit conditions not met). cannot be `entity.on`
324
- // for prod/stage must stay `once`.
325
- entity.once(events[i].shortName, function () {
326
- _resolver.apply(null, arguments);
327
- });
328
-
329
- // Store resolver: satisfies condition 3, enables DISPATCH:CALLBACK_FLUSH
330
- entity._callbacks[events[i].shortName] = _resolver;
309
+ // #M2 FIFO queue: push this invocation's resolver instead of
310
+ // overwriting the single _callbacks slot. removeAllListeners is
311
+ // removedit was killing in-flight callers' queue dispatch listener.
312
+ if (!entity._callbacks[e]) {
313
+ entity._callbacks[e] = [];
314
+ }
315
+ entity._callbacks[e].push(_resolver);
316
+
317
+ // Register a single persistent dispatch listener only when none is
318
+ // active. It dequeues the oldest resolver on each emit so concurrent
319
+ // callers each receive their own result in arrival order.
320
+ if (entity.listenerCount(e) === 0) {
321
+ var _onQueueEmit = function onQueueEmit() {
322
+ var _q = entity._callbacks[e];
323
+ if (!_q || _q.length === 0) return;
324
+ var _fn = _q.shift();
325
+ _fn.apply(null, arguments);
326
+ if (!_q || _q.length === 0) {
327
+ delete entity._callbacks[e];
328
+ entity.removeListener(e, _onQueueEmit);
329
+ }
330
+ };
331
+ entity.on(e, _onQueueEmit);
332
+ }
331
333
 
332
334
  } else {
333
- // Event already fired — args were buffered in _arguments.
334
- // Resolve/reject immediately from the cached result, then
335
- // delete the buffer so the next call gets a fresh listener
336
- // instead of resolving again with the same stale result.
337
- // Without this delete, any concurrent call that fires before
338
- // the listener is registered (e.g. an alert cron) poisons
339
- // ALL subsequent requests for the entity's lifetime.
340
- var _args = entity._arguments[events[i].shortName];
341
- delete entity._arguments[events[i].shortName];
335
+ // Event already fired — args were buffered in _arguments queue.
336
+ // #M2 shift oldest buffered result: concurrent callers each
337
+ // consume their own result, not a shared stale scalar.
338
+ var _args = entity._arguments[events[i].shortName].shift();
339
+ if (entity._arguments[events[i].shortName].length === 0) {
340
+ delete entity._arguments[events[i].shortName];
341
+ }
342
342
  if (_args[0]) _reject(_args[0]);
343
343
  else _resolve(_args[1]);
344
344
  }
@@ -356,9 +356,9 @@ function EntitySuper(conn, caller, injected) {
356
356
  // via 'N1QL:entity#method' (different event), so entity.emit() is
357
357
  // never called for them — _promise would hang forever.
358
358
  //
359
- // _resolver already guards against double-resolution: its first call
360
- // deletes _callbacks[shortName], so any subsequent call (from
361
- // DISPATCH:CALLBACK_FLUSH or the once-listener) hits the !_callbacks guard and exits.
359
+ // _resolver guards against double-resolution via the _resolved flag (#M2).
360
+ // The queue dispatch listener and _innerResult.then() may both call it;
361
+ // the flag ensures only the first call wins.
362
362
  //
363
363
  // Additional guard: _resolver is only defined when shortName is in
364
364
  // entity._triggers (lines 268+). If the method returns a Promise
@@ -495,12 +495,14 @@ function EntitySuper(conn, caller, injected) {
495
495
  this._arguments = {}
496
496
  }
497
497
 
498
- // retrieving local arguments, & binding it to the event callback
499
- if ( typeof(this._arguments[trigger]) == 'undefined' ) {
500
- console.log('\nDISPATCH:PREEMPTIVE_BUFFER ' + trigger);
501
-
502
- this._arguments[trigger] = arguments;
498
+ // #M2 queue mode: push to array so each concurrent caller consumes
499
+ // its own buffered result instead of sharing a single scalar slot.
500
+ // Before: scalar assignment silently dropped every emit after the first.
501
+ if (!this._arguments[trigger]) {
502
+ this._arguments[trigger] = [];
503
503
  }
504
+ console.log('\nDISPATCH:PREEMPTIVE_BUFFER ' + trigger);
505
+ this._arguments[trigger].push(arguments);
504
506
 
505
507
  })
506
508
  }
@@ -567,7 +569,9 @@ function EntitySuper(conn, caller, injected) {
567
569
  if (
568
570
  self._triggers && self._triggers.indexOf(type) == -1 && self._triggers.indexOf(type.replace(/[0-9]/g, '')) > -1
569
571
  || self._triggers && self._triggers.indexOf(type) > -1 && typeof(self._callbacks[type]) == 'undefined' && typeof(self._events[type]) == 'undefined'
570
- || self._triggers && self._triggers.indexOf(type) > -1 && typeof(self._callbacks[type]) != 'undefined'
572
+ // #M2 skip DISPATCH:CALLBACK_FLUSH for queue mode (_callbacks is an array);
573
+ // the persistent .on dispatch listener handles routing in that case.
574
+ || self._triggers && self._triggers.indexOf(type) > -1 && typeof(self._callbacks[type]) != 'undefined' && !Array.isArray(self._callbacks[type])
571
575
  ) {
572
576
  setListener(arguments)
573
577
  }
@@ -0,0 +1,3 @@
1
+ {
2
+ "$schema": "https://gina.io/schema/watchers.json"
3
+ }
@@ -45,7 +45,7 @@
45
45
  "publicPath": "${bundlesPath}/${bundle}/public",
46
46
  "templatesPath": "${bundlesPath}/${bundle}/templates",
47
47
  "handlersPath": "${bundlesPath}/${bundle}/templates/handlers",
48
- "watchers": "${bundlesPath}/${bundle}/watchers",
48
+ "watchersPath": "${bundlesPath}/${bundle}/watchers",
49
49
  "workersPath": "${bundlesPath}/${bundle}/workers",
50
50
  "template": false,
51
51
  "server": {
@@ -312,6 +312,8 @@ function Add(opt, cmd) {
312
312
  if (rewrite) {
313
313
  delete content.bundles[local.bundle]
314
314
  }
315
+ // #A6 — pass rewrite flag so createBundle can detect pre-existing source
316
+ local.rewrite = rewrite;
315
317
  createBundle()
316
318
  })
317
319
  })
@@ -443,6 +445,15 @@ function Add(opt, cmd) {
443
445
  , target = _( self.projects[self.projectName].path +'/'+ projectData.bundles[local.bundle].src, true )
444
446
  , sample = new _( getPath('gina').core + '/template/boilerplate/bundle/' );
445
447
 
448
+ // #A6 — if source already exists and rewrite is false (new bundle, not replace),
449
+ // preserve the existing files (e.g. cloned starter repos) and skip the boilerplate copy.
450
+ if (!local.rewrite && fs.existsSync(target)) {
451
+ console.log('Bundle [ '+ local.bundle +' ] has been added to your project with success ;)');
452
+ rl.clearLine();
453
+ ++local.b;
454
+ addBundles(local.b);
455
+ return;
456
+ }
446
457
 
447
458
  sample.cp(target, function done(err, destination) {
448
459
 
@@ -552,10 +552,20 @@ function Initialize(opt) {
552
552
  var localUserSettings = null;
553
553
  if ( targetObj.existsSync() ) {
554
554
  localUserSettings = requireJSON(target);
555
- } else {
556
- // MIGRATION: seed networking values from the previous release's settings.json
557
- // so port, hostname, etc. survive a short-version bump. All assignments are
558
- // env-var-gated so CLI flags or a prior checkIfSettings run take precedence.
555
+ // post_install.js copies resources/home/settings.json (which has ${...} placeholders)
556
+ // into ~/.gina/<shortVersion>/settings.json before init.js runs. On a shortVersion
557
+ // bump the file therefore exists but is an unresolved template — detect this by
558
+ // checking whether the port field is still a placeholder string, and treat it the
559
+ // same as "file absent" so the migration block below runs.
560
+ if (typeof(localUserSettings['port']) === 'string' && localUserSettings['port'].indexOf('${') === 0) {
561
+ localUserSettings = null;
562
+ }
563
+ }
564
+ if (!localUserSettings) {
565
+ // MIGRATION: seed user-customisable values from the previous release's settings.json
566
+ // so port, hostname, logdir, tmpdir, rundir, and log_level survive a short-version
567
+ // bump. All assignments are env-var-gated so CLI flags or a prior checkIfSettings
568
+ // run take precedence. On a fresh install no previous version exists — defaults apply.
559
569
  var _prevShortForSettings = null;
560
570
  for (var _sfk in main['frameworks']) {
561
571
  if (_sfk === '_comment' || _sfk === self.release) continue;
@@ -572,7 +582,11 @@ function Initialize(opt) {
572
582
  'debug_port' : 'GINA_DEBUG_PORT',
573
583
  'mq_port' : 'GINA_MQ_PORT',
574
584
  'host_v4' : 'GINA_HOST_V4',
575
- 'hostname' : 'GINA_HOSTNAME'
585
+ 'hostname' : 'GINA_HOSTNAME',
586
+ 'logdir' : 'GINA_LOGDIR',
587
+ 'tmpdir' : 'GINA_TMPDIR',
588
+ 'rundir' : 'GINA_RUNDIR',
589
+ 'log_level' : 'GINA_LOG_LEVEL'
576
590
  };
577
591
  for (var _smk in _settingsMigrationMap) {
578
592
  if (!getEnvVar(_settingsMigrationMap[_smk]) && typeof(_prevSettings[_smk]) !== 'undefined') {
@@ -69,6 +69,9 @@ function Lib() {
69
69
  SessionStore : _require('./session-store'),
70
70
  SwigFilters : _require('./swig-filters'),
71
71
  Cache : _require('./cache'),
72
+ // #R1 — WatcherService: fs.watch-based file-change registry. Class is hot-reloadable;
73
+ // instantiated once per bundle in gna.js:onStarted and stored as gna.watcher.
74
+ Watcher : _require('./watcher'),
72
75
  // replaced: _require('./state') — StateStore is a singleton backed by node:sqlite
73
76
  // (DatabaseSync). Hot-reloading it in dev mode would close and re-open the DB
74
77
  // connection on every HTTP request, racing with in-flight writes. Use plain
@@ -0,0 +1,20 @@
1
+ {
2
+ "name": "gina-lib-watcher",
3
+ "version": "1.0.0",
4
+ "description": "WatcherService — shared fs.watch registry for user-defined and framework watchers",
5
+
6
+ "author": {
7
+ "name": "Maritn-Luther ETOUMAN",
8
+ "email": "contact@gina.io"
9
+ },
10
+ "copyright": "Copyright (c) 2009-2026 Rhinostone <contact@gina.io>",
11
+ "engines": {
12
+ "node": ">=16.0.0"
13
+ },
14
+ "main": "src/main",
15
+ "scripts": {
16
+ "test": "node --test test"
17
+ },
18
+ "license": "MIT",
19
+ "readmeFilename": "README.md"
20
+ }