gina 0.1.9-alpha.4 → 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 (474) hide show
  1. package/.github/FUNDING.yml +1 -0
  2. package/.github/ISSUE_TEMPLATE/bug_report.md +35 -0
  3. package/.github/ISSUE_TEMPLATE/feature_request.md +21 -0
  4. package/.github/PULL_REQUEST_TEMPLATE.md +19 -0
  5. package/.github/workflows/test.yml +5 -0
  6. package/AUTHORS +6 -5
  7. package/CHANGELOG.md +48 -0
  8. package/README.md +2 -2
  9. package/ROADMAP.md +52 -10
  10. package/bin/cli +1 -0
  11. package/framework/v0.2.0/VERSION +1 -0
  12. package/framework/v0.2.0/core/asset/plugin/dist/vendor/gina/css/gina.min.css +1 -0
  13. package/framework/v0.2.0/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
  14. package/framework/v0.2.0/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
  15. package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/asset/plugin/dist/vendor/gina/html/toolbar.html.gz +0 -0
  16. package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
  17. package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.gz +0 -0
  18. package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/config.js +27 -6
  19. package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/connectors/couchbase/index.js +29 -6
  20. package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/connectors/couchbase/lib/session-store.v2.js +2 -1
  21. package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/connectors/couchbase/lib/session-store.v3.js +2 -1
  22. package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/connectors/couchbase/lib/session-store.v4.js +3 -1
  23. package/framework/v0.2.0/core/connectors/sqlite/index.js +344 -0
  24. package/framework/v0.2.0/core/connectors/sqlite/lib/connector.js +96 -0
  25. package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/gna.js +29 -10
  26. package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/model/entity.js +69 -65
  27. package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/server.isaac.js +18 -8
  28. package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/server.js +9 -2
  29. package/framework/v0.2.0/core/template/boilerplate/bundle/config/watchers.json +3 -0
  30. package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/template/boilerplate/bundle_templates/html/content/homepage.html +1 -1
  31. package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/template/boilerplate/bundle_templates/html/layouts/main.html +2 -2
  32. package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/template/conf/env.json +1 -1
  33. package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/bundle/add.js +16 -1
  34. package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/bundle/start.js +11 -0
  35. package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/cache/stats.js +71 -54
  36. package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/framework/init.js +19 -5
  37. package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/domain/dist/public_suffix_list.dat.gz +0 -0
  38. package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/generator/index.js +15 -0
  39. package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/index.js +8 -0
  40. package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/model.js +2 -1
  41. package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/proc.js +2 -2
  42. package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/session-store.js +13 -7
  43. package/framework/v0.2.0/lib/state.js +258 -0
  44. package/framework/v0.2.0/lib/watcher/package.json +20 -0
  45. package/framework/v0.2.0/lib/watcher/src/main.js +248 -0
  46. package/llms.txt +240 -0
  47. package/package.json +47 -11
  48. package/framework/v0.1.9-alpha.2/VERSION +0 -1
  49. package/framework/v0.1.9-alpha.4/core/asset/plugin/dist/vendor/gina/css/gina.min.css +0 -1
  50. package/framework/v0.1.9-alpha.4/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
  51. package/framework/v0.1.9-alpha.4/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
  52. package/framework/v0.1.9-alpha.4/core/connectors/sqlite/index.js +0 -32
  53. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/AUTHORS +0 -0
  54. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/LICENSE +0 -0
  55. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/asset/html/nolayout.html +0 -0
  56. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/asset/html/static.html +0 -0
  57. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/asset/img/android-chrome-192x192.png +0 -0
  58. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/asset/img/android-chrome-512x512.png +0 -0
  59. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/asset/img/apple-touch-icon.png +0 -0
  60. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/asset/img/favicon-16x16.png +0 -0
  61. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/asset/img/favicon-32x32.png +0 -0
  62. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/asset/img/favicon.ico +0 -0
  63. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/asset/plugin/README.md +0 -0
  64. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/asset/plugin/dist/vendor/gina/html/toolbar.html +0 -0
  65. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/asset/plugin/dist/vendor/gina/html/toolbar.html.br +0 -0
  66. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/asset/plugin/dist/vendor/gina/js/gina.js +0 -0
  67. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/asset/plugin/dist/vendor/gina/js/gina.min.js +0 -0
  68. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
  69. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +0 -0
  70. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.br +0 -0
  71. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/asset/plugin/uuid.json +0 -0
  72. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/connectors/couchbase/lib/connector.js +0 -0
  73. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/connectors/couchbase/lib/connector.v2.js +0 -0
  74. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/connectors/couchbase/lib/connector.v3.js +0 -0
  75. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/connectors/couchbase/lib/connector.v4.js +0 -0
  76. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/connectors/couchbase/lib/n1ql.js +0 -0
  77. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/connectors/couchbase/lib/session-store.js +0 -0
  78. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/connectors/redis/index.js +0 -0
  79. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/connectors/redis/lib/session-store.js +0 -0
  80. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/connectors/sqlite/lib/session-store.js +0 -0
  81. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/content.encoding +0 -0
  82. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/controller/controller.framework.js +0 -0
  83. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/controller/controller.js +0 -0
  84. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/controller/controller.render-json.js +0 -0
  85. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/controller/controller.render-swig.js +0 -0
  86. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/controller/controller.render-v1.js +0 -0
  87. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/controller/index.js +0 -0
  88. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/busboy-1.6.0/LICENSE +0 -0
  89. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/busboy-1.6.0/README.md +0 -0
  90. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/busboy-1.6.0/lib/index.js +0 -0
  91. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/busboy-1.6.0/lib/types/multipart.js +0 -0
  92. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/busboy-1.6.0/lib/types/urlencoded.js +0 -0
  93. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/busboy-1.6.0/lib/utils.js +0 -0
  94. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/busboy-1.6.0/package.json +0 -0
  95. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/optimist-0.6.1/LICENSE +0 -0
  96. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/optimist-0.6.1/index.js +0 -0
  97. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/optimist-0.6.1/package.json +0 -0
  98. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/optimist-0.6.1/readme.markdown +0 -0
  99. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/CONTRIBUTING.md +0 -0
  100. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/HISTORY.md +0 -0
  101. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/LICENSE +0 -0
  102. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/Makefile +0 -0
  103. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/README.md +0 -0
  104. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/bin/swig.js +0 -0
  105. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/browser/comments.js +0 -0
  106. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/browser/index.js +0 -0
  107. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/docs/docs/api.html +0 -0
  108. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/docs/docs/browser.html +0 -0
  109. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/docs/docs/cli.html +0 -0
  110. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/docs/docs/extending.html +0 -0
  111. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/docs/docs/filters.html +0 -0
  112. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/docs/docs/includes/TYPES.html +0 -0
  113. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/docs/docs/includes/macros.html +0 -0
  114. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/docs/docs/index.html +0 -0
  115. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/docs/docs/layout.html +0 -0
  116. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/docs/docs/loaders.html +0 -0
  117. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/docs/docs/previous.html +0 -0
  118. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/docs/docs/tags.html +0 -0
  119. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/docs/docs.json +0 -0
  120. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/docs/index.html +0 -0
  121. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/docs/index.json +0 -0
  122. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/docs/js/lib/rainbow.min.js +0 -0
  123. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/docs/js/master.js +0 -0
  124. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/docs/layouts/html5.html +0 -0
  125. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/docs/layouts/master.html +0 -0
  126. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/docs/less/button.less +0 -0
  127. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/docs/less/fork.less +0 -0
  128. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/docs/less/header.less +0 -0
  129. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/docs/less/layout.less +0 -0
  130. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/docs/less/mixins.less +0 -0
  131. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/docs/less/rainbow.less +0 -0
  132. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/docs/less/reset.less +0 -0
  133. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/docs/less/sidenav.less +0 -0
  134. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/docs/less/swig.less +0 -0
  135. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/docs/less/variables.less +0 -0
  136. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/index.js +0 -0
  137. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/lib/dateformatter.js +0 -0
  138. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/lib/filters.js +0 -0
  139. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/lib/lexer.js +0 -0
  140. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/lib/loaders/filesystem.js +0 -0
  141. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/lib/loaders/index.js +0 -0
  142. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/lib/loaders/memory.js +0 -0
  143. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/lib/parser.js +0 -0
  144. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/lib/swig.js +0 -0
  145. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/lib/tags/autoescape.js +0 -0
  146. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/lib/tags/block.js +0 -0
  147. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/lib/tags/else.js +0 -0
  148. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/lib/tags/elseif.js +0 -0
  149. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/lib/tags/extends.js +0 -0
  150. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/lib/tags/filter.js +0 -0
  151. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/lib/tags/for.js +0 -0
  152. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/lib/tags/if.js +0 -0
  153. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/lib/tags/import.js +0 -0
  154. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/lib/tags/include.js +0 -0
  155. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/lib/tags/index.js +0 -0
  156. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/lib/tags/macro.js +0 -0
  157. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/lib/tags/parent.js +0 -0
  158. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/lib/tags/raw.js +0 -0
  159. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/lib/tags/set.js +0 -0
  160. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/lib/tags/spaceless.js +0 -0
  161. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/lib/utils.js +0 -0
  162. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/package.json +0 -0
  163. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/scripts/config-lint.js +0 -0
  164. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/scripts/githooks/post-merge +0 -0
  165. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/scripts/githooks/pre-commit +0 -0
  166. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/tests/basic.test.js +0 -0
  167. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/tests/bin/bin.filters.js +0 -0
  168. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/tests/bin/bin.locals.js +0 -0
  169. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/tests/bin/bin.locals.json +0 -0
  170. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/tests/bin/bin.tags.js +0 -0
  171. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/tests/bin/bin.test.js +0 -0
  172. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/tests/bin/custom_filter.bin.html +0 -0
  173. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/tests/bin/custom_tag.bin.html +0 -0
  174. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/tests/bin/custom_tagControls.bin.html +0 -0
  175. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/tests/bin/custom_varControls.bin.html +0 -0
  176. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/tests/bin/options.js +0 -0
  177. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/extends_1.expectation.html +0 -0
  178. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/extends_1.test.html +0 -0
  179. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/extends_2.expectation.html +0 -0
  180. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/extends_2.test.html +0 -0
  181. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/extends_base.html +0 -0
  182. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/extends_layouts/extends_4.base.html +0 -0
  183. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/extends_layouts/extends_4.middle.html +0 -0
  184. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/extends_layouts/extends_bare.html +0 -0
  185. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/extends_layouts/extends_base.html +0 -0
  186. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/extends_layouts/extends_include.html +0 -0
  187. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/extends_layouts/extends_real_base.html +0 -0
  188. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/extends_set.expectation.html +0 -0
  189. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/extends_set.test.html +0 -0
  190. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/extends_tests/extends_3.expectation.html +0 -0
  191. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/extends_tests/extends_3.test.html +0 -0
  192. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/extends_tests/extends_4.expectation.html +0 -0
  193. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/extends_tests/extends_4.test.html +0 -0
  194. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/import.expectation.html +0 -0
  195. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/import.test.html +0 -0
  196. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/include.expectation.html +0 -0
  197. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/include.test.html +0 -0
  198. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/include_bar.html +0 -0
  199. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/include_extends.expectation.html +0 -0
  200. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/include_extends.test.html +0 -0
  201. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/includes.html +0 -0
  202. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/macros.expectation.html +0 -0
  203. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/macros.html +0 -0
  204. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/macros.test.html +0 -0
  205. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/nested_blocks.expectation.html +0 -0
  206. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/nested_blocks.test.html +0 -0
  207. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/nested_blocks_parent.html +0 -0
  208. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/parent-parent.expectation.html +0 -0
  209. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/parent-parent.test.html +0 -0
  210. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/parent.expectation.html +0 -0
  211. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/parent.test.html +0 -0
  212. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/set.expectation.html +0 -0
  213. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/tests/cases/set.test.html +0 -0
  214. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/tests/cases-error/circular.test.html +0 -0
  215. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/tests/cases-error/circular_parent.html +0 -0
  216. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/tests/cases-error/extends-non-existent.test.html +0 -0
  217. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/tests/cases-error/report-filename-partial.html +0 -0
  218. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/tests/cases-error/report-filename.test.html +0 -0
  219. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/tests/comments.test.js +0 -0
  220. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/tests/filters.test.js +0 -0
  221. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/tests/loaders.test.js +0 -0
  222. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/tests/regressions.test.js +0 -0
  223. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/tests/tags/autoescape.test.js +0 -0
  224. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/tests/tags/else.test.js +0 -0
  225. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/tests/tags/extend.test.js +0 -0
  226. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/tests/tags/filter.test.js +0 -0
  227. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/tests/tags/for.test.js +0 -0
  228. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/tests/tags/if.test.js +0 -0
  229. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/tests/tags/import.test.js +0 -0
  230. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/tests/tags/include.test.js +0 -0
  231. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/tests/tags/macro.test.js +0 -0
  232. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/tests/tags/parent.test.js +0 -0
  233. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/tests/tags/raw.test.js +0 -0
  234. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/tests/tags/set.test.js +0 -0
  235. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/tests/tags/spaceless.test.js +0 -0
  236. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/tests/tags.test.js +0 -0
  237. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/tests/templates.test.js +0 -0
  238. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/tests/variables.test.js +0 -0
  239. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-1.4.2/tests/whitespace.test.js +0 -0
  240. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-client/swig-2.0.0.min.js +0 -0
  241. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/deps/swig-client/swig.js +0 -0
  242. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/dev/index.js +0 -0
  243. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/dev/lib/class.js +0 -0
  244. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/dev/lib/factory.js +0 -0
  245. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/dev/lib/tools.js +0 -0
  246. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/locales/README.md +0 -0
  247. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/locales/currency.json +0 -0
  248. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/locales/dist/language/en.json +0 -0
  249. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/locales/dist/language/fr.json +0 -0
  250. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/locales/dist/region/en.json +0 -0
  251. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/locales/dist/region/fr.json +0 -0
  252. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/locales/index.js +0 -0
  253. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/mime.types +0 -0
  254. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/model/index.js +0 -0
  255. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/model/template/entityFactory.js +0 -0
  256. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/model/template/index.js +0 -0
  257. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/plugins/README.md +0 -0
  258. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/plugins/index.js +0 -0
  259. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/plugins/lib/file/README.md +0 -0
  260. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/plugins/lib/file/build.json +0 -0
  261. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/plugins/lib/file/package.json +0 -0
  262. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/plugins/lib/intl/README.md +0 -0
  263. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/plugins/lib/intl/build.json +0 -0
  264. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/plugins/lib/intl/package.json +0 -0
  265. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/plugins/lib/intl/src/main.js +0 -0
  266. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/plugins/lib/storage/README.md +0 -0
  267. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/plugins/lib/storage/build.json +0 -0
  268. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/plugins/lib/storage/package.json +0 -0
  269. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/plugins/lib/storage/src/main.js +0 -0
  270. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/plugins/lib/validator/README.md +0 -0
  271. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/plugins/lib/validator/build.json +0 -0
  272. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/plugins/lib/validator/package.json +0 -0
  273. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/plugins/lib/validator/src/form-validator.js +0 -0
  274. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/plugins/lib/validator/src/main.js +0 -0
  275. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/router.js +0 -0
  276. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/server.express.js +0 -0
  277. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/status.codes +0 -0
  278. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/template/_gitignore +0 -0
  279. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/template/boilerplate/bundle/config/app.json +0 -0
  280. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/template/boilerplate/bundle/config/connectors.json +0 -0
  281. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/template/boilerplate/bundle/config/routing.json +0 -0
  282. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/template/boilerplate/bundle/config/settings.json +0 -0
  283. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/template/boilerplate/bundle/config/settings.server.json +0 -0
  284. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/template/boilerplate/bundle/config/templates.json +0 -0
  285. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/template/boilerplate/bundle/controllers/controller.content.js +0 -0
  286. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/template/boilerplate/bundle/controllers/controller.js +0 -0
  287. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/template/boilerplate/bundle/controllers/setup.js +0 -0
  288. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/template/boilerplate/bundle/index.js +0 -0
  289. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/template/boilerplate/bundle_namespace/controllers/controller.js +0 -0
  290. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/template/boilerplate/bundle_public/css/default.css +0 -0
  291. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/template/boilerplate/bundle_public/css/home.css +0 -0
  292. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/template/boilerplate/bundle_public/css/vendor/readme.md +0 -0
  293. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/template/boilerplate/bundle_public/favicon.ico +0 -0
  294. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/template/boilerplate/bundle_public/js/vendor/readme.md +0 -0
  295. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/template/boilerplate/bundle_public/readme.md +0 -0
  296. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/template/boilerplate/bundle_templates/handlers/main.js +0 -0
  297. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/template/boilerplate/bundle_templates/html/includes/error-msg-noscript.html +0 -0
  298. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/template/boilerplate/bundle_templates/html/includes/error-msg-outdated-browser.html +0 -0
  299. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/template/command/gina.bat.tpl +0 -0
  300. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/template/command/gina.tpl +0 -0
  301. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/template/conf/manifest.json +0 -0
  302. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/template/conf/package.json +0 -0
  303. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/template/conf/settings.json +0 -0
  304. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/template/conf/statics.json +0 -0
  305. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/template/conf/templates.json +0 -0
  306. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/template/error/client/json/401.json +0 -0
  307. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/template/error/client/json/403.json +0 -0
  308. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/template/error/client/json/404.json +0 -0
  309. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/template/error/server/html/50x.html +0 -0
  310. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/template/error/server/json/500.json +0 -0
  311. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/template/error/server/json/503.json +0 -0
  312. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/core/template/extensions/logger/config.json +0 -0
  313. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/helpers/console.js +0 -0
  314. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/helpers/context.js +0 -0
  315. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/helpers/data/LICENSE +0 -0
  316. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/helpers/data/README.md +0 -0
  317. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/helpers/data/package.json +0 -0
  318. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/helpers/data/src/main.js +0 -0
  319. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/helpers/dateFormat.js +0 -0
  320. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/helpers/index.js +0 -0
  321. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/helpers/json/LICENSE +0 -0
  322. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/helpers/json/README.md +0 -0
  323. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/helpers/json/package.json +0 -0
  324. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/helpers/json/src/main.js +0 -0
  325. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/helpers/path.js +0 -0
  326. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/helpers/plugins/README.md +0 -0
  327. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/helpers/plugins/package.json +0 -0
  328. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/helpers/plugins/src/api-error.js +0 -0
  329. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/helpers/plugins/src/main.js +0 -0
  330. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/helpers/prototypes.js +0 -0
  331. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/helpers/task.js +0 -0
  332. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/helpers/text.js +0 -0
  333. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/archiver/README.md +0 -0
  334. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/archiver/build.json +0 -0
  335. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/archiver/package.json +0 -0
  336. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/archiver/src/dep/jszip.min.js +0 -0
  337. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/archiver/src/main.js +0 -0
  338. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cache/README.md +0 -0
  339. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cache/build.json +0 -0
  340. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cache/package.json +0 -0
  341. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cache/src/main.js +0 -0
  342. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/aliases.json +0 -0
  343. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/bundle/arguments.json +0 -0
  344. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/bundle/build.js +0 -0
  345. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/bundle/copy.js +0 -0
  346. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/bundle/cp.js +0 -0
  347. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/bundle/help.js +0 -0
  348. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/bundle/help.txt +0 -0
  349. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/bundle/list.js +0 -0
  350. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/bundle/remove.js +0 -0
  351. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/bundle/rename.js +0 -0
  352. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/bundle/restart.js +0 -0
  353. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/bundle/rm.js +0 -0
  354. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/bundle/status.js +0 -0
  355. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/bundle/stop.js +0 -0
  356. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/env/add.js +0 -0
  357. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/env/get.js +0 -0
  358. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/env/help.js +0 -0
  359. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/env/help.txt +0 -0
  360. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/env/link-dev.js +0 -0
  361. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/env/list.js +0 -0
  362. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/env/remove.js +0 -0
  363. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/env/rm.js +0 -0
  364. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/env/set.js +0 -0
  365. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/env/unset.js +0 -0
  366. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/env/use.js +0 -0
  367. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/framework/arguments.json +0 -0
  368. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/framework/build.js +0 -0
  369. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/framework/dot.js +0 -0
  370. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/framework/get.js +0 -0
  371. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/framework/help.js +0 -0
  372. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/framework/help.txt +0 -0
  373. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/framework/link-node-modules.js +0 -0
  374. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/framework/link.js +0 -0
  375. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/framework/msg.json +0 -0
  376. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/framework/open.js +0 -0
  377. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/framework/restart.js +0 -0
  378. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/framework/set.js +0 -0
  379. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/framework/start.js +0 -0
  380. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/framework/status.js +0 -0
  381. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/framework/stop.js +0 -0
  382. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/framework/tail.js +0 -0
  383. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/framework/update.js +0 -0
  384. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/framework/version.js +0 -0
  385. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/gina-dev.1.md +0 -0
  386. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/gina-framework.1.md +0 -0
  387. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/gina.1.md +0 -0
  388. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/helper.js +0 -0
  389. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/index.js +0 -0
  390. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/minion/help.js +0 -0
  391. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/minion/help.txt +0 -0
  392. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/msg.json +0 -0
  393. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/port/help.js +0 -0
  394. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/port/help.txt +0 -0
  395. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/port/inc/scan.js +0 -0
  396. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/port/list.js +0 -0
  397. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/port/reset.js +0 -0
  398. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/port/set.js +0 -0
  399. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/project/add.js +0 -0
  400. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/project/arguments.json +0 -0
  401. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/project/build.js +0 -0
  402. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/project/help.js +0 -0
  403. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/project/help.txt +0 -0
  404. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/project/import.js +0 -0
  405. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/project/list.js +0 -0
  406. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/project/move.js +0 -0
  407. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/project/remove.js +0 -0
  408. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/project/rename.js +0 -0
  409. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/project/restart.js +0 -0
  410. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/project/rm.js +0 -0
  411. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/project/start.js +0 -0
  412. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/project/status.js +0 -0
  413. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/project/stop.js +0 -0
  414. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/protocol/help.js +0 -0
  415. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/protocol/help.txt +0 -0
  416. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/protocol/list.js +0 -0
  417. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/protocol/set.js +0 -0
  418. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/scope/add.js +0 -0
  419. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/scope/help.js +0 -0
  420. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/scope/help.txt +0 -0
  421. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/scope/link-local.js +0 -0
  422. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/scope/link-production.js +0 -0
  423. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/scope/list.js +0 -0
  424. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/scope/remove.js +0 -0
  425. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/scope/rm.js +0 -0
  426. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/scope/use.js +0 -0
  427. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cmd/view/add.js +0 -0
  428. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/collection/README.md +0 -0
  429. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/collection/build.json +0 -0
  430. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/collection/package.json +0 -0
  431. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/collection/src/main.js +0 -0
  432. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/config.js +0 -0
  433. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cron/README.md +0 -0
  434. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cron/package.json +0 -0
  435. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/cron/src/main.js +0 -0
  436. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/domain/LICENSE +0 -0
  437. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/domain/README.md +0 -0
  438. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/domain/dist/2025-03-14_13-41-20_UTC.dat +0 -0
  439. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/domain/dist/public_suffix_list.dat +0 -0
  440. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/domain/dist/public_suffix_list.dat.br +0 -0
  441. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/domain/package.json +0 -0
  442. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/domain/src/main.js +0 -0
  443. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/inherits/LICENSE +0 -0
  444. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/inherits/README.md +0 -0
  445. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/inherits/package.json +0 -0
  446. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/inherits/src/main.js +0 -0
  447. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/logger/README.md +0 -0
  448. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/logger/package.json +0 -0
  449. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/logger/src/containers/default/index.js +0 -0
  450. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/logger/src/containers/file/index.js +0 -0
  451. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/logger/src/containers/file/lib/logrotator/README.md +0 -0
  452. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/logger/src/containers/file/lib/logrotator/index.js +0 -0
  453. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/logger/src/containers/mq/index.js +0 -0
  454. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/logger/src/containers/mq/listener.js +0 -0
  455. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/logger/src/containers/mq/speaker.js +0 -0
  456. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/logger/src/helper.js +0 -0
  457. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/logger/src/main.js +0 -0
  458. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/math/index.js +0 -0
  459. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/merge/README.md +0 -0
  460. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/merge/package.json +0 -0
  461. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/merge/src/main.js +0 -0
  462. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/routing/README.md +0 -0
  463. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/routing/build.json +0 -0
  464. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/routing/package.json +0 -0
  465. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/routing/src/main.js +0 -0
  466. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/shell.js +0 -0
  467. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/swig-filters/README.md +0 -0
  468. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/swig-filters/package.json +0 -0
  469. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/swig-filters/src/main.js +0 -0
  470. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/url/README.md +0 -0
  471. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/url/index.js +0 -0
  472. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/url/routing.json +0 -0
  473. /package/framework/{v0.1.9-alpha.4 → v0.2.0}/lib/validator.js +0 -0
  474. /package/framework/{v0.1.9-alpha.2 → v0.2.0}/package.json +0 -0
