@c9up/ream 0.2.28 → 0.2.29

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 (168) hide show
  1. package/dist/Codemods.d.ts +16 -0
  2. package/dist/Codemods.d.ts.map +1 -1
  3. package/dist/Codemods.js +182 -0
  4. package/dist/Codemods.js.map +1 -1
  5. package/dist/Ignitor.d.ts +10 -2
  6. package/dist/Ignitor.d.ts.map +1 -1
  7. package/dist/Ignitor.js +21 -22
  8. package/dist/Ignitor.js.map +1 -1
  9. package/dist/bodyparser/BodyParserMiddleware.d.ts.map +1 -1
  10. package/dist/bodyparser/BodyParserMiddleware.js +3 -0
  11. package/dist/bodyparser/BodyParserMiddleware.js.map +1 -1
  12. package/dist/bodyparser/qsParse.d.ts +10 -1
  13. package/dist/bodyparser/qsParse.d.ts.map +1 -1
  14. package/dist/bodyparser/qsParse.js +53 -15
  15. package/dist/bodyparser/qsParse.js.map +1 -1
  16. package/dist/codemods/source.d.ts +57 -0
  17. package/dist/codemods/source.d.ts.map +1 -0
  18. package/dist/codemods/source.js +282 -0
  19. package/dist/codemods/source.js.map +1 -0
  20. package/dist/graphql/GraphQLEngine.d.ts.map +1 -1
  21. package/dist/graphql/GraphQLEngine.js +3 -2
  22. package/dist/graphql/GraphQLEngine.js.map +1 -1
  23. package/dist/http/Exception.d.ts +14 -1
  24. package/dist/http/Exception.d.ts.map +1 -1
  25. package/dist/http/Exception.js +10 -2
  26. package/dist/http/Exception.js.map +1 -1
  27. package/dist/http/HttpContext.d.ts +11 -0
  28. package/dist/http/HttpContext.d.ts.map +1 -1
  29. package/dist/http/HttpContext.js +2 -1
  30. package/dist/http/HttpContext.js.map +1 -1
  31. package/dist/http/RedirectBuilder.d.ts +9 -3
  32. package/dist/http/RedirectBuilder.d.ts.map +1 -1
  33. package/dist/http/RedirectBuilder.js +39 -37
  34. package/dist/http/RedirectBuilder.js.map +1 -1
  35. package/dist/http/Request.d.ts +42 -17
  36. package/dist/http/Request.d.ts.map +1 -1
  37. package/dist/http/Request.js +65 -29
  38. package/dist/http/Request.js.map +1 -1
  39. package/dist/http/SseStream.js +6 -7
  40. package/dist/http/SseStream.js.map +1 -1
  41. package/dist/http/permissions.d.ts +19 -0
  42. package/dist/http/permissions.d.ts.map +1 -0
  43. package/dist/http/permissions.js +28 -0
  44. package/dist/http/permissions.js.map +1 -0
  45. package/dist/http-client/HttpClient.d.ts +111 -0
  46. package/dist/http-client/HttpClient.d.ts.map +1 -0
  47. package/dist/http-client/HttpClient.js +386 -0
  48. package/dist/http-client/HttpClient.js.map +1 -0
  49. package/dist/http-client/addresses.d.ts +14 -0
  50. package/dist/http-client/addresses.d.ts.map +1 -0
  51. package/dist/http-client/addresses.js +57 -0
  52. package/dist/http-client/addresses.js.map +1 -0
  53. package/dist/http-client/fake.d.ts +50 -0
  54. package/dist/http-client/fake.d.ts.map +1 -0
  55. package/dist/http-client/fake.js +95 -0
  56. package/dist/http-client/fake.js.map +1 -0
  57. package/dist/http-client/index.d.ts +7 -0
  58. package/dist/http-client/index.d.ts.map +1 -0
  59. package/dist/http-client/index.js +7 -0
  60. package/dist/http-client/index.js.map +1 -0
  61. package/dist/index.d.ts +4 -3
  62. package/dist/index.d.ts.map +1 -1
  63. package/dist/index.js +1 -1
  64. package/dist/index.js.map +1 -1
  65. package/dist/middleware/Pipeline.d.ts.map +1 -1
  66. package/dist/middleware/Pipeline.js +6 -3
  67. package/dist/middleware/Pipeline.js.map +1 -1
  68. package/dist/native/generated.d.ts +78 -7
  69. package/dist/native/generated.d.ts.map +1 -1
  70. package/dist/rpc/RpcProvider.d.ts +6 -0
  71. package/dist/rpc/RpcProvider.d.ts.map +1 -1
  72. package/dist/rpc/RpcProvider.js +4 -1
  73. package/dist/rpc/RpcProvider.js.map +1 -1
  74. package/dist/rpc/RpcRouter.d.ts +27 -14
  75. package/dist/rpc/RpcRouter.d.ts.map +1 -1
  76. package/dist/rpc/RpcRouter.js +95 -38
  77. package/dist/rpc/RpcRouter.js.map +1 -1
  78. package/dist/scheduler/locks/RedisLockBackend.d.ts.map +1 -1
  79. package/dist/scheduler/locks/RedisLockBackend.js +13 -2
  80. package/dist/scheduler/locks/RedisLockBackend.js.map +1 -1
  81. package/dist/security/CookieSigner.d.ts.map +1 -1
  82. package/dist/security/CookieSigner.js +17 -3
  83. package/dist/security/CookieSigner.js.map +1 -1
  84. package/dist/security/SignedUrl.d.ts.map +1 -1
  85. package/dist/security/SignedUrl.js +6 -1
  86. package/dist/security/SignedUrl.js.map +1 -1
  87. package/dist/server/Server.d.ts +41 -12
  88. package/dist/server/Server.d.ts.map +1 -1
  89. package/dist/server/Server.js +31 -10
  90. package/dist/server/Server.js.map +1 -1
  91. package/dist/server/nativeGrpc.d.ts +27 -0
  92. package/dist/server/nativeGrpc.d.ts.map +1 -0
  93. package/dist/server/nativeGrpc.js +47 -0
  94. package/dist/server/nativeGrpc.js.map +1 -0
  95. package/dist/server/nativeLimits.d.ts +49 -0
  96. package/dist/server/nativeLimits.d.ts.map +1 -0
  97. package/dist/server/nativeLimits.js +67 -0
  98. package/dist/server/nativeLimits.js.map +1 -0
  99. package/dist/session/Session.d.ts +12 -0
  100. package/dist/session/Session.d.ts.map +1 -1
  101. package/dist/session/Session.js.map +1 -1
  102. package/dist/session/SessionMiddleware.d.ts.map +1 -1
  103. package/dist/session/SessionMiddleware.js +28 -9
  104. package/dist/session/SessionMiddleware.js.map +1 -1
  105. package/dist/session/config.d.ts +5 -0
  106. package/dist/session/config.d.ts.map +1 -1
  107. package/dist/session/config.js +8 -0
  108. package/dist/session/config.js.map +1 -1
  109. package/dist/session/drivers/MemoryDriver.d.ts.map +1 -1
  110. package/dist/session/drivers/MemoryDriver.js +12 -5
  111. package/dist/session/drivers/MemoryDriver.js.map +1 -1
  112. package/dist/session/errors.d.ts +17 -0
  113. package/dist/session/errors.d.ts.map +1 -1
  114. package/dist/session/errors.js +21 -0
  115. package/dist/session/errors.js.map +1 -1
  116. package/dist/session/templateTags.d.ts +14 -0
  117. package/dist/session/templateTags.d.ts.map +1 -1
  118. package/dist/session/templateTags.js +45 -17
  119. package/dist/session/templateTags.js.map +1 -1
  120. package/dist/storage/StaticMiddleware.d.ts.map +1 -1
  121. package/dist/storage/StaticMiddleware.js +29 -18
  122. package/dist/storage/StaticMiddleware.js.map +1 -1
  123. package/events.darwin-arm64.node +0 -0
  124. package/events.darwin-x64.node +0 -0
  125. package/events.win32-x64-msvc.node +0 -0
  126. package/index.darwin-arm64.node +0 -0
  127. package/index.darwin-x64.node +0 -0
  128. package/index.linux-arm64-gnu.node +0 -0
  129. package/index.linux-x64-gnu.node +0 -0
  130. package/index.win32-x64-msvc.node +0 -0
  131. package/package.json +11 -2
  132. package/scheduler.darwin-arm64.node +0 -0
  133. package/scheduler.darwin-x64.node +0 -0
  134. package/scheduler.win32-x64-msvc.node +0 -0
  135. package/src/Codemods.ts +265 -0
  136. package/src/Ignitor.ts +37 -22
  137. package/src/bodyparser/BodyParserMiddleware.ts +3 -0
  138. package/src/bodyparser/qsParse.ts +69 -14
  139. package/src/codemods/source.ts +303 -0
  140. package/src/graphql/GraphQLEngine.ts +3 -2
  141. package/src/http/Exception.ts +17 -2
  142. package/src/http/HttpContext.ts +14 -1
  143. package/src/http/RedirectBuilder.ts +48 -37
  144. package/src/http/Request.ts +87 -29
  145. package/src/http/SseStream.ts +6 -7
  146. package/src/http/permissions.ts +31 -0
  147. package/src/http-client/HttpClient.ts +505 -0
  148. package/src/http-client/addresses.ts +58 -0
  149. package/src/http-client/fake.ts +141 -0
  150. package/src/http-client/index.ts +21 -0
  151. package/src/index.ts +5 -1
  152. package/src/middleware/Pipeline.ts +7 -3
  153. package/src/native/generated.ts +89 -7
  154. package/src/rpc/RpcProvider.ts +10 -1
  155. package/src/rpc/RpcRouter.ts +126 -42
  156. package/src/scheduler/locks/RedisLockBackend.ts +12 -4
  157. package/src/security/CookieSigner.ts +17 -3
  158. package/src/security/SignedUrl.ts +6 -1
  159. package/src/server/Server.ts +57 -12
  160. package/src/server/nativeGrpc.ts +59 -0
  161. package/src/server/nativeLimits.ts +94 -0
  162. package/src/session/Session.ts +16 -0
  163. package/src/session/SessionMiddleware.ts +30 -10
  164. package/src/session/config.ts +7 -0
  165. package/src/session/drivers/MemoryDriver.ts +11 -5
  166. package/src/session/errors.ts +31 -0
  167. package/src/session/templateTags.ts +57 -0
  168. package/src/storage/StaticMiddleware.ts +28 -18
