fuma-content 1.0.3 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (202) hide show
  1. package/dist/{async-cache-C0J_pTbk.js → async-cache-U87GzQTb.js} +1 -1
  2. package/dist/{async-cache-C0J_pTbk.js.map → async-cache-U87GzQTb.js.map} +1 -1
  3. package/dist/{build-mdx-DugsQ0sk.js → build-mdx-BZxE8t2a.js} +14 -9
  4. package/dist/build-mdx-BZxE8t2a.js.map +1 -0
  5. package/dist/build-mdx-LhpFasX-.js +4 -0
  6. package/dist/bun/index.d.ts +7 -4
  7. package/dist/bun/index.d.ts.map +1 -1
  8. package/dist/bun/index.js +25 -14
  9. package/dist/bun/index.js.map +1 -1
  10. package/dist/{bun-Br1ReMiq.js → bun-CBROq3I0.js} +2 -2
  11. package/dist/bun-CBROq3I0.js.map +1 -0
  12. package/dist/code-generator-CjC4EEXg.js +102 -0
  13. package/dist/code-generator-CjC4EEXg.js.map +1 -0
  14. package/dist/collections/data/runtime.d.ts +15 -0
  15. package/dist/collections/data/runtime.d.ts.map +1 -0
  16. package/dist/collections/{meta → data}/runtime.js +4 -4
  17. package/dist/collections/data/runtime.js.map +1 -0
  18. package/dist/collections/data.d.ts +47 -0
  19. package/dist/collections/data.d.ts.map +1 -0
  20. package/dist/collections/data.js +5 -0
  21. package/dist/collections/fs.d.ts +3 -0
  22. package/dist/collections/fs.js +3 -0
  23. package/dist/collections/index.d.ts +2 -2
  24. package/dist/collections/index.js +2 -15
  25. package/dist/collections/json/loader-webpack.d.ts +9 -0
  26. package/dist/collections/json/loader-webpack.d.ts.map +1 -0
  27. package/dist/collections/json/loader-webpack.js +15 -0
  28. package/dist/collections/json/loader-webpack.js.map +1 -0
  29. package/dist/collections/mdx/loader-webpack.d.ts +5 -5
  30. package/dist/collections/mdx/loader-webpack.d.ts.map +1 -1
  31. package/dist/collections/mdx/loader-webpack.js +11 -21
  32. package/dist/collections/mdx/loader-webpack.js.map +1 -1
  33. package/dist/collections/mdx/react.d.ts +22 -0
  34. package/dist/collections/mdx/react.d.ts.map +1 -0
  35. package/dist/collections/mdx/react.js +35 -0
  36. package/dist/collections/mdx/react.js.map +1 -0
  37. package/dist/collections/mdx/runtime-browser.d.ts +11 -45
  38. package/dist/collections/mdx/runtime-browser.js +6 -44
  39. package/dist/collections/mdx/runtime-browser.js.map +1 -1
  40. package/dist/collections/mdx/runtime-dynamic.d.ts +16 -28
  41. package/dist/collections/mdx/runtime-dynamic.d.ts.map +1 -1
  42. package/dist/collections/mdx/runtime-dynamic.js +17 -20
  43. package/dist/collections/mdx/runtime-dynamic.js.map +1 -1
  44. package/dist/collections/mdx/runtime.d.ts +10 -49
  45. package/dist/collections/mdx/runtime.js +2 -11
  46. package/dist/collections/mdx/runtime.js.map +1 -1
  47. package/dist/collections/mdx.d.ts +6 -2
  48. package/dist/collections/mdx.js +6 -247
  49. package/dist/collections/runtime/file-store.d.ts +4 -22
  50. package/dist/collections/runtime/file-store.js +15 -14
  51. package/dist/collections/runtime/file-store.js.map +1 -1
  52. package/dist/collections/runtime/store.d.ts +3 -3
  53. package/dist/collections/runtime/store.js +2 -2
  54. package/dist/collections/yaml/loader-webpack.d.ts +9 -0
  55. package/dist/collections/yaml/loader-webpack.d.ts.map +1 -0
  56. package/dist/collections/yaml/loader-webpack.js +15 -0
  57. package/dist/collections/yaml/loader-webpack.js.map +1 -0
  58. package/dist/collections-DNFRdCuB.js +98 -0
  59. package/dist/collections-DNFRdCuB.js.map +1 -0
  60. package/dist/config/index.d.ts +1 -1
  61. package/dist/config/index.js.map +1 -1
  62. package/dist/core-BO3b8jMg.d.ts +313 -0
  63. package/dist/core-BO3b8jMg.d.ts.map +1 -0
  64. package/dist/{core-CnZQDCJ1.js → core-D5QHSKk6.js} +65 -47
  65. package/dist/core-D5QHSKk6.js.map +1 -0
  66. package/dist/data-9h98oZwj.js +158 -0
  67. package/dist/data-9h98oZwj.js.map +1 -0
  68. package/dist/dynamic-CTYYdl7_.d.ts +33 -0
  69. package/dist/dynamic-CTYYdl7_.d.ts.map +1 -0
  70. package/dist/dynamic-DhKTOrIl.js +29 -0
  71. package/dist/dynamic-DhKTOrIl.js.map +1 -0
  72. package/dist/dynamic.d.ts +3 -24
  73. package/dist/dynamic.js +2 -27
  74. package/dist/file-store-laO4IjvB.d.ts +21 -0
  75. package/dist/file-store-laO4IjvB.d.ts.map +1 -0
  76. package/dist/fs-D34Sztbh.d.ts +44 -0
  77. package/dist/fs-D34Sztbh.d.ts.map +1 -0
  78. package/dist/fs-WWbLA7Gx.js +66 -0
  79. package/dist/fs-WWbLA7Gx.js.map +1 -0
  80. package/dist/{fuma-matter-D3kkMkdj.js → fuma-matter-BuBO2w-p.js} +1 -1
  81. package/dist/{fuma-matter-D3kkMkdj.js.map → fuma-matter-BuBO2w-p.js.map} +1 -1
  82. package/dist/git-2CjUW3M5.d.ts +37 -0
  83. package/dist/git-2CjUW3M5.d.ts.map +1 -0
  84. package/dist/git-CQWA37-X.js +60 -0
  85. package/dist/git-CQWA37-X.js.map +1 -0
  86. package/dist/index-Da88Sj8w.d.ts +87 -0
  87. package/dist/index-Da88Sj8w.d.ts.map +1 -0
  88. package/dist/index.d.ts +2 -2
  89. package/dist/index.js +4 -5
  90. package/dist/load-from-file-BZxc_BhC.js +3 -0
  91. package/dist/{load-from-file-XiM8eZha.js → load-from-file-irx0JI6j.js} +4 -6
  92. package/dist/load-from-file-irx0JI6j.js.map +1 -0
  93. package/dist/loader-AIEwGc2f.js +9 -0
  94. package/dist/loader-BhXHF8vy.js +16 -0
  95. package/dist/loader-BhXHF8vy.js.map +1 -0
  96. package/dist/loader-BuR4gkKg.js +77 -0
  97. package/dist/loader-BuR4gkKg.js.map +1 -0
  98. package/dist/loader-BzQpSBvP.js +59 -0
  99. package/dist/loader-BzQpSBvP.js.map +1 -0
  100. package/dist/{loader-C7W_Rwj8.js → loader-D6StkShK.js} +7 -6
  101. package/dist/loader-D6StkShK.js.map +1 -0
  102. package/dist/loader-DCK4RwOh.js +8 -0
  103. package/dist/loader-DwpOcxgh.js +17 -0
  104. package/dist/loader-DwpOcxgh.js.map +1 -0
  105. package/dist/loader-zsTVgQjO.js +8 -0
  106. package/dist/mdx-Dt9hirUu.d.ts +144 -0
  107. package/dist/mdx-Dt9hirUu.d.ts.map +1 -0
  108. package/dist/mdx-iZ2uP27Z.js +303 -0
  109. package/dist/mdx-iZ2uP27Z.js.map +1 -0
  110. package/dist/next/index.d.ts +6 -10
  111. package/dist/next/index.d.ts.map +1 -1
  112. package/dist/next/index.js +20 -28
  113. package/dist/next/index.js.map +1 -1
  114. package/dist/node/index.d.ts +8 -0
  115. package/dist/node/index.d.ts.map +1 -0
  116. package/dist/node/index.js +10 -0
  117. package/dist/node/index.js.map +1 -0
  118. package/dist/node/loader.d.ts +5 -2
  119. package/dist/node/loader.d.ts.map +1 -1
  120. package/dist/node/loader.js +17 -11
  121. package/dist/node/loader.js.map +1 -1
  122. package/dist/{node-CVAU22o3.js → node-2VZOh3P9.js} +7 -5
  123. package/dist/node-2VZOh3P9.js.map +1 -0
  124. package/dist/plugins/git.d.ts +3 -2
  125. package/dist/plugins/git.js +2 -61
  126. package/dist/plugins/json-schema.d.ts +26 -2
  127. package/dist/plugins/json-schema.d.ts.map +1 -0
  128. package/dist/plugins/json-schema.js +41 -50
  129. package/dist/plugins/json-schema.js.map +1 -1
  130. package/dist/plugins/loader/index.d.ts +4 -0
  131. package/dist/plugins/loader/index.js +3 -0
  132. package/dist/plugins/loader/webpack.d.ts +4 -0
  133. package/dist/plugins/loader/webpack.js +60 -0
  134. package/dist/plugins/loader/webpack.js.map +1 -0
  135. package/dist/runtime-HN-HSB0Z.d.ts +31 -0
  136. package/dist/runtime-HN-HSB0Z.d.ts.map +1 -0
  137. package/dist/runtime-browser-BQEk7qjc.d.ts +29 -0
  138. package/dist/runtime-browser-BQEk7qjc.d.ts.map +1 -0
  139. package/dist/store-DiuGdV5M.d.ts +31 -0
  140. package/dist/store-DiuGdV5M.d.ts.map +1 -0
  141. package/dist/{store-D166MOLw.js → store-IvpEBdxi.js} +4 -4
  142. package/dist/store-IvpEBdxi.js.map +1 -0
  143. package/dist/{validation-BYUzZIfc.js → validation-BvVvvLII.js} +1 -1
  144. package/dist/{validation-BYUzZIfc.js.map → validation-BvVvvLII.js.map} +1 -1
  145. package/dist/vite/index.d.ts +5 -15
  146. package/dist/vite/index.d.ts.map +1 -1
  147. package/dist/vite/index.js +18 -21
  148. package/dist/vite/index.js.map +1 -1
  149. package/dist/{vite-6awgG092.js → vite-C1qXY47G.js} +2 -2
  150. package/dist/vite-C1qXY47G.js.map +1 -0
  151. package/package.json +19 -18
  152. package/dist/build-mdx-CSrSOQxF.js +0 -4
  153. package/dist/build-mdx-DugsQ0sk.js.map +0 -1
  154. package/dist/bun-Br1ReMiq.js.map +0 -1
  155. package/dist/code-generator-BvuyL0UO.js +0 -133
  156. package/dist/code-generator-BvuyL0UO.js.map +0 -1
  157. package/dist/collections/handlers/fs.d.ts +0 -2
  158. package/dist/collections/handlers/fs.js +0 -31
  159. package/dist/collections/handlers/fs.js.map +0 -1
  160. package/dist/collections/index.js.map +0 -1
  161. package/dist/collections/mdx/runtime-browser.d.ts.map +0 -1
  162. package/dist/collections/mdx/runtime.d.ts.map +0 -1
  163. package/dist/collections/mdx.js.map +0 -1
  164. package/dist/collections/meta/loader-webpack.d.ts +0 -9
  165. package/dist/collections/meta/loader-webpack.d.ts.map +0 -1
  166. package/dist/collections/meta/loader-webpack.js +0 -25
  167. package/dist/collections/meta/loader-webpack.js.map +0 -1
  168. package/dist/collections/meta/runtime.d.ts +0 -11
  169. package/dist/collections/meta/runtime.d.ts.map +0 -1
  170. package/dist/collections/meta/runtime.js.map +0 -1
  171. package/dist/collections/meta.d.ts +0 -2
  172. package/dist/collections/meta.js +0 -131
  173. package/dist/collections/meta.js.map +0 -1
  174. package/dist/collections/runtime/file-store.d.ts.map +0 -1
  175. package/dist/core-CRWvbE7W.d.ts +0 -588
  176. package/dist/core-CRWvbE7W.d.ts.map +0 -1
  177. package/dist/core-CnZQDCJ1.js.map +0 -1
  178. package/dist/dynamic.d.ts.map +0 -1
  179. package/dist/dynamic.js.map +0 -1
  180. package/dist/load-from-file-BctwhOUd.js +0 -3
  181. package/dist/load-from-file-XiM8eZha.js.map +0 -1
  182. package/dist/loader-BHMDOncZ.js +0 -4
  183. package/dist/loader-C7W_Rwj8.js.map +0 -1
  184. package/dist/loader-DLSJPUiO.js +0 -69
  185. package/dist/loader-DLSJPUiO.js.map +0 -1
  186. package/dist/loader-DkmGoUvo.js +0 -4
  187. package/dist/next/index.cjs +0 -497
  188. package/dist/node-CVAU22o3.js.map +0 -1
  189. package/dist/pipe-UEMV1mRg.js +0 -31
  190. package/dist/pipe-UEMV1mRg.js.map +0 -1
  191. package/dist/plugins/git.js.map +0 -1
  192. package/dist/plugins/with-loader/index.d.ts +0 -2
  193. package/dist/plugins/with-loader/index.js +0 -28
  194. package/dist/plugins/with-loader/index.js.map +0 -1
  195. package/dist/plugins/with-loader/webpack.d.ts +0 -19
  196. package/dist/plugins/with-loader/webpack.d.ts.map +0 -1
  197. package/dist/plugins/with-loader/webpack.js +0 -43
  198. package/dist/plugins/with-loader/webpack.js.map +0 -1
  199. package/dist/store-BtGmZUAC.d.ts +0 -31
  200. package/dist/store-BtGmZUAC.d.ts.map +0 -1
  201. package/dist/store-D166MOLw.js.map +0 -1
  202. package/dist/vite-6awgG092.js.map +0 -1
