@adonis-agora/flags 0.0.0-stage → 0.1.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 (322) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/LICENSE +21 -0
  3. package/README.md +15 -2
  4. package/dist/assets/spa/assets/index-DdmFo7xr.js +12 -0
  5. package/dist/assets/spa/assets/index-DdmFo7xr.js.map +1 -0
  6. package/dist/assets/spa/assets/index-DhkcP3Cw.css +2 -0
  7. package/dist/assets/spa/index.html +26 -0
  8. package/dist/commands/flags_list.d.ts +9 -0
  9. package/dist/commands/flags_list.d.ts.map +1 -0
  10. package/dist/commands/flags_list.js +51 -0
  11. package/dist/commands/flags_list.js.map +1 -0
  12. package/dist/commands/flags_ops.d.ts +60 -0
  13. package/dist/commands/flags_ops.d.ts.map +1 -0
  14. package/dist/commands/flags_ops.js +253 -0
  15. package/dist/commands/flags_ops.js.map +1 -0
  16. package/dist/commands/flags_refs.d.ts +15 -0
  17. package/dist/commands/flags_refs.d.ts.map +1 -0
  18. package/dist/commands/flags_refs.js +90 -0
  19. package/dist/commands/flags_refs.js.map +1 -0
  20. package/dist/commands/flags_set.d.ts +19 -0
  21. package/dist/commands/flags_set.d.ts.map +1 -0
  22. package/dist/commands/flags_set.js +97 -0
  23. package/dist/commands/flags_set.js.map +1 -0
  24. package/dist/commands/flags_types.d.ts +18 -0
  25. package/dist/commands/flags_types.d.ts.map +1 -0
  26. package/dist/commands/flags_types.js +94 -0
  27. package/dist/commands/flags_types.js.map +1 -0
  28. package/dist/commands/flags_work.d.ts +16 -0
  29. package/dist/commands/flags_work.d.ts.map +1 -0
  30. package/dist/commands/flags_work.js +71 -0
  31. package/dist/commands/flags_work.js.map +1 -0
  32. package/dist/commands/main.d.ts +15 -0
  33. package/dist/commands/main.d.ts.map +1 -0
  34. package/dist/commands/main.js +30 -0
  35. package/dist/commands/main.js.map +1 -0
  36. package/dist/commands/shared.d.ts +21 -0
  37. package/dist/commands/shared.d.ts.map +1 -0
  38. package/dist/commands/shared.js +70 -0
  39. package/dist/commands/shared.js.map +1 -0
  40. package/dist/configure.d.ts +11 -0
  41. package/dist/configure.d.ts.map +1 -0
  42. package/dist/configure.js +32 -0
  43. package/dist/configure.js.map +1 -0
  44. package/dist/providers/dashboard_provider.d.ts +65 -0
  45. package/dist/providers/dashboard_provider.d.ts.map +1 -0
  46. package/dist/providers/dashboard_provider.js +340 -0
  47. package/dist/providers/dashboard_provider.js.map +1 -0
  48. package/dist/providers/flags_provider.d.ts +30 -0
  49. package/dist/providers/flags_provider.d.ts.map +1 -0
  50. package/dist/providers/flags_provider.js +184 -0
  51. package/dist/providers/flags_provider.js.map +1 -0
  52. package/dist/services/main.d.ts +17 -0
  53. package/dist/services/main.d.ts.map +1 -0
  54. package/dist/services/main.js +20 -0
  55. package/dist/services/main.js.map +1 -0
  56. package/dist/src/admin.d.ts +189 -0
  57. package/dist/src/admin.d.ts.map +1 -0
  58. package/dist/src/admin.js +539 -0
  59. package/dist/src/admin.js.map +1 -0
  60. package/dist/src/analytics/backend.d.ts +18 -0
  61. package/dist/src/analytics/backend.d.ts.map +1 -0
  62. package/dist/src/analytics/backend.js +25 -0
  63. package/dist/src/analytics/backend.js.map +1 -0
  64. package/dist/src/analytics/clickhouse_backend.d.ts +16 -0
  65. package/dist/src/analytics/clickhouse_backend.d.ts.map +1 -0
  66. package/dist/src/analytics/clickhouse_backend.js +48 -0
  67. package/dist/src/analytics/clickhouse_backend.js.map +1 -0
  68. package/dist/src/analytics/duckdb.d.ts +39 -0
  69. package/dist/src/analytics/duckdb.d.ts.map +1 -0
  70. package/dist/src/analytics/duckdb.js +117 -0
  71. package/dist/src/analytics/duckdb.js.map +1 -0
  72. package/dist/src/analytics/lucid_backend.d.ts +16 -0
  73. package/dist/src/analytics/lucid_backend.d.ts.map +1 -0
  74. package/dist/src/analytics/lucid_backend.js +45 -0
  75. package/dist/src/analytics/lucid_backend.js.map +1 -0
  76. package/dist/src/analytics/metrics.d.ts +50 -0
  77. package/dist/src/analytics/metrics.d.ts.map +1 -0
  78. package/dist/src/analytics/metrics.js +42 -0
  79. package/dist/src/analytics/metrics.js.map +1 -0
  80. package/dist/src/analytics/results.d.ts +80 -0
  81. package/dist/src/analytics/results.d.ts.map +1 -0
  82. package/dist/src/analytics/results.js +143 -0
  83. package/dist/src/analytics/results.js.map +1 -0
  84. package/dist/src/dashboard/access_denied_page.d.ts +100 -0
  85. package/dist/src/dashboard/access_denied_page.d.ts.map +1 -0
  86. package/dist/src/dashboard/access_denied_page.js +262 -0
  87. package/dist/src/dashboard/access_denied_page.js.map +1 -0
  88. package/dist/src/dashboard/actor.d.ts +12 -0
  89. package/dist/src/dashboard/actor.d.ts.map +1 -0
  90. package/dist/src/dashboard/actor.js +33 -0
  91. package/dist/src/dashboard/actor.js.map +1 -0
  92. package/dist/src/dashboard/authorize_decision.d.ts +48 -0
  93. package/dist/src/dashboard/authorize_decision.d.ts.map +1 -0
  94. package/dist/src/dashboard/authorize_decision.js +44 -0
  95. package/dist/src/dashboard/authorize_decision.js.map +1 -0
  96. package/dist/src/dashboard/console_authorize.d.ts +77 -0
  97. package/dist/src/dashboard/console_authorize.d.ts.map +1 -0
  98. package/dist/src/dashboard/console_authorize.js +104 -0
  99. package/dist/src/dashboard/console_authorize.js.map +1 -0
  100. package/dist/src/dashboard/define_config.d.ts +71 -0
  101. package/dist/src/dashboard/define_config.d.ts.map +1 -0
  102. package/dist/src/dashboard/define_config.js +18 -0
  103. package/dist/src/dashboard/define_config.js.map +1 -0
  104. package/dist/src/dashboard/handlers.d.ts +172 -0
  105. package/dist/src/dashboard/handlers.d.ts.map +1 -0
  106. package/dist/src/dashboard/handlers.js +949 -0
  107. package/dist/src/dashboard/handlers.js.map +1 -0
  108. package/dist/src/dashboard/index.d.ts +15 -0
  109. package/dist/src/dashboard/index.d.ts.map +1 -0
  110. package/dist/src/dashboard/index.js +10 -0
  111. package/dist/src/dashboard/index.js.map +1 -0
  112. package/dist/src/dashboard/shape.d.ts +12 -0
  113. package/dist/src/dashboard/shape.d.ts.map +1 -0
  114. package/dist/src/dashboard/shape.js +232 -0
  115. package/dist/src/dashboard/shape.js.map +1 -0
  116. package/dist/src/dashboard/spa.d.ts +34 -0
  117. package/dist/src/dashboard/spa.d.ts.map +1 -0
  118. package/dist/src/dashboard/spa.js +50 -0
  119. package/dist/src/dashboard/spa.js.map +1 -0
  120. package/dist/src/declare.d.ts +85 -0
  121. package/dist/src/declare.d.ts.map +1 -0
  122. package/dist/src/declare.js +62 -0
  123. package/dist/src/declare.js.map +1 -0
  124. package/dist/src/define_config.d.ts +256 -0
  125. package/dist/src/define_config.d.ts.map +1 -0
  126. package/dist/src/define_config.js +90 -0
  127. package/dist/src/define_config.js.map +1 -0
  128. package/dist/src/durable.d.ts +29 -0
  129. package/dist/src/durable.d.ts.map +1 -0
  130. package/dist/src/durable.js +55 -0
  131. package/dist/src/durable.js.map +1 -0
  132. package/dist/src/enrichers.d.ts +51 -0
  133. package/dist/src/enrichers.d.ts.map +1 -0
  134. package/dist/src/enrichers.js +105 -0
  135. package/dist/src/enrichers.js.map +1 -0
  136. package/dist/src/events/buffer.d.ts +38 -0
  137. package/dist/src/events/buffer.d.ts.map +1 -0
  138. package/dist/src/events/buffer.js +86 -0
  139. package/dist/src/events/buffer.js.map +1 -0
  140. package/dist/src/events/event.d.ts +42 -0
  141. package/dist/src/events/event.d.ts.map +1 -0
  142. package/dist/src/events/event.js +82 -0
  143. package/dist/src/events/event.js.map +1 -0
  144. package/dist/src/http/browser.d.ts +33 -0
  145. package/dist/src/http/browser.d.ts.map +1 -0
  146. package/dist/src/http/browser.js +81 -0
  147. package/dist/src/http/browser.js.map +1 -0
  148. package/dist/src/http/browser_api.d.ts +48 -0
  149. package/dist/src/http/browser_api.d.ts.map +1 -0
  150. package/dist/src/http/browser_api.js +273 -0
  151. package/dist/src/http/browser_api.js.map +1 -0
  152. package/dist/src/http/browser_tokens.d.ts +27 -0
  153. package/dist/src/http/browser_tokens.d.ts.map +1 -0
  154. package/dist/src/http/browser_tokens.js +48 -0
  155. package/dist/src/http/browser_tokens.js.map +1 -0
  156. package/dist/src/http/control_plane.d.ts +58 -0
  157. package/dist/src/http/control_plane.d.ts.map +1 -0
  158. package/dist/src/http/control_plane.js +318 -0
  159. package/dist/src/http/control_plane.js.map +1 -0
  160. package/dist/src/http/csrf.d.ts +22 -0
  161. package/dist/src/http/csrf.d.ts.map +1 -0
  162. package/dist/src/http/csrf.js +24 -0
  163. package/dist/src/http/csrf.js.map +1 -0
  164. package/dist/src/http/edge_tag.d.ts +55 -0
  165. package/dist/src/http/edge_tag.d.ts.map +1 -0
  166. package/dist/src/http/edge_tag.js +45 -0
  167. package/dist/src/http/edge_tag.js.map +1 -0
  168. package/dist/src/http/flag_middleware.d.ts +27 -0
  169. package/dist/src/http/flag_middleware.d.ts.map +1 -0
  170. package/dist/src/http/flag_middleware.js +30 -0
  171. package/dist/src/http/flag_middleware.js.map +1 -0
  172. package/dist/src/http/flags_middleware.d.ts +20 -0
  173. package/dist/src/http/flags_middleware.d.ts.map +1 -0
  174. package/dist/src/http/flags_middleware.js +20 -0
  175. package/dist/src/http/flags_middleware.js.map +1 -0
  176. package/dist/src/http/subject_resolver.d.ts +45 -0
  177. package/dist/src/http/subject_resolver.d.ts.map +1 -0
  178. package/dist/src/http/subject_resolver.js +93 -0
  179. package/dist/src/http/subject_resolver.js.map +1 -0
  180. package/dist/src/identity.d.ts +82 -0
  181. package/dist/src/identity.d.ts.map +1 -0
  182. package/dist/src/identity.js +100 -0
  183. package/dist/src/identity.js.map +1 -0
  184. package/dist/src/index.d.ts +41 -0
  185. package/dist/src/index.d.ts.map +1 -0
  186. package/dist/src/index.js +34 -0
  187. package/dist/src/index.js.map +1 -0
  188. package/dist/src/manager.d.ts +154 -0
  189. package/dist/src/manager.d.ts.map +1 -0
  190. package/dist/src/manager.js +333 -0
  191. package/dist/src/manager.js.map +1 -0
  192. package/dist/src/openfeature/provider.d.ts +36 -0
  193. package/dist/src/openfeature/provider.d.ts.map +1 -0
  194. package/dist/src/openfeature/provider.js +82 -0
  195. package/dist/src/openfeature/provider.js.map +1 -0
  196. package/dist/src/relay/relay.d.ts +36 -0
  197. package/dist/src/relay/relay.d.ts.map +1 -0
  198. package/dist/src/relay/relay.js +73 -0
  199. package/dist/src/relay/relay.js.map +1 -0
  200. package/dist/src/relay/results_cache.d.ts +20 -0
  201. package/dist/src/relay/results_cache.d.ts.map +1 -0
  202. package/dist/src/relay/results_cache.js +31 -0
  203. package/dist/src/relay/results_cache.js.map +1 -0
  204. package/dist/src/relay/worker.d.ts +66 -0
  205. package/dist/src/relay/worker.d.ts.map +1 -0
  206. package/dist/src/relay/worker.js +177 -0
  207. package/dist/src/relay/worker.js.map +1 -0
  208. package/dist/src/ruleset_source.d.ts +73 -0
  209. package/dist/src/ruleset_source.d.ts.map +1 -0
  210. package/dist/src/ruleset_source.js +128 -0
  211. package/dist/src/ruleset_source.js.map +1 -0
  212. package/dist/src/runtime.d.ts +70 -0
  213. package/dist/src/runtime.d.ts.map +1 -0
  214. package/dist/src/runtime.js +301 -0
  215. package/dist/src/runtime.js.map +1 -0
  216. package/dist/src/schema.d.ts +39 -0
  217. package/dist/src/schema.d.ts.map +1 -0
  218. package/dist/src/schema.js +311 -0
  219. package/dist/src/schema.js.map +1 -0
  220. package/dist/src/services/accessor.d.ts +5 -0
  221. package/dist/src/services/accessor.d.ts.map +1 -0
  222. package/dist/src/services/accessor.js +20 -0
  223. package/dist/src/services/accessor.js.map +1 -0
  224. package/dist/src/sinks/clickhouse.d.ts +41 -0
  225. package/dist/src/sinks/clickhouse.d.ts.map +1 -0
  226. package/dist/src/sinks/clickhouse.js +117 -0
  227. package/dist/src/sinks/clickhouse.js.map +1 -0
  228. package/dist/src/sinks/lucid_sink.d.ts +25 -0
  229. package/dist/src/sinks/lucid_sink.d.ts.map +1 -0
  230. package/dist/src/sinks/lucid_sink.js +87 -0
  231. package/dist/src/sinks/lucid_sink.js.map +1 -0
  232. package/dist/src/sinks/parquet_sink.d.ts +41 -0
  233. package/dist/src/sinks/parquet_sink.d.ts.map +1 -0
  234. package/dist/src/sinks/parquet_sink.js +140 -0
  235. package/dist/src/sinks/parquet_sink.js.map +1 -0
  236. package/dist/src/sinks/posthog_sink.d.ts +29 -0
  237. package/dist/src/sinks/posthog_sink.d.ts.map +1 -0
  238. package/dist/src/sinks/posthog_sink.js +65 -0
  239. package/dist/src/sinks/posthog_sink.js.map +1 -0
  240. package/dist/src/sinks/sink.d.ts +36 -0
  241. package/dist/src/sinks/sink.d.ts.map +1 -0
  242. package/dist/src/sinks/sink.js +36 -0
  243. package/dist/src/sinks/sink.js.map +1 -0
  244. package/dist/src/sql.d.ts +33 -0
  245. package/dist/src/sql.d.ts.map +1 -0
  246. package/dist/src/sql.js +66 -0
  247. package/dist/src/sql.js.map +1 -0
  248. package/dist/src/stores/lucid_store.d.ts +55 -0
  249. package/dist/src/stores/lucid_store.d.ts.map +1 -0
  250. package/dist/src/stores/lucid_store.js +412 -0
  251. package/dist/src/stores/lucid_store.js.map +1 -0
  252. package/dist/src/stores/memory_store.d.ts +38 -0
  253. package/dist/src/stores/memory_store.d.ts.map +1 -0
  254. package/dist/src/stores/memory_store.js +166 -0
  255. package/dist/src/stores/memory_store.js.map +1 -0
  256. package/dist/src/stores/store.d.ts +166 -0
  257. package/dist/src/stores/store.d.ts.map +1 -0
  258. package/dist/src/stores/store.js +67 -0
  259. package/dist/src/stores/store.js.map +1 -0
  260. package/dist/src/subject.d.ts +25 -0
  261. package/dist/src/subject.d.ts.map +1 -0
  262. package/dist/src/subject.js +30 -0
  263. package/dist/src/subject.js.map +1 -0
  264. package/dist/src/testing/index.d.ts +31 -0
  265. package/dist/src/testing/index.d.ts.map +1 -0
  266. package/dist/src/testing/index.js +60 -0
  267. package/dist/src/testing/index.js.map +1 -0
  268. package/dist/src/topology/browser_token.d.ts +48 -0
  269. package/dist/src/topology/browser_token.d.ts.map +1 -0
  270. package/dist/src/topology/browser_token.js +128 -0
  271. package/dist/src/topology/browser_token.js.map +1 -0
  272. package/dist/src/topology/remote_source.d.ts +39 -0
  273. package/dist/src/topology/remote_source.d.ts.map +1 -0
  274. package/dist/src/topology/remote_source.js +184 -0
  275. package/dist/src/topology/remote_source.js.map +1 -0
  276. package/dist/src/topology/token.d.ts +36 -0
  277. package/dist/src/topology/token.d.ts.map +1 -0
  278. package/dist/src/topology/token.js +68 -0
  279. package/dist/src/topology/token.js.map +1 -0
  280. package/dist/src/topology/verify.d.ts +88 -0
  281. package/dist/src/topology/verify.d.ts.map +1 -0
  282. package/dist/src/topology/verify.js +128 -0
  283. package/dist/src/topology/verify.js.map +1 -0
  284. package/dist/src/transports/db_transport.d.ts +55 -0
  285. package/dist/src/transports/db_transport.d.ts.map +1 -0
  286. package/dist/src/transports/db_transport.js +202 -0
  287. package/dist/src/transports/db_transport.js.map +1 -0
  288. package/dist/src/transports/http_transport.d.ts +30 -0
  289. package/dist/src/transports/http_transport.d.ts.map +1 -0
  290. package/dist/src/transports/http_transport.js +51 -0
  291. package/dist/src/transports/http_transport.js.map +1 -0
  292. package/dist/src/transports/memory_transport.d.ts +29 -0
  293. package/dist/src/transports/memory_transport.d.ts.map +1 -0
  294. package/dist/src/transports/memory_transport.js +91 -0
  295. package/dist/src/transports/memory_transport.js.map +1 -0
  296. package/dist/src/transports/redis_transport.d.ts +50 -0
  297. package/dist/src/transports/redis_transport.d.ts.map +1 -0
  298. package/dist/src/transports/redis_transport.js +107 -0
  299. package/dist/src/transports/redis_transport.js.map +1 -0
  300. package/dist/src/transports/transport.d.ts +62 -0
  301. package/dist/src/transports/transport.d.ts.map +1 -0
  302. package/dist/src/transports/transport.js +2 -0
  303. package/dist/src/transports/transport.js.map +1 -0
  304. package/dist/src/types.d.ts +30 -0
  305. package/dist/src/types.d.ts.map +1 -0
  306. package/dist/src/types.js +2 -0
  307. package/dist/src/types.js.map +1 -0
  308. package/dist/src/usage.d.ts +18 -0
  309. package/dist/src/usage.d.ts.map +1 -0
  310. package/dist/src/usage.js +52 -0
  311. package/dist/src/usage.js.map +1 -0
  312. package/dist/stubs/config/flags.stub +50 -0
  313. package/dist/stubs/config/flags_dashboard.stub +35 -0
  314. package/dist/stubs/database/migrations/create_flags_tables.stub +27 -0
  315. package/dist/stubs/main.d.ts +3 -0
  316. package/dist/stubs/main.d.ts.map +1 -0
  317. package/dist/stubs/main.js +9 -0
  318. package/dist/stubs/main.js.map +1 -0
  319. package/package.json +178 -3
  320. package/skills/flags-basics/SKILL.md +142 -0
  321. package/skills/flags-deployment/SKILL.md +125 -0
  322. package/skills/flags-experiments/SKILL.md +99 -0
