@primate/core 0.6.3 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (185) hide show
  1. package/lib/private/App.d.ts +76 -149
  2. package/lib/private/App.js +22 -6
  3. package/lib/private/Flags.d.ts +5 -3
  4. package/lib/private/Flags.js +4 -2
  5. package/lib/private/app/Facade.d.ts +77 -156
  6. package/lib/private/app/Facade.js +4 -1
  7. package/lib/private/build/App.d.ts +4 -2
  8. package/lib/private/build/App.js +13 -4
  9. package/lib/private/build/client/index.js +24 -10
  10. package/lib/private/build/client/plugin/routes.d.ts +4 -0
  11. package/lib/private/build/client/plugin/routes.js +74 -0
  12. package/lib/private/build/hook.js +14 -6
  13. package/lib/private/build/index.d.ts +3 -2
  14. package/lib/private/build/index.js +9 -15
  15. package/lib/private/build/preclient/index.d.ts +3 -0
  16. package/lib/private/build/preclient/index.js +69 -0
  17. package/lib/private/build/preclient/plugin/routes.d.ts +4 -0
  18. package/lib/private/build/preclient/plugin/routes.js +44 -0
  19. package/lib/private/build/server/index.js +8 -5
  20. package/lib/private/build/server/plugin/assets.js +3 -3
  21. package/lib/private/build/server/plugin/native-addons.js +6 -8
  22. package/lib/private/build/server/plugin/node-imports.js +5 -7
  23. package/lib/private/build/server/plugin/route-client.d.ts +4 -0
  24. package/lib/private/build/server/plugin/route-client.js +110 -0
  25. package/lib/private/build/server/plugin/route.js +3 -10
  26. package/lib/private/build/server/plugin/virtual-pages.js +3 -3
  27. package/lib/private/build/server/plugin/virtual-routes.d.ts +2 -1
  28. package/lib/private/build/server/plugin/virtual-routes.js +27 -8
  29. package/lib/private/build/server/plugin/wasm.js +3 -2
  30. package/lib/private/client/Data.d.ts +1 -1
  31. package/lib/private/client/boot.js +2 -2
  32. package/lib/private/client/create-form.d.ts +11 -1
  33. package/lib/private/client/create-form.js +21 -3
  34. package/lib/private/client/index.d.ts +2 -2
  35. package/lib/private/client/navigate.d.ts +1 -0
  36. package/lib/private/client/navigate.js +7 -6
  37. package/lib/private/client/submit.d.ts +2 -1
  38. package/lib/private/client/submit.js +8 -7
  39. package/lib/private/client/{http.d.ts → transport.d.ts} +3 -3
  40. package/lib/private/client/{http.js → transport.js} +7 -9
  41. package/lib/private/config/schema.d.ts +5 -13
  42. package/lib/private/config/schema.js +1 -5
  43. package/lib/private/db/DB.d.ts +3 -1
  44. package/lib/private/db/MemoryDB.d.ts +5 -2
  45. package/lib/private/db/MemoryDB.js +33 -19
  46. package/lib/private/db/SQLDB.d.ts +23 -0
  47. package/lib/private/db/SQLDB.js +2 -0
  48. package/lib/private/db/errors.d.ts +74 -7
  49. package/lib/private/db/errors.js +31 -7
  50. package/lib/private/db/migrate/apply.js +8 -9
  51. package/lib/private/db/migrate/bundle.js +2 -2
  52. package/lib/private/db/migrate/create.js +18 -20
  53. package/lib/private/db/migrate/status.js +9 -10
  54. package/lib/private/db/migrate/store.d.ts +3 -3
  55. package/lib/private/db/migrate/store.js +5 -5
  56. package/lib/private/db/test.js +256 -115
  57. package/lib/private/db/testSQL.d.ts +50 -0
  58. package/lib/private/db/testSQL.js +196 -0
  59. package/lib/private/errors.d.ts +66 -9
  60. package/lib/private/errors.js +37 -16
  61. package/lib/private/frontend.d.ts +4 -4
  62. package/lib/private/frontend.js +11 -8
  63. package/lib/private/i18n/errors.d.ts +7 -1
  64. package/lib/private/i18n/errors.js +1 -1
  65. package/lib/private/i18n/index/types.d.ts +1 -1
  66. package/lib/private/i18n/locale.d.ts +1 -1
  67. package/lib/private/i18n/module.js +6 -5
  68. package/lib/private/index.d.ts +10 -2
  69. package/lib/private/index.js +13 -1
  70. package/lib/private/logger.d.ts +24 -0
  71. package/lib/private/logger.js +66 -0
  72. package/lib/private/module/Setup.d.ts +3 -0
  73. package/lib/private/module/create.d.ts +2 -1
  74. package/lib/private/module/create.js +4 -0
  75. package/lib/private/paths.d.ts +2 -3
  76. package/lib/private/paths.js +6 -12
  77. package/lib/private/request/ContentType.d.ts +3 -0
  78. package/lib/private/request/ContentType.js +2 -0
  79. package/lib/private/request/RequestBag.d.ts +2 -18
  80. package/lib/private/request/RequestBag.js +4 -16
  81. package/lib/private/request/RequestBody.d.ts +20 -28
  82. package/lib/private/request/RequestBody.js +63 -86
  83. package/lib/private/request/RequestFacade.d.ts +2 -2
  84. package/lib/private/request/handle.js +2 -2
  85. package/lib/private/request/parse.js +2 -4
  86. package/lib/private/request/route.js +15 -8
  87. package/lib/private/response/binary.d.ts +2 -2
  88. package/lib/private/response/binary.js +6 -6
  89. package/lib/private/response/error.js +6 -2
  90. package/lib/private/response/json.js +2 -2
  91. package/lib/private/response/null.d.ts +3 -0
  92. package/lib/private/response/null.js +6 -0
  93. package/lib/private/response/redirect.js +4 -3
  94. package/lib/private/response/respond.js +4 -4
  95. package/lib/private/response/sse.js +2 -2
  96. package/lib/private/response/text.js +2 -2
  97. package/lib/private/route/ContentTypeMap.d.ts +10 -0
  98. package/lib/private/route/ContentTypeMap.js +2 -0
  99. package/lib/private/route/Handler.d.ts +3 -2
  100. package/lib/private/route/NarrowedRequest.d.ts +23 -0
  101. package/lib/private/route/NarrowedRequest.js +2 -0
  102. package/lib/private/route/Options.d.ts +6 -1
  103. package/lib/private/route/Path.d.ts +2 -2
  104. package/lib/private/route/hook.d.ts +3 -1
  105. package/lib/private/route/hook.js +1 -2
  106. package/lib/private/route/router.d.ts +7 -11
  107. package/lib/private/route/router.js +13 -20
  108. package/lib/private/route.client.d.ts +36 -0
  109. package/lib/private/route.client.js +8 -0
  110. package/lib/private/route.d.ts +21 -5
  111. package/lib/private/route.js +21 -5
  112. package/lib/private/serve/App.d.ts +1 -2
  113. package/lib/private/serve/App.js +64 -58
  114. package/lib/private/serve/Init.d.ts +2 -0
  115. package/lib/private/serve/dev-module.js +2 -3
  116. package/lib/private/serve/index.js +5 -6
  117. package/lib/private/server/TAG.d.ts +1 -1
  118. package/lib/private/server/TAG.js +1 -1
  119. package/lib/private/session/index.d.ts +1 -1
  120. package/lib/private/session/index.js +3 -2
  121. package/lib/private/session/module.js +3 -3
  122. package/lib/private/session/schema.d.ts +3 -3
  123. package/lib/private/session/schema.js +4 -3
  124. package/lib/private/store/ExtractRelation.d.ts +7 -0
  125. package/lib/private/store/ExtractRelation.js +2 -0
  126. package/lib/private/store/ExtractSchema.d.ts +10 -0
  127. package/lib/private/{orm → store}/ForeignKey.d.ts +1 -1
  128. package/lib/private/store/Init.d.ts +13 -0
  129. package/lib/private/store/Init.js +2 -0
  130. package/lib/private/{orm/store.d.ts → store/Store.d.ts} +50 -50
  131. package/lib/private/{orm/store.js → store/Store.js} +163 -107
  132. package/lib/private/store/StoreInput.d.ts +11 -0
  133. package/lib/private/store/key.d.ts +8 -0
  134. package/lib/private/store/key.js +8 -0
  135. package/lib/private/{orm → store}/parse.d.ts +3 -3
  136. package/lib/private/{orm → store}/parse.js +7 -2
  137. package/lib/private/store/relation.d.ts +29 -0
  138. package/lib/private/store/relation.js +26 -0
  139. package/lib/private/store.d.ts +24 -0
  140. package/lib/private/store.js +10 -0
  141. package/lib/public/db/errors.d.ts +1 -1
  142. package/lib/public/db/errors.js +1 -1
  143. package/lib/public/db/testSQL.d.ts +2 -0
  144. package/lib/public/db/testSQL.js +2 -0
  145. package/lib/public/db.d.ts +1 -0
  146. package/lib/public/index.d.ts +1 -0
  147. package/lib/public/index.js +1 -1
  148. package/lib/public/response.d.ts +6 -6
  149. package/lib/public/response.js +4 -1
  150. package/lib/public/route.client.d.ts +2 -0
  151. package/lib/public/route.client.js +2 -0
  152. package/lib/public/store.d.ts +2 -0
  153. package/lib/public/store.js +2 -0
  154. package/package.json +24 -17
  155. package/lib/private/bye.d.ts +0 -3
  156. package/lib/private/bye.js +0 -4
  157. package/lib/private/log.d.ts +0 -20
  158. package/lib/private/log.js +0 -47
  159. package/lib/private/orm/ExtractSchema.d.ts +0 -9
  160. package/lib/private/orm/StoreInput.d.ts +0 -10
  161. package/lib/private/orm/key.d.ts +0 -8
  162. package/lib/private/orm/key.js +0 -8
  163. package/lib/private/orm/relation.d.ts +0 -43
  164. package/lib/private/orm/relation.js +0 -26
  165. package/lib/private/request/Verb.d.ts +0 -4
  166. package/lib/private/request/Verb.js +0 -2
  167. package/lib/private/request/verbs.d.ts +0 -3
  168. package/lib/private/request/verbs.js +0 -12
  169. package/lib/private/route/wrap.d.ts +0 -2
  170. package/lib/private/route/wrap.js +0 -12
  171. package/lib/public/log.d.ts +0 -2
  172. package/lib/public/log.js +0 -2
  173. package/lib/public/orm/key.d.ts +0 -2
  174. package/lib/public/orm/key.js +0 -2
  175. package/lib/public/orm/relation.d.ts +0 -2
  176. package/lib/public/orm/relation.js +0 -2
  177. package/lib/public/orm/store.d.ts +0 -2
  178. package/lib/public/orm/store.js +0 -2
  179. package/lib/public/request/verbs.d.ts +0 -2
  180. package/lib/public/request/verbs.js +0 -2
  181. /package/lib/private/{orm → store}/ExtractSchema.js +0 -0
  182. /package/lib/private/{orm → store}/ForeignKey.js +0 -0
  183. /package/lib/private/{orm → store}/PrimaryKey.d.ts +0 -0
  184. /package/lib/private/{orm → store}/PrimaryKey.js +0 -0
  185. /package/lib/private/{orm → store}/StoreInput.js +0 -0
