effect-app 4.0.0-beta.99 → 4.0.1

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 (391) hide show
  1. package/CHANGELOG.md +2042 -0
  2. package/dist/Array.d.ts +1 -17
  3. package/dist/Array.d.ts.map +1 -1
  4. package/dist/Array.js +3 -27
  5. package/dist/Chunk.d.ts +3 -27
  6. package/dist/Chunk.d.ts.map +1 -1
  7. package/dist/Chunk.js +4 -39
  8. package/dist/Config/SecretURL.d.ts +3 -1
  9. package/dist/Config/SecretURL.d.ts.map +1 -1
  10. package/dist/Config/SecretURL.js +3 -6
  11. package/dist/Config/internal/configSecretURL.d.ts.map +1 -1
  12. package/dist/Config/internal/configSecretURL.js +2 -2
  13. package/dist/Config.d.ts +0 -5
  14. package/dist/Config.d.ts.map +1 -1
  15. package/dist/Config.js +7 -5
  16. package/dist/ConfigProvider.d.ts +0 -37
  17. package/dist/ConfigProvider.d.ts.map +1 -1
  18. package/dist/ConfigProvider.js +5 -41
  19. package/dist/Context.d.ts +6 -4
  20. package/dist/Context.d.ts.map +1 -1
  21. package/dist/Context.js +4 -3
  22. package/dist/DataDependencies.d.ts +136 -0
  23. package/dist/DataDependencies.d.ts.map +1 -0
  24. package/dist/DataDependencies.js +112 -0
  25. package/dist/DateTime.d.ts +33 -0
  26. package/dist/DateTime.d.ts.map +1 -0
  27. package/dist/DateTime.js +18 -0
  28. package/dist/Effect.d.ts +3 -14
  29. package/dist/Effect.d.ts.map +1 -1
  30. package/dist/Effect.js +8 -26
  31. package/dist/Emailer.d.ts +51 -0
  32. package/dist/Emailer.d.ts.map +1 -0
  33. package/dist/Emailer.js +7 -0
  34. package/dist/Function.d.ts +0 -4
  35. package/dist/Function.d.ts.map +1 -1
  36. package/dist/Function.js +1 -7
  37. package/dist/Layer.d.ts +6 -3
  38. package/dist/Layer.d.ts.map +1 -1
  39. package/dist/Layer.js +3 -2
  40. package/dist/Model/Repository/Registry.d.ts +22 -0
  41. package/dist/Model/Repository/Registry.d.ts.map +1 -0
  42. package/dist/Model/Repository/Registry.js +18 -0
  43. package/dist/Model/Repository/dependency.d.ts +6 -0
  44. package/dist/Model/Repository/dependency.d.ts.map +1 -0
  45. package/dist/Model/Repository/dependency.js +29 -0
  46. package/dist/Model/Repository/ext.d.ts +60 -0
  47. package/dist/Model/Repository/ext.d.ts.map +1 -0
  48. package/dist/Model/Repository/ext.js +124 -0
  49. package/dist/Model/Repository/internal/internal.d.ts +68 -0
  50. package/dist/Model/Repository/internal/internal.d.ts.map +1 -0
  51. package/dist/Model/Repository/internal/internal.js +610 -0
  52. package/dist/Model/Repository/legacy.d.ts +21 -0
  53. package/dist/Model/Repository/legacy.d.ts.map +1 -0
  54. package/dist/Model/Repository/legacy.js +2 -0
  55. package/dist/Model/Repository/makeRepo.d.ts +71 -0
  56. package/dist/Model/Repository/makeRepo.d.ts.map +1 -0
  57. package/dist/Model/Repository/makeRepo.js +30 -0
  58. package/dist/Model/Repository/service.d.ts +121 -0
  59. package/dist/Model/Repository/service.d.ts.map +1 -0
  60. package/dist/Model/Repository/service.js +2 -0
  61. package/dist/Model/Repository/validation.d.ts +72 -0
  62. package/dist/Model/Repository/validation.d.ts.map +1 -0
  63. package/dist/Model/Repository/validation.js +39 -0
  64. package/dist/Model/Repository.d.ts +8 -0
  65. package/dist/Model/Repository.d.ts.map +1 -0
  66. package/dist/Model/Repository.js +8 -0
  67. package/dist/Model/dsl.d.ts +34 -0
  68. package/dist/Model/dsl.d.ts.map +1 -0
  69. package/dist/Model/dsl.js +45 -0
  70. package/dist/Model/filter/filterApi.d.ts +30 -0
  71. package/dist/Model/filter/filterApi.d.ts.map +1 -0
  72. package/dist/Model/filter/filterApi.js +2 -0
  73. package/dist/Model/filter/types/errors.d.ts +29 -0
  74. package/dist/Model/filter/types/errors.d.ts.map +1 -0
  75. package/dist/Model/filter/types/errors.js +2 -0
  76. package/dist/Model/filter/types/fields.d.ts +15 -0
  77. package/dist/Model/filter/types/fields.d.ts.map +1 -0
  78. package/dist/Model/filter/types/fields.js +2 -0
  79. package/dist/Model/filter/types/path/common.d.ts +316 -0
  80. package/dist/Model/filter/types/path/common.d.ts.map +1 -0
  81. package/dist/Model/filter/types/path/common.js +2 -0
  82. package/dist/Model/filter/types/path/eager.d.ts +94 -0
  83. package/dist/Model/filter/types/path/eager.d.ts.map +1 -0
  84. package/dist/Model/filter/types/path/eager.js +36 -0
  85. package/dist/Model/filter/types/path/index.d.ts +4 -0
  86. package/dist/Model/filter/types/path/index.d.ts.map +1 -0
  87. package/dist/Model/filter/types/path/index.js +3 -0
  88. package/dist/Model/filter/types/utils.d.ts +79 -0
  89. package/dist/Model/filter/types/utils.d.ts.map +1 -0
  90. package/dist/Model/filter/types/utils.js +2 -0
  91. package/dist/Model/filter/types/validator.d.ts +30 -0
  92. package/dist/Model/filter/types/validator.d.ts.map +1 -0
  93. package/dist/Model/filter/types/validator.js +2 -0
  94. package/dist/Model/filter/types.d.ts +5 -0
  95. package/dist/Model/filter/types.d.ts.map +1 -0
  96. package/dist/Model/filter/types.js +7 -0
  97. package/dist/Model/query/dsl.d.ts +630 -0
  98. package/dist/Model/query/dsl.d.ts.map +1 -0
  99. package/dist/Model/query/dsl.js +376 -0
  100. package/dist/Model/query/new-kid-interpreter.d.ts +132 -0
  101. package/dist/Model/query/new-kid-interpreter.d.ts.map +1 -0
  102. package/dist/Model/query/new-kid-interpreter.js +369 -0
  103. package/dist/Model/query.d.ts +15 -0
  104. package/dist/Model/query.d.ts.map +1 -0
  105. package/dist/Model/query.js +3 -0
  106. package/dist/Model.d.ts +6 -0
  107. package/dist/Model.d.ts.map +1 -0
  108. package/dist/Model.js +6 -0
  109. package/dist/NonEmptySet.d.ts +3 -1
  110. package/dist/NonEmptySet.d.ts.map +1 -1
  111. package/dist/NonEmptySet.js +2 -2
  112. package/dist/Option.d.ts +1 -2
  113. package/dist/Option.d.ts.map +1 -1
  114. package/dist/Option.js +3 -7
  115. package/dist/Pure.d.ts +9 -7
  116. package/dist/Pure.d.ts.map +1 -1
  117. package/dist/Pure.js +20 -17
  118. package/dist/QueueMaker.d.ts +11 -0
  119. package/dist/QueueMaker.d.ts.map +1 -0
  120. package/dist/QueueMaker.js +11 -0
  121. package/dist/RequestContext.d.ts +87 -0
  122. package/dist/RequestContext.d.ts.map +1 -0
  123. package/dist/RequestContext.js +45 -0
  124. package/dist/RequestScopedDependencies.d.ts +21 -0
  125. package/dist/RequestScopedDependencies.d.ts.map +1 -0
  126. package/dist/RequestScopedDependencies.js +16 -0
  127. package/dist/Schema/Class.d.ts +163 -16
  128. package/dist/Schema/Class.d.ts.map +1 -1
  129. package/dist/Schema/Class.js +193 -21
  130. package/dist/Schema/FastCheck.d.ts.map +1 -1
  131. package/dist/Schema/SchemaParser.d.ts +5 -0
  132. package/dist/Schema/SchemaParser.d.ts.map +1 -0
  133. package/dist/Schema/SchemaParser.js +6 -0
  134. package/dist/Schema/SpecialJsonSchema.d.ts +15 -2
  135. package/dist/Schema/SpecialJsonSchema.d.ts.map +1 -1
  136. package/dist/Schema/SpecialJsonSchema.js +70 -12
  137. package/dist/Schema/SpecialOpenApi.d.ts +1 -1
  138. package/dist/Schema/SpecialOpenApi.js +3 -3
  139. package/dist/Schema/brand.d.ts +5 -5
  140. package/dist/Schema/brand.d.ts.map +1 -1
  141. package/dist/Schema/brand.js +6 -4
  142. package/dist/Schema/email.d.ts.map +1 -1
  143. package/dist/Schema/email.js +8 -5
  144. package/dist/Schema/ext.d.ts +279 -75
  145. package/dist/Schema/ext.d.ts.map +1 -1
  146. package/dist/Schema/ext.js +330 -72
  147. package/dist/Schema/moreStrings.d.ts +82 -48
  148. package/dist/Schema/moreStrings.d.ts.map +1 -1
  149. package/dist/Schema/moreStrings.js +85 -51
  150. package/dist/Schema/numbers.d.ts +33 -21
  151. package/dist/Schema/numbers.d.ts.map +1 -1
  152. package/dist/Schema/numbers.js +64 -12
  153. package/dist/Schema/phoneNumber.d.ts.map +1 -1
  154. package/dist/Schema/phoneNumber.js +6 -6
  155. package/dist/Schema/schema.d.ts +1 -1
  156. package/dist/Schema/schema.d.ts.map +1 -1
  157. package/dist/Schema/schema.js +2 -2
  158. package/dist/Schema/strings.d.ts +18 -4
  159. package/dist/Schema/strings.d.ts.map +1 -1
  160. package/dist/Schema/strings.js +1 -5
  161. package/dist/Schema.d.ts +224 -7
  162. package/dist/Schema.d.ts.map +1 -1
  163. package/dist/Schema.js +190 -24
  164. package/dist/SchemaAST.d.ts +2 -0
  165. package/dist/SchemaAST.d.ts.map +1 -0
  166. package/dist/SchemaAST.js +2 -0
  167. package/dist/Set.d.ts +4 -1
  168. package/dist/Set.d.ts.map +1 -1
  169. package/dist/Set.js +8 -6
  170. package/dist/Store.d.ts +215 -0
  171. package/dist/Store.d.ts.map +1 -0
  172. package/dist/Store.js +113 -0
  173. package/dist/_ext/Array.d.ts +1 -1
  174. package/dist/_ext/Array.d.ts.map +1 -1
  175. package/dist/_ext/Array.js +4 -2
  176. package/dist/_ext/ord.ext.d.ts +2 -1
  177. package/dist/_ext/ord.ext.d.ts.map +1 -1
  178. package/dist/_ext/ord.ext.js +2 -2
  179. package/dist/builtin.d.ts +2 -14
  180. package/dist/builtin.d.ts.map +1 -1
  181. package/dist/builtin.js +1 -1
  182. package/dist/client/InvalidationKeys.d.ts +30 -0
  183. package/dist/client/InvalidationKeys.d.ts.map +1 -0
  184. package/dist/client/InvalidationKeys.js +37 -0
  185. package/dist/client/apiClientFactory.d.ts +13 -8
  186. package/dist/client/apiClientFactory.d.ts.map +1 -1
  187. package/dist/client/apiClientFactory.js +154 -34
  188. package/dist/client/clientFor.d.ts +48 -13
  189. package/dist/client/clientFor.d.ts.map +1 -1
  190. package/dist/client/clientFor.js +9 -1
  191. package/dist/client/errors.d.ts +74 -28
  192. package/dist/client/errors.d.ts.map +1 -1
  193. package/dist/client/errors.js +41 -10
  194. package/dist/client/makeClient.d.ts +487 -32
  195. package/dist/client/makeClient.d.ts.map +1 -1
  196. package/dist/client/makeClient.js +47 -21
  197. package/dist/client.d.ts +2 -0
  198. package/dist/client.d.ts.map +1 -1
  199. package/dist/client.js +3 -1
  200. package/dist/faker.d.ts.map +1 -1
  201. package/dist/http/Request.d.ts +2 -2
  202. package/dist/http/Request.d.ts.map +1 -1
  203. package/dist/http/Request.js +2 -2
  204. package/dist/http/internal/lib.d.ts +12 -12
  205. package/dist/http/internal/lib.d.ts.map +1 -1
  206. package/dist/http/internal/lib.js +13 -13
  207. package/dist/ids.d.ts +32 -14
  208. package/dist/ids.d.ts.map +1 -1
  209. package/dist/ids.js +38 -7
  210. package/dist/index.d.ts +3 -0
  211. package/dist/index.d.ts.map +1 -1
  212. package/dist/index.js +5 -1
  213. package/dist/middleware.d.ts +12 -6
  214. package/dist/middleware.d.ts.map +1 -1
  215. package/dist/middleware.js +13 -7
  216. package/dist/migration/nativeEffect.d.ts +21 -0
  217. package/dist/migration/nativeEffect.d.ts.map +1 -0
  218. package/dist/migration/nativeEffect.js +598 -0
  219. package/dist/rpc/Invalidation.d.ts +1124 -0
  220. package/dist/rpc/Invalidation.d.ts.map +1 -0
  221. package/dist/rpc/Invalidation.js +178 -0
  222. package/dist/rpc/MiddlewareMaker.d.ts +10 -7
  223. package/dist/rpc/MiddlewareMaker.d.ts.map +1 -1
  224. package/dist/rpc/MiddlewareMaker.js +57 -37
  225. package/dist/rpc/RpcContextMap.d.ts +2 -2
  226. package/dist/rpc/RpcContextMap.d.ts.map +1 -1
  227. package/dist/rpc/RpcMiddleware.d.ts +13 -10
  228. package/dist/rpc/RpcMiddleware.d.ts.map +1 -1
  229. package/dist/rpc/RpcMiddleware.js +2 -2
  230. package/dist/rpc.d.ts +1 -1
  231. package/dist/rpc.d.ts.map +1 -1
  232. package/dist/rpc.js +2 -2
  233. package/dist/runtime.d.ts +19 -0
  234. package/dist/runtime.d.ts.map +1 -0
  235. package/dist/runtime.js +40 -0
  236. package/dist/setupRequest.d.ts +20 -0
  237. package/dist/setupRequest.d.ts.map +1 -0
  238. package/dist/setupRequest.js +72 -0
  239. package/dist/toast.d.ts +51 -0
  240. package/dist/toast.d.ts.map +1 -0
  241. package/dist/toast.js +34 -0
  242. package/dist/transform.d.ts +1 -1
  243. package/dist/transform.d.ts.map +1 -1
  244. package/dist/transform.js +4 -5
  245. package/dist/utils/effectify.d.ts +1 -1
  246. package/dist/utils/effectify.d.ts.map +1 -1
  247. package/dist/utils/effectify.js +2 -2
  248. package/dist/utils/extend.d.ts +6 -1
  249. package/dist/utils/extend.d.ts.map +1 -1
  250. package/dist/utils/extend.js +24 -6
  251. package/dist/utils/gen.d.ts +4 -4
  252. package/dist/utils/gen.d.ts.map +1 -1
  253. package/dist/utils/logLevel.d.ts +2 -2
  254. package/dist/utils/logLevel.d.ts.map +1 -1
  255. package/dist/utils/logger.d.ts +2 -1
  256. package/dist/utils/logger.d.ts.map +1 -1
  257. package/dist/utils/logger.js +2 -2
  258. package/dist/utils.d.ts +34 -45
  259. package/dist/utils.d.ts.map +1 -1
  260. package/dist/utils.js +33 -49
  261. package/dist/validation/validators.d.ts.map +1 -1
  262. package/dist/validation.d.ts.map +1 -1
  263. package/dist/withToast.d.ts +30 -0
  264. package/dist/withToast.d.ts.map +1 -0
  265. package/dist/withToast.js +64 -0
  266. package/package.json +25 -266
  267. package/src/Array.ts +7 -39
  268. package/src/Chunk.ts +6 -55
  269. package/src/Config/SecretURL.ts +6 -3
  270. package/src/Config/internal/configSecretURL.ts +2 -2
  271. package/src/Config.ts +6 -13
  272. package/src/ConfigProvider.ts +4 -47
  273. package/src/Context.ts +9 -8
  274. package/src/DataDependencies.ts +171 -0
  275. package/src/DateTime.ts +473 -0
  276. package/src/Effect.ts +10 -32
  277. package/src/Emailer.ts +51 -0
  278. package/src/Function.ts +0 -7
  279. package/src/Inputify.type.ts +1 -1
  280. package/src/Layer.ts +8 -5
  281. package/src/Model/Repository/Registry.ts +35 -0
  282. package/src/Model/Repository/dependency.ts +32 -0
  283. package/src/Model/Repository/ext.ts +374 -0
  284. package/src/Model/Repository/internal/internal.ts +987 -0
  285. package/src/Model/Repository/legacy.ts +29 -0
  286. package/src/Model/Repository/makeRepo.ts +168 -0
  287. package/src/Model/Repository/service.ts +676 -0
  288. package/src/Model/Repository/validation.ts +38 -0
  289. package/src/Model/Repository.ts +7 -0
  290. package/src/Model/dsl.ts +130 -0
  291. package/src/Model/filter/filterApi.ts +78 -0
  292. package/src/Model/filter/types/errors.ts +47 -0
  293. package/src/Model/filter/types/fields.ts +50 -0
  294. package/src/Model/filter/types/path/common.ts +404 -0
  295. package/src/Model/filter/types/path/eager.ts +329 -0
  296. package/src/Model/filter/types/path/index.ts +4 -0
  297. package/src/Model/filter/types/utils.ts +128 -0
  298. package/src/Model/filter/types/validator.ts +46 -0
  299. package/src/Model/filter/types.ts +6 -0
  300. package/src/Model/query/dsl.ts +3092 -0
  301. package/src/Model/query/new-kid-interpreter.ts +531 -0
  302. package/src/Model/query.ts +13 -0
  303. package/src/Model.ts +5 -0
  304. package/src/NonEmptySet.ts +6 -4
  305. package/src/Option.ts +3 -8
  306. package/src/Pure.ts +20 -17
  307. package/src/QueueMaker.ts +11 -0
  308. package/src/RequestContext.ts +48 -0
  309. package/src/RequestScopedDependencies.ts +45 -0
  310. package/src/Schema/Class.ts +550 -56
  311. package/src/Schema/SchemaParser.ts +12 -0
  312. package/src/Schema/SpecialJsonSchema.ts +75 -7
  313. package/src/Schema/SpecialOpenApi.ts +5 -5
  314. package/src/Schema/brand.ts +27 -12
  315. package/src/Schema/email.ts +9 -7
  316. package/src/Schema/ext.ts +405 -95
  317. package/src/Schema/moreStrings.ts +213 -88
  318. package/src/Schema/numbers.ts +107 -29
  319. package/src/Schema/phoneNumber.ts +8 -9
  320. package/src/Schema/schema.ts +1 -1
  321. package/src/Schema/strings.ts +23 -14
  322. package/src/Schema.ts +403 -46
  323. package/src/SchemaAST.ts +1 -0
  324. package/src/Set.ts +10 -5
  325. package/src/Store.ts +325 -0
  326. package/src/_ext/Array.ts +4 -2
  327. package/src/_ext/ord.ext.ts +2 -1
  328. package/src/builtin-json.d.ts +24 -0
  329. package/src/builtin.ts +16 -21
  330. package/src/client/InvalidationKeys.ts +55 -0
  331. package/src/client/apiClientFactory.ts +295 -129
  332. package/src/client/clientFor.ts +101 -33
  333. package/src/client/errors.ts +66 -20
  334. package/src/client/makeClient.ts +519 -60
  335. package/src/client.ts +6 -4
  336. package/src/http/Request.ts +4 -4
  337. package/src/http/internal/lib.ts +12 -12
  338. package/src/http.ts +1 -1
  339. package/src/ids.ts +45 -8
  340. package/src/index.ts +20 -16
  341. package/src/middleware.ts +12 -8
  342. package/src/migration/nativeEffect.ts +645 -0
  343. package/src/rpc/Invalidation.ts +278 -0
  344. package/src/rpc/MiddlewareMaker.ts +86 -79
  345. package/src/rpc/README.md +2 -2
  346. package/src/rpc/RpcContextMap.ts +4 -4
  347. package/src/rpc/RpcMiddleware.ts +18 -13
  348. package/src/rpc.ts +4 -4
  349. package/src/runtime.ts +57 -0
  350. package/src/setupRequest.ts +138 -0
  351. package/src/toast.ts +54 -0
  352. package/src/transform.ts +4 -4
  353. package/src/utils/effectify.ts +1 -1
  354. package/src/utils/extend.ts +24 -5
  355. package/src/utils/gen.ts +7 -7
  356. package/src/utils/logLevel.ts +1 -1
  357. package/src/utils/logger.ts +3 -2
  358. package/src/utils.ts +85 -175
  359. package/src/validation.ts +2 -2
  360. package/src/withToast.ts +133 -0
  361. package/test/dateTimeLocal.test.ts +55 -0
  362. package/test/dist/dateTimeLocal.test.d.ts.map +1 -0
  363. package/test/dist/nativeEffectMigration.test.d.ts.map +1 -0
  364. package/test/dist/rpc.test.d.ts.map +1 -1
  365. package/test/dist/rpcMiddlewareContext.test.d.ts.map +1 -0
  366. package/test/moreStrings.test.ts +55 -10
  367. package/test/nativeEffectMigration.test.ts +77 -0
  368. package/test/rpc.test.ts +28 -11
  369. package/test/rpcMiddlewareContext.test.ts +63 -0
  370. package/test/schema.test.ts +318 -55
  371. package/test/secretURL.test.ts +4 -1
  372. package/test/special.test.ts +663 -131
  373. package/test/utils.test.ts +5 -5
  374. package/tsconfig.base.json +6 -4
  375. package/tsconfig.json +9 -1
  376. package/tsconfig.src.json +29 -29
  377. package/tsconfig.test.json +2 -2
  378. package/dist/Operations.d.ts +0 -124
  379. package/dist/Operations.d.ts.map +0 -1
  380. package/dist/Operations.js +0 -29
  381. package/dist/_ext/date.d.ts +0 -15
  382. package/dist/_ext/date.d.ts.map +0 -1
  383. package/dist/_ext/date.js +0 -16
  384. package/dist/_ext/misc.d.ts +0 -14
  385. package/dist/_ext/misc.d.ts.map +0 -1
  386. package/dist/_ext/misc.js +0 -17
  387. package/eslint.config.mjs +0 -26
  388. package/src/Operations.ts +0 -55
  389. package/src/_ext/date.ts +0 -27
  390. package/src/_ext/misc.ts +0 -46
  391. package/tsconfig.json.bak +0 -12