@@ -0,0 +1,2 @@
1
+ /*! tailwindcss v4.3.5 | MIT License | https://tailwindcss.com */
2
+ @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:block))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-space-y-reverse:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-outline-style:solid;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000}}}@layer theme{:root,:host{--font-sans:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--color-amber-300:oklch(87.9% .169 91.605);--color-emerald-300:oklch(84.5% .143 164.978);--color-sky-300:oklch(82.8% .111 230.318);--color-sky-500:oklch(68.5% .169 237.323);--color-indigo-300:oklch(78.5% .115 274.713);--color-indigo-500:oklch(58.5% .233 277.117);--color-rose-200:oklch(89.2% .058 10.001);--color-rose-300:oklch(81% .117 11.638);--color-rose-500:oklch(64.5% .246 16.439);--color-zinc-100:oklch(96.7% .001 286.375);--color-zinc-200:oklch(92% .004 286.32);--color-zinc-300:oklch(87.1% .006 286.286);--color-zinc-400:oklch(70.5% .015 286.067);--color-zinc-500:oklch(55.2% .016 285.938);--color-zinc-600:oklch(44.2% .017 285.786);--color-zinc-800:oklch(27.4% .006 286.033);--spacing:.25rem;--container-6xl:72rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--font-weight-normal:400;--tracking-wider:.05em;--leading-relaxed:1.625;--radius-sm:.25rem;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:"JetBrains Mono", ui-monospace, SFMono-Regular, monospace}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring:where(:not(iframe)){outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}button:not(:disabled),[role=button]:not(:disabled){cursor:pointer}}@layer components;@layer utilities{.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.top-0{top:0}.top-0\.5{top:calc(var(--spacing) * .5)}.left-0\.5{left:calc(var(--spacing) * .5)}.left-3\.5{left:calc(var(--spacing) * 3.5)}.z-10{z-index:10}.container{width:100%}@media (width>=40rem){.container{max-width:40rem}}@media (width>=48rem){.container{max-width:48rem}}@media (width>=64rem){.container{max-width:64rem}}@media (width>=80rem){.container{max-width:80rem}}@media (width>=96rem){.container{max-width:96rem}}.mx-auto{margin-inline:auto}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:var(--spacing)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mr-2{margin-right:calc(var(--spacing) * 2)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-5{margin-bottom:calc(var(--spacing) * 5)}.ml-1{margin-left:var(--spacing)}.ml-1\.5{margin-left:calc(var(--spacing) * 1.5)}.ml-auto{margin-left:auto}.block{display:block}.flex{display:flex}.grid{display:grid}.inline{display:inline}.inline-flex{display:inline-flex}.table{display:table}.h-2\.5{height:calc(var(--spacing) * 2.5)}.h-3{height:calc(var(--spacing) * 3)}.h-4{height:calc(var(--spacing) * 4)}.h-full{height:100%}.max-h-64{max-height:calc(var(--spacing) * 64)}.min-h-full{min-height:100%}.w-2\.5{width:calc(var(--spacing) * 2.5)}.w-7{width:calc(var(--spacing) * 7)}.w-16{width:calc(var(--spacing) * 16)}.w-20{width:calc(var(--spacing) * 20)}.w-24{width:calc(var(--spacing) * 24)}.w-36{width:calc(var(--spacing) * 36)}.w-40{width:calc(var(--spacing) * 40)}.w-48{width:calc(var(--spacing) * 48)}.w-56{width:calc(var(--spacing) * 56)}.w-64{width:calc(var(--spacing) * 64)}.w-full{width:100%}.max-w-6xl{max-width:var(--container-6xl)}.max-w-full{max-width:100%}.min-w-0{min-width:0}.flex-1{flex:1}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.cursor-pointer{cursor:pointer}.grid-cols-\[auto_1fr\]{grid-template-columns:auto 1fr}.flex-col{flex-direction:column}.flex-row{flex-direction:row}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-end{align-items:flex-end}.justify-between{justify-content:space-between}.gap-1{gap:var(--spacing)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(var(--spacing) * var(--tw-space-y-reverse));margin-block-end:calc(var(--spacing) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}.gap-x-4{column-gap:calc(var(--spacing) * 4)}.gap-x-6{column-gap:calc(var(--spacing) * 6)}.gap-y-1{row-gap:var(--spacing)}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-line-soft>:not(:last-child)){border-color:var(--line-soft)}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.rounded-full{border-radius:2147483647px}.rounded-sm{border-radius:var(--radius-sm)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-background{border-color:var(--bg)}.border-bad\/40{border-color:var(--bad)}@supports (color:color-mix(in lab, red, red)){.border-bad\/40{border-color:color-mix(in oklab, var(--bad) 40%, transparent)}}.border-brand\/45{border-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.border-brand\/45{border-color:color-mix(in oklab, var(--accent) 45%, transparent)}}.border-good\/50{border-color:var(--good)}@supports (color:color-mix(in lab, red, red)){.border-good\/50{border-color:color-mix(in oklab, var(--good) 50%, transparent)}}.border-indigo-500\/30{border-color:#625fff4d}@supports (color:color-mix(in lab, red, red)){.border-indigo-500\/30{border-color:color-mix(in oklab, var(--color-indigo-500) 30%, transparent)}}.border-line{border-color:var(--line)}.border-line-soft{border-color:var(--line-soft)}.border-rose-500\/40{border-color:#ff235766}@supports (color:color-mix(in lab, red, red)){.border-rose-500\/40{border-color:color-mix(in oklab, var(--color-rose-500) 40%, transparent)}}.border-sky-500\/30{border-color:#00a5ef4d}@supports (color:color-mix(in lab, red, red)){.border-sky-500\/30{border-color:color-mix(in oklab, var(--color-sky-500) 30%, transparent)}}.border-transparent{border-color:#0000}.border-warn\/60{border-color:var(--warn)}@supports (color:color-mix(in lab, red, red)){.border-warn\/60{border-color:color-mix(in oklab, var(--warn) 60%, transparent)}}.bg-background{background-color:var(--bg)}.bg-bad\/10{background-color:var(--bad)}@supports (color:color-mix(in lab, red, red)){.bg-bad\/10{background-color:color-mix(in oklab, var(--bad) 10%, transparent)}}.bg-brand\/15{background-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.bg-brand\/15{background-color:color-mix(in oklab, var(--accent) 15%, transparent)}}.bg-good,.bg-good\/30{background-color:var(--good)}@supports (color:color-mix(in lab, red, red)){.bg-good\/30{background-color:color-mix(in oklab, var(--good) 30%, transparent)}}.bg-indigo-500\/10{background-color:#625fff1a}@supports (color:color-mix(in lab, red, red)){.bg-indigo-500\/10{background-color:color-mix(in oklab, var(--color-indigo-500) 10%, transparent)}}.bg-panel{background-color:var(--panel)}.bg-panel-2,.bg-panel-2\/40{background-color:var(--panel-2)}@supports (color:color-mix(in lab, red, red)){.bg-panel-2\/40{background-color:color-mix(in oklab, var(--panel-2) 40%, transparent)}}.bg-rose-500\/10{background-color:#ff23571a}@supports (color:color-mix(in lab, red, red)){.bg-rose-500\/10{background-color:color-mix(in oklab, var(--color-rose-500) 10%, transparent)}}.bg-sky-500\/10{background-color:#00a5ef1a}@supports (color:color-mix(in lab, red, red)){.bg-sky-500\/10{background-color:color-mix(in oklab, var(--color-sky-500) 10%, transparent)}}.bg-zinc-500{background-color:var(--color-zinc-500)}.bg-zinc-800\/40{background-color:#27272a66}@supports (color:color-mix(in lab, red, red)){.bg-zinc-800\/40{background-color:color-mix(in oklab, var(--color-zinc-800) 40%, transparent)}}.p-1{padding:var(--spacing)}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.px-0{padding-inline:0}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:var(--spacing)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-6{padding-block:calc(var(--spacing) * 6)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pr-6{padding-right:calc(var(--spacing) * 6)}.pb-1{padding-bottom:var(--spacing)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pb-3{padding-bottom:calc(var(--spacing) * 3)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.text-left{text-align:left}.text-right{text-align:right}.align-top{vertical-align:top}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.whitespace-nowrap{white-space:nowrap}.text-amber-300{color:var(--color-amber-300)}.text-brand{color:var(--accent)}.text-emerald-300{color:var(--color-emerald-300)}.text-indigo-300{color:var(--color-indigo-300)}.text-rose-200{color:var(--color-rose-200)}.text-rose-300{color:var(--color-rose-300)}.text-rose-300\/80{color:#ffa2aecc}@supports (color:color-mix(in lab, red, red)){.text-rose-300\/80{color:color-mix(in oklab, var(--color-rose-300) 80%, transparent)}}.text-sky-300{color:var(--color-sky-300)}.text-zinc-100{color:var(--color-zinc-100)}.text-zinc-200{color:var(--color-zinc-200)}.text-zinc-300{color:var(--color-zinc-300)}.text-zinc-400{color:var(--color-zinc-400)}.text-zinc-500{color:var(--color-zinc-500)}.text-zinc-600{color:var(--color-zinc-600)}.uppercase{text-transform:uppercase}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}:is(:where(.peer):focus-visible~.peer-focus-visible\:ring-1){--tw-ring-shadow:var(--tw-ring-inset, ) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}:is(:where(.peer):focus-visible~.peer-focus-visible\:ring-brand){--tw-ring-color:var(--accent)}:is(:where(.peer):disabled~.peer-disabled\:opacity-40){opacity:.4}.placeholder\:text-zinc-600::placeholder{color:var(--color-zinc-600)}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}@media (hover:hover){.hover\:bg-panel-2:hover,.hover\:bg-panel-2\/60:hover{background-color:var(--panel-2)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-panel-2\/60:hover{background-color:color-mix(in oklab, var(--panel-2) 60%, transparent)}}.hover\:text-brand:hover{color:var(--accent)}.hover\:text-zinc-200:hover{color:var(--color-zinc-200)}.hover\:underline:hover{text-decoration-line:underline}}.focus\:border-brand\/60:focus{border-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.focus\:border-brand\/60:focus{border-color:color-mix(in oklab, var(--accent) 60%, transparent)}}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}@media (hover:hover){.enabled\:hover\:border-zinc-600:enabled:hover{border-color:var(--color-zinc-600)}.enabled\:hover\:bg-bad\/20:enabled:hover{background-color:var(--bad)}@supports (color:color-mix(in lab, red, red)){.enabled\:hover\:bg-bad\/20:enabled:hover{background-color:color-mix(in oklab, var(--bad) 20%, transparent)}}.enabled\:hover\:bg-brand\/25:enabled:hover{background-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.enabled\:hover\:bg-brand\/25:enabled:hover{background-color:color-mix(in oklab, var(--accent) 25%, transparent)}}.enabled\:hover\:bg-panel-2:enabled:hover{background-color:var(--panel-2)}.enabled\:hover\:text-zinc-200:enabled:hover{color:var(--color-zinc-200)}}.disabled\:opacity-40:disabled{opacity:.4}@media (width>=40rem){.sm\:col-span-2{grid-column:span 2/span 2}.sm\:col-span-3{grid-column:span 3/span 3}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:px-4{padding-inline:calc(var(--spacing) * 4)}.sm\:py-6{padding-block:calc(var(--spacing) * 6)}}@media (width>=48rem){.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}}:root{--bg:#09090b;--panel:#0c0c0f;--panel-2:#101017;--line:#1c1c22;--line-soft:#16161a;--text:#e7e7ea;--muted:#76767f;--good:#34d399;--warn:#fbbf24;--bad:#f87171;--live:#60a5fa;--accent:#818cf8}*{box-sizing:border-box}html,body,#root{height:100%}body{background:var(--bg);color:var(--text);-webkit-font-smoothing:antialiased;margin:0;font-family:Space Grotesk,ui-sans-serif,system-ui,sans-serif}.app-bg{z-index:0;pointer-events:none;background-image:radial-gradient(900px 400px at 78% -8%, var(--accent), transparent 70%), linear-gradient(to right, var(--line-soft) 1px, transparent 1px), linear-gradient(to bottom, var(--line-soft) 1px, transparent 1px);position:fixed;inset:0}@supports (color:color-mix(in lab, red, red)){.app-bg{background-image:radial-gradient(900px 400px at 78% -8%, color-mix(in srgb, var(--accent) 8%, transparent), transparent 70%), linear-gradient(to right, var(--line-soft) 1px, transparent 1px), linear-gradient(to bottom, var(--line-soft) 1px, transparent 1px)}}.app-bg{opacity:.5;background-size:100% 100%,44px 44px,44px 44px;-webkit-mask-image:linear-gradient(#000,#000 60%,#0000);mask-image:linear-gradient(#000,#000 60%,#0000)}.mono{font-family:JetBrains Mono,ui-monospace,monospace}.tnum{font-variant-numeric:tabular-nums}.s-on,.s-applied,.s-done,.s-better{color:var(--good)}.s-off,.s-rejected,.s-failed,.s-worse{color:var(--bad)}.s-pending,.s-running{color:var(--warn)}.s-default,.s-cancelled,.s-inconclusive{color:#71717a}.s-approved{color:var(--live)}.s-unknown{color:var(--muted)}.dot{background:currentColor;border-radius:999px;width:7px;height:7px;box-shadow:0 0 0 3px}@supports (color:color-mix(in lab, red, red)){.dot{box-shadow:0 0 0 3px color-mix(in srgb, currentColor 18%, transparent)}}@keyframes rise{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}.rise{animation:.32s cubic-bezier(.2,.7,.2,1) both rise}.scroll-x{scrollbar-width:thin;scrollbar-color:#26262c transparent;-webkit-overflow-scrolling:touch}.scroll-x::-webkit-scrollbar{height:4px}.scroll-x::-webkit-scrollbar-thumb{border:0}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-thumb{border:3px solid var(--bg);background:#26262c;border-radius:999px}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}
@@ -0,0 +1,26 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
6
+ <meta name="robots" content="noindex, nofollow" />
7
+ <!-- Inline, so the browser's automatic /favicon.ico probe is not a 404 in the host app's log:
8
+ the provider serves only `<path>` and `<path>/assets/:file`, nothing at the site root. -->
9
+ <link
10
+ rel="icon"
11
+ href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Crect width='24' height='24' rx='5' fill='%2309090b'/%3E%3Cpath d='M7 19V5m0 1h9l-2 3 2 3H7' fill='none' stroke='%23818cf8' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E"
12
+ />
13
+ <link rel="preconnect" href="https://fonts.googleapis.com" />
14
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
15
+ <link
16
+ href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;700&family=Space+Grotesk:wght@400;500;600;700&display=swap"
17
+ rel="stylesheet"
18
+ />
19
+ <title>flags · console</title>
20
+ <script type="module" crossorigin src="/__FLAGS_DASHBOARD__/assets/index-DdmFo7xr.js"></script>
21
+ <link rel="stylesheet" crossorigin href="/__FLAGS_DASHBOARD__/assets/index-DhkcP3Cw.css">
22
+ </head>
23
+ <body>
24
+ <div id="root"></div>
25
+ </body>
26
+ </html>
@@ -0,0 +1,9 @@
1
+ import { FlagsCommand } from './shared.js';
2
+ export default class FlagsList extends FlagsCommand {
3
+ static commandName: string;
4
+ static description: string;
5
+ env?: string;
6
+ json?: boolean;
7
+ run(): Promise<void>;
8
+ }
9
+ //# sourceMappingURL=flags_list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flags_list.d.ts","sourceRoot":"","sources":["../../commands/flags_list.ts"],"names":[],"mappings":"AACA,OAAO,EAAmB,YAAY,EAAE,MAAM,aAAa,CAAC;AAE5D,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,YAAY;IACjD,OAAgB,WAAW,SAAgB;IAC3C,OAAgB,WAAW,SAAqE;IAGxF,GAAG,CAAC,EAAE,MAAM,CAAC;IAGb,IAAI,CAAC,EAAE,OAAO,CAAC;IAER,GAAG,kBAyBjB;CACF"}
@@ -0,0 +1,51 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import { flags } from '@adonisjs/core/ace';
11
+ import { describeServing, FlagsCommand } from './shared.js';
12
+ export default class FlagsList extends FlagsCommand {
13
+ static commandName = 'flags:list';
14
+ static description = 'List flags: declared type and default, and what each one serves';
15
+ async run() {
16
+ const runtime = await this.runtime();
17
+ const environment = this.env ?? runtime.manager.environment;
18
+ const ruleset = await runtime.store.readRuleset(environment);
19
+ const declarations = runtime.manager.declarations;
20
+ const keys = [...new Set([...Object.keys(declarations), ...Object.keys(ruleset.flags)])].sort();
21
+ const rows = keys.map((key) => {
22
+ const declaration = declarations[key];
23
+ return {
24
+ key,
25
+ type: declaration?.type ?? 'undeclared',
26
+ default: declaration ? JSON.stringify(declaration.default) : '-',
27
+ serving: describeServing(ruleset.flags[key]),
28
+ owner: declaration?.owner ?? '',
29
+ };
30
+ });
31
+ if (this.json) {
32
+ this.logger.log(JSON.stringify(rows, null, 2));
33
+ return;
34
+ }
35
+ this.logger.info(`environment ${environment}, ruleset version ${ruleset.version}`);
36
+ const table = this.ui.table();
37
+ table.head(['Flag', 'Type', 'Default', 'Serving', 'Owner']);
38
+ for (const row of rows)
39
+ table.row([row.key, row.type, row.default, row.serving, row.owner]);
40
+ table.render();
41
+ }
42
+ }
43
+ __decorate([
44
+ flags.string({ description: 'Environment (default: the configured one)' }),
45
+ __metadata("design:type", String)
46
+ ], FlagsList.prototype, "env", void 0);
47
+ __decorate([
48
+ flags.boolean({ description: 'Print JSON' }),
49
+ __metadata("design:type", Boolean)
50
+ ], FlagsList.prototype, "json", void 0);
51
+ //# sourceMappingURL=flags_list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flags_list.js","sourceRoot":"","sources":["../../commands/flags_list.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE5D,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,YAAY;IACjD,MAAM,CAAU,WAAW,GAAG,YAAY,CAAC;IAC3C,MAAM,CAAU,WAAW,GAAG,iEAAiE,CAAC;IAQvF,KAAK,CAAC,GAAG;QAChB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACrC,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC;QAC5D,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,KAAM,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAC9D,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC;QAClD,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAChG,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;YAC5B,MAAM,WAAW,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;YACtC,OAAO;gBACL,GAAG;gBACH,IAAI,EAAE,WAAW,EAAE,IAAI,IAAI,YAAY;gBACvC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG;gBAChE,OAAO,EAAE,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC5C,KAAK,EAAE,WAAW,EAAE,KAAK,IAAI,EAAE;aAChC,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC/C,OAAO;QACT,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,WAAW,qBAAqB,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QACnF,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;QAC5D,KAAK,MAAM,GAAG,IAAI,IAAI;YAAE,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5F,KAAK,CAAC,MAAM,EAAE,CAAC;IACjB,CAAC;CACF;AA/BS;IADP,KAAK,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,2CAA2C,EAAE,CAAC;;sCACtD;AAGb;IADP,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC;;uCACtB"}
@@ -0,0 +1,60 @@
1
+ import { FlagsCommand } from './shared.js';
2
+ export declare class FlagsExport extends FlagsCommand {
3
+ static commandName: string;
4
+ static description: string;
5
+ env?: string;
6
+ out?: string;
7
+ run(): Promise<void>;
8
+ }
9
+ export declare class FlagsImport extends FlagsCommand {
10
+ static commandName: string;
11
+ static description: string;
12
+ file: string;
13
+ env?: string;
14
+ note?: string;
15
+ run(): Promise<void>;
16
+ }
17
+ export declare class FlagsPromote extends FlagsCommand {
18
+ static commandName: string;
19
+ static description: string;
20
+ from: string;
21
+ to: string;
22
+ note?: string;
23
+ run(): Promise<void>;
24
+ }
25
+ export declare class FlagsStale extends FlagsCommand {
26
+ static commandName: string;
27
+ static description: string;
28
+ unusedDays?: number;
29
+ staticDays?: number;
30
+ run(): Promise<void>;
31
+ }
32
+ export declare class FlagsResults extends FlagsCommand {
33
+ static commandName: string;
34
+ static description: string;
35
+ experiment: string;
36
+ fresh?: boolean;
37
+ run(): Promise<void>;
38
+ }
39
+ export declare class FlagsForget extends FlagsCommand {
40
+ static commandName: string;
41
+ static description: string;
42
+ subject: string;
43
+ run(): Promise<void>;
44
+ }
45
+ export declare class FlagsReplay extends FlagsCommand {
46
+ static commandName: string;
47
+ static description: string;
48
+ sink: string;
49
+ run(): Promise<void>;
50
+ }
51
+ export declare class FlagsRequests extends FlagsCommand {
52
+ static commandName: string;
53
+ static description: string;
54
+ action?: string;
55
+ id?: string;
56
+ note?: string;
57
+ as?: string;
58
+ run(): Promise<void>;
59
+ }
60
+ //# sourceMappingURL=flags_ops.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flags_ops.d.ts","sourceRoot":"","sources":["../../commands/flags_ops.ts"],"names":[],"mappings":"AAEA,OAAO,EAAY,YAAY,EAAE,MAAM,aAAa,CAAC;AAErD,qBAAa,WAAY,SAAQ,YAAY;IAC3C,OAAgB,WAAW,SAAkB;IAC7C,OAAgB,WAAW,SAA2C;IAG9D,GAAG,CAAC,EAAE,MAAM,CAAC;IAGb,GAAG,CAAC,EAAE,MAAM,CAAC;IAEN,GAAG,kBAUjB;CACF;AAED,qBAAa,WAAY,SAAQ,YAAY;IAC3C,OAAgB,WAAW,SAAkB;IAC7C,OAAgB,WAAW,SACwD;IAG3E,IAAI,EAAE,MAAM,CAAC;IAGb,GAAG,CAAC,EAAE,MAAM,CAAC;IAGb,IAAI,CAAC,EAAE,MAAM,CAAC;IAEP,GAAG,kBAUjB;CACF;AAED,qBAAa,YAAa,SAAQ,YAAY;IAC5C,OAAgB,WAAW,SAAmB;IAC9C,OAAgB,WAAW,SAAsE;IAGzF,IAAI,EAAE,MAAM,CAAC;IAGb,EAAE,EAAE,MAAM,CAAC;IAGX,IAAI,CAAC,EAAE,MAAM,CAAC;IAEP,GAAG,kBAMjB;CACF;AAED,qBAAa,UAAW,SAAQ,YAAY;IAC1C,OAAgB,WAAW,SAAiB;IAC5C,OAAgB,WAAW,SACsD;IAGzE,UAAU,CAAC,EAAE,MAAM,CAAC;IAGpB,UAAU,CAAC,EAAE,MAAM,CAAC;IAEb,GAAG,kBAejB;CACF;AAED,qBAAa,YAAa,SAAQ,YAAY;IAC5C,OAAgB,WAAW,SAAmB;IAC9C,OAAgB,WAAW,SAAsD;IAGzE,UAAU,EAAE,MAAM,CAAC;IAGnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAET,GAAG,kBAkCjB;CACF;AAED,qBAAa,WAAY,SAAQ,YAAY;IAC3C,OAAgB,WAAW,SAAkB;IAC7C,OAAgB,WAAW,SACiD;IAGpE,OAAO,EAAE,MAAM,CAAC;IAET,GAAG,kBAIjB;CACF;AAED,qBAAa,WAAY,SAAQ,YAAY;IAC3C,OAAgB,WAAW,SAAkB;IAC7C,OAAgB,WAAW,SACsD;IAGzE,IAAI,EAAE,MAAM,CAAC;IAEN,GAAG,kBASjB;CACF;AAED,qBAAa,aAAc,SAAQ,YAAY;IAC7C,OAAgB,WAAW,SAAoB;IAC/C,OAAgB,WAAW,SAAiD;IAGpE,MAAM,CAAC,EAAE,MAAM,CAAC;IAGhB,EAAE,CAAC,EAAE,MAAM,CAAC;IAGZ,IAAI,CAAC,EAAE,MAAM,CAAC;IAGd,EAAE,CAAC,EAAE,MAAM,CAAC;IAEL,GAAG,kBAuCjB;CACF"}
@@ -0,0 +1,253 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import { readFile, writeFile } from 'node:fs/promises';
11
+ import { args, flags } from '@adonisjs/core/ace';
12
+ import { cliActor, FlagsCommand } from './shared.js';
13
+ export class FlagsExport extends FlagsCommand {
14
+ static commandName = 'flags:export';
15
+ static description = 'Export an environment ruleset as JSON';
16
+ async run() {
17
+ const runtime = await this.runtime();
18
+ const ruleset = await runtime.admin.exportRuleset(this.env ?? runtime.manager.environment);
19
+ const json = JSON.stringify(ruleset, null, 2);
20
+ if (this.out) {
21
+ await writeFile(this.out, `${json}\n`);
22
+ this.logger.success(`ruleset version ${ruleset.version} written to ${this.out}`);
23
+ }
24
+ else {
25
+ this.logger.log(json);
26
+ }
27
+ }
28
+ }
29
+ __decorate([
30
+ flags.string({ description: 'Environment (default: the configured one)' }),
31
+ __metadata("design:type", String)
32
+ ], FlagsExport.prototype, "env", void 0);
33
+ __decorate([
34
+ flags.string({ description: 'Write to this file instead of stdout' }),
35
+ __metadata("design:type", String)
36
+ ], FlagsExport.prototype, "out", void 0);
37
+ export class FlagsImport extends FlagsCommand {
38
+ static commandName = 'flags:import';
39
+ static description = 'Replace an environment ruleset with a JSON export (validated; approvals apply)';
40
+ async run() {
41
+ const runtime = await this.runtime();
42
+ const ruleset = JSON.parse(await readFile(this.file, 'utf8'));
43
+ const result = await runtime.admin.importRuleset(ruleset, cliActor(), {
44
+ ...(this.env ? { environment: this.env } : {}),
45
+ ...(this.note ? { note: this.note } : {}),
46
+ });
47
+ if (result.status === 'applied')
48
+ this.logger.success(`imported (ruleset version ${result.version})`);
49
+ else
50
+ this.logger.warning(`approval required: change request ${result.request.id}`);
51
+ }
52
+ }
53
+ __decorate([
54
+ args.string({ description: 'JSON file' }),
55
+ __metadata("design:type", String)
56
+ ], FlagsImport.prototype, "file", void 0);
57
+ __decorate([
58
+ flags.string({ description: 'Environment (default: the configured one)' }),
59
+ __metadata("design:type", String)
60
+ ], FlagsImport.prototype, "env", void 0);
61
+ __decorate([
62
+ flags.string({ description: 'Why' }),
63
+ __metadata("design:type", String)
64
+ ], FlagsImport.prototype, "note", void 0);
65
+ export class FlagsPromote extends FlagsCommand {
66
+ static commandName = 'flags:promote';
67
+ static description = 'Copy one environment ruleset over another (staging → production)';
68
+ async run() {
69
+ const runtime = await this.runtime();
70
+ const result = await runtime.admin.promote(this.from, this.to, cliActor(), this.note);
71
+ if (result.status === 'applied')
72
+ this.logger.success(`${this.from} → ${this.to} (version ${result.version})`);
73
+ else
74
+ this.logger.warning(`approval required: change request ${result.request.id}`);
75
+ }
76
+ }
77
+ __decorate([
78
+ args.string({ description: 'Source environment' }),
79
+ __metadata("design:type", String)
80
+ ], FlagsPromote.prototype, "from", void 0);
81
+ __decorate([
82
+ args.string({ description: 'Target environment' }),
83
+ __metadata("design:type", String)
84
+ ], FlagsPromote.prototype, "to", void 0);
85
+ __decorate([
86
+ flags.string({ description: 'Why' }),
87
+ __metadata("design:type", String)
88
+ ], FlagsPromote.prototype, "note", void 0);
89
+ export class FlagsStale extends FlagsCommand {
90
+ static commandName = 'flags:stale';
91
+ static description = 'Flags that are probably safe to remove (unused, expired, static, undeclared)';
92
+ async run() {
93
+ const runtime = await this.runtime();
94
+ const stale = await runtime.admin.stale({
95
+ ...(this.unusedDays ? { unusedDays: this.unusedDays } : {}),
96
+ ...(this.staticDays ? { staticDays: this.staticDays } : {}),
97
+ });
98
+ if (stale.length === 0) {
99
+ this.logger.success('no stale flags');
100
+ return;
101
+ }
102
+ const table = this.ui.table();
103
+ table.head(['Flag', 'Why', 'Last evaluated', 'Owner']);
104
+ for (const s of stale)
105
+ table.row([s.key, s.reasons.join(', '), s.lastEvaluated ?? 'never', s.owner ?? '']);
106
+ table.render();
107
+ }
108
+ }
109
+ __decorate([
110
+ flags.number({ description: 'Days without evaluations to count as unused (default 30)' }),
111
+ __metadata("design:type", Number)
112
+ ], FlagsStale.prototype, "unusedDays", void 0);
113
+ __decorate([
114
+ flags.number({ description: 'Days serving one value to count as static (default 30)' }),
115
+ __metadata("design:type", Number)
116
+ ], FlagsStale.prototype, "staticDays", void 0);
117
+ export class FlagsResults extends FlagsCommand {
118
+ static commandName = 'flags:results';
119
+ static description = 'Show experiment results (recompute with --fresh)';
120
+ async run() {
121
+ const runtime = await this.runtime();
122
+ const results = this.fresh
123
+ ? await runtime.worker.computeResults(this.experiment)
124
+ : await runtime.manager.results(this.experiment);
125
+ if (!results) {
126
+ this.logger.warning('no results yet (is the experiment configured in config/flags.ts experiments?)');
127
+ return;
128
+ }
129
+ this.logger.info(`${results.experiment}: exposures ${JSON.stringify(results.exposures)} (computed ${results.computedAt})`);
130
+ if (results.srm?.mismatch)
131
+ this.logger.error(`sample ratio mismatch (p=${results.srm.pValue.toExponential(2)}): fix assignment before trusting results`);
132
+ const table = this.ui.table();
133
+ table.head(['Metric', 'Variant', 'Lift', 'p', 'p (sequential)', 'Verdict']);
134
+ for (const metric of results.metrics) {
135
+ for (const c of metric.comparisons) {
136
+ table.row([
137
+ `${metric.name}${metric.guardrail ? ' (guardrail)' : ''}`,
138
+ c.variant,
139
+ Number.isFinite(c.relativeLift) ? `${(c.relativeLift * 100).toFixed(2)}%` : '-',
140
+ c.pValue.toPrecision(3),
141
+ c.sequential.pValue.toPrecision(3),
142
+ c.verdict,
143
+ ]);
144
+ }
145
+ }
146
+ table.render();
147
+ for (const warning of results.warnings)
148
+ this.logger.warning(warning);
149
+ }
150
+ }
151
+ __decorate([
152
+ args.string({ description: 'Experiment key' }),
153
+ __metadata("design:type", String)
154
+ ], FlagsResults.prototype, "experiment", void 0);
155
+ __decorate([
156
+ flags.boolean({ description: 'Recompute now instead of reading the cache' }),
157
+ __metadata("design:type", Boolean)
158
+ ], FlagsResults.prototype, "fresh", void 0);
159
+ export class FlagsForget extends FlagsCommand {
160
+ static commandName = 'flags:forget';
161
+ static description = 'Delete everything stored about a subject in every sink that supports it';
162
+ async run() {
163
+ const runtime = await this.runtime();
164
+ await runtime.manager.forget(this.subject);
165
+ this.logger.success(`forgot ${this.subject}`);
166
+ }
167
+ }
168
+ __decorate([
169
+ args.string({ description: 'Subject id' }),
170
+ __metadata("design:type", String)
171
+ ], FlagsForget.prototype, "subject", void 0);
172
+ export class FlagsReplay extends FlagsCommand {
173
+ static commandName = 'flags:replay';
174
+ static description = 'Move a sink cursor back to the start of the log (backfill a new destination)';
175
+ async run() {
176
+ const runtime = await this.runtime();
177
+ if (!runtime.transport?.rewind) {
178
+ this.logger.error(`the "${runtime.transport?.name}" transport cannot rewind`);
179
+ this.exitCode = 1;
180
+ return;
181
+ }
182
+ await runtime.transport.rewind(this.sink);
183
+ this.logger.success(`${this.sink} will receive the retained log again`);
184
+ }
185
+ }
186
+ __decorate([
187
+ args.string({ description: 'Sink name' }),
188
+ __metadata("design:type", String)
189
+ ], FlagsReplay.prototype, "sink", void 0);
190
+ export class FlagsRequests extends FlagsCommand {
191
+ static commandName = 'flags:requests';
192
+ static description = 'List change requests, or approve/reject one';
193
+ async run() {
194
+ const runtime = await this.runtime();
195
+ const admin = runtime.admin;
196
+ const actor = cliActor(this.as);
197
+ const action = this.action ?? 'list';
198
+ if (action === 'list') {
199
+ const requests = await runtime.store.listChangeRequests({ status: 'pending' });
200
+ const table = this.ui.table();
201
+ table.head(['Id', 'Environment', 'Change', 'Requested by', 'Note']);
202
+ for (const r of requests) {
203
+ table.row([
204
+ r.id,
205
+ r.environment,
206
+ `${r.change.entity} ${r.change.key ?? ''}`,
207
+ r.requestedBy.id,
208
+ r.note ?? '',
209
+ ]);
210
+ }
211
+ table.render();
212
+ return;
213
+ }
214
+ if (!this.id) {
215
+ this.logger.error('give the change request id');
216
+ this.exitCode = 1;
217
+ return;
218
+ }
219
+ if (action === 'approve') {
220
+ const { version } = await admin.approve(this.id, actor, this.note);
221
+ this.logger.success(`applied (ruleset version ${version})`);
222
+ }
223
+ else if (action === 'reject') {
224
+ await admin.reject(this.id, actor, this.note);
225
+ this.logger.success('rejected');
226
+ }
227
+ else if (action === 'cancel') {
228
+ await admin.cancel(this.id, actor);
229
+ this.logger.success('cancelled');
230
+ }
231
+ else {
232
+ this.logger.error(`unknown action "${action}"`);
233
+ this.exitCode = 1;
234
+ }
235
+ }
236
+ }
237
+ __decorate([
238
+ args.string({ description: 'list | approve | reject | cancel', required: false }),
239
+ __metadata("design:type", String)
240
+ ], FlagsRequests.prototype, "action", void 0);
241
+ __decorate([
242
+ args.string({ description: 'Change request id', required: false }),
243
+ __metadata("design:type", String)
244
+ ], FlagsRequests.prototype, "id", void 0);
245
+ __decorate([
246
+ flags.string({ description: 'Review note' }),
247
+ __metadata("design:type", String)
248
+ ], FlagsRequests.prototype, "note", void 0);
249
+ __decorate([
250
+ flags.string({ description: 'Act as this actor id instead of cli:<user>' }),
251
+ __metadata("design:type", String)
252
+ ], FlagsRequests.prototype, "as", void 0);
253
+ //# sourceMappingURL=flags_ops.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flags_ops.js","sourceRoot":"","sources":["../../commands/flags_ops.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { FlagsCommand } from './shared.js';
2
+ export interface Reference {
3
+ key: string;
4
+ file: string;
5
+ line: number;
6
+ }
7
+ /** Finds `'key'` / `"key"` / `` `key` `` string literals for every known key. Exported for tests. */
8
+ export declare function findReferences(root: string, keys: string[]): Promise<Reference[]>;
9
+ export default class FlagsRefs extends FlagsCommand {
10
+ static commandName: string;
11
+ static description: string;
12
+ flag?: string;
13
+ run(): Promise<void>;
14
+ }
15
+ //# sourceMappingURL=flags_refs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flags_refs.d.ts","sourceRoot":"","sources":["../../commands/flags_refs.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAc3C,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,qGAAqG;AACrG,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CA6BvF;AAED,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,YAAY;IACjD,OAAgB,WAAW,SAAgB;IAC3C,OAAgB,WAAW,SAAuE;IAG1F,IAAI,CAAC,EAAE,MAAM,CAAC;IAEP,GAAG,kBAkBjB;CACF"}
@@ -0,0 +1,90 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import { readdir, readFile } from 'node:fs/promises';
11
+ import { extname, join, relative } from 'node:path';
12
+ import { flags } from '@adonisjs/core/ace';
13
+ import { FlagsCommand } from './shared.js';
14
+ const EXTENSIONS = new Set(['.ts', '.tsx', '.js', '.jsx', '.mjs', '.edge', '.vue', '.svelte']);
15
+ const SKIP = new Set([
16
+ 'node_modules',
17
+ 'build',
18
+ 'dist',
19
+ '.git',
20
+ 'tmp',
21
+ 'storage',
22
+ 'public',
23
+ 'coverage',
24
+ ]);
25
+ /** Finds `'key'` / `"key"` / `` `key` `` string literals for every known key. Exported for tests. */
26
+ export async function findReferences(root, keys) {
27
+ const out = [];
28
+ if (keys.length === 0)
29
+ return out;
30
+ const escaped = keys
31
+ .map((k) => k.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'))
32
+ .sort((a, b) => b.length - a.length);
33
+ const pattern = new RegExp(`(['"\`])(${escaped.join('|')})\\1`, 'g');
34
+ const walk = async (dir) => {
35
+ let entries;
36
+ try {
37
+ entries = await readdir(dir, { withFileTypes: true });
38
+ }
39
+ catch {
40
+ return;
41
+ }
42
+ for (const entry of entries) {
43
+ if (SKIP.has(entry.name))
44
+ continue;
45
+ const full = join(dir, entry.name);
46
+ if (entry.isDirectory())
47
+ await walk(full);
48
+ else if (entry.isFile() && EXTENSIONS.has(extname(entry.name))) {
49
+ const lines = (await readFile(full, 'utf8')).split('\n');
50
+ lines.forEach((text, i) => {
51
+ for (const match of text.matchAll(pattern))
52
+ out.push({ key: match[2], file: relative(root, full), line: i + 1 });
53
+ });
54
+ }
55
+ }
56
+ };
57
+ await walk(root);
58
+ return out;
59
+ }
60
+ export default class FlagsRefs extends FlagsCommand {
61
+ static commandName = 'flags:refs';
62
+ static description = 'Where each flag is used in the code, and which flags nothing uses';
63
+ async run() {
64
+ const runtime = await this.runtime();
65
+ const ruleset = runtime.source.current();
66
+ const keys = this.flag
67
+ ? [this.flag]
68
+ : [...new Set([...Object.keys(runtime.manager.declarations), ...Object.keys(ruleset.flags)])];
69
+ const refs = await findReferences(this.app.appRoot.pathname, keys);
70
+ const byKey = new Map();
71
+ for (const ref of refs) {
72
+ // The declaration in config/flags.ts is not a use.
73
+ if (ref.file.startsWith('config/flags.'))
74
+ continue;
75
+ byKey.set(ref.key, [...(byKey.get(ref.key) ?? []), ref]);
76
+ }
77
+ for (const key of keys.sort()) {
78
+ const uses = byKey.get(key) ?? [];
79
+ if (uses.length === 0)
80
+ this.logger.warning(`${key}: no references (candidate for removal)`);
81
+ else
82
+ this.logger.info(`${key}: ${uses.map((u) => `${u.file}:${u.line}`).join(', ')}`);
83
+ }
84
+ }
85
+ }
86
+ __decorate([
87
+ flags.string({ description: 'Only this flag' }),
88
+ __metadata("design:type", String)
89
+ ], FlagsRefs.prototype, "flag", void 0);
90
+ //# sourceMappingURL=flags_refs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flags_refs.js","sourceRoot":"","sources":["../../commands/flags_refs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { FlagsAdmin, ProposeResult } from '../src/admin.js';
2
+ import type { Actor } from '../src/stores/store.js';
3
+ import { FlagsCommand } from './shared.js';
4
+ /** Applies a `flags:set` value. Exported for tests. */
5
+ export declare function applySetValue(admin: FlagsAdmin, key: string, value: string, actor: Actor, options: {
6
+ environment?: string;
7
+ note?: string;
8
+ }): Promise<ProposeResult>;
9
+ export default class FlagsSet extends FlagsCommand {
10
+ static commandName: string;
11
+ static description: string;
12
+ key: string;
13
+ value: string;
14
+ env?: string;
15
+ note?: string;
16
+ as?: string;
17
+ run(): Promise<void>;
18
+ }
19
+ //# sourceMappingURL=flags_set.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flags_set.d.ts","sourceRoot":"","sources":["../../commands/flags_set.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACjE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAY,YAAY,EAAE,MAAM,aAAa,CAAC;AAErD,uDAAuD;AACvD,wBAAgB,aAAa,CAC3B,KAAK,EAAE,UAAU,EACjB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAC/C,OAAO,CAAC,aAAa,CAAC,CAQxB;AA4CD,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,YAAY;IAChD,OAAgB,WAAW,SAAe;IAC1C,OAAgB,WAAW,SACoE;IAGvF,GAAG,EAAE,MAAM,CAAC;IAMZ,KAAK,EAAE,MAAM,CAAC;IAGd,GAAG,CAAC,EAAE,MAAM,CAAC;IAGb,IAAI,CAAC,EAAE,MAAM,CAAC;IAGd,EAAE,CAAC,EAAE,MAAM,CAAC;IAEL,GAAG,kBASjB;CACF"}