@@ -0,0 +1,87 @@
1
+ import { c as Plugin, h as CollectionHook, l as PluginContext } from "./core-BO3b8jMg.js";
2
+ import { t as DynamicCore } from "./dynamic-CTYYdl7_.js";
3
+ import { NextConfig } from "next";
4
+ import { LoaderContext } from "webpack";
5
+
6
+ //#region src/plugins/loader/webpack.d.ts
7
+ interface WebpackLoaderOptions {
8
+ absoluteCompiledConfigPath: string;
9
+ configPath: string;
10
+ outDir: string;
11
+ isDev: boolean;
12
+ }
13
+ type WebpackLoader = (this: LoaderContext<WebpackLoaderOptions>, source: string) => void;
14
+ /**
15
+ * Note: need to handle the `test` regex in Webpack config instead.
16
+ */
17
+ declare function createWebpackLoader(loaderFactory: (core: DynamicCore) => Loader): WebpackLoader;
18
+ //#endregion
19
+ //#region src/plugins/loader/index.d.ts
20
+ type Awaitable<T> = T | Promise<T>;
21
+ interface CompilerOptions {
22
+ addDependency: (file: string) => void;
23
+ }
24
+ type LoaderEnvironment = "vite" | "bun" | "node";
25
+ interface Loader {
26
+ /**
27
+ * Transform input into JavaScript.
28
+ *
29
+ * Returns:
30
+ * - `LoaderOutput`: JavaScript code & source map.
31
+ * - `null`: skip the loader. Fallback to default behaviour if possible, otherwise the adapter will try workarounds.
32
+ */
33
+ load: (input: LoaderInput) => Awaitable<LoaderOutput | null>;
34
+ bun?: {
35
+ /**
36
+ * 1. Bun doesn't allow `null` in loaders.
37
+ * 2. Bun requires sync result to support dynamic require().
38
+ */
39
+ load?: (source: string, input: LoaderInput) => Awaitable<Bun.OnLoadResult>;
40
+ };
41
+ }
42
+ interface LoaderInput {
43
+ development: boolean;
44
+ compiler: CompilerOptions;
45
+ filePath: string;
46
+ query: Record<string, string | string[] | undefined>;
47
+ getSource: () => string | Promise<string>;
48
+ }
49
+ interface LoaderOutput {
50
+ code: string;
51
+ map?: unknown;
52
+ /**
53
+ * only supported on Vite 8 at the moment, specify the output module type.
54
+ *
55
+ * on unsupported environments, it will be ignored.
56
+ */
57
+ moduleType?: "js" | "json";
58
+ }
59
+ interface NextLoaderContext extends PluginContext {
60
+ getLoaderOptions: () => WebpackLoaderOptions;
61
+ }
62
+ interface LoaderConfig {
63
+ /** unique ID for loader, used to deduplicate loaders */
64
+ id?: string;
65
+ /**
66
+ * Filter file paths, the input can be either a file URL or file path.
67
+ *
68
+ * Must take resource query into consideration.
69
+ */
70
+ test?: RegExp;
71
+ /**
72
+ * @remarks it doesn't configure automatically for Next.js, you have to define the webpack/turbopack config in `configureNext()`.
73
+ */
74
+ createLoader: (this: PluginContext, environment: LoaderEnvironment) => Promise<Loader>;
75
+ configureNext?: (this: NextLoaderContext, next: NextConfig) => NextConfig;
76
+ }
77
+ /**
78
+ * a light layer for implementing loaders.
79
+ */
80
+ declare function loaderPlugin(): Plugin;
81
+ interface LoaderHook {
82
+ loaders: LoaderConfig[];
83
+ }
84
+ declare const loaderHook: CollectionHook<LoaderHook, undefined>;
85
+ //#endregion
86
+ export { LoaderInput as a, loaderPlugin as c, createWebpackLoader as d, LoaderHook as i, WebpackLoader as l, Loader as n, LoaderOutput as o, LoaderConfig as r, loaderHook as s, CompilerOptions as t, WebpackLoaderOptions as u };
87
+ //# sourceMappingURL=index-Da88Sj8w.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-Da88Sj8w.d.ts","names":[],"sources":["../src/plugins/loader/webpack.ts","../src/plugins/loader/index.ts"],"sourcesContent":[],"mappings":";;;;;;UAQiB,oBAAA;;;EAAA,MAAA,EAAA,MAAA;EAOL,KAAA,EAAA,OAAA;AAqBZ;AAA0D,KArB9C,aAAA,GAqB8C,CAAA,IAAA,EArBvB,aAqBuB,CArBT,oBAqBS,CAAA,EAAA,MAAA,EAAA,MAAA,EAAA,GAAA,IAAA;;;;iBAA1C,mBAAA,uBAA0C,gBAAgB,SAAS;;;KC7B9E,eAAe,IAAI,QAAQ;UAEf,eAAA;;ADDjB;AAOA,KCFK,iBAAA,GDEoB,MAAA,GAAwB,KAAA,GAAA,MAAA;AAqBjC,UCrBC,MAAA,CDqBD;EAA0C;;;;;;;EC7BrD,IAAA,EAAA,CAAA,KAAS,EAgBE,WAhBF,EAAA,GAgBkB,SAhBlB,CAgB4B,YAhB5B,GAAA,IAAA,CAAA;EAAM,GAAA,CAAA,EAAA;IAAY;;;AAEhC;IAIK,IAAA,CAAA,EAAA,CAAA,MAAA,EAAiB,MAAA,EAAA,KAAA,EAiBa,WAjBb,EAAA,GAiB6B,SAjB7B,CAiBuC,GAAA,CAAI,YAjB3C,CAAA;EAEL,CAAA;;AAQyB,UAWzB,WAAA,CAXyB;EAAV,WAAA,EAAA,OAAA;EAOG,QAAA,EAMvB,eANuB;EAA0B,QAAI,EAAA,MAAA;EAAd,KAAA,EAS1C,MAT0C,CAAA,MAAA,EAAA,MAAA,GAAA,MAAA,EAAA,GAAA,SAAA,CAAA;EAAS,SAAA,EAAA,GAAA,GAAA,MAAA,GAUhC,OAVgC,CAAA,MAAA,CAAA;AAI5D;AAEY,UAOK,YAAA,CAPL;EAGH,IAAA,EAAA,MAAA;EACmB,GAAA,CAAA,EAAA,OAAA;EAAO;AAGnC;AAUC;AAMD;;EAcuB,UAAA,CAAA,EAAA,IAAA,GAAA,MAAA;;UAlBb,iBAAA,SAA0B,aAkB6C,CAAA;EAAR,gBAAA,EAAA,GAAA,GAjB/C,oBAiB+C;;AACvB,UAfjC,YAAA,CAeiC;EAAe;EAAU,EAAA,CAAA,EAAA,MAAA;EAY3D;AAqFhB;AAIA;;;SA3GS;;;;uBAKc,4BAA4B,sBAAsB,QAAQ;yBACxD,yBAAyB,eAAe;;;;;iBAYjD,YAAA,CAAA,GAAgB;UAqFf,UAAA;WACN;;cAGE,YAAU,eAAA"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { G as Awaitable, H as Pipe, K as CollectionWithHandler, U as asyncPipe, V as AsyncPipe, W as pipe, a as EmitEntry, c as Plugin, d as ResolvedConfig, f as ResolvedCoreOptions, i as EmitContext, l as PluginContext, n as CoreOptions, o as EmitOptions, p as ServerContext, q as GetCollectionConfig, r as EmitCodeGeneratorContext, s as EmitOutput, t as Core, u as PluginOption } from "./core-CRWvbE7W.js";
1
+ import { C as Hook, D as GetCollectionConfig, S as AsyncHook, T as hook, a as EmitEntry, b as asyncPipe, c as Plugin, d as ResolvedConfig, f as ResolvedCoreOptions, i as EmitContext, l as PluginContext, n as CoreOptions, o as EmitOptions, p as ServerContext, r as EmitCodeGeneratorContext, s as EmitOutput, t as Core, u as PluginOption, v as AsyncPipe, w as asyncHook, x as pipe, y as Pipe } from "./core-BO3b8jMg.js";
2
2
  import { StandardSchemaV1 } from "@standard-schema/spec";