@@ -0,0 +1 @@
1
+ github: gina-automator
@@ -0,0 +1,35 @@
1
+ ---
2
+ name: Bug report
3
+ about: Report a bug or unexpected behaviour
4
+ labels: bug
5
+ ---
6
+
7
+ ## Environment
8
+
9
+ | Field | Value |
10
+ | --- | --- |
11
+ | Node.js version (`node --version`) | |
12
+ | Gina version (`gina --version`) | |
13
+ | OS | |
14
+
15
+ ## Description
16
+
17
+ <!-- A clear description of the bug -->
18
+
19
+ ## Steps to reproduce
20
+
21
+ 1.
22
+ 2.
23
+ 3.
24
+
25
+ ## Expected behaviour
26
+
27
+ <!-- What you expected to happen -->
28
+
29
+ ## Actual behaviour
30
+
31
+ <!-- What actually happened — include error output, stack trace, or logs if available -->
32
+
33
+ ## Additional context
34
+
35
+ <!-- Any other relevant information (bundle config, connectors.json snippet, etc.) -->
@@ -0,0 +1,21 @@
1
+ ---
2
+ name: Feature request
3
+ about: Propose a new feature or improvement
4
+ labels: enhancement
5
+ ---
6
+
7
+ ## Use case
8
+
9
+ <!-- What problem does this solve? Who benefits and in what context? -->
10
+
11
+ ## Proposed solution
12
+
13
+ <!-- Describe the feature, API shape, or behaviour change you have in mind -->
14
+
15
+ ## Alternatives considered
16
+
17
+ <!-- Other approaches you considered and why you preferred this one -->
18
+
19
+ ## Additional context
20
+
21
+ <!-- Relevant prior art, links to related issues, or implementation notes -->
@@ -0,0 +1,19 @@
1
+ ## Summary
2
+
3
+ <!-- What does this PR do? One or two sentences. -->
4
+
5
+ ## Related issue
6
+
7
+ <!-- Closes #NNN or "No related issue" -->
8
+
9
+ ## Checklist
10
+
11
+ - [ ] Tests pass — `node --test test/**/*.test.js`
12
+ - [ ] New behaviour is covered by a test (or justification provided below)
13
+ - [ ] `changie new` entry added for any user-facing change
14
+ - [ ] Commit messages follow the project style (imperative/gerund, no AI references)
15
+ - [ ] Docs updated if public API, CLI, or config schema changed
16
+
17
+ ## Notes
18
+
19
+ <!-- Anything the reviewer should pay attention to — design trade-offs, known gaps, follow-up items -->
@@ -24,6 +24,11 @@ jobs:
24
24
  with:
