gina 0.7.2 → 0.7.3

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 (633) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/README.md +40 -40
  3. package/ROADMAP.md +1 -0
  4. package/bin/cli +29 -0
  5. package/bin/cmd +34 -25
  6. package/bin/gina +55 -15
  7. package/framework/v0.7.3/VERSION +1 -0
  8. package/framework/{v0.7.2 → v0.7.3}/core/asset/plugin/dist/vendor/gina/js/gina.js +44 -8
  9. package/framework/{v0.7.2 → v0.7.3}/core/asset/plugin/dist/vendor/gina/js/gina.min.js +602 -602
  10. package/framework/v0.7.3/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
  11. package/framework/v0.7.3/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
  12. package/framework/{v0.7.2 → v0.7.3}/core/config.js +5 -0
  13. package/framework/{v0.7.2 → v0.7.3}/core/controller/controller.js +39 -6
  14. package/framework/{v0.7.2 → v0.7.3}/core/controller/controller.render-swig.js +14 -1
  15. package/framework/v0.7.3/core/controller/preload-hints.js +230 -0
  16. package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/validator/src/main.js +26 -4
  17. package/framework/{v0.7.2 → v0.7.3}/core/server.js +181 -19
  18. package/framework/{v0.7.2 → v0.7.3}/core/template/conf/templates.json +2 -1
  19. package/framework/{v0.7.2 → v0.7.3}/lib/cmd/connector/add.js +1 -1
  20. package/framework/{v0.7.2 → v0.7.3}/lib/cmd/connector/help.txt +6 -5
  21. package/framework/{v0.7.2 → v0.7.3}/lib/cmd/framework/help.txt +5 -1
  22. package/framework/v0.7.3/lib/cmd/framework/inc/listen-error.js +217 -0
  23. package/framework/v0.7.3/lib/cmd/framework/inc/ps-titles.js +193 -0
  24. package/framework/{v0.7.2 → v0.7.3}/lib/cmd/gina-framework.1.md +2 -0
  25. package/framework/{v0.7.2 → v0.7.3}/lib/cmd/gina.1.md +4 -0
  26. package/framework/{v0.7.2 → v0.7.3}/package.json +1 -1
  27. package/gna.js +4 -4
  28. package/llms.txt +5 -5
  29. package/package.json +3 -3
  30. package/schema/settings.json +5 -0
  31. package/types/index.d.ts +1 -0
  32. package/utils/helper.js +33 -0
  33. package/framework/v0.7.2/VERSION +0 -1
  34. package/framework/v0.7.2/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
  35. package/framework/v0.7.2/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
  36. package/framework/v0.7.2/lib/cmd/framework/inc/ps-titles.js +0 -113
  37. /package/framework/{v0.7.2 → v0.7.3}/AUTHORS +0 -0
  38. /package/framework/{v0.7.2 → v0.7.3}/LICENSE +0 -0
  39. /package/framework/{v0.7.2 → v0.7.3}/core/asset/html/nolayout.html +0 -0
  40. /package/framework/{v0.7.2 → v0.7.3}/core/asset/html/static.html +0 -0
  41. /package/framework/{v0.7.2 → v0.7.3}/core/asset/img/android-chrome-192x192.png +0 -0
  42. /package/framework/{v0.7.2 → v0.7.3}/core/asset/img/android-chrome-512x512.png +0 -0
  43. /package/framework/{v0.7.2 → v0.7.3}/core/asset/img/apple-touch-icon.png +0 -0
  44. /package/framework/{v0.7.2 → v0.7.3}/core/asset/img/favicon-16x16.png +0 -0
  45. /package/framework/{v0.7.2 → v0.7.3}/core/asset/img/favicon-32x32.png +0 -0
  46. /package/framework/{v0.7.2 → v0.7.3}/core/asset/img/favicon.ico +0 -0
  47. /package/framework/{v0.7.2 → v0.7.3}/core/asset/plugin/README.md +0 -0
  48. /package/framework/{v0.7.2 → v0.7.3}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.css +0 -0
  49. /package/framework/{v0.7.2 → v0.7.3}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.js +0 -0
  50. /package/framework/{v0.7.2 → v0.7.3}/core/asset/plugin/dist/vendor/gina/beemaster/index.html +0 -0
  51. /package/framework/{v0.7.2 → v0.7.3}/core/asset/plugin/dist/vendor/gina/css/gina.min.css +0 -0
  52. /package/framework/{v0.7.2 → v0.7.3}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
  53. /package/framework/{v0.7.2 → v0.7.3}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
  54. /package/framework/{v0.7.2 → v0.7.3}/core/asset/plugin/dist/vendor/gina/html/statusbar.html +0 -0
  55. /package/framework/{v0.7.2 → v0.7.3}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.br +0 -0
  56. /package/framework/{v0.7.2 → v0.7.3}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.gz +0 -0
  57. /package/framework/{v0.7.2 → v0.7.3}/core/asset/plugin/dist/vendor/gina/inspector/have_heart_one-webfont.woff2 +0 -0
  58. /package/framework/{v0.7.2 → v0.7.3}/core/asset/plugin/dist/vendor/gina/inspector/index.html +0 -0
  59. /package/framework/{v0.7.2 → v0.7.3}/core/asset/plugin/dist/vendor/gina/inspector/inspector.css +0 -0
  60. /package/framework/{v0.7.2 → v0.7.3}/core/asset/plugin/dist/vendor/gina/inspector/inspector.js +0 -0
  61. /package/framework/{v0.7.2 → v0.7.3}/core/asset/plugin/dist/vendor/gina/inspector/logo.svg +0 -0
  62. /package/framework/{v0.7.2 → v0.7.3}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +0 -0
  63. /package/framework/{v0.7.2 → v0.7.3}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.br +0 -0
  64. /package/framework/{v0.7.2 → v0.7.3}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.gz +0 -0
  65. /package/framework/{v0.7.2 → v0.7.3}/core/config.requirements-anchor.js +0 -0
  66. /package/framework/{v0.7.2 → v0.7.3}/core/connectors/ai/index.js +0 -0
  67. /package/framework/{v0.7.2 → v0.7.3}/core/connectors/ai/lib/connector.js +0 -0
  68. /package/framework/{v0.7.2 → v0.7.3}/core/connectors/couchbase/index.js +0 -0
  69. /package/framework/{v0.7.2 → v0.7.3}/core/connectors/couchbase/lib/connector.js +0 -0
  70. /package/framework/{v0.7.2 → v0.7.3}/core/connectors/couchbase/lib/connector.v3.js +0 -0
  71. /package/framework/{v0.7.2 → v0.7.3}/core/connectors/couchbase/lib/connector.v4.js +0 -0
  72. /package/framework/{v0.7.2 → v0.7.3}/core/connectors/couchbase/lib/n1ql.js +0 -0
  73. /package/framework/{v0.7.2 → v0.7.3}/core/connectors/couchbase/lib/session-store.js +0 -0
  74. /package/framework/{v0.7.2 → v0.7.3}/core/connectors/couchbase/lib/session-store.v3.js +0 -0
  75. /package/framework/{v0.7.2 → v0.7.3}/core/connectors/couchbase/lib/session-store.v4.js +0 -0
  76. /package/framework/{v0.7.2 → v0.7.3}/core/connectors/couchbase/lib/storage-store.js +0 -0
  77. /package/framework/{v0.7.2 → v0.7.3}/core/connectors/duckdb/index.js +0 -0
  78. /package/framework/{v0.7.2 → v0.7.3}/core/connectors/duckdb/lib/connector.js +0 -0
  79. /package/framework/{v0.7.2 → v0.7.3}/core/connectors/mongodb/index.js +0 -0
  80. /package/framework/{v0.7.2 → v0.7.3}/core/connectors/mongodb/lib/connector.js +0 -0
  81. /package/framework/{v0.7.2 → v0.7.3}/core/connectors/mongodb/lib/job-store.js +0 -0
  82. /package/framework/{v0.7.2 → v0.7.3}/core/connectors/mongodb/lib/pipeline-loader.js +0 -0
  83. /package/framework/{v0.7.2 → v0.7.3}/core/connectors/mongodb/lib/session-store.js +0 -0
  84. /package/framework/{v0.7.2 → v0.7.3}/core/connectors/mysql/index.js +0 -0
  85. /package/framework/{v0.7.2 → v0.7.3}/core/connectors/mysql/lib/connector.js +0 -0
  86. /package/framework/{v0.7.2 → v0.7.3}/core/connectors/param-redact.js +0 -0
  87. /package/framework/{v0.7.2 → v0.7.3}/core/connectors/postgresql/index.js +0 -0
  88. /package/framework/{v0.7.2 → v0.7.3}/core/connectors/postgresql/lib/connector.js +0 -0
  89. /package/framework/{v0.7.2 → v0.7.3}/core/connectors/redis/index.js +0 -0
  90. /package/framework/{v0.7.2 → v0.7.3}/core/connectors/redis/lib/connector.js +0 -0
  91. /package/framework/{v0.7.2 → v0.7.3}/core/connectors/redis/lib/job-store.js +0 -0
  92. /package/framework/{v0.7.2 → v0.7.3}/core/connectors/redis/lib/kv-store.js +0 -0
  93. /package/framework/{v0.7.2 → v0.7.3}/core/connectors/redis/lib/render-cache-store.js +0 -0
  94. /package/framework/{v0.7.2 → v0.7.3}/core/connectors/redis/lib/session-store.js +0 -0
  95. /package/framework/{v0.7.2 → v0.7.3}/core/connectors/scylladb/index.js +0 -0
  96. /package/framework/{v0.7.2 → v0.7.3}/core/connectors/scylladb/lib/connector.js +0 -0
  97. /package/framework/{v0.7.2 → v0.7.3}/core/connectors/scylladb/lib/session-store.js +0 -0
  98. /package/framework/{v0.7.2 → v0.7.3}/core/connectors/settle-once.js +0 -0
  99. /package/framework/{v0.7.2 → v0.7.3}/core/connectors/sql-parser.js +0 -0
  100. /package/framework/{v0.7.2 → v0.7.3}/core/connectors/sqlite/index.js +0 -0
  101. /package/framework/{v0.7.2 → v0.7.3}/core/connectors/sqlite/lib/connector.js +0 -0
  102. /package/framework/{v0.7.2 → v0.7.3}/core/connectors/sqlite/lib/job-store.js +0 -0
  103. /package/framework/{v0.7.2 → v0.7.3}/core/connectors/sqlite/lib/kv-store.js +0 -0
  104. /package/framework/{v0.7.2 → v0.7.3}/core/connectors/sqlite/lib/session-store.js +0 -0
  105. /package/framework/{v0.7.2 → v0.7.3}/core/content.encoding +0 -0
  106. /package/framework/{v0.7.2 → v0.7.3}/core/controller/controller.framework.js +0 -0
  107. /package/framework/{v0.7.2 → v0.7.3}/core/controller/controller.render-json.js +0 -0
  108. /package/framework/{v0.7.2 → v0.7.3}/core/controller/controller.render-nunjucks-async.js +0 -0
  109. /package/framework/{v0.7.2 → v0.7.3}/core/controller/controller.render-nunjucks.js +0 -0
  110. /package/framework/{v0.7.2 → v0.7.3}/core/controller/controller.render-stream.js +0 -0
  111. /package/framework/{v0.7.2 → v0.7.3}/core/controller/controller.render-swig-async.js +0 -0
  112. /package/framework/{v0.7.2 → v0.7.3}/core/controller/controller.render-v1.js +0 -0
  113. /package/framework/{v0.7.2 → v0.7.3}/core/controller/controller.render-xml.js +0 -0
  114. /package/framework/{v0.7.2 → v0.7.3}/core/controller/index.js +0 -0
  115. /package/framework/{v0.7.2 → v0.7.3}/core/controller/inline-script.js +0 -0
  116. /package/framework/{v0.7.2 → v0.7.3}/core/controller/inspector-window-emit.js +0 -0
  117. /package/framework/{v0.7.2 → v0.7.3}/core/controller/release-banner.js +0 -0
  118. /package/framework/{v0.7.2 → v0.7.3}/core/dev/index.js +0 -0
  119. /package/framework/{v0.7.2 → v0.7.3}/core/dev/lib/class.js +0 -0
  120. /package/framework/{v0.7.2 → v0.7.3}/core/dev/lib/factory.js +0 -0
  121. /package/framework/{v0.7.2 → v0.7.3}/core/dev/lib/tools.js +0 -0
  122. /package/framework/{v0.7.2 → v0.7.3}/core/gna.js +0 -0
  123. /package/framework/{v0.7.2 → v0.7.3}/core/locales/README.md +0 -0
  124. /package/framework/{v0.7.2 → v0.7.3}/core/locales/currency.json +0 -0
  125. /package/framework/{v0.7.2 → v0.7.3}/core/locales/dist/language/en.json +0 -0
  126. /package/framework/{v0.7.2 → v0.7.3}/core/locales/dist/language/fr.json +0 -0
  127. /package/framework/{v0.7.2 → v0.7.3}/core/locales/dist/region/en.json +0 -0
  128. /package/framework/{v0.7.2 → v0.7.3}/core/locales/dist/region/fr.json +0 -0
  129. /package/framework/{v0.7.2 → v0.7.3}/core/locales/index.js +0 -0
  130. /package/framework/{v0.7.2 → v0.7.3}/core/mime.types +0 -0
  131. /package/framework/{v0.7.2 → v0.7.3}/core/model/entity.js +0 -0
  132. /package/framework/{v0.7.2 → v0.7.3}/core/model/index.js +0 -0
  133. /package/framework/{v0.7.2 → v0.7.3}/core/model/template/entityFactory.js +0 -0
  134. /package/framework/{v0.7.2 → v0.7.3}/core/model/template/index.js +0 -0
  135. /package/framework/{v0.7.2 → v0.7.3}/core/plugins/README.md +0 -0
  136. /package/framework/{v0.7.2 → v0.7.3}/core/plugins/index.js +0 -0
  137. /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/csrf/README.md +0 -0
  138. /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/csrf/package.json +0 -0
  139. /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/csrf/src/main.js +0 -0
  140. /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/README.md +0 -0
  141. /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/coep/README.md +0 -0
  142. /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/coep/package.json +0 -0
  143. /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/coep/src/main.js +0 -0
  144. /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/coop/README.md +0 -0
  145. /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/coop/package.json +0 -0
  146. /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/coop/src/main.js +0 -0
  147. /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/corp/README.md +0 -0
  148. /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/corp/package.json +0 -0
  149. /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/corp/src/main.js +0 -0
  150. /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/csp/README.md +0 -0
  151. /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/csp/package.json +0 -0
  152. /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/csp/src/main.js +0 -0
  153. /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/hide-powered-by/README.md +0 -0
  154. /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/hide-powered-by/package.json +0 -0
  155. /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/hide-powered-by/src/main.js +0 -0
  156. /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/hsts/README.md +0 -0
  157. /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/hsts/package.json +0 -0
  158. /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/hsts/src/main.js +0 -0
  159. /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/origin-agent-cluster/README.md +0 -0
  160. /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/origin-agent-cluster/package.json +0 -0
  161. /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/origin-agent-cluster/src/main.js +0 -0
  162. /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/package.json +0 -0
  163. /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/referrer-policy/README.md +0 -0
  164. /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/referrer-policy/package.json +0 -0
  165. /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/referrer-policy/src/main.js +0 -0
  166. /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/src/main.js +0 -0
  167. /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/x-content-type-options/README.md +0 -0
  168. /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/x-content-type-options/package.json +0 -0
  169. /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/x-content-type-options/src/main.js +0 -0
  170. /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/x-dns-prefetch-control/README.md +0 -0
  171. /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/x-dns-prefetch-control/package.json +0 -0
  172. /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/x-dns-prefetch-control/src/main.js +0 -0
  173. /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/x-download-options/README.md +0 -0
  174. /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/x-download-options/package.json +0 -0
  175. /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/x-download-options/src/main.js +0 -0
  176. /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/x-frame-options/README.md +0 -0
  177. /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/x-frame-options/package.json +0 -0
  178. /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/x-frame-options/src/main.js +0 -0
  179. /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/README.md +0 -0
  180. /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/package.json +0 -0
  181. /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/src/main.js +0 -0
  182. /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/x-xss-protection/README.md +0 -0
  183. /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/x-xss-protection/package.json +0 -0
  184. /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/x-xss-protection/src/main.js +0 -0
  185. /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/session/README.md +0 -0
  186. /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/session/package.json +0 -0
  187. /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/session/src/main.js +0 -0
  188. /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/storage/README.md +0 -0
  189. /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/storage/build.json +0 -0
  190. /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/storage/package.json +0 -0
  191. /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/storage/src/main.js +0 -0
  192. /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/validator/README.md +0 -0
  193. /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/validator/build.json +0 -0
  194. /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/validator/package.json +0 -0
  195. /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/validator/src/form-validator.js +0 -0
  196. /package/framework/{v0.7.2 → v0.7.3}/core/router.js +0 -0
  197. /package/framework/{v0.7.2 → v0.7.3}/core/server.express.js +0 -0
  198. /package/framework/{v0.7.2 → v0.7.3}/core/server.isaac.js +0 -0
  199. /package/framework/{v0.7.2 → v0.7.3}/core/server.isaac.rapid-reset.js +0 -0
  200. /package/framework/{v0.7.2 → v0.7.3}/core/server.route-candidates.js +0 -0
  201. /package/framework/{v0.7.2 → v0.7.3}/core/status.codes +0 -0
  202. /package/framework/{v0.7.2 → v0.7.3}/core/template/_gitignore +0 -0
  203. /package/framework/{v0.7.2 → v0.7.3}/core/template/boilerplate/bundle/config/app.json +0 -0
  204. /package/framework/{v0.7.2 → v0.7.3}/core/template/boilerplate/bundle/config/connectors.json +0 -0
  205. /package/framework/{v0.7.2 → v0.7.3}/core/template/boilerplate/bundle/config/routing.json +0 -0
  206. /package/framework/{v0.7.2 → v0.7.3}/core/template/boilerplate/bundle/config/settings.json +0 -0
  207. /package/framework/{v0.7.2 → v0.7.3}/core/template/boilerplate/bundle/config/settings.server.json +0 -0
  208. /package/framework/{v0.7.2 → v0.7.3}/core/template/boilerplate/bundle/config/templates.json +0 -0
  209. /package/framework/{v0.7.2 → v0.7.3}/core/template/boilerplate/bundle/config/watchers.json +0 -0
  210. /package/framework/{v0.7.2 → v0.7.3}/core/template/boilerplate/bundle/controllers/controller.content.js +0 -0
  211. /package/framework/{v0.7.2 → v0.7.3}/core/template/boilerplate/bundle/controllers/controller.js +0 -0
  212. /package/framework/{v0.7.2 → v0.7.3}/core/template/boilerplate/bundle/controllers/setup.js +0 -0
  213. /package/framework/{v0.7.2 → v0.7.3}/core/template/boilerplate/bundle/index.js +0 -0
  214. /package/framework/{v0.7.2 → v0.7.3}/core/template/boilerplate/bundle/locales/en.json +0 -0
  215. /package/framework/{v0.7.2 → v0.7.3}/core/template/boilerplate/bundle_namespace/controllers/controller.js +0 -0
  216. /package/framework/{v0.7.2 → v0.7.3}/core/template/boilerplate/bundle_public/css/default.css +0 -0
  217. /package/framework/{v0.7.2 → v0.7.3}/core/template/boilerplate/bundle_public/css/home.css +0 -0
  218. /package/framework/{v0.7.2 → v0.7.3}/core/template/boilerplate/bundle_public/css/vendor/readme.md +0 -0
  219. /package/framework/{v0.7.2 → v0.7.3}/core/template/boilerplate/bundle_public/favicon.ico +0 -0
  220. /package/framework/{v0.7.2 → v0.7.3}/core/template/boilerplate/bundle_public/js/components/x-checklist.js +0 -0
  221. /package/framework/{v0.7.2 → v0.7.3}/core/template/boilerplate/bundle_public/js/vendor/readme.md +0 -0
  222. /package/framework/{v0.7.2 → v0.7.3}/core/template/boilerplate/bundle_public/manifest.webmanifest +0 -0
  223. /package/framework/{v0.7.2 → v0.7.3}/core/template/boilerplate/bundle_public/readme.md +0 -0
  224. /package/framework/{v0.7.2 → v0.7.3}/core/template/boilerplate/bundle_public/sw.js +0 -0
  225. /package/framework/{v0.7.2 → v0.7.3}/core/template/boilerplate/bundle_templates/handlers/main.js +0 -0
  226. /package/framework/{v0.7.2 → v0.7.3}/core/template/boilerplate/bundle_templates/html/content/homepage.html +0 -0
  227. /package/framework/{v0.7.2 → v0.7.3}/core/template/boilerplate/bundle_templates/html/includes/error-msg-noscript.html +0 -0
  228. /package/framework/{v0.7.2 → v0.7.3}/core/template/boilerplate/bundle_templates/html/includes/error-msg-outdated-browser.html +0 -0
  229. /package/framework/{v0.7.2 → v0.7.3}/core/template/boilerplate/bundle_templates/html/includes/x-checklist.html +0 -0
  230. /package/framework/{v0.7.2 → v0.7.3}/core/template/boilerplate/bundle_templates/html/layouts/main.html +0 -0
  231. /package/framework/{v0.7.2 → v0.7.3}/core/template/command/gina.bat.tpl +0 -0
  232. /package/framework/{v0.7.2 → v0.7.3}/core/template/command/gina.tpl +0 -0
  233. /package/framework/{v0.7.2 → v0.7.3}/core/template/conf/env.json +0 -0
  234. /package/framework/{v0.7.2 → v0.7.3}/core/template/conf/manifest.json +0 -0
  235. /package/framework/{v0.7.2 → v0.7.3}/core/template/conf/package.json +0 -0
  236. /package/framework/{v0.7.2 → v0.7.3}/core/template/conf/settings.json +0 -0
  237. /package/framework/{v0.7.2 → v0.7.3}/core/template/conf/statics.json +0 -0
  238. /package/framework/{v0.7.2 → v0.7.3}/core/template/error/client/json/401.json +0 -0
  239. /package/framework/{v0.7.2 → v0.7.3}/core/template/error/client/json/403.json +0 -0
  240. /package/framework/{v0.7.2 → v0.7.3}/core/template/error/client/json/404.json +0 -0
  241. /package/framework/{v0.7.2 → v0.7.3}/core/template/error/server/html/50x.html +0 -0
  242. /package/framework/{v0.7.2 → v0.7.3}/core/template/error/server/json/500.json +0 -0
  243. /package/framework/{v0.7.2 → v0.7.3}/core/template/error/server/json/503.json +0 -0
  244. /package/framework/{v0.7.2 → v0.7.3}/core/template/extensions/logger/config.json +0 -0
  245. /package/framework/{v0.7.2 → v0.7.3}/helpers/console.js +0 -0
  246. /package/framework/{v0.7.2 → v0.7.3}/helpers/context.js +0 -0
  247. /package/framework/{v0.7.2 → v0.7.3}/helpers/data/LICENSE +0 -0
  248. /package/framework/{v0.7.2 → v0.7.3}/helpers/data/README.md +0 -0
  249. /package/framework/{v0.7.2 → v0.7.3}/helpers/data/package.json +0 -0
  250. /package/framework/{v0.7.2 → v0.7.3}/helpers/data/src/main.js +0 -0
  251. /package/framework/{v0.7.2 → v0.7.3}/helpers/dateFormat.js +0 -0
  252. /package/framework/{v0.7.2 → v0.7.3}/helpers/index.js +0 -0
  253. /package/framework/{v0.7.2 → v0.7.3}/helpers/json/LICENSE +0 -0
  254. /package/framework/{v0.7.2 → v0.7.3}/helpers/json/README.md +0 -0
  255. /package/framework/{v0.7.2 → v0.7.3}/helpers/json/package.json +0 -0
  256. /package/framework/{v0.7.2 → v0.7.3}/helpers/json/src/main.js +0 -0
  257. /package/framework/{v0.7.2 → v0.7.3}/helpers/path.js +0 -0
  258. /package/framework/{v0.7.2 → v0.7.3}/helpers/plugins/README.md +0 -0
  259. /package/framework/{v0.7.2 → v0.7.3}/helpers/plugins/package.json +0 -0
  260. /package/framework/{v0.7.2 → v0.7.3}/helpers/plugins/src/api-error.js +0 -0
  261. /package/framework/{v0.7.2 → v0.7.3}/helpers/plugins/src/main.js +0 -0
  262. /package/framework/{v0.7.2 → v0.7.3}/helpers/prototypes.js +0 -0
  263. /package/framework/{v0.7.2 → v0.7.3}/helpers/task.js +0 -0
  264. /package/framework/{v0.7.2 → v0.7.3}/helpers/text.js +0 -0
  265. /package/framework/{v0.7.2 → v0.7.3}/lib/admin/package.json +0 -0
  266. /package/framework/{v0.7.2 → v0.7.3}/lib/admin/src/main.js +0 -0
  267. /package/framework/{v0.7.2 → v0.7.3}/lib/archiver/README.md +0 -0
  268. /package/framework/{v0.7.2 → v0.7.3}/lib/archiver/build.json +0 -0
  269. /package/framework/{v0.7.2 → v0.7.3}/lib/archiver/package.json +0 -0
  270. /package/framework/{v0.7.2 → v0.7.3}/lib/archiver/src/dep/jszip.min.js +0 -0
  271. /package/framework/{v0.7.2 → v0.7.3}/lib/archiver/src/main.js +0 -0
  272. /package/framework/{v0.7.2 → v0.7.3}/lib/async/package.json +0 -0
  273. /package/framework/{v0.7.2 → v0.7.3}/lib/async/src/main.js +0 -0
  274. /package/framework/{v0.7.2 → v0.7.3}/lib/audit/package.json +0 -0
  275. /package/framework/{v0.7.2 → v0.7.3}/lib/audit/src/main.js +0 -0
  276. /package/framework/{v0.7.2 → v0.7.3}/lib/audit-store.js +0 -0
  277. /package/framework/{v0.7.2 → v0.7.3}/lib/authn/package.json +0 -0
  278. /package/framework/{v0.7.2 → v0.7.3}/lib/authn/src/lockout.js +0 -0
  279. /package/framework/{v0.7.2 → v0.7.3}/lib/authn/src/main.js +0 -0
  280. /package/framework/{v0.7.2 → v0.7.3}/lib/authn/src/totp.js +0 -0
  281. /package/framework/{v0.7.2 → v0.7.3}/lib/authz-gate/package.json +0 -0
  282. /package/framework/{v0.7.2 → v0.7.3}/lib/authz-gate/src/main.js +0 -0
  283. /package/framework/{v0.7.2 → v0.7.3}/lib/cache/README.md +0 -0
  284. /package/framework/{v0.7.2 → v0.7.3}/lib/cache/build.json +0 -0
  285. /package/framework/{v0.7.2 → v0.7.3}/lib/cache/package.json +0 -0
  286. /package/framework/{v0.7.2 → v0.7.3}/lib/cache/src/main.js +0 -0
  287. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/aliases.json +0 -0
  288. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/audit/arguments.json +0 -0
  289. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/audit/help.txt +0 -0
  290. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/audit/verify.js +0 -0
  291. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/bundle/add.js +0 -0
  292. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/bundle/arguments.json +0 -0
  293. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/bundle/build.js +0 -0
  294. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/bundle/copy.js +0 -0
  295. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/bundle/cp.js +0 -0
  296. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/bundle/help.js +0 -0
  297. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/bundle/help.txt +0 -0
  298. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/bundle/inc/boot-lines.js +0 -0
  299. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/bundle/inc/name-rewrite.js +0 -0
  300. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/bundle/inc/name.js +0 -0
  301. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/bundle/list.js +0 -0
  302. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/bundle/man.js +0 -0
  303. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/bundle/mcp-start.js +0 -0
  304. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/bundle/mcp.js +0 -0
  305. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/bundle/oas.js +0 -0
  306. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/bundle/openapi.js +0 -0
  307. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/bundle/remove.js +0 -0
  308. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/bundle/rename.js +0 -0
  309. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/bundle/restart.js +0 -0
  310. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/bundle/rm.js +0 -0
  311. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/bundle/start.js +0 -0
  312. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/bundle/status.js +0 -0
  313. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/bundle/stop.js +0 -0
  314. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/bundle/types.js +0 -0
  315. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/cache/arguments.json +0 -0
  316. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/cache/clear.js +0 -0
  317. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/cache/help.txt +0 -0
  318. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/cache/stats.js +0 -0
  319. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/connector/arguments.json +0 -0
  320. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/connector/help.js +0 -0
  321. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/connector/infer.js +0 -0
  322. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/connector/list.js +0 -0
  323. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/connector/migrate.js +0 -0
  324. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/connector/models.js +0 -0
  325. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/connector/remove.js +0 -0
  326. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/connector/rm.js +0 -0
  327. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/connector/test.js +0 -0
  328. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/container/arguments.json +0 -0
  329. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/container/help.js +0 -0
  330. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/container/help.txt +0 -0
  331. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/container/man.js +0 -0
  332. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/container/ps.js +0 -0
  333. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/container/stop.js +0 -0
  334. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/controller/add.js +0 -0
  335. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/controller/arguments.json +0 -0
  336. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/controller/help.txt +0 -0
  337. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/controller/inc/args.js +0 -0
  338. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/controller/inc/namespace.js +0 -0
  339. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/controller/inc/reference-rewrite.js +0 -0
  340. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/controller/inc/reference-scan.js +0 -0
  341. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/controller/inc/scaffold.js +0 -0
  342. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/controller/remove.js +0 -0
  343. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/controller/rename.js +0 -0
  344. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/controller/rm.js +0 -0
  345. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/env/add.js +0 -0
  346. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/env/get.js +0 -0
  347. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/env/help.js +0 -0
  348. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/env/help.txt +0 -0
  349. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/env/inc/name.js +0 -0
  350. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/env/link-dev.js +0 -0
  351. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/env/list.js +0 -0
  352. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/env/remove.js +0 -0
  353. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/env/rm.js +0 -0
  354. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/env/set.js +0 -0
  355. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/env/unset.js +0 -0
  356. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/env/use.js +0 -0
  357. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/framework/add.js +0 -0
  358. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/framework/arguments.json +0 -0
  359. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/framework/build.js +0 -0
  360. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/framework/dot.js +0 -0
  361. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/framework/get.js +0 -0
  362. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/framework/help.js +0 -0
  363. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/framework/init.js +0 -0
  364. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/framework/link-node-modules.js +0 -0
  365. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/framework/link.js +0 -0
  366. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/framework/list.js +0 -0
  367. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/framework/man.js +0 -0
  368. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/framework/msg.json +0 -0
  369. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/framework/open.js +0 -0
  370. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/framework/remove.js +0 -0
  371. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/framework/reset.js +0 -0
  372. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/framework/restart.js +0 -0
  373. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/framework/set.js +0 -0
  374. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/framework/start.js +0 -0
  375. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/framework/status.js +0 -0
  376. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/framework/stop.js +0 -0
  377. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/framework/tail.js +0 -0
  378. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/framework/update.js +0 -0
  379. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/framework/version.js +0 -0
  380. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/gina-dev.1.md +0 -0
  381. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/helper.js +0 -0
  382. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/i18n/add.js +0 -0
  383. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/i18n/arguments.json +0 -0
  384. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/i18n/export.js +0 -0
  385. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/i18n/help.js +0 -0
  386. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/i18n/help.txt +0 -0
  387. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/i18n/import.js +0 -0
  388. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/i18n/scan.js +0 -0
  389. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/image/_host.js +0 -0
  390. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/image/arguments.json +0 -0
  391. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/image/build.js +0 -0
  392. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/image/help.js +0 -0
  393. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/image/help.txt +0 -0
  394. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/image/list.js +0 -0
  395. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/image/man.js +0 -0
  396. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/image/rm.js +0 -0
  397. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/image/run.js +0 -0
  398. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/index.js +0 -0
  399. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/inspector/help.js +0 -0
  400. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/inspector/help.txt +0 -0
  401. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/inspector/open.js +0 -0
  402. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/man-render.js +0 -0
  403. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/minion/arguments.json +0 -0
  404. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/minion/help.js +0 -0
  405. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/minion/help.txt +0 -0
  406. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/minion/kill.js +0 -0
  407. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/minion/list.js +0 -0
  408. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/msg.json +0 -0
  409. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/port/help.js +0 -0
  410. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/port/help.txt +0 -0
  411. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/port/inc/scan.js +0 -0
  412. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/port/list.js +0 -0
  413. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/port/reset.js +0 -0
  414. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/port/set.js +0 -0
  415. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/project/add.js +0 -0
  416. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/project/arguments.json +0 -0
  417. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/project/backup.js +0 -0
  418. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/project/build.js +0 -0
  419. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/project/help.js +0 -0
  420. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/project/help.txt +0 -0
  421. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/project/import.js +0 -0
  422. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/project/inc/name.js +0 -0
  423. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/project/list.js +0 -0
  424. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/project/man.js +0 -0
  425. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/project/move.js +0 -0
  426. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/project/remove.js +0 -0
  427. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/project/rename.js +0 -0
  428. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/project/restart.js +0 -0
  429. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/project/restore.js +0 -0
  430. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/project/rm.js +0 -0
  431. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/project/start.js +0 -0
  432. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/project/status.js +0 -0
  433. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/project/stop.js +0 -0
  434. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/protocol/arguments.json +0 -0
  435. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/protocol/help.js +0 -0
  436. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/protocol/help.txt +0 -0
  437. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/protocol/list.js +0 -0
  438. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/protocol/remove.js +0 -0
  439. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/protocol/set.js +0 -0
  440. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/scope/add.js +0 -0
  441. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/scope/help.js +0 -0
  442. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/scope/help.txt +0 -0
  443. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/scope/inc/name.js +0 -0
  444. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/scope/link-local.js +0 -0
  445. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/scope/link-production.js +0 -0
  446. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/scope/list.js +0 -0
  447. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/scope/remove.js +0 -0
  448. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/scope/rm.js +0 -0
  449. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/scope/use.js +0 -0
  450. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/secrets/arguments.json +0 -0
  451. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/secrets/check.js +0 -0
  452. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/secrets/help.js +0 -0
  453. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/secrets/help.txt +0 -0
  454. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/secrets/scan.js +0 -0
  455. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/service/help.js +0 -0
  456. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/service/help.txt +0 -0
  457. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/service/list.js +0 -0
  458. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/service/man.js +0 -0
  459. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/service/start.js +0 -0
  460. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/storage/arguments.json +0 -0
  461. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/storage/gc.js +0 -0
  462. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/storage/help.txt +0 -0
  463. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/storage/stats.js +0 -0
  464. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/storage/verify.js +0 -0
  465. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/view/add.js +0 -0
  466. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd-status-format/package.json +0 -0
  467. /package/framework/{v0.7.2 → v0.7.3}/lib/cmd-status-format/src/main.js +0 -0
  468. /package/framework/{v0.7.2 → v0.7.3}/lib/collection/README.md +0 -0
  469. /package/framework/{v0.7.2 → v0.7.3}/lib/collection/build.json +0 -0
  470. /package/framework/{v0.7.2 → v0.7.3}/lib/collection/package.json +0 -0
  471. /package/framework/{v0.7.2 → v0.7.3}/lib/collection/src/main.js +0 -0
  472. /package/framework/{v0.7.2 → v0.7.3}/lib/conf-view/package.json +0 -0
  473. /package/framework/{v0.7.2 → v0.7.3}/lib/conf-view/src/main.js +0 -0
  474. /package/framework/{v0.7.2 → v0.7.3}/lib/config.js +0 -0
  475. /package/framework/{v0.7.2 → v0.7.3}/lib/connector-config/package.json +0 -0
  476. /package/framework/{v0.7.2 → v0.7.3}/lib/connector-config/src/main.js +0 -0
  477. /package/framework/{v0.7.2 → v0.7.3}/lib/connector-error/package.json +0 -0
  478. /package/framework/{v0.7.2 → v0.7.3}/lib/connector-error/src/main.js +0 -0
  479. /package/framework/{v0.7.2 → v0.7.3}/lib/connector-registry/package.json +0 -0
  480. /package/framework/{v0.7.2 → v0.7.3}/lib/connector-registry/src/main.js +0 -0
  481. /package/framework/{v0.7.2 → v0.7.3}/lib/cron/README.md +0 -0
  482. /package/framework/{v0.7.2 → v0.7.3}/lib/cron/package.json +0 -0
  483. /package/framework/{v0.7.2 → v0.7.3}/lib/cron/src/main.js +0 -0
  484. /package/framework/{v0.7.2 → v0.7.3}/lib/domain/LICENSE +0 -0
  485. /package/framework/{v0.7.2 → v0.7.3}/lib/domain/README.md +0 -0
  486. /package/framework/{v0.7.2 → v0.7.3}/lib/domain/package.json +0 -0
  487. /package/framework/{v0.7.2 → v0.7.3}/lib/domain/src/main.js +0 -0
  488. /package/framework/{v0.7.2 → v0.7.3}/lib/dto/package.json +0 -0
  489. /package/framework/{v0.7.2 → v0.7.3}/lib/dto/src/main.js +0 -0
  490. /package/framework/{v0.7.2 → v0.7.3}/lib/dto-pipe/package.json +0 -0
  491. /package/framework/{v0.7.2 → v0.7.3}/lib/dto-pipe/src/main.js +0 -0
  492. /package/framework/{v0.7.2 → v0.7.3}/lib/dto-types/package.json +0 -0
  493. /package/framework/{v0.7.2 → v0.7.3}/lib/dto-types/src/main.js +0 -0
  494. /package/framework/{v0.7.2 → v0.7.3}/lib/duration/package.json +0 -0
  495. /package/framework/{v0.7.2 → v0.7.3}/lib/duration/src/main.js +0 -0
  496. /package/framework/{v0.7.2 → v0.7.3}/lib/error-ref/package.json +0 -0
  497. /package/framework/{v0.7.2 → v0.7.3}/lib/error-ref/src/main.js +0 -0
  498. /package/framework/{v0.7.2 → v0.7.3}/lib/generator/index.js +0 -0
  499. /package/framework/{v0.7.2 → v0.7.3}/lib/i18n/package.json +0 -0
  500. /package/framework/{v0.7.2 → v0.7.3}/lib/i18n/src/main.js +0 -0
  501. /package/framework/{v0.7.2 → v0.7.3}/lib/idempotency/package.json +0 -0
  502. /package/framework/{v0.7.2 → v0.7.3}/lib/idempotency/src/main.js +0 -0
  503. /package/framework/{v0.7.2 → v0.7.3}/lib/image-build/package.json +0 -0
  504. /package/framework/{v0.7.2 → v0.7.3}/lib/image-build/src/main.js +0 -0
  505. /package/framework/{v0.7.2 → v0.7.3}/lib/index.js +0 -0
  506. /package/framework/{v0.7.2 → v0.7.3}/lib/inherits/LICENSE +0 -0
  507. /package/framework/{v0.7.2 → v0.7.3}/lib/inherits/README.md +0 -0
  508. /package/framework/{v0.7.2 → v0.7.3}/lib/inherits/package.json +0 -0
  509. /package/framework/{v0.7.2 → v0.7.3}/lib/inherits/src/main.js +0 -0
  510. /package/framework/{v0.7.2 → v0.7.3}/lib/inspector-events/package.json +0 -0
  511. /package/framework/{v0.7.2 → v0.7.3}/lib/inspector-events/src/main.js +0 -0
  512. /package/framework/{v0.7.2 → v0.7.3}/lib/inspector-redact/package.json +0 -0
  513. /package/framework/{v0.7.2 → v0.7.3}/lib/inspector-redact/src/main.js +0 -0
  514. /package/framework/{v0.7.2 → v0.7.3}/lib/instrument/package.json +0 -0
  515. /package/framework/{v0.7.2 → v0.7.3}/lib/instrument/src/main.js +0 -0
  516. /package/framework/{v0.7.2 → v0.7.3}/lib/job/package.json +0 -0
  517. /package/framework/{v0.7.2 → v0.7.3}/lib/job/src/main.js +0 -0
  518. /package/framework/{v0.7.2 → v0.7.3}/lib/job-store.js +0 -0
  519. /package/framework/{v0.7.2 → v0.7.3}/lib/json-config-header/package.json +0 -0
  520. /package/framework/{v0.7.2 → v0.7.3}/lib/json-config-header/src/main.js +0 -0
  521. /package/framework/{v0.7.2 → v0.7.3}/lib/kv/package.json +0 -0
  522. /package/framework/{v0.7.2 → v0.7.3}/lib/kv/src/main.js +0 -0
  523. /package/framework/{v0.7.2 → v0.7.3}/lib/kv-store.js +0 -0
  524. /package/framework/{v0.7.2 → v0.7.3}/lib/lane/package.json +0 -0
  525. /package/framework/{v0.7.2 → v0.7.3}/lib/lane/src/main.js +0 -0
  526. /package/framework/{v0.7.2 → v0.7.3}/lib/loading-state/package.json +0 -0
  527. /package/framework/{v0.7.2 → v0.7.3}/lib/loading-state/src/main.js +0 -0
  528. /package/framework/{v0.7.2 → v0.7.3}/lib/logger/README.md +0 -0
  529. /package/framework/{v0.7.2 → v0.7.3}/lib/logger/package.json +0 -0
  530. /package/framework/{v0.7.2 → v0.7.3}/lib/logger/src/containers/default/index.js +0 -0
  531. /package/framework/{v0.7.2 → v0.7.3}/lib/logger/src/containers/file/index.js +0 -0
  532. /package/framework/{v0.7.2 → v0.7.3}/lib/logger/src/containers/mq/index.js +0 -0
  533. /package/framework/{v0.7.2 → v0.7.3}/lib/logger/src/containers/mq/listener.js +0 -0
  534. /package/framework/{v0.7.2 → v0.7.3}/lib/logger/src/containers/mq/speaker.js +0 -0
  535. /package/framework/{v0.7.2 → v0.7.3}/lib/logger/src/helper.js +0 -0
  536. /package/framework/{v0.7.2 → v0.7.3}/lib/logger/src/main.js +0 -0
  537. /package/framework/{v0.7.2 → v0.7.3}/lib/logger/src/redact.js +0 -0
  538. /package/framework/{v0.7.2 → v0.7.3}/lib/maintenance/package.json +0 -0
  539. /package/framework/{v0.7.2 → v0.7.3}/lib/maintenance/src/main.js +0 -0
  540. /package/framework/{v0.7.2 → v0.7.3}/lib/math/index.js +0 -0
  541. /package/framework/{v0.7.2 → v0.7.3}/lib/mcp-dispatch/package.json +0 -0
  542. /package/framework/{v0.7.2 → v0.7.3}/lib/mcp-dispatch/src/main.js +0 -0
  543. /package/framework/{v0.7.2 → v0.7.3}/lib/mcp-http/package.json +0 -0
  544. /package/framework/{v0.7.2 → v0.7.3}/lib/mcp-http/src/main.js +0 -0
  545. /package/framework/{v0.7.2 → v0.7.3}/lib/mcp-server/package.json +0 -0
  546. /package/framework/{v0.7.2 → v0.7.3}/lib/mcp-server/src/main.js +0 -0
  547. /package/framework/{v0.7.2 → v0.7.3}/lib/merge/README.md +0 -0
  548. /package/framework/{v0.7.2 → v0.7.3}/lib/merge/package.json +0 -0
  549. /package/framework/{v0.7.2 → v0.7.3}/lib/merge/src/main.js +0 -0
  550. /package/framework/{v0.7.2 → v0.7.3}/lib/message-validator/package.json +0 -0
  551. /package/framework/{v0.7.2 → v0.7.3}/lib/message-validator/src/main.js +0 -0
  552. /package/framework/{v0.7.2 → v0.7.3}/lib/metrics/package.json +0 -0
  553. /package/framework/{v0.7.2 → v0.7.3}/lib/metrics/src/main.js +0 -0
  554. /package/framework/{v0.7.2 → v0.7.3}/lib/model.js +0 -0
  555. /package/framework/{v0.7.2 → v0.7.3}/lib/money/package.json +0 -0
  556. /package/framework/{v0.7.2 → v0.7.3}/lib/money/src/main.js +0 -0
  557. /package/framework/{v0.7.2 → v0.7.3}/lib/multipart/package.json +0 -0
  558. /package/framework/{v0.7.2 → v0.7.3}/lib/multipart/src/main.js +0 -0
  559. /package/framework/{v0.7.2 → v0.7.3}/lib/net-locality/package.json +0 -0
  560. /package/framework/{v0.7.2 → v0.7.3}/lib/net-locality/src/main.js +0 -0
  561. /package/framework/{v0.7.2 → v0.7.3}/lib/nunjucks-filters/README.md +0 -0
  562. /package/framework/{v0.7.2 → v0.7.3}/lib/nunjucks-filters/package.json +0 -0
  563. /package/framework/{v0.7.2 → v0.7.3}/lib/nunjucks-filters/src/main.js +0 -0
  564. /package/framework/{v0.7.2 → v0.7.3}/lib/nunjucks-resolver/package.json +0 -0
  565. /package/framework/{v0.7.2 → v0.7.3}/lib/nunjucks-resolver/src/main.js +0 -0
  566. /package/framework/{v0.7.2 → v0.7.3}/lib/priority/package.json +0 -0
  567. /package/framework/{v0.7.2 → v0.7.3}/lib/priority/src/main.js +0 -0
  568. /package/framework/{v0.7.2 → v0.7.3}/lib/proc.js +0 -0
  569. /package/framework/{v0.7.2 → v0.7.3}/lib/push/package.json +0 -0
  570. /package/framework/{v0.7.2 → v0.7.3}/lib/push/src/main.js +0 -0
  571. /package/framework/{v0.7.2 → v0.7.3}/lib/rate-limit/package.json +0 -0
  572. /package/framework/{v0.7.2 → v0.7.3}/lib/rate-limit/src/main.js +0 -0
  573. /package/framework/{v0.7.2 → v0.7.3}/lib/release-watch/package.json +0 -0
  574. /package/framework/{v0.7.2 → v0.7.3}/lib/release-watch/src/main.js +0 -0
  575. /package/framework/{v0.7.2 → v0.7.3}/lib/render-cache/package.json +0 -0
  576. /package/framework/{v0.7.2 → v0.7.3}/lib/render-cache/src/main.js +0 -0
  577. /package/framework/{v0.7.2 → v0.7.3}/lib/render-cache-store.js +0 -0
  578. /package/framework/{v0.7.2 → v0.7.3}/lib/routing/README.md +0 -0
  579. /package/framework/{v0.7.2 → v0.7.3}/lib/routing/build.json +0 -0
  580. /package/framework/{v0.7.2 → v0.7.3}/lib/routing/package.json +0 -0
  581. /package/framework/{v0.7.2 → v0.7.3}/lib/routing/src/main.js +0 -0
  582. /package/framework/{v0.7.2 → v0.7.3}/lib/routing-introspect/package.json +0 -0
  583. /package/framework/{v0.7.2 → v0.7.3}/lib/routing-introspect/src/main.js +0 -0
  584. /package/framework/{v0.7.2 → v0.7.3}/lib/secrets/package.json +0 -0
  585. /package/framework/{v0.7.2 → v0.7.3}/lib/secrets/src/backends/env.js +0 -0
  586. /package/framework/{v0.7.2 → v0.7.3}/lib/secrets/src/backends/exec.js +0 -0
  587. /package/framework/{v0.7.2 → v0.7.3}/lib/secrets/src/backends/file.js +0 -0
  588. /package/framework/{v0.7.2 → v0.7.3}/lib/secrets/src/declaration.js +0 -0
  589. /package/framework/{v0.7.2 → v0.7.3}/lib/secrets/src/env-file.js +0 -0
  590. /package/framework/{v0.7.2 → v0.7.3}/lib/secrets/src/main.js +0 -0
  591. /package/framework/{v0.7.2 → v0.7.3}/lib/secrets/src/sources.js +0 -0
  592. /package/framework/{v0.7.2 → v0.7.3}/lib/security-headers-emitter/package.json +0 -0
  593. /package/framework/{v0.7.2 → v0.7.3}/lib/security-headers-emitter/src/main.js +0 -0
  594. /package/framework/{v0.7.2 → v0.7.3}/lib/session-lifetime/package.json +0 -0
  595. /package/framework/{v0.7.2 → v0.7.3}/lib/session-lifetime/src/main.js +0 -0
  596. /package/framework/{v0.7.2 → v0.7.3}/lib/session-store.js +0 -0
  597. /package/framework/{v0.7.2 → v0.7.3}/lib/shell.js +0 -0
  598. /package/framework/{v0.7.2 → v0.7.3}/lib/sqlite-driver.js +0 -0
  599. /package/framework/{v0.7.2 → v0.7.3}/lib/sri/package.json +0 -0
  600. /package/framework/{v0.7.2 → v0.7.3}/lib/sri/src/main.js +0 -0
  601. /package/framework/{v0.7.2 → v0.7.3}/lib/state.js +0 -0
  602. /package/framework/{v0.7.2 → v0.7.3}/lib/storage/package.json +0 -0
  603. /package/framework/{v0.7.2 → v0.7.3}/lib/storage/src/local-cas.js +0 -0
  604. /package/framework/{v0.7.2 → v0.7.3}/lib/storage/src/local-stream.js +0 -0
  605. /package/framework/{v0.7.2 → v0.7.3}/lib/storage/src/local.js +0 -0
  606. /package/framework/{v0.7.2 → v0.7.3}/lib/storage/src/main.js +0 -0
  607. /package/framework/{v0.7.2 → v0.7.3}/lib/storage/src/meta-store.js +0 -0
  608. /package/framework/{v0.7.2 → v0.7.3}/lib/storage/src/s3.js +0 -0
  609. /package/framework/{v0.7.2 → v0.7.3}/lib/storage/src/util.js +0 -0
  610. /package/framework/{v0.7.2 → v0.7.3}/lib/storage-store.js +0 -0
  611. /package/framework/{v0.7.2 → v0.7.3}/lib/swig-filters/README.md +0 -0
  612. /package/framework/{v0.7.2 → v0.7.3}/lib/swig-filters/package.json +0 -0
  613. /package/framework/{v0.7.2 → v0.7.3}/lib/swig-filters/src/main.js +0 -0
  614. /package/framework/{v0.7.2 → v0.7.3}/lib/swig-resolver/package.json +0 -0
  615. /package/framework/{v0.7.2 → v0.7.3}/lib/swig-resolver/src/main.js +0 -0
  616. /package/framework/{v0.7.2 → v0.7.3}/lib/template-loaders/package.json +0 -0
  617. /package/framework/{v0.7.2 → v0.7.3}/lib/template-loaders/src/loaders/http.js +0 -0
  618. /package/framework/{v0.7.2 → v0.7.3}/lib/template-loaders/src/loaders/memory.js +0 -0
  619. /package/framework/{v0.7.2 → v0.7.3}/lib/template-loaders/src/main.js +0 -0
  620. /package/framework/{v0.7.2 → v0.7.3}/lib/url/README.md +0 -0
  621. /package/framework/{v0.7.2 → v0.7.3}/lib/url/index.js +0 -0
  622. /package/framework/{v0.7.2 → v0.7.3}/lib/url/routing.json +0 -0
  623. /package/framework/{v0.7.2 → v0.7.3}/lib/uuid/package.json +0 -0
  624. /package/framework/{v0.7.2 → v0.7.3}/lib/uuid/src/main.js +0 -0
  625. /package/framework/{v0.7.2 → v0.7.3}/lib/validator.js +0 -0
  626. /package/framework/{v0.7.2 → v0.7.3}/lib/watcher/package.json +0 -0
  627. /package/framework/{v0.7.2 → v0.7.3}/lib/watcher/src/main.js +0 -0
  628. /package/framework/{v0.7.2 → v0.7.3}/lib/ws-framing/package.json +0 -0
  629. /package/framework/{v0.7.2 → v0.7.3}/lib/ws-framing/src/main.js +0 -0
  630. /package/framework/{v0.7.2 → v0.7.3}/lib/ws-query/package.json +0 -0
  631. /package/framework/{v0.7.2 → v0.7.3}/lib/ws-query/src/main.js +0 -0
  632. /package/framework/{v0.7.2 → v0.7.3}/lib/ws-session/package.json +0 -0
  633. /package/framework/{v0.7.2 → v0.7.3}/lib/ws-session/src/main.js +0 -0