3
3
 
4
4
  //#region src/utils/validation.d.ts
@@ -14,5 +14,5 @@ declare function validate<Schema extends StandardSchemaV1, Context>(schema: Stan
14
14
  */
15
15
  declare function getJSONSchema(schema: StandardSchemaV1): Record<string, unknown> | undefined;
16
16
  //#endregion
17
- export { AsyncPipe, Awaitable, CollectionWithHandler, Core, CoreOptions, EmitCodeGeneratorContext, EmitContext, EmitEntry, EmitOptions, EmitOutput, GetCollectionConfig, Pipe, Plugin, PluginContext, PluginOption, ResolvedConfig, ResolvedCoreOptions, ServerContext, ValidationError, asyncPipe, getJSONSchema, pipe, validate };
17
+ export { AsyncHook, AsyncPipe, Core, CoreOptions, EmitCodeGeneratorContext, EmitContext, EmitEntry, EmitOptions, EmitOutput, type GetCollectionConfig, Hook, Pipe, Plugin, PluginContext, PluginOption, ResolvedConfig, ResolvedCoreOptions, ServerContext, ValidationError, asyncHook, asyncPipe, getJSONSchema, hook, pipe, validate };
18
18
  //# sourceMappingURL=index.d.ts.map
package/dist/index.js CHANGED
@@ -1,6 +1,5 @@
1
- import "./code-generator-BvuyL0UO.js";
2
- import { t as Core } from "./core-CnZQDCJ1.js";
3
- import { n as pipe, t as asyncPipe } from "./pipe-UEMV1mRg.js";
4
- import { n as getJSONSchema, r as validate, t as ValidationError } from "./validation-BYUzZIfc.js";
1
+ import { a as asyncHook, i as pipe, o as hook, r as asyncPipe } from "./collections-DNFRdCuB.js";
2
+ import { t as Core } from "./core-D5QHSKk6.js";
3
+ import { n as getJSONSchema, r as validate, t as ValidationError } from "./validation-BvVvvLII.js";
5
4
 
6
- export { Core, ValidationError, asyncPipe, getJSONSchema, pipe, validate };
5
+ export { Core, ValidationError, asyncHook, asyncPipe, getJSONSchema, hook, pipe, validate };
@@ -0,0 +1,3 @@
1
+ import { t as loadConfig } from "./load-from-file-irx0JI6j.js";
2
+
3
+ export { loadConfig };
@@ -22,16 +22,14 @@ async function compileConfig(core) {
22
22
  }
23
23
  /**
24
24
  * Load config
25
- *
26
- * @param build - By default, it assumes the config file has been compiled. Set this `true` to compile the config first.
27
25
  */
28
- async function loadConfig(core, build = false) {
29
- if (build) await compileConfig(core);
30
- const url = pathToFileURL(core.getCompiledConfigPath());
26
+ async function loadConfig(core, compileMode) {
27
+ if (compileMode === true) await compileConfig(core);
28
+ const url = compileMode === false ? pathToFileURL(core.getOptions().configPath) : pathToFileURL(core.getCompiledConfigPath());
31
29
  url.searchParams.set("hash", Date.now().toString());
32
30
  return import(url.href);
33
31
  }
34
32
 
35
33
  //#endregion
36
34
  export { loadConfig as t };
37
- //# sourceMappingURL=load-from-file-XiM8eZha.js.map
35
+ //# sourceMappingURL=load-from-file-irx0JI6j.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load-from-file-irx0JI6j.js","names":[],"sources":["../src/config/load-from-file.ts"],"sourcesContent":["import { pathToFileURL } from \"node:url\";\nimport type { Core } from \"@/core\";\n\n/**\n * - `true`: compile the config before loading.\n * - `false`: import the config directly (without compiling it).\n * - `skip`: assume the config is already compiled.\n */\nexport type CompileMode = boolean | \"skip\";\n\nasync function compileConfig(core: Core) {\n const { build } = await import(\"esbuild\");\n const { configPath, outDir } = core.getOptions();\n\n const transformed = await build({\n entryPoints: [{ in: configPath, out: \"content.config\" }],\n bundle: true,\n outdir: outDir,\n target: \"node20\",\n write: true,\n platform: \"node\",\n format: \"esm\",\n packages: \"external\",\n outExtension: {\n \".js\": \".mjs\",\n },\n allowOverwrite: true,\n });\n\n if (transformed.errors.length > 0) {\n throw new Error(\"failed to compile configuration file\");\n }\n}\n\n/**\n * Load config\n */\nexport async function loadConfig(\n core: Core,\n compileMode: CompileMode,\n): Promise<Record<string, unknown>> {\n if (compileMode === true) await compileConfig(core);\n\n const url =\n compileMode === false\n ? pathToFileURL(core.getOptions().configPath)\n : pathToFileURL(core.getCompiledConfigPath());\n // always return a new config\n url.searchParams.set(\"hash\", Date.now().toString());\n\n return import(url.href);\n}\n"],"mappings":";;;AAUA,eAAe,cAAc,MAAY;CACvC,MAAM,EAAE,UAAU,MAAM,OAAO;CAC/B,MAAM,EAAE,YAAY,WAAW,KAAK,YAAY;AAiBhD,MAfoB,MAAM,MAAM;EAC9B,aAAa,CAAC;GAAE,IAAI;GAAY,KAAK;GAAkB,CAAC;EACxD,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;EACP,UAAU;EACV,QAAQ;EACR,UAAU;EACV,cAAc,EACZ,OAAO,QACR;EACD,gBAAgB;EACjB,CAAC,EAEc,OAAO,SAAS,EAC9B,OAAM,IAAI,MAAM,uCAAuC;;;;;AAO3D,eAAsB,WACpB,MACA,aACkC;AAClC,KAAI,gBAAgB,KAAM,OAAM,cAAc,KAAK;CAEnD,MAAM,MACJ,gBAAgB,QACZ,cAAc,KAAK,YAAY,CAAC,WAAW,GAC3C,cAAc,KAAK,uBAAuB,CAAC;AAEjD,KAAI,aAAa,IAAI,QAAQ,KAAK,KAAK,CAAC,UAAU,CAAC;AAEnD,QAAO,OAAO,IAAI"}
@@ -0,0 +1,9 @@
1
+ import "./validation-BvVvvLII.js";
2
+ import "./loader-BuR4gkKg.js";
3
+ import "./fs-WWbLA7Gx.js";
4
+ import "./git-CQWA37-X.js";
5
+ import "./mdx-iZ2uP27Z.js";
6
+ import "./fuma-matter-BuBO2w-p.js";
7
+ import { t as createMdxLoader } from "./loader-D6StkShK.js";
8
+
9
+ export { createMdxLoader };
@@ -0,0 +1,16 @@
1
+ import { t as createDataLoader } from "./loader-BzQpSBvP.js";
2
+
3
+ //#region src/collections/json/loader.ts
4
+ function createJsonLoader(core, resolveJson = "js") {
5
+ return createDataLoader(core, (filePath, source) => {
6
+ try {
7
+ return JSON.parse(source);
8
+ } catch (e) {
9
+ throw new Error(`invalid data in ${filePath}`, { cause: e });
10
+ }
11
+ }, resolveJson);
12
+ }
13
+
14
+ //#endregion
15
+ export { createJsonLoader as t };
16
+ //# sourceMappingURL=loader-BhXHF8vy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader-BhXHF8vy.js","names":[],"sources":["../src/collections/json/loader.ts"],"sourcesContent":["import type { Loader } from \"@/plugins/loader\";\nimport type { DynamicCore } from \"@/dynamic\";\nimport { createDataLoader } from \"../data/loader\";\n\nexport function createJsonLoader(core: DynamicCore, resolveJson: \"json\" | \"js\" = \"js\"): Loader {\n return createDataLoader(\n core,\n (filePath, source) => {\n try {\n return JSON.parse(source);\n } catch (e) {\n throw new Error(`invalid data in ${filePath}`, { cause: e });\n }\n },\n resolveJson,\n );\n}\n"],"mappings":";;;AAIA,SAAgB,iBAAiB,MAAmB,cAA6B,MAAc;AAC7F,QAAO,iBACL,OACC,UAAU,WAAW;AACpB,MAAI;AACF,UAAO,KAAK,MAAM,OAAO;WAClB,GAAG;AACV,SAAM,IAAI,MAAM,mBAAmB,YAAY,EAAE,OAAO,GAAG,CAAC;;IAGhE,YACD"}
@@ -0,0 +1,77 @@
1
+ import { n as defineCollectionHook } from "./collections-DNFRdCuB.js";
2
+ import { t as createCache } from "./async-cache-U87GzQTb.js";
3
+ import path from "node:path";
4
+
5
+ //#region src/plugins/loader/index.ts
6
+ /**
7
+ * a light layer for implementing loaders.
8
+ */
9
+ function loaderPlugin() {
10
+ const cachedLoaders = createCache();
11
+ function initLoaders(ctx, env) {
12
+ return cachedLoaders.cached(env, async () => {
13
+ const usedIds = /* @__PURE__ */ new Set();
14
+ const out = [];
15
+ for (const collection of ctx.core.getCollections()) {
16
+ const hook = collection.getPluginHook(loaderHook);
17
+ if (!hook) continue;
18
+ let nextId = 0;
19
+ for (const loader of hook.loaders) {
20
+ if (loader.id && usedIds.has(loader.id)) continue;
21
+ if (loader.id) usedIds.add(loader.id);
22
+ out.push({
23
+ id: loader.id ?? `${collection.name}:${nextId++}`,
24
+ test: loader.test,
25
+ loader: await loader.createLoader.call(ctx, env)
26
+ });
27
+ }
28
+ }
29
+ return out;
30
+ });
31
+ }
32
+ return {
33
+ name: "fuma-content:loader",
34
+ next: { config(config) {
35
+ const ctx = {
36
+ ...this,
37
+ getLoaderOptions: () => {
38
+ const { configPath, outDir } = this.core.getOptions();
39
+ return {
40
+ configPath,
41
+ outDir,
42
+ absoluteCompiledConfigPath: path.resolve(this.core.getCompiledConfigPath()),
43
+ isDev: process.env.NODE_ENV === "development"
44
+ };
45
+ }
46
+ };
47
+ for (const collection of this.core.getCollections()) {
48
+ const hook = collection.getPluginHook(loaderHook);
49
+ if (!hook) continue;
50
+ for (const loader of hook.loaders) {
51
+ if (!loader.configureNext) continue;
52
+ config = loader.configureNext.call(ctx, config);
53
+ }
54
+ }
55
+ return config;
56
+ } },
57
+ bun: { async setup(build) {
58
+ const { toBun } = await import("./bun-CBROq3I0.js");
59
+ for (const loader of await initLoaders(this, "bun")) toBun(loader.test, loader.loader)(build);
60
+ } },
61
+ node: { async createLoad() {
62
+ const { toNode } = await import("./node-2VZOh3P9.js");
63
+ return toNode(await initLoaders(this, "node"));
64
+ } },
65
+ vite: { async createPlugin() {
66
+ const { toVite } = await import("./vite-C1qXY47G.js");
67
+ return (await initLoaders(this, "vite")).map((loader) => {
68
+ return toVite(`fuma-content:${loader.id}`, loader.test, loader.loader);
69
+ });
70
+ } }
71
+ };
72
+ }
73
+ const loaderHook = defineCollectionHook(() => ({ loaders: [] }));
74
+
75
+ //#endregion
76
+ export { loaderPlugin as n, loaderHook as t };
77
+ //# sourceMappingURL=loader-BuR4gkKg.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader-BuR4gkKg.js","names":["out: ResolvedLoader[]","ctx: NextLoaderContext"],"sources":["../src/plugins/loader/index.ts"],"sourcesContent":["import { defineCollectionHook } from \"@/collections\";\nimport type { Plugin, PluginContext } from \"@/core\";\nimport { createCache } from \"@/utils/async-cache\";\nimport { NextConfig } from \"next\";\nimport { WebpackLoaderOptions } from \"./webpack.js\";\nimport path from \"node:path\";\n\ntype Awaitable<T> = T | Promise<T>;\n\nexport interface CompilerOptions {\n addDependency: (file: string) => void;\n}\n\ntype LoaderEnvironment = \"vite\" | \"bun\" | \"node\";\n\nexport interface Loader {\n /**\n * Transform input into JavaScript.\n *\n * Returns:\n * - `LoaderOutput`: JavaScript code & source map.\n * - `null`: skip the loader. Fallback to default behaviour if possible, otherwise the adapter will try workarounds.\n */\n load: (input: LoaderInput) => Awaitable<LoaderOutput | null>;\n\n bun?: {\n /**\n * 1. Bun doesn't allow `null` in loaders.\n * 2. Bun requires sync result to support dynamic require().\n */\n load?: (source: string, input: LoaderInput) => Awaitable<Bun.OnLoadResult>;\n };\n}\n\nexport interface LoaderInput {\n development: boolean;\n compiler: CompilerOptions;\n\n filePath: string;\n query: Record<string, string | string[] | undefined>;\n getSource: () => string | Promise<string>;\n}\n\nexport interface LoaderOutput {\n code: string;\n map?: unknown;\n\n /**\n * only supported on Vite 8 at the moment, specify the output module type.\n *\n * on unsupported environments, it will be ignored.\n */\n moduleType?: \"js\" | \"json\";\n}\n\ninterface NextLoaderContext extends PluginContext {\n getLoaderOptions: () => WebpackLoaderOptions;\n}\n\nexport interface LoaderConfig {\n /** unique ID for loader, used to deduplicate loaders */\n id?: string;\n\n /**\n * Filter file paths, the input can be either a file URL or file path.\n *\n * Must take resource query into consideration.\n */\n test?: RegExp;\n\n /**\n * @remarks it doesn't configure automatically for Next.js, you have to define the webpack/turbopack config in `configureNext()`.\n */\n createLoader: (this: PluginContext, environment: LoaderEnvironment) => Promise<Loader>;\n configureNext?: (this: NextLoaderContext, next: NextConfig) => NextConfig;\n}\n\ninterface ResolvedLoader {\n id: string;\n test: RegExp | undefined;\n loader: Loader;\n}\n\n/**\n * a light layer for implementing loaders.\n */\nexport function loaderPlugin(): Plugin {\n // env -> loaders\n const cachedLoaders = createCache<ResolvedLoader[]>();\n\n function initLoaders(ctx: PluginContext, env: LoaderEnvironment) {\n return cachedLoaders.cached(env, async () => {\n const usedIds = new Set<string>();\n const out: ResolvedLoader[] = [];\n\n for (const collection of ctx.core.getCollections()) {\n const hook = collection.getPluginHook(loaderHook);\n if (!hook) continue;\n\n let nextId = 0;\n for (const loader of hook.loaders) {\n if (loader.id && usedIds.has(loader.id)) continue;\n if (loader.id) usedIds.add(loader.id);\n\n out.push({\n id: loader.id ?? `${collection.name}:${nextId++}`,\n test: loader.test,\n loader: await loader.createLoader.call(ctx, env),\n });\n }\n }\n return out;\n });\n }\n\n return {\n name: \"fuma-content:loader\",\n next: {\n config(config) {\n const ctx: NextLoaderContext = {\n ...this,\n getLoaderOptions: () => {\n const { configPath, outDir } = this.core.getOptions();\n return {\n configPath,\n outDir,\n absoluteCompiledConfigPath: path.resolve(this.core.getCompiledConfigPath()),\n isDev: process.env.NODE_ENV === \"development\",\n };\n },\n };\n for (const collection of this.core.getCollections()) {\n const hook = collection.getPluginHook(loaderHook);\n if (!hook) continue;\n\n for (const loader of hook.loaders) {\n if (!loader.configureNext) continue;\n\n config = loader.configureNext.call(ctx, config);\n }\n }\n\n return config;\n },\n },\n bun: {\n async setup(build) {\n const { toBun } = await import(\"./bun\");\n\n for (const loader of await initLoaders(this, \"bun\")) {\n toBun(loader.test, loader.loader)(build);\n }\n },\n },\n node: {\n async createLoad() {\n const { toNode } = await import(\"./node\");\n return toNode(await initLoaders(this, \"node\"));\n },\n },\n vite: {\n async createPlugin() {\n const { toVite } = await import(\"./vite\");\n return (await initLoaders(this, \"vite\")).map((loader) => {\n return toVite(`fuma-content:${loader.id}`, loader.test, loader.loader);\n });\n },\n },\n };\n}\n\nexport interface LoaderHook {\n loaders: LoaderConfig[];\n}\n\nexport const loaderHook = defineCollectionHook<LoaderHook>(() => ({\n loaders: [],\n}));\n"],"mappings":";;;;;;;;AAsFA,SAAgB,eAAuB;CAErC,MAAM,gBAAgB,aAA+B;CAErD,SAAS,YAAY,KAAoB,KAAwB;AAC/D,SAAO,cAAc,OAAO,KAAK,YAAY;GAC3C,MAAM,0BAAU,IAAI,KAAa;GACjC,MAAMA,MAAwB,EAAE;AAEhC,QAAK,MAAM,cAAc,IAAI,KAAK,gBAAgB,EAAE;IAClD,MAAM,OAAO,WAAW,cAAc,WAAW;AACjD,QAAI,CAAC,KAAM;IAEX,IAAI,SAAS;AACb,SAAK,MAAM,UAAU,KAAK,SAAS;AACjC,SAAI,OAAO,MAAM,QAAQ,IAAI,OAAO,GAAG,CAAE;AACzC,SAAI,OAAO,GAAI,SAAQ,IAAI,OAAO,GAAG;AAErC,SAAI,KAAK;MACP,IAAI,OAAO,MAAM,GAAG,WAAW,KAAK,GAAG;MACvC,MAAM,OAAO;MACb,QAAQ,MAAM,OAAO,aAAa,KAAK,KAAK,IAAI;MACjD,CAAC;;;AAGN,UAAO;IACP;;AAGJ,QAAO;EACL,MAAM;EACN,MAAM,EACJ,OAAO,QAAQ;GACb,MAAMC,MAAyB;IAC7B,GAAG;IACH,wBAAwB;KACtB,MAAM,EAAE,YAAY,WAAW,KAAK,KAAK,YAAY;AACrD,YAAO;MACL;MACA;MACA,4BAA4B,KAAK,QAAQ,KAAK,KAAK,uBAAuB,CAAC;MAC3E,OAAO,QAAQ,IAAI,aAAa;MACjC;;IAEJ;AACD,QAAK,MAAM,cAAc,KAAK,KAAK,gBAAgB,EAAE;IACnD,MAAM,OAAO,WAAW,cAAc,WAAW;AACjD,QAAI,CAAC,KAAM;AAEX,SAAK,MAAM,UAAU,KAAK,SAAS;AACjC,SAAI,CAAC,OAAO,cAAe;AAE3B,cAAS,OAAO,cAAc,KAAK,KAAK,OAAO;;;AAInD,UAAO;KAEV;EACD,KAAK,EACH,MAAM,MAAM,OAAO;GACjB,MAAM,EAAE,UAAU,MAAM,OAAO;AAE/B,QAAK,MAAM,UAAU,MAAM,YAAY,MAAM,MAAM,CACjD,OAAM,OAAO,MAAM,OAAO,OAAO,CAAC,MAAM;KAG7C;EACD,MAAM,EACJ,MAAM,aAAa;GACjB,MAAM,EAAE,WAAW,MAAM,OAAO;AAChC,UAAO,OAAO,MAAM,YAAY,MAAM,OAAO,CAAC;KAEjD;EACD,MAAM,EACJ,MAAM,eAAe;GACnB,MAAM,EAAE,WAAW,MAAM,OAAO;AAChC,WAAQ,MAAM,YAAY,MAAM,OAAO,EAAE,KAAK,WAAW;AACvD,WAAO,OAAO,gBAAgB,OAAO,MAAM,OAAO,MAAM,OAAO,OAAO;KACtE;KAEL;EACF;;AAOH,MAAa,aAAa,4BAAwC,EAChE,SAAS,EAAE,EACZ,EAAE"}
@@ -0,0 +1,59 @@
1
+ import { r as validate } from "./validation-BvVvvLII.js";
2
+ import { t as DataCollection } from "./data-9h98oZwj.js";
3
+ import { z } from "zod";
4
+
5
+ //#region src/collections/data/loader.ts
6
+ const querySchema = z.object({
7
+ collection: z.string().optional(),
8
+ workspace: z.string().optional()
9
+ }).loose();
10
+ /**
11
+ * load data files, fallback to bundler's built-in plugins when ?collection is unspecified.
12
+ */
13
+ function createDataLoader({ getCore }, parse, moduleType = "js") {
14
+ function getCollectionProcessor({ filePath, query }) {
15
+ const parsed = querySchema.safeParse(query);
16
+ if (!parsed.success || !parsed.data.collection) return null;
17
+ const { collection: collectionName, workspace } = parsed.data;
18
+ return async (source) => {
19
+ let core = await getCore();
20
+ if (workspace) core = core.getWorkspaces().get(workspace) ?? core;
21
+ let collection = core.getCollection(collectionName);
22
+ let data = parse(filePath, source);
23
+ if (!collection || !(collection instanceof DataCollection)) return data;
24
+ const context = {
25
+ path: filePath,
26
+ source
27
+ };
28
+ if (collection.schema) data = await validate(collection.schema, data, context, `invalid data in ${filePath}`);
29
+ return collection.onLoad.run(data, context);
30
+ };
31
+ }
32
+ return {
33
+ async load(input) {
34
+ const processor = getCollectionProcessor(input);
35
+ if (processor === null) return null;
36
+ const data = await processor(await input.getSource());
37
+ if (moduleType === "json") return {
38
+ code: JSON.stringify(data),
39
+ moduleType
40
+ };
41
+ else return { code: `export default ${JSON.stringify(data)}` };
42
+ },
43
+ bun: { load(source, input) {
44
+ const processor = getCollectionProcessor(input);
45
+ if (processor === null) return {
46
+ loader: "object",
47
+ exports: parse(input.filePath, source)
48
+ };
49
+ return processor(source).then((data) => ({
50
+ loader: "object",
51
+ exports: { default: data }
52
+ }));
53
+ } }
54
+ };
55
+ }
56
+
57
+ //#endregion
58
+ export { createDataLoader as t };
59
+ //# sourceMappingURL=loader-BzQpSBvP.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader-BzQpSBvP.js","names":["data: unknown","context: DataTransformationContext"],"sources":["../src/collections/data/loader.ts"],"sourcesContent":["import type { Loader, LoaderInput } from \"@/plugins/loader\";\nimport { z } from \"zod\";\nimport { validate } from \"@/utils/validation\";\nimport { DataCollection, type DataTransformationContext } from \"@/collections/data\";\nimport type { DynamicCore } from \"@/dynamic\";\n\nconst querySchema = z\n .object({\n collection: z.string().optional(),\n workspace: z.string().optional(),\n })\n .loose();\n\n/**\n * load data files, fallback to bundler's built-in plugins when ?collection is unspecified.\n */\nexport function createDataLoader(\n { getCore }: DynamicCore,\n parse: (filePath: string, source: string) => Record<string, unknown>,\n moduleType: \"json\" | \"js\" = \"js\",\n): Loader {\n function getCollectionProcessor({ filePath, query }: LoaderInput) {\n const parsed = querySchema.safeParse(query);\n if (!parsed.success || !parsed.data.collection) return null;\n const { collection: collectionName, workspace } = parsed.data;\n\n return async (source: string): Promise<unknown> => {\n let core = await getCore();\n if (workspace) {\n core = core.getWorkspaces().get(workspace) ?? core;\n }\n\n let collection = core.getCollection(collectionName);\n let data: unknown = parse(filePath, source);\n if (!collection || !(collection instanceof DataCollection)) return data;\n\n const context: DataTransformationContext = {\n path: filePath,\n source,\n };\n\n if (collection.schema) {\n data = await validate(collection.schema, data, context, `invalid data in ${filePath}`);\n }\n\n return collection.onLoad.run(data, context);\n };\n }\n\n return {\n async load(input) {\n const processor = getCollectionProcessor(input);\n if (processor === null) return null;\n const data = await processor(await input.getSource());\n\n if (moduleType === \"json\") {\n return {\n code: JSON.stringify(data),\n moduleType,\n };\n } else {\n return {\n code: `export default ${JSON.stringify(data)}`,\n };\n }\n },\n bun: {\n load(source, input) {\n const processor = getCollectionProcessor(input);\n if (processor === null)\n return {\n loader: \"object\",\n exports: parse(input.filePath, source),\n };\n\n return processor(source).then((data) => ({\n loader: \"object\",\n exports: { default: data },\n }));\n },\n },\n };\n}\n"],"mappings":";;;;;AAMA,MAAM,cAAc,EACjB,OAAO;CACN,YAAY,EAAE,QAAQ,CAAC,UAAU;CACjC,WAAW,EAAE,QAAQ,CAAC,UAAU;CACjC,CAAC,CACD,OAAO;;;;AAKV,SAAgB,iBACd,EAAE,WACF,OACA,aAA4B,MACpB;CACR,SAAS,uBAAuB,EAAE,UAAU,SAAsB;EAChE,MAAM,SAAS,YAAY,UAAU,MAAM;AAC3C,MAAI,CAAC,OAAO,WAAW,CAAC,OAAO,KAAK,WAAY,QAAO;EACvD,MAAM,EAAE,YAAY,gBAAgB,cAAc,OAAO;AAEzD,SAAO,OAAO,WAAqC;GACjD,IAAI,OAAO,MAAM,SAAS;AAC1B,OAAI,UACF,QAAO,KAAK,eAAe,CAAC,IAAI,UAAU,IAAI;GAGhD,IAAI,aAAa,KAAK,cAAc,eAAe;GACnD,IAAIA,OAAgB,MAAM,UAAU,OAAO;AAC3C,OAAI,CAAC,cAAc,EAAE,sBAAsB,gBAAiB,QAAO;GAEnE,MAAMC,UAAqC;IACzC,MAAM;IACN;IACD;AAED,OAAI,WAAW,OACb,QAAO,MAAM,SAAS,WAAW,QAAQ,MAAM,SAAS,mBAAmB,WAAW;AAGxF,UAAO,WAAW,OAAO,IAAI,MAAM,QAAQ;;;AAI/C,QAAO;EACL,MAAM,KAAK,OAAO;GAChB,MAAM,YAAY,uBAAuB,MAAM;AAC/C,OAAI,cAAc,KAAM,QAAO;GAC/B,MAAM,OAAO,MAAM,UAAU,MAAM,MAAM,WAAW,CAAC;AAErD,OAAI,eAAe,OACjB,QAAO;IACL,MAAM,KAAK,UAAU,KAAK;IAC1B;IACD;OAED,QAAO,EACL,MAAM,kBAAkB,KAAK,UAAU,KAAK,IAC7C;;EAGL,KAAK,EACH,KAAK,QAAQ,OAAO;GAClB,MAAM,YAAY,uBAAuB,MAAM;AAC/C,OAAI,cAAc,KAChB,QAAO;IACL,QAAQ;IACR,SAAS,MAAM,MAAM,UAAU,OAAO;IACvC;AAEH,UAAO,UAAU,OAAO,CAAC,MAAM,UAAU;IACvC,QAAQ;IACR,SAAS,EAAE,SAAS,MAAM;IAC3B,EAAE;KAEN;EACF"}
@@ -1,4 +1,5 @@
1
- import { t as fumaMatter } from "./fuma-matter-D3kkMkdj.js";
1
+ import { t as MDXCollection } from "./mdx-iZ2uP27Z.js";
2
+ import { t as fumaMatter } from "./fuma-matter-BuBO2w-p.js";
2
3
  import fs from "node:fs/promises";
3
4
  import path from "node:path";
4
5
  import { z } from "zod";
@@ -37,9 +38,9 @@ function createMdxLoader({ getCore }) {
37
38
  }));