25
25
  node-version: ${{ matrix.node-version }}
26
26
 
27
+ - name: Install dev dependencies
28
+ run: |
29
+ npm install --ignore-scripts
30
+ ln -sf $(pwd) node_modules/gina
31
+
27
32
  - name: Run tests
28
33
  run: |
29
34
  node --test \
package/AUTHORS CHANGED
@@ -1,7 +1,8 @@
1
- # The following people (sorted alphabetically) contributed to the
2
- # project in one way or another.
3
- #
1
+ # Authors (sorted alphabetically)
4
2
 
5
- Martin Luther ETOUMAN <martin-luther.etouman@gina.io>
6
3
  Fabrice Delaneau <fabrice.delaneau@gina.io>
7
- Stephane HEAV <stephane.heav@gmail.com>
4
+ Martin Luther ETOUMAN <martin-luther.etouman@gina.io>
5
+
6
+ # Contributors (sorted alphabetically)
7
+
8
+ Stephane HEAV <stephane.heav@gmail.com>
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,9 +12,9 @@ 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 |
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 |
17
- | **Q1 2027** | `0.5.0` | ESM support · Template engine migration · Structured logging · Alt-Svc · HTTP/2 priorities · WebSocket over HTTP/2 |
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
+ | **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
+ | **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 |
19
19
 
20
20
  ---
@@ -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
 
@@ -35,8 +36,8 @@ This roadmap covers planned features, architectural improvements, new connectors
35
36
 
36
37
  | Status | Feature | Version | Target |
37
38
  | --- | --- | --- | --- |
