gina 0.4.5 → 0.4.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (475) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/CONTRIBUTING.md +2 -2
  3. package/README.md +10 -8
  4. package/ROADMAP.md +2 -2
  5. package/framework/v0.4.6/VERSION +1 -0
  6. package/framework/v0.4.6/core/asset/plugin/dist/vendor/gina/css/gina.min.css +1 -0
  7. package/framework/v0.4.6/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
  8. package/framework/v0.4.6/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
  9. package/framework/{v0.4.5 → v0.4.6}/core/asset/plugin/dist/vendor/gina/inspector/inspector.js +62 -0
  10. package/framework/{v0.4.5 → v0.4.6}/core/asset/plugin/dist/vendor/gina/js/gina.js +934 -42
  11. package/framework/v0.4.6/core/asset/plugin/dist/vendor/gina/js/gina.min.js +571 -0
  12. package/framework/v0.4.6/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
  13. package/framework/v0.4.6/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
  14. package/framework/{v0.4.5 → v0.4.6}/core/controller/controller.js +62 -6
  15. package/framework/v0.4.6/core/controller/controller.render-nunjucks-async.js +788 -0
  16. package/framework/v0.4.6/core/controller/controller.render-swig-async.js +664 -0
  17. package/framework/{v0.4.5 → v0.4.6}/core/controller/controller.render-swig.js +52 -5
  18. package/framework/{v0.4.5 → v0.4.6}/core/gna.js +24 -0
  19. package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/csp/README.md +35 -0
  20. package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/csp/src/main.js +136 -2
  21. package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/storage/package.json +0 -3
  22. package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/validator/package.json +0 -3
  23. package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/validator/src/main.js +17 -4
  24. package/framework/{v0.4.5 → v0.4.6}/core/server.isaac.js +2 -2
  25. package/framework/{v0.4.5 → v0.4.6}/core/server.js +273 -97
  26. package/framework/{v0.4.5 → v0.4.6}/helpers/data/package.json +0 -3
  27. package/framework/{v0.4.5 → v0.4.6}/helpers/data/src/main.js +58 -3
  28. package/framework/{v0.4.5 → v0.4.6}/helpers/json/package.json +0 -3
  29. package/framework/{v0.4.5 → v0.4.6}/helpers/plugins/package.json +0 -3
  30. package/framework/{v0.4.5 → v0.4.6}/lib/archiver/package.json +0 -3
  31. package/framework/{v0.4.5 → v0.4.6}/lib/cache/package.json +0 -3
  32. package/framework/{v0.4.5 → v0.4.6}/lib/cmd/framework/link.js +16 -5
  33. package/framework/{v0.4.5 → v0.4.6}/lib/cmd/framework/msg.json +1 -1
  34. package/framework/{v0.4.5 → v0.4.6}/lib/cmd/framework/restart.js +11 -3
  35. package/framework/{v0.4.5 → v0.4.6}/lib/cmd/framework/start.js +5 -1
  36. package/framework/{v0.4.5 → v0.4.6}/lib/cmd/framework/version.js +24 -3
  37. package/framework/{v0.4.5 → v0.4.6}/lib/cmd/helper.js +28 -9
  38. package/framework/{v0.4.5 → v0.4.6}/lib/cmd/project/add.js +29 -13
  39. package/framework/{v0.4.5 → v0.4.6}/lib/collection/package.json +0 -3
  40. package/framework/{v0.4.5 → v0.4.6}/lib/cron/package.json +0 -3
  41. package/framework/{v0.4.5 → v0.4.6}/lib/domain/package.json +0 -3
  42. package/framework/{v0.4.5 → v0.4.6}/lib/index.js +7 -0
  43. package/framework/{v0.4.5 → v0.4.6}/lib/inherits/package.json +0 -3
  44. package/framework/{v0.4.5 → v0.4.6}/lib/logger/package.json +0 -3
  45. package/framework/{v0.4.5 → v0.4.6}/lib/merge/package.json +0 -3
  46. package/framework/{v0.4.5 → v0.4.6}/lib/model.js +17 -0
  47. package/framework/{v0.4.5 → v0.4.6}/lib/nunjucks-filters/src/main.js +37 -11
  48. package/framework/{v0.4.5 → v0.4.6}/lib/routing/package.json +0 -3
  49. package/framework/{v0.4.5 → v0.4.6}/lib/routing/src/main.js +4 -4
  50. package/framework/{v0.4.5 → v0.4.6}/lib/swig-filters/package.json +0 -3
  51. package/framework/{v0.4.5 → v0.4.6}/lib/swig-filters/src/main.js +45 -6
  52. package/framework/v0.4.6/lib/template-loaders/package.json +17 -0
  53. package/framework/v0.4.6/lib/template-loaders/src/loaders/http.js +272 -0
  54. package/framework/v0.4.6/lib/template-loaders/src/loaders/memory.js +75 -0
  55. package/framework/v0.4.6/lib/template-loaders/src/main.js +134 -0
  56. package/framework/{v0.4.5 → v0.4.6}/package.json +2 -2
  57. package/gna.js +4 -4
  58. package/llms.txt +32 -44
  59. package/package.json +6 -3
  60. package/playwright.config.js +35 -0
  61. package/schema/settings.json +105 -0
  62. package/types/gna.d.ts +1 -1
  63. package/framework/v0.4.5/VERSION +0 -1
  64. package/framework/v0.4.5/core/asset/plugin/dist/vendor/gina/css/gina.min.css +0 -1
  65. package/framework/v0.4.5/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
  66. package/framework/v0.4.5/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
  67. package/framework/v0.4.5/core/asset/plugin/dist/vendor/gina/js/gina.min.js +0 -555
  68. package/framework/v0.4.5/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
  69. package/framework/v0.4.5/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
  70. /package/framework/{v0.4.5 → v0.4.6}/AUTHORS +0 -0
  71. /package/framework/{v0.4.5 → v0.4.6}/LICENSE +0 -0
  72. /package/framework/{v0.4.5 → v0.4.6}/core/asset/html/nolayout.html +0 -0
  73. /package/framework/{v0.4.5 → v0.4.6}/core/asset/html/static.html +0 -0
  74. /package/framework/{v0.4.5 → v0.4.6}/core/asset/img/android-chrome-192x192.png +0 -0
  75. /package/framework/{v0.4.5 → v0.4.6}/core/asset/img/android-chrome-512x512.png +0 -0
  76. /package/framework/{v0.4.5 → v0.4.6}/core/asset/img/apple-touch-icon.png +0 -0
  77. /package/framework/{v0.4.5 → v0.4.6}/core/asset/img/favicon-16x16.png +0 -0
  78. /package/framework/{v0.4.5 → v0.4.6}/core/asset/img/favicon-32x32.png +0 -0
  79. /package/framework/{v0.4.5 → v0.4.6}/core/asset/img/favicon.ico +0 -0
  80. /package/framework/{v0.4.5 → v0.4.6}/core/asset/plugin/README.md +0 -0
  81. /package/framework/{v0.4.5 → v0.4.6}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.css +0 -0
  82. /package/framework/{v0.4.5 → v0.4.6}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.js +0 -0
  83. /package/framework/{v0.4.5 → v0.4.6}/core/asset/plugin/dist/vendor/gina/beemaster/index.html +0 -0
  84. /package/framework/{v0.4.5 → v0.4.6}/core/asset/plugin/dist/vendor/gina/html/statusbar.html +0 -0
  85. /package/framework/{v0.4.5 → v0.4.6}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.br +0 -0
  86. /package/framework/{v0.4.5 → v0.4.6}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.gz +0 -0
  87. /package/framework/{v0.4.5 → v0.4.6}/core/asset/plugin/dist/vendor/gina/inspector/have_heart_one-webfont.woff2 +0 -0
  88. /package/framework/{v0.4.5 → v0.4.6}/core/asset/plugin/dist/vendor/gina/inspector/index.html +0 -0
  89. /package/framework/{v0.4.5 → v0.4.6}/core/asset/plugin/dist/vendor/gina/inspector/inspector.css +0 -0
  90. /package/framework/{v0.4.5 → v0.4.6}/core/asset/plugin/dist/vendor/gina/inspector/logo.svg +0 -0
  91. /package/framework/{v0.4.5 → v0.4.6}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +0 -0
  92. /package/framework/{v0.4.5 → v0.4.6}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.br +0 -0
  93. /package/framework/{v0.4.5 → v0.4.6}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.gz +0 -0
  94. /package/framework/{v0.4.5 → v0.4.6}/core/config.js +0 -0
  95. /package/framework/{v0.4.5 → v0.4.6}/core/connectors/ai/index.js +0 -0
  96. /package/framework/{v0.4.5 → v0.4.6}/core/connectors/ai/lib/connector.js +0 -0
  97. /package/framework/{v0.4.5 → v0.4.6}/core/connectors/couchbase/index.js +0 -0
  98. /package/framework/{v0.4.5 → v0.4.6}/core/connectors/couchbase/lib/connector.js +0 -0
  99. /package/framework/{v0.4.5 → v0.4.6}/core/connectors/couchbase/lib/connector.v3.js +0 -0
  100. /package/framework/{v0.4.5 → v0.4.6}/core/connectors/couchbase/lib/connector.v4.js +0 -0
  101. /package/framework/{v0.4.5 → v0.4.6}/core/connectors/couchbase/lib/n1ql.js +0 -0
  102. /package/framework/{v0.4.5 → v0.4.6}/core/connectors/couchbase/lib/session-store.js +0 -0
  103. /package/framework/{v0.4.5 → v0.4.6}/core/connectors/couchbase/lib/session-store.v3.js +0 -0
  104. /package/framework/{v0.4.5 → v0.4.6}/core/connectors/couchbase/lib/session-store.v4.js +0 -0
  105. /package/framework/{v0.4.5 → v0.4.6}/core/connectors/mongodb/index.js +0 -0
  106. /package/framework/{v0.4.5 → v0.4.6}/core/connectors/mongodb/lib/connector.js +0 -0
  107. /package/framework/{v0.4.5 → v0.4.6}/core/connectors/mongodb/lib/pipeline-loader.js +0 -0
  108. /package/framework/{v0.4.5 → v0.4.6}/core/connectors/mongodb/lib/session-store.js +0 -0
  109. /package/framework/{v0.4.5 → v0.4.6}/core/connectors/mysql/index.js +0 -0
  110. /package/framework/{v0.4.5 → v0.4.6}/core/connectors/mysql/lib/connector.js +0 -0
  111. /package/framework/{v0.4.5 → v0.4.6}/core/connectors/postgresql/index.js +0 -0
  112. /package/framework/{v0.4.5 → v0.4.6}/core/connectors/postgresql/lib/connector.js +0 -0
  113. /package/framework/{v0.4.5 → v0.4.6}/core/connectors/redis/index.js +0 -0
  114. /package/framework/{v0.4.5 → v0.4.6}/core/connectors/redis/lib/session-store.js +0 -0
  115. /package/framework/{v0.4.5 → v0.4.6}/core/connectors/scylladb/index.js +0 -0
  116. /package/framework/{v0.4.5 → v0.4.6}/core/connectors/scylladb/lib/connector.js +0 -0
  117. /package/framework/{v0.4.5 → v0.4.6}/core/connectors/scylladb/lib/session-store.js +0 -0
  118. /package/framework/{v0.4.5 → v0.4.6}/core/connectors/sql-parser.js +0 -0
  119. /package/framework/{v0.4.5 → v0.4.6}/core/connectors/sqlite/index.js +0 -0
  120. /package/framework/{v0.4.5 → v0.4.6}/core/connectors/sqlite/lib/connector.js +0 -0
  121. /package/framework/{v0.4.5 → v0.4.6}/core/connectors/sqlite/lib/session-store.js +0 -0
  122. /package/framework/{v0.4.5 → v0.4.6}/core/content.encoding +0 -0
  123. /package/framework/{v0.4.5 → v0.4.6}/core/controller/controller.framework.js +0 -0
  124. /package/framework/{v0.4.5 → v0.4.6}/core/controller/controller.render-json.js +0 -0
  125. /package/framework/{v0.4.5 → v0.4.6}/core/controller/controller.render-nunjucks.js +0 -0
  126. /package/framework/{v0.4.5 → v0.4.6}/core/controller/controller.render-stream.js +0 -0
  127. /package/framework/{v0.4.5 → v0.4.6}/core/controller/controller.render-v1.js +0 -0
  128. /package/framework/{v0.4.5 → v0.4.6}/core/controller/index.js +0 -0
  129. /package/framework/{v0.4.5 → v0.4.6}/core/controller/inspector-window-emit.js +0 -0
  130. /package/framework/{v0.4.5 → v0.4.6}/core/deps/busboy-1.6.0/LICENSE +0 -0
  131. /package/framework/{v0.4.5 → v0.4.6}/core/deps/busboy-1.6.0/README.md +0 -0
  132. /package/framework/{v0.4.5 → v0.4.6}/core/deps/busboy-1.6.0/lib/index.js +0 -0
  133. /package/framework/{v0.4.5 → v0.4.6}/core/deps/busboy-1.6.0/lib/types/multipart.js +0 -0
  134. /package/framework/{v0.4.5 → v0.4.6}/core/deps/busboy-1.6.0/lib/types/urlencoded.js +0 -0
  135. /package/framework/{v0.4.5 → v0.4.6}/core/deps/busboy-1.6.0/lib/utils.js +0 -0
  136. /package/framework/{v0.4.5 → v0.4.6}/core/deps/busboy-1.6.0/package.json +0 -0
  137. /package/framework/{v0.4.5 → v0.4.6}/core/deps/streamsearch-1.1.0/LICENSE +0 -0
  138. /package/framework/{v0.4.5 → v0.4.6}/core/deps/streamsearch-1.1.0/lib/sbmh.js +0 -0
  139. /package/framework/{v0.4.5 → v0.4.6}/core/deps/streamsearch-1.1.0/package.json +0 -0
  140. /package/framework/{v0.4.5 → v0.4.6}/core/dev/index.js +0 -0
  141. /package/framework/{v0.4.5 → v0.4.6}/core/dev/lib/class.js +0 -0
  142. /package/framework/{v0.4.5 → v0.4.6}/core/dev/lib/factory.js +0 -0
  143. /package/framework/{v0.4.5 → v0.4.6}/core/dev/lib/tools.js +0 -0
  144. /package/framework/{v0.4.5 → v0.4.6}/core/locales/README.md +0 -0
  145. /package/framework/{v0.4.5 → v0.4.6}/core/locales/currency.json +0 -0
  146. /package/framework/{v0.4.5 → v0.4.6}/core/locales/dist/language/en.json +0 -0
  147. /package/framework/{v0.4.5 → v0.4.6}/core/locales/dist/language/fr.json +0 -0
  148. /package/framework/{v0.4.5 → v0.4.6}/core/locales/dist/region/en.json +0 -0
  149. /package/framework/{v0.4.5 → v0.4.6}/core/locales/dist/region/fr.json +0 -0
  150. /package/framework/{v0.4.5 → v0.4.6}/core/locales/index.js +0 -0
  151. /package/framework/{v0.4.5 → v0.4.6}/core/mime.types +0 -0
  152. /package/framework/{v0.4.5 → v0.4.6}/core/model/entity.js +0 -0
  153. /package/framework/{v0.4.5 → v0.4.6}/core/model/index.js +0 -0
  154. /package/framework/{v0.4.5 → v0.4.6}/core/model/template/entityFactory.js +0 -0
  155. /package/framework/{v0.4.5 → v0.4.6}/core/model/template/index.js +0 -0
  156. /package/framework/{v0.4.5 → v0.4.6}/core/plugins/README.md +0 -0
  157. /package/framework/{v0.4.5 → v0.4.6}/core/plugins/index.js +0 -0
  158. /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/csrf/README.md +0 -0
  159. /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/csrf/package.json +0 -0
  160. /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/csrf/src/main.js +0 -0
  161. /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/README.md +0 -0
  162. /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/coep/README.md +0 -0
  163. /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/coep/package.json +0 -0
  164. /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/coep/src/main.js +0 -0
  165. /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/coop/README.md +0 -0
  166. /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/coop/package.json +0 -0
  167. /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/coop/src/main.js +0 -0
  168. /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/corp/README.md +0 -0
  169. /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/corp/package.json +0 -0
  170. /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/corp/src/main.js +0 -0
  171. /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/csp/package.json +0 -0
  172. /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/hide-powered-by/README.md +0 -0
  173. /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/hide-powered-by/package.json +0 -0
  174. /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/hide-powered-by/src/main.js +0 -0
  175. /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/hsts/README.md +0 -0
  176. /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/hsts/package.json +0 -0
  177. /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/hsts/src/main.js +0 -0
  178. /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/origin-agent-cluster/README.md +0 -0
  179. /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/origin-agent-cluster/package.json +0 -0
  180. /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/origin-agent-cluster/src/main.js +0 -0
  181. /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/package.json +0 -0
  182. /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/referrer-policy/README.md +0 -0
  183. /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/referrer-policy/package.json +0 -0
  184. /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/referrer-policy/src/main.js +0 -0
  185. /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/src/main.js +0 -0
  186. /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/x-content-type-options/README.md +0 -0
  187. /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/x-content-type-options/package.json +0 -0
  188. /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/x-content-type-options/src/main.js +0 -0
  189. /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/x-dns-prefetch-control/README.md +0 -0
  190. /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/x-dns-prefetch-control/package.json +0 -0
  191. /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/x-dns-prefetch-control/src/main.js +0 -0
  192. /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/x-download-options/README.md +0 -0
  193. /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/x-download-options/package.json +0 -0
  194. /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/x-download-options/src/main.js +0 -0
  195. /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/x-frame-options/README.md +0 -0
  196. /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/x-frame-options/package.json +0 -0
  197. /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/x-frame-options/src/main.js +0 -0
  198. /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/README.md +0 -0
  199. /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/package.json +0 -0
  200. /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/src/main.js +0 -0
  201. /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/x-xss-protection/README.md +0 -0
  202. /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/x-xss-protection/package.json +0 -0
  203. /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/x-xss-protection/src/main.js +0 -0
  204. /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/session/README.md +0 -0
  205. /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/session/package.json +0 -0
  206. /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/session/src/main.js +0 -0
  207. /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/storage/README.md +0 -0
  208. /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/storage/build.json +0 -0
  209. /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/storage/src/main.js +0 -0
  210. /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/validator/README.md +0 -0
  211. /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/validator/build.json +0 -0
  212. /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/validator/src/form-validator.js +0 -0
  213. /package/framework/{v0.4.5 → v0.4.6}/core/router.js +0 -0
  214. /package/framework/{v0.4.5 → v0.4.6}/core/server.express.js +0 -0
  215. /package/framework/{v0.4.5 → v0.4.6}/core/status.codes +0 -0
  216. /package/framework/{v0.4.5 → v0.4.6}/core/template/_gitignore +0 -0
  217. /package/framework/{v0.4.5 → v0.4.6}/core/template/boilerplate/bundle/config/app.json +0 -0
  218. /package/framework/{v0.4.5 → v0.4.6}/core/template/boilerplate/bundle/config/connectors.json +0 -0
  219. /package/framework/{v0.4.5 → v0.4.6}/core/template/boilerplate/bundle/config/routing.json +0 -0
  220. /package/framework/{v0.4.5 → v0.4.6}/core/template/boilerplate/bundle/config/settings.json +0 -0
  221. /package/framework/{v0.4.5 → v0.4.6}/core/template/boilerplate/bundle/config/settings.server.json +0 -0
  222. /package/framework/{v0.4.5 → v0.4.6}/core/template/boilerplate/bundle/config/templates.json +0 -0
  223. /package/framework/{v0.4.5 → v0.4.6}/core/template/boilerplate/bundle/config/watchers.json +0 -0
  224. /package/framework/{v0.4.5 → v0.4.6}/core/template/boilerplate/bundle/controllers/controller.content.js +0 -0
  225. /package/framework/{v0.4.5 → v0.4.6}/core/template/boilerplate/bundle/controllers/controller.js +0 -0
  226. /package/framework/{v0.4.5 → v0.4.6}/core/template/boilerplate/bundle/controllers/setup.js +0 -0
  227. /package/framework/{v0.4.5 → v0.4.6}/core/template/boilerplate/bundle/index.js +0 -0
  228. /package/framework/{v0.4.5 → v0.4.6}/core/template/boilerplate/bundle/locales/en.json +0 -0
  229. /package/framework/{v0.4.5 → v0.4.6}/core/template/boilerplate/bundle_namespace/controllers/controller.js +0 -0
  230. /package/framework/{v0.4.5 → v0.4.6}/core/template/boilerplate/bundle_public/css/default.css +0 -0
  231. /package/framework/{v0.4.5 → v0.4.6}/core/template/boilerplate/bundle_public/css/home.css +0 -0
  232. /package/framework/{v0.4.5 → v0.4.6}/core/template/boilerplate/bundle_public/css/vendor/readme.md +0 -0
  233. /package/framework/{v0.4.5 → v0.4.6}/core/template/boilerplate/bundle_public/favicon.ico +0 -0
  234. /package/framework/{v0.4.5 → v0.4.6}/core/template/boilerplate/bundle_public/js/vendor/readme.md +0 -0
  235. /package/framework/{v0.4.5 → v0.4.6}/core/template/boilerplate/bundle_public/manifest.webmanifest +0 -0
  236. /package/framework/{v0.4.5 → v0.4.6}/core/template/boilerplate/bundle_public/readme.md +0 -0
  237. /package/framework/{v0.4.5 → v0.4.6}/core/template/boilerplate/bundle_public/sw.js +0 -0
  238. /package/framework/{v0.4.5 → v0.4.6}/core/template/boilerplate/bundle_templates/handlers/main.js +0 -0
  239. /package/framework/{v0.4.5 → v0.4.6}/core/template/boilerplate/bundle_templates/html/content/homepage.html +0 -0
  240. /package/framework/{v0.4.5 → v0.4.6}/core/template/boilerplate/bundle_templates/html/includes/error-msg-noscript.html +0 -0
  241. /package/framework/{v0.4.5 → v0.4.6}/core/template/boilerplate/bundle_templates/html/includes/error-msg-outdated-browser.html +0 -0
  242. /package/framework/{v0.4.5 → v0.4.6}/core/template/boilerplate/bundle_templates/html/layouts/main.html +0 -0
  243. /package/framework/{v0.4.5 → v0.4.6}/core/template/command/gina.bat.tpl +0 -0
  244. /package/framework/{v0.4.5 → v0.4.6}/core/template/command/gina.tpl +0 -0
  245. /package/framework/{v0.4.5 → v0.4.6}/core/template/conf/env.json +0 -0
  246. /package/framework/{v0.4.5 → v0.4.6}/core/template/conf/manifest.json +0 -0
  247. /package/framework/{v0.4.5 → v0.4.6}/core/template/conf/package.json +0 -0
  248. /package/framework/{v0.4.5 → v0.4.6}/core/template/conf/settings.json +0 -0
  249. /package/framework/{v0.4.5 → v0.4.6}/core/template/conf/statics.json +0 -0
  250. /package/framework/{v0.4.5 → v0.4.6}/core/template/conf/templates.json +0 -0
  251. /package/framework/{v0.4.5 → v0.4.6}/core/template/error/client/json/401.json +0 -0
  252. /package/framework/{v0.4.5 → v0.4.6}/core/template/error/client/json/403.json +0 -0
  253. /package/framework/{v0.4.5 → v0.4.6}/core/template/error/client/json/404.json +0 -0
  254. /package/framework/{v0.4.5 → v0.4.6}/core/template/error/server/html/50x.html +0 -0
  255. /package/framework/{v0.4.5 → v0.4.6}/core/template/error/server/json/500.json +0 -0
  256. /package/framework/{v0.4.5 → v0.4.6}/core/template/error/server/json/503.json +0 -0
  257. /package/framework/{v0.4.5 → v0.4.6}/core/template/extensions/logger/config.json +0 -0
  258. /package/framework/{v0.4.5 → v0.4.6}/helpers/console.js +0 -0
  259. /package/framework/{v0.4.5 → v0.4.6}/helpers/context.js +0 -0
  260. /package/framework/{v0.4.5 → v0.4.6}/helpers/data/LICENSE +0 -0
  261. /package/framework/{v0.4.5 → v0.4.6}/helpers/data/README.md +0 -0
  262. /package/framework/{v0.4.5 → v0.4.6}/helpers/dateFormat.js +0 -0
  263. /package/framework/{v0.4.5 → v0.4.6}/helpers/index.js +0 -0
  264. /package/framework/{v0.4.5 → v0.4.6}/helpers/json/LICENSE +0 -0
  265. /package/framework/{v0.4.5 → v0.4.6}/helpers/json/README.md +0 -0
  266. /package/framework/{v0.4.5 → v0.4.6}/helpers/json/src/main.js +0 -0
  267. /package/framework/{v0.4.5 → v0.4.6}/helpers/path.js +0 -0
  268. /package/framework/{v0.4.5 → v0.4.6}/helpers/plugins/README.md +0 -0
  269. /package/framework/{v0.4.5 → v0.4.6}/helpers/plugins/src/api-error.js +0 -0
  270. /package/framework/{v0.4.5 → v0.4.6}/helpers/plugins/src/main.js +0 -0
  271. /package/framework/{v0.4.5 → v0.4.6}/helpers/prototypes.js +0 -0
  272. /package/framework/{v0.4.5 → v0.4.6}/helpers/task.js +0 -0
  273. /package/framework/{v0.4.5 → v0.4.6}/helpers/text.js +0 -0
  274. /package/framework/{v0.4.5 → v0.4.6}/lib/archiver/README.md +0 -0
  275. /package/framework/{v0.4.5 → v0.4.6}/lib/archiver/build.json +0 -0
  276. /package/framework/{v0.4.5 → v0.4.6}/lib/archiver/src/dep/jszip.min.js +0 -0
  277. /package/framework/{v0.4.5 → v0.4.6}/lib/archiver/src/main.js +0 -0
  278. /package/framework/{v0.4.5 → v0.4.6}/lib/async/package.json +0 -0
  279. /package/framework/{v0.4.5 → v0.4.6}/lib/async/src/main.js +0 -0
  280. /package/framework/{v0.4.5 → v0.4.6}/lib/cache/README.md +0 -0
  281. /package/framework/{v0.4.5 → v0.4.6}/lib/cache/build.json +0 -0
  282. /package/framework/{v0.4.5 → v0.4.6}/lib/cache/src/main.js +0 -0
  283. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/aliases.json +0 -0
  284. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/bundle/add.js +0 -0
  285. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/bundle/arguments.json +0 -0
  286. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/bundle/build.js +0 -0
  287. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/bundle/copy.js +0 -0
  288. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/bundle/cp.js +0 -0
  289. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/bundle/help.js +0 -0
  290. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/bundle/help.txt +0 -0
  291. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/bundle/inc/name-rewrite.js +0 -0
  292. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/bundle/list.js +0 -0
  293. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/bundle/mcp-start.js +0 -0
  294. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/bundle/mcp.js +0 -0
  295. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/bundle/oas.js +0 -0
  296. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/bundle/openapi.js +0 -0
  297. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/bundle/remove.js +0 -0
  298. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/bundle/rename.js +0 -0
  299. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/bundle/restart.js +0 -0
  300. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/bundle/rm.js +0 -0
  301. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/bundle/start.js +0 -0
  302. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/bundle/status.js +0 -0
  303. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/bundle/stop.js +0 -0
  304. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/cache/stats.js +0 -0
  305. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/connector/add.js +0 -0
  306. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/connector/arguments.json +0 -0
  307. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/connector/help.js +0 -0
  308. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/connector/help.txt +0 -0
  309. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/connector/list.js +0 -0
  310. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/connector/migrate.js +0 -0
  311. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/connector/remove.js +0 -0
  312. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/connector/rm.js +0 -0
  313. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/env/add.js +0 -0
  314. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/env/get.js +0 -0
  315. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/env/help.js +0 -0
  316. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/env/help.txt +0 -0
  317. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/env/link-dev.js +0 -0
  318. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/env/list.js +0 -0
  319. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/env/remove.js +0 -0
  320. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/env/rm.js +0 -0
  321. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/env/set.js +0 -0
  322. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/env/unset.js +0 -0
  323. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/env/use.js +0 -0
  324. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/framework/arguments.json +0 -0
  325. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/framework/build.js +0 -0
  326. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/framework/dot.js +0 -0
  327. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/framework/get.js +0 -0
  328. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/framework/help.js +0 -0
  329. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/framework/help.txt +0 -0
  330. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/framework/init.js +0 -0
  331. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/framework/link-node-modules.js +0 -0
  332. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/framework/open.js +0 -0
  333. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/framework/set.js +0 -0
  334. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/framework/status.js +0 -0
  335. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/framework/stop.js +0 -0
  336. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/framework/tail.js +0 -0
  337. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/framework/update.js +0 -0
  338. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/gina-dev.1.md +0 -0
  339. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/gina-framework.1.md +0 -0
  340. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/gina.1.md +0 -0
  341. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/i18n/add.js +0 -0
  342. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/i18n/arguments.json +0 -0
  343. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/i18n/export.js +0 -0
  344. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/i18n/help.js +0 -0
  345. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/i18n/help.txt +0 -0
  346. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/i18n/import.js +0 -0
  347. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/i18n/scan.js +0 -0
  348. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/index.js +0 -0
  349. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/inspector/help.js +0 -0
  350. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/inspector/help.txt +0 -0
  351. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/inspector/open.js +0 -0
  352. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/minion/arguments.json +0 -0
  353. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/minion/help.js +0 -0
  354. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/minion/help.txt +0 -0
  355. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/minion/kill.js +0 -0
  356. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/minion/list.js +0 -0
  357. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/msg.json +0 -0
  358. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/port/help.js +0 -0
  359. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/port/help.txt +0 -0
  360. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/port/inc/scan.js +0 -0
  361. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/port/list.js +0 -0
  362. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/port/reset.js +0 -0
  363. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/port/set.js +0 -0
  364. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/project/arguments.json +0 -0
  365. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/project/build.js +0 -0
  366. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/project/help.js +0 -0
  367. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/project/help.txt +0 -0
  368. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/project/import.js +0 -0
  369. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/project/list.js +0 -0
  370. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/project/move.js +0 -0
  371. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/project/remove.js +0 -0
  372. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/project/rename.js +0 -0
  373. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/project/restart.js +0 -0
  374. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/project/rm.js +0 -0
  375. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/project/start.js +0 -0
  376. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/project/status.js +0 -0
  377. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/project/stop.js +0 -0
  378. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/protocol/arguments.json +0 -0
  379. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/protocol/help.js +0 -0
  380. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/protocol/help.txt +0 -0
  381. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/protocol/list.js +0 -0
  382. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/protocol/remove.js +0 -0
  383. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/protocol/set.js +0 -0
  384. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/scope/add.js +0 -0
  385. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/scope/help.js +0 -0
  386. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/scope/help.txt +0 -0
  387. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/scope/link-local.js +0 -0
  388. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/scope/link-production.js +0 -0
  389. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/scope/list.js +0 -0
  390. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/scope/remove.js +0 -0
  391. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/scope/rm.js +0 -0
  392. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/scope/use.js +0 -0
  393. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/secrets/arguments.json +0 -0
  394. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/secrets/check.js +0 -0
  395. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/secrets/help.js +0 -0
  396. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/secrets/help.txt +0 -0
  397. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/secrets/scan.js +0 -0
  398. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/service/help.js +0 -0
  399. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/service/help.txt +0 -0
  400. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/service/list.js +0 -0
  401. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/service/start.js +0 -0
  402. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/view/add.js +0 -0
  403. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd-status-format/package.json +0 -0
  404. /package/framework/{v0.4.5 → v0.4.6}/lib/cmd-status-format/src/main.js +0 -0
  405. /package/framework/{v0.4.5 → v0.4.6}/lib/collection/README.md +0 -0
  406. /package/framework/{v0.4.5 → v0.4.6}/lib/collection/build.json +0 -0
  407. /package/framework/{v0.4.5 → v0.4.6}/lib/collection/src/main.js +0 -0
  408. /package/framework/{v0.4.5 → v0.4.6}/lib/config.js +0 -0
  409. /package/framework/{v0.4.5 → v0.4.6}/lib/connector-registry/package.json +0 -0
  410. /package/framework/{v0.4.5 → v0.4.6}/lib/connector-registry/src/main.js +0 -0
  411. /package/framework/{v0.4.5 → v0.4.6}/lib/cron/README.md +0 -0
  412. /package/framework/{v0.4.5 → v0.4.6}/lib/cron/src/main.js +0 -0
  413. /package/framework/{v0.4.5 → v0.4.6}/lib/domain/LICENSE +0 -0
  414. /package/framework/{v0.4.5 → v0.4.6}/lib/domain/README.md +0 -0
  415. /package/framework/{v0.4.5 → v0.4.6}/lib/domain/src/main.js +0 -0
  416. /package/framework/{v0.4.5 → v0.4.6}/lib/generator/index.js +0 -0
  417. /package/framework/{v0.4.5 → v0.4.6}/lib/i18n/package.json +0 -0
  418. /package/framework/{v0.4.5 → v0.4.6}/lib/i18n/src/main.js +0 -0
  419. /package/framework/{v0.4.5 → v0.4.6}/lib/inherits/LICENSE +0 -0
  420. /package/framework/{v0.4.5 → v0.4.6}/lib/inherits/README.md +0 -0
  421. /package/framework/{v0.4.5 → v0.4.6}/lib/inherits/src/main.js +0 -0
  422. /package/framework/{v0.4.5 → v0.4.6}/lib/inspector-redact/package.json +0 -0
  423. /package/framework/{v0.4.5 → v0.4.6}/lib/inspector-redact/src/main.js +0 -0
  424. /package/framework/{v0.4.5 → v0.4.6}/lib/instrument/package.json +0 -0
  425. /package/framework/{v0.4.5 → v0.4.6}/lib/instrument/src/main.js +0 -0
  426. /package/framework/{v0.4.5 → v0.4.6}/lib/job/package.json +0 -0
  427. /package/framework/{v0.4.5 → v0.4.6}/lib/job/src/main.js +0 -0
  428. /package/framework/{v0.4.5 → v0.4.6}/lib/logger/README.md +0 -0
  429. /package/framework/{v0.4.5 → v0.4.6}/lib/logger/src/containers/default/index.js +0 -0
  430. /package/framework/{v0.4.5 → v0.4.6}/lib/logger/src/containers/file/index.js +0 -0
  431. /package/framework/{v0.4.5 → v0.4.6}/lib/logger/src/containers/file/lib/logrotator/README.md +0 -0
  432. /package/framework/{v0.4.5 → v0.4.6}/lib/logger/src/containers/file/lib/logrotator/index.js +0 -0
  433. /package/framework/{v0.4.5 → v0.4.6}/lib/logger/src/containers/mq/index.js +0 -0
  434. /package/framework/{v0.4.5 → v0.4.6}/lib/logger/src/containers/mq/listener.js +0 -0
  435. /package/framework/{v0.4.5 → v0.4.6}/lib/logger/src/containers/mq/speaker.js +0 -0
  436. /package/framework/{v0.4.5 → v0.4.6}/lib/logger/src/helper.js +0 -0
  437. /package/framework/{v0.4.5 → v0.4.6}/lib/logger/src/main.js +0 -0
  438. /package/framework/{v0.4.5 → v0.4.6}/lib/math/index.js +0 -0
  439. /package/framework/{v0.4.5 → v0.4.6}/lib/mcp-dispatch/package.json +0 -0
  440. /package/framework/{v0.4.5 → v0.4.6}/lib/mcp-dispatch/src/main.js +0 -0
  441. /package/framework/{v0.4.5 → v0.4.6}/lib/mcp-http/package.json +0 -0
  442. /package/framework/{v0.4.5 → v0.4.6}/lib/mcp-http/src/main.js +0 -0
  443. /package/framework/{v0.4.5 → v0.4.6}/lib/mcp-server/package.json +0 -0
  444. /package/framework/{v0.4.5 → v0.4.6}/lib/mcp-server/src/main.js +0 -0
  445. /package/framework/{v0.4.5 → v0.4.6}/lib/merge/README.md +0 -0
  446. /package/framework/{v0.4.5 → v0.4.6}/lib/merge/src/main.js +0 -0
  447. /package/framework/{v0.4.5 → v0.4.6}/lib/metrics/package.json +0 -0
  448. /package/framework/{v0.4.5 → v0.4.6}/lib/metrics/src/main.js +0 -0
  449. /package/framework/{v0.4.5 → v0.4.6}/lib/nunjucks-filters/README.md +0 -0
  450. /package/framework/{v0.4.5 → v0.4.6}/lib/nunjucks-filters/package.json +0 -0
  451. /package/framework/{v0.4.5 → v0.4.6}/lib/nunjucks-resolver/package.json +0 -0
  452. /package/framework/{v0.4.5 → v0.4.6}/lib/nunjucks-resolver/src/main.js +0 -0
  453. /package/framework/{v0.4.5 → v0.4.6}/lib/proc.js +0 -0
  454. /package/framework/{v0.4.5 → v0.4.6}/lib/routing/README.md +0 -0
  455. /package/framework/{v0.4.5 → v0.4.6}/lib/routing/build.json +0 -0
  456. /package/framework/{v0.4.5 → v0.4.6}/lib/routing/src/radix.js +0 -0
  457. /package/framework/{v0.4.5 → v0.4.6}/lib/routing-introspect/package.json +0 -0
  458. /package/framework/{v0.4.5 → v0.4.6}/lib/routing-introspect/src/main.js +0 -0
  459. /package/framework/{v0.4.5 → v0.4.6}/lib/secrets/package.json +0 -0
  460. /package/framework/{v0.4.5 → v0.4.6}/lib/secrets/src/backends/env.js +0 -0
  461. /package/framework/{v0.4.5 → v0.4.6}/lib/secrets/src/main.js +0 -0
  462. /package/framework/{v0.4.5 → v0.4.6}/lib/session-store.js +0 -0
  463. /package/framework/{v0.4.5 → v0.4.6}/lib/shell.js +0 -0
  464. /package/framework/{v0.4.5 → v0.4.6}/lib/state.js +0 -0
  465. /package/framework/{v0.4.5 → v0.4.6}/lib/swig-filters/README.md +0 -0
  466. /package/framework/{v0.4.5 → v0.4.6}/lib/swig-resolver/package.json +0 -0
  467. /package/framework/{v0.4.5 → v0.4.6}/lib/swig-resolver/src/main.js +0 -0
  468. /package/framework/{v0.4.5 → v0.4.6}/lib/url/README.md +0 -0
  469. /package/framework/{v0.4.5 → v0.4.6}/lib/url/index.js +0 -0
  470. /package/framework/{v0.4.5 → v0.4.6}/lib/url/routing.json +0 -0
  471. /package/framework/{v0.4.5 → v0.4.6}/lib/uuid/package.json +0 -0
  472. /package/framework/{v0.4.5 → v0.4.6}/lib/uuid/src/main.js +0 -0
  473. /package/framework/{v0.4.5 → v0.4.6}/lib/validator.js +0 -0
  474. /package/framework/{v0.4.5 → v0.4.6}/lib/watcher/package.json +0 -0
  475. /package/framework/{v0.4.5 → v0.4.6}/lib/watcher/src/main.js +0 -0
