@analogjs/content 3.0.0-alpha.3 → 3.0.0-alpha.30

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 (65) hide show
  1. package/devtools/package.json +4 -0
  2. package/fesm2022/analogjs-content-devtools.mjs +162 -0
  3. package/fesm2022/analogjs-content-devtools.mjs.map +1 -0
  4. package/fesm2022/analogjs-content-md4x.mjs +291 -0
  5. package/fesm2022/analogjs-content-md4x.mjs.map +1 -0
  6. package/fesm2022/analogjs-content-mdc.mjs +170 -0
  7. package/fesm2022/analogjs-content-mdc.mjs.map +1 -0
  8. package/fesm2022/analogjs-content-og.mjs.map +1 -0
  9. package/fesm2022/analogjs-content-prism-highlighter.mjs +5 -4
  10. package/fesm2022/analogjs-content-prism-highlighter.mjs.map +1 -0
  11. package/fesm2022/analogjs-content-resources.mjs +30 -24
  12. package/fesm2022/analogjs-content-resources.mjs.map +1 -0
  13. package/fesm2022/analogjs-content-shiki-highlighter.mjs +1 -1
  14. package/fesm2022/analogjs-content-shiki-highlighter.mjs.map +1 -0
  15. package/fesm2022/analogjs-content.mjs +25 -350
  16. package/fesm2022/analogjs-content.mjs.map +1 -0
  17. package/fesm2022/content-list-loader.mjs +161 -0
  18. package/fesm2022/content-list-loader.mjs.map +1 -0
  19. package/fesm2022/content-renderer.mjs +128 -0
  20. package/fesm2022/content-renderer.mjs.map +1 -0
  21. package/fesm2022/marked-content-highlighter.mjs +40 -0
  22. package/fesm2022/marked-content-highlighter.mjs.map +1 -0
  23. package/fesm2022/parse-raw-content-file.mjs +45 -0
  24. package/fesm2022/parse-raw-content-file.mjs.map +1 -0
  25. package/md4x/package.json +4 -0
  26. package/mdc/package.json +4 -0
  27. package/package.json +71 -36
  28. package/plugin/migrations.json +1 -1
  29. package/plugin/package.json +2 -22
  30. package/plugin/src/index.d.ts +3 -1
  31. package/plugin/src/index.d.ts.map +1 -0
  32. package/plugin/src/index.js +5 -4
  33. package/plugin/src/index.js.map +1 -0
  34. package/plugin/src/migrations/update-markdown-version/compat.d.ts +5 -2
  35. package/plugin/src/migrations/update-markdown-version/compat.d.ts.map +1 -0
  36. package/plugin/src/migrations/update-markdown-version/compat.js +8 -7
  37. package/plugin/src/migrations/update-markdown-version/compat.js.map +1 -0
  38. package/plugin/src/migrations/update-markdown-version/update-markdown-version.d.ts +6 -2
  39. package/plugin/src/migrations/update-markdown-version/update-markdown-version.d.ts.map +1 -0
  40. package/plugin/src/migrations/update-markdown-version/update-markdown-version.js +18 -20
  41. package/plugin/src/migrations/update-markdown-version/update-markdown-version.js.map +1 -0
  42. package/src/lib/devtools/content-devtools-client.ts +215 -0
  43. package/src/lib/devtools/content-devtools.styles.css +194 -0
  44. package/types/devtools/src/index.d.ts +1 -0
  45. package/types/md4x/src/index.d.ts +5 -0
  46. package/types/md4x/src/lib/md4x-content-renderer.service.d.ts +33 -0
  47. package/types/md4x/src/lib/md4x-wasm-content-renderer.service.d.ts +16 -0
  48. package/types/md4x/src/lib/provide-md4x.d.ts +26 -0
  49. package/types/md4x/src/lib/streaming-markdown-renderer.d.ts +21 -0
  50. package/types/mdc/src/index.d.ts +2 -0
  51. package/types/mdc/src/lib/mdc-component-registry.d.ts +25 -0
  52. package/types/mdc/src/lib/mdc-renderer.directive.d.ts +33 -0
  53. package/types/prism-highlighter/src/lib/prism-highlighter.d.ts +1 -1
  54. package/types/resources/src/content-file-resource.d.ts +32 -7
  55. package/types/resources/src/content-files-resource.d.ts +2 -1
  56. package/types/src/index.d.ts +5 -3
  57. package/types/src/lib/devtools/content-devtools-plugin.d.ts +23 -0
  58. package/types/src/lib/devtools/content-devtools-renderer.d.ts +23 -0
  59. package/types/src/lib/devtools/index.d.ts +23 -0
  60. package/types/src/lib/parse-raw-content-file.d.ts +15 -1
  61. package/plugin/README.md +0 -11
  62. package/plugin/src/migrations/update-markdown-renderer-feature/compat.d.ts +0 -3
  63. package/plugin/src/migrations/update-markdown-renderer-feature/compat.js +0 -8
  64. package/plugin/src/migrations/update-markdown-renderer-feature/update-markdown-renderer-feature.d.ts +0 -2
  65. package/plugin/src/migrations/update-markdown-renderer-feature/update-markdown-renderer-feature.js +0 -48