38
- | 📋 | **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 |
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 |
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
@@ -78,7 +79,7 @@ New database connectors follow the same interface as the existing Couchbase conn
78
79
  | Status | Connector | Version | Target | Notes |
79
80
  | --- | --- | --- | --- | --- |
80
81
  | ✅ | **Redis** | `0.2.0` | Q2 2026 | Session store and general-purpose cache. Client: `ioredis`. Required for K8s horizontal scaling. |
81
- | 🔶 | **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). Session store done (v1); ORM and state storage deferred. |
82
+ | | **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). Session store done (v1 — 2026-03-27 · `96c5808a`); ORM connector done (v2 — 2026-03-28 · `08ead296`); state storage done (v3 — 2026-03-28 · `da5c55ba`). |
82
83
  | 📋 | **MySQL / MariaDB** | `0.3.0` | Q3 2026 | ORM connector. Client: `mysql2`. |
83
84
  | 📋 | **PostgreSQL** | `0.3.0` | Q3 2026 | ORM connector. Client: `pg` (node-postgres). |
84
85
  | 📋 | **ScyllaDB** | `0.4.0` | Q4 2026 | Cassandra-compatible wide-column store. Client: `@scylladb/scylla-driver`. |
@@ -157,7 +158,7 @@ A cold audit of the Couchbase connector identified two critical security vulnera
157
158
 
158
159
  | Status | Feature | Version | Target |
159
160
  | --- | --- | --- | --- |
160
- | 📋 | **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 |
161
+ | | **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 |
161
162
  | 📋 | **TypeScript declaration files** — Cross-listed with Modernisation Phase 4. Essential for AI code generation accuracy. | `0.4.0` | Q4 2026 |
162
163
 
163
164
  ### Phase 2 — Gina apps can use AI
@@ -198,6 +199,47 @@ Windows compatibility is a hard requirement for `1.0.0`. The alpha scope covers
198
199
 
199
200
  ---
200
201
 
202
+ ## Beemaster
203
+
204
+ Standalone gina dev and admin tool. A dedicated browser-tab app (`services/src/beemaster/`) served on port 4101 alongside the gina dev server. Replaces the in-page toolbar with a thin status bar and brings all tooling and management into an isolated, full-size UI.
205
+
206
+ **Why a standalone app:** The in-page toolbar pollutes the app DOM, causes CSS/JS conflicts, and cannot scale to admin-level operations. Beemaster runs outside the app page — no DOM conflicts, full UI real estate, and works for both local and remote/K8s gina instances. An optional browser extension companion can be built on top later (Phase 4).
207
+
208
+ ### Phase 1 — Decouple in-page toolbar
209
+
210
+ | Status | Feature | Version | Target |
211
+ | --- | --- | --- | --- |
212
+ | 📋 | **Thin in-page status bar** — Remove the in-page toolbar bundle entirely. Replace with a lightweight `<div>` injected only in dev mode: bundle name, environment, a status dot (green/yellow/red), and an "Open Beemaster" link to port 4101. No RequireJS, no jQuery, no SASS. Zero DOM impact on the app. | `0.3.0` | Q3 2026 |
213
+ | 📋 | **`window.__ginaData`** — Replace the current `<pre>` tag data embedding with a single `<script>window.__ginaData={...}</script>` tag (dev mode only). Smaller page weight, no DOM nodes to scrape. Beemaster reads it on connect via `window.opener` or a `postMessage` handshake. | `0.3.0` | Q3 2026 |
214
+
215
+ ### Phase 2 — Beemaster core
216
+
217
+ | Status | Feature | Version | Target |
218
+ | --- | --- | --- | --- |
219
+ | 📋 | **Bundle scaffold** — `services/src/beemaster/` gina bundle on port 4101. Single-page app with tab navigation. Auto-starts with the gina dev server when `NODE_ENV_IS_DEV=true`. Replaces the empty `services/src/toolbar/` skeleton. | `0.4.0` | Q4 2026 |
220
+ | 📋 | **Toolbar tab** — Full toolbar UI (Data, View, Forms, Configuration, Routing sub-tabs) migrated from in-page injection to Beemaster. Copy-to-clipboard and value inspector features carry over. | `0.4.0` | Q4 2026 |
221
+ | 📋 | **Real-time data via engine.io** — Wire the already-bundled `engine.io-client` to port 8125. Data, log events, and XHR activity stream in real time over a persistent socket. Replaces the current page-snapshot model. | `0.4.0` | Q4 2026 |
222
+ | 📋 | **Logs tab** — Real-time log tail with level filter (debug/info/warn/error), bundle filter, text search, and pause/resume. Replaces the current stub Logs tab (no implementation). | `0.4.0` | Q4 2026 |
223
+
224
+ ### Phase 3 — Admin
225
+
226
+ | Status | Feature | Version | Target |
227
+ | --- | --- | --- | --- |
228
+ | 📋 | **Auth layer** — Token-based auth gate for all write operations. Read-only tabs (Toolbar, Logs, Routing) are unauthenticated in local dev. Write operations always require the token. Required before admin tabs are safe to use. | `0.5.0` | Q1 2027 |
229
+ | 📋 | **Bundles tab** — List running and stopped bundles. Actions: start, stop, restart, build — dispatches the equivalent `gina bundle:*` command. Real-time status updates via engine.io. | `0.5.0` | Q1 2027 |
230
+ | 📋 | **Projects tab** — List registered gina projects. Actions: add, remove, view config (`app.json`, `routing.json`, `connectors.json`) with syntax highlighting. | `0.5.0` | Q1 2027 |
231
+ | 📋 | **DB connectors tab** — View all connectors across registered bundles (Couchbase, SQLite, Redis, MySQL, PostgreSQL, ScyllaDB). Connection status, latency, test connection button. Credentials always masked. | `0.5.0` | Q1 2027 |
232
+ | 📋 | **Query inspector** — Live entity query log: connector type, query text, parameters, duration (ms), row count. Delivered via engine.io. Filters: connector, bundle, slow query threshold. | `0.5.0` | Q1 2027 |
233
+
234
+ ### Phase 4 — Advanced
235
+
236
+ | Status | Feature | Version | Target |
237
+ | --- | --- | --- | --- |
238
+ | 📋 | **Multi-instance support** — Connect Beemaster to remote gina instances (staging, K8s) by entering a host:port. Each instance appears as a named environment tab. | post-1.0.0 | — |
239
+ | 📋 | **Browser extension companion** — Chrome/Firefox DevTools panel that embeds a Beemaster view in F12, connecting to the local instance via WebSocket. Optional enhancement on top of the standalone app — not a replacement. | post-1.0.0 | — |
240
+
241
+ ---
242
+
201
243
  ## Tutorials
202
244
 
203
245
  | Status | Tutorial | Duration | Version | Target |
@@ -220,4 +262,4 @@ Windows compatibility is a hard requirement for `1.0.0`. The alpha scope covers
220
262
 
221
263
  ---
222
264
 
