@lupinum/ginko-content 0.1.6 → 0.2.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 (230) hide show
  1. package/compatibility.json +1 -1
  2. package/dist/cli.mjs +2 -2
  3. package/dist/cms-contract/build.js +15 -20
  4. package/dist/cms-contract/types.d.ts +12 -7
  5. package/dist/core/content/document +1 -0
  6. package/dist/core/content/document.d.ts +16 -0
  7. package/dist/core/content/document.js +2 -0
  8. package/dist/core/content/graph.d.ts +3 -1
  9. package/dist/core/content/graph.js +21 -20
  10. package/dist/core/content/locale.d.ts +6 -1
  11. package/dist/core/content/locale.js +17 -6
  12. package/dist/core/content/path.d.ts +5 -5
  13. package/dist/core/content/path.js +8 -8
  14. package/dist/core/content/snapshot +1 -0
  15. package/dist/core/content/snapshot.d.ts +25 -0
  16. package/dist/core/content/snapshot.js +99 -0
  17. package/dist/core/provider-errors.d.ts +1 -1
  18. package/dist/core/provider-errors.js +1 -0
  19. package/dist/core/query/builder.js +3 -3
  20. package/dist/core/query/execute.js +75 -36
  21. package/dist/core/query/filter.js +2 -2
  22. package/dist/core/query/lower.js +79 -3
  23. package/dist/core/query/params.js +7 -7
  24. package/dist/core/query/plan.d.ts +18 -0
  25. package/dist/core/query/plan.js +7 -0
  26. package/dist/core/references/resolve.js +6 -9
  27. package/dist/features/agent/agent-markdown +1 -0
  28. package/dist/features/agent/agent-markdown.d.ts +116 -0
  29. package/dist/features/agent/agent-markdown.js +138 -0
  30. package/dist/features/agent/walker +1 -0
  31. package/dist/features/agent/walker.d.ts +10 -0
  32. package/dist/features/agent/walker.js +174 -0
  33. package/dist/features/collections/resolve.d.ts +2 -2
  34. package/dist/features/collections/resolve.js +19 -16
  35. package/dist/features/localization/links.js +1 -1
  36. package/dist/features/localization/results.d.ts +3 -3
  37. package/dist/features/localization/results.js +46 -41
  38. package/dist/features/localization/translated-slugs.js +5 -5
  39. package/dist/features/navigation/build.d.ts +2 -2
  40. package/dist/features/navigation/build.js +23 -26
  41. package/dist/features/navigation/canonical.d.ts +10 -11
  42. package/dist/features/navigation/canonical.js +26 -21
  43. package/dist/features/navigation/resolve.js +4 -4
  44. package/dist/features/navigation/tree.js +3 -3
  45. package/dist/{runtime → features}/query/backlinks.js +3 -5
  46. package/dist/{runtime → features}/query/documents.js +1 -1
  47. package/dist/{runtime → features}/query/localized-docs.d.ts +1 -1
  48. package/dist/{runtime → features}/query/localized-docs.js +3 -6
  49. package/dist/{runtime → features}/query/navigation.d.ts +1 -1
  50. package/dist/{runtime → features}/query/navigation.js +8 -8
  51. package/dist/{runtime → features}/query/populate.js +6 -14
  52. package/dist/{runtime → features}/query/unified.d.ts +4 -4
  53. package/dist/{runtime → features}/query/unified.js +4 -2
  54. package/dist/{runtime → features}/query/variants.js +4 -4
  55. package/dist/features/search/navigation.js +2 -2
  56. package/dist/features/search/sections.d.ts +1 -1
  57. package/dist/features/search/sections.js +1 -1
  58. package/dist/features/sitemap/query.d.ts +5 -5
  59. package/dist/features/sitemap/query.js +6 -6
  60. package/dist/integrations/nitro/ingest.js +9 -20
  61. package/dist/integrations/nitro/storage.d.ts +1 -0
  62. package/dist/integrations/nitro/storage.js +22 -8
  63. package/dist/module.d.mts +135 -812
  64. package/dist/module.json +1 -1
  65. package/dist/module.mjs +70 -27
  66. package/dist/parsers/csv.js +3 -3
  67. package/dist/parsers/index.js +3 -3
  68. package/dist/parsers/json.js +8 -6
  69. package/dist/parsers/markdown-plugins.js +9 -5
  70. package/dist/parsers/markdown.js +7 -6
  71. package/dist/parsers/path-meta.js +21 -19
  72. package/dist/parsers/reserved +1 -0
  73. package/dist/parsers/reserved.d.ts +15 -0
  74. package/dist/parsers/reserved.js +35 -0
  75. package/dist/parsers/yaml.js +6 -4
  76. package/dist/public/agent +1 -0
  77. package/dist/public/agent.d.ts +17 -0
  78. package/dist/public/agent.js +34 -0
  79. package/dist/public/client.d.ts +2 -3
  80. package/dist/public/client.js +1 -2
  81. package/dist/public/provider-query +1 -0
  82. package/dist/public/provider-query.d.ts +58 -0
  83. package/dist/public/provider-query.js +5 -0
  84. package/dist/public/provider.d.ts +8 -3
  85. package/dist/public/provider.js +2 -0
  86. package/dist/public/server.d.ts +7 -12
  87. package/dist/public/server.js +5 -36
  88. package/dist/runtime/app/components/ContentRenderer.d.vue.ts +3 -3
  89. package/dist/runtime/app/components/ContentRenderer.vue +2 -2
  90. package/dist/runtime/app/components/ContentRenderer.vue.d.ts +3 -3
  91. package/dist/runtime/app/components/ContentRendererInline.d.vue.ts +1 -1
  92. package/dist/runtime/app/components/ContentRendererInline.vue.d.ts +1 -1
  93. package/dist/runtime/app/components/Prose/ProseImg.d.vue.ts +4 -4
  94. package/dist/runtime/app/components/Prose/ProseImg.vue.d.ts +4 -4
  95. package/dist/runtime/app/components/Prose/ProsePre.d.vue.ts +1 -1
  96. package/dist/runtime/app/components/Prose/ProsePre.vue.d.ts +1 -1
  97. package/dist/runtime/app/components/internal/ContentRendererMarkdown.d.vue.ts +1 -1
  98. package/dist/runtime/app/components/internal/ContentRendererMarkdown.vue +4 -4
  99. package/dist/runtime/app/components/internal/ContentRendererMarkdown.vue.d.ts +1 -1
  100. package/dist/runtime/app/components/internal/MarkdownRenderer.d.ts +3 -3
  101. package/dist/runtime/app/composables/preview.d.ts +1 -1
  102. package/dist/runtime/app/composables/query-api.d.ts +5 -5
  103. package/dist/runtime/app/composables/query-api.js +5 -3
  104. package/dist/runtime/app/composables/route.d.ts +1 -1
  105. package/dist/runtime/app/composables/route.js +4 -4
  106. package/dist/runtime/app/composables/search.js +1 -1
  107. package/dist/runtime/app/composables/use-content-document.js +1 -1
  108. package/dist/runtime/app/composables/use-content-list.js +1 -1
  109. package/dist/runtime/app/composables/use-content-navigation.js +2 -2
  110. package/dist/runtime/app/composables/use-content-page.js +4 -4
  111. package/dist/runtime/app/pages/content.vue +2 -1
  112. package/dist/runtime/markdown/plugins.js +6 -8
  113. package/dist/runtime/server/agent-markdown.d.ts +5 -65
  114. package/dist/runtime/server/agent-markdown.js +40 -315
  115. package/dist/runtime/server/agent-site.js +1 -1
  116. package/dist/runtime/server/api/agent-raw.js +1 -1
  117. package/dist/runtime/server/api/cache.d.ts +1 -1
  118. package/dist/runtime/server/api/cache.js +43 -4
  119. package/dist/runtime/server/api/locales.js +3 -3
  120. package/dist/runtime/server/api/navigation.d.ts +1 -1
  121. package/dist/runtime/server/api/navigation.js +3 -1
  122. package/dist/runtime/server/api/query.js +2 -2
  123. package/dist/runtime/server/api/search-index.d.ts +1 -1
  124. package/dist/runtime/server/api/sitemap.d.ts +1 -1
  125. package/dist/runtime/server/cache-adapters.d.ts +18 -0
  126. package/dist/runtime/server/cache-adapters.js +12 -0
  127. package/dist/runtime/server/collection-helpers.d.ts +2 -2
  128. package/dist/runtime/server/collection-helpers.js +15 -11
  129. package/dist/runtime/server/index.d.ts +6 -4
  130. package/dist/runtime/server/index.js +10 -3
  131. package/dist/runtime/server/middleware/agent-link-headers.js +1 -1
  132. package/dist/runtime/server/middleware/agent-markdown.js +1 -1
  133. package/dist/runtime/server/navigation-query.d.ts +2 -2
  134. package/dist/runtime/server/navigation-query.js +52 -7
  135. package/dist/runtime/server/navigation.d.ts +1 -1
  136. package/dist/runtime/server/provider-document +1 -0
  137. package/dist/runtime/server/provider-document.d.ts +59 -0
  138. package/dist/runtime/server/provider-document.js +48 -0
  139. package/dist/runtime/server/provider-query-wire +1 -0
  140. package/dist/runtime/server/provider-query-wire.d.ts +32 -0
  141. package/dist/runtime/server/provider-query-wire.js +27 -0
  142. package/dist/runtime/server/provider-query.d.ts +18 -9
  143. package/dist/runtime/server/provider-query.js +62 -28
  144. package/dist/runtime/server/provider-result.d.ts +4 -4
  145. package/dist/runtime/server/providers/filesystem.js +3 -11
  146. package/dist/runtime/server/providers/index.d.ts +18 -1
  147. package/dist/runtime/server/providers/index.js +72 -20
  148. package/dist/runtime/server/query-api.d.ts +5 -5
  149. package/dist/runtime/server/query-api.js +9 -6
  150. package/dist/runtime/server/query-executor.d.ts +3 -3
  151. package/dist/runtime/server/query-executor.js +43 -59
  152. package/dist/runtime/server/search.d.ts +1 -1
  153. package/dist/runtime/server/search.js +4 -4
  154. package/dist/runtime/server/sitemap.js +5 -5
  155. package/dist/runtime/server/storage-access.d.ts +4 -1
  156. package/dist/runtime/server/storage-access.js +27 -2
  157. package/dist/runtime/transformers/component-resolver.d.ts +1 -1
  158. package/dist/storage/content.d.ts +2 -6
  159. package/dist/storage/content.js +19 -8
  160. package/dist/storage/contents.d.ts +9 -1
  161. package/dist/storage/contents.js +26 -19
  162. package/dist/storage/driver.d.ts +2 -2
  163. package/dist/storage/driver.js +2 -1
  164. package/dist/storage/graph.js +4 -0
  165. package/dist/storage/manifest.js +3 -1
  166. package/dist/storage/references.js +9 -5
  167. package/dist/storage/snapshot-runtime +1 -0
  168. package/dist/storage/snapshot-runtime.d.ts +11 -0
  169. package/dist/storage/snapshot-runtime.js +46 -0
  170. package/dist/storage/validation.d.ts +1 -1
  171. package/dist/storage/validation.js +47 -102
  172. package/dist/testing/provider-contract.d.ts +14 -4
  173. package/dist/testing/provider-contract.js +121 -68
  174. package/dist/testing/provider-fixture.d.ts +1 -1
  175. package/dist/testing/provider-fixture.js +124 -120
  176. package/dist/types/config.d.ts +8 -4
  177. package/dist/types/content.d.ts +104 -70
  178. package/dist/types/fields.js +1 -1
  179. package/dist/types/module.d.ts +1 -1
  180. package/dist/types/query-parts/public.d.ts +14 -5
  181. package/dist/types/query-parts/results.d.ts +6 -2
  182. package/dist/types/query-parts/transport.d.ts +19 -0
  183. package/dist/types/virtual.d.ts +6 -0
  184. package/dist/types.d.mts +2 -2
  185. package/dist/web-types.json +1 -1
  186. package/package.json +39 -9
  187. package/dist/runtime/app/plugins/markdown-components +0 -1
  188. package/dist/runtime/app/plugins/markdown-components.d.ts +0 -2
  189. package/dist/runtime/app/plugins/markdown-components.js +0 -19
  190. /package/dist/{runtime → features/agent}/agent-paths +0 -0
  191. /package/dist/{runtime → features/agent}/agent-paths.d.ts +0 -0
  192. /package/dist/{runtime → features/agent}/agent-paths.js +0 -0
  193. /package/dist/{runtime → features}/query/backlinks +0 -0
  194. /package/dist/{runtime → features}/query/backlinks.d.ts +0 -0
  195. /package/dist/{runtime → features}/query/context +0 -0
  196. /package/dist/{runtime → features}/query/context.d.ts +0 -0
  197. /package/dist/{runtime → features}/query/context.js +0 -0
  198. /package/dist/{runtime → features}/query/documents +0 -0
  199. /package/dist/{runtime → features}/query/documents.d.ts +0 -0
  200. /package/dist/{runtime → features}/query/errors +0 -0
  201. /package/dist/{runtime → features}/query/errors.d.ts +0 -0
  202. /package/dist/{runtime → features}/query/errors.js +0 -0
  203. /package/dist/{runtime → features}/query/handles +0 -0
  204. /package/dist/{runtime → features}/query/handles.d.ts +0 -0
  205. /package/dist/{runtime → features}/query/handles.js +0 -0
  206. /package/dist/{runtime → features}/query/locale-options +0 -0
  207. /package/dist/{runtime → features}/query/locale-options.d.ts +0 -0
  208. /package/dist/{runtime → features}/query/locale-options.js +0 -0
  209. /package/dist/{runtime → features}/query/localized-docs +0 -0
  210. /package/dist/{runtime → features}/query/navigation +0 -0
  211. /package/dist/{runtime → features}/query/pagination +0 -0
  212. /package/dist/{runtime → features}/query/pagination.d.ts +0 -0
  213. /package/dist/{runtime → features}/query/pagination.js +0 -0
  214. /package/dist/{runtime → features}/query/populate +0 -0
  215. /package/dist/{runtime → features}/query/populate.d.ts +0 -0
  216. /package/dist/{runtime → features}/query/public-limits +0 -0
  217. /package/dist/{runtime → features}/query/public-limits.d.ts +0 -0
  218. /package/dist/{runtime → features}/query/public-limits.js +0 -0
  219. /package/dist/{runtime → features}/query/resolve +0 -0
  220. /package/dist/{runtime → features}/query/resolve.d.ts +0 -0
  221. /package/dist/{runtime → features}/query/resolve.js +0 -0
  222. /package/dist/{runtime → features}/query/responses +0 -0
  223. /package/dist/{runtime → features}/query/responses.d.ts +0 -0
  224. /package/dist/{runtime → features}/query/responses.js +0 -0
  225. /package/dist/{runtime → features}/query/routes +0 -0
  226. /package/dist/{runtime → features}/query/routes.d.ts +0 -0
  227. /package/dist/{runtime → features}/query/routes.js +0 -0
  228. /package/dist/{runtime → features}/query/unified +0 -0
  229. /package/dist/{runtime → features}/query/variants +0 -0
  230. /package/dist/{runtime → features}/query/variants.d.ts +0 -0