38
39
  };
39
40
  }
40
- const collection = collectionName ? core.getCollection(collectionName) : void 0;
41
- const handler = collection?.handlers.mdx;
42
- if (collection && handler?.frontmatter) matter.data = await handler.frontmatter.run(matter.data, {
41
+ let collection = collectionName ? core.getCollection(collectionName) : void 0;
42
+ if (!(collection instanceof MDXCollection)) collection = void 0;
43
+ if (collection?.frontmatter) matter.data = await collection.frontmatter.run(matter.data, {
43
44
  collection,
44
45
  filePath,
45
46
  source: value
@@ -49,7 +50,7 @@ function createMdxLoader({ getCore }) {
49
50
  map: null
50
51
  };
51
52
  const lineOffset = isDevelopment ? countLines(matter.matter) : 0;
52
- const { buildMDX } = await import("./build-mdx-CSrSOQxF.js");
53
+ const { buildMDX } = await import("./build-mdx-LhpFasX-.js");
53
54
  const compiled = await buildMDX(core, collection, {
54
55
  isDevelopment,
55
56
  source: "\n".repeat(lineOffset) + matter.content,
@@ -77,4 +78,4 @@ function countLines(s) {
77
78
 
78
79
  //#endregion
79
80
  export { createMdxLoader as t };
80
- //# sourceMappingURL=loader-C7W_Rwj8.js.map
81
+ //# sourceMappingURL=loader-D6StkShK.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader-D6StkShK.js","names":["after: (() => Promise<void>) | undefined"],"sources":["../src/collections/mdx/loader.ts"],"sourcesContent":["import { fumaMatter } from \"@/collections/mdx/fuma-matter\";\nimport type { SourceMap } from \"rollup\";\nimport { z } from \"zod\";\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { createHash } from \"node:crypto\";\nimport type { Loader } from \"@/plugins/loader\";\nimport type { DynamicCore } from \"@/dynamic\";\nimport { MDXCollection } from \"../mdx\";\n\nconst querySchema = z\n .object({\n only: z.literal([\"frontmatter\", \"all\"]).default(\"all\"),\n collection: z.string().optional(),\n workspace: z.string().optional(),\n })\n .loose();\n\nconst cacheEntry = z.object({\n code: z.string(),\n map: z.any().optional(),\n hash: z.string().optional(),\n});\n\ntype CacheEntry = z.infer<typeof cacheEntry>;\n\nexport function createMdxLoader({ getCore }: DynamicCore): Loader {\n return {\n async load({ getSource, development: isDevelopment, query, compiler, filePath }) {\n let core = await getCore();\n const value = await getSource();\n const matter = fumaMatter(value);\n const { collection: collectionName, workspace, only } = querySchema.parse(query);\n if (workspace) {\n core = core.getWorkspaces().get(workspace) ?? core;\n }\n\n let after: (() => Promise<void>) | undefined;\n\n const { experimentalBuildCache = false } = core.getConfig();\n if (!isDevelopment && experimentalBuildCache) {\n const cacheDir = experimentalBuildCache;\n const cacheKey = `${collectionName ?? \"global\"}_${generateCacheHash(filePath)}`;\n\n const cached = await fs\n .readFile(path.join(cacheDir, cacheKey))\n .then((content) => cacheEntry.parse(JSON.parse(content.toString())))\n .catch(() => null);\n\n if (cached && cached.hash === generateCacheHash(value)) return cached;\n after = async () => {\n await fs.mkdir(cacheDir, { recursive: true });\n await fs.writeFile(\n path.join(cacheDir, cacheKey),\n JSON.stringify({\n ...out,\n hash: generateCacheHash(value),\n } satisfies CacheEntry),\n );\n };\n }\n\n let collection = collectionName ? core.getCollection(collectionName) : undefined;\n if (!(collection instanceof MDXCollection)) collection = undefined;\n\n if (collection?.frontmatter) {\n matter.data = await collection.frontmatter.run(matter.data as Record<string, unknown>, {\n collection,\n filePath,\n source: value,\n });\n }\n\n if (only === \"frontmatter\") {\n return {\n code: `export const frontmatter = ${JSON.stringify(matter.data)}`,\n map: null,\n };\n }\n\n // ensure the line number is correct in dev mode\n const lineOffset = isDevelopment ? countLines(matter.matter) : 0;\n\n const { buildMDX } = await import(\"@/collections/mdx/build-mdx\");\n const compiled = await buildMDX(core, collection, {\n isDevelopment,\n source: \"\\n\".repeat(lineOffset) + matter.content,\n filePath,\n frontmatter: matter.data as Record<string, unknown>,\n _compiler: compiler,\n environment: \"bundler\",\n });\n\n const out = {\n code: String(compiled.value),\n map: compiled.map as SourceMap,\n };\n\n await after?.();\n return out;\n },\n };\n}\n\nfunction generateCacheHash(input: string): string {\n return createHash(\"md5\").update(input).digest(\"hex\");\n}\n\nfunction countLines(s: string) {\n let num = 0;\n\n for (const c of s) {\n if (c === \"\\n\") num++;\n }\n\n return num;\n}\n"],"mappings":";;;;;;;;AAUA,MAAM,cAAc,EACjB,OAAO;CACN,MAAM,EAAE,QAAQ,CAAC,eAAe,MAAM,CAAC,CAAC,QAAQ,MAAM;CACtD,YAAY,EAAE,QAAQ,CAAC,UAAU;CACjC,WAAW,EAAE,QAAQ,CAAC,UAAU;CACjC,CAAC,CACD,OAAO;AAEV,MAAM,aAAa,EAAE,OAAO;CAC1B,MAAM,EAAE,QAAQ;CAChB,KAAK,EAAE,KAAK,CAAC,UAAU;CACvB,MAAM,EAAE,QAAQ,CAAC,UAAU;CAC5B,CAAC;AAIF,SAAgB,gBAAgB,EAAE,WAAgC;AAChE,QAAO,EACL,MAAM,KAAK,EAAE,WAAW,aAAa,eAAe,OAAO,UAAU,YAAY;EAC/E,IAAI,OAAO,MAAM,SAAS;EAC1B,MAAM,QAAQ,MAAM,WAAW;EAC/B,MAAM,SAAS,WAAW,MAAM;EAChC,MAAM,EAAE,YAAY,gBAAgB,WAAW,SAAS,YAAY,MAAM,MAAM;AAChF,MAAI,UACF,QAAO,KAAK,eAAe,CAAC,IAAI,UAAU,IAAI;EAGhD,IAAIA;EAEJ,MAAM,EAAE,yBAAyB,UAAU,KAAK,WAAW;AAC3D,MAAI,CAAC,iBAAiB,wBAAwB;GAC5C,MAAM,WAAW;GACjB,MAAM,WAAW,GAAG,kBAAkB,SAAS,GAAG,kBAAkB,SAAS;GAE7E,MAAM,SAAS,MAAM,GAClB,SAAS,KAAK,KAAK,UAAU,SAAS,CAAC,CACvC,MAAM,YAAY,WAAW,MAAM,KAAK,MAAM,QAAQ,UAAU,CAAC,CAAC,CAAC,CACnE,YAAY,KAAK;AAEpB,OAAI,UAAU,OAAO,SAAS,kBAAkB,MAAM,CAAE,QAAO;AAC/D,WAAQ,YAAY;AAClB,UAAM,GAAG,MAAM,UAAU,EAAE,WAAW,MAAM,CAAC;AAC7C,UAAM,GAAG,UACP,KAAK,KAAK,UAAU,SAAS,EAC7B,KAAK,UAAU;KACb,GAAG;KACH,MAAM,kBAAkB,MAAM;KAC/B,CAAsB,CACxB;;;EAIL,IAAI,aAAa,iBAAiB,KAAK,cAAc,eAAe,GAAG;AACvE,MAAI,EAAE,sBAAsB,eAAgB,cAAa;AAEzD,MAAI,YAAY,YACd,QAAO,OAAO,MAAM,WAAW,YAAY,IAAI,OAAO,MAAiC;GACrF;GACA;GACA,QAAQ;GACT,CAAC;AAGJ,MAAI,SAAS,cACX,QAAO;GACL,MAAM,8BAA8B,KAAK,UAAU,OAAO,KAAK;GAC/D,KAAK;GACN;EAIH,MAAM,aAAa,gBAAgB,WAAW,OAAO,OAAO,GAAG;EAE/D,MAAM,EAAE,aAAa,MAAM,OAAO;EAClC,MAAM,WAAW,MAAM,SAAS,MAAM,YAAY;GAChD;GACA,QAAQ,KAAK,OAAO,WAAW,GAAG,OAAO;GACzC;GACA,aAAa,OAAO;GACpB,WAAW;GACX,aAAa;GACd,CAAC;EAEF,MAAM,MAAM;GACV,MAAM,OAAO,SAAS,MAAM;GAC5B,KAAK,SAAS;GACf;AAED,QAAM,SAAS;AACf,SAAO;IAEV;;AAGH,SAAS,kBAAkB,OAAuB;AAChD,QAAO,WAAW,MAAM,CAAC,OAAO,MAAM,CAAC,OAAO,MAAM;;AAGtD,SAAS,WAAW,GAAW;CAC7B,IAAI,MAAM;AAEV,MAAK,MAAM,KAAK,EACd,KAAI,MAAM,KAAM;AAGlB,QAAO"}
@@ -0,0 +1,8 @@
1
+ import "./validation-BvVvvLII.js";
2
+ import "./loader-BuR4gkKg.js";
3
+ import "./fs-WWbLA7Gx.js";
4
+ import "./data-9h98oZwj.js";
5
+ import "./loader-BzQpSBvP.js";
6
+ import { t as createJsonLoader } from "./loader-BhXHF8vy.js";
7
+
8
+ export { createJsonLoader };
@@ -0,0 +1,17 @@
1
+ import { t as createDataLoader } from "./loader-BzQpSBvP.js";
2
+ import { load } from "js-yaml";
3
+
4
+ //#region src/collections/yaml/loader.ts
5
+ function createYamlLoader(core) {
6
+ return createDataLoader(core, (filePath, source) => {
7
+ try {
8
+ return load(source);
9
+ } catch (e) {
10
+ throw new Error(`invalid data in ${filePath}`, { cause: e });
11
+ }
12
+ });
13
+ }
14
+
15
+ //#endregion
16
+ export { createYamlLoader as t };
17
+ //# sourceMappingURL=loader-DwpOcxgh.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader-DwpOcxgh.js","names":[],"sources":["../src/collections/yaml/loader.ts"],"sourcesContent":["import type { Loader } from \"@/plugins/loader\";\nimport { load } from \"js-yaml\";\nimport type { DynamicCore } from \"@/dynamic\";\nimport { createDataLoader } from \"../data/loader\";\n\nexport function createYamlLoader(core: DynamicCore): Loader {\n return createDataLoader(core, (filePath, source) => {\n try {\n return load(source) as Record<string, unknown>;\n } catch (e) {\n throw new Error(`invalid data in ${filePath}`, { cause: e });\n }\n });\n}\n"],"mappings":";;;;AAKA,SAAgB,iBAAiB,MAA2B;AAC1D,QAAO,iBAAiB,OAAO,UAAU,WAAW;AAClD,MAAI;AACF,UAAO,KAAK,OAAO;WACZ,GAAG;AACV,SAAM,IAAI,MAAM,mBAAmB,YAAY,EAAE,OAAO,GAAG,CAAC;;GAE9D"}
@@ -0,0 +1,8 @@
1
+ import "./validation-BvVvvLII.js";
2
+ import "./loader-BuR4gkKg.js";
3
+ import "./fs-WWbLA7Gx.js";
4
+ import "./data-9h98oZwj.js";
5
+ import "./loader-BzQpSBvP.js";
6
+ import { t as createYamlLoader } from "./loader-DwpOcxgh.js";
7
+
8
+ export { createYamlLoader };
@@ -0,0 +1,144 @@
1
+ import { E as Awaitable, m as Collection, r as EmitCodeGeneratorContext, v as AsyncPipe, y as Pipe } from "./core-BO3b8jMg.js";
2
+ import { t as CompilerOptions } from "./index-Da88Sj8w.js";
3
+ import { n as FileSystemCollectionConfig, t as FileSystemCollection } from "./fs-D34Sztbh.js";
4
+ import { ProcessorOptions, createProcessor } from "@mdx-js/mdx";
5
+ import { VFile } from "vfile";
6
+ import { Processor } from "unified";
7
+ import { StandardSchemaV1 } from "@standard-schema/spec";
8
+ import { Root } from "mdast";
9
+ import { MDXContent } from "mdx/types";
10
+
11
+ //#region src/collections/mdx/remark-postprocess.d.ts
12
+ interface ExtractedReference {
13
+ href: string;
14
+ }
15
+ interface PostprocessOptions {
16
+ _format: "md" | "mdx";
17
+ /**
18
+ * Properties to export from `vfile.data`
19
+ */
20
+ valueToExport?: string[];
21
+ /**
22
+ * stringify MDAST and export via `_markdown`.
23
+ */
24
+ includeProcessedMarkdown?: boolean | {
25
+ /**
26
+ * include heading IDs into the processed markdown.
27
+ */
28
+ headingIds?: boolean;
29
+ };
30
+ /**
31
+ * extract link references, export via `extractedReferences`.
32
+ */
33
+ extractLinkReferences?: boolean;
34
+ /**
35
+ * store MDAST and export via `_mdast`.
36
+ */
37
+ includeMDAST?: boolean | {
38
+ removePosition?: boolean;
39
+ };
40
+ }
41
+ //#endregion
42
+ //#region src/collections/mdx/remark-preprocess.d.ts
43
+ interface PreprocessOptions {
44
+ preprocessor?: Processor<Root>;
45
+ }
46
+ declare module "vfile" {
47
+ interface DataMap {
48
+ _preprocessed?: boolean;
49
+ }
50
+ }
51
+ //#endregion
52
+ //#region src/collections/mdx/build-mdx.d.ts
53
+ type MDXProcessor = ReturnType<typeof createProcessor>;
54
+ interface FumaContentDataMap {
55
+ /**
56
+ * [Fuma Content] raw frontmatter, you can modify it
57
+ */
58
+ frontmatter?: Record<string, unknown>;
59
+ /**
60
+ * [Fuma Content] additional ESM exports to write
61
+ */
62
+ "mdx-export"?: {
63
+ name: string;
64
+ value: unknown;
65
+ }[];
66
+ /**
67
+ * [Fuma Content] The compiler object from loader
68
+ */
69
+ _compiler?: CompilerOptions;
70
+ /**
71
+ * [Fuma Content] get internal processor, do not use this on user land.
72
+ */
73
+ _getProcessor?: (format: "md" | "mdx") => MDXProcessor | Promise<MDXProcessor>;
74
+ }
75
+ declare module "vfile" {
76
+ interface DataMap extends FumaContentDataMap {}
77
+ }
78
+ interface CompiledMDX<Frontmatter = Record<string, unknown>> extends Record<string, unknown> {
79
+ frontmatter: Frontmatter;
80
+ default: MDXContent;
81
+ /**
82
+ * Enable from `postprocess` option.
83
+ */
84
+ _markdown?: string;
85
+ /**
86
+ * Enable from `postprocess` option.
87
+ */
88
+ _mdast?: string;
89
+ }
90
+ //#endregion
91
+ //#region src/collections/mdx.d.ts
92
+ interface CompilationContext {
93
+ collection: Collection;
94
+ filePath: string;
95
+ source: string;
96
+ }
97
+ interface MDXCollectionConfig<FrontmatterSchema extends StandardSchemaV1 | undefined> extends Omit<FileSystemCollectionConfig, "supportedFormats"> {
98
+ postprocess?: Partial<PostprocessOptions>;
99
+ frontmatter?: FrontmatterSchema;
100
+ options?: (environment: "bundler" | "runtime") => Awaitable<ProcessorOptions>;
101
+ lazy?: boolean;
102
+ dynamic?: boolean;
103
+ }
104
+ interface InitializerCode {
105
+ fn: string;
106
+ typeParams: [config: string, name: string, attached: string];
107
+ params: string[];
108
+ }
109
+ declare class MDXCollection<FrontmatterSchema extends StandardSchemaV1 | undefined = StandardSchemaV1 | undefined> extends FileSystemCollection {
110
+ readonly dynamic: boolean;
111
+ readonly lazy: boolean;
112
+ readonly preprocess?: PreprocessOptions;
113
+ readonly postprocess?: Partial<PostprocessOptions>;
114
+ readonly getMDXOptions?: (environment: "bundler" | "runtime") => Awaitable<ProcessorOptions>;
115
+ /**
116
+ * Frontmatter schema
117
+ */
118
+ frontmatterSchema?: FrontmatterSchema;
119
+ /**
120
+ * Transform & validate frontmatter
121
+ */
122
+ frontmatter: AsyncPipe<Record<string, unknown> | undefined, CompilationContext>;
123
+ /**
124
+ * Transform `vfile` on compilation stage
125
+ */
126
+ vfile: AsyncPipe<VFile, CompilationContext>;
127
+ /**
128
+ * Transform the generated initializer code (TypeScript) for collection store
129
+ */
130
+ storeInitializer: Pipe<InitializerCode, EmitCodeGeneratorContext & {
131
+ environment: "browser" | "server" | "dynamic";
132
+ }>;
133
+ $inferFrontmatter: FrontmatterSchema extends StandardSchemaV1 ? StandardSchemaV1.InferOutput<FrontmatterSchema> : Record<string, unknown>;
134
+ constructor(config: MDXCollectionConfig<FrontmatterSchema>);
135
+ private generateDocCollectionFrontmatterGlob;
136
+ private generateDocCollectionGlob;
137
+ private generateCollectionStoreServer;
138
+ private generateCollectionStoreBrowser;
139
+ private generateCollectionStoreDynamic;
140
+ }
141
+ declare function mdxCollection<FrontmatterSchema extends StandardSchemaV1 | undefined = undefined>(config: MDXCollectionConfig<FrontmatterSchema>): MDXCollection<FrontmatterSchema>;
142
+ //#endregion
143
+ export { ExtractedReference as a, CompiledMDX as i, MDXCollectionConfig as n, mdxCollection as r, MDXCollection as t };
144
+ //# sourceMappingURL=mdx-Dt9hirUu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mdx-Dt9hirUu.d.ts","names":[],"sources":["../src/collections/mdx/remark-postprocess.ts","../src/collections/mdx/remark-preprocess.ts","../src/collections/mdx/build-mdx.ts","../src/collections/mdx.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;;UASiB,kBAAA;;;UAIA,kBAAA;;;;;;EAJA;AAIjB;;;;ACVA;AAEC;IAAA,UAAA,CAAA,EAAA,OAAA;;EAAA;;;;;ACKsC;AAiBvC;EAIgB,YAAA,CAAA,EAAA,OAAA,GAAA;IAUF,cAAA,CAAA,EAAA,OAAA;EAK8B,CAAA;;;;UD3C3B,iBAAA;iBACA,UAAU;;;;;;;;;KCQtB,YAAA,GAAe,kBAAkB;ADPrC,UCsBgB,kBAAA,CDtBhB;;;;gBC0Be;;;AArBuB;EAiBtB,YAAA,CAAA,EAAA;IAID,IAAA,EAAA,MAAA;IAUF,KAAA,EAAA,OAAA;EAK8B,CAAA,EAAA;EAAuB;;;EAClE,SAAA,CAAA,EANa,eAMb;EAAA;;;EAI6C,aAAA,CAAA,EAAA,CAAA,MAAA,EAAA,IAAA,GAAA,KAAA,EAAA,GALF,YAKE,GALa,OAKb,CALqB,YAKrB,CAAA;AAG9C;eAA2C,OAAA,CAAA;EAI5B,UAAA,OAAA,SAPa,kBAOb,CAAA,CACJ;;AALuE,UAAjE,WAAiE,CAAA,cAAvC,MAAuC,CAAA,MAAA,EAAA,OAAA,CAAA,CAAA,SAAN,MAAM,CAAA,MAAA,EAAA,OAAA,CAAA,CAAA;eAInE;WACJ;;AC7C6D;AAUxE;EAC4B,SAAA,CAAA,EAAA,MAAA;EACb;;;EAEC,MAAA,CAAA,EAAA,MAAA;;;;UAVN,kBAAA;cACI;EHVG,QAAA,EAAA,MAAA;EAIA,MAAA,EAAA,MAAA;;UGWA,8CACW,sCAClB,KAAK;gBACC,QAAQ;EFxBP,WAAA,CAAA,EEyBD,iBFzBkB;EAEjC,OAAA,CAAA,EAAA,CAAA,WAAA,EAAA,SAAA,GAAA,SAAA,EAAA,GEwBmD,SFxBnD,CEwB6D,gBFxB7D,CAAA;EAAA,IAAA,CAAA,EAAA,OAAA;SAAA,CAAA,EAAA,OAAA;;UEmCS,eAAA,CFnCT;;;;ACKsC;AAiBtB,cCuBJ,aDvBsB,CAAA,0BCwBP,gBDxBO,GAAA,SAAA,GCwBwB,gBDxBxB,GAAA,SAAA,CAAA,SCyBzB,oBAAA,CDzByB;EAInB,SAAA,OAAA,EAAA,OAAA;EAUF,SAAA,IAAA,EAAA,OAAA;EAK8B,SAAA,UAAA,CAAA,ECSpB,iBDToB;EAAuB,SAAA,WAAA,CAAA,ECU1C,ODV0C,CCUlC,kBDVkC,CAAA;EAAR,SAAA,aAAA,CAAA,EAAA,CAAA,WAAA,EAAA,SAAA,GAAA,SAAA,EAAA,GCWQ,SDXR,CCWkB,gBDXlB,CAAA;EAAO;AACjE;;mBAI2B,CAAA,ECUN,iBDVwB;EAAA;;AAG9C;EAA2C,WAAA,ECW9B,SDX8B,CCW9B,MDX8B,CAAA,MAAA,EAAA,OAAA,CAAA,GAAA,SAAA,ECW9B,kBDX8B,CAAA;EAI5B;;;EAJmE,KAAA,ECe3E,SDf2E,CCe3E,KDf2E,ECe3E,kBDf2E,CAAA;;;;ECpCxE,gBAAA,EAuDQ,IAtDM,CAsDN,eAtDM,EAsDN,wBAtDM,GAAA;IAKP,WAAA,EAAA,SAAmB,GAAA,QAAA,GAAA,SAAA;EACR,CAAA,CAAA;EACb,iBAAA,EAsDM,iBAtDN,SAsDgC,gBAtDhC,GAuDT,gBAAA,CAAiB,WAvDR,CAuDoB,iBAvDpB,CAAA,GAwDT,MAxDS,CAAA,MAAA,EAAA,OAAA,CAAA;EACS,WAAA,CAAA,MAAA,EAyDF,mBAzDE,CAyDkB,iBAzDlB,CAAA;EAAR,QAAA,oCAAA;EACA,QAAA,yBAAA;EAC8C,QAAA,6BAAA;EAAV,QAAA,8BAAA;EAH1C,QAAA,8BAAA;;AAcA,iBAoSM,aApSS,CAAA,0BAoS+B,gBApS/B,GAAA,SAAA,GAAA,SAAA,CAAA,CAAA,MAAA,EAqSf,mBArSe,CAqSK,iBArSL,CAAA,CAAA,EAqSuB,aArSvB,CAqSuB,iBArSvB,CAAA"}