223
- *Last updated: 2026-03-28 · 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).*
package/bin/cli CHANGED
@@ -277,6 +277,7 @@ async function onExec() {
277
277
  var allowedOffline = [
278
278
  'build:',
279
279
  'bundle:',
280
+ 'cache:',
280
281
  'dev:',
281
282
  'env:',
282
283
  'scope:',
@@ -0,0 +1 @@
1
+ 0.2.0
@@ -0,0 +1 @@
1
+ @font-face{font-family:"have_heart_oneregular";src:url(fonts/have_heart_one-webfont.woff2) format("woff2"),url(fonts/have_heart_one-webfont.woff) format("woff");font-weight:400;font-style:normal}.gina-popin-container{background:#fff}.gina-popins-overlay,div.gina-popin-container{visibility:hidden;opacity:0;z-index:1;transition:opacity .3s,visibility 0 .3s}.gina-popins-overlay.gina-popin-is-active,div.gina-popin-container.gina-popin-is-active{opacity:1;visibility:visible;transition-delay:0}dialog.gina-popin-container{padding:0;border:none;z-index:1}.gina-popins-overlay{position:fixed;left:0;top:0;display:grid;place-items:center;width:100%;height:100%;transition:opacity .3s,visibility .3s;overflow:auto;background:rgba(0,0,0,.75)}.gina-popins-overlay.gina-popin-is-active{backdrop-filter:blur(6px)}dialog::backdrop{background-color:rgba(0,0,0,.75);backdrop-filter:blur(6px)}.gina-toolbar a,.gina-toolbar div,.gina-toolbar form,.gina-toolbar label,.gina-toolbar li,.gina-toolbar small,.gina-toolbar span,.gina-toolbar strong,.gina-toolbar ul{clear:none;float:none;position:static;margin:0;padding:0;border:0;outline:0;vertical-align:baseline;background:0 0;box-sizing:inherit}.gina-toolbar legend,.gina-toolbar p{clear:none;position:static;padding:0;border:0;box-sizing:inherit}.gina-toolbar fieldset,.gina-toolbar legend,.gina-toolbar p{float:none;outline:0;vertical-align:baseline;background:0 0}.gina-toolbar,.gina-toolbar *,.gina-toolbar :after,.gina-toolbar :before{clear:none;float:none;margin:0;padding:0;border:0;outline:0;vertical-align:baseline;background:0 0}.gina-toolbar *,.gina-toolbar :after,.gina-toolbar :before,.gina-toolbar fieldset{position:static;box-sizing:inherit}.gina-toolbar{box-sizing:content-box;display:block;position:fixed!important;width:auto;height:auto;min-width:260px;color:#888;font:12px/18px "Lucida Grande",Lucida,Arial,Helvetica,sans-serif;overflow:hidden;background-color:rgba(0,0,0,.8);z-index:2147483647}.gina-toolbar div,.gina-toolbar fieldset,.gina-toolbar form,.gina-toolbar legend,.gina-toolbar li,.gina-toolbar p,.gina-toolbar ul{display:block}.gina-toolbar a,.gina-toolbar label,.gina-toolbar small,.gina-toolbar span,.gina-toolbar strong{display:inline}.gina-toolbar a:focus{outline:none}@supports (-webkit-backdrop-filter:none) or (backdrop-filter:none){.gina-toolbar{-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}}.gina-toolbar p{margin:0 0 6px}.gina-toolbar svg{position:relative;display:block;width:16px;height:16px;fill:#fff}.gina-toolbar fieldset{clear:both;padding:0;margin:0;border:none}.gina-toolbar fieldset+fieldset{padding:12px 0 0;margin:12px 0 0;border-top:1px solid #444}.gina-toolbar legend{margin:6px 0;color:#888;font-size:12px;font-weight:400}.gina-toolbar input[type=text],.gina-toolbar label{color:#fff;font-size:12px;font-weight:400}.gina-toolbar input[type=text]{appearance:none;text-align:center;background:0 0;border:none}.gina-toolbar input[type=text]:active,.gina-toolbar input[type=text]:focus{outline:none;border-color:#fff;background:#444}.gina-toolbar input[type=file]{display:none}.gina-toolbar select{appearance:none;height:24px;width:auto;padding:0 10px;margin:0;color:#fff;font-size:11px;font-weight:400;background:0 0;border:1px solid #666}.gina-toolbar select:active,.gina-toolbar select:focus{outline:none;border-color:#fff;background:#333}.gina-toolbar .gina-toolbar-button:hover,.gina-toolbar .gina-toolbar-input-file:hover,.gina-toolbar select:hover{border-color:#f2af0d}.gina-toolbar .gina-toolbar-inline-list>li{display:inline-block}.gina-toolbar .gina-toolbar-list-item{margin:0 0 12px}.gina-toolbar .gina-toolbar-button,.gina-toolbar .gina-toolbar-input-file{display:inline-block;padding:3px 10px;color:#fff;text-decoration:none;border:1px solid #888;border-radius:24px}.gina-toolbar .gina-toolbar-button:active,.gina-toolbar .gina-toolbar-button:focus,.gina-toolbar .gina-toolbar-input-file:active,.gina-toolbar .gina-toolbar-input-file:focus{outline:none;border-color:#fff}:root{--color-white:#fff;--color-primary:#2a6df4;--color-contrast-higher:#1c1c21;--color-contrast-low:#d3d3d4;--switch-width:64px;--switch-height:32px;--switch-padding:3px;--switch-animation-duration:.2s}.gina-toolbar-switch{position:relative;display:inline-flex;flex-shrink:0;align-items:center;width:var(--switch-width);height:var(--switch-height);border-radius:50em;padding:var(--switch-padding) 0}.gina-toolbar-switch__input,.gina-toolbar-switch__label{position:absolute;left:0;top:0}.gina-toolbar-switch__input{margin:0;padding:0;opacity:0;height:0;width:0;pointer-events:none}.gina-toolbar-switch__input:checked+.gina-toolbar-switch__label{background-color:hsl(220deg,90%,56%)}.gina-toolbar-switch__input:checked+.gina-toolbar-switch__label+.gina-toolbar-switch__marker{left:calc(100% - var(--switch-height) + var(--switch-padding))}.gina-toolbar-switch__input:active+.gina-toolbar-switch__label,.gina-toolbar-switch__input:focus+.gina-toolbar-switch__label{box-shadow:0 0 0 2px #1c1c21}.gina-toolbar-switch__input:checked:active+.gina-toolbar-switch__label,.gina-toolbar-switch__input:checked:focus+.gina-toolbar-switch__label{box-shadow:0 0 0 2px #2a6df4}.gina-toolbar-switch__label{width:100%;height:100%;color:transparent;user-select:none;background-color:hsl(240deg,1%,83%);border-radius:inherit;z-index:1;transition:var(--switch-animation-duration);overflow:hidden}.gina-toolbar-switch__marker{position:relative;background-color:#fff;width:calc(var(--switch-height) - var(--switch-padding)*2);height:calc(var(--switch-height) - var(--switch-padding)*2);border-radius:50%;z-index:2;pointer-events:none;box-shadow:var(--shadow-xs);left:var(--switch-padding);transition:left var(--switch-animation-duration);will-change:left}.gina-toolbar-copy{position:absolute;top:-200%;left:-200%}.gina-toolbar-hidden{display:none!important;visibility:hidden}.gina-toolbar-top-left{top:0;left:0;border-bottom-right-radius:10px}.gina-toolbar-top-right{top:0;right:0;border-bottom-left-radius:10px}.gina-toolbar-bottom-left{bottom:0;left:0;border-top-right-radius:10px}.gina-toolbar-bottom-right{bottom:0;right:0;border-top-left-radius:10px}.gina-toolbar-auto{width:auto}.gina-toolbar-30{width:30%}.gina-toolbar-40{width:40%}.gina-toolbar-50{width:50%}.gina-toolbar-60{width:60%}.gina-toolbar-80{width:80%}.gina-toolbar-100{width:100%}.gina-toolbar-100:not(.gina-toolbar-collapsed){border-radius:0}.gina-toolbar .gina-toolbar-header{width:100%;height:32px;margin:0;background:#111}.gina-toolbar .gina-toolbar-header a{display:block;height:18px;padding:7px 10px 5px;margin:0 5px;color:#fff;text-decoration:none;border-bottom:2px solid transparent}.gina-toolbar .gina-toolbar-header a:hover{color:#111;background-color:#f2af0d}.gina-toolbar .gina-toolbar-header .gina-toolbar-tabs{float:left;margin:0;padding:0}.gina-toolbar .gina-toolbar-header .gina-toolbar-active{color:#f2af0d;border-color:#f2af0d}.gina-toolbar .gina-toolbar-header .gina-toolbar-active:hover{color:#f2af0d;background-color:transparent}.gina-toolbar .gina-toolbar-header .gina-toolbar-tab,.gina-toolbar-bottom-left .gina-toolbar-header .gina-toolbar-logo,.gina-toolbar-top-left .gina-toolbar-header .gina-toolbar-logo{float:left}.gina-toolbar .gina-toolbar-header .gina-toolbar-logo a,.gina-toolbar .gina-toolbar-header .gina-toolbar-tab-settings a{height:auto;margin:0;padding:8px 10px 6px}.gina-toolbar .gina-toolbar-header .gina-toolbar-logo a:hover svg,.gina-toolbar .gina-toolbar-header .gina-toolbar-tab-settings a:hover svg{fill:#111}.gina-toolbar .gina-toolbar-header .gina-toolbar-logo .gina-toolbar-active svg,.gina-toolbar .gina-toolbar-header .gina-toolbar-logo .gina-toolbar-active:hover svg,.gina-toolbar .gina-toolbar-header .gina-toolbar-tab-settings .gina-toolbar-active svg,.gina-toolbar .gina-toolbar-header .gina-toolbar-tab-settings .gina-toolbar-active:hover svg,.gina-toolbar-collapsed .gina-toolbar-logo svg{fill:#f2af0d}.gina-toolbar .gina-toolbar-header .gina-toolbar-logo a:hover svg{animation:gina-toolbar-shake .5s both}.gina-toolbar .gina-toolbar-header .gina-toolbar-tab-settings a:hover svg{animation:gina-toolbar-rotate 2s both}@keyframes gina-toolbar-shake{10%,90%{transform:rotate3d(0,0,1,-6deg)}20%,80%{transform:rotate3d(0,0,1,5deg)}30%,50%,70%{transform:rotate3d(0,0,1,-5deg)}40%,60%{transform:rotate3d(0,0,1,6deg)}}@keyframes gina-toolbar-rotate{0%{transform:rotate3d(0,0,1,0deg)}to{transform:rotate3d(0,0,1,180deg)}}.gina-toolbar-bottom-left .gina-toolbar-header .gina-toolbar-tab-settings,.gina-toolbar-bottom-left .gina-toolbar-header .gina-toolbar-tabs,.gina-toolbar-bottom-right .gina-toolbar-header .gina-toolbar-logo,.gina-toolbar-top-left .gina-toolbar-header .gina-toolbar-tab-settings,.gina-toolbar-top-left .gina-toolbar-header .gina-toolbar-tabs,.gina-toolbar-top-right .gina-toolbar-header .gina-toolbar-logo{float:right}.gina-toolbar .gina-toolbar-panel{clear:both;display:none;width:100%}.gina-toolbar .gina-toolbar-panel.gina-toolbar-active{display:block}.gina-toolbar .gina-toolbar-main{overflow:auto;max-height:500px}.gina-toolbar .gina-toolbar-options{padding:12px 15px 0;border-bottom:1px solid #444}.gina-toolbar .gina-toolbar-content{padding:12px 15px}.gina-toolbar .gina-toolbar-content.gina-toolbar-content-end::after{content:"";display:block;padding:3px 0;margin:12px 0 0;text-align:center;color:#fff;background:#444;background:repeating-linear-gradient(-45deg,#f4b125,#f4b125 10px,#111 10px,#111 20px);border-radius:10px}.gina-toolbar-collapsed{width:auto;min-width:0}.gina-toolbar-collapsed .gina-toolbar-panels,.gina-toolbar-collapsed .gina-toolbar-tab{display:none}.gina-toolbar-section-title{margin:12px 0 0;padding:12px 0 0;border-top:1px solid #444;font-size:9px;line-height:2;font-weight:400;text-transform:uppercase}.gina-toolbar-content>.gina-toolbar-section:first-child>.gina-toolbar-section-title{margin:0;padding:0;border-top:none}ul.gina-toolbar-section-content{max-height:0;overflow:hidden;transition:max-height .25s ease}.gina-toolbar-collection>a:first-child,.gina-toolbar-object>a:first-child{display:block;text-decoration:none}.gina-toolbar-collection>a:first-child span,.gina-toolbar-object>a:first-child span{color:#888}.gina-toolbar-collection>a:first-child:before,.gina-toolbar-object>a:first-child:before{content:"";position:relative;top:1px;display:inline-block;width:0;height:0;margin-right:5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:8px solid #888;transition:border-left-color .5s}.gina-toolbar-collection>a:first-child:hover::before,.gina-toolbar-object>a:first-child:hover::before{border-left-color:#eff}.gina-toolbar-collection>ul,.gina-toolbar-object>ul{margin-left:20px;max-height:0;overflow:hidden;transition:max-height .25s ease}.gina-toolbar-unfolded::before{transform:rotate(90deg)}.gina-toolbar .gina-toolbar-key{color:#fff}.gina-toolbar .gina-toolbar-key-added{color:#c3e88d}.gina-toolbar .gina-toolbar-value{display:inline-block;padding:0 5px;color:#5ba1cf;border-radius:3px}.gina-toolbar .gina-toolbar-value:hover{color:#111;background:#5ba1cf}.gina-toolbar .gina-toolbar-value-type-is-null,.gina-toolbar .gina-toolbar-value-type-is-number{color:#f78c6a}.gina-toolbar .gina-toolbar-value-type-is-boolean{color:#ffaa3e}.gina-toolbar .gina-toolbar-is-overridden>.gina-toolbar-key,.gina-toolbar .gina-toolbar-is-overridden>.gina-toolbar-value{color:#888;text-decoration:line-through}.gina-toolbar .gina-toolbar-is-overridden>.gina-toolbar-value:hover{color:#111;background:#888}.gina-toolbar .gina-toolbar-cols{margin:10px 0;display:flex;flex-wrap:nowrap;justify-content:flex-start}.gina-toolbar .gina-toolbar-cols>*{margin-left:10px}.gina-toolbar .gina-toolbar-cols>:first-child{margin-left:0}.gina-toolbar .gina-toolbar-tab-logs.gina-toolbar-alert>a::after,.gina-toolbar .gina-toolbar-tab-logs.gina-toolbar-crit>a::after,.gina-toolbar .gina-toolbar-tab-logs.gina-toolbar-debug>a::after,.gina-toolbar .gina-toolbar-tab-logs.gina-toolbar-emerg>a::after,.gina-toolbar .gina-toolbar-tab-logs.gina-toolbar-error>a::after,.gina-toolbar .gina-toolbar-tab-logs.gina-toolbar-info>a::after,.gina-toolbar .gina-toolbar-tab-logs.gina-toolbar-notice>a::after,.gina-toolbar .gina-toolbar-tab-logs.gina-toolbar-warning>a::after{content:"";position:relative;top:1px;display:inline-block;width:8px;height:8px;margin-left:5px;background-position:100% 50%;background-repeat:no-repeat;background-size:12px 12px;border-radius:100%;animation:gina-toolbar-heart-beats 3.5s infinite}.gina-toolbar .gina-toolbar-tab-logs.gina-toolbar-debug>a::after{background-color:#888}.gina-toolbar .gina-toolbar-tab-logs.gina-toolbar-info>a::after{background-color:#218af3}.gina-toolbar .gina-toolbar-tab-logs.gina-toolbar-notice>a::after{background-color:#f4b125}.gina-toolbar .gina-toolbar-tab-logs.gina-toolbar-warning>a::after{background-color:#f78c6a}.gina-toolbar .gina-toolbar-tab-logs.gina-toolbar-alert>a::after,.gina-toolbar .gina-toolbar-tab-logs.gina-toolbar-crit>a::after,.gina-toolbar .gina-toolbar-tab-logs.gina-toolbar-emerg>a::after,.gina-toolbar .gina-toolbar-tab-logs.gina-toolbar-error>a::after{background-color:#f63625}.gina-toolbar .gina-toolbar-logs-report>li{box-sizing:border-box;display:inline-block;padding-left:18px;margin:0 5% 0 0;width:30%;line-height:13px;background-position:0 0;background-repeat:no-repeat;background-size:12px 12px}.gina-toolbar .gina-toolbar-logs-report>li:last-child{margin:0}.gina-toolbar .gina-toolbar-logs-infos{background-image:url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 11 11"><rect x="3" y="2" width="5" height="1" fill="#fff"/><rect x="3" y="4" width="5" height="1" fill="#fff"/><rect x="3" y="6" width="5" height="1" fill="#fff"/><path d="M9.052 0.001l0.051 0.002 0.051 0.003 0.051 0.005 0.05 0.006 0.05 0.007 0.05 0.009 0.049 0.009 0.049 0.011 0.048 0.012 0.048 0.013 0.047 0.014 0.047 0.015 0.046 0.017 0.046 0.017 0.045 0.019 0.045 0.019 0.044 0.021 0.043 0.021 0.043 0.023 0.042 0.024 0.042 0.024 0.041 0.026 0.04 0.026 0.039 0.028 0.039 0.028 0.038 0.03 0.038 0.03 0.036 0.031 0.036 0.032 0.035 0.032 0.035 0.034 0.033 0.034 0.033 0.035 0.032 0.036 0.031 0.037 0.03 0.037 0.029 0.038 0.028 0.039 0.027 0.04 0.027 0.04 0.025 0.041 0.025 0.041 0.023 0.042 0.023 0.043 0.021 0.043 0.021 0.044 0.019 0.045 0.019 0.045 0.017 0.045 0.016 0.046 0.015 0.047 0.014 0.047 0.013 0.048 0.012 0.048 0.011 0.048 0.009 0.049 0.008 0.049 0.007 0.05 0.006 0.05 0.004 0.051 0.003 0.05 0.002 0.052 0.001 0.051 0 5 -0.001 0.052 -0.002 0.051 -0.003 0.051 -0.004 0.05 -0.006 0.051 -0.007 0.049 -0.008 0.05 -0.01 0.049 -0.01 0.048 -0.012 0.049 -0.013 0.047 -0.014 0.047 -0.015 0.047 -0.016 0.046 -0.018 0.046 -0.018 0.045 -0.02 0.045 -0.02 0.044 -0.022 0.043 -0.023 0.043 -0.023 0.042 -0.025 0.042 -0.025 0.041 -0.027 0.04 -0.027 0.039 -0.029 0.039 -0.029 0.038 -0.03 0.038 -0.031 0.037 -0.032 0.035 -0.033 0.036 -0.033 0.034 -0.034 0.033 -0.036 0.033 -0.035 0.032 -0.037 0.031 -0.038 0.03 -0.038 0.029 -0.039 0.029 -0.039 0.027 -0.04 0.027 -0.041 0.025 -0.042 0.025 -0.042 0.023 -0.043 0.023 -0.043 0.022 -0.044 0.02 -0.045 0.02 -0.045 0.018 -0.046 0.018 -0.046 0.016 -0.047 0.015 -0.047 0.014 -0.047 0.013 -0.049 0.012 -0.048 0.01 -0.049 0.01 -0.05 0.008 -0.049 0.007 -0.051 0.006 -0.05 0.004 -0.051 0.003 -0.051 0.002 -0.052 0.001 -2.32 0 -2.639 2 -1.041 0 0-2 -1 0 -0.052-0.001 -0.051-0.002 -0.051-0.003 -0.05-0.004 -0.051-0.006 -0.049-0.007 -0.05-0.008 -0.049-0.01 -0.048-0.01 -0.049-0.012 -0.047-0.013 -0.047-0.014 -0.047-0.015 -0.046-0.016 -0.046-0.018 -0.045-0.018 -0.045-0.02 -0.044-0.02 -0.043-0.022 -0.043-0.023 -0.042-0.023 -0.042-0.025 -0.041-0.025 -0.04-0.027 -0.039-0.027 -0.039-0.029 -0.038-0.029 -0.038-0.03 -0.037-0.031 -0.035-0.032 -0.036-0.033 -0.034-0.033 -0.033-0.034 -0.033-0.036 -0.032-0.035 -0.031-0.037 -0.03-0.038 -0.029-0.038 -0.029-0.039 -0.027-0.039 -0.027-0.04 -0.025-0.041 -0.025-0.042 -0.023-0.042 -0.023-0.043 -0.022-0.043 -0.02-0.044 -0.02-0.045 -0.018-0.045 -0.018-0.046 -0.016-0.046 -0.015-0.047 -0.014-0.047 -0.013-0.047 -0.012-0.049 -0.01-0.048 -0.01-0.049 -0.008-0.05 -0.007-0.049 -0.006-0.051 -0.004-0.05 -0.003-0.051 -0.002-0.051 -0.001-0.052 0-5 0.001-0.051 0.002-0.052 0.003-0.05 0.004-0.051 0.006-0.05 0.007-0.05 0.008-0.049 0.009-0.049 0.011-0.048 0.012-0.048 0.013-0.048 0.014-0.047 0.015-0.047 0.016-0.046 0.017-0.045 0.019-0.045 0.019-0.045 0.021-0.044 0.021-0.043 0.023-0.043 0.023-0.042 0.025-0.041 0.025-0.041 0.027-0.04 0.027-0.04 0.028-0.039 0.029-0.038 0.03-0.037 0.031-0.037 0.032-0.036 0.033-0.035 0.033-0.034 0.035-0.034 0.035-0.032 0.036-0.032 0.036-0.031 0.038-0.03 0.038-0.03 0.039-0.028 0.039-0.028 0.04-0.026 0.041-0.026 0.042-0.024 0.042-0.024 0.043-0.023 0.043-0.021 0.044-0.021 0.045-0.019 0.045-0.019 0.046-0.017 0.046-0.017 0.047-0.015 0.047-0.014 0.048-0.013 0.048-0.012 0.049-0.011 0.049-0.009 0.05-0.009 0.05-0.007 0.05-0.006 0.051-0.005 0.051-0.003 0.051-0.002 0.052-0.001 7 0 0.052 0.001ZM2.008 1l-0.031 0.001 -0.026 0.001 -0.026 0.001 -0.026 0.003 -0.025 0.003 -0.026 0.003 -0.025 0.005 -0.024 0.004 -0.025 0.006 -0.024 0.006 -0.024 0.006 -0.023 0.007 -0.024 0.008 -0.023 0.008 -0.023 0.009 -0.022 0.009 -0.022 0.01 -0.022 0.01 -0.022 0.011 -0.022 0.011 -0.021 0.012 -0.021 0.013 -0.02 0.012 -0.02 0.014 -0.02 0.013 -0.02 0.015 -0.019 0.014 -0.019 0.016 -0.018 0.015 -0.018 0.016 -0.018 0.017 -0.017 0.017 -0.017 0.017 -0.016 0.018 -0.016 0.018 -0.016 0.018 -0.015 0.019 -0.015 0.019 -0.014 0.019 -0.014 0.02 -0.013 0.02 -0.012 0.021 -0.013 0.02 -0.011 0.021 -0.012 0.022 -0.01 0.021 -0.011 0.022 -0.009 0.022 -0.009 0.022 -0.009 0.023 -0.008 0.023 -0.007 0.023 -0.007 0.023 -0.007 0.024 -0.005 0.023 -0.006 0.024 -0.004 0.025 -0.004 0.024 -0.004 0.025 -0.003 0.025 -0.002 0.025 -0.002 0.026 -0.001 0.026 0 0.032 0 4.988 0 0.032 0.001 0.026 0.002 0.026 0.002 0.025 0.003 0.025 0.004 0.025 0.004 0.025 0.004 0.024 0.006 0.024 0.005 0.024 0.007 0.024 0.007 0.023 0.007 0.023 0.008 0.023 0.009 0.023 0.009 0.022 0.01 0.023 0.01 0.021 0.011 0.022 0.011 0.021 0.012 0.022 0.012 0.02 0.013 0.021 0.013 0.02 0.014 0.02 0.014 0.019 0.015 0.019 0.015 0.019 0.016 0.019 0.016 0.018 0.016 0.017 0.017 0.018 0.018 0.017 0.017 0.016 0.018 0.016 0.019 0.016 0.019 0.015 0.019 0.015 0.019 0.014 0.02 0.014 0.02 0.013 0.021 0.013 0.02 0.012 0.022 0.012 0.021 0.011 0.022 0.011 0.021 0.01 0.023 0.01 0.022 0.009 0.023 0.009 0.023 0.008 0.023 0.007 0.023 0.007 0.024 0.007 0.024 0.005 0.024 0.006 0.024 0.004 0.025 0.004 0.025 0.004 0.025 0.003 0.025 0.002 0.026 0.002 0.026 0.001 0.032 0 1.994 0 0 1.776 2.344-1.776 2.65 0 0.032 0 0.026-0.001 0.026-0.002 0.025-0.002 0.025-0.003 0.025-0.004 0.025-0.004 0.024-0.004 0.024-0.006 0.024-0.005 0.024-0.007 0.023-0.007 0.023-0.007 0.023-0.008 0.023-0.009 0.022-0.009 0.023-0.01 0.021-0.01 0.022-0.011 0.021-0.011 0.022-0.012 0.02-0.012 0.021-0.013 0.02-0.013 0.02-0.014 0.019-0.014 0.019-0.015 0.019-0.015 0.019-0.016 0.018-0.016 0.017-0.016 0.018-0.017 0.017-0.018 0.016-0.017 0.016-0.018 0.016-0.019 0.015-0.019 0.015-0.019 0.014-0.019 0.014-0.02 0.013-0.02 0.013-0.021 0.012-0.02 0.012-0.022 0.011-0.021 0.011-0.022 0.01-0.021 0.01-0.023 0.009-0.022 0.009-0.023 0.008-0.023 0.007-0.023 0.007-0.023 0.007-0.024 0.005-0.024 0.006-0.024 0.004-0.024 0.004-0.025 0.004-0.025 0.003-0.025 0.002-0.025 0.002-0.026 0.001-0.026 0-0.032 0-4.988 0-0.032 -0.001-0.026 -0.002-0.026 -0.002-0.025 -0.003-0.025 -0.004-0.025 -0.004-0.024 -0.004-0.025 -0.006-0.024 -0.005-0.023 -0.007-0.024 -0.007-0.023 -0.007-0.023 -0.008-0.023 -0.009-0.023 -0.009-0.022 -0.009-0.022 -0.011-0.022 -0.01-0.021 -0.012-0.022 -0.011-0.021 -0.013-0.02 -0.012-0.021 -0.013-0.02 -0.014-0.02 -0.014-0.019 -0.015-0.019 -0.015-0.019 -0.016-0.018 -0.016-0.019 -0.016-0.017 -0.017-0.017 -0.017-0.017 -0.018-0.017 -0.018-0.016 -0.018-0.015 -0.019-0.016 -0.019-0.014 -0.02-0.015 -0.02-0.013 -0.02-0.014 -0.02-0.012 -0.021-0.013 -0.021-0.012 -0.022-0.011 -0.022-0.011 -0.022-0.01 -0.022-0.01 -0.022-0.009 -0.023-0.009 -0.023-0.008 -0.024-0.008 -0.023-0.007 -0.024-0.006 -0.024-0.006 -0.025-0.006 -0.024-0.004 -0.025-0.005 -0.026-0.003 -0.025-0.003 -0.026-0.003 -0.026-0.001 -0.026-0.001 -0.031-0.001 -6.984 0Z" fill="#fff"/></svg>')}.gina-toolbar .gina-toolbar-logs-warnings{background-image:url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="100" height="100" viewBox="0 0 11 11" version="1.1" xml:space="preserve" style="clip-rule:evenodd;fill-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:1"><path d="M5.529 0.001l0.028 0.001 0.029 0.003 0.028 0.003 0.027 0.005 0.028 0.005 0.027 0.006 0.027 0.008 0.027 0.008 0.026 0.009 0.026 0.01 0.026 0.011 0.025 0.011 0.025 0.013 0.024 0.013 0.024 0.014 0.023 0.015 0.023 0.016 0.022 0.016 0.022 0.018 0.021 0.018 0.02 0.018 0.02 0.02 0.019 0.02 0.019 0.021 0.018 0.022 0.017 0.022 0.016 0.023 0.016 0.023 0.015 0.024 0.014 0.025 0.013 0.026 4.691 9.381 0.011 0.023 0.01 0.024 0.01 0.025 0.009 0.024 0.008 0.024 0.008 0.025 0.006 0.025 0.006 0.025 0.005 0.025 0.004 0.026 0.003 0.025 0.002 0.025 0.002 0.026 0.001 0.025 0 0.026 -0.001 0.025 -0.001 0.026 -0.003 0.025 -0.003 0.025 -0.004 0.025 -0.005 0.025 -0.005 0.025 -0.006 0.025 -0.007 0.025 -0.008 0.024 -0.009 0.024 -0.01 0.024 -0.01 0.024 -0.011 0.024 -0.012 0.023 -0.012 0.023 -0.014 0.022 -0.014 0.022 -0.015 0.022 -0.015 0.021 -0.016 0.02 -0.017 0.02 -0.017 0.019 -0.018 0.019 -0.018 0.018 -0.019 0.017 -0.019 0.017 -0.02 0.016 -0.021 0.015 -0.02 0.015 -0.022 0.014 -0.021 0.014 -0.022 0.013 -0.023 0.012 -0.022 0.011 -0.024 0.011 -0.023 0.009 -0.024 0.01 -0.024 0.008 -0.024 0.008 -0.025 0.007 -0.025 0.006 -0.025 0.005 -0.026 0.005 -0.025 0.003 -0.026 0.003 -0.026 0.002 -0.026 0.002 -0.026 0 -9.381 0 -0.027 0 -0.026-0.002 -0.026-0.002 -0.026-0.003 -0.025-0.003 -0.025-0.005 -0.026-0.005 -0.025-0.006 -0.024-0.007 -0.025-0.008 -0.024-0.008 -0.024-0.01 -0.023-0.009 -0.023-0.011 -0.023-0.011 -0.023-0.012 -0.022-0.013 -0.021-0.014 -0.021-0.014 -0.021-0.015 -0.02-0.015 -0.02-0.016 -0.02-0.017 -0.019-0.017 -0.018-0.018 -0.018-0.019 -0.017-0.019 -0.016-0.02 -0.016-0.02 -0.016-0.021 -0.015-0.022 -0.014-0.022 -0.013-0.022 -0.013-0.023 -0.012-0.023 -0.011-0.024 -0.01-0.024 -0.01-0.024 -0.008-0.024 -0.008-0.024 -0.007-0.025 -0.007-0.025 -0.005-0.025 -0.005-0.025 -0.004-0.025 -0.003-0.025 -0.002-0.025 -0.002-0.026 -0.001-0.025 0-0.026 0.001-0.025 0.002-0.026 0.002-0.025 0.004-0.025 0.004-0.026 0.005-0.025 0.005-0.025 0.007-0.025 0.007-0.025 0.008-0.024 0.009-0.024 0.01-0.025 0.01-0.024 0.012-0.023 4.69-9.381 0.014-0.026 0.014-0.025 0.015-0.024 0.015-0.023 0.017-0.023 0.017-0.022 0.018-0.022 0.018-0.021 0.019-0.02 0.02-0.02 0.021-0.018 0.021-0.018 0.021-0.018 0.023-0.016 0.022-0.016 0.024-0.015 0.023-0.014 0.025-0.013 0.024-0.013 0.026-0.011 0.025-0.011 0.026-0.01 0.026-0.009 0.027-0.008 0.027-0.008 0.027-0.006 0.028-0.005 0.028-0.005 0.028-0.003 0.028-0.003 0.028-0.001 0.029-0.001 0.029 0.001ZM1.118 10l8.764 0 -4.382-8.764 -4.382 8.764ZM6 8l0 1 -1 0 0-1 1 0ZM6 4l0 3 -1 0 0-3 1 0Z" fill="#fff"/></svg>')}.gina-toolbar .gina-toolbar-logs-errors{background-image:url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 11 11"><path d="M11 3.04l0 4.95 -3.04 3.01 -4.92 0 -3.04-3.01 0-4.95 3.04-3.04 4.92 0 3.04 3.04ZM3.45 1l-2.45 2.45 0 4.12 2.45 2.43 4.1 0 2.45-2.43 0-4.12 -2.45-2.45 -4.09 0ZM6 7.99l0 1.01 -1 0 0-1.01 1 0ZM6 2l0 4.99 -1 0 0-4.99 1 0Z" fill="#fff"/></svg>')}@keyframes gina-toolbar-heart-beats{0%,to{transform:scale(1)}50%{transform:scale(.5)}}
@@ -217,7 +217,6 @@ function Config(opt, contextResetNeeded) {
217
217
 
218
218
  if (err) {
219
219
  console.error(err.stack||err.message);
220
-
221
220
  setTimeout(() => {
222
221
  process.exit(1);
223
222
  }, 0);
@@ -685,9 +684,11 @@ function Config(opt, contextResetNeeded) {
685
684
  var version = null, middleware = null;
686
685
  try {
687
686
  self.version = version = require(_(getPath('gina').root +'/package.json' )).version;
688
- self.middleware = middleware = fs.readFileSync(_( getEnvVar('GINA_FRAMEWORK_DIR') + '/MIDDLEWARE')).toString() || 'none';
689
-
687
+ // #B10 fix: moved before MIDDLEWARE read so ${version} substitution always works
688
+ // even in environments where the MIDDLEWARE file is absent (e.g. containers).
690
689
  setContext('gina.version', version);
690
+
691
+ self.middleware = middleware = fs.readFileSync(_( getEnvVar('GINA_FRAMEWORK_DIR') + '/MIDDLEWARE')).toString() || 'none';
691
692
  setContext('gina.middleware', middleware);
692
693
 
693
694
  } catch (err) {
@@ -1911,6 +1912,9 @@ function Config(opt, contextResetNeeded) {
1911
1912
 
1912
1913
  for (let rule in routing) {
1913
1914
 
1915
+ // skip non-object entries (e.g. $schema annotations in routing.json)
1916
+ if (typeof(routing[rule]) != 'object' || routing[rule] === null) continue;
1917
+
1914
1918
  // checking requirements syntax
1915
1919
  if ( typeof(routing[rule].requirements) != 'undefined' && routing[rule].requirements.count() > 0 ) {
1916
1920
  for ( let r in routing[rule].requirements) {
@@ -2924,6 +2928,12 @@ function Config(opt, contextResetNeeded) {
2924
2928
  if (!self.envConf[bundle][env].content)
2925
2929
  self.envConf[bundle][env].content = {};
2926
2930
 
2931
+ // strip non-object entries (e.g. $schema annotations) before storing —
2932
+ // all routing consumers iterate this object and expect only route rule objects
2933
+ for (var _k in routing) {
2934
+ if (typeof(routing[_k]) != 'object' || routing[_k] === null) delete routing[_k];
2935
+ }
2936
+
2927
2937
  self.envConf[bundle][env].content.routing = routing;
2928
2938
  self.envConf.routing = merge(self.envConf.routing, routing);
2929
2939
  }
@@ -3013,9 +3023,20 @@ function Config(opt, contextResetNeeded) {
3013
3023
  * });
3014
3024
  */
3015
3025
  this.onReady = function(callback) {
3016
- self.once('config#complete', function(err, config) {
3017
- callback(err, config)
3018
- })
3026
+ // #B10-fix: if config#complete was already emitted (e.g. because
3027
+ // lib.SessionStore(session) triggered Config loading at module-eval time
3028
+ // before gna.start() ran), call the callback immediately so the
3029
+ // startup sequence is not silently stuck waiting for an event that
3030
+ // will never fire again.
3031
+ if (Config.initialized && self.bundlesConfiguration) {
3032
+ setImmediate(function() {
3033
+ callback(null, self.bundlesConfiguration);
3034
+ });
3035
+ } else {
3036
+ self.once('config#complete', function(err, config) {
3037
+ callback(err, config)
3038
+ });
3039
+ }
3019
3040
  return self
3020
3041
  };
3021
3042
 
@@ -324,7 +324,14 @@ function Couchbase(conn, infos) {
324
324
 
325
325
 
326
326
  entities[entityName].prototype[name] = function() {
327
- var self = this;
327
+ // #B11 fix: recover the entity singleton when called via util.promisify
328
+ // without .bind(). In strict mode `this` is undefined when a prototype
329
+ // method is detached from its object. Fall back to the singleton stored
330
+ // at EntitySuperClass[CapitalizedName].instance (set by entity.js:427).
331
+ // This makes `util.promisify(entity.method)` work transparently without
332
+ // requiring callers to add .bind(entity) everywhere.
333
+ var _capitalizedName = entityName.substring(0,1).toUpperCase() + entityName.substring(1);
334
+ var self = this || (EntitySuperClass[_capitalizedName] && EntitySuperClass[_capitalizedName].instance) || null;
328
335
  var key = null
329
336
  , index = null
330
337
  , i = null
@@ -332,6 +339,13 @@ function Couchbase(conn, infos) {
332
339
  , args = Array.prototype.slice.call(arguments)
333
340
  , _mainCallback = null;
334
341
 
342
+ if (!self) {
343
+ var _ctxErr = new TypeError('[entity] ' + entityName + '#' + name + '() called without context: `this` is undefined and no singleton found at EntitySuperClass[' + _capitalizedName + '].instance');
344
+ var _cbArg = (args.length > 0 && typeof args[args.length - 1] === 'function') ? args[args.length - 1] : null;
345
+ if (_cbArg) { return _cbArg(_ctxErr); }
346
+ throw _ctxErr;
347
+ }
348
+
335
349
  if ( params && params.length != args.length && !/function/.test(typeof(args[args.length-1])) ) {
336
350
  throw new Error('[N1QL][ ' + entityName+'#'+name+'() ] arguments must match parameters length. Please refer to [ '+ source +' ]\nFound in param list: ('+ params.join(', ') +') !')
337
351
  } else if ( /function/.test( typeof(args[args.length-1]) ) ) {
@@ -765,7 +779,13 @@ function Couchbase(conn, infos) {
765
779
  // ftsClause = null;
766
780
 
767
781
 
768
- if ( typeof(self.once) != 'undefined' && typeof(cb) != 'undefined' ) {
782
+ // #B11-listener-fix: use typeof(cb) === 'function' so that passing null
783
+ // as cb (direct-callback/promisify path) skips .once() registration.
784
+ // The direct-callback path calls _mainCallback from onQueryCallback
785
+ // closure without emitting the trigger, so the .once() listener would
786
+ // never fire and would leak on the singleton. Query runs via the
787
+ // !self._isRegisteredFromProto fallback block below instead.
788
+ if ( typeof(self.once) === 'function' && typeof(cb) === 'function' ) {
769
789
  self._isRegisteredFromProto = true;
770
790
  //console.debug('registered trigger: ', trigger, self._isRegisteredFromProto);
771
791
  self.once(trigger, function onComplete(err, data, meta){
@@ -953,12 +973,15 @@ function Couchbase(conn, infos) {
953
973
  return _promise;
954
974
 
955
975
  } else {
956
- // Direct callback path (util.promisify or explicit _mainCallback)
957
- // unchanged, register() called synchronously.
976
+ // Direct callback path (util.promisify or explicit _mainCallback).
977
+ // Pass null as cb so register() skips .once() registration —
978
+ // _mainCallback is already in onQueryCallback's closure and will
979
+ // be called there directly. register() runs the query via the
980
+ // !self._isRegisteredFromProto fallback block.
958
981
  if ( sdkVersion > 2 ) {
959
- register(trigger, queryOptions, onQueryCallback, _mainCallback)
982
+ register(trigger, queryOptions, onQueryCallback, null)
960
983
  } else {
961
- register(trigger, queryParams, onQueryCallback, _mainCallback)
984
+ register(trigger, queryParams, onQueryCallback, null)
962
985
  }
963
986
  }
964
987
  }
@@ -15,7 +15,8 @@
15
15
  * Module dependencies.
16
16
  */
17
17
 
18
- var debug = require('debug')('connect:couchbase');
18
+ // #B10 fix: require debug from project node_modules — same pattern as couchbase/index.js.
19
+ var debug = require(_(getPath('project') + '/node_modules/debug'))('connect:couchbase');
19
20
 
20
21
  /**
21
22
  * One day in seconds.
@@ -22,7 +22,8 @@ var console = lib.logger;
22
22
  * Module dependencies.
23
23
  */
24
24
 
25
- var debug = require('debug')('connect:couchbase');
25
+ // #B10 fix: require debug from project node_modules — same pattern as couchbase/index.js.
26
+ var debug = require(_(getPath('project') + '/node_modules/debug'))('connect:couchbase');
26
27
 
27
28
  /**
28
29
  * One day in seconds.
@@ -24,7 +24,9 @@ var dateFormat = helpers.dateFormat;
24
24
  * Module dependencies.
25
25
  */
26
26
 
27
- var debug = require('debug')('connect:couchbase');
27
+ // #B10 fix: require debug from project node_modules — same pattern as couchbase/index.js for the couchbase module itself.
28
+ // Plain require('debug') fails when loaded from within gina's framework path.
29
+ var debug = require(_(getPath('project') + '/node_modules/debug'))('connect:couchbase');
28
30
 
29
31
  /**
30
32
  * One day in seconds.