gina 0.6.33 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (631) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/CONVENTIONS.md +1 -1
  3. package/README.md +61 -79
  4. package/ROADMAP.md +21 -16
  5. package/SECURITY.md +37 -0
  6. package/bin/gina +11 -7
  7. package/framework/v0.7.0/VERSION +1 -0
  8. package/framework/{v0.6.33 → v0.7.0}/core/asset/plugin/dist/vendor/gina/js/gina.js +124 -90
  9. package/framework/v0.7.0/core/asset/plugin/dist/vendor/gina/js/gina.min.js +720 -0
  10. package/framework/v0.7.0/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
  11. package/framework/v0.7.0/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
  12. package/framework/{v0.6.33 → v0.7.0}/core/config.js +15 -0
  13. package/framework/v0.7.0/core/config.requirements-anchor.js +218 -0
  14. package/framework/{v0.6.33 → v0.7.0}/core/controller/controller.js +101 -7
  15. package/framework/{v0.6.33 → v0.7.0}/core/controller/controller.render-swig-async.js +7 -3
  16. package/framework/{v0.6.33 → v0.7.0}/core/controller/controller.render-swig.js +53 -13
  17. package/framework/{v0.6.33 → v0.7.0}/core/gna.js +16 -3
  18. package/framework/{v0.6.33 → v0.7.0}/core/plugins/lib/validator/src/form-validator.js +74 -16
  19. package/framework/{v0.6.33 → v0.7.0}/core/server.express.js +143 -10
  20. package/framework/{v0.6.33 → v0.7.0}/core/server.isaac.js +6 -1
  21. package/framework/{v0.6.33 → v0.7.0}/core/server.js +240 -255
  22. package/framework/v0.7.0/core/server.route-candidates.js +326 -0
  23. package/framework/{v0.6.33 → v0.7.0}/core/template/boilerplate/bundle/config/connectors.json +1 -1
  24. package/framework/{v0.6.33 → v0.7.0}/core/template/boilerplate/bundle/config/settings.json +6 -0
  25. package/framework/{v0.6.33 → v0.7.0}/core/template/boilerplate/bundle/controllers/setup.js +9 -2
  26. package/framework/{v0.6.33 → v0.7.0}/helpers/path.js +36 -6
  27. package/framework/{v0.6.33 → v0.7.0}/lib/cmd/bundle/restart.js +100 -31
  28. package/framework/{v0.6.33 → v0.7.0}/lib/cmd/connector/list.js +20 -2
  29. package/framework/{v0.6.33 → v0.7.0}/lib/cmd/env/add.js +34 -7
  30. package/framework/{v0.6.33 → v0.7.0}/lib/cmd/env/set.js +4 -0
  31. package/framework/{v0.6.33 → v0.7.0}/lib/cmd/env/unset.js +4 -0
  32. package/framework/{v0.6.33 → v0.7.0}/lib/cmd/framework/init.js +76 -19
  33. package/framework/{v0.6.33 → v0.7.0}/lib/cmd/helper.js +16 -4
  34. package/framework/{v0.6.33 → v0.7.0}/lib/cmd/port/list.js +13 -4
  35. package/framework/{v0.6.33 → v0.7.0}/lib/cmd/port/reset.js +28 -7
  36. package/framework/{v0.6.33 → v0.7.0}/lib/cmd/project/add.js +63 -20
  37. package/framework/v0.7.0/lib/cmd/project/rename.js +285 -0
  38. package/framework/{v0.6.33 → v0.7.0}/lib/cmd/protocol/set.js +3 -0
  39. package/framework/{v0.6.33 → v0.7.0}/lib/logger/src/containers/mq/listener.js +20 -5
  40. package/framework/{v0.6.33 → v0.7.0}/lib/routing/src/main.js +48 -71
  41. package/framework/{v0.6.33 → v0.7.0}/lib/swig-filters/src/main.js +85 -0
  42. package/framework/{v0.6.33 → v0.7.0}/package.json +1 -1
  43. package/gna.js +5 -4
  44. package/llms.txt +36 -34
  45. package/package.json +4 -4
  46. package/schema/routing.json +2 -2
  47. package/schema/settings.json +3 -3
  48. package/script/generate_gna_types.js +1 -1
  49. package/script/post_install.js +100 -26
  50. package/script/pre_install.js +49 -8
  51. package/types/globals.d.ts +3 -1
  52. package/types/gna.d.ts +8 -2
  53. package/types/index.d.ts +1 -0
  54. package/utils/helper.js +60 -10
  55. package/framework/v0.6.33/VERSION +0 -1
  56. package/framework/v0.6.33/core/asset/plugin/dist/vendor/gina/js/gina.min.js +0 -721
  57. package/framework/v0.6.33/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
  58. package/framework/v0.6.33/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
  59. package/framework/v0.6.33/lib/cmd/project/rename.js +0 -199
  60. package/framework/v0.6.33/lib/routing/src/radix.js +0 -114
  61. /package/framework/{v0.6.33 → v0.7.0}/AUTHORS +0 -0
  62. /package/framework/{v0.6.33 → v0.7.0}/LICENSE +0 -0
  63. /package/framework/{v0.6.33 → v0.7.0}/core/asset/html/nolayout.html +0 -0
  64. /package/framework/{v0.6.33 → v0.7.0}/core/asset/html/static.html +0 -0
  65. /package/framework/{v0.6.33 → v0.7.0}/core/asset/img/android-chrome-192x192.png +0 -0
  66. /package/framework/{v0.6.33 → v0.7.0}/core/asset/img/android-chrome-512x512.png +0 -0
  67. /package/framework/{v0.6.33 → v0.7.0}/core/asset/img/apple-touch-icon.png +0 -0
  68. /package/framework/{v0.6.33 → v0.7.0}/core/asset/img/favicon-16x16.png +0 -0
  69. /package/framework/{v0.6.33 → v0.7.0}/core/asset/img/favicon-32x32.png +0 -0
  70. /package/framework/{v0.6.33 → v0.7.0}/core/asset/img/favicon.ico +0 -0
  71. /package/framework/{v0.6.33 → v0.7.0}/core/asset/plugin/README.md +0 -0
  72. /package/framework/{v0.6.33 → v0.7.0}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.css +0 -0
  73. /package/framework/{v0.6.33 → v0.7.0}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.js +0 -0
  74. /package/framework/{v0.6.33 → v0.7.0}/core/asset/plugin/dist/vendor/gina/beemaster/index.html +0 -0
  75. /package/framework/{v0.6.33 → v0.7.0}/core/asset/plugin/dist/vendor/gina/css/gina.min.css +0 -0
  76. /package/framework/{v0.6.33 → v0.7.0}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
  77. /package/framework/{v0.6.33 → v0.7.0}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
  78. /package/framework/{v0.6.33 → v0.7.0}/core/asset/plugin/dist/vendor/gina/html/statusbar.html +0 -0
  79. /package/framework/{v0.6.33 → v0.7.0}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.br +0 -0
  80. /package/framework/{v0.6.33 → v0.7.0}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.gz +0 -0
  81. /package/framework/{v0.6.33 → v0.7.0}/core/asset/plugin/dist/vendor/gina/inspector/have_heart_one-webfont.woff2 +0 -0
  82. /package/framework/{v0.6.33 → v0.7.0}/core/asset/plugin/dist/vendor/gina/inspector/index.html +0 -0
  83. /package/framework/{v0.6.33 → v0.7.0}/core/asset/plugin/dist/vendor/gina/inspector/inspector.css +0 -0
  84. /package/framework/{v0.6.33 → v0.7.0}/core/asset/plugin/dist/vendor/gina/inspector/inspector.js +0 -0
  85. /package/framework/{v0.6.33 → v0.7.0}/core/asset/plugin/dist/vendor/gina/inspector/logo.svg +0 -0
  86. /package/framework/{v0.6.33 → v0.7.0}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +0 -0
  87. /package/framework/{v0.6.33 → v0.7.0}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.br +0 -0
  88. /package/framework/{v0.6.33 → v0.7.0}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.gz +0 -0
  89. /package/framework/{v0.6.33 → v0.7.0}/core/connectors/ai/index.js +0 -0
  90. /package/framework/{v0.6.33 → v0.7.0}/core/connectors/ai/lib/connector.js +0 -0
  91. /package/framework/{v0.6.33 → v0.7.0}/core/connectors/couchbase/index.js +0 -0
  92. /package/framework/{v0.6.33 → v0.7.0}/core/connectors/couchbase/lib/connector.js +0 -0
  93. /package/framework/{v0.6.33 → v0.7.0}/core/connectors/couchbase/lib/connector.v3.js +0 -0
  94. /package/framework/{v0.6.33 → v0.7.0}/core/connectors/couchbase/lib/connector.v4.js +0 -0
  95. /package/framework/{v0.6.33 → v0.7.0}/core/connectors/couchbase/lib/n1ql.js +0 -0
  96. /package/framework/{v0.6.33 → v0.7.0}/core/connectors/couchbase/lib/session-store.js +0 -0
  97. /package/framework/{v0.6.33 → v0.7.0}/core/connectors/couchbase/lib/session-store.v3.js +0 -0
  98. /package/framework/{v0.6.33 → v0.7.0}/core/connectors/couchbase/lib/session-store.v4.js +0 -0
  99. /package/framework/{v0.6.33 → v0.7.0}/core/connectors/couchbase/lib/storage-store.js +0 -0
  100. /package/framework/{v0.6.33 → v0.7.0}/core/connectors/duckdb/index.js +0 -0
  101. /package/framework/{v0.6.33 → v0.7.0}/core/connectors/duckdb/lib/connector.js +0 -0
  102. /package/framework/{v0.6.33 → v0.7.0}/core/connectors/mongodb/index.js +0 -0
  103. /package/framework/{v0.6.33 → v0.7.0}/core/connectors/mongodb/lib/connector.js +0 -0
  104. /package/framework/{v0.6.33 → v0.7.0}/core/connectors/mongodb/lib/job-store.js +0 -0
  105. /package/framework/{v0.6.33 → v0.7.0}/core/connectors/mongodb/lib/pipeline-loader.js +0 -0
  106. /package/framework/{v0.6.33 → v0.7.0}/core/connectors/mongodb/lib/session-store.js +0 -0
  107. /package/framework/{v0.6.33 → v0.7.0}/core/connectors/mysql/index.js +0 -0
  108. /package/framework/{v0.6.33 → v0.7.0}/core/connectors/mysql/lib/connector.js +0 -0
  109. /package/framework/{v0.6.33 → v0.7.0}/core/connectors/param-redact.js +0 -0
  110. /package/framework/{v0.6.33 → v0.7.0}/core/connectors/postgresql/index.js +0 -0
  111. /package/framework/{v0.6.33 → v0.7.0}/core/connectors/postgresql/lib/connector.js +0 -0
  112. /package/framework/{v0.6.33 → v0.7.0}/core/connectors/redis/index.js +0 -0
  113. /package/framework/{v0.6.33 → v0.7.0}/core/connectors/redis/lib/connector.js +0 -0
  114. /package/framework/{v0.6.33 → v0.7.0}/core/connectors/redis/lib/job-store.js +0 -0
  115. /package/framework/{v0.6.33 → v0.7.0}/core/connectors/redis/lib/kv-store.js +0 -0
  116. /package/framework/{v0.6.33 → v0.7.0}/core/connectors/redis/lib/render-cache-store.js +0 -0
  117. /package/framework/{v0.6.33 → v0.7.0}/core/connectors/redis/lib/session-store.js +0 -0
  118. /package/framework/{v0.6.33 → v0.7.0}/core/connectors/scylladb/index.js +0 -0
  119. /package/framework/{v0.6.33 → v0.7.0}/core/connectors/scylladb/lib/connector.js +0 -0
  120. /package/framework/{v0.6.33 → v0.7.0}/core/connectors/scylladb/lib/session-store.js +0 -0
  121. /package/framework/{v0.6.33 → v0.7.0}/core/connectors/settle-once.js +0 -0
  122. /package/framework/{v0.6.33 → v0.7.0}/core/connectors/sql-parser.js +0 -0
  123. /package/framework/{v0.6.33 → v0.7.0}/core/connectors/sqlite/index.js +0 -0
  124. /package/framework/{v0.6.33 → v0.7.0}/core/connectors/sqlite/lib/connector.js +0 -0
  125. /package/framework/{v0.6.33 → v0.7.0}/core/connectors/sqlite/lib/job-store.js +0 -0
  126. /package/framework/{v0.6.33 → v0.7.0}/core/connectors/sqlite/lib/kv-store.js +0 -0
  127. /package/framework/{v0.6.33 → v0.7.0}/core/connectors/sqlite/lib/session-store.js +0 -0
  128. /package/framework/{v0.6.33 → v0.7.0}/core/content.encoding +0 -0
  129. /package/framework/{v0.6.33 → v0.7.0}/core/controller/controller.framework.js +0 -0
  130. /package/framework/{v0.6.33 → v0.7.0}/core/controller/controller.render-json.js +0 -0
  131. /package/framework/{v0.6.33 → v0.7.0}/core/controller/controller.render-nunjucks-async.js +0 -0
  132. /package/framework/{v0.6.33 → v0.7.0}/core/controller/controller.render-nunjucks.js +0 -0
  133. /package/framework/{v0.6.33 → v0.7.0}/core/controller/controller.render-stream.js +0 -0
  134. /package/framework/{v0.6.33 → v0.7.0}/core/controller/controller.render-v1.js +0 -0
  135. /package/framework/{v0.6.33 → v0.7.0}/core/controller/controller.render-xml.js +0 -0
  136. /package/framework/{v0.6.33 → v0.7.0}/core/controller/index.js +0 -0
  137. /package/framework/{v0.6.33 → v0.7.0}/core/controller/inline-script.js +0 -0
  138. /package/framework/{v0.6.33 → v0.7.0}/core/controller/inspector-window-emit.js +0 -0
  139. /package/framework/{v0.6.33 → v0.7.0}/core/controller/release-banner.js +0 -0
  140. /package/framework/{v0.6.33 → v0.7.0}/core/dev/index.js +0 -0
  141. /package/framework/{v0.6.33 → v0.7.0}/core/dev/lib/class.js +0 -0
  142. /package/framework/{v0.6.33 → v0.7.0}/core/dev/lib/factory.js +0 -0
  143. /package/framework/{v0.6.33 → v0.7.0}/core/dev/lib/tools.js +0 -0
  144. /package/framework/{v0.6.33 → v0.7.0}/core/locales/README.md +0 -0
  145. /package/framework/{v0.6.33 → v0.7.0}/core/locales/currency.json +0 -0
  146. /package/framework/{v0.6.33 → v0.7.0}/core/locales/dist/language/en.json +0 -0
  147. /package/framework/{v0.6.33 → v0.7.0}/core/locales/dist/language/fr.json +0 -0
  148. /package/framework/{v0.6.33 → v0.7.0}/core/locales/dist/region/en.json +0 -0
  149. /package/framework/{v0.6.33 → v0.7.0}/core/locales/dist/region/fr.json +0 -0
  150. /package/framework/{v0.6.33 → v0.7.0}/core/locales/index.js +0 -0
  151. /package/framework/{v0.6.33 → v0.7.0}/core/mime.types +0 -0
  152. /package/framework/{v0.6.33 → v0.7.0}/core/model/entity.js +0 -0
  153. /package/framework/{v0.6.33 → v0.7.0}/core/model/index.js +0 -0
  154. /package/framework/{v0.6.33 → v0.7.0}/core/model/template/entityFactory.js +0 -0
  155. /package/framework/{v0.6.33 → v0.7.0}/core/model/template/index.js +0 -0
  156. /package/framework/{v0.6.33 → v0.7.0}/core/plugins/README.md +0 -0
  157. /package/framework/{v0.6.33 → v0.7.0}/core/plugins/index.js +0 -0
  158. /package/framework/{v0.6.33 → v0.7.0}/core/plugins/lib/csrf/README.md +0 -0
  159. /package/framework/{v0.6.33 → v0.7.0}/core/plugins/lib/csrf/package.json +0 -0
  160. /package/framework/{v0.6.33 → v0.7.0}/core/plugins/lib/csrf/src/main.js +0 -0
  161. /package/framework/{v0.6.33 → v0.7.0}/core/plugins/lib/security-headers/README.md +0 -0
  162. /package/framework/{v0.6.33 → v0.7.0}/core/plugins/lib/security-headers/coep/README.md +0 -0
  163. /package/framework/{v0.6.33 → v0.7.0}/core/plugins/lib/security-headers/coep/package.json +0 -0
  164. /package/framework/{v0.6.33 → v0.7.0}/core/plugins/lib/security-headers/coep/src/main.js +0 -0
  165. /package/framework/{v0.6.33 → v0.7.0}/core/plugins/lib/security-headers/coop/README.md +0 -0
  166. /package/framework/{v0.6.33 → v0.7.0}/core/plugins/lib/security-headers/coop/package.json +0 -0
  167. /package/framework/{v0.6.33 → v0.7.0}/core/plugins/lib/security-headers/coop/src/main.js +0 -0
  168. /package/framework/{v0.6.33 → v0.7.0}/core/plugins/lib/security-headers/corp/README.md +0 -0
  169. /package/framework/{v0.6.33 → v0.7.0}/core/plugins/lib/security-headers/corp/package.json +0 -0
  170. /package/framework/{v0.6.33 → v0.7.0}/core/plugins/lib/security-headers/corp/src/main.js +0 -0
  171. /package/framework/{v0.6.33 → v0.7.0}/core/plugins/lib/security-headers/csp/README.md +0 -0
  172. /package/framework/{v0.6.33 → v0.7.0}/core/plugins/lib/security-headers/csp/package.json +0 -0
  173. /package/framework/{v0.6.33 → v0.7.0}/core/plugins/lib/security-headers/csp/src/main.js +0 -0
  174. /package/framework/{v0.6.33 → v0.7.0}/core/plugins/lib/security-headers/hide-powered-by/README.md +0 -0
  175. /package/framework/{v0.6.33 → v0.7.0}/core/plugins/lib/security-headers/hide-powered-by/package.json +0 -0
  176. /package/framework/{v0.6.33 → v0.7.0}/core/plugins/lib/security-headers/hide-powered-by/src/main.js +0 -0
  177. /package/framework/{v0.6.33 → v0.7.0}/core/plugins/lib/security-headers/hsts/README.md +0 -0
  178. /package/framework/{v0.6.33 → v0.7.0}/core/plugins/lib/security-headers/hsts/package.json +0 -0
  179. /package/framework/{v0.6.33 → v0.7.0}/core/plugins/lib/security-headers/hsts/src/main.js +0 -0
  180. /package/framework/{v0.6.33 → v0.7.0}/core/plugins/lib/security-headers/origin-agent-cluster/README.md +0 -0
  181. /package/framework/{v0.6.33 → v0.7.0}/core/plugins/lib/security-headers/origin-agent-cluster/package.json +0 -0
  182. /package/framework/{v0.6.33 → v0.7.0}/core/plugins/lib/security-headers/origin-agent-cluster/src/main.js +0 -0
  183. /package/framework/{v0.6.33 → v0.7.0}/core/plugins/lib/security-headers/package.json +0 -0
  184. /package/framework/{v0.6.33 → v0.7.0}/core/plugins/lib/security-headers/referrer-policy/README.md +0 -0
  185. /package/framework/{v0.6.33 → v0.7.0}/core/plugins/lib/security-headers/referrer-policy/package.json +0 -0
  186. /package/framework/{v0.6.33 → v0.7.0}/core/plugins/lib/security-headers/referrer-policy/src/main.js +0 -0
  187. /package/framework/{v0.6.33 → v0.7.0}/core/plugins/lib/security-headers/src/main.js +0 -0
  188. /package/framework/{v0.6.33 → v0.7.0}/core/plugins/lib/security-headers/x-content-type-options/README.md +0 -0
  189. /package/framework/{v0.6.33 → v0.7.0}/core/plugins/lib/security-headers/x-content-type-options/package.json +0 -0
  190. /package/framework/{v0.6.33 → v0.7.0}/core/plugins/lib/security-headers/x-content-type-options/src/main.js +0 -0
  191. /package/framework/{v0.6.33 → v0.7.0}/core/plugins/lib/security-headers/x-dns-prefetch-control/README.md +0 -0
  192. /package/framework/{v0.6.33 → v0.7.0}/core/plugins/lib/security-headers/x-dns-prefetch-control/package.json +0 -0
  193. /package/framework/{v0.6.33 → v0.7.0}/core/plugins/lib/security-headers/x-dns-prefetch-control/src/main.js +0 -0
  194. /package/framework/{v0.6.33 → v0.7.0}/core/plugins/lib/security-headers/x-download-options/README.md +0 -0
  195. /package/framework/{v0.6.33 → v0.7.0}/core/plugins/lib/security-headers/x-download-options/package.json +0 -0
  196. /package/framework/{v0.6.33 → v0.7.0}/core/plugins/lib/security-headers/x-download-options/src/main.js +0 -0
  197. /package/framework/{v0.6.33 → v0.7.0}/core/plugins/lib/security-headers/x-frame-options/README.md +0 -0
  198. /package/framework/{v0.6.33 → v0.7.0}/core/plugins/lib/security-headers/x-frame-options/package.json +0 -0
  199. /package/framework/{v0.6.33 → v0.7.0}/core/plugins/lib/security-headers/x-frame-options/src/main.js +0 -0
  200. /package/framework/{v0.6.33 → v0.7.0}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/README.md +0 -0
  201. /package/framework/{v0.6.33 → v0.7.0}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/package.json +0 -0
  202. /package/framework/{v0.6.33 → v0.7.0}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/src/main.js +0 -0
  203. /package/framework/{v0.6.33 → v0.7.0}/core/plugins/lib/security-headers/x-xss-protection/README.md +0 -0
  204. /package/framework/{v0.6.33 → v0.7.0}/core/plugins/lib/security-headers/x-xss-protection/package.json +0 -0
  205. /package/framework/{v0.6.33 → v0.7.0}/core/plugins/lib/security-headers/x-xss-protection/src/main.js +0 -0
  206. /package/framework/{v0.6.33 → v0.7.0}/core/plugins/lib/session/README.md +0 -0
  207. /package/framework/{v0.6.33 → v0.7.0}/core/plugins/lib/session/package.json +0 -0
  208. /package/framework/{v0.6.33 → v0.7.0}/core/plugins/lib/session/src/main.js +0 -0
  209. /package/framework/{v0.6.33 → v0.7.0}/core/plugins/lib/storage/README.md +0 -0
  210. /package/framework/{v0.6.33 → v0.7.0}/core/plugins/lib/storage/build.json +0 -0
  211. /package/framework/{v0.6.33 → v0.7.0}/core/plugins/lib/storage/package.json +0 -0
  212. /package/framework/{v0.6.33 → v0.7.0}/core/plugins/lib/storage/src/main.js +0 -0
  213. /package/framework/{v0.6.33 → v0.7.0}/core/plugins/lib/validator/README.md +0 -0
  214. /package/framework/{v0.6.33 → v0.7.0}/core/plugins/lib/validator/build.json +0 -0
  215. /package/framework/{v0.6.33 → v0.7.0}/core/plugins/lib/validator/package.json +0 -0
  216. /package/framework/{v0.6.33 → v0.7.0}/core/plugins/lib/validator/src/main.js +0 -0
  217. /package/framework/{v0.6.33 → v0.7.0}/core/router.js +0 -0
  218. /package/framework/{v0.6.33 → v0.7.0}/core/server.isaac.rapid-reset.js +0 -0
  219. /package/framework/{v0.6.33 → v0.7.0}/core/status.codes +0 -0
  220. /package/framework/{v0.6.33 → v0.7.0}/core/template/_gitignore +0 -0
  221. /package/framework/{v0.6.33 → v0.7.0}/core/template/boilerplate/bundle/config/app.json +0 -0
  222. /package/framework/{v0.6.33 → v0.7.0}/core/template/boilerplate/bundle/config/routing.json +0 -0
  223. /package/framework/{v0.6.33 → v0.7.0}/core/template/boilerplate/bundle/config/settings.server.json +0 -0
  224. /package/framework/{v0.6.33 → v0.7.0}/core/template/boilerplate/bundle/config/templates.json +0 -0
  225. /package/framework/{v0.6.33 → v0.7.0}/core/template/boilerplate/bundle/config/watchers.json +0 -0
  226. /package/framework/{v0.6.33 → v0.7.0}/core/template/boilerplate/bundle/controllers/controller.content.js +0 -0
  227. /package/framework/{v0.6.33 → v0.7.0}/core/template/boilerplate/bundle/controllers/controller.js +0 -0
  228. /package/framework/{v0.6.33 → v0.7.0}/core/template/boilerplate/bundle/index.js +0 -0
  229. /package/framework/{v0.6.33 → v0.7.0}/core/template/boilerplate/bundle/locales/en.json +0 -0
  230. /package/framework/{v0.6.33 → v0.7.0}/core/template/boilerplate/bundle_namespace/controllers/controller.js +0 -0
  231. /package/framework/{v0.6.33 → v0.7.0}/core/template/boilerplate/bundle_public/css/default.css +0 -0
  232. /package/framework/{v0.6.33 → v0.7.0}/core/template/boilerplate/bundle_public/css/home.css +0 -0
  233. /package/framework/{v0.6.33 → v0.7.0}/core/template/boilerplate/bundle_public/css/vendor/readme.md +0 -0
  234. /package/framework/{v0.6.33 → v0.7.0}/core/template/boilerplate/bundle_public/favicon.ico +0 -0
  235. /package/framework/{v0.6.33 → v0.7.0}/core/template/boilerplate/bundle_public/js/components/x-checklist.js +0 -0
  236. /package/framework/{v0.6.33 → v0.7.0}/core/template/boilerplate/bundle_public/js/vendor/readme.md +0 -0
  237. /package/framework/{v0.6.33 → v0.7.0}/core/template/boilerplate/bundle_public/manifest.webmanifest +0 -0
  238. /package/framework/{v0.6.33 → v0.7.0}/core/template/boilerplate/bundle_public/readme.md +0 -0
  239. /package/framework/{v0.6.33 → v0.7.0}/core/template/boilerplate/bundle_public/sw.js +0 -0
  240. /package/framework/{v0.6.33 → v0.7.0}/core/template/boilerplate/bundle_templates/handlers/main.js +0 -0
  241. /package/framework/{v0.6.33 → v0.7.0}/core/template/boilerplate/bundle_templates/html/content/homepage.html +0 -0
  242. /package/framework/{v0.6.33 → v0.7.0}/core/template/boilerplate/bundle_templates/html/includes/error-msg-noscript.html +0 -0
  243. /package/framework/{v0.6.33 → v0.7.0}/core/template/boilerplate/bundle_templates/html/includes/error-msg-outdated-browser.html +0 -0
  244. /package/framework/{v0.6.33 → v0.7.0}/core/template/boilerplate/bundle_templates/html/includes/x-checklist.html +0 -0
  245. /package/framework/{v0.6.33 → v0.7.0}/core/template/boilerplate/bundle_templates/html/layouts/main.html +0 -0
  246. /package/framework/{v0.6.33 → v0.7.0}/core/template/command/gina.bat.tpl +0 -0
  247. /package/framework/{v0.6.33 → v0.7.0}/core/template/command/gina.tpl +0 -0
  248. /package/framework/{v0.6.33 → v0.7.0}/core/template/conf/env.json +0 -0
  249. /package/framework/{v0.6.33 → v0.7.0}/core/template/conf/manifest.json +0 -0
  250. /package/framework/{v0.6.33 → v0.7.0}/core/template/conf/package.json +0 -0
  251. /package/framework/{v0.6.33 → v0.7.0}/core/template/conf/settings.json +0 -0
  252. /package/framework/{v0.6.33 → v0.7.0}/core/template/conf/statics.json +0 -0
  253. /package/framework/{v0.6.33 → v0.7.0}/core/template/conf/templates.json +0 -0
  254. /package/framework/{v0.6.33 → v0.7.0}/core/template/error/client/json/401.json +0 -0
  255. /package/framework/{v0.6.33 → v0.7.0}/core/template/error/client/json/403.json +0 -0
  256. /package/framework/{v0.6.33 → v0.7.0}/core/template/error/client/json/404.json +0 -0
  257. /package/framework/{v0.6.33 → v0.7.0}/core/template/error/server/html/50x.html +0 -0
  258. /package/framework/{v0.6.33 → v0.7.0}/core/template/error/server/json/500.json +0 -0
  259. /package/framework/{v0.6.33 → v0.7.0}/core/template/error/server/json/503.json +0 -0
  260. /package/framework/{v0.6.33 → v0.7.0}/core/template/extensions/logger/config.json +0 -0
  261. /package/framework/{v0.6.33 → v0.7.0}/helpers/console.js +0 -0
  262. /package/framework/{v0.6.33 → v0.7.0}/helpers/context.js +0 -0
  263. /package/framework/{v0.6.33 → v0.7.0}/helpers/data/LICENSE +0 -0
  264. /package/framework/{v0.6.33 → v0.7.0}/helpers/data/README.md +0 -0
  265. /package/framework/{v0.6.33 → v0.7.0}/helpers/data/package.json +0 -0
  266. /package/framework/{v0.6.33 → v0.7.0}/helpers/data/src/main.js +0 -0
  267. /package/framework/{v0.6.33 → v0.7.0}/helpers/dateFormat.js +0 -0
  268. /package/framework/{v0.6.33 → v0.7.0}/helpers/index.js +0 -0
  269. /package/framework/{v0.6.33 → v0.7.0}/helpers/json/LICENSE +0 -0
  270. /package/framework/{v0.6.33 → v0.7.0}/helpers/json/README.md +0 -0
  271. /package/framework/{v0.6.33 → v0.7.0}/helpers/json/package.json +0 -0
  272. /package/framework/{v0.6.33 → v0.7.0}/helpers/json/src/main.js +0 -0
  273. /package/framework/{v0.6.33 → v0.7.0}/helpers/plugins/README.md +0 -0
  274. /package/framework/{v0.6.33 → v0.7.0}/helpers/plugins/package.json +0 -0
  275. /package/framework/{v0.6.33 → v0.7.0}/helpers/plugins/src/api-error.js +0 -0
  276. /package/framework/{v0.6.33 → v0.7.0}/helpers/plugins/src/main.js +0 -0
  277. /package/framework/{v0.6.33 → v0.7.0}/helpers/prototypes.js +0 -0
  278. /package/framework/{v0.6.33 → v0.7.0}/helpers/task.js +0 -0
  279. /package/framework/{v0.6.33 → v0.7.0}/helpers/text.js +0 -0
  280. /package/framework/{v0.6.33 → v0.7.0}/lib/admin/package.json +0 -0
  281. /package/framework/{v0.6.33 → v0.7.0}/lib/admin/src/main.js +0 -0
  282. /package/framework/{v0.6.33 → v0.7.0}/lib/archiver/README.md +0 -0
  283. /package/framework/{v0.6.33 → v0.7.0}/lib/archiver/build.json +0 -0
  284. /package/framework/{v0.6.33 → v0.7.0}/lib/archiver/package.json +0 -0
  285. /package/framework/{v0.6.33 → v0.7.0}/lib/archiver/src/dep/jszip.min.js +0 -0
  286. /package/framework/{v0.6.33 → v0.7.0}/lib/archiver/src/main.js +0 -0
  287. /package/framework/{v0.6.33 → v0.7.0}/lib/async/package.json +0 -0
  288. /package/framework/{v0.6.33 → v0.7.0}/lib/async/src/main.js +0 -0
  289. /package/framework/{v0.6.33 → v0.7.0}/lib/audit/package.json +0 -0
  290. /package/framework/{v0.6.33 → v0.7.0}/lib/audit/src/main.js +0 -0
  291. /package/framework/{v0.6.33 → v0.7.0}/lib/audit-store.js +0 -0
  292. /package/framework/{v0.6.33 → v0.7.0}/lib/authn/package.json +0 -0
  293. /package/framework/{v0.6.33 → v0.7.0}/lib/authn/src/lockout.js +0 -0
  294. /package/framework/{v0.6.33 → v0.7.0}/lib/authn/src/main.js +0 -0
  295. /package/framework/{v0.6.33 → v0.7.0}/lib/authn/src/totp.js +0 -0
  296. /package/framework/{v0.6.33 → v0.7.0}/lib/authz-gate/package.json +0 -0
  297. /package/framework/{v0.6.33 → v0.7.0}/lib/authz-gate/src/main.js +0 -0
  298. /package/framework/{v0.6.33 → v0.7.0}/lib/cache/README.md +0 -0
  299. /package/framework/{v0.6.33 → v0.7.0}/lib/cache/build.json +0 -0
  300. /package/framework/{v0.6.33 → v0.7.0}/lib/cache/package.json +0 -0
  301. /package/framework/{v0.6.33 → v0.7.0}/lib/cache/src/main.js +0 -0
  302. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/aliases.json +0 -0
  303. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/audit/arguments.json +0 -0
  304. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/audit/help.txt +0 -0
  305. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/audit/verify.js +0 -0
  306. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/bundle/add.js +0 -0
  307. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/bundle/arguments.json +0 -0
  308. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/bundle/build.js +0 -0
  309. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/bundle/copy.js +0 -0
  310. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/bundle/cp.js +0 -0
  311. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/bundle/help.js +0 -0
  312. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/bundle/help.txt +0 -0
  313. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/bundle/inc/name-rewrite.js +0 -0
  314. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/bundle/list.js +0 -0
  315. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/bundle/man.js +0 -0
  316. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/bundle/mcp-start.js +0 -0
  317. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/bundle/mcp.js +0 -0
  318. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/bundle/oas.js +0 -0
  319. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/bundle/openapi.js +0 -0
  320. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/bundle/remove.js +0 -0
  321. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/bundle/rename.js +0 -0
  322. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/bundle/rm.js +0 -0
  323. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/bundle/start.js +0 -0
  324. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/bundle/status.js +0 -0
  325. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/bundle/stop.js +0 -0
  326. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/bundle/types.js +0 -0
  327. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/cache/arguments.json +0 -0
  328. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/cache/clear.js +0 -0
  329. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/cache/help.txt +0 -0
  330. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/cache/stats.js +0 -0
  331. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/connector/add.js +0 -0
  332. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/connector/arguments.json +0 -0
  333. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/connector/help.js +0 -0
  334. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/connector/help.txt +0 -0
  335. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/connector/infer.js +0 -0
  336. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/connector/migrate.js +0 -0
  337. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/connector/models.js +0 -0
  338. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/connector/remove.js +0 -0
  339. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/connector/rm.js +0 -0
  340. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/connector/test.js +0 -0
  341. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/container/arguments.json +0 -0
  342. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/container/help.js +0 -0
  343. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/container/help.txt +0 -0
  344. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/container/man.js +0 -0
  345. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/container/ps.js +0 -0
  346. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/container/stop.js +0 -0
  347. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/controller/add.js +0 -0
  348. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/controller/arguments.json +0 -0
  349. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/controller/help.txt +0 -0
  350. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/controller/inc/args.js +0 -0
  351. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/controller/inc/namespace.js +0 -0
  352. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/controller/inc/reference-rewrite.js +0 -0
  353. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/controller/inc/reference-scan.js +0 -0
  354. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/controller/inc/scaffold.js +0 -0
  355. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/controller/remove.js +0 -0
  356. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/controller/rename.js +0 -0
  357. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/controller/rm.js +0 -0
  358. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/env/get.js +0 -0
  359. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/env/help.js +0 -0
  360. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/env/help.txt +0 -0
  361. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/env/inc/name.js +0 -0
  362. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/env/link-dev.js +0 -0
  363. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/env/list.js +0 -0
  364. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/env/remove.js +0 -0
  365. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/env/rm.js +0 -0
  366. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/env/use.js +0 -0
  367. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/framework/add.js +0 -0
  368. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/framework/arguments.json +0 -0
  369. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/framework/build.js +0 -0
  370. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/framework/dot.js +0 -0
  371. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/framework/get.js +0 -0
  372. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/framework/help.js +0 -0
  373. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/framework/help.txt +0 -0
  374. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/framework/link-node-modules.js +0 -0
  375. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/framework/link.js +0 -0
  376. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/framework/list.js +0 -0
  377. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/framework/man.js +0 -0
  378. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/framework/msg.json +0 -0
  379. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/framework/open.js +0 -0
  380. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/framework/remove.js +0 -0
  381. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/framework/reset.js +0 -0
  382. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/framework/restart.js +0 -0
  383. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/framework/set.js +0 -0
  384. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/framework/start.js +0 -0
  385. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/framework/status.js +0 -0
  386. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/framework/stop.js +0 -0
  387. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/framework/tail.js +0 -0
  388. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/framework/update.js +0 -0
  389. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/framework/version.js +0 -0
  390. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/gina-dev.1.md +0 -0
  391. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/gina-framework.1.md +0 -0
  392. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/gina.1.md +0 -0
  393. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/i18n/add.js +0 -0
  394. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/i18n/arguments.json +0 -0
  395. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/i18n/export.js +0 -0
  396. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/i18n/help.js +0 -0
  397. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/i18n/help.txt +0 -0
  398. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/i18n/import.js +0 -0
  399. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/i18n/scan.js +0 -0
  400. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/image/_host.js +0 -0
  401. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/image/arguments.json +0 -0
  402. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/image/build.js +0 -0
  403. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/image/help.js +0 -0
  404. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/image/help.txt +0 -0
  405. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/image/list.js +0 -0
  406. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/image/man.js +0 -0
  407. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/image/rm.js +0 -0
  408. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/image/run.js +0 -0
  409. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/index.js +0 -0
  410. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/inspector/help.js +0 -0
  411. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/inspector/help.txt +0 -0
  412. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/inspector/open.js +0 -0
  413. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/man-render.js +0 -0
  414. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/minion/arguments.json +0 -0
  415. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/minion/help.js +0 -0
  416. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/minion/help.txt +0 -0
  417. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/minion/kill.js +0 -0
  418. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/minion/list.js +0 -0
  419. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/msg.json +0 -0
  420. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/port/help.js +0 -0
  421. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/port/help.txt +0 -0
  422. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/port/inc/scan.js +0 -0
  423. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/port/set.js +0 -0
  424. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/project/arguments.json +0 -0
  425. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/project/backup.js +0 -0
  426. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/project/build.js +0 -0
  427. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/project/help.js +0 -0
  428. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/project/help.txt +0 -0
  429. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/project/import.js +0 -0
  430. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/project/list.js +0 -0
  431. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/project/man.js +0 -0
  432. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/project/move.js +0 -0
  433. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/project/remove.js +0 -0
  434. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/project/restart.js +0 -0
  435. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/project/restore.js +0 -0
  436. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/project/rm.js +0 -0
  437. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/project/start.js +0 -0
  438. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/project/status.js +0 -0
  439. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/project/stop.js +0 -0
  440. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/protocol/arguments.json +0 -0
  441. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/protocol/help.js +0 -0
  442. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/protocol/help.txt +0 -0
  443. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/protocol/list.js +0 -0
  444. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/protocol/remove.js +0 -0
  445. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/scope/add.js +0 -0
  446. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/scope/help.js +0 -0
  447. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/scope/help.txt +0 -0
  448. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/scope/inc/name.js +0 -0
  449. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/scope/link-local.js +0 -0
  450. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/scope/link-production.js +0 -0
  451. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/scope/list.js +0 -0
  452. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/scope/remove.js +0 -0
  453. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/scope/rm.js +0 -0
  454. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/scope/use.js +0 -0
  455. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/secrets/arguments.json +0 -0
  456. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/secrets/check.js +0 -0
  457. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/secrets/help.js +0 -0
  458. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/secrets/help.txt +0 -0
  459. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/secrets/scan.js +0 -0
  460. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/service/help.js +0 -0
  461. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/service/help.txt +0 -0
  462. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/service/list.js +0 -0
  463. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/service/man.js +0 -0
  464. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/service/start.js +0 -0
  465. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/storage/arguments.json +0 -0
  466. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/storage/gc.js +0 -0
  467. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/storage/help.txt +0 -0
  468. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/storage/stats.js +0 -0
  469. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/storage/verify.js +0 -0
  470. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd/view/add.js +0 -0
  471. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd-status-format/package.json +0 -0
  472. /package/framework/{v0.6.33 → v0.7.0}/lib/cmd-status-format/src/main.js +0 -0
  473. /package/framework/{v0.6.33 → v0.7.0}/lib/collection/README.md +0 -0
  474. /package/framework/{v0.6.33 → v0.7.0}/lib/collection/build.json +0 -0
  475. /package/framework/{v0.6.33 → v0.7.0}/lib/collection/package.json +0 -0
  476. /package/framework/{v0.6.33 → v0.7.0}/lib/collection/src/main.js +0 -0
  477. /package/framework/{v0.6.33 → v0.7.0}/lib/conf-view/package.json +0 -0
  478. /package/framework/{v0.6.33 → v0.7.0}/lib/conf-view/src/main.js +0 -0
  479. /package/framework/{v0.6.33 → v0.7.0}/lib/config.js +0 -0
  480. /package/framework/{v0.6.33 → v0.7.0}/lib/connector-config/package.json +0 -0
  481. /package/framework/{v0.6.33 → v0.7.0}/lib/connector-config/src/main.js +0 -0
  482. /package/framework/{v0.6.33 → v0.7.0}/lib/connector-error/package.json +0 -0
  483. /package/framework/{v0.6.33 → v0.7.0}/lib/connector-error/src/main.js +0 -0
  484. /package/framework/{v0.6.33 → v0.7.0}/lib/connector-registry/package.json +0 -0
  485. /package/framework/{v0.6.33 → v0.7.0}/lib/connector-registry/src/main.js +0 -0
  486. /package/framework/{v0.6.33 → v0.7.0}/lib/cron/README.md +0 -0
  487. /package/framework/{v0.6.33 → v0.7.0}/lib/cron/package.json +0 -0
  488. /package/framework/{v0.6.33 → v0.7.0}/lib/cron/src/main.js +0 -0
  489. /package/framework/{v0.6.33 → v0.7.0}/lib/domain/LICENSE +0 -0
  490. /package/framework/{v0.6.33 → v0.7.0}/lib/domain/README.md +0 -0
  491. /package/framework/{v0.6.33 → v0.7.0}/lib/domain/package.json +0 -0
  492. /package/framework/{v0.6.33 → v0.7.0}/lib/domain/src/main.js +0 -0
  493. /package/framework/{v0.6.33 → v0.7.0}/lib/dto/package.json +0 -0
  494. /package/framework/{v0.6.33 → v0.7.0}/lib/dto/src/main.js +0 -0
  495. /package/framework/{v0.6.33 → v0.7.0}/lib/dto-pipe/package.json +0 -0
  496. /package/framework/{v0.6.33 → v0.7.0}/lib/dto-pipe/src/main.js +0 -0
  497. /package/framework/{v0.6.33 → v0.7.0}/lib/dto-types/package.json +0 -0
  498. /package/framework/{v0.6.33 → v0.7.0}/lib/dto-types/src/main.js +0 -0
  499. /package/framework/{v0.6.33 → v0.7.0}/lib/duration/package.json +0 -0
  500. /package/framework/{v0.6.33 → v0.7.0}/lib/duration/src/main.js +0 -0
  501. /package/framework/{v0.6.33 → v0.7.0}/lib/generator/index.js +0 -0
  502. /package/framework/{v0.6.33 → v0.7.0}/lib/i18n/package.json +0 -0
  503. /package/framework/{v0.6.33 → v0.7.0}/lib/i18n/src/main.js +0 -0
  504. /package/framework/{v0.6.33 → v0.7.0}/lib/idempotency/package.json +0 -0
  505. /package/framework/{v0.6.33 → v0.7.0}/lib/idempotency/src/main.js +0 -0
  506. /package/framework/{v0.6.33 → v0.7.0}/lib/image-build/package.json +0 -0
  507. /package/framework/{v0.6.33 → v0.7.0}/lib/image-build/src/main.js +0 -0
  508. /package/framework/{v0.6.33 → v0.7.0}/lib/index.js +0 -0
  509. /package/framework/{v0.6.33 → v0.7.0}/lib/inherits/LICENSE +0 -0
  510. /package/framework/{v0.6.33 → v0.7.0}/lib/inherits/README.md +0 -0
  511. /package/framework/{v0.6.33 → v0.7.0}/lib/inherits/package.json +0 -0
  512. /package/framework/{v0.6.33 → v0.7.0}/lib/inherits/src/main.js +0 -0
  513. /package/framework/{v0.6.33 → v0.7.0}/lib/inspector-events/package.json +0 -0
  514. /package/framework/{v0.6.33 → v0.7.0}/lib/inspector-events/src/main.js +0 -0
  515. /package/framework/{v0.6.33 → v0.7.0}/lib/inspector-redact/package.json +0 -0
  516. /package/framework/{v0.6.33 → v0.7.0}/lib/inspector-redact/src/main.js +0 -0
  517. /package/framework/{v0.6.33 → v0.7.0}/lib/instrument/package.json +0 -0
  518. /package/framework/{v0.6.33 → v0.7.0}/lib/instrument/src/main.js +0 -0
  519. /package/framework/{v0.6.33 → v0.7.0}/lib/job/package.json +0 -0
  520. /package/framework/{v0.6.33 → v0.7.0}/lib/job/src/main.js +0 -0
  521. /package/framework/{v0.6.33 → v0.7.0}/lib/job-store.js +0 -0
  522. /package/framework/{v0.6.33 → v0.7.0}/lib/json-config-header/package.json +0 -0
  523. /package/framework/{v0.6.33 → v0.7.0}/lib/json-config-header/src/main.js +0 -0
  524. /package/framework/{v0.6.33 → v0.7.0}/lib/kv/package.json +0 -0
  525. /package/framework/{v0.6.33 → v0.7.0}/lib/kv/src/main.js +0 -0
  526. /package/framework/{v0.6.33 → v0.7.0}/lib/kv-store.js +0 -0
  527. /package/framework/{v0.6.33 → v0.7.0}/lib/loading-state/package.json +0 -0
  528. /package/framework/{v0.6.33 → v0.7.0}/lib/loading-state/src/main.js +0 -0
  529. /package/framework/{v0.6.33 → v0.7.0}/lib/logger/README.md +0 -0
  530. /package/framework/{v0.6.33 → v0.7.0}/lib/logger/package.json +0 -0
  531. /package/framework/{v0.6.33 → v0.7.0}/lib/logger/src/containers/default/index.js +0 -0
  532. /package/framework/{v0.6.33 → v0.7.0}/lib/logger/src/containers/file/index.js +0 -0
  533. /package/framework/{v0.6.33 → v0.7.0}/lib/logger/src/containers/mq/index.js +0 -0
  534. /package/framework/{v0.6.33 → v0.7.0}/lib/logger/src/containers/mq/speaker.js +0 -0
  535. /package/framework/{v0.6.33 → v0.7.0}/lib/logger/src/helper.js +0 -0
  536. /package/framework/{v0.6.33 → v0.7.0}/lib/logger/src/main.js +0 -0
  537. /package/framework/{v0.6.33 → v0.7.0}/lib/logger/src/redact.js +0 -0
  538. /package/framework/{v0.6.33 → v0.7.0}/lib/maintenance/package.json +0 -0
  539. /package/framework/{v0.6.33 → v0.7.0}/lib/maintenance/src/main.js +0 -0
  540. /package/framework/{v0.6.33 → v0.7.0}/lib/math/index.js +0 -0
  541. /package/framework/{v0.6.33 → v0.7.0}/lib/mcp-dispatch/package.json +0 -0
  542. /package/framework/{v0.6.33 → v0.7.0}/lib/mcp-dispatch/src/main.js +0 -0
  543. /package/framework/{v0.6.33 → v0.7.0}/lib/mcp-http/package.json +0 -0
  544. /package/framework/{v0.6.33 → v0.7.0}/lib/mcp-http/src/main.js +0 -0
  545. /package/framework/{v0.6.33 → v0.7.0}/lib/mcp-server/package.json +0 -0
  546. /package/framework/{v0.6.33 → v0.7.0}/lib/mcp-server/src/main.js +0 -0
  547. /package/framework/{v0.6.33 → v0.7.0}/lib/merge/README.md +0 -0
  548. /package/framework/{v0.6.33 → v0.7.0}/lib/merge/package.json +0 -0
  549. /package/framework/{v0.6.33 → v0.7.0}/lib/merge/src/main.js +0 -0
  550. /package/framework/{v0.6.33 → v0.7.0}/lib/message-validator/package.json +0 -0
  551. /package/framework/{v0.6.33 → v0.7.0}/lib/message-validator/src/main.js +0 -0
  552. /package/framework/{v0.6.33 → v0.7.0}/lib/metrics/package.json +0 -0
  553. /package/framework/{v0.6.33 → v0.7.0}/lib/metrics/src/main.js +0 -0
  554. /package/framework/{v0.6.33 → v0.7.0}/lib/model.js +0 -0
  555. /package/framework/{v0.6.33 → v0.7.0}/lib/money/package.json +0 -0
  556. /package/framework/{v0.6.33 → v0.7.0}/lib/money/src/main.js +0 -0
  557. /package/framework/{v0.6.33 → v0.7.0}/lib/multipart/package.json +0 -0
  558. /package/framework/{v0.6.33 → v0.7.0}/lib/multipart/src/main.js +0 -0
  559. /package/framework/{v0.6.33 → v0.7.0}/lib/net-locality/package.json +0 -0
  560. /package/framework/{v0.6.33 → v0.7.0}/lib/net-locality/src/main.js +0 -0
  561. /package/framework/{v0.6.33 → v0.7.0}/lib/nunjucks-filters/README.md +0 -0
  562. /package/framework/{v0.6.33 → v0.7.0}/lib/nunjucks-filters/package.json +0 -0
  563. /package/framework/{v0.6.33 → v0.7.0}/lib/nunjucks-filters/src/main.js +0 -0
  564. /package/framework/{v0.6.33 → v0.7.0}/lib/nunjucks-resolver/package.json +0 -0
  565. /package/framework/{v0.6.33 → v0.7.0}/lib/nunjucks-resolver/src/main.js +0 -0
  566. /package/framework/{v0.6.33 → v0.7.0}/lib/priority/package.json +0 -0
  567. /package/framework/{v0.6.33 → v0.7.0}/lib/priority/src/main.js +0 -0
  568. /package/framework/{v0.6.33 → v0.7.0}/lib/proc.js +0 -0
  569. /package/framework/{v0.6.33 → v0.7.0}/lib/push/package.json +0 -0
  570. /package/framework/{v0.6.33 → v0.7.0}/lib/push/src/main.js +0 -0
  571. /package/framework/{v0.6.33 → v0.7.0}/lib/rate-limit/package.json +0 -0
  572. /package/framework/{v0.6.33 → v0.7.0}/lib/rate-limit/src/main.js +0 -0
  573. /package/framework/{v0.6.33 → v0.7.0}/lib/release-watch/package.json +0 -0
  574. /package/framework/{v0.6.33 → v0.7.0}/lib/release-watch/src/main.js +0 -0
  575. /package/framework/{v0.6.33 → v0.7.0}/lib/render-cache/package.json +0 -0
  576. /package/framework/{v0.6.33 → v0.7.0}/lib/render-cache/src/main.js +0 -0
  577. /package/framework/{v0.6.33 → v0.7.0}/lib/render-cache-store.js +0 -0
  578. /package/framework/{v0.6.33 → v0.7.0}/lib/routing/README.md +0 -0
  579. /package/framework/{v0.6.33 → v0.7.0}/lib/routing/build.json +0 -0
  580. /package/framework/{v0.6.33 → v0.7.0}/lib/routing/package.json +0 -0
  581. /package/framework/{v0.6.33 → v0.7.0}/lib/routing-introspect/package.json +0 -0
  582. /package/framework/{v0.6.33 → v0.7.0}/lib/routing-introspect/src/main.js +0 -0
  583. /package/framework/{v0.6.33 → v0.7.0}/lib/secrets/package.json +0 -0
  584. /package/framework/{v0.6.33 → v0.7.0}/lib/secrets/src/backends/env.js +0 -0
  585. /package/framework/{v0.6.33 → v0.7.0}/lib/secrets/src/backends/exec.js +0 -0
  586. /package/framework/{v0.6.33 → v0.7.0}/lib/secrets/src/backends/file.js +0 -0
  587. /package/framework/{v0.6.33 → v0.7.0}/lib/secrets/src/declaration.js +0 -0
  588. /package/framework/{v0.6.33 → v0.7.0}/lib/secrets/src/env-file.js +0 -0
  589. /package/framework/{v0.6.33 → v0.7.0}/lib/secrets/src/main.js +0 -0
  590. /package/framework/{v0.6.33 → v0.7.0}/lib/secrets/src/sources.js +0 -0
  591. /package/framework/{v0.6.33 → v0.7.0}/lib/security-headers-emitter/package.json +0 -0
  592. /package/framework/{v0.6.33 → v0.7.0}/lib/security-headers-emitter/src/main.js +0 -0
  593. /package/framework/{v0.6.33 → v0.7.0}/lib/session-lifetime/package.json +0 -0
  594. /package/framework/{v0.6.33 → v0.7.0}/lib/session-lifetime/src/main.js +0 -0
  595. /package/framework/{v0.6.33 → v0.7.0}/lib/session-store.js +0 -0
  596. /package/framework/{v0.6.33 → v0.7.0}/lib/shell.js +0 -0
  597. /package/framework/{v0.6.33 → v0.7.0}/lib/sqlite-driver.js +0 -0
  598. /package/framework/{v0.6.33 → v0.7.0}/lib/sri/package.json +0 -0
  599. /package/framework/{v0.6.33 → v0.7.0}/lib/sri/src/main.js +0 -0
  600. /package/framework/{v0.6.33 → v0.7.0}/lib/state.js +0 -0
  601. /package/framework/{v0.6.33 → v0.7.0}/lib/storage/package.json +0 -0
  602. /package/framework/{v0.6.33 → v0.7.0}/lib/storage/src/local-cas.js +0 -0
  603. /package/framework/{v0.6.33 → v0.7.0}/lib/storage/src/local-stream.js +0 -0
  604. /package/framework/{v0.6.33 → v0.7.0}/lib/storage/src/local.js +0 -0
  605. /package/framework/{v0.6.33 → v0.7.0}/lib/storage/src/main.js +0 -0
  606. /package/framework/{v0.6.33 → v0.7.0}/lib/storage/src/meta-store.js +0 -0
  607. /package/framework/{v0.6.33 → v0.7.0}/lib/storage/src/s3.js +0 -0
  608. /package/framework/{v0.6.33 → v0.7.0}/lib/storage/src/util.js +0 -0
  609. /package/framework/{v0.6.33 → v0.7.0}/lib/storage-store.js +0 -0
  610. /package/framework/{v0.6.33 → v0.7.0}/lib/swig-filters/README.md +0 -0
  611. /package/framework/{v0.6.33 → v0.7.0}/lib/swig-filters/package.json +0 -0
  612. /package/framework/{v0.6.33 → v0.7.0}/lib/swig-resolver/package.json +0 -0
  613. /package/framework/{v0.6.33 → v0.7.0}/lib/swig-resolver/src/main.js +0 -0
  614. /package/framework/{v0.6.33 → v0.7.0}/lib/template-loaders/package.json +0 -0
  615. /package/framework/{v0.6.33 → v0.7.0}/lib/template-loaders/src/loaders/http.js +0 -0
  616. /package/framework/{v0.6.33 → v0.7.0}/lib/template-loaders/src/loaders/memory.js +0 -0
  617. /package/framework/{v0.6.33 → v0.7.0}/lib/template-loaders/src/main.js +0 -0
  618. /package/framework/{v0.6.33 → v0.7.0}/lib/url/README.md +0 -0
  619. /package/framework/{v0.6.33 → v0.7.0}/lib/url/index.js +0 -0
  620. /package/framework/{v0.6.33 → v0.7.0}/lib/url/routing.json +0 -0
  621. /package/framework/{v0.6.33 → v0.7.0}/lib/uuid/package.json +0 -0
  622. /package/framework/{v0.6.33 → v0.7.0}/lib/uuid/src/main.js +0 -0
  623. /package/framework/{v0.6.33 → v0.7.0}/lib/validator.js +0 -0
  624. /package/framework/{v0.6.33 → v0.7.0}/lib/watcher/package.json +0 -0
  625. /package/framework/{v0.6.33 → v0.7.0}/lib/watcher/src/main.js +0 -0
  626. /package/framework/{v0.6.33 → v0.7.0}/lib/ws-framing/package.json +0 -0
  627. /package/framework/{v0.6.33 → v0.7.0}/lib/ws-framing/src/main.js +0 -0
  628. /package/framework/{v0.6.33 → v0.7.0}/lib/ws-query/package.json +0 -0
  629. /package/framework/{v0.6.33 → v0.7.0}/lib/ws-query/src/main.js +0 -0
  630. /package/framework/{v0.6.33 → v0.7.0}/lib/ws-session/package.json +0 -0
  631. /package/framework/{v0.6.33 → v0.7.0}/lib/ws-session/src/main.js +0 -0