@@ -3095,6 +3095,56 @@ function Server(options) {
3095
3095
  }).finish().body.read().decodeToString();
3096
3096
  }
3097
3097
 
3098
+ /**
3099
+ * #B766 — whether a stylesheet `<link>` or a `<script src>` written in a
3100
+ * layout may be preloaded through the `link` header (`as=style` /
3101
+ * `as=script`). A preload the browser cannot match to the tag's own request
3102
+ * costs a second download, so the tag is left out when it carries
3103
+ * `integrity` or `crossorigin` (the preload would carry neither), is a
3104
+ * module or `nomodule` script, or is a stylesheet not applied to the screen
3105
+ * (a `media` other than `all` / `screen`, an `alternate` one). The tests
3106
+ * read the tag's own text: up to its first `>` outside a quoted attribute
3107
+ * value, since a value may hold one (`media="(width > 600px)"`).
3108
+ *
3109
+ * One more condition, a guard for a caller that passes more than one tag:
3110
+ * until #B768, getAssets()' layout scan matched up to the end of a source
3111
+ * line and kept the LAST `src` / `href` it found there, so when several tags
3112
+ * shared a line the URL could be another tag's; it now passes one start tag.
3113
+ * The tag only qualifies when nothing after its `>` carries a `src`, `href`
3114
+ * or `srcset`.
3115
+ *
3116
+ * @inner
3117
+ * @private
3118
+ * @param {string} match - One match of getAssets()' layout scan
3119
+ * @param {string|null} rel - The `rel` value of a `<link>`, `null` for a `<script>`
3120
+ * @returns {boolean}
3121
+ *
3122
+ * @example
3123
+ * isPreloadableLayoutTag('<link rel="stylesheet" href="/css/app.css">', 'stylesheet'); // true
3124
+ * isPreloadableLayoutTag('<link rel="stylesheet" href="/css/print.css" media="print">', 'stylesheet'); // false
3125
+ */
3126
+ var isPreloadableLayoutTag = function(match, rel) {
3127
+ var tagEnd = match.match(/^<[^>"']*(?:(?:"[^"]*"|'[^']*')[^>"']*)*>/);
3128
+ if ( !tagEnd ) {
3129
+ return false;
3130
+ }
3131
+ var tag = tagEnd[0];
3132
+ if ( /(src|href|srcset)\=/.test(match.substring(tag.length)) ) {
3133
+ return false;
3134
+ }
3135
+ if ( /\s(integrity|crossorigin|nomodule)(\s|=|>|\/)/i.test(tag) || /\stype\s*=\s*["']?module\b/i.test(tag) ) {
3136
+ return false;
3137
+ }
3138
+ if ( rel && /\balternate\b/i.test(rel) ) {
3139
+ return false;
3140
+ }
3141
+ var media = tag.match(/\smedia\s*=\s*["']([^"']*)["']/i);
3142
+ if ( media && !/^\s*(all|screen)\s*$/i.test(media[1]) ) {
3143
+ return false;
3144
+ }
3145
+ return true;
3146
+ };
3147
+
3098
3148
  /**
3099
3149
  * Parses a rendered layout string for `<link>`, `<script>`, `<source>`,
3100
3150
  * and `<img>` tags, resolves each asset URL to an absolute file path, and
@@ -3107,14 +3157,69 @@ function Server(options) {
3107
3157
  * @param {object} bundleConf - Bundle/env configuration slice
3108
3158
  * @param {string} layoutStr - Rendered HTML layout string to scan for asset tags
3109
3159
  * @param {object} [swig] - Swig instance when called from the controller
3110
- * @param {object} [data] - Template data when called from the controller
3160
+ * @param {object} [data] - Template data when called from the controller; its
3161
+ * `page.environment.webroot` (the public webroot) is stripped, like
3162
+ * `bundleConf.server.webroot`, from a URL before it is resolved (#B769)
3111
3163
  * @returns {object} Assets map keyed by URL
3112
3164
  */