@@ -5,18 +5,7 @@ import { transformContent } from "../../parsers";
5
5
  import { resolveCollection, resolveCollections } from "../../core/content/collection";
6
6
  import { expandDataLocaleVariants } from "../../core/content/locale";
7
7
  import { createContentError, validateCollectionDocument } from "../../storage/validation";
8
- const loadCustomTransformers = async () => {
9
- try {
10
- const specifier = "#content/virtual/transformers";
11
- const module = await import(
12
- /* @vite-ignore */
13
- specifier
14
- );
15
- return module.transformers || [];
16
- } catch {
17
- return [];
18
- }
19
- };
8
+ import { transformers as customContentTransformers } from "#content/virtual/transformers";
20
9
  const invalidContentError = (id, cause) => new ContentError("INVALID_CONTENT", `Failed to ingest content "${id}"`, { id }, { cause });
21
10
  const parseSource = async (id, body, options) => {
22
11
  try {
@@ -38,13 +27,13 @@ const parseSource = async (id, body, options) => {
38
27
  };
39
28
  const expandLocaleVariants = async (document, options) => {
40
29
  try {
41
- const collection = document._collection && options.pathMeta?.collections ? options.pathMeta.collections[document._collection] : void 0;
30
+ const collection = document.collection && options.pathMeta?.collections ? options.pathMeta.collections[document.collection] : void 0;
42
31
  return expandDataLocaleVariants(document, collection?.i18n === true ? void 0 : collection?.i18n);
43
32
  } catch (cause) {
44
33
  throw new ContentError(
45
34
  "TRANSFORM_FAILED",
46
- `Failed to transform content "${document._file || document._id}"`,
47
- { id: document._id, file: document._file },
35
+ `Failed to transform content "${document.file?.path || document.id}"`,
36
+ { id: document.id, file: document.file?.path },
48
37
  { cause }
49
38
  );
50
39
  }
@@ -69,7 +58,7 @@ const validateVariants = (id, variants, options) => {
69
58
  "VALIDATION_FAILED",
70
59
  "Failed to validate parsed content",
71
60
  {
72
- files: variants.map((document) => document._file || document._id)
61
+ files: variants.map((document) => document.file?.path || document.id)
73
62
  },
74
63
  { cause }
75
64
  ));
@@ -77,7 +66,7 @@ const validateVariants = (id, variants, options) => {
77
66
  };
78
67
  export const parseContentVariants = async (id, content, runtimeContentConfig, opts = {}) => {
79
68
  const nitroApp = useNitroApp();
80
- const customTransformers = await loadCustomTransformers();
69
+ const customTransformers = customContentTransformers || [];
81
70
  const options = defu(
82
71
  opts,
83
72
  {
@@ -94,16 +83,16 @@ export const parseContentVariants = async (id, content, runtimeContentConfig, op
94
83
  }
95
84
  }
96
85
  );
97
- const file = { _id: id, body: typeof content === "string" ? content.replace(/\r\n|\r/g, "\n") : content };
86
+ const file = { id, body: typeof content === "string" ? content.replace(/\r\n|\r/g, "\n") : content };
98
87
  await nitroApp.hooks.callHook("content:file:beforeParse", file);
99
88
  const parsedDocument = await parseSource(id, file.body, options);
100
89
  const variants = validateVariants(id, await expandLocaleVariants(parsedDocument, options), options);
101
90
  const parsed = variants[0];
102
- const matchedCollections = resolveCollections(parsed?._file || id, options.pathMeta?.collections, options.pathMeta?.locales || []);
91
+ const matchedCollections = resolveCollections(parsed?.file?.path || id, options.pathMeta?.collections, options.pathMeta?.locales || []);
103
92
  if (matchedCollections.length > 1) {
104
93
  throw createContentError(
105
94
  "CONFLICTING_COLLECTION_MATCH",
106
- parsed?._file || id,
95
+ parsed?.file?.path || id,
107
96
  "conflicting collection matches",
108
97
  matchedCollections.join(", "),
109
98
  { collections: matchedCollections }
@@ -6,4 +6,5 @@ export declare const cacheParsedStorage: (event?: H3Event) => Storage<import("un
6
6
  export declare const contentConfig: () => any;
7
7
  export declare const contentIgnorePredicate: (key: string) => boolean;
8
8
  export declare const getContentsIds: (event: H3Event, prefix?: string) => Promise<string[]>;
9
+ export declare const getSourceContentIds: (event: H3Event, prefix?: string) => Promise<string[]>;
9
10
  export declare const resolveStorageId: (event: H3Event, id: string) => Promise<string>;
@@ -1,5 +1,6 @@
1
1
  import { prefixStorage } from "unstorage";
2
2
  import { useStorage } from "nitropack/runtime";
3
+ import authoredContentConfig from "#content/virtual/config";
3
4
  import { makeIgnored } from "../../core/content/ignore";
4
5
  import { getContentRuntimeContext } from "./context.js";
5
6
  import { getPreview, isPreview } from "./preview.js";
@@ -33,8 +34,23 @@ export const cacheParsedStorage = (event) => {
33
34
  }
34
35
  return createScopedStorage("cache:content:parsed");
35
36
  };
37
+ const liveCollections = authoredContentConfig?.collections || {};
36
38
  export const contentConfig = () => {
37
- return getContentRuntimeConfig().content;
39
+ const runtimeContent = getContentRuntimeConfig().content;
40
+ const runtimeCollections = runtimeContent.collections;
41
+ if (!runtimeCollections) {
42
+ return runtimeContent;
43
+ }
44
+ let hasLiveSchemas = false;
45
+ const collections = Object.fromEntries(Object.entries(runtimeCollections).map(([name, collection]) => {
46
+ const schema = liveCollections[name]?.schema;
47
+ if (!schema) {
48
+ return [name, collection];
49
+ }
50
+ hasLiveSchemas = true;
51
+ return [name, { ...collection, schema }];
52
+ }));
53
+ return hasLiveSchemas ? { ...runtimeContent, collections } : runtimeContent;
38
54
  };
39
55
  export const contentIgnorePredicate = (key) => {
40
56
  const isIgnored = makeIgnored(contentConfig().ignores);
@@ -48,14 +64,8 @@ export const contentIgnorePredicate = (key) => {
48
64
  return true;
49
65
  };
50
66
  export const getContentsIds = async (event, prefix) => {
51
- let keys = [];
52
- if (process.env.NODE_ENV === "production") {
53
- keys = await cacheParsedStorage(event).getKeys(prefix);
54
- }
55
67
  const source = sourceStorage(event);
56
- if (keys.length === 0) {
57
- keys = await source.getKeys(prefix);
58
- }
68
+ let keys = await source.getKeys(prefix);
59
69
  if (isPreview(event)) {
60
70
  const { key } = getPreview(event);
61
71
  const previewNamespace = `preview:${key}:`;
@@ -77,6 +87,10 @@ export const getContentsIds = async (event, prefix) => {
77
87
  }
78
88
  return keys.filter(contentIgnorePredicate);
79
89
  };
90
+ export const getSourceContentIds = async (event, prefix) => {
91
+ const keys = await sourceStorage(event).getKeys(prefix);
92
+ return keys.filter(contentIgnorePredicate);
93
+ };
80
94
  export const resolveStorageId = async (event, id) => {
81
95
  if (!isPreview(event)) {
82
96
  return id;