@@ -16,6 +16,8 @@ var Events = require('events');
16
16
  var EventEmitter = require('events').EventEmitter;
17
17
  var locales = require('./locales');
18
18
  var lib = require('./../lib');
19
+ // #B360 — the unanchored-`requirements` boot warning (server-side only; reads routing, never rewrites it)
20
+ var requirementsAnchor = require('./config.requirements-anchor');
19
21
  var Domain = lib.Domain;
20
22
  var domainLib = new Domain();
21
23
  var merge = lib.merge;
@@ -2542,6 +2544,19 @@ function Config(opt, contextResetNeeded) {
2542
2544
  }
2543
2545
  }
2544
2546
 
2547
+ // #B360 — a regex requirement is tested as a partial (search) match when a request is
2548
+ // matched, so `/[0-9]+/` accepts `123abc`. One warning per bundle lists the regex
2549
+ // requirements not anchored at both ends. Only the bundle this process runs (or every
2550
+ // bundle of a standalone process) is judged, as for `settings.log.redact` below, so a
2551
+ // bundle is not warned about its siblings. The routing table is read, never rewritten.
2552
+ var _requirementsApply = ( bundle === self.startingApp ) || ( self.Host && typeof(self.Host.isStandalone) == 'function' && self.Host.isStandalone() === true );
2553
+ if ( _requirementsApply ) {
2554
+ var _unanchored = requirementsAnchor.findUnanchoredRequirements(routing);
2555
+ if ( _unanchored.length > 0 ) {
2556
+ console.warn( requirementsAnchor.formatUnanchoredWarning(bundle, _unanchored) );
2557
+ }
2558
+ }
2559
+
2545
2560
  self.setRouting(bundle, env, scope, routing);