@@ -0,0 +1,664 @@
1
+ /*
2
+ * This file is part of the gina package.
3
+ * Copyright (c) 2009-2026 Rhinostone <contact@gina.io>
4
+ *
5
+ * For the full copyright and license information, please view the LICENSE
6
+ * file that was distributed with this source code.
7
+ */
8
+
9
+ /**
10
+ * @module controller.render-swig-async
11
+ * @description Render delegate for swig bundles configured with a custom async
12
+ * template loader (`settings.template.swig.loader`). controller.js selects this
13
+ * delegate when `process.gina._swigLoaders[<templateRoot>].loader.async === true`;
14
+ * every other swig bundle keeps the byte-identical filesystem path
15
+ * (controller.render-swig.js).
16
+ *
17
+ * Unlike render-swig.js — which self-reads the template from disk, pre-resolves
18
+ * `{% extends %}`, and compiles a string — this delegate renders through an
19
+ * ISOLATED per-bundle `new swig.Swig({ loader })` instance. swig's async
20
+ * codegen drives `resolve -> load` for the page template AND its whole
21
+ * transitive `extends` / `include` / `import` chain through the custom loader,
22
+ * so templates can live off-disk (remote / CDN / object-storage / in-memory).
23
+ * The per-bundle instance is what keeps multiple bundles in one process from
24
+ * colliding on the swig process-singleton's shared loader (#TPL1).
25
+ *
26
+ * MVP scope (Slice 1): per-bundle engine isolation + loader pipeline + gina
27
+ * filter registration + render + HTTP/1.1 & HTTP/2 send + post-render asset
28
+ * injection — the gina client bundle / CSS / JS are injected via injectAssets()
29
+ * plus the gina-bootstrap whisper pass, mirroring render-nunjucks.js, so an
30
+ * off-disk full page ships the client runtime and is production-usable.
31
+ * Deferred to follow-up slices (mirroring the render-nunjucks N2 -> #NJ
32
+ * build-out): Inspector dev-payload, static HTML cache writes, error-template
33
+ * routing, and Early Hints.
34
+ *
35
+ * #TPL1 Tier-2 (this slice): the gina filters are registered ONCE on the shared
36
+ * per-bundle engine and read per-request context from `process.gina._renderALS`
37
+ * at call time, closing the #B25 cross-request filter-table race; an opt-in
38
+ * (`settings.template.swig.loader.cache`, dev-disabled) compiled-fn memo per
39
+ * template root reintroduces cross-request compile reuse.
40
+ *
41
+ * @package gina.framework
42
+ */
43
+
44
+ const libRef = require('./../../lib') || require.cache[require.resolve('./../../lib')];
45
+ const merge = libRef.merge;
46
+ // Collection — filters the asset list to common-only when rendering without a
47
+ // layout (isWithoutLayout XHR/popin responses), mirroring render-nunjucks.js /
48
+ // render-swig.js. Fetched via the lib registry so dev-mode hot-reload evictions
49
+ // of lib/index.js don't poison the reference across requests.
50
+ const Collection = libRef.Collection;
51
+
52
+ /**
53
+ * Lazily construct the process-wide render-context AsyncLocalStorage, parked on
54
+ * `process.gina` so it survives dev-mode `require.cache` eviction of this
55
+ * delegate (mirrors `process.gina._reqALS` / `_queryALS`). The async delegates
56
+ * wrap their awaited render in
57
+ * `_renderALS.run({ options, isProxyHost, throwError, req, res }, …)` so the
58
+ * once-registered, context-free gina filters (getUrl/getWebroot/t/tIcu) read the
59
+ * right request's context at call time — closing the #B25 shared-filter-table
60
+ * race and enabling a shared engine + compiled-fn cache (#TPL1 Tier-2).
61
+ *
62
+ * @inner
63
+ * @returns {AsyncLocalStorage} the shared render-context store
64
+ */
65
+ function getRenderALS() {
66
+ if (!process.gina._renderALS) {
67
+ var AsyncLocalStorage = require('async_hooks').AsyncLocalStorage;
68
+ process.gina._renderALS = new AsyncLocalStorage();
69
+ }
70
+ return process.gina._renderALS;
71
+ }
72
+
73
+ /**
74
+ * Per-bundle isolated swig engine + compiled-fn cache. Key: the bundle template
75
+ * root. Value: `{ engine, compiled }` — `engine` is a `new swig.Swig({ loader })`
76
+ * instance with its OWN options.loader, cache, filters and tags (so multiple
77
+ * bundles sharing one process never collide on a shared loader, which a
78
+ * per-bundle `swig.setDefaults({ loader })` on the process-singleton would
79
+ * cause); `compiled` is the #TPL1 Tier-2 per-template compiled-fn memo (consulted
80
+ * per render only when the bundle opts into `loader.cache` and not in dev).
81
+ *
82
+ * The gina filters are registered ONCE here (not per request): they are
83
+ * context-free and read per-request context from `process.gina._renderALS` at
84
+ * call time, so the shared filter table can't bleed context across interleaved
85
+ * async renders (#B25).
86
+ *
87
+ * Stored on `process.gina` so it survives dev-mode `refreshCoreDependencies()`
88
+ * evictions of controller.js + this delegate. The whole registry (engines AND
89
+ * their compiled-fn memos) is dropped when the resolved swig MODULE is
90
+ * hot-swapped (`_swigEnginesOwner !== swigMod`) — compiled fns are bound to the
91
+ * module that built them — mirroring render-nunjucks.js `_nunjucksEnvsOwner`.
92
+ *
93
+ * @inner
94
+ * @param {*} swigMod - The resolved swig module (exposes `.Swig`)
95
+ * @param {string} templateRoot - Registry key (bundle template root)
96
+ * @param {object} loader - Guarded async loader (from `process.gina._swigLoaders`)
97
+ * @param {boolean} autoescape - Per-bundle autoescape (captured by initSwigEngine)
98
+ * @param {function} SwigFilters - The SwigFilters factory (from `deps`), registered once
99
+ * @param {function} throwError - `self.throwError`, carried into the filter set
100
+ * @returns {{engine:*, compiled:Map}} The cached-or-built engine + its compiled-fn memo
101
+ */
102
+ function getSwigEngine(swigMod, templateRoot, loader, autoescape, SwigFilters, throwError) {
103
+ if (!process.gina._swigEngines) {
104
+ process.gina._swigEngines = Object.create(null);
105
+ }
106
+ // Drop all cached engines (and their compiled-fn memos) when the swig module
107
+ // was hot-swapped (dev-mode project-swig refresh) — instances and compiled
108
+ // fns are bound to the module that built them.
109
+ if (process.gina._swigEnginesOwner !== swigMod) {
110
+ process.gina._swigEngines = Object.create(null);
111
+ process.gina._swigEnginesOwner = swigMod;
112
+ }
113
+ var key = templateRoot;
114
+ if (!process.gina._swigEngines[key]) {
115
+ var engine = new swigMod.Swig({
116
+ loader: loader,
117
+ autoescape: (autoescape === true),
118
+ // swig forces cache:false for async-compiled templates anyway; the
119
+ // gina Tier-2 compiled-fn reuse is the per-entry `compiled` Map below.
120
+ cache: false
121
+ });
122
+ // #B25 / #TPL1 Tier-2 — register the gina filters ONCE on the shared
123
+ // engine (context-free; per-request context flows via _renderALS).
124
+ registerGinaFilters(engine, SwigFilters, throwError);
125
+ process.gina._swigEngines[key] = {
126
+ engine: engine,
127
+ compiled: new Map()
128
+ };
129
+ }
130
+ return process.gina._swigEngines[key];
131
+ }
132
+
133
+ /**
134
+ * Resolve the loader identifier for the page template, relative to the bundle
135
+ * template root. Same shape as render-nunjucks.js `resolveTemplatePath()`:
136
+ * honours a `self.setTemplate()` override, the namespace sub-directory, and the
137
+ * extension append. No CVE path check here — the loader wrapper guards every
138
+ * `resolve()`.
139
+ *
140
+ * @inner
141
+ * @param {object} data - Template data (`data.page.view.file` / `.ext`)
142
+ * @param {object} localOptions - Controller options (`.namespace`, `._templateOverride`)
143
+ * @returns {string} Loader identifier (path relative to the template root)
144
+ */
145
+ function resolveTemplatePath(data, localOptions) {
146
+ // Runtime override from self.setTemplate(file, ext) fully replaces the
147
+ // rule's default path (no namespace prefixing).
148
+ if (localOptions && localOptions._templateOverride && localOptions._templateOverride.file) {
149
+ var ovFile = localOptions._templateOverride.file;
150
+ var ovExt = localOptions._templateOverride.ext || data.page.view.ext || '';
151
+ if (ovExt && !ovFile.endsWith(ovExt)) { ovFile += ovExt; }
152
+ return ovFile;
153
+ }
154
+
155
+ var file = data.page.view.file;
156
+ var ext = data.page.view.ext || '';
157
+
158
+ if (localOptions.namespace) {
159
+ var effective = file || localOptions.namespace;
160
+ if (effective === localOptions.namespace) { effective = 'index'; }
161
+ // Drop a redundant `<namespace>-` prefix from the file segment so a
162
+ // route named `<namespace>-<action>` resolves to `<namespace>/<action>`.
163
+ var nsPrefix = localOptions.namespace + '-';
164
+ if (effective.length > nsPrefix.length && effective.indexOf(nsPrefix) === 0) {
165
+ effective = effective.substring(nsPrefix.length);
166
+ }
167
+ var rel = localOptions.namespace + '/' + effective;
168
+ if (ext && !rel.endsWith(ext)) { rel += ext; }
169
+ return rel;
170
+ }
171
+
172
+ var relRoot = file;
173
+ if (ext && !relRoot.endsWith(ext)) { relRoot += ext; }
174
+ return relRoot;
175
+ }
176
+
177
+ /**
178
+ * Compute the per-request proxy-host decision from the raw request headers and
179
+ * the resolved bundle options. Extracted so the render path can stash it in the
180
+ * `_renderALS` store (the gina filters read `ctx.isProxyHost` from there).
181
+ * Mirrors the isProxyHost derivation in render-swig.js / render-nunjucks.js.
182
+ *
183
+ * @inner
184
+ * @param {object} req - Request (raw headers)
185
+ * @param {object} localOptions - Controller options (`.conf`, hostname/port)
186
+ * @returns {boolean} true when the request appears to arrive via a reverse proxy
187
+ */
188
+ function computeIsProxyHost(req, localOptions) {
189
+ var localRequestPort = req.headers.port || req.headers[':port'];
190
+ return (
191
+ typeof(req.headers.host) != 'undefined'
192
+ && typeof(localRequestPort) != 'undefined'
193
+ && (localRequestPort === '80' || localRequestPort === '443' || localRequestPort === 80 || localRequestPort === 443)
194
+ && localOptions.conf.server.scheme +'://'+ req.headers.host+':'+ localRequestPort != localOptions.conf.hostname.replace(/\:\d+$/, '') +':'+ localOptions.conf.server.port
195
+ ||
196
+ typeof(req.headers[':authority']) != 'undefined'
197
+ && localOptions.conf.server.scheme +'://'+ req.headers[':authority'] != localOptions.conf.hostname
198
+ ||
199
+ typeof(req.headers.host) != 'undefined'
200
+ && typeof(localRequestPort) != 'undefined'
201
+ && (localRequestPort === '80' || localRequestPort === '443' || localRequestPort === 80 || localRequestPort === 443)
202
+ && req.headers.host == localOptions.conf.host
203
+ ||
204
+ typeof(req.headers['x-nginx-proxy']) != 'undefined'
205
+ && String(req.headers['x-nginx-proxy']).toLowerCase() === 'true'
206
+ ||
207
+ typeof(process.gina) != 'undefined' && typeof(process.gina.PROXY_HOSTNAME) != 'undefined'
208
+ ) ? true : false;
209
+ }
210
+
211
+ /**
212
+ * Register gina's SwigFilters on the shared per-bundle engine, ONCE (not per
213
+ * request). The filters are context-free: getUrl / getWebroot / t / tIcu read
214
+ * per-request context from `process.gina._renderALS` at call time, so a single
215
+ * shared filter table can't bleed one request's context into another's
216
+ * interleaved async render (#B25). The build-time conf is therefore empty —
217
+ * everything flows through the ALS store stamped by the render `.run()` wrap.
218
+ *
219
+ * @inner
220
+ * @param {*} engine - The per-bundle swig engine instance
221
+ * @param {function} SwigFilters - The SwigFilters factory (from `deps`)
222
+ * @param {function} throwError - `self.throwError`, carried for the singleton-fallback path
223
+ * @returns {void}
224
+ */
225
+ function registerGinaFilters(engine, SwigFilters, throwError) {
226
+ var filters = SwigFilters({ options: {}, isProxyHost: false, throwError: throwError });
227
+
228
+ for (var name in filters) {
229
+ if (typeof filters[name] === 'function' && name !== 'getConfig') {
230
+ engine.setFilter(name, filters[name]);
231
+ }
232
+ }
233
+ }
234
+
235
+ /**
236
+ * Send the rendered HTML, covering HEAD + HTTP/2 stream + HTTP/1.1 in the
237
+ * four-way branch from class.controller.md §7b. Ported verbatim from
238
+ * render-nunjucks.js `sendHtmlResponse()` (the proven separate-delegate send).
239
+ *
240
+ * @inner
241
+ * @param {object} local - Per-request closure (for `_trailers`)
242
+ * @param {string} html - Final HTML string
243
+ * @param {object} req - Request (captured)
244
+ * @param {object} res - Response (captured)
245
+ * @returns {void}
246
+ */
247
+ function sendHtmlResponse(local, html, req, res) {
248
+ if (res.headersSent) { return; }
249
+
250
+ var statusCode = res.statusCode || 200;
251
+ var stream = (res && typeof res.stream !== 'undefined') ? res.stream : null;
252
+ var isHead = /^HEAD$/i.test(req.method);
253
+ // #H10 — opt-in HTTP/2 response trailers (registered via self.sendTrailers()).
254
+ var _trailers = (local && local._trailers && typeof(local._trailers) === 'object') ? local._trailers : null;
255
+ var byteLength = Buffer.byteLength(html, 'utf8');
256
+
257
+ if (!res.getHeader('content-type')) {
258
+ res.setHeader('content-type', 'text/html; charset=utf-8');
259
+ }
260
+
261
+ if (isHead) {
262
+ if (stream) {
263
+ // Case 1: HEAD + HTTP/2
264
+ if (stream.destroyed || stream.closed) {
265
+ try { console.warn('[render-swig-async] stream already destroyed on HEAD — client disconnected ('+ req.url +')'); } catch (e) {}
266
+ return;
267
+ }
268
+ if (!stream.headersSent) {
269
+ var _headH2 = {
270
+ 'content-type': res.getHeader('content-type'),
271
+ 'content-length': byteLength,
272
+ ':status': statusCode
273
+ };
274
+ var _pendingHeadH2 = res.getHeaders ? res.getHeaders() : {};
275
+ for (var _hh2k in _pendingHeadH2) {
276
+ if (!(_hh2k in _headH2)) { _headH2[_hh2k] = _pendingHeadH2[_hh2k]; }
277
+ }
278
+ stream.respond(_headH2);
279
+ }
280
+ stream.end();
281
+ res.headersSent = true;
282
+ } else {
283
+ // Case 2: HEAD + HTTP/1.1
284
+ res.setHeader('content-length', byteLength);
285
+ res.writeHead(statusCode);
286
+ res.end();
287
+ }
288
+ return;
289
+ }
290
+
291
+ if (stream) {
292
+ // Case 3: body + HTTP/2
293
+ if (stream.destroyed || stream.closed) {
294
+ try { console.warn('[render-swig-async] stream already destroyed — client disconnected before response ('+ req.url +')'); } catch (e) {}
295
+ return;
296
+ }
297
+ if (!stream.headersSent) {
298
+ var _streamHeaders = {
299
+ 'content-type': res.getHeader('content-type'),
300
+ ':status': statusCode
301
+ };
302
+ var _pendingHeaders = res.getHeaders ? res.getHeaders() : {};
303
+ for (var _shk in _pendingHeaders) {
304
+ if (!(_shk in _streamHeaders)) { _streamHeaders[_shk] = _pendingHeaders[_shk]; }
305
+ }
306
+ if (_trailers) {
307
+ stream.once('wantTrailers', function() {
308
+ try { if (!stream.destroyed && !stream.closed) stream.sendTrailers(_trailers); } catch (_e) { /* best-effort */ }
309
+ });
310
+ }
311
+ stream.respond(_streamHeaders, _trailers ? { waitForTrailers: true } : undefined);
312
+ }
313
+ stream.end(html);
314
+ res.headersSent = true;
315
+ return;
316
+ }
317
+
318
+ // Case 4: body + HTTP/1.1
319
+ res.writeHead(statusCode);
320
+ res.end(html);
321
+ }
322
+
323
+ /**
324
+ * Post-render asset injection. Inserts the bundle's stylesheets / scripts, the
325
+ * external plugins, and the gina client bootstrap (`gina.onload.min.js`) onto
326
+ * the `</head>` / `</body>` anchors of the rendered HTML. Direct port of
327
+ * render-nunjucks.js `injectAssets()` — the async swig delegate renders through
328
+ * the engine API (no FS `getAssets()` machinery), so it injects post-render the
329
+ * same way the nunjucks delegate does.
330
+ *
331
+ * Honours `javascriptsDeferEnabled` (scripts in `<head>` vs before `</body>`)
332
+ * and `javascriptsExcluded === '**'` (suppresses the bootstrap). Skips any
333
+ * asset already present in the HTML (idempotent) and any fragment missing the
334
+ * `</head>`/`</body>` anchor (HEAD responses, partial renders) — returning the
335
+ * HTML unchanged rather than growing truncated markup.
336
+ *
337
+ * @inner
338
+ * @param {string} html - Rendered HTML from the swig async engine
339
+ * @param {object} data - Template data (`data.page.view.stylesheets`/`.scripts`)
340
+ * @param {object} localOptions - Controller options (`template.ginaLoader`, `.externalPlugins`, …)
341
+ * @param {string} [cspNonce] - #HDR5 per-request CSP nonce; stamps the bootstrap <script>
342
+ * @returns {string} HTML with asset tags injected where appropriate
343
+ */
344
+ function injectAssets(html, data, localOptions, cspNonce) {
345
+ if (typeof html !== 'string' || html.length === 0) { return html; }
346
+ if (!data || !data.page || !data.page.view) { return html; }
347
+
348
+ var stylesheetsHtml = data.page.view.stylesheets || '';
349
+ var scriptsHtml = data.page.view.scripts || '';
350
+ var tpl = localOptions && localOptions.template;
351
+ var isDeferMode = !!(tpl && tpl.javascriptsDeferEnabled);
352
+ var jsExcluded = tpl && tpl.javascriptsExcluded;
353
+ var ginaLoader = tpl && tpl.ginaLoader;
354
+ // #HDR5 — stamp the bootstrap <script> with the per-request nonce when present.
355
+ // The loader is a cached, immutable string; .replace() returns a fresh copy.
356
+ if (cspNonce && typeof ginaLoader === 'string') {
357
+ ginaLoader = ginaLoader.replace(
358
+ '<script type="text/javascript">',
359
+ '<script type="text/javascript" nonce="' + cspNonce + '">'
360
+ );
361
+ }
362
+ var externalPlugins = (tpl && Array.isArray(tpl.externalPlugins)) ? tpl.externalPlugins : [];
363
+ var hasHead = /<\/head>/i.test(html);
364
+ var hasBody = /<\/body>/i.test(html);
365
+
366
+ if (stylesheetsHtml && hasHead && html.indexOf(stylesheetsHtml) === -1) {
367
+ html = html.replace(/<\/head>/i, '\n\t' + stylesheetsHtml + '\n</head>');
368
+ }
369
+
370
+ if (scriptsHtml && html.indexOf(scriptsHtml) === -1) {
371
+ if (isDeferMode && hasHead) {
372
+ html = html.replace(/<\/head>/i, '\t' + scriptsHtml + '\n</head>');
373
+ } else if (hasBody) {
374
+ html = html.replace(/<\/body>/i, '\t' + scriptsHtml + '\n</body>');
375
+ }
376
+ }
377
+
378
+ if (externalPlugins.length > 0 && hasHead) {
379
+ var extHtml = externalPlugins.join('');
380
+ if (extHtml && html.indexOf(extHtml) === -1) {
381
+ html = html.replace(/<\/head>/i, '\t' + extHtml + '\n</head>');
382
+ }
383
+ }
384
+
385
+ if (
386
+ ginaLoader
387
+ && jsExcluded !== '**'
388
+ && hasHead
389
+ && !/window\.onGinaLoaded/.test(html)
390
+ ) {
391
+ html = html.replace(/<\/head>/i, '\t' + ginaLoader + '\n</head>');
392
+ }
393
+
394
+ return html;
395
+ }
396
+
397
+ /**
398
+ * Async-loader swig render delegate. Signature matches the other delegates so
399
+ * controller.js can dispatch to it interchangeably.
400
+ *
401
+ * @param {object} userData - Controller-supplied template data
402
+ * @param {boolean=} displayInspector - Dev Inspector toggle (deferred — unused in the MVP)
403
+ * @param {object=} errOptions - Options when invoked from the error pipeline
404
+ * @param {object} deps - Injected controller refs ({ self, local, getData, hasViews, setResources, headersSent, SwigFilters, swig })
405
+ * @returns {Promise<void>}
406
+ *
407
+ * @example
408
+ * // Selected automatically by controller.js when the bundle configures
409
+ * // settings.template.swig.loader; the controller action just calls self.render(data).
410
+ */
411
+ module.exports = async function renderSwigAsync(userData, displayInspector, errOptions, deps) {
412
+ var self = deps.self;
413
+ var local = deps.local;
414
+ var getData = deps.getData;
415
+ var hasViews = deps.hasViews;
416
+ var headersSent = deps.headersSent;
417
+ var SwigFilters = deps.SwigFilters;
418
+ var setResources = deps.setResources; // #TPL1 — populates data.page.view.stylesheets/.scripts for asset injection
419
+ var swigMod = deps.swig; // the resolved swig MODULE (exposes .Swig)
420
+
421
+ // Function-scoped captures of the per-request refs (#M1 race fix — mirror of
422
+ // render-nunjucks/render-swig). This render awaits (getTemplate + execute);
423
+ // capturing isolates post-await reads from a concurrent throwError null-out
424
+ // on the controller closure.
425
+ var req = local.req;
426
+ var res = local.res;
427
+ var _next = local.next;
428
+
429
+ // No-view short-circuit (e.g. redirect responses reach render() without a
430
+ // configured template).
431
+ if (!hasViews || !hasViews()) {
432
+ sendHtmlResponse(local, '', req, res);
433
+ local.req = null;
434
+ local.res = null;
435
+ local.next = null;
436
+ return;
437
+ }
438
+
439
+ // If the pipeline already sent headers (an upstream throwError beat us), stop.
440
+ if (headersSent && headersSent()) { return; }
441
+
442
+ var localOptions = errOptions || local.options;
443
+
444
+ var data;
445
+ try {
446
+ data = getData();
447
+ } catch (dataErr) {
448
+ return self.throwError(dataErr);
449
+ }
450
+
451
+ // Error-interception — render(err) with a non-2xx status + an error object
452
+ // routes to the framework error page rather than rendering. Mirrors
453
+ // render-swig.js / render-nunjucks.js.
454
+ if (
455
+ !localOptions.isRenderingCustomError
456
+ && data && data.page && data.page.data
457
+ && typeof(data.page.data.status) !== 'undefined'
458
+ && !String(data.page.data.status).startsWith('2')
459
+ && typeof(data.page.data.error) !== 'undefined'
460
+ ) {
461
+ var errorObject = {
462
+ status: data.page.data.status,
463
+ error: data.page.data.error || data.page.data.message,
464
+ message: data.page.data.message || data.page.data.error,
465
+ stack: data.page.data.stack
466
+ };
467
+ try {
468
+ console.error('[render-swig-async] ' + data.page.data.status + ' from upstream — routing to throwError');
469
+ } catch (e) { /* ignore */ }
470
+ return self.throwError(errorObject);
471
+ }
472
+
473
+ // Registry key — the SAME expression initSwigEngine used to stash the loader
474
+ // (conf.content.templates._common.html), so the two sides never diverge.
475
+ var loaderKey = localOptions.conf
476
+ && localOptions.conf.content
477
+ && localOptions.conf.content.templates
478
+ && localOptions.conf.content.templates._common
479
+ && localOptions.conf.content.templates._common.html;
480
+
481
+ var stash = (loaderKey && process.gina._swigLoaders) ? process.gina._swigLoaders[loaderKey] : null;
482
+ if (!stash || !stash.loader) {
483
+ return self.throwError(new Error(
484
+ '[render-swig-async] no async swig loader registered for bundle ' + localOptions.bundle +
485
+ ' — initSwigEngine did not build one (was settings.template.swig.loader removed at runtime?)'
486
+ ));
487
+ }
488
+
489
+ // Merge user data into the render context — mirror render-nunjucks.js:
490
+ // (a) branching stash (userData without a `page` key -> data.page.data),
491
+ // (b) top-level merge with per-key `page` handling (preserves page.view etc.),
492
+ // (c) framework-data restore (re-overlay getData() so page.environment /
493
+ // page.view / page.data.session survive a partial page.* from the controller).
494
+ if (userData && typeof(userData) === 'object') {
495
+ if (!userData.page) {
496
+ if (!data.page.data) { data.page.data = {}; }
497
+ Object.keys(userData).forEach(function (k) {
498
+ data.page.data[k] = userData[k];
499
+ });
500
+ }
501
+ Object.keys(userData).forEach(function (k) {
502
+ if (k === 'page' && data.page && typeof userData.page === 'object') {
503
+ Object.keys(userData.page).forEach(function (pk) {
504
+ data.page[pk] = userData.page[pk];
505
+ });
506
+ } else {
507
+ data[k] = userData[k];
508
+ }
509
+ });
510
+ data = merge(data, getData());
511
+ }
512
+
513
+ var engineEntry, engine;
514
+ try {
515
+ engineEntry = getSwigEngine(swigMod, loaderKey, stash.loader, stash.autoescape, SwigFilters, self.throwError);
516
+ engine = engineEntry.engine;
517
+ } catch (engErr) {
518
+ return self.throwError(engErr);
519
+ }
520
+
521
+ // #TPL1 asset injection — populate data.page.view.stylesheets / .scripts so
522
+ // injectAssets() (post-render) can auto-inject the gina client bundle, CSS
523
+ // and JS into the off-disk render. Mirrors render-nunjucks.js: isWithoutLayout
524
+ // (XHR/popin) responses filter the asset list to common-only via Collection.
525
+ if (typeof setResources === 'function') {
526
+ try {
527
+ var isWithoutLayout = !!localOptions.isWithoutLayout;
528
+ var localTemplateConf = localOptions.template;
529
+ if (isWithoutLayout && localTemplateConf) {
530
+ localTemplateConf = JSON.clone(localTemplateConf);
531
+ if (Collection && Array.isArray(localTemplateConf.javascripts)) {
532
+ localTemplateConf.javascripts = new Collection(localTemplateConf.javascripts)
533
+ .find({ isCommon: false }, { isCommon: true, name: 'gina' });
534
+ }
535
+ if (Collection && Array.isArray(localTemplateConf.stylesheets)) {
536
+ localTemplateConf.stylesheets = new Collection(localTemplateConf.stylesheets)
537
+ .find({ isCommon: false }, { isCommon: true, name: 'gina' });
538
+ }
539
+ }
540
+ setResources(localTemplateConf);
541
+ // Re-overlay getData() so the freshly-set page.view.stylesheets /
542
+ // .scripts reach `data` — the render-swig.js:609 "needed !!" step:
543
+ // setResources writes via the controller's set() into local.userData,
544
+ // getData() rebuilds the data object, and merge fills the new keys.
545
+ data = merge(data, getData());
546
+ } catch (resourcesErr) {
547
+ try { console.warn('[render-swig-async] setResources failed: ' + (resourcesErr.message || resourcesErr)); } catch (e) {}
548
+ }
549
+ }
550
+
551
+ // #HDR5/#HDR16 — per-request CSP nonce (set on req by gina.plugins.Csp({useNonce:true})).
552
+ // Passed to injectAssets() so the injected gina bootstrap <script> carries a
553
+ // matching nonce, and exposed as {{ page.cspNonce }} for app templates
554
+ // (mirrors render-swig.js:903). Absent when the bundle sets no nonce.
555
+ var _cspNonce = (req && req._ginaCspNonce) ? req._ginaCspNonce : null;
556
+ if (_cspNonce) {
557
+ if (!data.page) { data.page = {}; }
558
+ data.page.cspNonce = _cspNonce;
559
+ }
560
+
561
+ var templateName;
562
+ try {
563
+ templateName = resolveTemplatePath(data, localOptions);
564
+ } catch (pathErr) {
565
+ return self.throwError(pathErr);
566
+ }
567
+
568
+ var html;
569
+ try {
570
+ // #B25 / #TPL1 Tier-2 — per-request render context for the once-registered,
571
+ // context-free gina filters on the shared engine. Carried through
572
+ // process.gina._renderALS so the filters read THIS request's context at
573
+ // call time (not a concurrently-interleaved render's). The .run() wrap is
574
+ // UNCONDITIONAL — it closes the #B25 race whether or not the compiled
575
+ // cache is opted in — and propagates the store across every await in the
576
+ // render (page template + its transitive extends/include chain).
577
+ var _renderStore = {
578
+ options: JSON.clone(localOptions),
579
+ isProxyHost: computeIsProxyHost(req, localOptions),
580
+ throwError: self.throwError,
581
+ req: req,
582
+ res: res
583
+ };
584
+ // Tier-2 compiled-fn reuse: opt-in via settings.template.swig.loader.cache,
585
+ // force-disabled in dev so template edits are picked up live.
586
+ var _useMemo = (stash.cache === true) && (process.env.NODE_ENV_IS_DEV !== 'true');
587
+
588
+ html = await getRenderALS().run(_renderStore, async function () {
589
+ var compiled;
590
+ if (_useMemo) {
591
+ compiled = engineEntry.compiled.get(templateName);
592
+ if (!compiled) {
593
+ // Cache the Promise<fn> (collapses concurrent first-loads of the
594
+ // same template); a rejected compile is evicted so a transient
595
+ // loader failure doesn't poison the cache permanently.
596
+ compiled = engine.getTemplate(templateName, { filename: templateName });
597
+ engineEntry.compiled.set(templateName, compiled);
598
+ compiled.catch(function () { engineEntry.compiled.delete(templateName); });
599
+ }
600
+ compiled = await compiled;
601
+ } else {
602
+ // swig async path: getTemplate(name) resolves+loads the page
603
+ // template AND its transitive extends/include chain through the
604
+ // custom loader, returning Promise<TemplateFn>; the compiled fn
605
+ // returns Promise<{output}>.
606
+ compiled = await engine.getTemplate(templateName, { filename: templateName });
607
+ }
608
+ var rendered = await compiled(data);
609
+ return (rendered && typeof rendered.output === 'string') ? rendered.output : String(rendered);
610
+ });
611
+ } catch (renderErr) {
612
+ return self.throwError(renderErr);
613
+ }
614
+
615
+ // #TPL1 — post-render asset injection (stylesheets / scripts / ginaLoader /
616
+ // externalPlugins) onto the </head> / </body> anchors. Falls through with
617
+ // un-mutated HTML on any error so a mis-shaped template config never breaks
618
+ // the render.
619
+ try {
620
+ html = injectAssets(html, data, localOptions, _cspNonce);
621
+ } catch (assetErr) {
622
+ try { console.warn('[render-swig-async] asset injection skipped: ' + (assetErr.message || assetErr)); } catch (e) {}
623
+ }
624
+
625
+ // The injected gina bootstrap (gina.onload.min.js) is a literal HTML string
626
+ // carrying {{ page.X }} / {{ page.environment.X }} / {{ page.data.session.X }}
627
+ // placeholders the engine never saw (inserted post-render); resolve them with
628
+ // whisper(). Mirrors render-nunjucks.js / render-swig.js:572-582+1276. Without
629
+ // this, window.onGinaLoaded throws a JSON.parse SyntaxError and gina.popin /
630
+ // gina.session / gina.forms / onGenericXhrResponse stay undefined.
631
+ try {
632
+ if (data && data.page && typeof data.page === 'object' && typeof whisper === 'function') {
633
+ var ginaLoaderDic = {};
634
+ for (var _d in data.page) {
635
+ ginaLoaderDic['page.' + _d] = data.page[_d];
636
+ }
637
+ if (typeof data.page.environment === 'object' && data.page.environment !== null) {
638
+ for (var _k in data.page.environment) {
639
+ ginaLoaderDic['page.environment.' + _k] = data.page.environment[_k];
640
+ }
641
+ }
642
+ // gina.onload.min.js also references `{{ page.data.session.X }}` (depth 3).
643
+ if (data.page.data && typeof data.page.data === 'object' && data.page.data.session && typeof data.page.data.session === 'object') {
644
+ for (var _s in data.page.data.session) {
645
+ ginaLoaderDic['page.data.session.' + _s] = data.page.data.session[_s];
646
+ }
647
+ }
648
+ html = whisper(ginaLoaderDic, html, /\{{ ([a-zA-Z.]+) \}}/g);
649
+ }
650
+ } catch (whisperErr) {
651
+ try { console.warn('[render-swig-async] ginaLoader whisper substitution skipped: ' + (whisperErr.message || whisperErr)); } catch (e) {}
652
+ }
653
+
654
+ // A concurrent throwError may have sent headers while we awaited — re-check.
655
+ if (headersSent && headersSent()) { return; }
656
+
657
+ sendHtmlResponse(local, html, req, res);
658
+
659
+ // Release per-request refs on the closure; the function-scoped captures stay
660
+ // alive until return.
661
+ local.req = null;
662
+ local.res = null;
663
+ local.next = null;
664
+ };