@@ -9,6 +9,15 @@ import type { FileRef } from "@rcompat/fs";
9
9
  export default class App {
10
10
  #private;
11
11
  constructor(root: FileRef, config: Config, flags: typeof Flags.infer);
12
+ get log(): {
13
+ readonly level: string;
14
+ print(strings: TemplateStringsArray, ...params: unknown[]): void;
15
+ system(strings: TemplateStringsArray, ...params: unknown[]): void;
16
+ trace(strings: TemplateStringsArray, ...params: unknown[]): void;
17
+ info(strings: TemplateStringsArray, ...params: unknown[]): void;
18
+ warn(strings: TemplateStringsArray, ...params: unknown[]): void;
19
+ error(error: unknown): void;
20
+ };
12
21
  init(): Promise<this>;
13
22
  register(created: Created): void;
14
23
  build_hooks(app: BuildApp): Promise<BuildApp>;
@@ -44,13 +53,16 @@ export default class App {
44
53
  build: FileRef;
45
54
  };
46
55
  get mode(): Mode;
56
+ get secure(): boolean;
57
+ get url(): string;
47
58
  get livereload(): {
48
59
  host: string;
49
60
  port: number;
50
61
  };
51
62
  get<T>(key: symbol): T;
52
63
  set(key: symbol, value: unknown): void;
53
- config<P extends string>(path: P): P extends `${infer P1}.${infer Rest}` ? P1 extends "http" | "livereload" | "db" | "env" | "request" | "modules" ? (Rest extends `${infer P1}.${infer Rest}` ? P1 extends keyof Exclude<{
64
+ config<P extends string>(path: P): P extends `${infer P1}.${infer Rest}` ? P1 extends "http" | "livereload" | "db" | "env" | "conditions" | "modules" ? (Rest extends `${infer P1}.${infer Rest}` ? P1 extends keyof Exclude<{
65
+ conditions: string[];
54
66
  http: {
55
67
  csp: Record<string, string[]> | undefined;
56
68
  headers: Record<string, string> | undefined;
@@ -72,21 +84,17 @@ export default class App {
72
84
  db: {
73
85
  migrations: {
74
86
  table: string;
75
- db: import("./db/DB.js").default;
87
+ db: import("./db/DB.js").default<unknown>;
76
88
  } | undefined;
77
89
  };
78
90
  env: {
79
- schema: import("pema").ObjectType<import("@rcompat/dict").Dict<import("pema").Parsed<unknown>>, {
91
+ schema: import("pema").ObjectType<import("@rcompat/type").Dict<import("pema").Parsed<unknown>>, {
80
92
  [x: string]: unknown;
81
93
  }> | undefined;
82
94
  };
83
95
  modules: import("./Module.js").default[];
84
- request: {
85
- body: {
86
- parse: boolean;
87
- };
88
- };
89
96
  }[P1], undefined> ? (Rest extends `${infer P1}.${infer Rest}` ? P1 extends keyof Exclude<Exclude<{
97
+ conditions: string[];
90
98
  http: {
91
99
  csp: Record<string, string[]> | undefined;
92
100
  headers: Record<string, string> | undefined;
@@ -108,21 +116,17 @@ export default class App {
108
116
  db: {
109
117
  migrations: {
110
118
  table: string;
111
- db: import("./db/DB.js").default;
119
+ db: import("./db/DB.js").default<unknown>;
112
120
  } | undefined;
113
121
  };
114
122
  env: {
115
- schema: import("pema").ObjectType<import("@rcompat/dict").Dict<import("pema").Parsed<unknown>>, {
123
+ schema: import("pema").ObjectType<import("@rcompat/type").Dict<import("pema").Parsed<unknown>>, {
116
124
  [x: string]: unknown;
117
125
  }> | undefined;
118
126
  };
119
127
  modules: import("./Module.js").default[];
120
- request: {
121
- body: {
122
- parse: boolean;
123
- };
124
- };
125
128
  }[P1], undefined>[P1], undefined> ? (Rest extends `${infer P1}.${infer Rest}` ? P1 extends keyof Exclude<Exclude<Exclude<{
129
+ conditions: string[];
126
130
  http: {
127
131
  csp: Record<string, string[]> | undefined;
128
132
  headers: Record<string, string> | undefined;
@@ -144,21 +148,17 @@ export default class App {
144
148
  db: {
145
149
  migrations: {
146
150
  table: string;
147
- db: import("./db/DB.js").default;
151
+ db: import("./db/DB.js").default<unknown>;
148
152
  } | undefined;
149
153
  };
150
154
  env: {
151
- schema: import("pema").ObjectType<import("@rcompat/dict").Dict<import("pema").Parsed<unknown>>, {
155
+ schema: import("pema").ObjectType<import("@rcompat/type").Dict<import("pema").Parsed<unknown>>, {
152
156
  [x: string]: unknown;
153
157
  }> | undefined;
154
158
  };
155
159
  modules: import("./Module.js").default[];
156
- request: {
157
- body: {
158
- parse: boolean;
159
- };
160
- };
161
160
  }[P1], undefined>[P1], undefined>[P1], undefined> ? (Rest extends `${infer P1}.${infer Rest}` ? P1 extends keyof Exclude<Exclude<Exclude<Exclude<{
161
+ conditions: string[];
162
162
  http: {
163
163
  csp: Record<string, string[]> | undefined;
164
164
  headers: Record<string, string> | undefined;
@@ -180,21 +180,17 @@ export default class App {
180
180
  db: {
181
181
  migrations: {
182
182
  table: string;
183
- db: import("./db/DB.js").default;
183
+ db: import("./db/DB.js").default<unknown>;
184
184
  } | undefined;
185
185
  };
186
186
  env: {
187
- schema: import("pema").ObjectType<import("@rcompat/dict").Dict<import("pema").Parsed<unknown>>, {
187
+ schema: import("pema").ObjectType<import("@rcompat/type").Dict<import("pema").Parsed<unknown>>, {
188
188
  [x: string]: unknown;
189
189
  }> | undefined;
190
190
  };
191
191
  modules: import("./Module.js").default[];
192
- request: {
193
- body: {
194
- parse: boolean;
195
- };
196
- };
197
192
  }[P1], undefined>[P1], undefined>[P1], undefined>[P1], undefined> ? (Rest extends `${infer P1}.${infer Rest}` ? P1 extends keyof Exclude<Exclude<Exclude<Exclude<Exclude<{
193
+ conditions: string[];
198
194
  http: {
199
195
  csp: Record<string, string[]> | undefined;
200
196
  headers: Record<string, string> | undefined;
@@ -216,21 +212,17 @@ export default class App {
216
212
  db: {
217
213
  migrations: {
218
214
  table: string;
219
- db: import("./db/DB.js").default;
215
+ db: import("./db/DB.js").default<unknown>;
220
216
  } | undefined;
221
217
  };
222
218
  env: {
223
- schema: import("pema").ObjectType<import("@rcompat/dict").Dict<import("pema").Parsed<unknown>>, {
219
+ schema: import("pema").ObjectType<import("@rcompat/type").Dict<import("pema").Parsed<unknown>>, {
224
220
  [x: string]: unknown;
225
221
  }> | undefined;
226
222
  };
227
223
  modules: import("./Module.js").default[];
228
- request: {
229
- body: {
230
- parse: boolean;
231
- };
232
- };
233
224
  }[P1], undefined>[P1], undefined>[P1], undefined>[P1], undefined>[P1], undefined> ? unknown : undefined : Rest extends keyof Exclude<Exclude<Exclude<Exclude<Exclude<{
225
+ conditions: string[];
234
226
  http: {
235
227
  csp: Record<string, string[]> | undefined;
236
228
  headers: Record<string, string> | undefined;
@@ -252,21 +244,17 @@ export default class App {
252
244
  db: {
253
245
  migrations: {
254
246
  table: string;
255
- db: import("./db/DB.js").default;
247
+ db: import("./db/DB.js").default<unknown>;
256
248
  } | undefined;
257
249
  };
258
250
  env: {
259
- schema: import("pema").ObjectType<import("@rcompat/dict").Dict<import("pema").Parsed<unknown>>, {
251
+ schema: import("pema").ObjectType<import("@rcompat/type").Dict<import("pema").Parsed<unknown>>, {
260
252
  [x: string]: unknown;
261
253
  }> | undefined;
262
254
  };
263
255
  modules: import("./Module.js").default[];
264
- request: {
265
- body: {
266
- parse: boolean;
267
- };
268
- };
269
256
  }[P1], undefined>[P1], undefined>[P1], undefined>[P1], undefined>[P1], undefined> ? Exclude<Exclude<Exclude<Exclude<Exclude<{
257
+ conditions: string[];
270
258
  http: {
271
259
  csp: Record<string, string[]> | undefined;
272
260
  headers: Record<string, string> | undefined;
@@ -288,21 +276,17 @@ export default class App {
288
276
  db: {
289
277
  migrations: {
290
278
  table: string;
291
- db: import("./db/DB.js").default;
279
+ db: import("./db/DB.js").default<unknown>;
292
280
  } | undefined;
293
281
  };
294
282
  env: {
295
- schema: import("pema").ObjectType<import("@rcompat/dict").Dict<import("pema").Parsed<unknown>>, {
283
+ schema: import("pema").ObjectType<import("@rcompat/type").Dict<import("pema").Parsed<unknown>>, {
296
284
  [x: string]: unknown;
297
285
  }> | undefined;
298
286
  };
299
287
  modules: import("./Module.js").default[];
300
- request: {
301
- body: {
302
- parse: boolean;
303
- };
304
- };
305
288
  }[P1], undefined>[P1], undefined>[P1], undefined>[P1], undefined>[P1], undefined>[Rest] : undefined) | (Exclude<Exclude<Exclude<Exclude<{
289
+ conditions: string[];
306
290
  http: {
307
291
  csp: Record<string, string[]> | undefined;
308
292
  headers: Record<string, string> | undefined;
@@ -324,21 +308,17 @@ export default class App {
324
308
  db: {
325
309
  migrations: {
326
310
  table: string;
327
- db: import("./db/DB.js").default;
311
+ db: import("./db/DB.js").default<unknown>;
328
312
  } | undefined;
329
313
  };
330
314
  env: {
331
- schema: import("pema").ObjectType<import("@rcompat/dict").Dict<import("pema").Parsed<unknown>>, {
315
+ schema: import("pema").ObjectType<import("@rcompat/type").Dict<import("pema").Parsed<unknown>>, {
332
316
  [x: string]: unknown;
333
317
  }> | undefined;
334
318
  };
335
319
  modules: import("./Module.js").default[];
336
- request: {
337
- body: {
338
- parse: boolean;
339
- };
340
- };
341
320
  }[P1], undefined>[P1], undefined>[P1], undefined>[P1], undefined>[P1] & undefined) : undefined : Rest extends keyof Exclude<Exclude<Exclude<Exclude<{
321
+ conditions: string[];
342
322
  http: {
343
323
  csp: Record<string, string[]> | undefined;
344
324
  headers: Record<string, string> | undefined;
@@ -360,21 +340,17 @@ export default class App {
360
340
  db: {
361
341
  migrations: {
362
342
  table: string;
363
- db: import("./db/DB.js").default;
343
+ db: import("./db/DB.js").default<unknown>;
364
344
  } | undefined;
365
345
  };
366
346
  env: {
367
- schema: import("pema").ObjectType<import("@rcompat/dict").Dict<import("pema").Parsed<unknown>>, {
347
+ schema: import("pema").ObjectType<import("@rcompat/type").Dict<import("pema").Parsed<unknown>>, {
368
348
  [x: string]: unknown;
369
349
  }> | undefined;
370
350
  };
371
351
  modules: import("./Module.js").default[];
372
- request: {
373
- body: {
374
- parse: boolean;
375
- };
376
- };
377
352
  }[P1], undefined>[P1], undefined>[P1], undefined>[P1], undefined> ? Exclude<Exclude<Exclude<Exclude<{
353
+ conditions: string[];
378
354
  http: {
379
355
  csp: Record<string, string[]> | undefined;
380
356
  headers: Record<string, string> | undefined;
@@ -396,21 +372,17 @@ export default class App {
396
372
  db: {
397
373
  migrations: {
398
374
  table: string;
399
- db: import("./db/DB.js").default;
375
+ db: import("./db/DB.js").default<unknown>;
400
376
  } | undefined;
401
377
  };
402
378
  env: {
403
- schema: import("pema").ObjectType<import("@rcompat/dict").Dict<import("pema").Parsed<unknown>>, {
379
+ schema: import("pema").ObjectType<import("@rcompat/type").Dict<import("pema").Parsed<unknown>>, {
404
380
  [x: string]: unknown;
405
381
  }> | undefined;
406
382
  };
407
383
  modules: import("./Module.js").default[];
408
- request: {
409
- body: {
410
- parse: boolean;
411
- };
412
- };
413
384
  }[P1], undefined>[P1], undefined>[P1], undefined>[P1], undefined>[Rest] : undefined) | (Exclude<Exclude<Exclude<{
385
+ conditions: string[];
414
386
  http: {
415
387
  csp: Record<string, string[]> | undefined;
416
388
  headers: Record<string, string> | undefined;
@@ -432,21 +404,17 @@ export default class App {
432
404
  db: {
433
405
  migrations: {
434
406
  table: string;
435
- db: import("./db/DB.js").default;
407
+ db: import("./db/DB.js").default<unknown>;
436
408
  } | undefined;
437
409
  };
438
410
  env: {
439
- schema: import("pema").ObjectType<import("@rcompat/dict").Dict<import("pema").Parsed<unknown>>, {
411
+ schema: import("pema").ObjectType<import("@rcompat/type").Dict<import("pema").Parsed<unknown>>, {
440
412
  [x: string]: unknown;
441
413
  }> | undefined;
442
414
  };
443
415
  modules: import("./Module.js").default[];
444
- request: {
445
- body: {
446
- parse: boolean;
447
- };
448
- };
449
416
  }[P1], undefined>[P1], undefined>[P1], undefined>[P1] & undefined) : undefined : Rest extends keyof Exclude<Exclude<Exclude<{
417
+ conditions: string[];
450
418
  http: {
451
419
  csp: Record<string, string[]> | undefined;
452
420
  headers: Record<string, string> | undefined;
@@ -468,21 +436,17 @@ export default class App {
468
436
  db: {
469
437
  migrations: {
470
438
  table: string;
471
- db: import("./db/DB.js").default;
439
+ db: import("./db/DB.js").default<unknown>;
472
440
  } | undefined;
473
441
  };
474
442
  env: {
475
- schema: import("pema").ObjectType<import("@rcompat/dict").Dict<import("pema").Parsed<unknown>>, {
443
+ schema: import("pema").ObjectType<import("@rcompat/type").Dict<import("pema").Parsed<unknown>>, {
476
444
  [x: string]: unknown;
477
445
  }> | undefined;
478
446
  };
479
447
  modules: import("./Module.js").default[];
480
- request: {
481
- body: {
482
- parse: boolean;
483
- };
484
- };
485
448
  }[P1], undefined>[P1], undefined>[P1], undefined> ? Exclude<Exclude<Exclude<{
449
+ conditions: string[];
486
450
  http: {
487
451
  csp: Record<string, string[]> | undefined;
488
452
  headers: Record<string, string> | undefined;
@@ -504,21 +468,17 @@ export default class App {
504
468
  db: {
505
469
  migrations: {
506
470
  table: string;
507
- db: import("./db/DB.js").default;
471
+ db: import("./db/DB.js").default<unknown>;
508
472
  } | undefined;
509
473
  };
510
474
  env: {
511
- schema: import("pema").ObjectType<import("@rcompat/dict").Dict<import("pema").Parsed<unknown>>, {
475
+ schema: import("pema").ObjectType<import("@rcompat/type").Dict<import("pema").Parsed<unknown>>, {
512
476
  [x: string]: unknown;
513
477
  }> | undefined;
514
478
  };
515
479
  modules: import("./Module.js").default[];
516
- request: {
517
- body: {
518
- parse: boolean;
519
- };
520
- };
521
480
  }[P1], undefined>[P1], undefined>[P1], undefined>[Rest] : undefined) | (Exclude<Exclude<{
481
+ conditions: string[];
522
482
  http: {
523
483
  csp: Record<string, string[]> | undefined;
524
484
  headers: Record<string, string> | undefined;
@@ -540,21 +500,17 @@ export default class App {
540
500
  db: {
541
501
  migrations: {
542
502
  table: string;
543
- db: import("./db/DB.js").default;
503
+ db: import("./db/DB.js").default<unknown>;
544
504
  } | undefined;
545
505
  };
546
506
  env: {
547
- schema: import("pema").ObjectType<import("@rcompat/dict").Dict<import("pema").Parsed<unknown>>, {
507
+ schema: import("pema").ObjectType<import("@rcompat/type").Dict<import("pema").Parsed<unknown>>, {
548
508
  [x: string]: unknown;
549
509
  }> | undefined;
550
510
  };
551
511
  modules: import("./Module.js").default[];
552
- request: {
553
- body: {
554
- parse: boolean;
555
- };
556
- };
557
512
  }[P1], undefined>[P1], undefined>[P1] & undefined) : undefined : Rest extends keyof Exclude<Exclude<{
513
+ conditions: string[];
558
514
  http: {
559
515
  csp: Record<string, string[]> | undefined;
560
516
  headers: Record<string, string> | undefined;
@@ -576,21 +532,17 @@ export default class App {
576
532
  db: {
577
533
  migrations: {
578
534
  table: string;
579
- db: import("./db/DB.js").default;
535
+ db: import("./db/DB.js").default<unknown>;
580
536
  } | undefined;
581
537
  };
582
538
  env: {
583
- schema: import("pema").ObjectType<import("@rcompat/dict").Dict<import("pema").Parsed<unknown>>, {
539
+ schema: import("pema").ObjectType<import("@rcompat/type").Dict<import("pema").Parsed<unknown>>, {
584
540
  [x: string]: unknown;
585
541
  }> | undefined;
586
542
  };
587
543
  modules: import("./Module.js").default[];
588
- request: {
589
- body: {
590
- parse: boolean;
591
- };
592
- };
593
544
  }[P1], undefined>[P1], undefined> ? Exclude<Exclude<{
545
+ conditions: string[];
594
546
  http: {
595
547
  csp: Record<string, string[]> | undefined;
596
548
  headers: Record<string, string> | undefined;
@@ -612,21 +564,17 @@ export default class App {
612
564
  db: {
613
565
  migrations: {
614
566
  table: string;
615
- db: import("./db/DB.js").default;
567
+ db: import("./db/DB.js").default<unknown>;
616
568
  } | undefined;
617
569
  };
618
570
  env: {
619
- schema: import("pema").ObjectType<import("@rcompat/dict").Dict<import("pema").Parsed<unknown>>, {
571
+ schema: import("pema").ObjectType<import("@rcompat/type").Dict<import("pema").Parsed<unknown>>, {
620
572
  [x: string]: unknown;
621
573
  }> | undefined;
622
574
  };
623
575
  modules: import("./Module.js").default[];
624
- request: {
625
- body: {
626
- parse: boolean;
627
- };
628
- };
629
576
  }[P1], undefined>[P1], undefined>[Rest] : undefined) | (Exclude<{
577
+ conditions: string[];
630
578
  http: {
631
579
  csp: Record<string, string[]> | undefined;
632
580
  headers: Record<string, string> | undefined;
@@ -648,21 +596,17 @@ export default class App {
648
596
  db: {
649
597
  migrations: {
650
598
  table: string;
651
- db: import("./db/DB.js").default;
599
+ db: import("./db/DB.js").default<unknown>;
652
600
  } | undefined;
653
601
  };
654
602
  env: {
655
- schema: import("pema").ObjectType<import("@rcompat/dict").Dict<import("pema").Parsed<unknown>>, {
603
+ schema: import("pema").ObjectType<import("@rcompat/type").Dict<import("pema").Parsed<unknown>>, {
656
604
  [x: string]: unknown;
657
605
  }> | undefined;
658
606
  };
659
607
  modules: import("./Module.js").default[];
660
- request: {
661
- body: {
662
- parse: boolean;
663
- };
664
- };
665
608
  }[P1], undefined>[P1] & undefined) : undefined : Rest extends keyof Exclude<{
609
+ conditions: string[];
666
610
  http: {
667
611
  csp: Record<string, string[]> | undefined;
668
612
  headers: Record<string, string> | undefined;
@@ -684,21 +628,17 @@ export default class App {
684
628
  db: {
685
629
  migrations: {
686
630
  table: string;
687
- db: import("./db/DB.js").default;
631
+ db: import("./db/DB.js").default<unknown>;
688
632
  } | undefined;
689
633
  };
690
634
  env: {
691
- schema: import("pema").ObjectType<import("@rcompat/dict").Dict<import("pema").Parsed<unknown>>, {
635
+ schema: import("pema").ObjectType<import("@rcompat/type").Dict<import("pema").Parsed<unknown>>, {
692
636
  [x: string]: unknown;
693
637
  }> | undefined;
694
638
  };
695
639
  modules: import("./Module.js").default[];
696
- request: {
697
- body: {
698
- parse: boolean;
699
- };
700
- };
701
640
  }[P1], undefined> ? Exclude<{
641
+ conditions: string[];
702
642
  http: {
703
643
  csp: Record<string, string[]> | undefined;
704
644
  headers: Record<string, string> | undefined;
@@ -720,21 +660,17 @@ export default class App {
720
660
  db: {
721
661
  migrations: {
722
662
  table: string;
723
- db: import("./db/DB.js").default;
663
+ db: import("./db/DB.js").default<unknown>;
724
664
  } | undefined;
725
665
  };
726
666
  env: {
727
- schema: import("pema").ObjectType<import("@rcompat/dict").Dict<import("pema").Parsed<unknown>>, {
667
+ schema: import("pema").ObjectType<import("@rcompat/type").Dict<import("pema").Parsed<unknown>>, {
728
668
  [x: string]: unknown;
729
669
  }> | undefined;
730
670
  };
731
671
  modules: import("./Module.js").default[];
732
- request: {
733
- body: {
734
- parse: boolean;
735
- };
736
- };
737
672
  }[P1], undefined>[Rest] : undefined) | ({
673
+ conditions: string[];
738
674
  http: {
739
675
  csp: Record<string, string[]> | undefined;
740
676
  headers: Record<string, string> | undefined;
@@ -756,21 +692,17 @@ export default class App {
756
692
  db: {
757
693
  migrations: {
758
694
  table: string;
759
- db: import("./db/DB.js").default;
695
+ db: import("./db/DB.js").default<unknown>;
760
696
  } | undefined;
761
697
  };
762
698
  env: {
763
- schema: import("pema").ObjectType<import("@rcompat/dict").Dict<import("pema").Parsed<unknown>>, {
699
+ schema: import("pema").ObjectType<import("@rcompat/type").Dict<import("pema").Parsed<unknown>>, {
764
700
  [x: string]: unknown;
765
701
  }> | undefined;
766
702
  };
767
703
  modules: import("./Module.js").default[];
768
- request: {
769
- body: {
770
- parse: boolean;
771
- };
772
- };
773
- }[P1] & undefined) : undefined : P extends "http" | "livereload" | "db" | "env" | "request" | "modules" ? {
704
+ }[P1] & undefined) : undefined : P extends "http" | "livereload" | "db" | "env" | "conditions" | "modules" ? {
705
+ conditions: string[];
774
706
  http: {
775
707
  csp: Record<string, string[]> | undefined;
776
708
  headers: Record<string, string> | undefined;
@@ -792,20 +724,15 @@ export default class App {
792
724
  db: {
793
725
  migrations: {
794
726
  table: string;
795
- db: import("./db/DB.js").default;
727
+ db: import("./db/DB.js").default<unknown>;
796
728
  } | undefined;
797
729
  };
798
730
  env: {
799
- schema: import("pema").ObjectType<import("@rcompat/dict").Dict<import("pema").Parsed<unknown>>, {
731
+ schema: import("pema").ObjectType<import("@rcompat/type").Dict<import("pema").Parsed<unknown>>, {
800
732
  [x: string]: unknown;
801
733
  }> | undefined;
802
734
  };
803
735
  modules: import("./Module.js").default[];
804
- request: {
805
- body: {
806
- parse: boolean;
807
- };
808
- };
809
736
  }[P] : undefined;
810
737
  runpath(...directories: string[]): FileRef;
811
738
  }
@@ -1,20 +1,23 @@
1
1
  import E from "#errors";
2
2
  import location from "#location";
3
+ import logger from "#logger";
3
4
  import create from "#module/create";
4
5
  import TargetManager from "#target/Manager";
5
6
  import dict from "@rcompat/dict";
6
- import entries from "@rcompat/dict/entries";
7
+ import is from "@rcompat/is";
7
8
  import p from "pema";
8
9
  export default class App {
9
10
  #path;
10
11
  #root;
11
12
  #config;
13
+ #log;
12
14
  #hooks = {
13
15
  init: [],
14
16
  build: [],
15
17
  serve: [],
16
18
  handle: [],
17
19
  route: [],
20
+ log: [],
18
21
  };
19
22
  #module_names = new Set();
20
23
  #kv = new Map();
@@ -22,20 +25,24 @@ export default class App {
22
25
  #target;
23
26
  #target_name;
24
27
  constructor(root, config, flags) {
25
- if (Object.values(location).includes(flags.dir)) {
26
- throw E.app_reserved_directory(flags.dir);
28
+ if (Object.values(location).includes(flags.outdir)) {
29
+ throw E.app_reserved_directory(flags.outdir);
27
30
  }
28
31
  this.#root = root;
29
32
  this.#config = config;
30
33
  for (const module of config.modules)
31
34
  this.register(create(module));
32
- this.#path = entries({
35
+ this.#path = dict.map({
33
36
  ...location,
34
- build: flags.dir,
35
- }).valmap(([, path]) => root.join(path)).get();
37
+ build: flags.outdir,
38
+ }, (_, path) => root.join(path));
36
39
  this.#mode = flags.mode;
37
40
  this.#target = new TargetManager(this);
38
41
  this.#target_name = flags.target;
42
+ this.#log = logger(flags.log, this.#hooks.log);
43
+ }
44
+ get log() {
45
+ return this.#log;
39
46
  }
40
47
  async init() {
41
48
  for (const hook of this.#hooks.init)
@@ -53,6 +60,7 @@ export default class App {
53
60
  this.#hooks.serve.push(...created.hooks.serve);
54
61
  this.#hooks.handle.push(...created.hooks.handle);
55
62
  this.#hooks.route.push(...created.hooks.route);
63
+ this.#hooks.log.push(...created.hooks.log);
56
64
  }
57
65
  async build_hooks(app) {
58
66
  for (const hook of this.#hooks.build)
@@ -85,6 +93,14 @@ export default class App {
85
93
  get mode() {
86
94
  return this.#mode;
87
95
  }
96
+ get secure() {
97
+ const ssl = this.config("http.ssl");
98
+ return is.defined(ssl.key) && is.defined(ssl.cert);
99
+ }
100
+ get url() {
101
+ const { host, port } = this.config("http");
102
+ return `http${this.secure ? "s" : ""}://${host}:${port}`;
103
+ }
88
104
  get livereload() {
89
105
  const { host = this.config("http.host"), port = p.uint.port().parse(this.config("http.port") - 1), } = this.config("livereload");
90
106
  return { host, port };
@@ -1,11 +1,13 @@
1
1
  declare const _default: import("pema").ObjectType<import("pema").NormalizeSchemaObject<{
2
- readonly mode: import("pema").UnionType<[import("pema").LiteralType<"production">, import("pema").LiteralType<"development">, import("pema").LiteralType<"testing">]>;
2
+ readonly mode: import("pema").DefaultType<import("pema").UnionType<[import("pema").LiteralType<"production">, import("pema").LiteralType<"development">, import("pema").LiteralType<"testing">]>, "development" | "production" | "testing">;
3
3
  readonly target: import("pema").DefaultType<import("pema").StringType, "web">;
4
- readonly dir: import("pema").DefaultType<import("pema").StringType, "build">;
4
+ readonly outdir: import("pema").DefaultType<import("pema").StringType, "build">;
5
+ readonly log: import("pema").DefaultType<import("pema").UnionType<[import("pema").LiteralType<"error">, import("pema").LiteralType<"warn">, import("pema").LiteralType<"info">, import("pema").LiteralType<"trace">]>, "trace" | "info" | "error" | "warn">;
5
6
  }>, {
6
7
  mode: "development" | "production" | "testing";
7
8
  target: string;
8
- dir: string;
9
+ outdir: string;
10
+ log: "trace" | "info" | "error" | "warn";
9
11
  }>;
10
12
  export default _default;
11
13
  //# sourceMappingURL=Flags.d.ts.map
@@ -1,7 +1,9 @@
1
+ import { Schema as log } from "#logger";
1
2
  import p from "pema";
2
3
  export default p({
3
- mode: p.union("production", "development", "testing"),
4
+ mode: p.union("production", "development", "testing").default("production"),
4
5
  target: p.string.default("web"),
5
- dir: p.string.default("build"),
6
+ outdir: p.string.default("build"),
7
+ log,
6
8
  });
7
9
  //# sourceMappingURL=Flags.js.map