2546
2561
  // reverse routing
2547
2562
  for (let rule in routing) {
@@ -0,0 +1,218 @@
1
+ 'use strict';
2
+ /**
3
+ * #B360 — which routing `requirements` regexes are anchored at both ends.
4
+ *
5
+ * A `requirements` value such as `"/[0-9]+/"` is tested with `RegExp#test` when a request is
6
+ * matched, which is a partial (search) match: it accepts `123abc`, because the value CONTAINS a
7
+ * match. Only a pattern anchored at both ends (`^…$`) constrains the whole value. The config
8
+ * loader uses this module to warn once per bundle, listing the requirements that are not
9
+ * anchored; it only READS the routing table and never rewrites a requirement (the #P46
10
+ * route-candidate index caches per routing table object and reads requirement keys).
11
+ *
12
+ * "Anchored" is decided per top-level alternative, so `/(^draft$|^[0-9]+$)/` is anchored (each
13
+ * alternative is) while `/^txt|html$/` is not (`^txt` has no end anchor, `html$` no start
14
+ * anchor). The `m` flag makes `^` and `$` match at line breaks, so a value carrying a newline
15
+ * could pass: a pattern with it counts as not anchored. `validator::` requirements are not
16
+ * regexes and are skipped.
17
+ *
18
+ * Server-side only: the browser bundle never loads this file.
19
+ *
20
+ * @module core/config.requirements-anchor
21
+ */
22
+
23
+ /**
24
+ * Split a regex body on its top-level `|` — outside groups and character classes, and not
25
+ * escaped.
26
+ *
27
+ * @inner
28
+ * @private
29
+ * @param {string} body - The pattern between the slashes
30
+ * @returns {string[]} The top-level alternatives (one entry when there is no top-level `|`)
31
+ *
32
+ * @example
33
+ * splitTopLevel('^a|b$'); // ['^a', 'b$']
34
+ * splitTopLevel('^(a|b)$'); // ['^(a|b)$']
35
+ */
36
+ function splitTopLevel(body) {
37
+ var parts = [], depth = 0, inClass = false, start = 0;
38
+ for (var i = 0; i < body.length; i++) {
39
+ var c = body[i];
40
+ if (c === '\\') { i++; continue; }
41
+ if (inClass) {
42
+ if (c === ']') { inClass = false; }
43
+ } else if (c === '[') {
44
+ inClass = true;
45
+ } else if (c === '(') {
46
+ depth++;
47
+ } else if (c === ')') {
48
+ depth--;
49
+ } else if (c === '|' && depth === 0) {
50
+ parts.push(body.slice(start, i));
51
+ start = i + 1;
52
+ }
53
+ }
54
+ parts.push(body.slice(start));
55
+ return parts;
56
+ }
57
+
58
+ /**
59
+ * The inner body of a group that spans the whole alternative — `(…)` or `(?:…)` — or null.
60
+ *
61
+ * @inner
62
+ * @private
63
+ * @param {string} alt - One alternative
64
+ * @returns {?string} The group's inner body, without a leading `?:`, or null
65
+ *
66
+ * @example
67
+ * wholeGroupBody('(^a$|^b$)'); // '^a$|^b$'
68
+ * wholeGroupBody('(a)b'); // null
69
+ */
70
+ function wholeGroupBody(alt) {
71
+ if (alt.charAt(0) !== '(') { return null; }
72
+ var depth = 0, inClass = false;
73
+ for (var i = 0; i < alt.length; i++) {
74
+ var c = alt[i];
75
+ if (c === '\\') { i++; continue; }
76
+ if (inClass) {
77
+ if (c === ']') { inClass = false; }
78
+ } else if (c === '[') {
79
+ inClass = true;
80
+ } else if (c === '(') {
81
+ depth++;
82
+ } else if (c === ')') {
83
+ depth--;
84
+ if (depth === 0) {
85
+ if (i !== alt.length - 1) { return null; }
86
+ var inner = alt.slice(1, i);
87
+ return (inner.slice(0, 2) === '?:') ? inner.slice(2) : inner;
88
+ }
89
+ }
90
+ }
91
+ return null;
92
+ }
93
+
94
+ /**
95
+ * Whether a pattern ends with an unescaped `$` (an even count of backslashes before it).
96
+ *
97
+ * @inner
98
+ * @private
99
+ * @param {string} s - A pattern
100
+ * @returns {boolean} true when the final `$` is an anchor, not a literal
101
+ *
102
+ * @example
103
+ * endsWithAnchor('a$'); // true
104
+ * endsWithAnchor('a\\$'); // false (a literal dollar)
105
+ */
106
+ function endsWithAnchor(s) {
107
+ if (s.charAt(s.length - 1) !== '$') { return false; }
108
+ var backslashes = 0;
109
+ for (var j = s.length - 2; j >= 0 && s[j] === '\\'; j--) { backslashes++; }
110
+ return backslashes % 2 === 0;
111
+ }
112
+
113
+ /**
114
+ * Whether a regex body matches only whole values: every top-level alternative starts with
115
+ * `^` and ends with an unescaped `$`, or is one group spanning it whose body is anchored.
116
+ *
117
+ * @inner
118
+ * @private
119
+ * @param {string} body - The pattern between the slashes
120
+ * @returns {boolean} true when the body is anchored at both ends
121
+ *
122
+ * @example
123
+ * isAnchoredBody('^[0-9]+$'); // true
124
+ * isAnchoredBody('(^draft$|^[0-9]+$)'); // true
125
+ * isAnchoredBody('^[0-9]+'); // false
126
+ */
127
+ function isAnchoredBody(body) {
128
+ var alts = splitTopLevel(body);
129
+ if (alts.length > 1) {
130
+ return alts.every(isAnchoredBody);
131
+ }
132
+ var alt = alts[0];
133
+ if (alt.charAt(0) === '^' && alt.length > 1 && endsWithAnchor(alt)) {
134
+ return true;
135
+ }
136
+ var inner = wholeGroupBody(alt);
137
+ return (inner !== null && inner !== '') ? isAnchoredBody(inner) : false;
138
+ }
139
+
140
+ /**
141
+ * Whether a routing `requirements` value is a regex that is NOT anchored at both ends.
142
+ * A `validator::` value, a non-string or a value not written as `/body/flags` is not a
143
+ * regex requirement and returns false (the config loader refuses any value that is neither
144
+ * `/…` nor `validator::` at boot).
145
+ *
146
+ * @param {*} value - A requirements value as written in routing.json
147
+ * @returns {boolean} true when the value is a regex a partial match can satisfy
148
+ *
149
+ * @example
150
+ * isUnanchoredRequirement('/[0-9]+/'); // true
151
+ * isUnanchoredRequirement('/^[0-9]+$/'); // false
152
+ * isUnanchoredRequirement('/^[0-9]+$/m'); // true (the m flag)
153
+ * isUnanchoredRequirement('validator::{ isEmail: true }'); // false
154
+ */
155
+ function isUnanchoredRequirement(value) {
156
+ if (typeof(value) !== 'string' || value.charAt(0) !== '/') { return false; }
157
+ var last = value.lastIndexOf('/');
158
+ if (last < 1) { return true; } // `/` alone: an empty pattern matches anything
159
+ var body = value.slice(1, last);
160
+ var flags = value.slice(last + 1);
161
+ if (flags.indexOf('m') > -1) { return true; }
162
+ return !isAnchoredBody(body);
163
+ }
164
+
165
+ /**
166
+ * List a routing table's regex requirements that are not anchored at both ends, in table
167
+ * order. Reads only; the table and its requirement objects are left untouched.
168
+ *
169
+ * @param {object} routing - A bundle's routing table (rule name → rule)
170
+ * @returns {Array<{rule: string, key: string, value: string}>} The unanchored requirements
171
+ *
172
+ * @example
173
+ * findUnanchoredRequirements({ item: { url: '/item/:id', requirements: { id: '/[0-9]+/' } } });
174
+ * // [ { rule: 'item', key: 'id', value: '/[0-9]+/' } ]
175
+ */
176
+ function findUnanchoredRequirements(routing) {
177
+ var found = [];
178
+ if (!routing || typeof(routing) !== 'object') { return found; }
179
+ var rules = Object.keys(routing);
180
+ for (var r = 0; r < rules.length; r++) {
181
+ var rule = routing[rules[r]];
182
+ if (!rule || typeof(rule) !== 'object' || !rule.requirements || typeof(rule.requirements) !== 'object') { continue; }
183
+ var keys = Object.keys(rule.requirements);
184
+ for (var k = 0; k < keys.length; k++) {
185
+ var value = rule.requirements[keys[k]];
186
+ if (isUnanchoredRequirement(value)) {
187
+ found.push({ rule: rules[r], key: keys[k], value: value });
188
+ }
189
+ }
190
+ }
191
+ return found;
192
+ }
193
+
194
+ /**
195
+ * The single warning line for a bundle's unanchored requirements.
196
+ *
197
+ * @param {string} bundle - The bundle name
198
+ * @param {Array<{rule: string, key: string, value: string}>} list - From findUnanchoredRequirements
199
+ * @returns {string} The warning text
200
+ *
201
+ * @example
202
+ * formatUnanchoredWarning('api', [ { rule: 'item', key: 'id', value: '/[0-9]+/' } ]);
203
+ * // '[CONFIG][loadBundleConfig] [ api ] 1 routing requirement is not anchored ...: item { id: /[0-9]+/ } ...'
204
+ */
205
+ function formatUnanchoredWarning(bundle, list) {
206
+ var n = list.length;
207
+ var items = list.map(function (u) { return u.rule + ' { ' + u.key + ': ' + u.value + ' }'; }).join(', ');
208
+ return '[CONFIG][loadBundleConfig] [ ' + bundle + ' ] ' + n + ' routing requirement' + (n === 1 ? ' is' : 's are')
209
+ + ' not anchored at both ends (^…$), so ' + (n === 1 ? 'it is' : 'each is') + ' tested as a partial match and a value'
210
+ + ' that only contains a match passes: ' + items + '. Anchor ' + (n === 1 ? 'it' : 'them') + ' (e.g. /^[0-9]+$/),'
211
+ + ' or write an intended partial match in full (e.g. /^pk_.*$/). See https://gina.io/docs/guides/routing#regex-requirements';
212
+ }
213
+
214
+ module.exports = {
215
+ isUnanchoredRequirement : isUnanchoredRequirement,
216
+ findUnanchoredRequirements : findUnanchoredRequirements,
217
+ formatUnanchoredWarning : formatUnanchoredWarning
218
+ };
@@ -3284,7 +3284,12 @@ function SuperController(options) {
3284
3284
  ignoreWebRoot = false
3285
3285
  } else {
3286
3286
  res = local.res;
3287
- var stack = __stack.splice(1).toString().split(',').join('\n');
3287
+ // #B670 — `__stack` returns raw V8 CallSite objects, whose toString() has no
3288
+ // ` at ` prefix: joined as-is, the list escaped throwError's non-local cut
3289
+ // and shipped every absolute path to the client. Written as V8 frames, the
3290
+ // cut recognises it and the ref line keeps it whole.
3291
+ // was: var stack = __stack.splice(1).toString().split(',').join('\n');
3292
+ var stack = __stack.splice(1).map(function (c) { return ' at '+ c; }).join('\n');
3288
3293
  self.throwError(res, 500, new Error('RedirectError: @param `ignoreWebRoot` must be a boolean\n' + stack));
3289
3294
  return;
3290
3295
  }
@@ -5087,6 +5092,12 @@ if ( /^local$/i.test(process.env.NODE_SCOPE) ) {
5087
5092
  * pre-transport failure (missing host, unreadable certificate, open
5088
5093
  * circuit, nested-render refusal) — and on success `cb(false, data)`.
5089
5094
  *
5095
+ * The success `data` is the upstream body as the client parsed it — a
5096
+ * JSON-shaped body becomes an object, anything else stays a string — and
5097
+ * is the same over HTTP/1.1 and HTTP/2: a body without `status` arrives
5098
+ * without one. Before #P47 F6 the HTTP/2 client added `status: 200` to such
5099
+ * a body and logged a warn on every call.
5100
+ *
5090
5101
  * A query issued while the controller is rendering from another required
5091
5102
  * controller (`renderingStack` deeper than one frame — the required
5092
5103
  * controller shares the caller's options object) is refused without
@@ -6349,7 +6360,9 @@ if ( /^local$/i.test(process.env.NODE_SCOPE) ) {
6349
6360
  * before sending on a cached session whose last PONG is older than HTTP2_PREFLIGHT_STALE_MS.
6350
6361
  * Retries up to HTTP2_MAX_RETRIES times on transient failures (timeout, stream error,
6351
6362
  * premature close, 502, pre-flight failure) with HTTP2_RETRY_DELAY_MS backoff on 2nd+ retry.
6352
- * ECONNREFUSED is never retried.
6363
+ * ECONNREFUSED is never retried. A JSON-shaped response body is parsed and delivered as
6364
+ * it came, exactly like the HTTP/1.1 handler does: no `status` is added to a body that has
6365
+ * none (#P47 F6).
6353
6366
  *
6354
6367
  * @inner
6355
6368
  * @param {object} browser - HTTP/2 client module (node:http2)
@@ -7211,11 +7224,19 @@ if ( /^local$/i.test(process.env.NODE_SCOPE) ) {
7211
7224
  if (typeof data === 'string' && /^(\{|%7B|\[{)|\[\]/.test(data)) {
7212
7225
  try {
7213
7226
  data = JSON.parse(data);
7214
- if (typeof data.status === 'undefined') {
7215
- const currentRule = local.options.rule || local.req.routing.rule;
7216
- console.warn(`[${currentRule}] Response status code is undefined: switching to 200`);
7217
- data.status = 200;
7218
- }
7227
+ // #P47 F6 — the parsed body is delivered as it came, like the HTTP/1.1
7228
+ // client does. A body without `status` used to be logged ("Response status
7229
+ // code is undefined: switching to 200") and stamped `data.status = 200` on
7230
+ // every call: the same upstream answer then reached an HTTP/2 caller with
7231
+ // one key more than an HTTP/1.1 caller, `self.forward()` relayed that key
7232
+ // into the end client's body, and on a JSON string body (`"[]"`) the stamp
7233
+ // threw in strict mode and turned the success into a 500. The branch below
7234
+ // already reads an absent `status` as success, so nothing depended on it.
7235
+ // replaced: if (typeof data.status === 'undefined') {
7236
+ // replaced: const currentRule = local.options.rule || local.req.routing.rule;
7237
+ // replaced: console.warn(`[${currentRule}] Response status code is undefined: switching to 200`);
7238
+ // replaced: data.status = 200;
7239
+ // replaced: }
7219
7240
  } catch (err) {
7220
7241
  data = { status: 500, error: err };
7221
7242
  console.error('[HTTP2] JSON Parse Error:', err);
@@ -8849,6 +8870,13 @@ if ( /^local$/i.test(process.env.NODE_SCOPE) ) {
8849
8870
  * dispatched via `renderCustomError` are consumer-owned — what the
8850
8871
  * template renders from `req.params.errorObject` is the consumer's call.
8851
8872
  *
8873
+ * #B670 — a stack passed AS the message (`throwError(res, 500, err.stack)`,
8874
+ * `throwError(500, err.stack)`, or an errorObj whose `title` / `message` /
8875
+ * `error` holds one) is treated like the `stack` field: outside local scope
8876
+ * the JSON body, the fallback HTML page and the data a custom error page
8877
+ * receives keep only its message line, and the full text goes to the
8878
+ * #ERRREF log line below. A caller's `msg` object is cut on a copy.
8879
+ *
8852
8880
  * #ERRREF — every JSON error body additionally carries a top-level
8853
8881
  * `ref`: a short incident ref minted per error (or honoured from a
8854
8882
  * relay-safe producer-set `ref` on the error object / msg), present in
@@ -9295,6 +9323,15 @@ if ( /^local$/i.test(process.env.NODE_SCOPE) ) {
9295
9323
  var _errDetail = errorObject.stack || errorObject.message
9296
9324
  || ( ( errorObject.error && typeof(errorObject.error) === 'object' ) ? JSON.stringify(errorObject.error) : errorObject.error )
9297
9325
  || '';
9326
+ // #B670 — the egress gate below cuts a stack-bearing title/message/error
9327
+ // to its first line outside local scope, so that text must be in this
9328
+ // line in full. It already is, unless a hand-built object's own `stack`
9329
+ // was logged in its place.
9330
+ for (var _dk = 0, _detailKeys = ['title', 'message', 'error']; _dk < _detailKeys.length; ++_dk) {
9331
+ if ( typeof(errorObject[_detailKeys[_dk]]) == 'string' && /\n\s+at\s/.test(errorObject[_detailKeys[_dk]]) && String(_errDetail).indexOf(errorObject[_detailKeys[_dk]]) < 0 ) {
9332
+ _errDetail += '\n'+ errorObject[_detailKeys[_dk]];
9333
+ }
9334
+ }
9298
9335
  if ( msg && typeof(msg) == 'object' && msg.cause ) {
9299
9336
  _errDetail += '\ncaused by: '+ ( msg.cause.stack || msg.cause.message || msg.cause );
9300
9337
  }
@@ -9308,6 +9345,20 @@ if ( /^local$/i.test(process.env.NODE_SCOPE) ) {
9308
9345
  if (!_isLocalScope && errorObject && errorObject.stack) {
9309
9346
  delete errorObject.stack;
9310
9347
  }
9348
+ // #B670 — a stack passed AS the message (`throwError(res, 500, err.stack)`,
9349
+ // the 2-arg form, or an errorObj whose `message` / `error` holds one)
9350
+ // carries the frames the gate above strips from the `stack` field.
9351
+ // Outside local scope the wire keeps its message line only — the same
9352
+ // rule as #B131 on the server-side twin; the pairing line above logged
9353
+ // the full text. Written inline: test/core/error-ref.test.js runs this
9354
+ // window as extracted bytes, where a module-level helper is out of reach.
9355
+ if (!_isLocalScope && errorObject) {
9356
+ for (var _wk = 0, _wireKeys = ['title', 'message', 'error']; _wk < _wireKeys.length; ++_wk) {
9357
+ if ( typeof(errorObject[_wireKeys[_wk]]) == 'string' && /\n\s+at\s/.test(errorObject[_wireKeys[_wk]]) ) {
9358
+ errorObject[_wireKeys[_wk]] = errorObject[_wireKeys[_wk]].split('\n')[0];
9359
+ }
9360
+ }
9361
+ }
9311
9362
 
9312
9363
  var errOutput = null, output = errorObject.toString();
9313
9364
  if ( output == '[object Object]' ) {
@@ -9366,7 +9417,50 @@ if ( /^local$/i.test(process.env.NODE_SCOPE) ) {
9366
9417
  var _logMsg = errorObject.stack || errorObject.message
9367
9418
  || (typeof(errorObject.error) === 'object' ? JSON.stringify(errorObject.error) : errorObject.error)
9368
9419
  || JSON.stringify(errorObject);
9420
+ // #B670 — when the caller passed a stack AS the message, `stack` above is
9421
+ // the throwError callsite: add the error's own text, which is logged
9422
+ // nowhere else and is cut from the page below outside local scope.
9423
+ for (var _lk = 0, _logKeys = ['title', 'message', 'error']; _lk < _logKeys.length; ++_lk) {
9424
+ if ( typeof(errorObject[_logKeys[_lk]]) == 'string' && /\n\s+at\s/.test(errorObject[_logKeys[_lk]]) && String(_logMsg).indexOf(errorObject[_logKeys[_lk]]) < 0 ) {
9425
+ _logMsg += '\n'+ errorObject[_logKeys[_lk]];
9426
+ }
9427
+ }
9369
9428
  console.error('[ ref '+ _errRef +' ][ req '+ ( ( req && req._ginaReqId ) || '-' ) +' ] '+ req.method +' [ '+ errorObject.status +' ] '+ req.url + '\n'+ _logMsg);
9429
+ } else if ( msg && typeof(msg) == 'object' ) {
9430
+ // #B670 — the (res, code, errorObj) shape reaches this branch with no
9431
+ // errorObject, so no line paired the ref the page renders. Log the
9432
+ // caller's own text against it, like the line above.
9433
+ var _msgLog = '';
9434
+ for (var _mk = 0, _msgKeys = ['stack', 'message', 'error', 'title']; _mk < _msgKeys.length; ++_mk) {
9435
+ if ( typeof(msg[_msgKeys[_mk]]) == 'string' && msg[_msgKeys[_mk]] && _msgLog.indexOf(msg[_msgKeys[_mk]]) < 0 ) {
9436
+ _msgLog += ( _msgLog ? '\n' : '' ) + msg[_msgKeys[_mk]];
9437
+ }
9438
+ }
9439
+ console.error('[ ref '+ _errRef +' ][ req '+ ( ( req && req._ginaReqId ) || '-' ) +' ] '+ req.method +' [ '+ code +' ] '+ req.url + ( _msgLog ? '\n'+ _msgLog : '' ));
9440
+ }
9441
+
9442
+ // #B670 — outside local scope the page (the inline fallback page, or a
9443
+ // custom error page through `page.data` and `req.params.errorObject`)
9444
+ // keeps only the message line of a stack-bearing title/message/error,
9445
+ // like the JSON wire; the ref lines above logged the full text.
9446
+ // `errorObject` is cut in place, as the JSON branch's stack gate already
9447
+ // edits it; the caller's `msg` is replaced by a copy, never written.
9448
+ if ( !_isLocalScope ) {
9449
+ var _msgCopy = null;
9450
+ for (var _pk = 0, _pageKeys = ['title', 'message', 'error']; _pk < _pageKeys.length; ++_pk) {
9451
+ if ( errorObject && typeof(errorObject) == 'object' && typeof(errorObject[_pageKeys[_pk]]) == 'string' && /\n\s+at\s/.test(errorObject[_pageKeys[_pk]]) ) {
9452
+ errorObject[_pageKeys[_pk]] = errorObject[_pageKeys[_pk]].split('\n')[0];
9453
+ }
9454
+ if ( msg && typeof(msg) == 'object' && typeof(msg[_pageKeys[_pk]]) == 'string' && /\n\s+at\s/.test(msg[_pageKeys[_pk]]) ) {
9455
+ if ( !_msgCopy ) {
9456
+ _msgCopy = { title: msg.title, error: msg.error, message: msg.message, stack: msg.stack };
9457
+ }
9458
+ _msgCopy[_pageKeys[_pk]] = msg[_pageKeys[_pk]].split('\n')[0];
9459
+ }
9460
+ }
9461
+ if ( _msgCopy ) {
9462
+ msg = _msgCopy;
9463
+ }
9370
9464
  }
9371
9465
 
9372
9466
  // intercept none HTML mime types
@@ -133,7 +133,7 @@ function getSwigEngine(swigMod, templateRoot, loader, autoescape, SwigFilters, t
133
133
  });
134
134
  // #B25 / #TPL1 Tier-2 — register the gina filters ONCE on the shared
135
135
  // engine (context-free; per-request context flows via _renderALS).
136
- registerGinaFilters(engine, SwigFilters, throwError);
136
+ registerGinaFilters(engine, SwigFilters, throwError, (autoescape === true));
137
137
  process.gina._swigEngines[key] = {
138
138
  engine: engine,
139
139
  compiled: new Map()
@@ -227,15 +227,19 @@ function computeIsProxyHost(req, localOptions) {
227
227
  * shared filter table can't bleed one request's context into another's
228
228
  * interleaved async render (#B25). The build-time conf is therefore empty —
229
229
  * everything flows through the ALS store stamped by the render `.run()` wrap.
230
+ * The one exception is the engine's autoescape mode (#B359 prep): nl2br escapes
231
+ * its input and is flagged `.safe` only when the engine escapes, and the empty
232
+ * options cannot say so, so it is passed explicitly.
230
233
  *
231
234
  * @inner
232
235
  * @param {*} engine - The per-bundle swig engine instance
233
236
  * @param {function} SwigFilters - The SwigFilters factory (from `deps`)
234
237
  * @param {function} throwError - `self.throwError`, carried for the singleton-fallback path
238
+ * @param {boolean} [autoescape=false] - The engine's own autoescape mode
235
239
  * @returns {void}
236
240
  */
237
- function registerGinaFilters(engine, SwigFilters, throwError) {
238
- var filters = SwigFilters({ options: {}, isProxyHost: false, throwError: throwError });
241
+ function registerGinaFilters(engine, SwigFilters, throwError, autoescape) {
242
+ var filters = SwigFilters({ options: {}, isProxyHost: false, throwError: throwError, autoescape: (autoescape === true) });
239
243
 
240
244
  for (var name in filters) {
241
245
  if (typeof filters[name] === 'function' && name !== 'getConfig') {
@@ -21,6 +21,46 @@ var releaseBanner = require('./release-banner');
21
21
  // Precompiled regex — avoids per-request RegExp allocation (#P3)
22
22
  var blacklistRe = /[<>]/g;
23
23
 
24
+ /**
25
+ * #B690 — the asset placeholders this delegate injects into the layout. Their values
26
+ * (`data.page.view.stylesheets` / `.scripts`) are the `<link>` / `<script>` tags gina
27
+ * builds from templates.json, so they are injected with `| safe`: under
28
+ * `settings.swig.autoescape: true` a bare placeholder rendered every injected tag as
29
+ * visible text and the page lost its CSS and JS. With autoescape off (the default until
30
+ * 0.8.0) `safe` passes its input through, so the output is unchanged. The render-nunjucks
31
+ * delegate documents the same `| safe` form for a layout that places them itself.
32
+ *
33
+ * @constant
34
+ * @type {string}
35
+ * @private
36
+ */
37
+ var STYLESHEETS_PLACEHOLDER = '{{ page.view.stylesheets | safe }}';
38
+ /**
39
+ * #B690 — see STYLESHEETS_PLACEHOLDER.
40
+ *
41
+ * @constant
42
+ * @type {string}
43
+ * @private
44
+ */
45
+ var SCRIPTS_PLACEHOLDER = '{{ page.view.scripts | safe }}';
46
+ /**
47
+ * #B690 — a layout that already holds the stylesheets placeholder, bare or with `| safe`
48
+ * (its own, or one injected by an earlier pass), is not injected a second time.
49
+ *
50
+ * @constant
51
+ * @type {RegExp}
52
+ * @private
53
+ */
54
+ var STYLESHEETS_PLACED_RE = /\{\{\s+(page\.view\.stylesheets)(\s*\|\s*safe)?\s+\}\}/;
55
+ /**
56
+ * #B690 — the scripts twin of STYLESHEETS_PLACED_RE (single spaces, as before).
57
+ *
58
+ * @constant
59
+ * @type {RegExp}
60
+ * @private
61
+ */
62
+ var SCRIPTS_PLACED_RE = /\{\{ page\.view\.scripts(\s*\|\s*safe)? \}\}/;
63
+
24
64
  /**
25
65
  * Lazily construct the process-wide render-context AsyncLocalStorage, parked on
26
66
  * `process.gina` so it survives dev-mode `require.cache` eviction of this
@@ -1460,8 +1500,8 @@ module.exports = async function render(userData, displayInspector, errOptions, d
1460
1500
  }
1461
1501
 
1462
1502
  // adding stylesheets
1463
- if (!isWithoutLayout && data.page.view.stylesheets && !/\{\{\s+(page\.view\.stylesheets)\s+\}\}/.test(layout) ) {
1464
- layout = layout.replace(/\<\/head\>/i, '\n\t{{ page.view.stylesheets }}\n</head>')
1503
+ if (!isWithoutLayout && data.page.view.stylesheets && !STYLESHEETS_PLACED_RE.test(layout) ) {
1504
+ layout = layout.replace(/\<\/head\>/i, '\n\t'+ STYLESHEETS_PLACEHOLDER +'\n</head>')
1465
1505
  }
1466
1506
 
1467
1507
  if (hasViews() && isWithoutLayout) {
@@ -1623,18 +1663,18 @@ module.exports = async function render(userData, displayInspector, errOptions, d
1623
1663
  layout.replace('{{ page.view.scripts }}', '');
1624
1664
  // placed in the HEAD excepted when rendering a partial or when `isDeferModeEnabled` == true
1625
1665
  if (isLoadingPartial) {
1626
- if ( !/\{\{ page\.view\.scripts \}\}/.test(layout) ) {
1627
- layout += '\t{{ page.view.scripts }}';
1666
+ if ( !SCRIPTS_PLACED_RE.test(layout) ) {
1667
+ layout += '\t'+ SCRIPTS_PLACEHOLDER;
1628
1668
  }
1629
1669
  } else {
1630
1670
  // placed in the HEAD
1631
1671
  if ( isDeferModeEnabled ) {
1632
- layout = layout.replace(/\<\/head\>/i, '\t{{ page.view.scripts }}\n\t</head>');
1672
+ layout = layout.replace(/\<\/head\>/i, '\t'+ SCRIPTS_PLACEHOLDER +'\n\t</head>');
1633
1673
  }
1634
1674
  // placed in the BODY
1635
1675
  else {
1636
- if ( !/\{\{ page\.view\.scripts \}\}/.test(layout) ) {
1637
- layout = layout.replace(/\<\/body\>/i, '\t{{ page.view.scripts }}\n</body>');
1676
+ if ( !SCRIPTS_PLACED_RE.test(layout) ) {
1677
+ layout = layout.replace(/\<\/body\>/i, '\t'+ SCRIPTS_PLACEHOLDER +'\n</body>');
1638
1678
  }
1639
1679
  if (hasExternalsPlugins) {
1640
1680
  for (let i =0, len = localOptions.template.externalPlugins.length; i<len; i++) {
@@ -1679,8 +1719,8 @@ module.exports = async function render(userData, displayInspector, errOptions, d
1679
1719
  // adding javascripts
1680
1720
  layout.replace('{{ page.view.scripts }}', '');
1681
1721
  if (isLoadingPartial) {
1682
- if ( !/\{\{ page\.view\.scripts \}\}/.test(layout) ) {
1683
- layout += '\t{{ page.view.scripts }}\n';
1722
+ if ( !SCRIPTS_PLACED_RE.test(layout) ) {
1723
+ layout += '\t'+ SCRIPTS_PLACEHOLDER +'\n';
1684
1724
  }
1685
1725
  if (
1686
1726
  !localOptions.template.javascriptsExcluded
@@ -1696,14 +1736,14 @@ module.exports = async function render(userData, displayInspector, errOptions, d
1696
1736
  // placed in the HEAD
1697
1737
  if (
1698
1738
  isDeferModeEnabled && /\<\/head\>/i.test(layout)
1699
- && !/\{\{ page\.view\.scripts \}\}/.test(layout)
1739
+ && !SCRIPTS_PLACED_RE.test(layout)
1700
1740
  ) { // placed in the HEAD
1701
- layout = layout.replace(/\<\/head\>/i, '\t{{ page.view.scripts }}\n\t</head>');
1741
+ layout = layout.replace(/\<\/head\>/i, '\t'+ SCRIPTS_PLACEHOLDER +'\n\t</head>');
1702
1742
  }
1703
1743
  // placed in the BODY
1704
1744
  else {
1705
- if ( !/\{\{ page\.view\.scripts \}\}/.test(layout) ) {
1706
- layout = layout.replace(/\<\/body\>/i, '\t{{ page.view.scripts }}\n</body>');
1745
+ if ( !SCRIPTS_PLACED_RE.test(layout) ) {
1746
+ layout = layout.replace(/\<\/body\>/i, '\t'+ SCRIPTS_PLACEHOLDER +'\n</body>');
1707
1747
  }
1708
1748
  if (hasExternalsPlugins) {
1709
1749
  for (let i =0, len = localOptions.template.externalPlugins.length; i<len; i++) {
@@ -3154,12 +3154,25 @@ gna.getRunDir = getRunDir;
3154
3154
  gna.getTmpDir = getTmpDir;
3155
3155
 
3156
3156
  /**
3157
- * Read the saved startup argv for a given bundle@project — used by
3158
- * `gina bundle:restart` to re-issue the exact same start command.
3157
+ * Resolve the argv dir — `<GINA_HOMEDIR>/run`, created `0700` when absent —
3158
+ * where each bundle's start argv is saved for the `gina tail --follow` crash
3159
+ * restart. Never the shared tmp dir: that restart executes the file's first token.
3160
+ *
3161
+ * @returns {string} Argv-dir path
3162
+ * @example
3163
+ * var dir = getArgvDir();
3164
+ */
3165
+ gna.getArgvDir = getArgvDir;
3166
+
3167
+ /**
3168
+ * Read the saved startup argv for a given bundle@project from the argv dir
3169
+ * (`getArgvDir()`) — used by `gina tail --follow` to restart a crashed bundle
3170
+ * with the exact same start command. On POSIX the file must be a regular file
3171
+ * owned by the current user that group/other cannot write, or it is refused.
3159
3172
  *
3160
3173
  * @param {string} bundle - Bundle name
3161
3174
  * @param {string} project - Project name
3162
- * @returns {string|null} Space-separated argv, or `null` when no file exists
3175
+ * @returns {string|null} Space-separated argv, or `null` when no usable file exists
3163
3176
  * @example
3164
3177
  * var argv = getBundleStartingArgv('myApp', 'demo');
3165
3178
  */