@@ -0,0 +1,598 @@
1
+ /**
2
+ * Rewrites source that imported effect-app helpers now provided by Effect.
3
+ *
4
+ * The rewrite is textual and keeps the rest of the file. It understands named
5
+ * imports, aliases, and `import * as` namespaces from the effect-app entry points
6
+ * listed in {@link nativeEffectReplacements}.
7
+ */
8
+ const struct = [["Struct", "effect/Struct"]];
9
+ const record = [["Record", "effect/Record"]];
10
+ const str = [["String", "effect/String"]];
11
+ const option = [["Option", "effect/Option"]];
12
+ const array = [["Array", "effect/Array"]];
13
+ const chunk = [["Chunk", "effect/Chunk"]];
14
+ const tuple = [["Tuple", "effect/Tuple"]];
15
+ const effect = [["Effect", "effect/Effect"]];
16
+ const dateTime = [["DateTime", "effect/DateTime"], ["pipeZonedLocal", "effect-app/DateTime"]];
17
+ const deferred = [["Deferred", "effect/Deferred"]];
18
+ const result = [["Result", "effect/Result"]];
19
+ const absurd = [["absurd", "effect/Function"]];
20
+ export const nativeEffectReplacements = [
21
+ {
22
+ module: "effect-app/utils",
23
+ name: "typedKeysOf",
24
+ expression: "Struct.keys",
25
+ imports: struct,
26
+ note: "Struct.keys returns `(keyof T & string)[]`."
27
+ },
28
+ {
29
+ module: "effect-app/utils",
30
+ name: "typedValuesOf",
31
+ expression: "Record.values",
32
+ imports: record,
33
+ note: "Record.values reads a record with one value type. When each value's type depends on its key, use Object.values."
34
+ },
35
+ {
36
+ module: "effect-app/utils",
37
+ name: "capitalize",
38
+ expression: "String.capitalize",
39
+ imports: str,
40
+ note: "Same first-character capitalization, including the empty string."
41
+ },
42
+ {
43
+ module: "effect-app/utils",
44
+ name: "uncapitalize",
45
+ expression: "String.uncapitalize",
46
+ imports: str,
47
+ note: "Same first-character uncapitalization, including the empty string."
48
+ },
49
+ {
50
+ module: "effect-app/utils",
51
+ name: "assertUnreachable",
52
+ expression: "absurd",
53
+ imports: absurd,
54
+ note: "absurd throws when an impossible value is reached. The error text no longer includes the value."
55
+ },
56
+ {
57
+ module: "effect-app/Function",
58
+ name: "tuple",
59
+ expression: "Tuple.make",
60
+ imports: tuple,
61
+ note: "Tuple.make returns a mutable tuple. It is assignable wherever a readonly tuple was expected."
62
+ },
63
+ {
64
+ module: "effect-app/Array",
65
+ name: "toNonEmptyArray",
66
+ expression: "Option.liftPredicate(Array.isReadonlyArrayNonEmpty)",
67
+ imports: [...option, ...array],
68
+ note: "Option of the same readonly array when it is non-empty."
69
+ },
70
+ {
71
+ module: "effect-app/Array",
72
+ name: "NEROArrayFromArray",
73
+ expression: "Option.liftPredicate(Array.isReadonlyArrayNonEmpty)",
74
+ imports: [...option, ...array],
75
+ note: "Same as toNonEmptyArray."
76
+ },
77
+ {
78
+ module: "effect-app/Array",
79
+ name: "NEAFromArray",
80
+ expression: "Option.liftPredicate(Array.isArrayNonEmpty)",
81
+ imports: [...option, ...array],
82
+ note: "Option of the same mutable array when it is non-empty."
83
+ },
84
+ {
85
+ module: "effect-app/Array",
86
+ name: "chunk_",
87
+ expression: "Array.chunksOf",
88
+ imports: [...array, ...chunk],
89
+ call: "chunk",
90
+ note: "Was a Chunk of mutable slices. Now a Chunk of Array.chunksOf groups. An empty input is an empty Chunk."
91
+ },
92
+ {
93
+ module: "effect-app/Array",
94
+ name: "_chunk_",
95
+ expression: "Array.chunksOf",
96
+ imports: array,
97
+ note: "The generator form is gone. Array.chunksOf returns the groups directly."
98
+ },
99
+ {
100
+ module: "effect-app/Option",
101
+ name: "toBool",
102
+ expression: "Option.isSome",
103
+ imports: option,
104
+ note: "isSome is the boolean test and also narrows to Some."
105
+ },
106
+ {
107
+ module: "effect-app/Effect",
108
+ name: "annotateLogscoped",
109
+ expression: "Effect.annotateLogsScoped",
110
+ imports: effect,
111
+ note: "The old name was a typo of Effect.annotateLogsScoped."
112
+ },
113
+ {
114
+ module: "effect-app/Effect",
115
+ name: "await_",
116
+ expression: "Deferred.await",
117
+ imports: deferred,
118
+ note: "Await a Deferred. Effect.await_ was Deferred.await."
119
+ },
120
+ {
121
+ module: "effect-app/Chunk",
122
+ name: "findFirstSimple",
123
+ expression: "Chunk.findFirst",
124
+ imports: chunk,
125
+ note: "The alias passed the chunk first. Chunk.findFirst is dual, so the data-first call still typechecks."
126
+ },
127
+ {
128
+ module: "effect-app/Chunk",
129
+ name: "findLastSimple",
130
+ expression: "Chunk.findLast",
131
+ imports: chunk,
132
+ note: "Alias of Chunk.findLast."
133
+ },
134
+ {
135
+ module: "effect-app/Chunk",
136
+ name: "ChunkPartition",
137
+ expression: "Chunk.partition",
138
+ imports: chunk,
139
+ note: "Alias of Chunk.partition."
140
+ },
141
+ {
142
+ module: "effect-app/Chunk",
143
+ name: "uniq",
144
+ expression: "(equivalence) => (self) => Chunk.fromIterable(Array.dedupeWith(Chunk.toReadonlyArray(self), equivalence))",
145
+ imports: [...chunk, ...array],
146
+ note: "Keeps the first match under a custom equivalence. Equal values can use Chunk.dedupe instead."
147
+ },
148
+ {
149
+ module: "effect-app/Chunk",
150
+ name: "elem",
151
+ expression: "(equivalence, value) => Chunk.containsWith(equivalence)(value)",
152
+ imports: chunk,
153
+ note: "Equivalence is treated as symmetric. containsWith applies it as equivalence(needle, element)."
154
+ },
155
+ {
156
+ module: "effect-app/Schema",
157
+ name: "DateValid",
158
+ expression: "Date",
159
+ imports: [["Date", "effect-app/Schema"]],
160
+ note: "DateValid was an alias of effect-app Schema.Date. Schema.Date already rejects invalid dates."
161
+ },
162
+ {
163
+ module: "effect-app/_ext/misc",
164
+ name: "encaseMaybeInEffect_",
165
+ expression: "Effect.fromOption",
166
+ imports: effect,
167
+ note: "Effect.fromOption(option, onNone) fails with the lazy error on None."
168
+ },
169
+ {
170
+ module: "effect-app/_ext/misc",
171
+ name: "encaseMaybeEither_",
172
+ expression: "Result.fromOption",
173
+ imports: result,
174
+ note: "Result.fromOption(option, onNone)."
175
+ },
176
+ {
177
+ module: "effect-app/_ext/misc",
178
+ name: "toNullable",
179
+ expression: "(effect) => Effect.map(effect, Option.getOrNull)",
180
+ imports: [...effect, ...option],
181
+ note: "Maps a successful Option to its value or null."
182
+ },
183
+ {
184
+ module: "effect-app/_ext/misc",
185
+ name: "flatMapScoped",
186
+ expression: "(scoped, f) => Effect.scoped(Effect.flatMap(scoped, f))",
187
+ imports: effect,
188
+ note: "Closes the scope after the continuation."
189
+ },
190
+ {
191
+ module: "effect-app/_ext/misc",
192
+ name: "scope",
193
+ expression: "(scoped, effect) => Effect.scoped(Effect.andThen(scoped, effect))",
194
+ imports: effect,
195
+ note: "Runs the second effect inside the first effect's scope, then closes it."
196
+ },
197
+ ...[
198
+ ["DateAddDays", "days", "date-add"],
199
+ ["DateAddHours", "hours", "date-add"],
200
+ ["DateAddMinutes", "minutes", "date-add"],
201
+ ["DateAddSeconds", "seconds", "date-add"],
202
+ ["DateAddWeeks", "weeks", "date-add"],
203
+ ["DateAddMonths", "months", "date-add"],
204
+ ["DateAddYears", "years", "date-add"],
205
+ ["DateSubDays", "days", "date-sub"],
206
+ ["DateSubHours", "hours", "date-sub"],
207
+ ["DateSubMinutes", "minutes", "date-sub"],
208
+ ["DateSubSeconds", "seconds", "date-sub"],
209
+ ["DateSubWeeks", "weeks", "date-sub"],
210
+ ["DateSubMonths", "months", "date-sub"],
211
+ ["DateSubYears", "years", "date-sub"]
212
+ ]
213
+ .map(([name, unit, call]) => ({
214
+ module: "effect-app/_ext/date",
215
+ name,
216
+ expression: unit,
217
+ imports: dateTime,
218
+ call,
219
+ note: "pipeZonedLocal attaches the process timezone, runs DateTime.add or DateTime.subtract, and returns the instant with toDateUtc."
220
+ }))
221
+ ];
222
+ const byModule = new Map();
223
+ for (const replacement of nativeEffectReplacements) {
224
+ const existing = byModule.get(replacement.module) ?? new Map();
225
+ existing.set(replacement.name, replacement);
226
+ byModule.set(replacement.module, existing);
227
+ }
228
+ const moduleNames = new Set(byModule.keys());
229
+ /** Rewrite one source file. `source` is the file text. */
230
+ export const migrateEffectAppSource = (source) => {
231
+ const imports = findImports(source);
232
+ const bindings = new Map();
233
+ const namespaceBindings = new Map();
234
+ const edits = [];
235
+ const needed = new Map();
236
+ const maskedSpans = [];
237
+ for (const statement of imports) {
238
+ const table = byModule.get(statement.module);
239
+ if (table === undefined)
240
+ continue;
241
+ maskedSpans.push({ start: statement.start, end: statement.end });
242
+ if (statement.namespace !== undefined) {
243
+ namespaceBindings.set(statement.namespace, table);
244
+ continue;
245
+ }
246
+ const removed = [];
247
+ for (const specifier of statement.specifiers) {
248
+ const replacement = table.get(specifier.imported);
249
+ if (replacement === undefined)
250
+ continue;
251
+ bindings.set(specifier.local, { replacement, local: specifier.local });
252
+ removed.push(specifier);
253
+ rememberImports(needed, replacement);
254
+ }
255
+ if (removed.length === 0)
256
+ continue;
257
+ if (removed.length === statement.specifiers.length) {
258
+ edits.push({ start: statement.start, end: statement.end, text: "" });
259
+ }
260
+ else {
261
+ const kept = statement.specifiers.filter((specifier) => !removed.includes(specifier));
262
+ edits.push({
263
+ start: statement.clauseStart,
264
+ end: statement.clauseEnd,
265
+ text: `{ ${kept.map((specifier) => specifier.text).join(", ")} }`
266
+ });
267
+ }
268
+ }
269
+ const mask = maskSpans(maskNonCode(source), maskedSpans);
270
+ for (const [local, binding] of bindings) {
271
+ for (const match of identifierSpans(mask, local)) {
272
+ const rendered = render(binding.replacement, source, match + local.length);
273
+ edits.push({ start: match, end: rendered.end, text: rendered.text });
274
+ }
275
+ }
276
+ for (const [namespace, table] of namespaceBindings) {
277
+ let used = false;
278
+ for (const match of identifierSpans(mask, namespace)) {
279
+ const after = skipSpaces(source, match + namespace.length);
280
+ if (source[after] !== ".")
281
+ continue;
282
+ const propertyStart = after + 1;
283
+ const property = readIdentifier(source, propertyStart);
284
+ if (property === undefined)
285
+ continue;
286
+ const replacement = table.get(property.name);
287
+ if (replacement === undefined) {
288
+ used = true;
289
+ continue;
290
+ }
291
+ rememberImports(needed, replacement);
292
+ const rendered = render(replacement, source, propertyStart + property.name.length);
293
+ edits.push({ start: match, end: rendered.end, text: rendered.text });
294
+ }
295
+ if (!used) {
296
+ const statement = imports.find((item) => item.namespace === namespace && byModule.has(item.module));
297
+ if (statement !== undefined)
298
+ edits.push({ start: statement.start, end: statement.end, text: "" });
299
+ }
300
+ }
301
+ return insertImports(applyEdits(source, edits), needed);
302
+ };
303
+ const render = (replacement, source, afterName) => {
304
+ const bare = { text: replacement.expression, end: afterName };
305
+ if (replacement.call === undefined)
306
+ return bare;
307
+ const open = skipSpaces(source, afterName);
308
+ if (source[open] !== "(")
309
+ return bare;
310
+ const args = splitArgs(source, open);
311
+ if (args === undefined)
312
+ return bare;
313
+ if (replacement.call === "chunk" && args.args.length === 2) {
314
+ return {
315
+ text: `Chunk.fromIterable(Array.chunksOf(${args.args[0]}, ${args.args[1]}))`,
316
+ end: args.end
317
+ };
318
+ }
319
+ if ((replacement.call === "date-add" || replacement.call === "date-sub") && args.args.length === 2) {
320
+ const method = replacement.call === "date-add" ? "add" : "subtract";
321
+ return {
322
+ text: `pipeZonedLocal(${args.args[0]}, DateTime.${method}({ ${replacement.expression}: ${args.args[1]} }))`,
323
+ end: args.end
324
+ };
325
+ }
326
+ return bare;
327
+ };
328
+ const rememberImports = (needed, replacement) => {
329
+ for (const [local, from] of replacement.imports) {
330
+ const names = needed.get(from) ?? new Set();
331
+ names.add(local);
332
+ needed.set(from, names);
333
+ }
334
+ };
335
+ const findImports = (source) => {
336
+ const found = [];
337
+ const pattern = /\bimport\s+(type\s+)?([\s\S]*?)\s+from\s+["']([^"']+)["']/g;
338
+ for (const match of source.matchAll(pattern)) {
339
+ const clause = match[2] ?? "";
340
+ const moduleName = match[3] ?? "";
341
+ if (!moduleNames.has(moduleName))
342
+ continue;
343
+ const start = lineStart(source, match.index ?? 0);
344
+ const end = lineEnd(source, (match.index ?? 0) + match[0].length);
345
+ const clauseStart = (match.index ?? 0) + match[0].indexOf(clause);
346
+ const namespace = /^\*\s+as\s+([A-Za-z_$][\w$]*)/.exec(clause.trim());
347
+ found.push({
348
+ start,
349
+ end,
350
+ clauseStart,
351
+ clauseEnd: clauseStart + clause.length,
352
+ module: moduleName,
353
+ ...(namespace?.[1] === undefined ? {} : { namespace: namespace[1] }),
354
+ specifiers: namespace === null ? parseSpecifiers(clause) : []
355
+ });
356
+ }
357
+ return found;
358
+ };
359
+ const parseSpecifiers = (clause) => {
360
+ const brace = clause.indexOf("{");
361
+ if (brace < 0)
362
+ return [];
363
+ const end = clause.lastIndexOf("}");
364
+ const body = clause.slice(brace + 1, end);
365
+ return body.split(",").flatMap((part) => {
366
+ const text = part.trim();
367
+ if (text === "" || text.startsWith("type "))
368
+ return [];
369
+ const alias = /^([A-Za-z_$][\w$]*)(?:\s+as\s+([A-Za-z_$][\w$]*))?$/.exec(text);
370
+ if (alias === null)
371
+ return [];
372
+ return [{ imported: alias[1], local: alias[2] ?? alias[1], text }];
373
+ });
374
+ };
375
+ const escapeRegExp = (value) => value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
376
+ const identifierSpans = (mask, name) => {
377
+ const spans = [];
378
+ const pattern = new RegExp(`(?<![\\w$])${escapeRegExp(name)}(?![\\w$])`, "g");
379
+ for (const match of mask.matchAll(pattern))
380
+ spans.push(match.index ?? 0);
381
+ return spans;
382
+ };
383
+ const readIdentifier = (source, index) => {
384
+ const match = /^[A-Za-z_$][\w$]*/.exec(source.slice(index));
385
+ return match === null ? undefined : { name: match[0] };
386
+ };
387
+ const splitArgs = (source, open) => {
388
+ const balanced = readBalanced(source, open, "(", ")");
389
+ if (balanced === undefined)
390
+ return undefined;
391
+ const args = [];
392
+ let depth = 0;
393
+ let quote;
394
+ let start = 0;
395
+ const body = balanced.body;
396
+ for (let i = 0; i < body.length; i++) {
397
+ const char = body[i];
398
+ if (quote !== undefined) {
399
+ if (char === "\\") {
400
+ i++;
401
+ continue;
402
+ }
403
+ if (char === quote)
404
+ quote = undefined;
405
+ continue;
406
+ }
407
+ if (char === "'" || char === "\"" || char === "`") {
408
+ quote = char;
409
+ continue;
410
+ }
411
+ if (char === "(" || char === "[" || char === "{")
412
+ depth++;
413
+ if (char === ")" || char === "]" || char === "}")
414
+ depth--;
415
+ if (char === "," && depth === 0) {
416
+ args.push(body.slice(start, i).trim());
417
+ start = i + 1;
418
+ }
419
+ }
420
+ const last = body.slice(start).trim();
421
+ if (last !== "")
422
+ args.push(last);
423
+ return { args, end: balanced.end };
424
+ };
425
+ const readBalanced = (source, open, left, right) => {
426
+ if (source[open] !== left)
427
+ return undefined;
428
+ let depth = 0;
429
+ let quote;
430
+ for (let i = open; i < source.length; i++) {
431
+ const char = source[i];
432
+ if (quote !== undefined) {
433
+ if (char === "\\") {
434
+ i++;
435
+ continue;
436
+ }
437
+ if (char === quote)
438
+ quote = undefined;
439
+ continue;
440
+ }
441
+ if (char === "'" || char === "\"" || char === "`") {
442
+ quote = char;
443
+ continue;
444
+ }
445
+ if (char === left)
446
+ depth++;
447
+ if (char === right) {
448
+ depth--;
449
+ if (depth === 0)
450
+ return { body: source.slice(open + 1, i), end: i + 1 };
451
+ }
452
+ }
453
+ return undefined;
454
+ };
455
+ const maskSpans = (mask, spans) => {
456
+ const chars = [...mask];
457
+ for (const span of spans) {
458
+ for (let i = span.start; i < span.end && i < chars.length; i++) {
459
+ if (chars[i] !== "\n")
460
+ chars[i] = " ";
461
+ }
462
+ }
463
+ return chars.join("");
464
+ };
465
+ const skipSpaces = (source, index) => {
466
+ let i = index;
467
+ while (i < source.length && (source[i] === " " || source[i] === "\n" || source[i] === "\t"))
468
+ i++;
469
+ return i;
470
+ };
471
+ const lineStart = (source, index) => {
472
+ const start = source.lastIndexOf("\n", index - 1);
473
+ return start < 0 ? 0 : start + 1;
474
+ };
475
+ const lineEnd = (source, index) => {
476
+ const end = source.indexOf("\n", index);
477
+ return end < 0 ? source.length : end + 1;
478
+ };
479
+ const applyEdits = (source, edits) => {
480
+ const ordered = [...edits].sort((a, b) => b.start - a.start);
481
+ let next = source;
482
+ for (const edit of ordered)
483
+ next = next.slice(0, edit.start) + edit.text + next.slice(edit.end);
484
+ return next;
485
+ };
486
+ const insertImports = (source, needed) => {
487
+ const lines = [];
488
+ for (const [from, names] of needed) {
489
+ for (const name of names) {
490
+ if (hasImport(source, name, from))
491
+ continue;
492
+ lines.push(namedImportNames.has(name)
493
+ ? `import { ${name} } from "${from}"`
494
+ : `import * as ${name} from "${from}"`);
495
+ }
496
+ }
497
+ if (lines.length === 0)
498
+ return source.replace(/^\n+/, "");
499
+ const lastImport = lastImportEnd(source);
500
+ const block = `${lines.sort().join("\n")}\n`;
501
+ if (lastImport === 0)
502
+ return `${block}${source.replace(/^\n+/, "")}`;
503
+ return `${source.slice(0, lastImport)}${block}${source.slice(lastImport)}`.replace(/^\n+/, "");
504
+ };
505
+ const namedImportNames = new Set(["absurd", "Date", "pipeZonedLocal"]);
506
+ const hasImport = (source, name, from) => {
507
+ const fromPattern = from.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
508
+ const namespace = new RegExp(`import\\s+\\*\\s+as\\s+${name}\\s+from\\s+["']${fromPattern}["']`);
509
+ const named = new RegExp(`import\\s+(type\\s+)?\\{[^}]*\\b${name}\\b[^}]*}\\s+from\\s+["']${fromPattern}["']`);
510
+ const barrel = name === name[0]?.toUpperCase()
511
+ ? new RegExp(`import\\s+(type\\s+)?\\{[^}]*\\b${name}\\b[^}]*}\\s+from\\s+["']effect["']`)
512
+ : undefined;
513
+ return namespace.test(source) || named.test(source) || barrel?.test(source) === true;
514
+ };
515
+ const lastImportEnd = (source) => {
516
+ const pattern = /\bimport\s+(type\s+)?[\s\S]*?\s+from\s+["'][^"']+["']/g;
517
+ let end = 0;
518
+ for (const match of source.matchAll(pattern)) {
519
+ end = lineEnd(source, (match.index ?? 0) + match[0].length);
520
+ }
521
+ return end;
522
+ };
523
+ const maskNonCode = (source) => {
524
+ const chars = [...source];
525
+ let i = 0;
526
+ const blank = (from, to) => {
527
+ for (let j = from; j < to; j++) {
528
+ if (chars[j] !== "\n")
529
+ chars[j] = " ";
530
+ }
531
+ };
532
+ while (i < source.length) {
533
+ const two = source.slice(i, i + 2);
534
+ if (two === "//") {
535
+ const end = source.indexOf("\n", i);
536
+ blank(i, end < 0 ? source.length : end);
537
+ i = end < 0 ? source.length : end;
538
+ continue;
539
+ }
540
+ if (two === "/*") {
541
+ const end = source.indexOf("*/", i + 2);
542
+ const stop = end < 0 ? source.length : end + 2;
543
+ blank(i, stop);
544
+ i = stop;
545
+ continue;
546
+ }
547
+ const char = source[i];
548
+ if (char === "'" || char === "\"") {
549
+ const stop = scanQuoted(source, i, char);
550
+ blank(i, stop);
551
+ i = stop;
552
+ continue;
553
+ }
554
+ if (char === "`") {
555
+ const stop = scanTemplate(source, i);
556
+ blank(i, stop);
557
+ i = stop;
558
+ continue;
559
+ }
560
+ i++;
561
+ }
562
+ return chars.join("");
563
+ };
564
+ const scanQuoted = (source, start, quote) => {
565
+ for (let i = start + 1; i < source.length; i++) {
566
+ if (source[i] === "\\") {
567
+ i++;
568
+ continue;
569
+ }
570
+ if (source[i] === quote)
571
+ return i + 1;
572
+ }
573
+ return source.length;
574
+ };
575
+ const scanTemplate = (source, start) => {
576
+ for (let i = start + 1; i < source.length; i++) {
577
+ if (source[i] === "\\") {
578
+ i++;
579
+ continue;
580
+ }
581
+ if (source[i] === "`")
582
+ return i + 1;
583
+ if (source.slice(i, i + 2) === "${") {
584
+ let depth = 1;
585
+ i += 2;
586
+ while (i < source.length && depth > 0) {
587
+ if (source[i] === "{")
588
+ depth++;
589
+ else if (source[i] === "}")
590
+ depth--;
591
+ i++;
592
+ }
593
+ i--;
594
+ }
595
+ }
596
+ return source.length;
597
+ };
598
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF0aXZlRWZmZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21pZ3JhdGlvbi9uYXRpdmVFZmZlY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBYUgsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxlQUFlLENBQUMsQ0FBVSxDQUFBO0FBQ3JELE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsZUFBZSxDQUFDLENBQVUsQ0FBQTtBQUNyRCxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLGVBQWUsQ0FBQyxDQUFVLENBQUE7QUFDbEQsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxlQUFlLENBQUMsQ0FBVSxDQUFBO0FBQ3JELE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsY0FBYyxDQUFDLENBQVUsQ0FBQTtBQUNsRCxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLGNBQWMsQ0FBQyxDQUFVLENBQUE7QUFDbEQsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxjQUFjLENBQUMsQ0FBVSxDQUFBO0FBQ2xELE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsZUFBZSxDQUFDLENBQVUsQ0FBQTtBQUNyRCxNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUMsVUFBVSxFQUFFLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxxQkFBcUIsQ0FBQyxDQUFVLENBQUE7QUFDdEcsTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxpQkFBaUIsQ0FBQyxDQUFVLENBQUE7QUFDM0QsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxlQUFlLENBQUMsQ0FBVSxDQUFBO0FBQ3JELE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsaUJBQWlCLENB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