@@ -39,4 +39,18 @@ export interface TemplateTagEngine {
39
39
  * no store in scope and every tag renders nothing, rather than throwing.
40
40
  */
41
41
  export declare function registerSessionTemplateTags(engine: TemplateTagEngine): void;
42
+ /** Loads the template engine package. Swappable so a test needs no engine. */
43
+ export type EnginePackageLoader = () => Promise<unknown>;
44
+ /**
45
+ * Publish the session tags into the template engine, the way AdonisJS's
46
+ * session does with Edge: through the engine package's MODULE SINGLETON
47
+ * (`inker.use(plugin)`), guarded by the host's `usingInker` flag — never by
48
+ * resolving a container binding. `use()` queues the plugin, and the engine
49
+ * runs it before its next render, whenever the engine was built.
50
+ *
51
+ * Returns whether the tags were handed over. A registrar or an engine of the
52
+ * wrong shape is an error, not a skip: a template using `@flashMessage`
53
+ * would otherwise render it as plain text with no warning.
54
+ */
55
+ export declare function installSessionTemplateTags(usingInker: boolean, load?: EnginePackageLoader): Promise<boolean>;
42
56
  //# sourceMappingURL=templateTags.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"templateTags.d.ts","sourceRoot":"","sources":["../../src/session/templateTags.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,+DAA+D;AAC/D,MAAM,WAAW,iBAAiB;IAChC,WAAW,CAAC,GAAG,EAAE;QACf,OAAO,EAAE,MAAM,CAAA;QACf,KAAK,EAAE,OAAO,CAAA;QACd,QAAQ,EAAE,OAAO,CAAA;QACjB,OAAO,CACL,MAAM,EAAE,OAAO,EACf,MAAM,EAAE;YAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;SAAE,EACxC,KAAK,EAAE;YACL,UAAU,EAAE;gBAAE,KAAK,EAAE,MAAM,CAAA;aAAE,CAAA;YAC7B,UAAU,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;YAChF,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAA;SACtC,GACA,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;KACxB,GAAG,IAAI,CAAA;CACT;AAiBD;;;;;GAKG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAkE3E"}
1
+ {"version":3,"file":"templateTags.d.ts","sourceRoot":"","sources":["../../src/session/templateTags.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;GAgBG;AAEH,+DAA+D;AAC/D,MAAM,WAAW,iBAAiB;IAChC,WAAW,CAAC,GAAG,EAAE;QACf,OAAO,EAAE,MAAM,CAAA;QACf,KAAK,EAAE,OAAO,CAAA;QACd,QAAQ,EAAE,OAAO,CAAA;QACjB,OAAO,CACL,MAAM,EAAE,OAAO,EACf,MAAM,EAAE;YAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;SAAE,EACxC,KAAK,EAAE;YACL,UAAU,EAAE;gBAAE,KAAK,EAAE,MAAM,CAAA;aAAE,CAAA;YAC7B,UAAU,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;YAChF,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAA;SACtC,GACA,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;KACxB,GAAG,IAAI,CAAA;CACT;AAiBD;;;;;GAKG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAkE3E;AAED,8EAA8E;AAC9E,MAAM,MAAM,mBAAmB,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;AAqBxD;;;;;;;;;;GAUG;AACH,wBAAsB,0BAA0B,CAC9C,UAAU,EAAE,OAAO,EACnB,IAAI,GAAE,mBAA+B,GACpC,OAAO,CAAC,OAAO,CAAC,CAiBlB"}
@@ -1,20 +1,4 @@
1
- /**
2
- * The flash-message tags AdonisJS's session publishes to templates.
3
- *
4
- * A migrated template keeps writing:
5
- *
6
- * @error('email')<p>{{ $message }}</p>@enderror
7
- * @errors<ul>@each(m in $messages)<li>{{ m }}</li>@endeach</ul>@enderrors
8
- * @inputError('email')@each(m in $messages)<i>{{ m }}</i>@endeach@endinputError
9
- * @flashMessage('notice')<p>{{ $message }}</p>@endflashMessage
10
- *
11
- * Each renders its body only when the message exists, and binds it under the
12
- * name upstream uses (`$message` / `$messages`) — bound into the BODY's scope,
13
- * so it does not leak past the tag.
14
- *
15
- * The values come from the `flashMessages` store the session middleware shares
16
- * into `ctx.view`; the tag reads it out of the render scope.
17
- */
1
+ import { ReamError } from '../errors/ReamError.js';
18
2
  function isFlashStore(value) {
19
3
  return (typeof value === 'object' &&
20
4
  value !== null &&
@@ -98,4 +82,48 @@ export function registerSessionTemplateTags(engine) {
98
82
  },
99
83
  });
100
84
  }
85
+ const loadInker = () => {
86
+ // Built rather than written inline: inker is an OPTIONAL peer, and a literal
87
+ // `import('@c9up/inker')` makes a bundler resolve it at build time for an
88
+ // application that never installed it. Computed, it only runs behind the
89
+ // `usingInker` flag.
90
+ const specifier = '@c9up/inker';
91
+ return import(/* @vite-ignore */ specifier);
92
+ };
93
+ function unusable(detail) {
94
+ return new ReamError('E_SESSION_TEMPLATE_ENGINE_UNUSABLE', `The template engine is installed but the session tags cannot be registered: ${detail}`, {
95
+ hint: '`@c9up/inker` must default-export its plugin registrar (`inker.use(plugin)`), whose plugins receive an engine with `registerTag()`.',
96
+ });
97
+ }
98
+ /**
99
+ * Publish the session tags into the template engine, the way AdonisJS's
100
+ * session does with Edge: through the engine package's MODULE SINGLETON
101
+ * (`inker.use(plugin)`), guarded by the host's `usingInker` flag — never by
102
+ * resolving a container binding. `use()` queues the plugin, and the engine
103
+ * runs it before its next render, whenever the engine was built.
104
+ *
105
+ * Returns whether the tags were handed over. A registrar or an engine of the
106
+ * wrong shape is an error, not a skip: a template using `@flashMessage`
107
+ * would otherwise render it as plain text with no warning.
108
+ */
109
+ export async function installSessionTemplateTags(usingInker, load = loadInker) {
110
+ if (!usingInker)
111
+ return false;
112
+ const module = await load();
113
+ const registrar = typeof module === 'object' && module !== null ? Reflect.get(module, 'default') : undefined;
114
+ const use = Reflect.get(Object(registrar), 'use');
115
+ if (typeof use !== 'function')
116
+ throw unusable('its default export has no use()');
117
+ use.call(registrar, (engine) => {
118
+ const register = Reflect.get(Object(engine), 'registerTag');
119
+ if (typeof register !== 'function')
120
+ throw unusable('the engine has no registerTag()');
121
+ registerSessionTemplateTags({
122
+ registerTag: (tag) => {
123
+ register.call(engine, tag);
124
+ },
125
+ });
126
+ });
127
+ return true;
128
+ }
101
129
  //# sourceMappingURL=templateTags.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"templateTags.js","sourceRoot":"","sources":["../../src/session/templateTags.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AA0BH,SAAS,YAAY,CAAC,KAAc;IAClC,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,UAAU;QAC/C,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,UAAU,CAChD,CAAA;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,2BAA2B,CAAC,MAAyB;IACnE,wDAAwD;IACxD,MAAM,OAAO,GAAG,CAAC,QAAmC,EAA0B,EAAE;QAC9E,MAAM,KAAK,GAAG,QAAQ,CAAC,kEAAkE,CAAC,CAAA;QAC1F,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAA;IAChD,CAAC,CAAA;IAED,MAAM,CAAC,WAAW,CAAC;QACjB,OAAO,EAAE,cAAc;QACvB,KAAK,EAAE,IAAI;QACX,QAAQ,EAAE,IAAI;QACd,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK;YAClC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;YACrC,IAAI,KAAK,KAAK,SAAS;gBAAE,OAAM;YAC/B,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA;YAClD,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,OAAM;YACtD,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;QACvE,CAAC;KACF,CAAC,CAAA;IAEF,MAAM,CAAC,WAAW,CAAC;QACjB,OAAO,EAAE,OAAO;QAChB,KAAK,EAAE,IAAI;QACX,QAAQ,EAAE,IAAI;QACd,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK;YAClC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;YACrC,IAAI,KAAK,KAAK,SAAS;gBAAE,OAAM;YAC/B,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA;YACpD,IAAI,OAAO,KAAK,KAAK,QAAQ;gBAAE,OAAM;YACrC,MAAM,IAAI,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,CAAA;YACjC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,OAAM;YAC5B,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;QACxE,CAAC;KACF,CAAC,CAAA;IAEF,MAAM,CAAC,WAAW,CAAC;QACjB,OAAO,EAAE,QAAQ;QACjB,KAAK,EAAE,IAAI;QACX,gEAAgE;QAChE,QAAQ,EAAE,KAAK;QACf,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK;YAClC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;YACrC,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC;gBAAE,OAAM;YAC1D,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAA;QAChF,CAAC;KACF,CAAC,CAAA;IAEF,MAAM,CAAC,WAAW,CAAC;QACjB,OAAO,EAAE,YAAY;QACrB,KAAK,EAAE,IAAI;QACX,QAAQ,EAAE,IAAI;QACd,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK;YAClC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;YACrC,IAAI,KAAK,KAAK,SAAS;gBAAE,OAAM;YAC/B,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA;YACpD,IAAI,OAAO,KAAK,KAAK,QAAQ;gBAAE,OAAM;YACrC,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAA;YAC3C,MAAM,QAAQ,GACZ,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC;gBAClE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC;gBACzB,CAAC,CAAC,SAAS,CAAA;YACf,kEAAkE;YAClE,IAAI,CAAC,QAAQ;gBAAE,OAAM;YACrB,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAA;QAClE,CAAC;KACF,CAAC,CAAA;AACJ,CAAC"}
1
+ {"version":3,"file":"templateTags.js","sourceRoot":"","sources":["../../src/session/templateTags.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"StaticMiddleware.d.ts","sourceRoot":"","sources":["../../src/storage/StaticMiddleware.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAA;AAK7B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAGzD,qEAAqE;AACrE,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAA;AAExD,MAAM,WAAW,YAAY;IAC3B,0CAA0C;IAC1C,IAAI,EAAE,MAAM,CAAA;IAEZ,8EAA8E;IAC9E,OAAO,CAAC,EAAE,OAAO,CAAA;IAEjB;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAA;IAEtB;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAA;IAEtB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,cAAc,CAAA;IAEzB,8DAA8D;IAC9D,IAAI,CAAC,EAAE,OAAO,CAAA;IAEd;;;;;;;;;OASG;IACH,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,KAAK,CAAA;IAE7B,2EAA2E;IAC3E,SAAS,CAAC,EAAE,OAAO,CAAA;IAEnB,oFAAoF;IACpF,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,KAAK,CAAA;IAEjC,2EAA2E;IAC3E,YAAY,CAAC,EAAE,OAAO,CAAA;IAEtB,0EAA0E;IAC1E,MAAM,CAAC,EAAE,MAAM,CAAA;IAEf,wEAAwE;IACxE,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,KAAK,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAEtE;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAQD,qBAAa,gBAAgB;;gBAef,MAAM,EAAE,YAAY;IAqB1B,MAAM,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;CA0RzE;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,GAAE,OAAO,CAAC,YAAY,CAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAE5F"}
1
+ {"version":3,"file":"StaticMiddleware.d.ts","sourceRoot":"","sources":["../../src/storage/StaticMiddleware.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAA;AAK7B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAGzD,qEAAqE;AACrE,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAA;AAExD,MAAM,WAAW,YAAY;IAC3B,0CAA0C;IAC1C,IAAI,EAAE,MAAM,CAAA;IAEZ,8EAA8E;IAC9E,OAAO,CAAC,EAAE,OAAO,CAAA;IAEjB;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAA;IAEtB;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAA;IAEtB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,cAAc,CAAA;IAEzB,8DAA8D;IAC9D,IAAI,CAAC,EAAE,OAAO,CAAA;IAEd;;;;;;;;;OASG;IACH,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,KAAK,CAAA;IAE7B,2EAA2E;IAC3E,SAAS,CAAC,EAAE,OAAO,CAAA;IAEnB,oFAAoF;IACpF,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,KAAK,CAAA;IAEjC,2EAA2E;IAC3E,YAAY,CAAC,EAAE,OAAO,CAAA;IAEtB,0EAA0E;IAC1E,MAAM,CAAC,EAAE,MAAM,CAAA;IAEf,wEAAwE;IACxE,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,KAAK,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAEtE;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAQD,qBAAa,gBAAgB;;gBAef,MAAM,EAAE,YAAY;IAqB1B,MAAM,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;CA2RzE;AAWD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,GAAE,OAAO,CAAC,YAAY,CAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAE5F"}
@@ -67,8 +67,11 @@ export class StaticMiddleware {
67
67
  return next();
68
68
  const reqPath = ctx.request.path();
69
69
  // A dotfile under `deny` is answered, not passed on: falling through would
70
- // leak its existence through whatever the router answers next.
71
- if (this.#dotFiles === 'deny' && this.#hasDotSegment(reqPath)) {
70
+ // leak its existence through whatever the router answers next. The check
71
+ // runs on the DECODED path — the name that would be opened — or `/%2eenv`
72
+ // reaches `.env`. A path that does not decode is checked raw; it is never
73
+ // served anyway.
74
+ if (this.#dotFiles === 'deny' && this.#hasDotSegment(decodePath(reqPath) ?? reqPath)) {
72
75
  ctx.response.status(403).send('Forbidden');
73
76
  return;
74
77
  }
@@ -241,27 +244,23 @@ export class StaticMiddleware {
241
244
  return null;
242
245
  reqPath = reqPath.slice(this.#prefix.length) || '/';
243
246
  }
244
- if (this.#dotFiles === 'ignore' && this.#hasDotSegment(reqPath))
247
+ // Percent-decoding happens BEFORE any check and BEFORE resolution on
248
+ // purpose: the dot-file policy has to see the name that will be opened
249
+ // (`%2eenv` is `.env`), and `%2e%2e%2f` is `../`, which has to be
250
+ // normalised away by `path.resolve` like any other traversal, not carried
251
+ // through as an opaque segment. A malformed sequence (a lone `%`) is not
252
+ // servable.
253
+ const decoded = decodePath(reqPath);
254
+ if (decoded === null)
245
255
  return null;
246
- // The candidates, in upstream's order: the path itself, then the path with
247
- // each fallback extension, then the index files for a directory request.
248
- //
249
- // Percent-decoding happens BEFORE resolution on purpose: `%2e%2e%2f` is
250
- // `../` and has to be normalised away by `path.resolve` like any other
251
- // traversal, not carried through as an opaque segment. `decodeURIComponent`
252
- // THROWS on a malformed sequence (a lone `%`), which would otherwise become
253
- // a 500 on a request anyone can send.
254
- let decoded;
255
- try {
256
- decoded = decodeURIComponent(reqPath);
257
- }
258
- catch {
259
- return null;
260
- }
261
256
  // A NUL truncates the path in the syscall layer of some runtimes; Node
262
257
  // rejects it, but refusing here keeps the decision in one place.
263
258
  if (decoded.includes('\0'))
264
259
  return null;
260
+ if (this.#dotFiles !== 'allow' && this.#hasDotSegment(decoded))
261
+ return null;
262
+ // The candidates, in upstream's order: the path itself, then the path with
263
+ // each fallback extension, then the index files for a directory request.
265
264
  const relative = decoded.replace(/^\/+/, '');
266
265
  const candidates = [];
267
266
  if (relative !== '') {
@@ -274,6 +273,9 @@ export class StaticMiddleware {
274
273
  candidates.push(relative === '' ? index : `${relative}/${index}`);
275
274
  }
276
275
  for (const candidate of candidates) {
276
+ // A configured index or extension can itself name a dot file.
277
+ if (this.#dotFiles !== 'allow' && this.#hasDotSegment(candidate))
278
+ continue;
277
279
  const opened = await this.#openInRoot(candidate);
278
280
  if (opened)
279
281
  return opened;
@@ -331,6 +333,15 @@ export class StaticMiddleware {
331
333
  }
332
334
  }
333
335
  }
336
+ /** `decodeURIComponent` that answers `null` instead of throwing on a malformed sequence. */
337
+ function decodePath(reqPath) {
338
+ try {
339
+ return decodeURIComponent(reqPath);
340
+ }
341
+ catch {
342
+ return null;
343
+ }
344
+ }
334
345
  /**
335
346
  * Static config with the defaults filled in — `@adonisjs/static`'s
336
347
  * `defineConfig`, value for value.
@@ -1 +1 @@
1
- {"version":3,"file":"StaticMiddleware.js","sourceRoot":"","sources":["../../src/storage/StaticMiddleware.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"StaticMiddleware.js","sourceRoot":"","sources":["../../src/storage/StaticMiddleware.ts"],"names":[],"mappings":"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"}
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@c9up/ream",
3
- "version": "0.2.28",
3
+ "version": "0.2.29",
4
4
  "description": "Ream — Rust-powered Node.js application framework",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -119,6 +119,10 @@
119
119
  "types": "./dist/testing/TestClient.d.ts",
120
120
  "import": "./dist/testing/TestClient.js"
121
121
  },
122
+ "./http-client": {
123
+ "types": "./dist/http-client/index.d.ts",
124
+ "import": "./dist/http-client/index.js"
125
+ },
122
126
  "./testing/utils": {
123
127
  "types": "./dist/testing/testUtils.d.ts",
124
128
  "import": "./dist/testing/testUtils.js"
@@ -233,18 +237,22 @@
233
237
  "tsconfig.client.json"
234
238
  ],
235
239
  "dependencies": {
236
- "@c9up/lumen": "^0.1.0",
240
+ "@c9up/lumen": "^0.1.2",
237
241
  "file-type": "^22.0.2",
238
242
  "reflect-metadata": "^0.2.2"
239
243
  },
240
244
  "peerDependencies": {
241
245
  "@c9up/comet": "^0.1.0",
246
+ "@c9up/inker": "^0.1.20",
242
247
  "@c9up/quasar": "^0.1.0 || ^0.2.0"
243
248
  },
244
249
  "peerDependenciesMeta": {
245
250
  "@c9up/comet": {
246
251
  "optional": true
247
252
  },
253
+ "@c9up/inker": {
254
+ "optional": true
255
+ },
248
256
  "@c9up/quasar": {
249
257
  "optional": true
250
258
  }
@@ -252,6 +260,7 @@
252
260
  "devDependencies": {
253
261
  "@biomejs/biome": "2.5.12",
254
262
  "@c9up/comet": "^0.1.0",
263
+ "@c9up/inker": "^0.1.20",
255
264
  "@types/node": "^22.20.1",
256
265
  "@vitest/coverage-v8": "4.1.11",
257
266
  "mime-db": "^1.54.0",
Binary file
Binary file
Binary file
package/src/Codemods.ts CHANGED
@@ -1,9 +1,36 @@
1
1
  import * as fs from 'node:fs'
2
2
  import * as path from 'node:path'
3
+ import {
4
+ appendToLiteral,
5
+ findCall,
6
+ findExportDefaultObject,
7
+ isSingleExpression,
8
+ matchClose,
9
+ properties,
10
+ segments,
11
+ } from './codemods/source.js'
3
12
  import { render as renderTemplate, type StubState } from './stubs/template.js'
4
13
 
5
14
  export type { StubState }
6
15
 
16
+ /** The environments a preload (or provider) entry can be scoped to. */
17
+ export type PreloadEnvironment = 'web' | 'console' | 'test' | 'repl'
18
+
19
+ const PRELOAD_ENVIRONMENTS: readonly PreloadEnvironment[] = ['web', 'console', 'test', 'repl']
20
+
21
+ /** Validation rules a configure hook adds to `start/env.ts`. */
22
+ export interface EnvValidationNode {
23
+ /** Written once, as a banner comment above the rules this call adds. */
24
+ leadingComment?: string
25
+ /** Variable name → rule source, e.g. `{ REDIS_PORT: 'Env.schema.number()' }`. */
26
+ variables: Record<string, string>
27
+ /**
28
+ * Replace a rule the file already has. Off by default, so a rule the user
29
+ * edited survives a re-run; configure hooks pass their `--force` flag.
30
+ */
31
+ overwrite?: boolean
32
+ }
33
+
7
34
  export interface Codemods {
8
35
  addProvider(importPath: string): Promise<void>
9
36
  addMetaFile(pattern: string, reloadServer?: boolean): Promise<void>
@@ -17,6 +44,8 @@ export interface Codemods {
17
44
  ): Promise<GeneratedStub>
18
45
  registerCommand(importPath: string): Promise<void>
19
46
  registerMiddleware(importPath: string, options?: { tier?: 'server' | 'router' }): Promise<void>
47
+ defineEnvValidations(definition: EnvValidationNode): Promise<string[]>
48
+ addPreloadFile(modulePath: string, environments?: PreloadEnvironment[]): Promise<void>
20
49
  }
21
50
 
22
51
  /** What a stub may interpolate. Scalars only — a stub is text, not a program. */
@@ -128,6 +157,76 @@ function assertCanonicallyInside(root: string, filePath: string, displayName: st
128
157
  }
129
158
  }
130
159
 
160
+ const ENV_NAME = /^[A-Za-z_][A-Za-z0-9_]*$/
161
+
162
+ /**
163
+ * A module path goes between the quotes of an `import('...')`; anything that
164
+ * could close them, escape or end the line is refused rather than escaped.
165
+ */
166
+ const SAFE_MODULE_PATH = /^[^'"`\\\r\n\u2028\u2029]+$/
167
+
168
+ const BANNER_RULE = '|----------------------------------------------------------'
169
+
170
+ /** The rules of `definition`, refused before anything is written when unsafe. */
171
+ function assertEnvValidations(definition: EnvValidationNode): void {
172
+ const comment = definition.leadingComment
173
+ if (comment !== undefined && (/[\r\n\u2028\u2029]/.test(comment) || comment.includes('*/'))) {
174
+ throw new Error(
175
+ '[configure] defineEnvValidations: the leading comment must be one line without `*/`',
176
+ )
177
+ }
178
+ for (const [name, rule] of Object.entries(definition.variables)) {
179
+ if (!ENV_NAME.test(name)) {
180
+ throw new Error(
181
+ `[configure] defineEnvValidations: '${name}' is not an environment variable name`,
182
+ )
183
+ }
184
+ if (typeof rule !== 'string' || !isSingleExpression(rule)) {
185
+ throw new Error(
186
+ `[configure] defineEnvValidations: the rule for ${name} is not one complete expression: ${String(rule)}`,
187
+ )
188
+ }
189
+ }
190
+ }
191
+
192
+ /** The `{` and `}` of the schema object passed to `Env.create`. */
193
+ function locateEnvSchema(content: string): { open: number; close: number } {
194
+ const paren = findCall(content, 'Env.create')
195
+ const parenClose = paren === -1 ? -1 : matchClose(content, paren)
196
+ if (paren === -1 || parenClose === -1) {
197
+ throw new Error(
198
+ '[configure] Could not find an Env.create(...) call in start/env.ts — add the validations by hand.',
199
+ )
200
+ }
201
+ const open = segments(content, paren + 1, parenClose)[1]?.codeStart ?? -1
202
+ const close = content[open] === '{' ? matchClose(content, open) : -1
203
+ if (close === -1) {
204
+ throw new Error(
205
+ '[configure] The second argument of Env.create in start/env.ts is not an object literal — add the validations by hand.',
206
+ )
207
+ }
208
+ return { open, close }
209
+ }
210
+
211
+ /** The `{` and `}` of the object `reamrc.ts` exports (through `defineConfig` or bare). */
212
+ function locateRcObject(content: string): { open: number; close: number } | null {
213
+ const paren = findCall(content, 'defineConfig')
214
+ let open = -1
215
+ if (paren !== -1) {
216
+ const parenClose = matchClose(content, paren)
217
+ if (parenClose !== -1) open = segments(content, paren + 1, parenClose)[0]?.codeStart ?? -1
218
+ } else {
219
+ open = findExportDefaultObject(content)
220
+ }
221
+ const close = open !== -1 && content[open] === '{' ? matchClose(content, open) : -1
222
+ return close === -1 ? null : { open, close }
223
+ }
224
+
225
+ /** The module an rc array element lazily imports. */
226
+ function importedModule(element: string): string | undefined {
227
+ return /import\s*\(\s*(['"])([^'"]*)\1\s*\)/.exec(element)?.[2]
228
+ }
229
+
131
230
  export function createCodemods(options?: { force?: boolean; cwd?: string }): Codemods {
132
231
  const force = options?.force ?? false
133
232
  const root = path.resolve(options?.cwd ?? process.cwd())
@@ -516,5 +615,171 @@ export function createCodemods(options?: { force?: boolean; cwd?: string }): Cod
516
615
  content = `${content.slice(0, targetBlock.start)}${eol}${entry}${content.slice(targetBlock.start)}`
517
616
  fs.writeFileSync(kernelPath, content)
518
617
  },
618
+
619
+ /**
620
+ * Add validation rules to the schema `start/env.ts` passes to
621
+ * `Env.create`, so the variables a package writes to `.env` are checked
622
+ * at boot like the app's own.
623
+ *
624
+ * A rule already in the file is left alone, unless `overwrite` is set:
625
+ * the user may have tightened it. Returns the variables kept that way
626
+ * with a rule different from the one asked for, so the caller can say
627
+ * so. The banner comment is written only when the first new rule comes
628
+ * before any variable the file already had.
629
+ */
630
+ async defineEnvValidations(definition: EnvValidationNode): Promise<string[]> {
631
+ const envPath = path.join(root, 'start', 'env.ts')
632
+ if (!fs.existsSync(envPath)) {
633
+ throw new Error(
634
+ `[configure] start/env.ts not found — cannot add the validations for ${Object.keys(definition.variables).join(', ')}.`,
635
+ )
636
+ }
637
+ assertCanonicallyInside(root, envPath, 'start/env.ts')
638
+ assertEnvValidations(definition)
639
+
640
+ const original = fs.readFileSync(envPath, 'utf8')
641
+ const eol = detectLineEnding(original)
642
+ let content = original
643
+ const schema = locateEnvSchema(content)
644
+ const existing = new Map(
645
+ properties(content, schema.open, schema.close).map((property) => [property.key, property]),
646
+ )
647
+
648
+ const kept: string[] = []
649
+ const replacements: Array<{ start: number; end: number; text: string }> = []
650
+ const additions: Array<[string, string]> = []
651
+ let shouldAddComment = true
652
+ let decorate = false
653
+ for (const [name, rule] of Object.entries(definition.variables)) {
654
+ const property = existing.get(name)
655
+ if (property === undefined) {
656
+ if (additions.length === 0) decorate = shouldAddComment
657
+ shouldAddComment = false
658
+ additions.push([name, rule])
659
+ continue
660
+ }
661
+ shouldAddComment = false
662
+ const current = content.slice(property.valueStart, property.valueEnd)
663
+ if (definition.overwrite) {
664
+ replacements.push({ start: property.valueStart, end: property.valueEnd, text: rule })
665
+ } else if (current.replace(/\s+/g, '') !== rule.replace(/\s+/g, '')) {
666
+ kept.push(name)
667
+ }
668
+ }
669
+
670
+ for (const { start, end, text } of replacements.sort((a, b) => b.start - a.start)) {
671
+ content = `${content.slice(0, start)}${text}${content.slice(end)}`
672
+ }
673
+
674
+ if (additions.length > 0) {
675
+ const { open, close } = locateEnvSchema(content)
676
+ const comment = definition.leadingComment
677
+ content = appendToLiteral(
678
+ content,
679
+ open,
680
+ close,
681
+ eol,
682
+ (indent) => [
683
+ ...(decorate && comment !== undefined
684
+ ? [
685
+ `${indent}/*`,
686
+ `${indent}${BANNER_RULE}`,
687
+ `${indent}| ${comment}`,
688
+ `${indent}${BANNER_RULE}`,
689
+ `${indent}*/`,
690
+ ]
691
+ : []),
692
+ ...additions.map(([name, rule]) => `${indent}${name}: ${rule},`),
693
+ ],
694
+ decorate,
695
+ )
696
+ }
697
+
698
+ if (content !== original) fs.writeFileSync(envPath, content)
699
+ return kept
700
+ },
701
+
702
+ /**
703
+ * Register a preload file in `reamrc.ts`, appended to `preloads` (the
704
+ * array is created when absent). Listing only some environments writes
705
+ * a `{ file, environment }` entry; none, or all of them, a plain lazy
706
+ * import. A module already in `preloads` is left as it is.
707
+ */
708
+ async addPreloadFile(modulePath: string, environments?: PreloadEnvironment[]): Promise<void> {
709
+ if (!SAFE_MODULE_PATH.test(modulePath)) {
710
+ throw new Error(`[configure] Unsafe preload module path: ${JSON.stringify(modulePath)}`)
711
+ }
712
+ for (const environment of environments ?? []) {
713
+ if (!PRELOAD_ENVIRONMENTS.includes(environment)) {
714
+ throw new Error(
715
+ `[configure] Unknown environment '${String(environment)}' for preload ${modulePath}. Expected one of ${PRELOAD_ENVIRONMENTS.join(', ')}.`,
716
+ )
717
+ }
718
+ }
719
+
720
+ const rcPath = path.join(root, 'reamrc.ts')
721
+ if (!fs.existsSync(rcPath)) {
722
+ throw new Error(
723
+ `[configure] reamrc.ts not found — cannot register preload ${modulePath}. Run 'ream new' first.`,
724
+ )
725
+ }
726
+ assertCanonicallyInside(root, rcPath, 'reamrc.ts')
727
+
728
+ const content = fs.readFileSync(rcPath, 'utf8')
729
+ const eol = detectLineEnding(content)
730
+ const config = locateRcObject(content)
731
+ if (config === null) {
732
+ throw new Error(
733
+ `[configure] Could not find 'defineConfig({ ... })' in reamrc.ts — preload ${modulePath} not added.`,
734
+ )
735
+ }
736
+
737
+ // Scoped only when it actually leaves an environment out.
738
+ const scope = PRELOAD_ENVIRONMENTS.some(
739
+ (environment) => environments !== undefined && !environments.includes(environment),
740
+ )
741
+ ? environments
742
+ : undefined
743
+ const entry = (indent: string): string[] =>
744
+ scope
745
+ ? [
746
+ `${indent}{`,
747
+ `${indent} file: () => import('${modulePath}'),`,
748
+ `${indent} environment: [${scope.map((e) => `'${e}'`).join(', ')}],`,
749
+ `${indent}},`,
750
+ ]
751
+ : [`${indent}() => import('${modulePath}'),`]
752
+
753
+ const preloads = properties(content, config.open, config.close).find(
754
+ (property) => property.key === 'preloads',
755
+ )
756
+ if (preloads === undefined) {
757
+ fs.writeFileSync(
758
+ rcPath,
759
+ appendToLiteral(content, config.open, config.close, eol, (indent) => [
760
+ `${indent}preloads: [`,
761
+ ...entry(`${indent} `),
762
+ `${indent}],`,
763
+ ]),
764
+ )
765
+ return
766
+ }
767
+
768
+ const arrayClose =
769
+ content[preloads.valueStart] === '[' ? matchClose(content, preloads.valueStart) : -1
770
+ if (arrayClose === -1) {
771
+ throw new Error(
772
+ `[configure] reamrc.ts declares preloads as something other than an array literal — add ${modulePath} by hand.`,
773
+ )
774
+ }
775
+ const registered = segments(content, preloads.valueStart + 1, arrayClose).some(
776
+ (element) => importedModule(content.slice(element.codeStart, element.end)) === modulePath,
777
+ )
778
+ if (registered) return
779
+ fs.writeFileSync(
780
+ rcPath,
781
+ appendToLiteral(content, preloads.valueStart, arrayClose, eol, entry),
782
+ )
783
+ },
519
784
  }
520
785
  }