@@ -0,0 +1,161 @@
1
+ import * as i0 from "@angular/core";
2
+ import { Injectable, InjectionToken, inject, signal, ɵPendingTasksInternal } from "@angular/core";
3
+ //#region packages/content/src/lib/get-content-files.ts
4
+ /**
5
+ * Returns the list of content files by filename with ?analog-content-list=true.
6
+ * We use the query param to transform the return into an array of
7
+ * just front matter attributes.
8
+ *
9
+ * @returns
10
+ */
11
+ var getContentFilesList = () => {
12
+ return {};
13
+ };
14
+ /**
15
+ * Returns the lazy loaded content files for lookups.
16
+ *
17
+ * @returns
18
+ */
19
+ var getContentFiles = () => {
20
+ return {};
21
+ };
22
+ //#endregion
23
+ //#region packages/content/src/lib/content-files-list-token.ts
24
+ function getSlug(filename) {
25
+ const base = (filename.split(/[/\\]/).pop() || "").trim().replace(/\.[^./\\]+$/, "");
26
+ return base === "index" ? "" : base;
27
+ }
28
+ var CONTENT_FILES_LIST_TOKEN = new InjectionToken("@analogjs/content Content Files List", {
29
+ providedIn: "root",
30
+ factory() {
31
+ const contentFiles = getContentFilesList();
32
+ return Object.keys(contentFiles).map((filename) => {
33
+ const attributes = contentFiles[filename];
34
+ const slug = attributes["slug"];
35
+ return {
36
+ filename,
37
+ attributes,
38
+ slug: slug ? encodeURI(slug) : encodeURI(getSlug(filename))
39
+ };
40
+ });
41
+ }
42
+ });
43
+ //#endregion
44
+ //#region packages/content/src/lib/content-files-token.ts
45
+ var CONTENT_FILES_TOKEN = new InjectionToken("@analogjs/content Content Files", {
46
+ providedIn: "root",
47
+ factory() {
48
+ const allFiles = { ...getContentFiles() };
49
+ const contentFilesList = inject(CONTENT_FILES_LIST_TOKEN);
50
+ const lookup = {};
51
+ contentFilesList.forEach((item) => {
52
+ const contentFilename = item.filename.replace(/(.*?)\/content/, "/src/content");
53
+ const fileParts = contentFilename.split("/");
54
+ const filePath = fileParts.slice(0, fileParts.length - 1).join("/");
55
+ const fileNameParts = fileParts[fileParts.length - 1].split(".");
56
+ const ext = fileNameParts[fileNameParts.length - 1];
57
+ let slug = item.slug ?? "";
58
+ if (slug === "") slug = "index";
59
+ lookup[contentFilename] = `${slug.includes("/") ? `/src/content/${slug}` : `${filePath}/${slug}`}.${ext}`.replace(/\/{2,}/g, "/");
60
+ });
61
+ const objectUsingSlugAttribute = {};
62
+ Object.entries(allFiles).forEach((entry) => {
63
+ const filename = entry[0];
64
+ const value = entry[1];
65
+ const newFilename = lookup[filename.replace(/^\/(.*?)\/content/, "/src/content")];
66
+ if (newFilename !== void 0) {
67
+ const objectFilename = newFilename.replace(/^\/(.*?)\/content/, "/src/content");
68
+ objectUsingSlugAttribute[objectFilename] = value;
69
+ }
70
+ });
71
+ return objectUsingSlugAttribute;
72
+ }
73
+ });
74
+ new InjectionToken("@analogjs/content Content Files", {
75
+ providedIn: "root",
76
+ factory() {
77
+ return signal(inject(CONTENT_FILES_TOKEN));
78
+ }
79
+ });
80
+ //#endregion
81
+ //#region packages/content/src/lib/render-task.service.ts
82
+ var RenderTaskService = class RenderTaskService {
83
+ #pendingTasks = inject(ɵPendingTasksInternal);
84
+ addRenderTask() {
85
+ return this.#pendingTasks.add();
86
+ }
87
+ clearRenderTask(clear) {
88
+ if (typeof clear === "function") clear();
89
+ else if (typeof this.#pendingTasks.remove === "function") this.#pendingTasks.remove(clear);
90
+ }
91
+ static {
92
+ this.ɵfac = i0.ɵɵngDeclareFactory({
93
+ minVersion: "12.0.0",
94
+ version: "21.2.8",
95
+ ngImport: i0,
96
+ type: RenderTaskService,
97
+ deps: [],
98
+ target: i0.ɵɵFactoryTarget.Injectable
99
+ });
100
+ }
101
+ static {
102
+ this.ɵprov = i0.ɵɵngDeclareInjectable({
103
+ minVersion: "12.0.0",
104
+ version: "21.2.8",
105
+ ngImport: i0,
106
+ type: RenderTaskService
107
+ });
108
+ }
109
+ };
110
+ i0.ɵɵngDeclareClassMetadata({
111
+ minVersion: "12.0.0",
112
+ version: "21.2.8",
113
+ ngImport: i0,
114
+ type: RenderTaskService,
115
+ decorators: [{ type: Injectable }]
116
+ });
117
+ //#endregion
118
+ //#region packages/content/src/lib/inject-content-files.ts
119
+ function injectContentFiles(filterFn) {
120
+ const renderTaskService = inject(RenderTaskService);
121
+ const task = renderTaskService.addRenderTask();
122
+ const allContentFiles = inject(CONTENT_FILES_LIST_TOKEN);
123
+ renderTaskService.clearRenderTask(task);
124
+ if (filterFn) return allContentFiles.filter(filterFn);
125
+ return allContentFiles;
126
+ }
127
+ function injectContentFilesMap() {
128
+ return inject(CONTENT_FILES_TOKEN);
129
+ }
130
+ //#endregion
131
+ //#region packages/content/src/lib/content-file-loader.ts
132
+ var CONTENT_FILE_LOADER = new InjectionToken("@analogjs/content/resource File Loader");
133
+ function injectContentFileLoader() {
134
+ return inject(CONTENT_FILE_LOADER);
135
+ }
136
+ function withContentFileLoader() {
137
+ return {
138
+ provide: CONTENT_FILE_LOADER,
139
+ useFactory() {
140
+ return async () => injectContentFilesMap();
141
+ }
142
+ };
143
+ }
144
+ //#endregion
145
+ //#region packages/content/src/lib/content-list-loader.ts
146
+ var CONTENT_LIST_LOADER = new InjectionToken("@analogjs/content/resource List Loader");
147
+ function injectContentListLoader() {
148
+ return inject(CONTENT_LIST_LOADER);
149
+ }
150
+ function withContentListLoader() {
151
+ return {
152
+ provide: CONTENT_LIST_LOADER,
153
+ useFactory() {
154
+ return async () => injectContentFiles();
155
+ }
156
+ };
157
+ }
158
+ //#endregion
159
+ export { injectContentFileLoader as a, injectContentFilesMap as c, CONTENT_FILE_LOADER as i, RenderTaskService as l, injectContentListLoader as n, withContentFileLoader as o, withContentListLoader as r, injectContentFiles as s, CONTENT_LIST_LOADER as t, CONTENT_FILES_TOKEN as u };
160
+
161
+ //# sourceMappingURL=content-list-loader.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content-list-loader.mjs","names":["#pendingTasks"],"sources":["../../src/lib/get-content-files.ts","../../src/lib/content-files-list-token.ts","../../src/lib/content-files-token.ts","../../src/lib/render-task.service.ts","../../src/lib/inject-content-files.ts","../../src/lib/content-file-loader.ts","../../src/lib/content-list-loader.ts"],"sourcesContent":["/**\n * Returns the list of content files by filename with ?analog-content-list=true.\n * We use the query param to transform the return into an array of\n * just front matter attributes.\n *\n * @returns\n */\nexport const getContentFilesList = () => {\n const ANALOG_CONTENT_FILE_LIST = {};\n\n return ANALOG_CONTENT_FILE_LIST as Record<string, Record<string, any>>;\n};\n\n/**\n * Returns the lazy loaded content files for lookups.\n *\n * @returns\n */\nexport const getContentFiles = (): Record<string, () => Promise<string>> => {\n const ANALOG_CONTENT_ROUTE_FILES = {};\n\n return ANALOG_CONTENT_ROUTE_FILES as Record<string, () => Promise<string>>;\n};\n","import { InjectionToken } from '@angular/core';\nimport { ContentFile } from './content-file';\nimport { getContentFilesList } from './get-content-files';\n\nfunction getSlug(filename: string) {\n // Extract the last path segment without its extension.\n // Handles names with dots like [[...slug]].md by stripping only the final extension.\n const lastSegment = (filename.split(/[/\\\\]/).pop() || '').trim();\n const base = lastSegment.replace(/\\.[^./\\\\]+$/, ''); // strip only the final extension\n // Treat index.md as index route => empty slug\n return base === 'index' ? '' : base;\n}\n\nexport const CONTENT_FILES_LIST_TOKEN: InjectionToken<ContentFile[]> =\n new InjectionToken<ContentFile[]>('@analogjs/content Content Files List', {\n providedIn: 'root',\n factory() {\n const contentFiles = getContentFilesList();\n\n return Object.keys(contentFiles).map((filename) => {\n const attributes = contentFiles[filename];\n const slug = attributes['slug'];\n\n return {\n filename,\n attributes,\n slug: slug ? encodeURI(slug) : encodeURI(getSlug(filename)),\n };\n });\n },\n });\n","import { InjectionToken, Signal, inject, signal } from '@angular/core';\n\nimport { getContentFiles } from './get-content-files';\nimport { CONTENT_FILES_LIST_TOKEN } from './content-files-list-token';\n\nexport const CONTENT_FILES_TOKEN: InjectionToken<\n Record<string, () => Promise<string>>\n> = new InjectionToken<Record<string, () => Promise<string>>>(\n '@analogjs/content Content Files',\n {\n providedIn: 'root',\n factory() {\n const contentFiles = getContentFiles();\n const allFiles = { ...contentFiles };\n const contentFilesList = inject(CONTENT_FILES_LIST_TOKEN);\n\n const lookup: Record<string, string> = {};\n contentFilesList.forEach((item) => {\n const contentFilename = item.filename.replace(\n /(.*?)\\/content/,\n '/src/content',\n );\n const fileParts = contentFilename.split('/');\n const filePath = fileParts.slice(0, fileParts.length - 1).join('/');\n const fileNameParts = fileParts[fileParts.length - 1].split('.');\n const ext = fileNameParts[fileNameParts.length - 1];\n let slug = (item.slug ?? '') as string;\n // Default empty slug to 'index'\n if (slug === '') {\n slug = 'index';\n }\n // If slug contains path separators, treat it as root-relative to /src/content\n const newBase = slug.includes('/')\n ? `/src/content/${slug}`\n : `${filePath}/${slug}`;\n lookup[contentFilename] = `${newBase}.${ext}`.replace(/\\/{2,}/g, '/');\n });\n\n const objectUsingSlugAttribute: Record<string, () => Promise<string>> =\n {};\n Object.entries(allFiles).forEach((entry) => {\n const filename = entry[0];\n const value = entry[1];\n const strippedFilename = filename.replace(\n /^\\/(.*?)\\/content/,\n '/src/content',\n );\n\n const newFilename = lookup[strippedFilename];\n if (newFilename !== undefined) {\n const objectFilename = newFilename.replace(\n /^\\/(.*?)\\/content/,\n '/src/content',\n );\n objectUsingSlugAttribute[objectFilename] =\n value as () => Promise<string>;\n }\n });\n\n return objectUsingSlugAttribute;\n },\n },\n);\n\nexport const CONTENT_FILES_MAP_TOKEN: InjectionToken<\n Signal<Record<string, () => Promise<string>>>\n> = new InjectionToken<Signal<Record<string, () => Promise<string>>>>(\n '@analogjs/content Content Files',\n {\n providedIn: 'root',\n factory() {\n return signal(inject(CONTENT_FILES_TOKEN));\n },\n },\n);\n","import { Injectable, inject } from '@angular/core';\nimport { ɵPendingTasksInternal as ɵPendingTasks } from '@angular/core';\n\n@Injectable()\nexport class RenderTaskService {\n #pendingTasks = inject(ɵPendingTasks);\n\n addRenderTask(): number {\n return this.#pendingTasks.add();\n }\n\n clearRenderTask(clear: number | (() => void)): void {\n if (typeof clear === 'function') {\n clear();\n } else if (typeof (this.#pendingTasks as any).remove === 'function') {\n (this.#pendingTasks as any).remove(clear);\n }\n }\n}\n","import { inject } from '@angular/core';\n\nimport { ContentFile } from './content-file';\nimport { CONTENT_FILES_LIST_TOKEN } from './content-files-list-token';\nimport { CONTENT_FILES_TOKEN } from './content-files-token';\nimport { RenderTaskService } from './render-task.service';\n\nexport function injectContentFiles<Attributes extends Record<string, any>>(\n filterFn?: InjectContentFilesFilterFunction<Attributes>,\n): ContentFile<Attributes>[] {\n const renderTaskService = inject(RenderTaskService);\n const task = renderTaskService.addRenderTask();\n const allContentFiles = inject(\n CONTENT_FILES_LIST_TOKEN,\n ) as ContentFile<Attributes>[];\n renderTaskService.clearRenderTask(task);\n\n if (filterFn) {\n const filteredContentFiles = allContentFiles.filter(filterFn);\n\n return filteredContentFiles;\n }\n\n return allContentFiles;\n}\n\nexport type InjectContentFilesFilterFunction<T extends Record<string, any>> = (\n value: ContentFile<T>,\n index: number,\n array: ContentFile<T>[],\n) => boolean;\n\nexport function injectContentFilesMap(): Record<string, () => Promise<string>> {\n return inject(CONTENT_FILES_TOKEN);\n}\n","import { InjectionToken, Provider } from '@angular/core';\nimport { inject } from '@angular/core';\n\nimport { injectContentFilesMap } from './inject-content-files';\n\ntype ContentFileLoaderFunction = () => Promise<\n Record<string, () => Promise<string>>\n>;\n\nexport const CONTENT_FILE_LOADER: InjectionToken<ContentFileLoaderFunction> =\n new InjectionToken<ContentFileLoaderFunction>(\n '@analogjs/content/resource File Loader',\n );\n\nexport function injectContentFileLoader() {\n return inject(CONTENT_FILE_LOADER) as ContentFileLoaderFunction;\n}\n\nexport function withContentFileLoader(): Provider {\n return {\n provide: CONTENT_FILE_LOADER,\n useFactory() {\n return async () => injectContentFilesMap();\n },\n };\n}\n","import { InjectionToken, Provider } from '@angular/core';\nimport { inject } from '@angular/core';\n\nimport { ContentFile } from './content-file';\nimport { injectContentFiles } from './inject-content-files';\n\ntype ContentListLoaderFunction<Attributes extends Record<string, any>> =\n () => Promise<ContentFile<Attributes>[]>;\n\nexport const CONTENT_LIST_LOADER: InjectionToken<\n ContentListLoaderFunction<any>\n> = new InjectionToken<ContentListLoaderFunction<any>>(\n '@analogjs/content/resource List Loader',\n);\n\nexport function injectContentListLoader<\n Attributes extends Record<string, any>,\n>() {\n return inject(CONTENT_LIST_LOADER) as ContentListLoaderFunction<Attributes>;\n}\n\nexport function withContentListLoader(): Provider {\n return {\n provide: CONTENT_LIST_LOADER,\n useFactory() {\n return async () => injectContentFiles();\n },\n };\n}\n"],"mappings":"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"}
@@ -0,0 +1,128 @@
1
+ import * as i0 from "@angular/core";
2
+ import { Injectable, TransferState, inject, makeStateKey } from "@angular/core";
3
+ //#region packages/content/src/lib/content-renderer.ts
4
+ var ContentRenderer = class ContentRenderer {
5
+ async render(content) {
6
+ return {
7
+ content,
8
+ toc: []
9
+ };
10
+ }
11
+ getContentHeadings(_content) {
12
+ return [];
13
+ }
14
+ enhance() {}
15
+ static {
16
+ this.ɵfac = i0.ɵɵngDeclareFactory({
17
+ minVersion: "12.0.0",
18
+ version: "21.2.8",
19
+ ngImport: i0,
20
+ type: ContentRenderer,
21
+ deps: [],
22
+ target: i0.ɵɵFactoryTarget.Injectable
23
+ });
24
+ }
25
+ static {
26
+ this.ɵprov = i0.ɵɵngDeclareInjectable({
27
+ minVersion: "12.0.0",
28
+ version: "21.2.8",
29
+ ngImport: i0,
30
+ type: ContentRenderer
31
+ });
32
+ }
33
+ };
34
+ i0.ɵɵngDeclareClassMetadata({
35
+ minVersion: "12.0.0",
36
+ version: "21.2.8",
37
+ ngImport: i0,
38
+ type: ContentRenderer,
39
+ decorators: [{ type: Injectable }]
40
+ });
41
+ var NoopContentRenderer = class {
42
+ constructor() {
43
+ this.transferState = inject(TransferState);
44
+ this.contentId = 0;
45
+ }
46
+ /**
47
+ * Generates a hash from the content string
48
+ * to be used with the transfer state
49
+ */
50
+ generateHash(str) {
51
+ let hash = 0;
52
+ for (let i = 0, len = str.length; i < len; i++) {
53
+ const chr = str.charCodeAt(i);
54
+ hash = (hash << 5) - hash + chr;
55
+ hash |= 0;
56
+ }
57
+ return hash;
58
+ }
59
+ async render(content) {
60
+ this.contentId = this.generateHash(content);
61
+ const toc = this.getContentHeadings(content);
62
+ const key = makeStateKey(`content-headings-${this.contentId}`);
63
+ return {
64
+ content,
65
+ toc: this.transferState.get(key, toc)
66
+ };
67
+ }
68
+ enhance() {}
69
+ getContentHeadings(content) {
70
+ return this.extractHeadings(content);
71
+ }
72
+ extractHeadings(content) {
73
+ const markdownHeadings = this.extractHeadingsFromMarkdown(content);
74
+ if (markdownHeadings.length > 0) return markdownHeadings;
75
+ return this.extractHeadingsFromHtml(content);
76
+ }
77
+ extractHeadingsFromMarkdown(content) {
78
+ const lines = content.split("\n");
79
+ const toc = [];
80
+ const slugCounts = /* @__PURE__ */ new Map();
81
+ for (const line of lines) {
82
+ const match = /^(#{1,6})\s+(.+?)\s*$/.exec(line);
83
+ if (!match) continue;
84
+ const level = match[1].length;
85
+ const text = match[2].trim();
86
+ if (!text) continue;
87
+ const baseSlug = text.toLowerCase().replace(/[^\w\s-]/g, "").trim().replace(/\s+/g, "-");
88
+ const count = slugCounts.get(baseSlug) ?? 0;
89
+ slugCounts.set(baseSlug, count + 1);
90
+ const id = count === 0 ? baseSlug : `${baseSlug}-${count}`;
91
+ toc.push({
92
+ id,
93
+ level,
94
+ text
95
+ });
96
+ }
97
+ return toc;
98
+ }
99
+ extractHeadingsFromHtml(content) {
100
+ const toc = [];
101
+ const slugCounts = /* @__PURE__ */ new Map();
102
+ for (const match of content.matchAll(/<h([1-6])([^>]*)>([\s\S]*?)<\/h\1>/gi)) {
103
+ const level = Number(match[1]);
104
+ const attrs = match[2] ?? "";
105
+ const text = (match[3] ?? "").replace(/<[^>]+>/g, "").trim();
106
+ if (!text) continue;
107
+ const idMatch = /\sid=(['"])(.*?)\1/i.exec(attrs) ?? /\sid=([^\s>]+)/i.exec(attrs);
108
+ let id = idMatch?.[2] ?? idMatch?.[1] ?? "";
109
+ if (!id) id = this.makeSlug(text, slugCounts);
110
+ toc.push({
111
+ id,
112
+ level,
113
+ text
114
+ });
115
+ }
116
+ return toc;
117
+ }
118
+ makeSlug(text, slugCounts) {
119
+ const baseSlug = text.toLowerCase().replace(/[^\w\s-]/g, "").trim().replace(/\s+/g, "-");
120
+ const count = slugCounts.get(baseSlug) ?? 0;
121
+ slugCounts.set(baseSlug, count + 1);
122
+ return count === 0 ? baseSlug : `${baseSlug}-${count}`;
123
+ }
124
+ };
125
+ //#endregion
126
+ export { NoopContentRenderer as n, ContentRenderer as t };
127
+
128
+ //# sourceMappingURL=content-renderer.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content-renderer.mjs","names":[],"sources":["../../src/lib/content-renderer.ts"],"sourcesContent":["/// <reference types=\"vite/client\" />\n\nimport { Injectable, TransferState, inject, makeStateKey } from '@angular/core';\n\nexport type TableOfContentItem = {\n id: string;\n level: number; // starts at 1\n text: string;\n};\n\nexport type RenderedContent = {\n content: string;\n toc: TableOfContentItem[];\n};\n\n@Injectable()\nexport abstract class ContentRenderer {\n async render(content: string): Promise<RenderedContent> {\n return { content, toc: [] };\n }\n\n // Backward-compatible API for consumers that read headings directly.\n getContentHeadings(_content: string): TableOfContentItem[] {\n return [];\n }\n\n // eslint-disable-next-line\n enhance(): void {}\n}\n\nexport class NoopContentRenderer implements ContentRenderer {\n private readonly transferState = inject(TransferState);\n private contentId = 0;\n\n /**\n * Generates a hash from the content string\n * to be used with the transfer state\n */\n private generateHash(str: string) {\n let hash = 0;\n for (let i = 0, len = str.length; i < len; i++) {\n const chr = str.charCodeAt(i);\n hash = (hash << 5) - hash + chr;\n hash |= 0; // Convert to 32bit integer\n }\n return hash;\n }\n\n async render(content: string): Promise<RenderedContent> {\n this.contentId = this.generateHash(content);\n const toc = this.getContentHeadings(content);\n const key = makeStateKey<TableOfContentItem[]>(\n `content-headings-${this.contentId}`,\n );\n\n if (import.meta.env.SSR === true) {\n this.transferState.set(key, toc);\n return { content, toc };\n }\n\n return {\n content,\n toc: this.transferState.get(key, toc),\n };\n }\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n enhance(): void {}\n\n getContentHeadings(content: string): TableOfContentItem[] {\n return this.extractHeadings(content);\n }\n\n private extractHeadings(content: string): TableOfContentItem[] {\n const markdownHeadings = this.extractHeadingsFromMarkdown(content);\n if (markdownHeadings.length > 0) {\n return markdownHeadings;\n }\n\n const htmlHeadings = this.extractHeadingsFromHtml(content);\n return htmlHeadings;\n }\n\n private extractHeadingsFromMarkdown(content: string): TableOfContentItem[] {\n const lines = content.split('\\n');\n const toc: TableOfContentItem[] = [];\n const slugCounts = new Map<string, number>();\n\n for (const line of lines) {\n const match = /^(#{1,6})\\s+(.+?)\\s*$/.exec(line);\n if (!match) {\n continue;\n }\n\n const level = match[1].length;\n const text = match[2].trim();\n if (!text) {\n continue;\n }\n\n const baseSlug = text\n .toLowerCase()\n .replace(/[^\\w\\s-]/g, '')\n .trim()\n .replace(/\\s+/g, '-');\n const count = slugCounts.get(baseSlug) ?? 0;\n slugCounts.set(baseSlug, count + 1);\n const id = count === 0 ? baseSlug : `${baseSlug}-${count}`;\n\n toc.push({ id, level, text });\n }\n\n return toc;\n }\n\n private extractHeadingsFromHtml(content: string): TableOfContentItem[] {\n const toc: TableOfContentItem[] = [];\n const slugCounts = new Map<string, number>();\n const headingRegex = /<h([1-6])([^>]*)>([\\s\\S]*?)<\\/h\\1>/gi;\n\n for (const match of content.matchAll(headingRegex)) {\n const level = Number(match[1]);\n const attrs = match[2] ?? '';\n const rawInner = match[3] ?? '';\n const text = rawInner.replace(/<[^>]+>/g, '').trim();\n if (!text) {\n continue;\n }\n\n const idMatch =\n /\\sid=(['\"])(.*?)\\1/i.exec(attrs) ?? /\\sid=([^\\s>]+)/i.exec(attrs);\n let id = idMatch?.[2] ?? idMatch?.[1] ?? '';\n if (!id) {\n id = this.makeSlug(text, slugCounts);\n }\n\n toc.push({ id, level, text });\n }\n\n return toc;\n }\n\n private makeSlug(text: string, slugCounts: Map<string, number>): string {\n const baseSlug = text\n .toLowerCase()\n .replace(/[^\\w\\s-]/g, '')\n .trim()\n .replace(/\\s+/g, '-');\n const count = slugCounts.get(baseSlug) ?? 0;\n slugCounts.set(baseSlug, count + 1);\n return count === 0 ? baseSlug : `${baseSlug}-${count}`;\n }\n}\n"],"mappings":";;;IAiBQ,kBAAA,MAAA,gBAAkD;CACtD,MAAO,OAAA,SAAA;AAAE,SAAA;GAAA;GAAA,KAAA,EAAA;GAAA;;;AAIX,SAAA,EAAA;;CAKA,UAAgB;;;;;;;;;;;;kBAZjB,sBAAY;GAAA,YAAA;GAAA,SAAA;GAAA,UAAA;GAAA,MAAA;GAAA,CAAA;;;AAeb,GAAA,yBAAa;CAAA,YAA+C;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAA,YAAA,CAAA,EAAA,MAAA,YAAA,CAAA;;gCAEtC;;;;;;;;;CAShB,aAAY,KAAI;EAChB,IAAQ,OAAQ;AAChB,OAAQ,IAAA,IAAA,GAAA,MAAA,IAAA,QAAA,IAAA,KAAA,KAAA;;AAEH,WAAA,QAAA,KAAA,OAAA;;;AAIF,SAAA;;CAEL,MAAM,OAAM,SAAA;AAIR,OAAO,YAAS,KAAQ,aAAM,QAAA;EAC3B,MAAA,MAAA,KAAc,mBAAa,QAAA;EAChC,MAAO,MAAA,aAAA,oBAAA,KAAA,YAAA;AAGT,SAAO;GACL;GACK,KAAK,KAAA,cAAuB,IAAA,KAAA,IAAA;GAClC;;CAKH,UAAA;CACE,mBAAY,SAAgB;;;CAI5B,gBAAM,SAAmB;EACrB,MAAA,mBAA0B,KAAG,4BAAA,QAAA;AAC/B,MAAO,iBAAA,SAAA,EAAA,QAAA;SAIF,KAAA,wBAAA,QAAA;;CAIP,4BAA4B,SAAK;EAC3B,MAA4B,QAAE,QAAA,MAAA,KAAA;EAC9B,MAAA,MAAA,EAAa;EAEd,MAAM,6BAAQ,IAAO,KAAA;AACxB,OAAM,MAAQ,QAAA,OAAA;GACT,MAAO,QAAA,wBAAA,KAAA,KAAA;AACV,OAAA,CAAA,MAAA;GAII,MAAO,QAAS,MAAM,GAAA;GACvB,MAAM,OAAA,MAAA,GAAA,MAAA;AACT,OAAA,CAAA,KAAA;GAQI,MAAQ,WAAW,KACd,aAAc,CACd,QAAU,aAAI,GAAW,CAE3B,MAAA,CAAE,QAAA,QAAA,IAAA;GAAI,MAAA,QAAA,WAAA,IAAA,SAAA,IAAA;AAAO,cAAA,IAAA,UAAA,QAAA,EAAA;GAAO,MAAA,KAAA,UAAA,IAAA,WAAA,GAAA,SAAA,GAAA;;;;;;;;;CAO/B,wBAAoC,SAAA;EAC9B,MAAA,MAAA,EAAa;EACb,MAAA,6BAAe,IAAA,KAAA;AAGnB,OAAM,MAAQ,SAAO,QAAS,SADZ,uCACY,EAAA;GACxB,MAAQ,QAAM,OAAM,MAAA,GAAA;GACpB,MAAA,QAAiB,MAAM,MAAA;GAExB,MAAM,QADW,MAAQ,MAAA,IACnB,QAAA,YAAA,GAAA,CAAA,MAAA;AACT,OAAA,CAAA,KAAA;GAKO,MAAA,UAAgB,sBAAgB,KAAA,MAAA,IAAA,kBAAA,KAAA,MAAA;GAChC,IAAA,KAAA,UAAA,MAAA,UAAA,MAAA;AACF,OAAK,CAAA,GAAA,MAAA,KAAA,SAAA,MAAA,WAAA;AAGD,OAAA,KAAA;IAAA;IAAA;IAAA;IAAA,CAAA;;AAAW,SAAA;;;EAGxB,MAAO,WAAA,KAAA,aAAA,CAGQ,QAAc,aAAyC,GAAA,CAChE,MAAW,CAKX,QAAQ,QAAW,IAAI;EAC7B,MAAW,QAAI,WAAU,IAAU,SAAA,IAAA;AACnC,aAAiB,IAAI,UAAA,QAAc,EAAA"}
@@ -0,0 +1,40 @@
1
+ import * as i0 from "@angular/core";
2
+ import { Injectable } from "@angular/core";
3
+ //#region packages/content/src/lib/marked-content-highlighter.ts
4
+ var MarkedContentHighlighter = class MarkedContentHighlighter {
5
+ static {
6
+ this.ɵfac = i0.ɵɵngDeclareFactory({
7
+ minVersion: "12.0.0",
8
+ version: "21.2.8",
9
+ ngImport: i0,
10
+ type: MarkedContentHighlighter,
11
+ deps: [],
12
+ target: i0.ɵɵFactoryTarget.Injectable
13
+ });
14
+ }
15
+ static {
16
+ this.ɵprov = i0.ɵɵngDeclareInjectable({
17
+ minVersion: "12.0.0",
18
+ version: "21.2.8",
19
+ ngImport: i0,
20
+ type: MarkedContentHighlighter
21
+ });
22
+ }
23
+ };
24
+ i0.ɵɵngDeclareClassMetadata({
25
+ minVersion: "12.0.0",
26
+ version: "21.2.8",
27
+ ngImport: i0,
28
+ type: MarkedContentHighlighter,
29
+ decorators: [{ type: Injectable }]
30
+ });
31
+ function withHighlighter(provider) {
32
+ return {
33
+ provide: MarkedContentHighlighter,
34
+ ...provider
35
+ };
36
+ }
37
+ //#endregion
38
+ export { withHighlighter as n, MarkedContentHighlighter as t };
39
+
40
+ //# sourceMappingURL=marked-content-highlighter.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"marked-content-highlighter.mjs","names":[],"sources":["../../src/lib/marked-content-highlighter.ts"],"sourcesContent":["import {\n AbstractType,\n Injectable,\n Provider,\n ProviderToken,\n Type,\n} from '@angular/core';\n\n@Injectable()\nexport abstract class MarkedContentHighlighter {\n augmentCodeBlock?(code: string, lang: string): string;\n abstract getHighlightExtension(): import('marked').MarkedExtension;\n}\n\nexport function withHighlighter(\n provider: (\n | { useValue: MarkedContentHighlighter }\n | {\n useClass:\n | Type<MarkedContentHighlighter>\n | AbstractType<MarkedContentHighlighter>;\n }\n | { useFactory: (...deps: any[]) => MarkedContentHighlighter }\n ) & { deps?: ProviderToken<any>[] },\n): Provider {\n return { provide: MarkedContentHighlighter, ...provider } as Provider;\n}\n"],"mappings":";;;AASO,IAAA,2BAAA,MAAA,yBAAe;;oCADrB;GAAA,YAAY;GAAA,SAAA;GAAA,UAAA;GAAA,MAAA;GAAA,MAAA,EAAA;GAAA,QAAA,GAAA,gBAAA;GAAA,CAAA;;;;;;;;;;;AAiBX,GAAA,yBAAO;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAA,YAAA,CAAA,EAAW,MAAA,YAA6B,CAAA;CAAA,CAAA;SAAU,gBAAA,UAAA"}
@@ -0,0 +1,45 @@
1
+ import fm from "front-matter";
2
+ //#region packages/content/src/lib/parse-raw-content-file.ts
3
+ var FrontmatterValidationError = class extends Error {
4
+ constructor(issues, filename) {
5
+ const issueMessages = issues.map((i) => {
6
+ const path = i.path ? ` at "${i.path.map((p) => typeof p === "object" ? p.key : p).join(".")}"` : "";
7
+ return ` - ${i.message}${path}`;
8
+ }).join("\n");
9
+ const prefix = filename ? `"${filename}" f` : "F";
10
+ super(`${prefix}rontmatter validation failed:\n${issueMessages}`);
11
+ this.issues = issues;
12
+ this.filename = filename;
13
+ this.name = "FrontmatterValidationError";
14
+ }
15
+ };
16
+ function parseRawContentFile(rawContentFile, schema, filename) {
17
+ const { body, attributes } = fm(rawContentFile);
18
+ if (schema) {
19
+ const result = schema["~standard"].validate(attributes);
20
+ if (result != null && typeof result.then === "function") throw new Error("parseRawContentFile does not support async schema validation. Use parseRawContentFileAsync() for async schemas.");
21
+ const syncResult = result;
22
+ if (syncResult.issues) throw new FrontmatterValidationError(syncResult.issues, filename);
23
+ return {
24
+ content: body,
25
+ attributes: syncResult.value
26
+ };
27
+ }
28
+ return {
29
+ content: body,
30
+ attributes
31
+ };
32
+ }
33
+ async function parseRawContentFileAsync(rawContentFile, schema, filename) {
34
+ const { body, attributes } = fm(rawContentFile);
35
+ const result = await schema["~standard"].validate(attributes);
36
+ if (result.issues) throw new FrontmatterValidationError(result.issues, filename);
37
+ return {
38
+ content: body,
39
+ attributes: result.value
40
+ };
41
+ }
42
+ //#endregion
43
+ export { parseRawContentFile as n, parseRawContentFileAsync as r, FrontmatterValidationError as t };
44
+
45
+ //# sourceMappingURL=parse-raw-content-file.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-raw-content-file.mjs","names":[],"sources":["../../src/lib/parse-raw-content-file.ts"],"sourcesContent":["import type { StandardSchemaV1 } from '@standard-schema/spec';\nimport fm from 'front-matter';\n\nexport class FrontmatterValidationError extends Error {\n constructor(\n public readonly issues: ReadonlyArray<StandardSchemaV1.Issue>,\n public readonly filename?: string,\n ) {\n const issueMessages = issues\n .map((i) => {\n const path = i.path\n ? ` at \"${i.path.map((p) => (typeof p === 'object' ? p.key : p)).join('.')}\"`\n : '';\n return ` - ${i.message}${path}`;\n })\n .join('\\n');\n const prefix = filename ? `\"${filename}\" f` : 'F';\n super(`${prefix}rontmatter validation failed:\\n${issueMessages}`);\n this.name = 'FrontmatterValidationError';\n }\n}\n\nexport function parseRawContentFile<\n Attributes extends Record<string, any> = Record<string, any>,\n>(rawContentFile: string): { content: string; attributes: Attributes };\n\nexport function parseRawContentFile<TSchema extends StandardSchemaV1>(\n rawContentFile: string,\n schema: TSchema,\n filename?: string,\n): { content: string; attributes: StandardSchemaV1.InferOutput<TSchema> };\n\nexport function parseRawContentFile(\n rawContentFile: string,\n schema?: StandardSchemaV1,\n filename?: string,\n): { content: string; attributes: unknown } {\n const { body, attributes } = fm(rawContentFile);\n\n if (schema) {\n const result = schema['~standard'].validate(attributes);\n if (\n result != null &&\n typeof (result as PromiseLike<unknown>).then === 'function'\n ) {\n throw new Error(\n 'parseRawContentFile does not support async schema validation. ' +\n 'Use parseRawContentFileAsync() for async schemas.',\n );\n }\n const syncResult = result as StandardSchemaV1.Result<\n StandardSchemaV1.InferOutput<typeof schema>\n >;\n if (syncResult.issues) {\n throw new FrontmatterValidationError(syncResult.issues, filename);\n }\n return { content: body, attributes: syncResult.value };\n }\n\n return { content: body, attributes };\n}\n\nexport async function parseRawContentFileAsync<\n TSchema extends StandardSchemaV1,\n>(\n rawContentFile: string,\n schema: TSchema,\n filename?: string,\n): Promise<{\n content: string;\n attributes: StandardSchemaV1.InferOutput<TSchema>;\n}> {\n const { body, attributes } = fm(rawContentFile);\n const result = await schema['~standard'].validate(attributes);\n if (result.issues) {\n throw new FrontmatterValidationError(result.issues, filename);\n }\n return { content: body, attributes: result.value };\n}\n"],"mappings":";;AAGA,IAAa,6BAAb,cAAgD,MAAM;CACpD,YACE,QACA,UACA;EACM,MAAA,gBAAgB,OAEZ,KAAS,MAAA;GAGR,MAAO,OAAE,EAAA,OAEP,QAAA,EAAA,KAAA,KAAA,MAAA,OAAA,MAAA,WAAA,EAAA,MAAA,EAAA,CAAA,KAAA,IAAA,CAAA,KACE;AACN,UAAO,OAAA,EAAA,UAAA;IAZA,CACA,KAAA,KAAA;EAYX,MAAO,SAAA,WAAA,IAAA,SAAA,OAAA;;;AAcT,OAAA,WAAS;AAKR,OAAE,OAAM;;;AAIZ,SACY,oBACF,gBAAyC,QACjD,UAAA;CACA,MAAM,EAAA,MAAI,eACR,GAAA,eAAA;;EAIE,MAAA,SAAa,OAAA,aAAA,SAAA,WAAA;AAGf,MAAA,UAAW,QACP,OAAI,OAAA,SAAA,WAAA,OAAA,IAAA,MAAA,kHAEL;EAAiB,MAAA,aAAuB;AAAO,MAAA,WAAA,OAAA,OAAA,IAAA,2BAAA,WAAA,QAAA,SAAA;AAG/C,SAAS;GAAA,SAAA;GAAA,YAAA,WAAA;GAAA;;AAAkB,QAAA;EAAA,SAAA;EAAA;EAAA;;AAGtC,eAAsB,yBAGpB,gBACA,QACA,UAIC;CACD,MAAQ,EAAA,MAAM,eAAkB,GAAA,eAAe;CAC/C,MAAM,SAAS,MAAM,OAAO,aAAa,SAAS,WAAW;AAC7D,KAAI,OAAO,OACH,OAAI,IAAA,2BAA2B,OAAO,QAAQ,SAAS;AAE/D,QAAO;EAAA,SAAA;EAAA,YAAA,OAAA;EAAA"}
@@ -0,0 +1,4 @@
1
+ {
2
+ "module": "../fesm2022/analogjs-content-md4x.mjs",
3
+ "typings": "../types/md4x/src/index.d.ts"
4
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "module": "../fesm2022/analogjs-content-mdc.mjs",
3
+ "typings": "../types/mdc/src/index.d.ts"
4
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@analogjs/content",
3
- "version": "3.0.0-alpha.3",
3
+ "version": "3.0.0-alpha.30",
4
4
  "description": "Content Rendering for Analog",
5
5
  "type": "module",
6
6
  "author": "Brandon Roberts <robertsbt@gmail.com>",
@@ -23,81 +23,116 @@
23
23
  "url": "https://github.com/sponsors/brandonroberts"
24
24
  },
25
25
  "peerDependencies": {
26
- "@angular/common": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0 || ^21.0.0",
27
- "@angular/core": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0 || ^21.0.0",
28
- "@angular/platform-browser": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0 || ^21.0.0",
29
- "@angular/router": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0 || ^21.0.0",
26
+ "@angular/common": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0 || ^21.0.0",
27
+ "@angular/core": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0 || ^21.0.0",
28
+ "@angular/platform-browser": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0 || ^21.0.0",
29
+ "@angular/router": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0 || ^21.0.0",
30
30
  "@nx/devkit": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0 || ^21.0.0 || ^22.0.0 || ^22",
31
31
  "front-matter": "^4.0.2",
32
- "marked": "^15.0.7",
33
- "marked-gfm-heading-id": "^4.1.1",
34
- "marked-highlight": "^2.2.1",
35
- "marked-mangle": "^1.1.10",
32
+ "marked": "^18.0.0",
33
+ "marked-gfm-heading-id": "^4.1.3",
34
+ "marked-highlight": "^2.2.3",
35
+ "marked-mangle": "^1.1.12",
36
36
  "rxjs": "^6.5.0 || ^7.5.0",
37
- "prismjs": "^1.29.0",
37
+ "@standard-schema/spec": "^1.1.0",
38
+ "prismjs": "^1.30.0",
38
39
  "satori": "^0.10.14",
39
40
  "satori-html": "^0.3.2",
40
- "sharp": "^0.33.5"
41
+ "sharp": "^0.34.5",
42
+ "md4x": ">=0.0.20"
41
43
  },
42
44
  "peerDependenciesMeta": {
43
45
  "@nx/devkit": {
44
46
  "optional": true
45
47
  },
48
+ "md4x": {
49
+ "optional": true
50
+ },
46
51
  "satori": {
47
52
  "optional": true
48
53
  },
49
54
  "satori-html": {
50
55
  "optional": true
51
56
  },
57
+ "@standard-schema/spec": {
58
+ "optional": true
59
+ },
52
60
  "sharp": {
53
61
  "optional": true
62
+ },
63
+ "prismjs": {
64
+ "optional": true
54
65
  }
55
66
  },
56
- "dependencies": {
57
- "tslib": "^2.3.0"
58
- },
59
- "ng-update": {
60
- "packageGroup": [
61
- "@analogjs/platform",
62
- "@analogjs/content",
63
- "@analogjs/router",
64
- "@analogjs/storybook-angular",
65
- "@analogjs/vite-plugin-angular",
66
- "@analogjs/vite-plugin-nitro",
67
- "@analogjs/vitest-angular"
68
- ],
69
- "migrations": "./plugin/migrations.json"
70
- },
71
- "publishConfig": {
72
- "access": "public",
73
- "provenance": true
74
- },
75
- "module": "fesm2022/analogjs-content.mjs",
76
- "typings": "types/src/index.d.ts",
77
67
  "exports": {
78
68
  "./package.json": {
79
69
  "default": "./package.json"
80
70
  },
81
71
  ".": {
82
72
  "types": "./types/src/index.d.ts",
73
+ "import": "./fesm2022/analogjs-content.mjs",
83
74
  "default": "./fesm2022/analogjs-content.mjs"
84
75
  },
76
+ "./devtools": {
77
+ "types": "./types/devtools/src/index.d.ts",
78
+ "import": "./fesm2022/analogjs-content-devtools.mjs",
79
+ "default": "./fesm2022/analogjs-content-devtools.mjs"
80
+ },
81
+ "./md4x": {
82
+ "types": "./types/md4x/src/index.d.ts",
83
+ "import": "./fesm2022/analogjs-content-md4x.mjs",
84
+ "default": "./fesm2022/analogjs-content-md4x.mjs"
85
+ },
86
+ "./mdc": {
87
+ "types": "./types/mdc/src/index.d.ts",
88
+ "import": "./fesm2022/analogjs-content-mdc.mjs",
89
+ "default": "./fesm2022/analogjs-content-mdc.mjs"
90
+ },
85
91
  "./og": {
86
92
  "types": "./types/og/src/index.d.ts",
93
+ "import": "./fesm2022/analogjs-content-og.mjs",
87
94
  "default": "./fesm2022/analogjs-content-og.mjs"
88
95
  },
89
96
  "./prism-highlighter": {
90
97
  "types": "./types/prism-highlighter/src/index.d.ts",
98
+ "import": "./fesm2022/analogjs-content-prism-highlighter.mjs",
91
99
  "default": "./fesm2022/analogjs-content-prism-highlighter.mjs"
92
100
  },
93
- "./shiki-highlighter": {
94
- "types": "./types/shiki-highlighter/src/index.d.ts",
95
- "default": "./fesm2022/analogjs-content-shiki-highlighter.mjs"
96
- },
97
101
  "./resources": {
98
102
  "types": "./types/resources/src/index.d.ts",
103
+ "import": "./fesm2022/analogjs-content-resources.mjs",
99
104
  "default": "./fesm2022/analogjs-content-resources.mjs"
105
+ },
106
+ "./shiki-highlighter": {
107
+ "types": "./types/shiki-highlighter/src/index.d.ts",
108
+ "import": "./fesm2022/analogjs-content-shiki-highlighter.mjs",
109
+ "default": "./fesm2022/analogjs-content-shiki-highlighter.mjs"
100
110
  }
101
111
  },
112
+ "dependencies": {
113
+ "tslib": "^2.3.0"
114
+ },
115
+ "devDependencies": {
116
+ "@analogjs/vite-plugin-angular": "3.0.0-alpha.30",
117
+ "@analogjs/vitest-angular": "3.0.0-alpha.30"
118
+ },
119
+ "ng-update": {
120
+ "packageGroup": [
121
+ "@analogjs/platform",
122
+ "@analogjs/content",
123
+ "@analogjs/router",
124
+ "@analogjs/storybook-angular",
125
+ "@analogjs/vite-plugin-angular",
126
+ "@analogjs/vite-plugin-nitro",
127
+ "@analogjs/vitest-angular"
128
+ ],
129
+ "migrations": "./plugin/migrations.json"
130
+ },
131
+ "publishConfig": {
132
+ "access": "public",
133
+ "provenance": true
134
+ },
135
+ "module": "fesm2022/analogjs-content.mjs",
136
+ "typings": "types/src/index.d.ts",
102
137
  "sideEffects": false
103
138
  }
@@ -54,7 +54,7 @@
54
54
  "description": "Adds marked dependency to support markdown rendering",
55
55
  "packages": {
56
56
  "marked": {
57
- "version": "^15.0.7",
57
+ "version": "^18.0.0",
58
58
  "alwaysAddToPackageJson": true
59
59
  },
60
60
  "marked-mangle": {
@@ -1,23 +1,3 @@
1
1
  {
2
- "name": "content-plugin",
3
- "version": "0.0.1",
4
- "main": "./src/index.js",
5
- "type": "commonjs",
6
- "dependencies": {
7
- "ts-morph": "^27.0.0",
8
- "tslib": "^2.8.1"
9
- },
10
- "peerDependencies": {
11
- "@nx/devkit": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0 || ^21.0.0 || ^22.0.0 || ^22",
12
- "vite": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0"
13
- },
14
- "peerDependenciesMeta": {
15
- "@nx/devkit": {
16
- "optional": true
17
- },
18
- "vite": {
19
- "optional": true
20
- }
21
- },
22
- "types": "./src/index.d.ts"
23
- }
2
+ "type": "commonjs"
3
+ }
@@ -1,2 +1,4 @@
1
+ //#region src/index.d.ts
1
2
  declare const _default: undefined;
2
- export default _default;
3
+ export = _default;
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../../../content-plugin/src/index.ts"],"mappings":";cACM,QAAA;AAAA"}
@@ -1,6 +1,7 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- // eslint-disable-next-line @typescript-eslint/no-inferrable-types
1
+
2
+ //#region src/index.ts
4
3
  const _default = void 0;
5
- exports.default = _default;
4
+
5
+ //#endregion
6
+ module.exports = _default;
6
7
  //# sourceMappingURL=index.js.map