gina 0.6.30-alpha.1 → 0.6.30

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 (615) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/README.md +28 -19
  3. package/ROADMAP.md +2 -1
  4. package/bin/gina-container +23 -0
  5. package/framework/v0.6.30/VERSION +1 -0
  6. package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/asset/plugin/dist/vendor/gina/js/gina.js +20 -4
  7. package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/asset/plugin/dist/vendor/gina/js/gina.min.js +2 -2
  8. package/framework/v0.6.30/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
  9. package/framework/v0.6.30/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
  10. package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/controller/controller.js +231 -7
  11. package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/controller/controller.render-swig.js +44 -2
  12. package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/controller/controller.render-v1.js +44 -2
  13. package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/model/entity.js +70 -10
  14. package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/plugins/lib/validator/src/form-validator.js +10 -2
  15. package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/router.js +9 -1
  16. package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/server.js +9 -1
  17. package/framework/{v0.6.30-alpha.1 → v0.6.30}/helpers/context.js +75 -15
  18. package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/framework/tail.js +36 -2
  19. package/framework/v0.6.30/lib/conf-view/package.json +17 -0
  20. package/framework/v0.6.30/lib/conf-view/src/main.js +380 -0
  21. package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/index.js +4 -0
  22. package/framework/v0.6.30/lib/logger/README.md +76 -0
  23. package/framework/v0.6.30/lib/logger/src/containers/file/index.js +681 -0
  24. package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/logger/src/containers/mq/listener.js +0 -72
  25. package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/routing/src/main.js +10 -2
  26. package/framework/{v0.6.30-alpha.1 → v0.6.30}/package.json +1 -1
  27. package/gna.js +4 -4
  28. package/llms.txt +8 -8
  29. package/package.json +3 -3
  30. package/resources/home/user/extensions/logger/file/config.json +7 -8
  31. package/schema/settings.json +21 -0
  32. package/script/perf/profile-baseline.js +131 -3
  33. package/types/index.d.ts +13 -0
  34. package/framework/v0.6.30-alpha.1/VERSION +0 -1
  35. package/framework/v0.6.30-alpha.1/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
  36. package/framework/v0.6.30-alpha.1/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
  37. package/framework/v0.6.30-alpha.1/lib/logger/README.md +0 -44
  38. package/framework/v0.6.30-alpha.1/lib/logger/src/containers/file/index.js +0 -387
  39. package/framework/v0.6.30-alpha.1/lib/logger/src/containers/file/lib/logrotator/README.md +0 -100
  40. package/framework/v0.6.30-alpha.1/lib/logger/src/containers/file/lib/logrotator/index.js +0 -274
  41. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/AUTHORS +0 -0
  42. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/LICENSE +0 -0
  43. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/asset/html/nolayout.html +0 -0
  44. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/asset/html/static.html +0 -0
  45. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/asset/img/android-chrome-192x192.png +0 -0
  46. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/asset/img/android-chrome-512x512.png +0 -0
  47. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/asset/img/apple-touch-icon.png +0 -0
  48. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/asset/img/favicon-16x16.png +0 -0
  49. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/asset/img/favicon-32x32.png +0 -0
  50. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/asset/img/favicon.ico +0 -0
  51. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/asset/plugin/README.md +0 -0
  52. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.css +0 -0
  53. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.js +0 -0
  54. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/asset/plugin/dist/vendor/gina/beemaster/index.html +0 -0
  55. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/asset/plugin/dist/vendor/gina/css/gina.min.css +0 -0
  56. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
  57. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
  58. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/asset/plugin/dist/vendor/gina/html/statusbar.html +0 -0
  59. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.br +0 -0
  60. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.gz +0 -0
  61. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/asset/plugin/dist/vendor/gina/inspector/have_heart_one-webfont.woff2 +0 -0
  62. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/asset/plugin/dist/vendor/gina/inspector/index.html +0 -0
  63. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/asset/plugin/dist/vendor/gina/inspector/inspector.css +0 -0
  64. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/asset/plugin/dist/vendor/gina/inspector/inspector.js +0 -0
  65. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/asset/plugin/dist/vendor/gina/inspector/logo.svg +0 -0
  66. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +0 -0
  67. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.br +0 -0
  68. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.gz +0 -0
  69. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/config.js +0 -0
  70. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/connectors/ai/index.js +0 -0
  71. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/connectors/ai/lib/connector.js +0 -0
  72. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/connectors/couchbase/index.js +0 -0
  73. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/connectors/couchbase/lib/connector.js +0 -0
  74. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/connectors/couchbase/lib/connector.v3.js +0 -0
  75. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/connectors/couchbase/lib/connector.v4.js +0 -0
  76. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/connectors/couchbase/lib/n1ql.js +0 -0
  77. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/connectors/couchbase/lib/session-store.js +0 -0
  78. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/connectors/couchbase/lib/session-store.v3.js +0 -0
  79. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/connectors/couchbase/lib/session-store.v4.js +0 -0
  80. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/connectors/couchbase/lib/storage-store.js +0 -0
  81. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/connectors/duckdb/index.js +0 -0
  82. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/connectors/duckdb/lib/connector.js +0 -0
  83. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/connectors/mongodb/index.js +0 -0
  84. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/connectors/mongodb/lib/connector.js +0 -0
  85. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/connectors/mongodb/lib/job-store.js +0 -0
  86. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/connectors/mongodb/lib/pipeline-loader.js +0 -0
  87. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/connectors/mongodb/lib/session-store.js +0 -0
  88. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/connectors/mysql/index.js +0 -0
  89. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/connectors/mysql/lib/connector.js +0 -0
  90. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/connectors/param-redact.js +0 -0
  91. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/connectors/postgresql/index.js +0 -0
  92. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/connectors/postgresql/lib/connector.js +0 -0
  93. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/connectors/redis/index.js +0 -0
  94. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/connectors/redis/lib/connector.js +0 -0
  95. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/connectors/redis/lib/job-store.js +0 -0
  96. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/connectors/redis/lib/kv-store.js +0 -0
  97. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/connectors/redis/lib/render-cache-store.js +0 -0
  98. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/connectors/redis/lib/session-store.js +0 -0
  99. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/connectors/scylladb/index.js +0 -0
  100. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/connectors/scylladb/lib/connector.js +0 -0
  101. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/connectors/scylladb/lib/session-store.js +0 -0
  102. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/connectors/settle-once.js +0 -0
  103. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/connectors/sql-parser.js +0 -0
  104. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/connectors/sqlite/index.js +0 -0
  105. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/connectors/sqlite/lib/connector.js +0 -0
  106. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/connectors/sqlite/lib/job-store.js +0 -0
  107. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/connectors/sqlite/lib/kv-store.js +0 -0
  108. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/connectors/sqlite/lib/session-store.js +0 -0
  109. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/content.encoding +0 -0
  110. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/controller/controller.framework.js +0 -0
  111. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/controller/controller.render-json.js +0 -0
  112. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/controller/controller.render-nunjucks-async.js +0 -0
  113. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/controller/controller.render-nunjucks.js +0 -0
  114. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/controller/controller.render-stream.js +0 -0
  115. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/controller/controller.render-swig-async.js +0 -0
  116. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/controller/controller.render-xml.js +0 -0
  117. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/controller/index.js +0 -0
  118. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/controller/inline-script.js +0 -0
  119. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/controller/inspector-window-emit.js +0 -0
  120. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/controller/release-banner.js +0 -0
  121. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/dev/index.js +0 -0
  122. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/dev/lib/class.js +0 -0
  123. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/dev/lib/factory.js +0 -0
  124. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/dev/lib/tools.js +0 -0
  125. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/gna.js +0 -0
  126. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/locales/README.md +0 -0
  127. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/locales/currency.json +0 -0
  128. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/locales/dist/language/en.json +0 -0
  129. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/locales/dist/language/fr.json +0 -0
  130. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/locales/dist/region/en.json +0 -0
  131. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/locales/dist/region/fr.json +0 -0
  132. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/locales/index.js +0 -0
  133. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/mime.types +0 -0
  134. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/model/index.js +0 -0
  135. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/model/template/entityFactory.js +0 -0
  136. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/model/template/index.js +0 -0
  137. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/plugins/README.md +0 -0
  138. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/plugins/index.js +0 -0
  139. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/plugins/lib/csrf/README.md +0 -0
  140. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/plugins/lib/csrf/package.json +0 -0
  141. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/plugins/lib/csrf/src/main.js +0 -0
  142. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/plugins/lib/security-headers/README.md +0 -0
  143. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/plugins/lib/security-headers/coep/README.md +0 -0
  144. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/plugins/lib/security-headers/coep/package.json +0 -0
  145. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/plugins/lib/security-headers/coep/src/main.js +0 -0
  146. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/plugins/lib/security-headers/coop/README.md +0 -0
  147. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/plugins/lib/security-headers/coop/package.json +0 -0
  148. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/plugins/lib/security-headers/coop/src/main.js +0 -0
  149. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/plugins/lib/security-headers/corp/README.md +0 -0
  150. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/plugins/lib/security-headers/corp/package.json +0 -0
  151. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/plugins/lib/security-headers/corp/src/main.js +0 -0
  152. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/plugins/lib/security-headers/csp/README.md +0 -0
  153. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/plugins/lib/security-headers/csp/package.json +0 -0
  154. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/plugins/lib/security-headers/csp/src/main.js +0 -0
  155. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/plugins/lib/security-headers/hide-powered-by/README.md +0 -0
  156. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/plugins/lib/security-headers/hide-powered-by/package.json +0 -0
  157. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/plugins/lib/security-headers/hide-powered-by/src/main.js +0 -0
  158. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/plugins/lib/security-headers/hsts/README.md +0 -0
  159. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/plugins/lib/security-headers/hsts/package.json +0 -0
  160. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/plugins/lib/security-headers/hsts/src/main.js +0 -0
  161. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/plugins/lib/security-headers/origin-agent-cluster/README.md +0 -0
  162. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/plugins/lib/security-headers/origin-agent-cluster/package.json +0 -0
  163. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/plugins/lib/security-headers/origin-agent-cluster/src/main.js +0 -0
  164. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/plugins/lib/security-headers/package.json +0 -0
  165. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/plugins/lib/security-headers/referrer-policy/README.md +0 -0
  166. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/plugins/lib/security-headers/referrer-policy/package.json +0 -0
  167. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/plugins/lib/security-headers/referrer-policy/src/main.js +0 -0
  168. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/plugins/lib/security-headers/src/main.js +0 -0
  169. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/plugins/lib/security-headers/x-content-type-options/README.md +0 -0
  170. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/plugins/lib/security-headers/x-content-type-options/package.json +0 -0
  171. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/plugins/lib/security-headers/x-content-type-options/src/main.js +0 -0
  172. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/plugins/lib/security-headers/x-dns-prefetch-control/README.md +0 -0
  173. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/plugins/lib/security-headers/x-dns-prefetch-control/package.json +0 -0
  174. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/plugins/lib/security-headers/x-dns-prefetch-control/src/main.js +0 -0
  175. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/plugins/lib/security-headers/x-download-options/README.md +0 -0
  176. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/plugins/lib/security-headers/x-download-options/package.json +0 -0
  177. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/plugins/lib/security-headers/x-download-options/src/main.js +0 -0
  178. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/plugins/lib/security-headers/x-frame-options/README.md +0 -0
  179. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/plugins/lib/security-headers/x-frame-options/package.json +0 -0
  180. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/plugins/lib/security-headers/x-frame-options/src/main.js +0 -0
  181. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/README.md +0 -0
  182. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/package.json +0 -0
  183. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/src/main.js +0 -0
  184. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/plugins/lib/security-headers/x-xss-protection/README.md +0 -0
  185. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/plugins/lib/security-headers/x-xss-protection/package.json +0 -0
  186. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/plugins/lib/security-headers/x-xss-protection/src/main.js +0 -0
  187. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/plugins/lib/session/README.md +0 -0
  188. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/plugins/lib/session/package.json +0 -0
  189. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/plugins/lib/session/src/main.js +0 -0
  190. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/plugins/lib/storage/README.md +0 -0
  191. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/plugins/lib/storage/build.json +0 -0
  192. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/plugins/lib/storage/package.json +0 -0
  193. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/plugins/lib/storage/src/main.js +0 -0
  194. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/plugins/lib/validator/README.md +0 -0
  195. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/plugins/lib/validator/build.json +0 -0
  196. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/plugins/lib/validator/package.json +0 -0
  197. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/plugins/lib/validator/src/main.js +0 -0
  198. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/server.express.js +0 -0
  199. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/server.isaac.js +0 -0
  200. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/status.codes +0 -0
  201. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/template/_gitignore +0 -0
  202. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/template/boilerplate/bundle/config/app.json +0 -0
  203. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/template/boilerplate/bundle/config/connectors.json +0 -0
  204. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/template/boilerplate/bundle/config/routing.json +0 -0
  205. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/template/boilerplate/bundle/config/settings.json +0 -0
  206. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/template/boilerplate/bundle/config/settings.server.json +0 -0
  207. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/template/boilerplate/bundle/config/templates.json +0 -0
  208. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/template/boilerplate/bundle/config/watchers.json +0 -0
  209. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/template/boilerplate/bundle/controllers/controller.content.js +0 -0
  210. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/template/boilerplate/bundle/controllers/controller.js +0 -0
  211. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/template/boilerplate/bundle/controllers/setup.js +0 -0
  212. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/template/boilerplate/bundle/index.js +0 -0
  213. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/template/boilerplate/bundle/locales/en.json +0 -0
  214. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/template/boilerplate/bundle_namespace/controllers/controller.js +0 -0
  215. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/template/boilerplate/bundle_public/css/default.css +0 -0
  216. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/template/boilerplate/bundle_public/css/home.css +0 -0
  217. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/template/boilerplate/bundle_public/css/vendor/readme.md +0 -0
  218. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/template/boilerplate/bundle_public/favicon.ico +0 -0
  219. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/template/boilerplate/bundle_public/js/components/x-checklist.js +0 -0
  220. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/template/boilerplate/bundle_public/js/vendor/readme.md +0 -0
  221. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/template/boilerplate/bundle_public/manifest.webmanifest +0 -0
  222. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/template/boilerplate/bundle_public/readme.md +0 -0
  223. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/template/boilerplate/bundle_public/sw.js +0 -0
  224. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/template/boilerplate/bundle_templates/handlers/main.js +0 -0
  225. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/template/boilerplate/bundle_templates/html/content/homepage.html +0 -0
  226. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/template/boilerplate/bundle_templates/html/includes/error-msg-noscript.html +0 -0
  227. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/template/boilerplate/bundle_templates/html/includes/error-msg-outdated-browser.html +0 -0
  228. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/template/boilerplate/bundle_templates/html/includes/x-checklist.html +0 -0
  229. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/template/boilerplate/bundle_templates/html/layouts/main.html +0 -0
  230. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/template/command/gina.bat.tpl +0 -0
  231. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/template/command/gina.tpl +0 -0
  232. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/template/conf/env.json +0 -0
  233. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/template/conf/manifest.json +0 -0
  234. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/template/conf/package.json +0 -0
  235. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/template/conf/settings.json +0 -0
  236. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/template/conf/statics.json +0 -0
  237. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/template/conf/templates.json +0 -0
  238. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/template/error/client/json/401.json +0 -0
  239. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/template/error/client/json/403.json +0 -0
  240. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/template/error/client/json/404.json +0 -0
  241. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/template/error/server/html/50x.html +0 -0
  242. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/template/error/server/json/500.json +0 -0
  243. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/template/error/server/json/503.json +0 -0
  244. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/core/template/extensions/logger/config.json +0 -0
  245. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/helpers/console.js +0 -0
  246. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/helpers/data/LICENSE +0 -0
  247. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/helpers/data/README.md +0 -0
  248. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/helpers/data/package.json +0 -0
  249. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/helpers/data/src/main.js +0 -0
  250. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/helpers/dateFormat.js +0 -0
  251. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/helpers/index.js +0 -0
  252. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/helpers/json/LICENSE +0 -0
  253. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/helpers/json/README.md +0 -0
  254. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/helpers/json/package.json +0 -0
  255. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/helpers/json/src/main.js +0 -0
  256. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/helpers/path.js +0 -0
  257. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/helpers/plugins/README.md +0 -0
  258. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/helpers/plugins/package.json +0 -0
  259. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/helpers/plugins/src/api-error.js +0 -0
  260. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/helpers/plugins/src/main.js +0 -0
  261. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/helpers/prototypes.js +0 -0
  262. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/helpers/task.js +0 -0
  263. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/helpers/text.js +0 -0
  264. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/admin/package.json +0 -0
  265. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/admin/src/main.js +0 -0
  266. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/archiver/README.md +0 -0
  267. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/archiver/build.json +0 -0
  268. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/archiver/package.json +0 -0
  269. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/archiver/src/dep/jszip.min.js +0 -0
  270. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/archiver/src/main.js +0 -0
  271. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/async/package.json +0 -0
  272. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/async/src/main.js +0 -0
  273. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/audit/package.json +0 -0
  274. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/audit/src/main.js +0 -0
  275. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/audit-store.js +0 -0
  276. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/authn/package.json +0 -0
  277. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/authn/src/lockout.js +0 -0
  278. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/authn/src/main.js +0 -0
  279. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/authn/src/totp.js +0 -0
  280. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/authz-gate/package.json +0 -0
  281. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/authz-gate/src/main.js +0 -0
  282. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cache/README.md +0 -0
  283. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cache/build.json +0 -0
  284. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cache/package.json +0 -0
  285. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cache/src/main.js +0 -0
  286. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/aliases.json +0 -0
  287. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/audit/arguments.json +0 -0
  288. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/audit/help.txt +0 -0
  289. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/audit/verify.js +0 -0
  290. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/bundle/add.js +0 -0
  291. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/bundle/arguments.json +0 -0
  292. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/bundle/build.js +0 -0
  293. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/bundle/copy.js +0 -0
  294. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/bundle/cp.js +0 -0
  295. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/bundle/help.js +0 -0
  296. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/bundle/help.txt +0 -0
  297. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/bundle/inc/name-rewrite.js +0 -0
  298. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/bundle/list.js +0 -0
  299. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/bundle/man.js +0 -0
  300. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/bundle/mcp-start.js +0 -0
  301. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/bundle/mcp.js +0 -0
  302. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/bundle/oas.js +0 -0
  303. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/bundle/openapi.js +0 -0
  304. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/bundle/remove.js +0 -0
  305. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/bundle/rename.js +0 -0
  306. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/bundle/restart.js +0 -0
  307. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/bundle/rm.js +0 -0
  308. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/bundle/start.js +0 -0
  309. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/bundle/status.js +0 -0
  310. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/bundle/stop.js +0 -0
  311. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/bundle/types.js +0 -0
  312. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/cache/arguments.json +0 -0
  313. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/cache/clear.js +0 -0
  314. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/cache/help.txt +0 -0
  315. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/cache/stats.js +0 -0
  316. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/connector/add.js +0 -0
  317. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/connector/arguments.json +0 -0
  318. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/connector/help.js +0 -0
  319. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/connector/help.txt +0 -0
  320. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/connector/infer.js +0 -0
  321. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/connector/list.js +0 -0
  322. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/connector/migrate.js +0 -0
  323. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/connector/models.js +0 -0
  324. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/connector/remove.js +0 -0
  325. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/connector/rm.js +0 -0
  326. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/connector/test.js +0 -0
  327. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/container/arguments.json +0 -0
  328. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/container/help.js +0 -0
  329. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/container/help.txt +0 -0
  330. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/container/man.js +0 -0
  331. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/container/ps.js +0 -0
  332. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/container/stop.js +0 -0
  333. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/controller/add.js +0 -0
  334. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/controller/arguments.json +0 -0
  335. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/controller/help.txt +0 -0
  336. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/controller/inc/args.js +0 -0
  337. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/controller/inc/namespace.js +0 -0
  338. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/controller/inc/reference-rewrite.js +0 -0
  339. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/controller/inc/reference-scan.js +0 -0
  340. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/controller/inc/scaffold.js +0 -0
  341. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/controller/remove.js +0 -0
  342. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/controller/rename.js +0 -0
  343. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/controller/rm.js +0 -0
  344. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/env/add.js +0 -0
  345. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/env/get.js +0 -0
  346. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/env/help.js +0 -0
  347. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/env/help.txt +0 -0
  348. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/env/link-dev.js +0 -0
  349. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/env/list.js +0 -0
  350. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/env/remove.js +0 -0
  351. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/env/rm.js +0 -0
  352. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/env/set.js +0 -0
  353. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/env/unset.js +0 -0
  354. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/env/use.js +0 -0
  355. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/framework/add.js +0 -0
  356. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/framework/arguments.json +0 -0
  357. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/framework/build.js +0 -0
  358. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/framework/dot.js +0 -0
  359. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/framework/get.js +0 -0
  360. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/framework/help.js +0 -0
  361. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/framework/help.txt +0 -0
  362. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/framework/init.js +0 -0
  363. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/framework/link-node-modules.js +0 -0
  364. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/framework/link.js +0 -0
  365. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/framework/list.js +0 -0
  366. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/framework/man.js +0 -0
  367. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/framework/msg.json +0 -0
  368. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/framework/open.js +0 -0
  369. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/framework/remove.js +0 -0
  370. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/framework/reset.js +0 -0
  371. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/framework/restart.js +0 -0
  372. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/framework/set.js +0 -0
  373. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/framework/start.js +0 -0
  374. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/framework/status.js +0 -0
  375. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/framework/stop.js +0 -0
  376. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/framework/update.js +0 -0
  377. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/framework/version.js +0 -0
  378. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/gina-dev.1.md +0 -0
  379. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/gina-framework.1.md +0 -0
  380. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/gina.1.md +0 -0
  381. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/helper.js +0 -0
  382. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/i18n/add.js +0 -0
  383. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/i18n/arguments.json +0 -0
  384. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/i18n/export.js +0 -0
  385. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/i18n/help.js +0 -0
  386. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/i18n/help.txt +0 -0
  387. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/i18n/import.js +0 -0
  388. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/i18n/scan.js +0 -0
  389. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/image/_host.js +0 -0
  390. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/image/arguments.json +0 -0
  391. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/image/build.js +0 -0
  392. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/image/help.js +0 -0
  393. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/image/help.txt +0 -0
  394. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/image/list.js +0 -0
  395. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/image/man.js +0 -0
  396. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/image/rm.js +0 -0
  397. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/image/run.js +0 -0
  398. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/index.js +0 -0
  399. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/inspector/help.js +0 -0
  400. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/inspector/help.txt +0 -0
  401. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/inspector/open.js +0 -0
  402. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/man-render.js +0 -0
  403. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/minion/arguments.json +0 -0
  404. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/minion/help.js +0 -0
  405. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/minion/help.txt +0 -0
  406. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/minion/kill.js +0 -0
  407. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/minion/list.js +0 -0
  408. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/msg.json +0 -0
  409. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/port/help.js +0 -0
  410. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/port/help.txt +0 -0
  411. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/port/inc/scan.js +0 -0
  412. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/port/list.js +0 -0
  413. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/port/reset.js +0 -0
  414. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/port/set.js +0 -0
  415. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/project/add.js +0 -0
  416. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/project/arguments.json +0 -0
  417. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/project/backup.js +0 -0
  418. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/project/build.js +0 -0
  419. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/project/help.js +0 -0
  420. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/project/help.txt +0 -0
  421. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/project/import.js +0 -0
  422. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/project/list.js +0 -0
  423. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/project/man.js +0 -0
  424. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/project/move.js +0 -0
  425. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/project/remove.js +0 -0
  426. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/project/rename.js +0 -0
  427. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/project/restart.js +0 -0
  428. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/project/restore.js +0 -0
  429. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/project/rm.js +0 -0
  430. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/project/start.js +0 -0
  431. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/project/status.js +0 -0
  432. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/project/stop.js +0 -0
  433. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/protocol/arguments.json +0 -0
  434. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/protocol/help.js +0 -0
  435. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/protocol/help.txt +0 -0
  436. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/protocol/list.js +0 -0
  437. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/protocol/remove.js +0 -0
  438. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/protocol/set.js +0 -0
  439. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/scope/add.js +0 -0
  440. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/scope/help.js +0 -0
  441. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/scope/help.txt +0 -0
  442. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/scope/link-local.js +0 -0
  443. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/scope/link-production.js +0 -0
  444. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/scope/list.js +0 -0
  445. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/scope/remove.js +0 -0
  446. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/scope/rm.js +0 -0
  447. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/scope/use.js +0 -0
  448. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/secrets/arguments.json +0 -0
  449. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/secrets/check.js +0 -0
  450. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/secrets/help.js +0 -0
  451. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/secrets/help.txt +0 -0
  452. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/secrets/scan.js +0 -0
  453. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/service/help.js +0 -0
  454. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/service/help.txt +0 -0
  455. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/service/list.js +0 -0
  456. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/service/man.js +0 -0
  457. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/service/start.js +0 -0
  458. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/storage/arguments.json +0 -0
  459. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/storage/gc.js +0 -0
  460. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/storage/help.txt +0 -0
  461. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/storage/stats.js +0 -0
  462. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/storage/verify.js +0 -0
  463. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd/view/add.js +0 -0
  464. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd-status-format/package.json +0 -0
  465. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cmd-status-format/src/main.js +0 -0
  466. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/collection/README.md +0 -0
  467. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/collection/build.json +0 -0
  468. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/collection/package.json +0 -0
  469. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/collection/src/main.js +0 -0
  470. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/config.js +0 -0
  471. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/connector-config/package.json +0 -0
  472. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/connector-config/src/main.js +0 -0
  473. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/connector-error/package.json +0 -0
  474. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/connector-error/src/main.js +0 -0
  475. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/connector-registry/package.json +0 -0
  476. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/connector-registry/src/main.js +0 -0
  477. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cron/README.md +0 -0
  478. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cron/package.json +0 -0
  479. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/cron/src/main.js +0 -0
  480. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/domain/LICENSE +0 -0
  481. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/domain/README.md +0 -0
  482. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/domain/package.json +0 -0
  483. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/domain/src/main.js +0 -0
  484. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/dto/package.json +0 -0
  485. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/dto/src/main.js +0 -0
  486. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/dto-pipe/package.json +0 -0
  487. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/dto-pipe/src/main.js +0 -0
  488. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/dto-types/package.json +0 -0
  489. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/dto-types/src/main.js +0 -0
  490. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/generator/index.js +0 -0
  491. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/i18n/package.json +0 -0
  492. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/i18n/src/main.js +0 -0
  493. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/idempotency/package.json +0 -0
  494. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/idempotency/src/main.js +0 -0
  495. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/image-build/package.json +0 -0
  496. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/image-build/src/main.js +0 -0
  497. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/inherits/LICENSE +0 -0
  498. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/inherits/README.md +0 -0
  499. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/inherits/package.json +0 -0
  500. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/inherits/src/main.js +0 -0
  501. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/inspector-events/package.json +0 -0
  502. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/inspector-events/src/main.js +0 -0
  503. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/inspector-redact/package.json +0 -0
  504. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/inspector-redact/src/main.js +0 -0
  505. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/instrument/package.json +0 -0
  506. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/instrument/src/main.js +0 -0
  507. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/job/package.json +0 -0
  508. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/job/src/main.js +0 -0
  509. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/job-store.js +0 -0
  510. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/json-config-header/package.json +0 -0
  511. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/json-config-header/src/main.js +0 -0
  512. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/kv/package.json +0 -0
  513. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/kv/src/main.js +0 -0
  514. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/kv-store.js +0 -0
  515. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/loading-state/package.json +0 -0
  516. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/loading-state/src/main.js +0 -0
  517. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/logger/package.json +0 -0
  518. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/logger/src/containers/default/index.js +0 -0
  519. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/logger/src/containers/mq/index.js +0 -0
  520. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/logger/src/containers/mq/speaker.js +0 -0
  521. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/logger/src/helper.js +0 -0
  522. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/logger/src/main.js +0 -0
  523. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/logger/src/redact.js +0 -0
  524. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/maintenance/package.json +0 -0
  525. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/maintenance/src/main.js +0 -0
  526. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/math/index.js +0 -0
  527. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/mcp-dispatch/package.json +0 -0
  528. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/mcp-dispatch/src/main.js +0 -0
  529. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/mcp-http/package.json +0 -0
  530. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/mcp-http/src/main.js +0 -0
  531. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/mcp-server/package.json +0 -0
  532. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/mcp-server/src/main.js +0 -0
  533. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/merge/README.md +0 -0
  534. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/merge/package.json +0 -0
  535. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/merge/src/main.js +0 -0
  536. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/message-validator/package.json +0 -0
  537. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/message-validator/src/main.js +0 -0
  538. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/metrics/package.json +0 -0
  539. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/metrics/src/main.js +0 -0
  540. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/model.js +0 -0
  541. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/money/package.json +0 -0
  542. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/money/src/main.js +0 -0
  543. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/multipart/package.json +0 -0
  544. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/multipart/src/main.js +0 -0
  545. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/net-locality/package.json +0 -0
  546. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/net-locality/src/main.js +0 -0
  547. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/nunjucks-filters/README.md +0 -0
  548. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/nunjucks-filters/package.json +0 -0
  549. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/nunjucks-filters/src/main.js +0 -0
  550. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/nunjucks-resolver/package.json +0 -0
  551. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/nunjucks-resolver/src/main.js +0 -0
  552. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/proc.js +0 -0
  553. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/push/package.json +0 -0
  554. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/push/src/main.js +0 -0
  555. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/rate-limit/package.json +0 -0
  556. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/rate-limit/src/main.js +0 -0
  557. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/release-watch/package.json +0 -0
  558. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/release-watch/src/main.js +0 -0
  559. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/render-cache/package.json +0 -0
  560. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/render-cache/src/main.js +0 -0
  561. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/render-cache-store.js +0 -0
  562. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/routing/README.md +0 -0
  563. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/routing/build.json +0 -0
  564. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/routing/package.json +0 -0
  565. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/routing/src/radix.js +0 -0
  566. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/routing-introspect/package.json +0 -0
  567. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/routing-introspect/src/main.js +0 -0
  568. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/secrets/package.json +0 -0
  569. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/secrets/src/backends/env.js +0 -0
  570. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/secrets/src/backends/exec.js +0 -0
  571. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/secrets/src/backends/file.js +0 -0
  572. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/secrets/src/declaration.js +0 -0
  573. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/secrets/src/env-file.js +0 -0
  574. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/secrets/src/main.js +0 -0
  575. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/secrets/src/sources.js +0 -0
  576. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/security-headers-emitter/package.json +0 -0
  577. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/security-headers-emitter/src/main.js +0 -0
  578. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/session-store.js +0 -0
  579. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/shell.js +0 -0
  580. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/sqlite-driver.js +0 -0
  581. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/sri/package.json +0 -0
  582. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/sri/src/main.js +0 -0
  583. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/state.js +0 -0
  584. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/storage/package.json +0 -0
  585. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/storage/src/local-cas.js +0 -0
  586. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/storage/src/local-stream.js +0 -0
  587. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/storage/src/local.js +0 -0
  588. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/storage/src/main.js +0 -0
  589. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/storage/src/meta-store.js +0 -0
  590. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/storage/src/s3.js +0 -0
  591. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/storage/src/util.js +0 -0
  592. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/storage-store.js +0 -0
  593. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/swig-filters/README.md +0 -0
  594. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/swig-filters/package.json +0 -0
  595. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/swig-filters/src/main.js +0 -0
  596. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/swig-resolver/package.json +0 -0
  597. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/swig-resolver/src/main.js +0 -0
  598. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/template-loaders/package.json +0 -0
  599. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/template-loaders/src/loaders/http.js +0 -0
  600. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/template-loaders/src/loaders/memory.js +0 -0
  601. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/template-loaders/src/main.js +0 -0
  602. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/url/README.md +0 -0
  603. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/url/index.js +0 -0
  604. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/url/routing.json +0 -0
  605. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/uuid/package.json +0 -0
  606. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/uuid/src/main.js +0 -0
  607. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/validator.js +0 -0
  608. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/watcher/package.json +0 -0
  609. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/watcher/src/main.js +0 -0
  610. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/ws-framing/package.json +0 -0
  611. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/ws-framing/src/main.js +0 -0
  612. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/ws-query/package.json +0 -0
  613. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/ws-query/src/main.js +0 -0
  614. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/ws-session/package.json +0 -0
  615. /package/framework/{v0.6.30-alpha.1 → v0.6.30}/lib/ws-session/src/main.js +0 -0