3113
3165
  var getAssets = function (bundleConf, layoutStr, swig, data) {
3114
3166
 
3115
3167
  // layout search for <link|source|script|img>; this is an asset-tag scan over the bundle's own
3116
- // layout template, not an HTML sanitizer
3117
- var layoutAssets = layoutStr.match(/<link .*?<\/link>|<link .*?(rel\=\"(stylesheet|icon|manifest|(.*)\-icon))(.*)|<source .*?(type\=\"(image))(.*)|<script.*?<\/script>|<img .*?(.*)/g) || [];
3168
+ // layout template, not an HTML sanitizer.
3169
+ // #B768 — one match per TAG. Each alternative used to run to the end of its source line,
3170
+ // and the URL loop below kept the last `src` / `href` it met, so tags sharing a line were
3171
+ // read as one: `<img><script>` preloaded the script `as=image`, a <picture>'s <img> was
3172
+ // swallowed by its <source>, a minified layout got no hint. A start tag now ends at its
3173
+ // first `>` outside a quoted attribute value (isPreloadableLayoutTag's rule); a <script>
3174
+ // element is consumed whole and only its start tag kept, so the text of an inline script
3175
+ // is never read as markup; `</picture>` is kept as the marker that ends the srcset a
3176
+ // picture's <source> tags collected. Which tags count is unchanged (filtered below): a
3177
+ // <link> whose rel starts with stylesheet, icon or manifest or ends in -icon, a <source>
3178
+ // whose type is an image type, every <script> and <img>.
3179
+ var layoutAssets = []
3180
+ , layoutTagRe = /(<script\b(?:[^>"']|"[^"]*"|'[^']*')*>)[\s\S]*?<\/script\s*>|<(?:link|source|img)\b(?:[^>"']|"[^"]*"|'[^']*')*>|<\/picture\s*>/g
3181
+ , layoutTag = null
3182
+ ;
3183
+ while ( (layoutTag = layoutTagRe.exec(layoutStr)) !== null ) {
3184
+ layoutAssets.push( layoutTag[1] || layoutTag[0] );
3185
+ }
3186
+
3187
+ /**
3188
+ * #B769 — the path to hand getAssetFilenameFromUrl() for a URL written in the layout
3189
+ * or in a stylesheet's url(). The resolver takes a path WITHOUT the webroot
3190
+ * (handleStatics strips it from a request first), while a layout writes its URLs with
3191
+ * it: `{{ page.environment.webroot }}img/x.png` reaches this scan as `/web/img/x.png`,
3192
+ * or as `/proxy/web/img/x.png` behind a path-prefixing proxy, and resolved to
3193
+ * '404.html', so the asset got no hint. Strips the public webroot, else the bundle's
3194
+ * own, once, when the URL starts with it, ending `/` included (`/webx/` is never
3195
+ * stripped by `/web/`). The entry keeps the URL as written.
3196
+ *
3197
+ * @inner
3198
+ * @private
3199
+ * @param {string} u - An asset URL as written
3200
+ * @returns {string} The URL without its webroot, or `u` unchanged
3201
+ *
3202
+ * @example
3203
+ * // server.webroot '/web/', no proxy prefix
3204
+ * withoutWebroot('/web/img/x.png'); // '/img/x.png'
3205
+ * withoutWebroot('/webx/img/x.png'); // '/webx/img/x.png'
3206
+ */
3207
+ var withoutWebroot = function (u) {
3208
+ var roots = [
3209
+ ( data && data.page && data.page.environment ) ? data.page.environment.webroot : null,
3210
+ bundleConf.server.webroot
3211
+ ];
3212
+ for (var r = 0; r < roots.length; ++r) {
3213
+ if ( typeof(roots[r]) != 'string' || roots[r].length < 2 ) {
3214
+ continue;
3215
+ }
3216
+ var root = roots[r].replace(/\/*$/, '/');
3217
+ if ( u.indexOf(root) === 0 ) {
3218
+ return '/' + u.substring(root.length);
3219
+ }
3220
+ }
3221
+ return u;
3222
+ };
3118
3223
 
3119
3224
  var assets = {}
3120
3225
  , cssFiles = []
@@ -3144,6 +3249,13 @@ function Server(options) {
3144
3249
  ;
3145
3250
  for (; i < len; ++i) {
3146
3251
 
3252
+ // #B768 — a picture ends here: the srcset its <source> tags collected no longer
3253
+ // waits for an <img>
3254
+ if ( /^<\/picture/.test(layoutAssets[i]) ) {
3255
+ sourceTagSrcSetStr = '';
3256
+ continue;
3257
+ }
3258
+
3147
3259
  if (
3148
3260
  !/(\<img|\<link|\<source|\<script)/g.test(layoutAssets[i])
3149
3261
  // ||
@@ -3155,10 +3267,26 @@ function Server(options) {
3155
3267
  continue;
3156
3268
  }
3157
3269
 
3270
+ // #B768 — the tag's kind, from its own name: the kind tests used to run on the whole
3271
+ // match, so with several tags in it the last test that matched won
3272
+ let tagName = layoutAssets[i].match(/^<([a-z]+)/)[1];
3273
+ // only the tags the former alternatives took
3274
+ if (
3275
+ tagName == 'link' && !/rel\=\"(stylesheet|icon|manifest|[^"]*\-icon)/.test(layoutAssets[i])
3276
+ || tagName == 'source' && !/type\=\"image/.test(layoutAssets[i])
3277
+ ) {
3278
+ continue;
3279
+ }
3280
+ // #B775 — nothing carried over from the previous tag: `url` and `ext` were kept, so a
3281
+ // tag with no src / href reused the previous URL (the first such tag threw, and the
3282
+ // page answered 500) and a missing asset showed the previous asset's extension
3283
+ url = null;
3284
+ ext = null;
3285
+
3158
3286
  // https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/rel/preload
3159
3287
  let asType = null;
3160
3288
 
3161
- if ( /\<img/.test(layoutAssets[i]) ) {
3289
+ if ( tagName == 'img' ) {
3162
3290
  type = 'image';
3163
3291
  tag = 'img';
3164
3292
  asType = type;
@@ -3166,7 +3294,7 @@ function Server(options) {
3166
3294
 
3167
3295
 
3168
3296
 
3169
- if ( /\<link/.test(layoutAssets[i]) ) {
3297
+ if ( tagName == 'link' ) {
3170
3298
  // if ( /rel\=\"stylesheet/.test(layoutAssets[i]) ) {
3171
3299
  // type = 'stylesheet';
3172
3300
  // } else if ( /rel\=\"(icon|(.*)\-icon)/.test(layoutAssets[i]) ) {
@@ -3180,7 +3308,10 @@ function Server(options) {
3180
3308
  }
3181
3309
 
3182
3310
 
3183
- switch (type) {
3311
+ // #B766 — this switch used to test `type`, the rel STRING, against the
3312
+ // BOOLEAN results of its case tests, so no case ever matched and a
3313
+ // layout stylesheet never got an `as`
3314
+ switch (true) {
3184
3315
  case /stylesheet/.test(type):
3185
3316
  asType = 'style';
3186
3317
  break;
@@ -3204,11 +3335,15 @@ function Server(options) {
3204
3335
  // }
3205
3336
  break;
3206
3337
  }
3338
+ // #B766 — no preload the browser could not match to the tag
3339
+ if ( ( asType == 'style' || asType == 'script' ) && !isPreloadableLayoutTag(layoutAssets[i], type) ) {
3340
+ asType = null;
3341
+ }
3207
3342
 
3208
3343
  tag = 'link';
3209
3344
  }
3210
3345
 
3211
- if ( /\<source/.test(layoutAssets[i]) ) {
3346
+ if ( tagName == 'source' ) {
3212
3347
  if ( /type\=\"image/.test(layoutAssets[i]) ) {
3213
3348
  type = 'image';
3214
3349
  }
@@ -3216,13 +3351,17 @@ function Server(options) {
3216
3351
  tag = 'source';
3217
3352
  }
3218
3353
 
3219
- if ( /\<script/.test(layoutAssets[i]) ) {
3354
+ if ( tagName == 'script' ) {
3220
3355
  type = 'javascript';
3221
3356
  tag = 'script';
3222
3357
  // Skip inline scripts (no src attribute) — not external assets
3223
3358
  if ( !/\ssrc\s*=/.test(layoutAssets[i]) ) {
3224
3359
  continue;
3225
3360
  }
3361
+ // #B766 — a layout script is preloaded too (it never got an `as`)
3362
+ if ( isPreloadableLayoutTag(layoutAssets[i], null) ) {
3363
+ asType = 'script';
3364
+ }
3226
3365
  }
3227
3366
 
3228
3367
  domain = null;
@@ -3267,6 +3406,12 @@ function Server(options) {
3267
3406
  continue;
3268
3407
  }
3269
3408
 
3409
+ // #B775 — a tag with no `src` / `href` (an <img> with only a srcset) names no file
3410
+ // to preload; first in a layout, it threw at the quote strip below
3411
+ if ( !url ) {
3412
+ continue;
3413
+ }
3414
+
3270
3415
 
3271
3416
  // if ( /data\:/.test(url) ) { // ignoring "data:..."
3272
3417
  // continue
@@ -3291,7 +3436,7 @@ function Server(options) {
3291
3436
  }
3292
3437
 
3293
3438
  if (!/(\:\/\/|^\/\/)/.test(url) ) {
3294
- filename = getAssetFilenameFromUrl(bundleConf, url);
3439
+ filename = getAssetFilenameFromUrl(bundleConf, withoutWebroot(url));
3295
3440
  } else {
3296
3441
  domain = url.match(/^.*:\/\/[a-z0-9._-]+\/?/);
3297
3442
  //url = ( new RegExp('/'+ bundleConf.host +'/' ).test(domain) ) ? url.replace(domain, '/') : url;
@@ -3305,7 +3450,9 @@ function Server(options) {
3305
3450
  }
3306
3451
  //key = (( /404/.test(filename) ) ? '[404]' : '[200]') +' '+ url;
3307
3452
  key = url;
3308
- isAvailable = ( /404/.test(filename) ) ? false : true;
3453
+ // #B777 — a miss is the resolver's own '404.html'; `/404/` anywhere in the path also
3454
+ // took a bundle under a directory holding `404`, or a file like `error-404.png`, for one
3455
+ isAvailable = ( filename == '404.html' ) ? false : true;
3309
3456
  if ( isAvailable ) {
3310
3457
  try {
3311
3458
  ext = url.substring(url.lastIndexOf('.')).match(/(\.[A-Za-z0-9]+)/)[0];
@@ -3323,12 +3470,12 @@ function Server(options) {
3323
3470
  url : url,
3324
3471
  ext : ext,
3325
3472
  mime : (!ext) ? 'NA' : (bundleConf.server.coreConfiguration.mime[ext.substring(1)] || 'NA'),
3326
- filename : ( /404/.test(filename) ) ? 'not found' : filename,
3473
+ filename : ( filename == '404.html' ) ? 'not found' : filename,
3327
3474
  isAvailable : isAvailable
3328
3475
  };
3329
3476
 
3330
- //sourceTagSrcSetStr
3331
- if (sourceTagSrcSetStr.length > 0) {
3477
+ //sourceTagSrcSetStr — #B768: for the picture's <img> only, never another asset
3478
+ if ( sourceTagSrcSetStr.length > 0 && tagName == 'img' ) {
3332
3479
  assets[key]['imagesrcset'] = sourceTagSrcSetStr.substring(0, sourceTagSrcSetStr.length-1);
3333
3480
  // reset
3334
3481
  sourceTagSrcSetStr = '';
@@ -3444,7 +3591,13 @@ function Server(options) {
3444
3591
 
3445
3592
  if ( /(url\(|url\s+\()/.test(cssArr[c]) && !/data\:|\@font-face/.test(cssArr[c]) ) {
3446
3593
 
3447
- url = cssArr[c].match(/((background\:url|url)+\()([A-Za-z0-9->~_.,:"'%/\s+]+).*?\)+/g)[0].replace(/((background\:url|url)+\(|\))/g, '').trim();
3594
+ // #B774 — a `url()` this pattern cannot read (an SVG reference such as
3595
+ // `url(#grad)`), or one naming a fragment, is not a file: skip the block. The
3596
+ // unguarded `[0]` threw, and render-swig answered 500 for the page.
3597
+ let urlMatched = cssArr[c].match(/((background\:url|url)+\()([A-Za-z0-9->~_.,:"'%/\s+]+).*?\)+/g);
3598
+ if ( !urlMatched ) continue;
3599
+ url = urlMatched[0].replace(/((background\:url|url)+\(|\))/g, '').trim();
3600
+ if ( /^["']?#/.test(url) ) continue;
3448
3601
  if ( typeof(assetsInClassFound[url]) != 'undefined') continue; // already defined
3449
3602
 
3450
3603
  //cssMatched = cssArr[c].match(/((\.[A-Za-z0-9-_.,;:"'%\s+]+)(\s+\{|{))/);
@@ -3469,7 +3622,7 @@ function Server(options) {
3469
3622
  // url: url
3470
3623
  // }
3471
3624
  if (!/(\:\/\/|^\/\/)/.test(url) ) {
3472
- filename = getAssetFilenameFromUrl(bundleConf, url);
3625
+ filename = getAssetFilenameFromUrl(bundleConf, withoutWebroot(url));
3473
3626
  } else {
3474
3627
  domain = url.match(/^.*:\/\/[a-z0-9._-]+\/?/);
3475
3628
  url = url.replace(domain, '/');
@@ -3478,16 +3631,25 @@ function Server(options) {
3478
3631
 
3479
3632
  //key = (( /404/.test(filename) ) ? '[404]' : '[200]') +' '+ url;
3480
3633
  key = url;
3481
- isAvailable = ( /404/.test(filename) ) ? false : true;
3482
- ext = url.substring(url.lastIndexOf('.')).match(/(\.[A-Za-z0-9]+)/)[0];
3634
+ // #B776 — the layout scan's entry for the same URL stays: it carries the
3635
+ // `as` the 200's link header needs, a CSS entry carries none (the
3636
+ // layout image lost its hint)
3637
+ if ( typeof(assets[key]) != 'undefined' ) {
3638
+ break;
3639
+ }
3640
+ isAvailable = ( filename == '404.html' ) ? false : true; // #B777
3641
+ // #B774 — a `url()` with no extension (`url(/img/sprite)`) threw here;
3642
+ // the layout scan reads its own `ext` inside a try
3643
+ let extMatched = url.substring(url.lastIndexOf('.')).match(/(\.[A-Za-z0-9]+)/);
3644
+ ext = ( extMatched ) ? extMatched[0] : null;
3483
3645
  assets[key] = {
3484
3646
  referrer : cssFiles[i],
3485
3647
  definition : definition,
3486
3648
  type : type,
3487
3649
  url : url,
3488
3650
  ext : ext,
3489
- mime : bundleConf.server.coreConfiguration.mime[ext.substring(1)] || 'NA',
3490
- filename : ( /404/.test(filename) ) ? 'not found' : filename
3651
+ mime : ( ext ) ? ( bundleConf.server.coreConfiguration.mime[ext.substring(1)] || 'NA' ) : 'NA',
3652
+ filename : ( filename == '404.html' ) ? 'not found' : filename
3491
3653
  };
3492
3654
 
3493
3655
  if (domain)
@@ -9,7 +9,6 @@
9
9
  "forms" : "${bundlePath}/forms",
10
10
  "handlers" : "${templatesPath}/handlers",
11
11
  "routeNameAsFilenameEnabled": true,
12
- "ginaEnabled" : true, // set to false, this will exclude gina assets from being loaded
13
12
  "pluginLoader" : "{src:${gina}/framework/v${version}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js}",
14
13
  "http-metas": {
15
14
  "content-type": "text/html"
@@ -28,6 +27,8 @@
28
27
  "javascriptsDeferEnabled": true, // will place scripts in defer mode in the head by default. If false, will place in the footer
29
28
  "sriEnabled": false, // opt-in Subresource Integrity: adds integrity= + crossorigin= to same-origin <script>/<link> tags whose files resolve on disk; external URLs and unresolvable paths are skipped (fail-open)
30
29
  "assetVersioningEnabled": true, // #P48: appends ?v=<10 hex of the file's sha384> to the same-origin asset URLs gina emits (tags + their preload hints) so they can be cached for a year; false keeps today's URLs. Never applied to js external plugins, layoutless renders or dev (fail-open: an unresolvable file keeps its plain URL)
30
+ "preloadHintsEnabled": true, // #B765: the automatic preload hints of an http/2.0 bundle in production, i.e. the `link` header of an HTML page and the 103 Early Hints sent before it; false sends neither (calls to self.setEarlyHints() are not affected)
31
+ "preloadHintsMaxSize": 1024, // #B765: bytes; each automatic hint stops at the last entry that keeps it within this size, so a reverse proxy's response-header buffer (nginx: 4 KiB by default) is not outgrown; 0 = no cap; a negative or non-integer value falls back to 1024 with one warning
31
32
  "javascripts": [
32
33
  {
33
34
  "name" : "gina",
@@ -21,7 +21,7 @@ var CmdHelper = require('./../helper');
21
21
  *
22
22
  * After writing the entry, prints the exact `npm install <driver>@<range>`
23
23
  * command to run, using the resolved version range in this order:
24
- * 1. the entry's `version` field (set via `--version=`)
24
+ * 1. the entry's `version` field (set via `--driver-version=`)
25
25
  * 2. the framework's built-in driver range table (DRIVER_MAP / AI_DRIVER_MAP)
26
26
  *
27
27
  * Leading header comments at the top of an existing `connectors.json` are
@@ -83,9 +83,10 @@
83
83
  install (e.g. ^5.0.0, >=5.3.0 <6.0.0).
84
84
  Named `--driver-version=` (not `--version=`)
85
85
  because the framework reserves the bare
86
- `--version` flag (maps to GINA_VERSION and
87
- triggers a framework migration). Written to
88
- the connector entry under the `version` key.
86
+ `--version` flag (maps to GINA_VERSION; a
87
+ value naming no installed framework version
88
+ is refused). Written to the connector entry
89
+ under the `version` key.
89
90
  --force Overwrite an existing entry with the
90
91
  same <name>.
91
92
  --install After writing the entry, run the detected
@@ -215,8 +216,8 @@
215
216
 
216
217
  After writing, `connector:add` prints the exact
217
218
  `npm install <driver>@"<range>"` command. The resolved range comes
218
- from `--version=` when supplied, otherwise from the framework's
219
- built-in driver range table.
219
+ from `--driver-version=` when supplied, otherwise from the
220
+ framework's built-in driver range table.
220
221
 
221
222
  `connector:rm` writes to the same two targets (shared vs bundle) per
222
223
  positional-absence. It never uninstalls the npm driver — another
@@ -17,7 +17,11 @@ $ gina --status | -t
17
17
  $ gina framework:start | start
18
18
 
19
19
  Start the framework socket server (port 8124) + MQ listener (8125) in the
20
- background. Required before any online command (e.g. bundle:start).
20
+ background. Required before any online command (e.g. bundle:start). Exits 0
21
+ once the server is ready or already running; if it stops before that, exits
22
+ with its exit code (1 when that is 0, 128 + the signal number on a signal).
23
+ Exits 1 when another program holds the framework port, printing how to free
24
+ the port or move the framework (gina framework:set --port=<port>).
21
25
 
22
26
  $ gina framework:stop | stop [ @<version> ]
23
27
 
@@ -0,0 +1,217 @@
1
+ /**
2
+ * @module gina/lib/cmd/framework/inc/listen-error
3
+ *
4
+ * Decides what `gina start` does when the framework's command socket cannot
5
+ * listen (#B761). `bin/cli` binds the MQ listener, then `bin/cmd` binds the
6
+ * command socket on the framework port; its `error` handler asks `decide()`.
7
+ *
8
+ * When the port is in use, « Framework already running … [ <pid> ] » (the line
9
+ * the `gina` wrapper exits 0 on) is printed only for a `procs.json` entry whose
10
+ * pid is alive and a framework daemon, read with `inc/ps-titles.js`
11
+ * `readPidTitle()`: titled `gina-v<version>` on Node, or, on Bun (which does
12
+ * not show `process.title`), still running the framework's own start command.
13
+ * Otherwise, and for any other listen error, the start writes the reason to
14
+ * stderr and exits 1, which also frees the MQ port the starting process holds.
15
+ *
16
+ * Before 0.7.3 the handler trusted any `procs.json` entry for the port without
17
+ * checking it, returned when there was none, and only logged any other error:
18
+ * a port held by another program read « already running » with exit 0, a stale
19
+ * entry named a dead pid, the process never ended (a half-started daemon kept
20
+ * the MQ port), and an EACCES left `gina start` hanging.
21
+ */
22
+ var psTitles = require('./ps-titles');
23
+
24
+ /**
25
+ * The prefix of every message this module writes.
26
+ *
27
+ * @constant
28
+ * @type {string}
29
+ */
30
+ var PREFIX = 'gina: cannot start the framework: ';
31
+
32
+ /**
33
+ * Lists the pids that `procs.json` records for a port, in the file's order:
34
+ * each entry of its own whose `port` equals `port` once both are strings, its
35
+ * `pid` read with `parsePid()` (so `-1`, `0`, `12abc` and `null` are no pid).
36
+ * A pid recorded twice is listed once.
37
+ *
38
+ * @param {?object} procs - The parsed `procs.json`: `{ "<title>": { pid, port, … } }`
39
+ * @param {number|string} port - The framework port
40
+ * @returns {Array<number>} The recorded pids; empty when there is none
41
+ * @example
42
+ * findRecordedPids({ 'gina-v0.7.2': { pid: 111, port: 8124 }, 'gina-v0.7.3': { pid: 222, port: '8124' } }, 8124);
43
+ * // [ 111, 222 ]
44
+ */
45
+ function findRecordedPids(procs, port) {
46
+ var pids = [];
47
+ if (!procs || typeof procs !== 'object' || port === null || typeof port === 'undefined' || String(port) === '') {
48
+ return pids;
49
+ }
50
+ Object.keys(procs).forEach(function (key) {
51
+ var entry = procs[key];
52
+ if (!entry || typeof entry !== 'object' || String(entry.port) !== String(port)) {
53
+ return;
54
+ }
55
+ var pid = psTitles.parsePid(entry.pid);
56
+ if (pid !== null && pids.indexOf(pid) < 0) {
57
+ pids.push(pid);
58
+ }
59
+ });
60
+ return pids;
61
+ }
62
+
63
+ /**
64
+ * The first pid that `procs.json` records for a port (see `findRecordedPids()`).
65
+ *
66
+ * @param {?object} procs - The parsed `procs.json`
67
+ * @param {number|string} port - The framework port
68
+ * @returns {?number} The pid, or `null` when no entry for the port has one
69
+ * @example
70
+ * findRecordedPid({ x: { pid: 4321, port: '8124' } }, 8124); // 4321
71
+ * findRecordedPid({ x: { pid: '-1', port: 8124 } }, 8124); // null
72
+ */
73
+ function findRecordedPid(procs, port) {
74
+ var pids = findRecordedPids(procs, port);
75
+ return pids.length > 0 ? pids[0] : null;
76
+ }
77
+
78
+ /**
79
+ * Tells what a recorded pid is now. It is `'dead'` when no process has it
80
+ * (`process.kill(pid, 0)` throws, other than EPERM, which another user's live
81
+ * process gives) or when it is a zombie; `'framework'` when it is a framework
82
+ * daemon: titled `gina-v<version>` (`DAEMON_TITLE_RE`, Node), or running the
83
+ * framework's own start command (`DAEMON_COMMAND_RE`, Bun, which does not
84
+ * show `process.title`); `'other'` when another program has it. Where the
85
+ * process cannot be read, the alive check decides, as before 0.7.3: `ps`
86
+ * cannot tell (no `ps` on Windows, busybox), or `ps` lists nothing for
87
+ * another user's live process (a `/proc` mounted with `hidepid`).
88
+ *
89
+ * @param {number} pid - A pid read with `parsePid()`
90
+ * @param {{kill: function(number, number), readPidTitle: function(number): (?object|undefined)}} [probe]
91
+ * Replaces `process.kill` and `readPidTitle()` (tests)
92
+ * @returns {string} `'framework'`, `'other'` or `'dead'`
93
+ * @example
94
+ * classifyPid(process.pid); // 'other' — a live process that is not a framework daemon
95
+ * classifyPid(99999); // 'dead' — when no process has that pid
96
+ */
97
+ function classifyPid(pid, probe) {
98
+ var kill = (probe && probe.kill) ? probe.kill : function (p, signal) { return process.kill(p, signal); };
99
+ var read = (probe && probe.readPidTitle) ? probe.readPidTitle : psTitles.readPidTitle;
100
+ var otherUser = false;
101
+ try {
102
+ kill(pid, 0);
103
+ } catch (killErr) {
104
+ if (!killErr || killErr.code !== 'EPERM') {
105
+ return 'dead';
106
+ }
107
+ otherUser = true;
108
+ }
109
+ var seen = read(pid);
110
+ if (typeof seen === 'undefined') {
111
+ return 'framework';
112
+ }
113
+ if (seen === null) {
114
+ // our own process is always listed, so it has just exited; another
115
+ // user's live process can be hidden from `ps`
116
+ return otherUser ? 'framework' : 'dead';
117
+ }
118
+ if (seen.zombie) {
119
+ return 'dead';
120
+ }
121
+ var isDaemon = psTitles.DAEMON_TITLE_RE.test(seen.title || '')
122
+ || psTitles.DAEMON_COMMAND_RE.test(seen.command || '');
123
+ return isDaemon ? 'framework' : 'other';
124
+ }
125
+
126
+ /**
127
+ * The message for a framework port held by something that is not a running
128
+ * framework: the cause, the fix, and (not on Windows) how to find the holder.
129
+ * It never says « address already in use »: the `gina` wrapper exits on those
130
+ * words at once instead of waiting for the start's exit code.
131
+ *
132
+ * @param {number|string} port - The framework port
133
+ * @param {?{procsFile: string, pid: number, state: string}} recorded - The
134
+ * `procs.json` entry for the port, with the `classifyPid()` state of its pid
135
+ * (`'dead'` or `'other'`); `null` when there is none
136
+ * @param {string} platform - `process.platform`
137
+ * @returns {string} Two or three lines, without a trailing newline
138
+ * @example
139
+ * heldPortMessage(8124, null, 'darwin');
140
+ * // gina: cannot start the framework: port 8124 is held by another program, not a running gina framework.
141
+ * // Free the port, or move the framework: gina framework:set --port=<port>
142
+ * // Find the holder: lsof -nP -iTCP:8124 -sTCP:LISTEN
143
+ */
144
+ function heldPortMessage(port, recorded, platform) {
145
+ var cause = PREFIX + 'port ' + port + ' is held by another program';
146
+ if (recorded && recorded.pid) {
147
+ cause += '; ' + recorded.procsFile + ' names pid ' + recorded.pid + ', which is '
148
+ + (recorded.state === 'dead' ? 'not running.' : 'not a gina framework.');
149
+ } else {
150
+ cause += ', not a running gina framework.';
151
+ }
152
+ var lines = [cause, 'Free the port, or move the framework: gina framework:set --port=<port>'];
153
+ if (platform !== 'win32') {
154
+ lines.push('Find the holder: lsof -nP -iTCP:' + port + ' -sTCP:LISTEN');
155
+ }
156
+ return lines.join('\n');
157
+ }
158
+
159
+ /**
160
+ * Decides what the command socket's `error` handler does when the socket
161
+ * cannot listen. Only an EADDRINUSE under `framework:start` looks at
162
+ * `procs.json`: when a pid recorded for the port is a running framework, the
163
+ * start reports it as already running; otherwise it exits 1 with
164
+ * `heldPortMessage()`. Any other error exits 1 with its own message, on one
165
+ * line.
166
+ *
167
+ * @param {Error} err - The listen error (`code`, `port`, `message`)
168
+ * @param {object} ctx
169
+ * @param {string} ctx.command - The command being run (`process.argv[2]`)
170
+ * @param {number|string} ctx.port - The framework port
171
+ * @param {string} ctx.procsFile - The path of `procs.json`, named in the message
172
+ * @param {?object} ctx.procs - The parsed `procs.json`; `null` when it is
173
+ * missing or does not parse
174
+ * @param {string} [ctx.platform] - Defaults to `process.platform`
175
+ * @param {function(number): string} [ctx.classifyPid] - Defaults to `classifyPid()` (tests)
176
+ * @returns {{action: string, pid: number, port: (number|string)}|{action: string, code: number, message: string}}
177
+ * `{ action: 'already-running', pid, port }` or `{ action: 'exit', code: 1, message }`
178
+ * @example
179
+ * var decision = decide(err, { command: 'framework:start', port: 8124, procsFile: procsFile, procs: procs });
180
+ * if (decision.action === 'already-running') {
181
+ * console.warn('Framework already running on port `'+ decision.port +'`: [ '+ decision.pid +' ]');
182
+ * } else {
183
+ * fs.writeSync(2, decision.message + '\n');
184
+ * process.exit(decision.code);
185
+ * }
186
+ */
187
+ function decide(err, ctx) {
188
+ ctx = ctx || {};
189
+ var platform = ctx.platform || process.platform;
190
+
191
+ if (err && err.code === 'EADDRINUSE' && ctx.command === 'framework:start') {
192
+ var classify = ctx.classifyPid || classifyPid;
193
+ var pids = findRecordedPids(ctx.procs, ctx.port);
194
+ var recorded = null;
195
+ for (var i = 0; i < pids.length; i++) {
196
+ var state = classify(pids[i]);
197
+ if (state === 'framework') {
198
+ return { action: 'already-running', pid: pids[i], port: ctx.port };
199
+ }
200
+ if (!recorded) {
201
+ recorded = { procsFile: ctx.procsFile, pid: pids[i], state: state };
202
+ }
203
+ }
204
+ return { action: 'exit', code: 1, message: heldPortMessage(ctx.port, recorded, platform) };
205
+ }
206
+
207
+ var reason = (err && err.message) ? String(err.message) : String(err);
208
+ return { action: 'exit', code: 1, message: PREFIX + reason.split(/\r?\n/)[0] };
209
+ }
210
+
211
+ module.exports = {
212
+ findRecordedPids : findRecordedPids,
213
+ findRecordedPid : findRecordedPid,
214
+ classifyPid : classifyPid,
215
+ heldPortMessage : heldPortMessage,
216
+ decide : decide
217
+ };