package/CHANGELOG.md CHANGED
@@ -6,6 +6,24 @@ 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.6.30 - 2026-09-10
10
+ ### Added
11
+ * Log rotation for the logger's opt-in `file` container, on by default at 10MB with 5 files kept — deliberately the same shape as the kubelet's own `containerLogMaxSize` / `containerLogMaxFiles`. Configure it under `rotate` in `~/.gina/user/extensions/logger/file/config.json`, where the container is already enabled: `enabled` (default true), `when` (`"daily"` or null), `size` (default `"10MB"`), `count` (default 5) and `maxAge` (e.g. `"30d"`, off by default). The live file is renamed and reopened rather than copied and truncated, so no line is lost while rotating, and the sink holds one append stream per group over a synchronously opened descriptor — which is what lets a burst of lines logged in a single tick rotate correctly, since a stream that opens asynchronously has no file to rename yet. A size or age without an explicit unit is refused rather than guessed — `"10"` is never read as bytes — and any invalid value disables rotation with a message naming the key, the value and the consequence, reported through the log flows so it reaches stdout and `gina tail`, while logging itself continues. Each log group is written to its own file, `<logdir>/<bundle>@<project>.log`. Two bounds are worth knowing: bytes still queued when a process exits can be lost, because flushing is asynchronous and making every write synchronous would let a full disk block the request loop; and a file that stops draining past a 4MB buffer drops lines with one warning per outage, the same posture the MQ transport already takes.
12
+ * `gina tail` honours the logger's JSON render mode. When its own logger resolves the output format to `json` — `GINA_LOG_FORMAT=json` on the `gina tail` process — every relayed line is written as one JSON object (`ts`, `level`, `bundle`, `message`, plus the `group`/`msg` aliases) instead of the coloured text. This is the JSON answer for a container that runs a framework daemon (`gina start`, then `gina bundle:start`, with `gina tail` as the foreground process): the daemon discards the bundle's own stdout once the bundle has started, so the tail relay is the only path a runtime line has to `kubectl logs`, and it must stay on — do not set `GINA_LOG_STDOUT=true` in that topology. The relay carries no request context, so `requestId` and `durationMs` are not present on these lines. (#B524)
13
+ ### Changed
14
+ * `self.getConfig()` — the bare form and `getConfig('name')` alike — now returns a per-call copy-on-write view of the configuration instead of a deep clone. Reads pass through to the shared configuration at no copy cost, a write lands in the view's own overlay (it never reaches the live configuration and no other call sees it), and the first enumeration of a node (`Object.keys`, `JSON.stringify`, `for…in`, spread) copies that subtree once. Every read, write and serialisation that worked on the clone works on the view. Measured on the profiling harness, a route behind a middleware pair whose constructors each read `this.getConfig()` went from 14,719 ms to 1,884 ms for 3,000 requests and the deep-clone share of its CPU from 72.9 % to 3.1 % — the bare form was deep-copying a 445 KB resolved configuration on a minimal scaffold, megabytes on a large bundle. Three things a deep clone allowed do not work on a node you have not enumerated yet: `structuredClone(result)` throws a `DataCloneError`, `Object.freeze` / `Object.seal` throw a `TypeError` (enumerate the parent first — the node is then a plain copy), and `console.log` / `util.inspect` show the shared values rather than your writes (property reads and `JSON.stringify` are truthful). A bundle whose code relies on one of them opts back into deep clones with the new `settings.json` key `controller.getConfig.mode: "clone"`. The view also preserves the configuration's `settings` / `content.settings` aliasing, which the clone silently broke. New library `lib/conf-view`, on the framework's lib registry as `confView` (`create()` / `isView()`). On the same per-request path, the router no longer deep-clones the whole routing map for every matched request: it shallow-copies the map and the matched rule — the only per-request write there is the replacement of that rule's `param`, and the middleware list the request consumes is already its own copy from the matcher — so every other rule is shared by reference; a large routing table stops paying a per-request deep copy, and nothing observable changes for a bundle. Pickup: a bundle restart; no re-bake. (#P40)
15
+ ### Fixed
16
+ * The default swig render path now renders through a per-bundle engine instead of the process-wide swig singleton, so one bundle's template root can no longer reach another bundle's `{% include %}` / `{% extends %}` resolution. `controller.js` stamped a per-bundle loader onto the shared engine with `swig.setDefaults({ loader })` once per render, and the render delegates then await before compiling — the same interleave window that produced the render-context bleed fixed alongside this. In merged-process mode (several bundles sharing one process and port) a concurrent bundle's stamp lands inside that window, so a resumed render resolves its layout and includes against the other bundle's templates root, or trips swig-core's outside-root refusal. Each template root now gets its own `new swig.Swig({ loader })` instance, keyed and owner-guarded exactly like the async delegate's registry, and `self.engine` points at it so a bundle's own `controllers/setup.js` filters register on the engine that actually renders it. A per-call `loader` passed to `swig.compile()` was measured to be incapable of fixing this: swig-core merges per-call options into a local that never leaves `parse`, while the parent-chain walk and `parseFile` read the instance loader unconditionally, and the include codegen carries only `resolveFrom`. The module-level `setDefaults` is deliberately kept, because the framework still compiles inline routing and asset strings through the module. No consumer was measured to be exposed: there is no supported CLI path to a shared port, and the one runtime measurement on record reports that sibling bundles are not served in merged mode at all, so this is a structural fix rather than a response to a reachable trigger. Pickup: a bundle restart; no re-bake. (#B514)
17
+ * The logger's opt-in `file` container is now an in-process transport, and writes. It connected to the MQ, received every log line and wrote nothing to disk: the filename was resolved from an argv-derived bundle list that is structurally always empty in a bundle process, because the framework splices `process.argv` down to `[node, appPath]` for every process loaded through the CLI. Fixing that exposed three further defects, each measured on a live daemon topology. Enabling the flow killed the framework daemon: the container dialled the MQ port at construction, that dial happens before the daemon binds its own listener, and the socket error handler called `process.exit(0)` — so `gina start` died before reporting itself ready, and a bundle started without a daemon exited with status 0 one second after boot (#B526). The MQ listener forwards every line to every file-writing session, so each process carrying the flow wrote every bundle's lines into one shared per-host file and built a full configuration for a bundle it is not, which crashed `gina bundle:start` (#B527). Several processes appending to one file each kept their own rotation state and size counter, so rotation raced and lost lines with no warning. The container now consumes the same in-process event the stdout container consumes and writes only the lines its own process logged, to a file named after the log group — one writer per file, no socket, and no daemon required, so it also works inside a container. Lines whose group is not a bundle, meaning the CLI's and the daemon's own output, are not filed, which is the guard the previous write path already applied. Records are written without ANSI escape sequences, and `GINA_LOG_FORMAT=json` is honoured (#B529). A failed open or write is reported once and retried rather than leaving the sink silently dead (#B530), and the container reports through the log flows instead of a raw stdout write that reached nobody under a daemon (#B528). (#B523)
18
+ * `gina-container` now applies the documented container logging preset itself. Unless `GINA_LOG_STDOUT` is already set, the launcher sets it to `true` before its own logger and the bundle initialise, so a bundle it runs emits JSON lines and skips the MQ transport — instead of writing ANSI-coloured text into the container stdout while two processes, the launcher and the bundle, keep dialling an MQ listener that cannot exist in that topology. Images synthesised by `gina image:build` inherit the change, since their entrypoint runs `gina-container`. Explicit values win: `GINA_LOG_FORMAT=text` keeps the coloured text with the dial still skipped, and `GINA_LOG_STDOUT=false` restores the previous behaviour in full. Bundles started through a framework daemon (`gina start` + `gina bundle:start`) are unaffected — there the MQ transport feeds `gina tail` and stays on. (#B524)
19
+ * The server-side `query` validation rule no longer writes into the shared `app.proxy` configuration. A `query` rule that targets another bundle (`check-user@otherbundle`) bound its request options straight to that bundle's proxy target inside the process-wide `app` config — the global two-argument `getConfig()` hands its result back by reference — then set `method` and `path` on it, and the framework's own query path added a `requestTimeout` taken from the calling route's `queryTimeout` before making its defensive copy. All three persisted for the life of the process. The consequential one is `requestTimeout`, because it is the key the framework reads back. Once a stale value sits on the shared target, the guard that fills it in (`typeof options.requestTimeout === 'undefined'`) can no longer fire, so a later live-check from a different route silently runs on the earlier route's deadline instead of its own — measured: a route asking for 9s governed by a polluted 1s, against an unpolluted control that correctly used its own. On HTTP/2 that does more than end the call early: the stream-timeout handler evicts and destroys the pooled session for that upstream — shared with every other request to the same authority, measured as one reused client object — and then re-issues the request up to three times. So one route's live-check could degrade traffic that never touched the rule. It only affects proxy targets that leave `requestTimeout` unset, and a timeout is always armed, so nothing hangs. A configured `path` prefix was overwritten too, and that is a documented `proxyTarget` property rather than a stray key — but it is worth being exact: no part of the framework consumes that value (the two other readers of the target overwrite it or ignore it, and nothing prepends it to an outgoing request), so its effect is on anything in your own code that reads the proxy configuration back. The rule now clones the proxy target before using it; nothing about the outgoing request changes. Present in every release that carries the rule (measured back to `0.3.7`). Pickup: a bundle restart AND a re-bake — measured by identity, `gina.min.js` changes while `gina.min.css` stays byte-identical. (#B522)
20
+ * `getRoute()` now hands a caller outside any request a boolean `route.isProxyHost` even when the process never set the proxied-context latch, so cloning that route no longer logs a `JSON.clone(...) possible error detected` warning, with a stack, for a value that was legitimately unset. On the server the proxied classification comes from the request store first and, for a req-less caller (boot, CLI, cron, a bundle's setup hook), from the `isProxyHost` context latch. The boot-time writer of that latch runs only when the project's proxy configuration resolved a record for the running scope and env, so a bundle whose `proxy.json` exists but carries no such record boots with the latch unset, and the fallback read returned `undefined`. Every consumer reads the flag by truthiness, so no behaviour hinged on it; the cost was the warning, which the framework's own test runs reproduce and which trains operators to ignore a diagnostic that is load-bearing elsewhere. The fallback now coerces to `false` — the idiom the sibling readers of the same latch already use — so a proxied route stays proxied, a request-scoped resolution is untouched, and the route matches its documented contract. Reach outside the framework's test runs is code-read rather than live-driven: an application calling `getRoute()` outside a request on such a bundle, then cloning the result. Pickup: a bundle restart; `lib/routing` ships in the browser bundle, so `gina.min.js` changes (measured by identity, `gina.min.css` byte-identical) — but the client branch never produced the value and the client-side clone never warned, so a re-bake changes bytes, not behaviour. (#B537)
21
+ * An error raised by the global `getConfig()` / `getLib()` helpers is now answered to the request whose call failed, rather than to whichever request was routed most recently. Those helpers resolve the response to write through a process-wide context slot that the router fills on every routed request and never clears. With one request in flight and another routed behind it, a callback resuming after an await found the later request's response there: it wrote its own failure to that client, and its own caller was never answered at all — the request simply hung until the caller's timeout, presenting as an upstream fault rather than an error. The incident reference added in the previous release made the diagnosis harder rather than easier here, because it derived the request identifier from the same wrong response, so the correlation line named a request that had nothing to do with the failure. Both now come from the per-request context the server establishes for every request on both engines, which follows the call across `await`; the process-wide slot remains only for callers that have no request context at all — boot, CLI, cron and workers — which is what it was there for. Pickup: a bundle restart. (#B534)
22
+ ### Security
23
+ * A response rendered on the default swig path no longer carries a concurrent request's context. The template filters `getUrl`, `getWebroot`, `t` and `tIcu` resolve per-request context through `getRenderCtx()`, which reads an AsyncLocalStorage store first and falls back to the process-wide `SwigFilters.instance._options` singleton — and that store was entered by the two `-async` render delegates alone, leaving every bundle on the DEFAULT path (the one taken unless a bundle opts into `settings.template.swig.loader`) resolving against the singleton. Both default delegates are themselves async and await between the per-request stamp of that singleton and the template invocation, unconditionally so on the layout read, so a concurrent request's stamp lands inside the window and the resumed render emits the other in-flight request's negotiated culture, webroot and proxy classification into its own response — the wrong language for a visitor, and absolute URLs built from a host the other client chose. Measured on a built `--env=prod` release: 50 of 50 concurrent request pairs served one response carrying the other request's context before the fix and 0 of 100 after, with a serialized control and a reused keep-alive connection reading clean throughout. Development mode masked it, because `lib/index.js` re-requires the filter module per request there and no singleton is shared. `controller.render-swig.js` and `controller.render-v1.js` now enter the same store the async delegates use, so the singleton remains only for callers outside a request, such as a bundle's own mail or cron renderer. Pickup: a bundle restart; no re-bake. (#B514)
24
+ * A completion that an emit-style entity method signals AFTER its call has settled is now discarded at the entity's `emit`, never buffered for the next caller. A method that emitted its completion trigger more than once per call — once per iteration of an internal loop, for instance — settled its caller on the first emit correctly, but every later emit reached the entity after the dispatcher had drained the queue and removed itself, so it took the legacy buffering path into `_arguments`; the NEXT detached (`util.promisify`-style) caller of that method then consumed the buffered entry as its own result, the caller after it too, and the buffer grew by one entry per surplus emit until the bundle restarted. Measured on a built `--env=prod` release: callers B and C both received A's record and `_arguments` read 2, 4, 6. Entity-context callers (`entity.method()` returning a Promise) were immune through their per-call clear, and development mode masked the defect entirely because its per-call clear runs on every wrapped call — a clean local reproduction is not evidence a deployment was unaffected. Where such a method reads a user-scoped record, an ownership check could pass on another principal's row. Every settle path now stamps the call's resolver, and the `emit` override treats a completion of an already-settled call as surplus: not buffered, and reported once per call at debug level as `DISPATCH:REPEAT_EMIT` when a method emits its completion a second time (one late completion after a Promise or timeout settle stays silent). `DISPATCH:NO_CONTEXT` now also fires when a completion reaches the entity outside any call's async context with nothing pending — that case used to log nothing, so a zero count was ambiguous. Numbered `<trigger>1`, `<trigger>2` loop variants are unaffected, and the dispatcher lifecycle is unchanged. Pickup: a bundle restart; no re-bake. (#B441)
25
+ * The framework's third `throwError` — the one behind the global `getConfig()` and `getLib()` helpers, reached when a configuration slice or a library cannot be resolved during a live request — no longer writes the error's full stack to the HTTP response, and now records the failure server-side. It used to answer in every scope with the raw stack in the `error` string — the framework's install path and version directory, the application's file paths and line numbers, the bundle, environment and library names — and emitted no log line at all, so an operator could neither see it happen nor search for past occurrences. It now does what the other two error builders have done since 0.5.24: a short incident `ref` is minted and returned as a top-level field on the JSON body, ONE full-detail line (message, stack, cause, request id) is logged before the response is written, keyed by that ref, and outside local scope the response carries the message line only. Local scope keeps the stack in the `error` string, as before, so the dev toolbar is unaffected; a relay-safe `ref` supplied on the error is honoured. The one-argument string form now reports the string instead of `undefined`, and the never-reachable HTML arm of this path is removed. Affects every release since `0.1.0`. Pickup: a bundle restart; no re-bake. (#B533)
26
+
9
27
  ## 0.6.29 - 2026-09-08
10
28
  ### Added
11
29
  * `bundle:build` and `project:build` gain an opt-in `--skip-unchanged` flag. A release whose bundle source is byte-identical to what it was built from keeps its copy: the build signs the source (the sha1 of every file's bytes and every symlink's target — timestamps do not count, so a fresh checkout or a plain `cp` does not invalidate, and a stat fast path off the previous marker keeps a stable-timestamp source to stats only), records the signature at the release root as `.gina-build.json`, and skips the wipe-and-copy when the marker matches. Everything else still runs: the manifest update, the fingerprint stamp, the `node_modules` link and both hooks. Any doubt rebuilds — no marker, a marker of another spec, a missing release, a changed, added or removed file, or an error while checking — and nothing changes without the flag; the first flagged build always copies. `--force` rebuilds anyway and still records the marker; `--dry-run` prints each release's decision and its reason without touching anything; `--format=json` emits one `{ project, scope, dryRun, skipUnchanged, releases[] }` envelope. The `postbuild` hook receives `GINA_BUILD_SKIPPED_BUNDLES` (the bundles whose every built env was skipped) and `GINA_BUILD_SKIPPED_ALL`, so a hook that bakes its own outputs can skip its own work. Not detected, by design: edits made directly inside a release, file mode changes, and the framework version (recorded in the marker for diagnostics only).
package/README.md CHANGED
@@ -66,29 +66,38 @@ open https://localhost:3100
66
66
 
67
67
  > **npm 12+** blocks install scripts by default, and gina's post-install bootstraps `~/.gina` and the framework dependencies. Install with `npm install -g gina@latest --allow-scripts=gina`, or allow it once for all global installs with `npm config set allow-scripts=gina --location=user`. (Not needed on npm ≤ 11.)
68
68
 
69
- ## What's in 0.6.29
69
+ ## What's in 0.6.30
70
70
 
71
- > **Restart your bundles *and* rebuild them.** Two of the fixes are
72
- > browser-bundled the field-error painter and the staged-upload preview slot
73
- > so `gina.min.js` changed and `gina bundle:restart` alone leaves the old client
74
- > running. Rebuild each consuming bundle, then restart.
71
+ > **Restart your bundles *and* rebuild them.** `lib/routing` and the validator's
72
+ > client half both ship in the browser bundle, so `gina.min.js` changed and
73
+ > `gina bundle:restart` alone leaves the old client running. Rebuild each
74
+ > consuming bundle, then restart.
75
75
 
76
- > **No settings reset.** `0.6.29` is a patch — the `shortVersion` stays `0.6`,
76
+ > **No settings reset.** `0.6.30` is a patch — the `shortVersion` stays `0.6`,
77
77
  > so your `~/.gina/0.6/settings.json` is untouched. (`0.6.0` was the reset.)
78
78
 
79
- **The right-destination release.** Four of the five changes are a value arriving
80
- somewhere it should not, or failing to arrive where it should: a failed query
81
- carrying its own result rows into every log that printed the error, a field
82
- error stopping on a control that could never display it, a staged upload posting
83
- the literal `[object Object]`, and a retina asset path cut in half at its `@`.
84
- The fifth is the opposite kind of change `bundle:build` learns to do nothing
85
- at all when there is nothing to do. Full detail in [CHANGELOG.md](./CHANGELOG.md).
86
-
87
- - **Security — a failed N1QL statement no longer carries its own result rows (#B509).** The couchbase connector placed the query service's whole response envelope — result documents included — on `error.stack` and `error.cause.http_body`, so a `RETURNING` statement that lost a CAS race, or a SELECT that timed out part-way, wrote the records it had already produced into any log that printed the error. The controller error path prints the stack in every scope, and a bare `console.error(err)` renders the cause, so there was no interception point for a bundle. Both now carry the envelope with `results` replaced by a row-count marker; `errors`, `requestID`, `status`, `signature` and the classifier's `first_error_code`/`retry` are unchanged, the SDK's own error object is copied rather than mutated, and a body the connector cannot parse is dropped rather than forwarded.
88
- - **Added`bundle:build` and `project:build` gain `--skip-unchanged`.** A release whose bundle source is byte-identical to what it was built from keeps its copy. The build signs the source — the sha1 of every file's bytes and every symlink's target, so timestamps do not count and a fresh checkout or a plain `cp` does not invalidate — records that signature at the release root as `.gina-build.json`, and skips the wipe-and-copy when it matches. Everything else still runs: the manifest update, the fingerprint stamp, the `node_modules` link and both hooks. Any doubt rebuilds, and nothing changes without the flag. `--force` rebuilds anyway and still records the marker, `--dry-run` prints each release's decision and its reason without touching anything, and the `postbuild` hook receives `GINA_BUILD_SKIPPED_BUNDLES` / `GINA_BUILD_SKIPPED_ALL` so a hook that bakes its own outputs can skip its own work.
89
- - **Fixed — a server-side field error reaches the visible control (#B510).** The client-side painter walked the form in document order and stopped on the first control whose name matched, whether or not it could paint it — and a bare `type="hidden"` control never can. So with the recommended shape for a control that must render disabled yet still post (a visible control plus a hidden twin carrying rule `"exclude": false`), a hidden twin listed first consumed the error: no message, no `aria-invalid`, and on a shared wrapper the error class was set with nothing inside it. A bare hidden control is now skipped when another control of the same name can be painted; a lone hidden one keeps the former behaviour, and one inside a `form-item-wrapper` is still painted after its wrapper.
90
- - **Fixed — a path-form `getUrl` route containing `@` no longer renders a 500 (#B511).** Both the swig and the nunjucks filter split every `@`-bearing route as `rule@bundle` before checking whether it was a path, so the retina-asset idiom the filter's own comment cites `'/assets/img/common/header@2x.png' | getUrl` — was cut at the `@`, failed the bundle lookup on the remainder and called `throwError(500)` mid-template, returning a 500 while the action's own render was discarded. A route with a leading `/` now bypasses the split on both engines. One consequence to know: a path-form route cannot name a bundle in-string (`'/x.png@web'`) — pass it as the filter's base argument (`| getUrl(null, 'web')`), which was already the working form and is unchanged.
91
- - **Fixeda staged upload no longer posts `[object Object]` (#B459).** The client writes one hidden input per metadata field into the real form, auto-creating any the form did not declare — and `preview`, whose value is an object rather than a string, was auto-created like the others, so a form declaring no `[preview][...]` sub-fields got a flat input that the fill loop string-coerced. Such a form now posts no `preview` field at all, matching the documented field set; the thumbnail still renders, and a form that declares the `[preview][location|uri|width|height]` sub-fields is unchanged — declaring them remains the way to persist the preview. Server code that keyed on the *presence* of a `preview` field for such forms should key on its value: it was garbage before and is absent now.
79
+ **The isolation release.** Most of what changed here is one piece of in-flight
80
+ work seeing another's state: a response rendered with a concurrent request's
81
+ language and webroot, a framework error answered to whichever request was routed
82
+ most recently, a later caller of an entity method handed an earlier call's
83
+ record, and one bundle's templates resolving against another bundle's root. Each
84
+ was invisible in development, because dev mode rebuilds per request what
85
+ production shares. Alongside them, `self.getConfig()` stops deep-copying the
86
+ resolved configuration on every call. Full detail in [CHANGELOG.md](./CHANGELOG.md).
87
+
88
+ - **Securitya rendered response no longer carries a concurrent request's context (#B514).** The `getUrl`, `getWebroot`, `t` and `tIcu` filters resolved per-request context through a process-wide singleton on the default render path, and both delegates await between stamping it and invoking the template. Measured on a built release: 50 of 50 concurrent pairs served one response carrying the other's negotiated culture and webroot before the fix, 0 of 100 after.
89
+ - **Security — a later caller no longer receives an earlier call's record (#B441).** An entity method that emitted its completion more than once per call buffered every surplus emit, and the next `util.promisify`-style caller consumed it as its own result. Where such a method reads a user-scoped record, an ownership check could pass on another principal's row. Development mode masked it entirely.
90
+ - **Security — a failed `getConfig()` / `getLib()` no longer writes its stack to the response (#B533).** The helper behind the implicit globals answered in every scope with the raw stack install path, application file paths and line numbers — and logged nothing. It now mints an incident `ref`, logs one full-detail line, and sends the message alone outside local scope.
91
+ - **Changed`self.getConfig()` returns a copy-on-write view (#P40).** Reads pass through to the shared configuration at no copy cost and writes land in the call's own overlay. A route behind two middlewares reading `this.getConfig()` went from 14,719 ms to 1,884 ms per 3,000 requests. `structuredClone`, `Object.freeze` and `util.inspect` behave differently on a node you have not enumerated; `controller.getConfig.mode: "clone"` opts back out.
92
+ - **Added — log rotation for the logger's opt-in `file` container.** On by default at 10MB with 5 files kept, the same shape as the kubelet's own limits. The live file is renamed and reopened rather than copied and truncated, so no line is lost while rotating.
93
+ - **Added — `gina tail` honours the logger's JSON render mode (#B524).** With `GINA_LOG_FORMAT=json` on the tail process, every relayed line is written as one JSON object — the JSON answer for a container running a framework daemon, where the tail relay is the only path a runtime line has to `kubectl logs`.
94
+ - **Fixed — the default swig path renders through a per-bundle engine (#B514).** One bundle's template root can no longer reach another's `include` / `extends` resolution, and `self.engine` now points at the engine that actually renders the bundle.
95
+ - **Fixed — a framework error is answered to the request that raised it (#B534).** The response came from a process-wide slot the router fills on every routed request and never clears, so a callback resuming after an `await` wrote its failure to a later request's client while its own caller hung until timeout.
96
+ - **Fixed — the `query` validation rule no longer writes into shared proxy config (#B522).** A rule targeting another bundle set `method`, `path` and a route-derived `requestTimeout` on the process-wide proxy target, so a later live-check from a different route silently ran on the earlier route's deadline — and on HTTP/2 the timeout destroys the pooled session shared with every other request to that authority.
97
+ - **Fixed — the logger's `file` container writes (#B523).** It connected to the MQ, received every line and wrote nothing; it is now an in-process transport writing only its own process's lines, needing no daemon.
98
+ - **Fixed — `gina-container` applies the container logging preset itself (#B524).** A bundle it runs emits JSON and skips the MQ transport, instead of writing coloured text while two processes dial a listener that cannot exist in that topology. Explicit values still win.
99
+ - **Fixed — a req-less `getRoute()` returns a boolean `isProxyHost` (#B537).** Cloning such a route no longer logs a warning, with a stack, for a value that was legitimately unset.
100
+
92
101
 
93
102
  ## Documentation
94
103
 
package/ROADMAP.md CHANGED
@@ -81,8 +81,9 @@ This roadmap covers planned features, architectural improvements, new connectors
81
81
  | **Q4 2026** | `0.6.27` ✅ | **Security**: Inspector payloads no longer leak across requests through the compiled-template cache — with `server.cache.enable` on and the Inspector block injected, automatic in dev and in production only when a controller calls `self.render(data, true)`, the `window.__ginaData` script was baked into the layout before swig compiled it, so the per-view compiled template and the persisted `.gina-layout-cache` file carried the FIRST request's page data — the controller's data, the session card, the environment — to every later request of that view, to other views compiled after it, and to every later process until the file was removed; the popin hidden inputs were a second pre-compile carrier and `/_gina/reveal` froze with them; the compiled layout now carries only an HTML-comment marker and both cache paths build the payload after the template executes, so a cache hit refreshes the Inspector sinks too, and a stale layout-cache file from an earlier release is healed in place on the next compile. **Changed**: two controller events fire less often now that the fluent `{onComplete}` handles deliver per call — `query#complete` is emitted on the controller only when nothing consumed the outcome, no callback and no `.onComplete()`, one tick after settlement, and `'uploaded'` is no longer emitted for the fluent `store(target).onComplete(cb)` form; neither had a documented listener; `query()` in callback form now returns `undefined` on every path instead of an unusable per-transport handle, and an explicit `null` callback selects the fluent form instead of throwing at delivery time. **Fixed**: the completion-handle release. `lib.archiver` settles each `compress()` and `decompress()` call on its own completion channel — every completion used to be signalled by emitting one fixed event name on the process-wide singleton, so two overlapping calls in one process, two queue consumers or a request handler beside a worker, both received whichever run finished first: the second caller was released early with the first run's archive path and its own archive was left at 0 bytes, and the array form kept its output stream in an implicit global so finishing one run closed another's; errors on the streams the library opens itself now reach the caller too, where an unreadable input used to either crash the process or hang the run forever, leaving a corrupt partial archive on disk. **Fixed**: the directory form of `compress()` no longer drops the first entry of the top-level directory — its walk seeded the work list from index 1, the author evidently expecting `.` first, which node's `readdir` never returns, so a directory holding a single file archived to an empty zip; the in-tree `project:backup` command uses the array form and was never affected. **Fixed**: the single-file form of `compress()` writes a real one-entry zip and `decompress()` reads every form back — it used to pipe the file through a gzip codec and write the result under the `.zip` name, which `unzip` and `decompress()` both rejected, while `method: 'br'` and `'deflate'` were accepted by the option validator and silently produced that same gzip; the bytes change from a gzip member to a DEFLATE zip, so anything that gunzipped the output directly must now read it as a zip, `method` validates against `gzip` alone again, and an input whose path carries a dot-prefixed segment, a `.env` or anything under `~/.config/`, is archived instead of being skipped with a false success, an empty zip and two leaked descriptors. **Fixed**: the fluent `.onComplete()` handles of `self.query()` and `self.store()` deliver to their own call — both registered the application callback on the controller instance's shared EventEmitter, so a second `store()` on the same controller re-invoked every earlier callback with the later result, and a concurrent fluent query evicted the first one: its callback never fired, the survivor could receive the other call's payload and the evicted response was emitted to nobody, on both transports with no log line; the synchronous failure paths of `query()` also returned `emit()`'s boolean instead of the handle, so chaining `.onComplete` threw `TypeError` and the error was lost; `query()` now mints one delivery channel per call and returns the handle on every path, with the delivered shapes unchanged. **Fixed**: a `self.query()` issued while the controller is rendering from another required controller now settles — the guard that refuses it once a second render has been entered, the state `requireController` produces because the required controller shares the caller's options object, returned the literal `false` and delivered nothing, so the callback form never fired and the fluent chain threw `TypeError` on the boolean; the refusal now rides the per-call channel as a coded `NESTED_RENDER` error and the upstream is still never contacted. **Fixed**: FormValidator reacts to a browser or password-manager autofill — a fill lands without any keystroke, and on Chrome without an `input` or `change` event until a later gesture, so the live check never re-ran: the submit control kept the gated look it was given at bind time on a form the user could see was complete, and an autofilled invalid value showed no error; the default stylesheet now gives every autofilled control a 1ms keyframe and the validator routes the resulting `animationstart` into the field's own live check, while a value the browser still withholds from script no longer counts against the gate and renders no false required error. **Fixed**: FormValidator tells the truth about a field the browser autofilled but still withholds from script at submit time — visibly filled yet reading empty to script, it is correctly refused, but the message rendered was the plain required label, naming a problem the user could not see; a new built-in label key `isRequiredAutofill` covers that one case with the verdict, the `errors` key and the submit gate all unchanged, the control is marked `data-gina-form-autofill-withheld` as a styling hook, and the key is alias-filled from an app-supplied `isRequired` label so a localized catalog keeps its own wording until it translates the new key. Restart **and** rebuild your bundles — the browser bundle changed (the two FormValidator autofill fixes ride `gina.min.js` and `gina.min.css`). |
82
82
  | **Q4 2026** | `0.6.28` ✅ | **Security**: absolute URLs built by an application-level `getRoute().toUrl()` no longer inherit another request's proxy context — after a single request carrying a port-less `Host` (an orchestrator probe, a sibling-bundle call) reached a worker, every later direct request on it built URLs from a worker-global, dropping the port on HTTP/1.1 and emitting the *last port-less client's host* verbatim on HTTP/2 + HTTPS, which is a host-header-injection class for application-built links and redirects; the proxied classification and proxy hostname now resolve from the request itself, and on earlier versions `server.proxy.requireForwardedHeaders` closes the port-less-`Host` path only. **Added**: `self.forward()` relays a `multipart/form-data` request, uploads included, through a new RFC 7578 encoder and a raw-body pass-through, bounded by the source bundle's upload cap (413 on breach, 400 for a body-less method). **Fixed**: `self.forward()` forwards to the route it resolves instead of the target bundle's webroot alone; the browser client no longer stays half-booted on a light page or inside a cross-origin iframe; the HTTP/2 `rel=preload` header is sent on every response rather than only the first per view; the automatic 103 Early Hints response fires at all; the Inspector View tab shows its assets map again; a custom error page carries its preloads and its external plugins; a retried HTTP/1 request goes out with its body; the fluent `.onComplete()` handles of `query()`, `store()`, `run()` and `Shell::run()` refuse a callback they cannot call, and the dead one on entity method objects is removed; `{% extends %}` extraction stops at its own directive and tolerates the layout being named ahead of it; `POST /_gina/maintenance` refuses an invalid `ttlSeconds` instead of arming an unbounded window. Restart your bundles **and rebuild them** — three of the fixes are browser-bundled. |
83
83
  | **Q4 2026** | `0.6.29` ✅ | **Security**: a failed Couchbase N1QL statement no longer carries its own result rows into the error it raises — the connector put the query service's whole response envelope, result documents included, on `error.stack` and `error.cause.http_body`, so a `RETURNING` statement that lost a CAS race or a SELECT that timed out part-way wrote the records it had already produced into any log that printed the error, with no interception point for a bundle; both now carry the envelope with `results` replaced by a row-count marker, while `errors`, `requestID`, `status`, `signature` and the classifier's `first_error_code`/`retry` are unchanged. **Added**: `bundle:build` and `project:build` gain an opt-in `--skip-unchanged` — a release whose source is byte-identical to what it was built from keeps its copy, signed by content rather than timestamps and recorded as `.gina-build.json`, with the manifest update, fingerprint stamp, `node_modules` link and both hooks still running and any doubt rebuilding. **Fixed**: a server-side field error reaches the visible control when a hidden twin of the same name comes first in document order; a path-form `getUrl` route containing `@` — the retina-asset idiom — no longer renders a 500 on either template engine; a staged upload no longer posts the literal `[object Object]` into a form that declares no `[preview][...]` sub-fields. Restart your bundles **and rebuild them** — two of the fixes are browser-bundled. |
84
+ | **Q4 2026** | `0.6.30` ✅ | **Security**: the isolation release — a response rendered on the default swig path no longer carries a concurrent request's negotiated culture and webroot (50 of 50 concurrent pairs bled before the fix, 0 of 100 after); a later `util.promisify`-style caller of an entity method no longer receives an earlier call's record, which where the method reads a user-scoped row could pass an ownership check on another principal's data; and the error raised by the global `getConfig()` / `getLib()` helpers no longer writes its stack to the response, minting an incident `ref` and logging one full-detail line instead. **Changed**: `self.getConfig()` returns a per-call copy-on-write view of the configuration instead of a deep clone — reads pass through, your writes stay yours, and a route behind two middlewares reading `this.getConfig()` measured 14,719 ms → 1,884 ms per 3,000 requests. **Added**: log rotation for the logger's opt-in `file` container, and `gina tail` renders JSON when its logger's format is `json`. **Fixed**: bundle templates render through a per-bundle engine; a framework error is answered to the request that raised it rather than the most recently routed one; the server-side `query` validation rule no longer writes into the shared proxy configuration; the `file` container writes at all; and `gina-container` applies the container logging preset itself. |
84
85
  | **Q1 2027** | `0.6.x` | HTTP/2 priorities (blocked on Node scheduler hooks) · Beemaster admin + visual translation editor |
85
- | **2027** | `0.7.0` | Performance — remaining measure-gated candidates: multipart & WebSocket fast paths, render/log cleanups, SIMD scanner (the render-path deep-clone & id-mint reduction shipped early in `0.6.2` with a measured 4.4× render-throughput gain; the profiling baseline itself also shipped in `0.6.2`) |
86
+ | **2027** | `0.7.0` | Performance — remaining measure-gated candidates: multipart & WebSocket fast paths, render/log cleanups, SIMD scanner (the render-path deep-clone & id-mint reduction shipped early in `0.6.2` with a measured 4.4× render-throughput gain; the profiling baseline itself also shipped in `0.6.2`; the per-request configuration view — `getConfig()` without the deep clone — landed for the next `0.6.x` cut) |
86
87
  | **2027** | `0.8.0` | Financial-messaging foundations — XML request/response handling · pluggable message-schema validation · IBAN/BIC validation rules · money & ISO 4217 minor-unit utilities · idempotency keys |
87
88
  | **2027** | `0.9.0` | Financial-integration heavyweights — entity-layer datastore transaction seam · message-queue connector family (AMQP / Kafka / IBM MQ) |
88
89
  | **Q3 2027** | `1.0.0` | First stable release — Windows alpha compatibility is a hard gate |
@@ -25,6 +25,11 @@
25
25
  * GINA_SHUTDOWN_TIMEOUT — graceful drain window in ms (default: 10000)
26
26
  * NODE_ENV — override project def_env
27
27
  * NODE_SCOPE — override project def_scope
28
+ * GINA_LOG_STDOUT — container logging preset. Applied as `true` by this
29
+ * launcher when unset (JSON lines, MQ transport skipped —
30
+ * see step 0b). Set it to `false` to keep the transport.
31
+ * GINA_LOG_FORMAT — json|text — the explicit output-format override; it
32
+ * wins over the preset for the format only
28
33
  */
29
34
 
30
35
  var fs = require('fs');
@@ -56,6 +61,24 @@ function out(msg) {
56
61
  try { fs.writeSync(1, msg); } catch (e) { /* stdout gone — nothing better to do */ }
57
62
  }
58
63
 
64
+ // ── 0b. Container logging preset (#B524) ─────────────────────────────────────
65
+ // This launcher runs a topology with NO framework daemon by construction (see the
66
+ // header), so the logger's default `mq` flow would dial an MQ listener that cannot
67
+ // exist — once from this process, once from the bundle — and the `default` flow
68
+ // would write ANSI-coloured text into a log collector's pipe. `GINA_LOG_STDOUT=true`
69
+ // is the documented container preset (JSON lines, MQ transport skipped): apply it
70
+ // here unless the operator set the variable explicitly. It MUST be a raw
71
+ // `process.env` write — the logger reads `process.env` at init, while `setEnvVar()`
72
+ // populates `process.gina`, which the logger never reads — and it MUST precede the
73
+ // utils/helper require below, which initialises this process's own logger; the
74
+ // bundle child inherits `process.env` through the spawn in step 8. `GINA_LOG_FORMAT`
75
+ // is deliberately untouched: it is the independent format override
76
+ // (`GINA_LOG_FORMAT=text` keeps the coloured text while the dial stays skipped), and
77
+ // `GINA_LOG_STDOUT=false` restores the pre-0.6.30 behaviour in full.
78
+ if (typeof(process.env.GINA_LOG_STDOUT) == 'undefined') {
79
+ process.env.GINA_LOG_STDOUT = 'true';
80
+ }
81
+
59
82
  // ── 1. Bootstrap utils/helper ─────────────────────────────────────────────────
60
83
  // Injects globals: _, setEnvVar, getEnvVar, getUserHome, getTmpDir, etc.
61
84
  require(ginaPath + '/utils/helper'); // jshint ignore:line
@@ -0,0 +1 @@
1
+ 0.6.30
@@ -4106,11 +4106,19 @@ function FormValidatorUtil(data, $fields, xhrOptions, fieldsSet, culture) {
4106
4106
  var attr = options.url.split(/@/);
4107
4107
  rule = attr[0];
4108
4108
  bundle = attr[1];
4109
- var proxyConf = getConfig( currentBundle, 'app' ).proxy;
4110
4109
  try {
4111
4110
  if (config.bundle !== bundle) { // ignore if same bundle
4112
4111
  // getting proxy conf when available
4113
- opt = getConfig( currentBundle, 'app' ).proxy[bundle];
4112
+ // #B522 — clone. The GLOBAL two-argument getConfig() hands back the
4113
+ // bundle's `app` conf BY REFERENCE, so the `opt.method` / `opt.path`
4114
+ // writes further down — and the `requestTimeout` controller.query()
4115
+ // adds to the caller's object before its own defensive copy — used to
4116
+ // persist on the shared content.app.proxy[<bundle>] for the whole
4117
+ // process lifetime. `path` and `requestTimeout` are documented
4118
+ // proxyTarget properties, so that clobbered configured values for
4119
+ // every other reader of this conf, not merely added stray keys.
4120
+ // opt = getConfig( currentBundle, 'app' ).proxy[bundle];
4121
+ opt = JSON.clone( getConfig( currentBundle, 'app' ).proxy[bundle] );
4114
4122
  }
4115
4123
  } catch (proxyError) {
4116
4124
  throw new Error('Could not retrieve `proxy` configuration for bundle `'+ bundle +'`. Please check your `/config/app.json`.\n'+proxyError.stack);
@@ -7078,7 +7086,9 @@ function Routing() {
7078
7086
  * store that server.js handle() establishes for every request, so a direct
7079
7087
  * request builds direct URLs even after a port-less-Host request has written
7080
7088
  * the worker global. Only a req-less caller (boot, CLI, cron — no store) falls
7081
- * back to the getContext('isProxyHost') latch and the worker global with an
7089
+ * back to the getContext('isProxyHost') latch read as `false` when the latch
7090
+ * was never set (#B537), so route.isProxyHost is always a boolean — and the
7091
+ * worker global with an
7082
7092
  * envConf fallback; when neither holds a value the route degrades to its direct
7083
7093
  * hostname (route.isProxyHost is flipped false) instead of failing, and a
7084
7094
  * once-per-process warning is emitted.
@@ -7117,7 +7127,13 @@ function Routing() {
7117
7127
  // from another request's host.
7118
7128
  var _reqStore = ( process.gina && process.gina._reqALS ) ? process.gina._reqALS.getStore() : null;
7119
7129
  _stProxy = ( _reqStore && _reqStore.proxy ) ? _reqStore.proxy : null;
7120
- isProxyHost = ( _stProxy ) ? _stProxy.isProxyHost : getContext('isProxyHost');
7130
+ // #B537 a req-less caller on a process that never set the latch (the
7131
+ // boot-time writer runs only when the proxy configuration resolved a
7132
+ // record for the running scope and env) read `undefined` here, so the
7133
+ // route carried a non-boolean isProxyHost that JSON.clone then flagged
7134
+ // as an authoring error on every clone. Coerce with the `|| false` idiom
7135
+ // the sibling readers of this latch use: the flag is always a boolean.
7136
+ isProxyHost = ( _stProxy ) ? _stProxy.isProxyHost : ( getContext('isProxyHost') || false );
7121
7137
  }
7122
7138
 
7123
7139
  var env = config.env || GINA_ENV // by default, takes the current bundle
@@ -78,7 +78,7 @@ let Ia=[],Pa=ba.match(/^([A-Za-z_$][\w$]*)/);if(!Pa)throw Error('Invalid propert
78
78
  'undefined'&&delete e[ja.name].query[ja.value];var B=ja.target.id||ja.target.getAttribute('id');console.debug('prematurely completed event `asyncCompleted.'+B+'`');return triggerEvent(gina,ja.target,'asyncCompleted.'+B,m[ja.name])}catch(Z){return mb(Z)}};Oa&&(Oa.onerror=function(Ha,sb){try{var ib={status:Oa.status,error:'Transaction error: might be due to the server CORS settings.\nPlease, check the console for more details.'};console.debug('query error [2] detected !! ',sb,'Transaction error: might be due to the server CORS settings.\nPlease, check the console for more details.');
79
79
  isOnException=!0;ib=this.responseText;var Eb=this.getResponseHeader('Content-Type');if(/\/json/.test(Eb))ib=JSON.parse(this.responseText),typeof ib.status=='undefined'&&(ib.status=this.status);else if(ib={status:Oa.status,message:''},/^(\{|\[)/.test(Oa.responseText))try{ib=G(ib,JSON.parse(Oa.responseText))}catch(Hb){ib=G(ib,Hb)}return yb(ib)}catch(Hb){return mb(Hb)}},Oa.onload=function(){try{db=this.responseText;var Ha=this.getResponseHeader('Content-Type');if(/\/json/.test(Ha))db=JSON.parse(this.responseText),
80
80
  typeof db.status=='undefined'&&(db.status=this.status);else if(db={status:Oa.status,message:''},/^(\{|\[)/.test(Oa.responseText))try{db=G(db,JSON.parse(Oa.responseText))}catch(sb){db=G(db,sb)}return yb(db)}catch(sb){return mb(sb)}},ja.target&&ja.target.dataset&&(ja.target.dataset.ginaFormValidatorQueryPending=ja.value),g?Oa.send(ha):Oa.send())}else{console.debug('stopping on errors ...');var zb=this.target,gb=this.name;queueMicrotask(function(){triggerEvent(gina,zb,'asyncCompleted.'+Fa,m[gb])})}};
81
- A=async function(Q,X,ha,Fa){var N=(new (require(_(GINA_FRAMEWORK_DIR+'/core/config.js',!0)))).getInstance(),P=null,ia=null,da=null,va=getContext('bundle');if(/@/.test(Q.url)){var Ja=Q.url.split(/@/);ia=Ja[0];da=Ja[1];getConfig(va,'app');try{N.bundle!==da&&(P=getConfig(va,'app').proxy[da])}catch(Ma){throw Error('Could not retrieve `proxy` configuration for bundle `'+da+'`. Please check your `/config/app.json`.\n'+Ma.stack);}Ja=null}else throw Error('external url/domain not handled at this moment, please contact us if you need support for it.');
81
+ A=async function(Q,X,ha,Fa){var N=(new (require(_(GINA_FRAMEWORK_DIR+'/core/config.js',!0)))).getInstance(),P=null,ia=null,da=null,va=getContext('bundle');if(/@/.test(Q.url)){var Ja=Q.url.split(/@/);ia=Ja[0];da=Ja[1];try{N.bundle!==da&&(P=JSON.clone(getConfig(va,'app').proxy[da]))}catch(Ma){throw Error('Could not retrieve `proxy` configuration for bundle `'+da+'`. Please check your `/config/app.json`.\n'+Ma.stack);}Ja=null}else throw Error('external url/domain not handled at this moment, please contact us if you need support for it.');
82
82
  Ja=JSON.clone(p.getRoute(Q.url,Q.data));var ma=N[da][N.env],Oa=ma.content.server;typeof Oa._cached=='undefined'&&(Oa._cached=new Map);typeof Oa._cachedPath=='undefined'&&(Oa._cachePath=Oa.cache.path);typeof Oa._cacheIsEnabled=='undefined'&&(Oa._cacheIsEnabled=Oa.cache.enable);P||(N.bundle==da&&(P=getConfig(va,'settings').server.credentials,Q.ca=P.ca||null,Q.hostname=ma.server.scheme+'://'+ma.host,Q.port=ma.port[ma.server.protocol][ma.server.scheme],Q.protocol=ma.server.protocol,Q.rejectUnauthorized=
83
83
  !1),P={ca:Q.ca,hostname:Q.hostname,port:Q.port,path:Q.path},typeof Q.protocol!='undefined'&&(P.protocol=Q.protocol),typeof Q.rejectUnauthorized!='undefined'&&(P.rejectUnauthorized=Q.rejectUnauthorized));ia={method:Ja.method,requirements:Ja.requirements,namespace:Ja.namespace||void 0,url:decodeURI(Ja.url),rule:ia+'@'+da,param:JSON.clone(Ja.param),middleware:JSON.clone(Ja.middleware),bundle:Ja.bundle,isXMLRequest:X.isXMLRequest,isWithCredentials:X.isWithCredentials};da=ia.rule.replace('@'+da,'')||'_common';
84
84
  da={template:typeof ma.content.templates!='undefined'?ma.content.templates[da]||ma.content.templates._common:void 0,isCacheless:ma.isCacheless};da=G(da,ia);ma=JSON.clone(ma);da.conf=ma;da.conf.content.routing[da.rule].param=ia.param;da.template&&typeof da.template.ginaLoader=='undefined'&&(da.template.ginaLoader=da.conf.content.templates._common.ginaLoader);da.conf.content.routing[da.rule].param=ia.param;delete da.middleware;delete da.param;delete da.requirements;ma=new (require(_(GINA_FRAMEWORK_DIR+
@@ -139,7 +139,7 @@ w=(new RegExp(y.requirements[C])).test(u),w)m[oa[0].substring(1)]=u;else return!
139
139
  'undefined'&&typeof u[l]!='undefined'){var oa=new RegExp('(:'+l+'/|:'+l+'$)','g');typeof q.param.path!='undefined'&&/:/.test(q.param.path)&&(q.param.path=q.param.path.replace(oa,u[l]));typeof q.param.title!='undefined'&&/:/.test(q.param.title)&&(q.param.title=q.param.title.replace(oa,u[l]));typeof q.param.namespace!='undefined'&&/:/.test(q.param.namespace)&&(q.param.namespace=q.param.namespace.replace(oa,u[l]));typeof q.param.file!='undefined'&&/:/.test(q.param.file)&&(p.variable=u[l],q.param.file=
140
140
  q.param.file.replace(oa,p));if(/,/.test(q.url)){y=q.url.split(/,/g);var w=0;for(k=y.length;w<k;++w)p.variable=u[l],y[w]=y[w].replace(oa,p);q.url=y.join(',')}else p.variable=u[l],q.url=q.url.replace(oa,p)}}if(y){w=0;k=y.length;na=na.split(/,/g);var x=0;for(q.urlIndex=0;w<k;++w)if(y=0,oa=na[0].match(/:[-_a-z0-9]+/ig)){S=0;for(l=oa.length;S<l;S++){var C=oa[S].substring(1);typeof u[C]!='undefined'&&u[C]&&y++}y>x&&(x=y,q.urlIndex=w)}}return q},T=!1;v.getRoute=function(q,u,y){var k=null,na=!1,S=null;if(g)window.location.port||
141
141
  window.location.hostname!=window.gina.config.hostname.replace(/^(https|http|wss|ws):\/\//,'').replace(/:\d+$/,'')||(na=!0,window.gina.config.hostname=window.gina.config.hostname.replace(/^(https|http|wss|ws):\/\//,'').replace(/:\d+$/,'')),k=window.gina.config;else{k=getContext('gina').config;typeof getContext('argvFilename')!='undefined'&&(k.getRouting=getContext('gina').Config.instance.getRouting);var l=process.gina&&process.gina._reqALS?process.gina._reqALS.getStore():null;na=(S=l&&l.proxy?l.proxy:
142
- null)?S.isProxyHost:getContext('isProxyHost')}var oa=k.env||GINA_ENV,w=null;l=k.bundle;/@/.test(q)||typeof l=='undefined'||l==null||(q=q.toLowerCase(),q+='@'+l);if(/@/.test(q)){var x=q.replace(/(.*):\/\//,'').split(/@/);l=x[1];/\/(.*)$/.test(q)&&(w=q.replace(/(.*):\/\//,'').split(/\/(.*)$/)[1],l=l.replace(/\/(.*)$/,''),oa=w||oa);q=x[0].toLowerCase()+'@'+l}w=k.getRouting(l,oa);if(!w)throw Error('[ RoutingHelper::getRoute(rule, params) ] : bundle `'+l+'` has no routing table for rule `'+q+'` (client: routing config not loaded yet, or empty)');
142
+ null)?S.isProxyHost:getContext('isProxyHost')||!1}var oa=k.env||GINA_ENV,w=null;l=k.bundle;/@/.test(q)||typeof l=='undefined'||l==null||(q=q.toLowerCase(),q+='@'+l);if(/@/.test(q)){var x=q.replace(/(.*):\/\//,'').split(/@/);l=x[1];/\/(.*)$/.test(q)&&(w=q.replace(/(.*):\/\//,'').split(/\/(.*)$/)[1],l=l.replace(/\/(.*)$/,''),oa=w||oa);q=x[0].toLowerCase()+'@'+l}w=k.getRouting(l,oa);if(!w)throw Error('[ RoutingHelper::getRoute(rule, params) ] : bundle `'+l+'` has no routing table for rule `'+q+'` (client: routing config not loaded yet, or empty)');
143
143
  if(typeof w[q]=='undefined')throw Error('[ RoutingHelper::getRouting(rule, params) ] : `'+q+'` not found ! (bundle `'+l+'` holds '+Object.keys(w).length+' rules)');l=JSON.clone(w[q]);x=null;l=A(l,u);(l.isProxyHost=na)?(l.proxy_hostname=g?window.location.protocol+'//'+document.location.hostname:S&&S.proxyHostname||process.gina.PROXY_HOSTNAME||k.envConf._proxyHostname,l.proxy_hostname?l.proxy_host=l.proxy_hostname.replace(/^(https|http):\/\//,''):(delete l.proxy_hostname,l.isProxyHost=!1,T||(T=!0,console.warn('[ RoutingHelper::getRoute() ] Proxied context is active but no proxy hostname is resolvable (worker global and envConf fallback both unset) - falling back to the route direct hostname. Warned once per process.')))):
144
144
  !g&&typeof process.gina.PROXY_HOSTNAME!='undefined'&&process.gina.PROXY_HOSTNAME&&(l.proxy_hostname=process.gina.PROXY_HOSTNAME,l.proxy_host=l.proxy_hostname.replace(/^(https|http):\/\//,''),console.debug('[getRoute#2]['+na+'] process.gina.PROXY_HOSTNAME ('+process.gina.PROXY_HOSTNAME+') VS config.envConf._proxyHostname ('+k.envConf._proxyHostname+')'));/,/.test(l.url)&&(typeof l.urlIndex!='undefined'&&(y=l.urlIndex,delete l.urlIndex),y=typeof y!='undefined'?y:0,l.url=l.url.split(/,/g)[y]);/\/$/.test(l.url)&&
145
145
  l.url!='/'&&(l.url=l.url.substring(0,l.url.length-1));if(/GET/i.test(l.method)&&typeof u!='undefined'){y='?';k=w[q].url;na=[];S=0;for(let C in l.param)v.reservedParams.indexOf(C)>-1||(new RegExp(l.param[C])).test(k)||typeof u[C]=='undefined'||(y+=C+'='+encodeRFC5987ValueChars(u[C])+'&',na[S]=u[C],++S);for(let C in u)v.reservedParams.indexOf(C)>-1||l.requirements&&typeof l.requirements[C]!='undefined'||na.indexOf(C)>-1||(y=typeof u[C]=='object'?y+(C+'='+encodeRFC5987ValueChars(JSON.stringify(u[C]))+
@@ -119,6 +119,185 @@ var routingLib = lib.routing;
119
119
  // already-loaded instance without re-running the resolver. Falls back to
120
120
  // require('@rhinostone/swig') when no bundle has loaded yet (tests, etc).
121
121
  var swig = lib.swigResolver.get();
122
+
123
+ /**
124
+ * #B535 — bridge a per-bundle engine's registration setters to the module.
125
+ *
126
+ * swig-core's `install()` gives every `new Swig()` instance FRESH filter, tag
127
+ * and extension maps — copied from the frontend's built-in library, NOT from
128
+ * the module's runtime registrations — and keeps them closure-private
129
+ * afterwards (measured: a filter registered on the module before OR after
130
+ * construction never reaches an instance, and vice versa). So once #B514
131
+ * pointed `self.engine` at a per-bundle instance, every filter a bundle's
132
+ * `controllers/setup.js` registered through `this.engine.setFilter()` — and
133
+ * every gina filter the render delegates register per request — stopped
134
+ * reaching any compile made through the MODULE: an application's own
135
+ * `require('@rhinostone/swig').compile()` (an entity compiling a message
136
+ * outside any request), and gina's own `core/server.js` asset-URL compile.
137
+ * On 0.6.29 they all landed on the module because `self.engine` WAS the module.
138
+ *
139
+ * The maps cannot be copied out later, so the reach is restored where it is
140
+ * lost: each setter registers on the instance first (its own validation throws
141
+ * before the module is touched), then on the module. The instance keeps its
142
+ * OWN options — in particular its loader — so #B514's include/extends
143
+ * isolation is untouched; only the registration maps are shared again, which
144
+ * is exactly the state every released version had. The reverse direction
145
+ * (module → instance) is not bridged: registering anywhere other than through
146
+ * `this.engine` in `setup.js` is documented as unsupported.
147
+ *
148
+ * Idempotent per (instance, module): a second call is a no-op, and the
149
+ * owner-guard rebuild in `getDefaultSwigEngine` bridges each fresh instance.
150
+ *
151
+ * @inner
152
+ * @param {*} engine - A per-bundle `new swigMod.Swig()` instance
153
+ * @param {*} swigMod - The resolved swig module the instance was built from
154
+ * @returns {*} the same instance, its three setters bridged
155
+ *
156
+ * @example
157
+ * var engine = bridgeRegistrationsToModule(new swig.Swig(opts), swig);
158
+ * engine.setFilter('stamp', fn); // visible to engine.compile() AND swig.compile()
159
+ */
160
+ function bridgeRegistrationsToModule(engine, swigMod) {
161
+ if (engine._ginaModuleBridge === swigMod) {
162
+ return engine;
163
+ }
164
+ var _setFilter = engine.setFilter;
165
+ var _setTag = engine.setTag;
166
+ var _setExtension = engine.setExtension;
167
+ engine.setFilter = function (name, method) {
168
+ var result = _setFilter.apply(engine, arguments);
169
+ swigMod.setFilter(name, method);
170
+ return result;
171
+ };
172
+ engine.setTag = function (name, parse, compile, ends, blockLevel) {
173
+ var result = _setTag.apply(engine, arguments);
174
+ swigMod.setTag(name, parse, compile, ends, blockLevel);
175
+ return result;
176
+ };
177
+ engine.setExtension = function (name, object) {
178
+ var result = _setExtension.apply(engine, arguments);
179
+ swigMod.setExtension(name, object);
180
+ return result;
181
+ };
182
+ engine._ginaModuleBridge = swigMod;
183
+ return engine;
184
+ }
185
+
186
+ /**
187
+ * #B538 — give a per-bundle engine the `getOptions()` accessor the module
188
+ * carries, so `self.engine.getOptions()` keeps working now that `self.engine`
189
+ * is the instance.
190
+ *
191
+ * The constructor below installs `swig.getOptions` on the MODULE once per
192
+ * request — a closure over that request's `local._swigOptions` — and until
193
+ * #B514 `self.engine` WAS the module, so the documented call shape
194
+ * `self.engine.compile(tpl, self.engine.getOptions())(data)` resolved. #B514
195
+ * pointed `self.engine` at a per-bundle instance, which never received the
196
+ * accessor, and the #B535 bridge carries registrations, not methods. That is
197
+ * the whole defect: `TypeError: self.engine.getOptions is not a function`,
198
+ * thrown on the accessor before any compile — and inside an async controller
199
+ * callback it surfaces as an unhandled rejection that leaves the request
200
+ * unanswered until the caller's own stream timeout, which reads as a proxy
201
+ * fault rather than a render fault.
202
+ *
203
+ * The accessor cannot simply be copied from the module: that closure is
204
+ * per-REQUEST and the instance is per-BUNDLE, shared by every request to the
205
+ * bundle, so assigning it here would be the cross-request-bleed shape. The
206
+ * instance instead reports what IT was built with: `opts` is snapshotted ONCE
207
+ * at mint (per-bundle lifetime, matching the instance — measured: neither
208
+ * `new Swig(opts)` nor `setDefaults(opts)` mutates the object handed in, so
209
+ * the snapshot equals the pre-`setDefaults` clone every released version
210
+ * returned), and every call hands back a fresh `JSON.clone` of it. The
211
+ * per-call copy is a strict hardening over 0.6.29, which returned the same
212
+ * object by reference on every call: a caller can no longer corrupt the
213
+ * engine, or the next caller, by mutating the result. `JSON.clone` is gina's
214
+ * own deep copy and preserves the loader's functions — the copy is a working
215
+ * loader — which matters because swig-core validates a per-call loader and
216
+ * refuses a bare `{}`. Handing the result back to `compile()` is a no-op
217
+ * relative to calling `compile()` with no options (measured: identical
218
+ * output, with a differing option as the control), so the round-trip is
219
+ * supported for compatibility, never required.
220
+ *
221
+ * Not touched: the module-side `swig.getOptions` (still assigned per request
222
+ * below; `core/server.js` reads it for its inline routing/asset compiles),
223
+ * and the no-template-root fallback, where `self.engine` is the module and
224
+ * the accessor was never lost.
225
+ *
226
+ * @inner
227
+ * @param {*} engine - A per-bundle `new swigMod.Swig()` instance
228
+ * @param {object} opts - The options it was built with (`{ autoescape, cache, loader }`)
229
+ * @returns {*} the same instance, `getOptions()` attached
230
+ *
231
+ * @example
232
+ * var engine = exposeOptionsOnEngine(new swig.Swig(opts), opts);
233
+ * engine.compile(tpl, engine.getOptions())(data); // the documented call shape
234
+ */
235
+ function exposeOptionsOnEngine(engine, opts) {
236
+ var snapshot = JSON.clone(opts);
237
+ engine.getOptions = function () {
238
+ return JSON.clone(snapshot);
239
+ };
240
+ return engine;
241
+ }
242
+
243
+ /**
244
+ * Per-bundle swig ENGINE for the DEFAULT render path, keyed on the bundle
245
+ * template root. Mirrors `controller.render-swig-async.js`'s `_swigEngines`
246
+ * registry, for the same reason and with the same owner guard.
247
+ *
248
+ * #B514 sibling limb — `swig.setDefaults({ loader })` below stamps a loader on
249
+ * the PROCESS SINGLETON once per render, and the delegates then await before
250
+ * compiling. In merged-process mode (several bundles, one process) a concurrent
251
+ * bundle's stamp lands in that window and `{% include %}` / `{% extends %}`
252
+ * resolve against the OTHER bundle's templates root — or trip swig-core's
253
+ * outside-root refusal. A per-call `loader` handed to `swig.compile()` cannot
254
+ * fix it: swig-core merges per-call options into a local that never escapes
255
+ * `self.parse` (engine.js:477), while `getParentsInternal` (:321) and
256
+ * `parseFile` (:490) read `self.options.loader` unconditionally, and the
257
+ * `{% include %}` codegen emits only `resolveFrom` (backend.js:420). An engine
258
+ * INSTANCE per template root is the only shape the engine actually honours.
259
+ *
260
+ * Note this is structural rather than an invariant about who awaits when: the
261
+ * narrower alternative (re-stamping the loader immediately before each compile)
262
+ * would re-create exactly the "nothing awaits in between" assumption that
263
+ * silently became false and produced #B514 in the first place.
264
+ *
265
+ * `engine.install` gives every instance FRESH tag and filter maps, so the gina
266
+ * filters register per request through the delegates' existing `setFilter` loop
267
+ * (they read per-request context from `process.gina._renderALS`, so a shared
268
+ * engine cannot bleed), and a bundle's own `controllers/setup.js` filters land
269
+ * here too because `self.engine` points at this instance before setup runs
270
+ * (`router.js:944` hands `controller.engine` to the setup module). Two things
271
+ * the move off the module lost are restored per instance at mint: #B535
272
+ * bridges the three registration setters back to the module, and #B538 gives
273
+ * the instance its own `getOptions()` accessor (`exposeOptionsOnEngine`) —
274
+ * the module's per-request one never reaches an instance.
275
+ *
276
+ * @inner
277
+ * @param {*} swigMod - The resolved swig module (exposes `.Swig`)
278
+ * @param {string} templateRoot - Registry key: the bundle templates root
279
+ * @param {object} opts - `{ autoescape, cache, loader }` for this bundle
280
+ * @returns {*} the cached-or-built per-bundle engine
281
+ */
282
+ function getDefaultSwigEngine(swigMod, templateRoot, opts) {
283
+ if (!process.gina._swigDefaultEngines) {
284
+ process.gina._swigDefaultEngines = Object.create(null);
285
+ }
286
+ // Instances are bound to the module that built them — drop the whole
287
+ // registry on a dev-mode swig hot-swap (mirrors _swigEnginesOwner).
288
+ if (process.gina._swigDefaultEnginesOwner !== swigMod) {
289
+ process.gina._swigDefaultEngines = Object.create(null);
290
+ process.gina._swigDefaultEnginesOwner = swigMod;
291
+ }
292
+ if (!process.gina._swigDefaultEngines[templateRoot]) {
293
+ process.gina._swigDefaultEngines[templateRoot] = new swigMod.Swig(opts);
294
+ // #B535 — registrations made on this instance must still reach the module.
295
+ bridgeRegistrationsToModule(process.gina._swigDefaultEngines[templateRoot], swigMod);
296
+ // #B538 — the module's getOptions() accessor must exist on the instance too.
297
+ exposeOptionsOnEngine(process.gina._swigDefaultEngines[templateRoot], opts);
298
+ }
299
+ return process.gina._swigDefaultEngines[templateRoot];
300
+ }
122
301
  const { type } = require('node:os');
123
302
  var SwigFilters = lib.SwigFilters;
124
303
  var statusCodes = requireJSON( _( getPath('gina').core + '/status.codes') );
@@ -1318,7 +1497,21 @@ function SuperController(options) {
1318
1497
  defaultTZOffset = null;
1319
1498
 
1320
1499
 
1321
- self.engine = swig;
1500
+ // #B514 sibling limb — render through a per-bundle ENGINE instead of the
1501
+ // process singleton, so a concurrent bundle's loader stamp cannot reach
1502
+ // this render's include/extends resolution. The setDefaults call above is
1503
+ // deliberately KEPT: core/server.js still compiles inline strings through
1504
+ // the module with swig.getOptions(), and leaving the module's defaults
1505
+ // alone keeps that path byte-identical. Nothing renders a bundle template
1506
+ // through the module any more, so the stamp it races is now inert.
1507
+ // Falls back to the module when there is no template root, or when the
1508
+ // resolved swig exposes no `.Swig` constructor (older forks / test doubles).
1509
+ local._swigEngine = ( dir && typeof(swig.Swig) === 'function' )
1510
+ ? getDefaultSwigEngine(swig, dir, swigOptions)
1511
+ : swig;
1512
+ // Must precede controllers/setup.js: router.js hands `controller.engine`
1513
+ // to the setup module, so a bundle's own filters register HERE.
1514
+ self.engine = local._swigEngine;
1322
1515
 
1323
1516
  dir = null;
1324
1517
  swigOptions = null;
@@ -2048,7 +2241,7 @@ function SuperController(options) {
2048
2241
  getData : getData,
2049
2242
  hasViews : hasViews,
2050
2243
  setResources: setResources,
2051
- swig : swig,
2244
+ swig : (local._swigEngine || swig),
2052
2245
  SwigFilters : SwigFilters,
2053
2246
  headersSent : headersSent
2054
2247
  }); //(userData, displayInspector, errOptions)
@@ -7052,21 +7245,52 @@ if ( /^local$/i.test(process.env.NODE_SCOPE) ) {
7052
7245
  /**
7053
7246
  * Get config
7054
7247
  *
7055
- * @param {string} [name] - Conf name without extension.
7056
- * @returns {object} config
7248
+ * Returns the bundle configuration — the whole per-request conf, or one
7249
+ * config file's content by name. Since #P40 the result is a per-call
7250
+ * COPY-ON-WRITE VIEW (`lib/conf-view`) rather than a deep clone: reads pass
7251
+ * through to the shared configuration at no copy cost, a write lands in the
7252
+ * view's private overlay (never in the live configuration, never visible to
7253
+ * another call), and the first enumeration of a node (`Object.keys`,
7254
+ * `JSON.stringify`, `for…in`, spread, `JSON.clone`) materialises that
7255
+ * subtree once into a private plain copy. Three things a deep clone allowed
7256
+ * do not work on an un-enumerated view: `structuredClone(result)` throws a
7257
+ * `DataCloneError`, `Object.freeze` / `seal` on a node you have not
7258
+ * enumerated throws a `TypeError`, and `console.log` / `util.inspect` show
7259
+ * the shared values rather than your writes (property reads and
7260
+ * `JSON.stringify` are truthful). `settings.json > controller.getConfig.mode`
7261
+ * set to `"clone"` restores the deep clone for the bundle. Both forms
7262
+ * resolve `hostname` / `host` against this request's proxy classification
7263
+ * (#B66) — a write that lands in the overlay too.
7264
+ *
7265
+ * @param {string} [name] - Conf name without extension (`'app'`, `'settings'`, …); omit for the whole conf.
7266
+ * @returns {object|undefined} the view (or clone) — `undefined` for an unknown `name`
7057
7267
  *
7268
+ * @example
7269
+ * var app = self.getConfig('app'); // a private view of config/app.json
7270
+ * app.proxy.api.port = 8443; // your write; the live configuration is untouched
7271
+ * var conf = self.getConfig(); // the whole conf: conf.settings === conf.content.settings
7272
+ * @example
7273
+ * // settings.json — the opt-out, per bundle
7274
+ * { "controller": { "getConfig": { "mode": "clone" } } }
7058
7275
  * */
7059
7276
  this.getConfig = function(name) {
7060
7277
  var tmp = null;
7278
+ // #P40 — `view` (the default) is a per-call copy-on-write view over the
7279
+ // per-request conf; `clone` (settings.json > controller.getConfig.mode) is
7280
+ // the deep copy this method used to hand back, kept as the opt-out for the
7281
+ // three shapes a view cannot serve (structuredClone, freeze before
7282
+ // enumerating, inspect). Read per call: the conf is per request and the
7283
+ // check is a few property reads.
7284
+ var _cSettings = ( local.options && local.options.conf && local.options.conf.content ) ? local.options.conf.content.settings : null;
7285
+ var _cloneMode = ( _cSettings && _cSettings.controller && _cSettings.controller.getConfig && _cSettings.controller.getConfig.mode == 'clone' ) ? true : false;
7061
7286
  if ( typeof(name) != 'undefined' ) {
7062
7287
  try {
7063
- // Needs to be read only
7064
- tmp = JSON.clone(local.options.conf.content[name]);
7288
+ tmp = ( _cloneMode ) ? JSON.clone(local.options.conf.content[name]) : lib.confView.create(local.options.conf.content[name]);
7065
7289
  } catch (err) {
7066
7290
  return undefined;
7067
7291
  }
7068
7292
  } else {
7069
- tmp = JSON.clone(local.options.conf);
7293
+ tmp = ( _cloneMode ) ? JSON.clone(local.options.conf) : lib.confView.create(local.options.conf);
7070
7294
  }
7071
7295
 
7072
7296
  // #B66 S2b — prefer THIS request's per-request proxy classification (the