@analogjs/content 3.0.0-alpha.20 → 3.0.0-alpha.22
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.
- package/fesm2022/analogjs-content-md4x.mjs +6 -6
- package/fesm2022/analogjs-content-mdc.mjs +3 -3
- package/fesm2022/analogjs-content-prism-highlighter.mjs +3 -3
- package/fesm2022/analogjs-content-resources.mjs.map +1 -1
- package/fesm2022/analogjs-content.mjs +21 -21
- package/fesm2022/content-list-loader.mjs +6 -6
- package/package.json +15 -12
- package/types/resources/src/content-file-resource.d.ts +2 -0
|
@@ -68,7 +68,7 @@ var Md4xContentRendererService = class Md4xContentRendererService extends Conten
|
|
|
68
68
|
static {
|
|
69
69
|
this.ɵfac = i0.ɵɵngDeclareFactory({
|
|
70
70
|
minVersion: "12.0.0",
|
|
71
|
-
version: "21.2.
|
|
71
|
+
version: "21.2.6",
|
|
72
72
|
ngImport: i0,
|
|
73
73
|
type: Md4xContentRendererService,
|
|
74
74
|
deps: null,
|
|
@@ -78,7 +78,7 @@ var Md4xContentRendererService = class Md4xContentRendererService extends Conten
|
|
|
78
78
|
static {
|
|
79
79
|
this.ɵprov = i0.ɵɵngDeclareInjectable({
|
|
80
80
|
minVersion: "12.0.0",
|
|
81
|
-
version: "21.2.
|
|
81
|
+
version: "21.2.6",
|
|
82
82
|
ngImport: i0,
|
|
83
83
|
type: Md4xContentRendererService
|
|
84
84
|
});
|
|
@@ -86,7 +86,7 @@ var Md4xContentRendererService = class Md4xContentRendererService extends Conten
|
|
|
86
86
|
};
|
|
87
87
|
i0.ɵɵngDeclareClassMetadata({
|
|
88
88
|
minVersion: "12.0.0",
|
|
89
|
-
version: "21.2.
|
|
89
|
+
version: "21.2.6",
|
|
90
90
|
ngImport: i0,
|
|
91
91
|
type: Md4xContentRendererService,
|
|
92
92
|
decorators: [{ type: Injectable }]
|
|
@@ -161,7 +161,7 @@ var Md4xWasmContentRendererService = class Md4xWasmContentRendererService extend
|
|
|
161
161
|
static {
|
|
162
162
|
this.ɵfac = i0.ɵɵngDeclareFactory({
|
|
163
163
|
minVersion: "12.0.0",
|
|
164
|
-
version: "21.2.
|
|
164
|
+
version: "21.2.6",
|
|
165
165
|
ngImport: i0,
|
|
166
166
|
type: Md4xWasmContentRendererService,
|
|
167
167
|
deps: null,
|
|
@@ -171,7 +171,7 @@ var Md4xWasmContentRendererService = class Md4xWasmContentRendererService extend
|
|
|
171
171
|
static {
|
|
172
172
|
this.ɵprov = i0.ɵɵngDeclareInjectable({
|
|
173
173
|
minVersion: "12.0.0",
|
|
174
|
-
version: "21.2.
|
|
174
|
+
version: "21.2.6",
|
|
175
175
|
ngImport: i0,
|
|
176
176
|
type: Md4xWasmContentRendererService
|
|
177
177
|
});
|
|
@@ -179,7 +179,7 @@ var Md4xWasmContentRendererService = class Md4xWasmContentRendererService extend
|
|
|
179
179
|
};
|
|
180
180
|
i0.ɵɵngDeclareClassMetadata({
|
|
181
181
|
minVersion: "12.0.0",
|
|
182
|
-
version: "21.2.
|
|
182
|
+
version: "21.2.6",
|
|
183
183
|
ngImport: i0,
|
|
184
184
|
type: Md4xWasmContentRendererService,
|
|
185
185
|
decorators: [{ type: Injectable }]
|
|
@@ -117,7 +117,7 @@ var MdcRendererDirective = class MdcRendererDirective {
|
|
|
117
117
|
static {
|
|
118
118
|
this.ɵfac = i0.ɵɵngDeclareFactory({
|
|
119
119
|
minVersion: "12.0.0",
|
|
120
|
-
version: "21.2.
|
|
120
|
+
version: "21.2.6",
|
|
121
121
|
ngImport: i0,
|
|
122
122
|
type: MdcRendererDirective,
|
|
123
123
|
deps: [],
|
|
@@ -127,7 +127,7 @@ var MdcRendererDirective = class MdcRendererDirective {
|
|
|
127
127
|
static {
|
|
128
128
|
this.ɵdir = i0.ɵɵngDeclareDirective({
|
|
129
129
|
minVersion: "17.1.0",
|
|
130
|
-
version: "21.2.
|
|
130
|
+
version: "21.2.6",
|
|
131
131
|
type: MdcRendererDirective,
|
|
132
132
|
isStandalone: true,
|
|
133
133
|
selector: "[mdcAst]",
|
|
@@ -144,7 +144,7 @@ var MdcRendererDirective = class MdcRendererDirective {
|
|
|
144
144
|
};
|
|
145
145
|
i0.ɵɵngDeclareClassMetadata({
|
|
146
146
|
minVersion: "12.0.0",
|
|
147
|
-
version: "21.2.
|
|
147
|
+
version: "21.2.6",
|
|
148
148
|
ngImport: i0,
|
|
149
149
|
type: MdcRendererDirective,
|
|
150
150
|
decorators: [{
|
|
@@ -45,7 +45,7 @@ var PrismHighlighter = class PrismHighlighter extends MarkedContentHighlighter {
|
|
|
45
45
|
static {
|
|
46
46
|
this.ɵfac = i0.ɵɵngDeclareFactory({
|
|
47
47
|
minVersion: "12.0.0",
|
|
48
|
-
version: "21.2.
|
|
48
|
+
version: "21.2.6",
|
|
49
49
|
ngImport: i0,
|
|
50
50
|
type: PrismHighlighter,
|
|
51
51
|
deps: null,
|
|
@@ -55,7 +55,7 @@ var PrismHighlighter = class PrismHighlighter extends MarkedContentHighlighter {
|
|
|
55
55
|
static {
|
|
56
56
|
this.ɵprov = i0.ɵɵngDeclareInjectable({
|
|
57
57
|
minVersion: "12.0.0",
|
|
58
|
-
version: "21.2.
|
|
58
|
+
version: "21.2.6",
|
|
59
59
|
ngImport: i0,
|
|
60
60
|
type: PrismHighlighter
|
|
61
61
|
});
|
|
@@ -63,7 +63,7 @@ var PrismHighlighter = class PrismHighlighter extends MarkedContentHighlighter {
|
|
|
63
63
|
};
|
|
64
64
|
i0.ɵɵngDeclareClassMetadata({
|
|
65
65
|
minVersion: "12.0.0",
|
|
66
|
-
version: "21.2.
|
|
66
|
+
version: "21.2.6",
|
|
67
67
|
ngImport: i0,
|
|
68
68
|
type: PrismHighlighter,
|
|
69
69
|
decorators: [{ type: Injectable }]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analogjs-content-resources.mjs","names":[],"sources":["../../resources/src/content-files-resource.ts","../../resources/src/content-file-resource.ts"],"sourcesContent":["import { resource, ResourceRef } from '@angular/core';\nimport {\n ContentFile,\n injectContentListLoader,\n InjectContentFilesFilterFunction,\n} from '@analogjs/content';\n\nexport function contentFilesResource<Attributes extends Record<string, any>>(\n filterFn?: InjectContentFilesFilterFunction<Attributes> | undefined,\n): ResourceRef<ContentFile<Attributes>[] | undefined> {\n const contentListLoader = injectContentListLoader<Attributes>();\n const contentList = contentListLoader().then((items) =>\n filterFn ? items.filter(filterFn) : items,\n );\n\n return resource({\n loader: () => contentList,\n });\n}\n","import type { StandardSchemaV1 } from '@standard-schema/spec';\nimport {\n computed,\n inject,\n resource,\n Signal,\n type ResourceRef,\n} from '@angular/core';\nimport {\n ContentFile,\n ContentRenderer,\n FrontmatterValidationError,\n parseRawContentFile,\n parseRawContentFileAsync,\n injectContentFileLoader,\n} from '@analogjs/content';\nimport { ActivatedRoute } from '@angular/router';\n\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { from } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nexport interface ContentFileResourceResult<\n Attributes extends Record<string, any> = Record<string, any>,\n> extends ContentFile<Attributes | Record<string, never>> {\n toc: Array<{ id: string; level: number; text: string }>;\n}\n\ntype ContentFileParams = Signal<\n | string\n | {\n customFilename: string;\n }\n>;\n\nasync function validateAttributes<TSchema extends StandardSchemaV1>(\n schema: TSchema,\n attributes: unknown,\n filename?: string,\n) {\n const result = await schema['~standard'].validate(attributes);\n if (result.issues) {\n throw new FrontmatterValidationError(result.issues, filename);\n }\n\n return result.value;\n}\n\nfunction getValidationFilename(filename: string): string {\n return filename.replace(/^\\/src\\/content\\//, '');\n}\n\nasync function getContentFile<\n Attributes extends Record<string, any> = Record<string, any>,\n>(\n contentFiles: Record<string, () => Promise<string>>,\n slug: string,\n fallback: string,\n schema?: StandardSchemaV1,\n): Promise<ContentFile<Attributes | Record<string, never>>> {\n // Normalize file keys so both \"/src/content/...\" and \"/<project>/src/content/...\" resolve.\n // This mirrors normalization used elsewhere in the content pipeline.\n const normalizedFiles: Record<string, () => Promise<string>> = {};\n const stemToKey: Record<string, string> = {};\n for (const [key, resolver] of Object.entries(contentFiles)) {\n const normalizedKey = key\n // replace any prefix up to the content directory with /src/content\n // use a non-greedy match so nested paths containing \"/content\" are preserved\n .replace(/^(?:.*?)\\/content(?=\\/)/, '/src/content')\n // normalize duplicate slashes\n .replace(/\\/{2,}/g, '/');\n normalizedFiles[normalizedKey] = resolver;\n // Index by bare filename stem so slug-only lookups work\n const stem = normalizedKey\n .split('/')\n .pop()\n ?.replace(/\\.[^.]+$/, '');\n if (stem && !stemToKey[stem]) {\n stemToKey[stem] = normalizedKey;\n }\n }\n\n // Try direct file first, then directory index variants, then bare slug via stem\n const base = `/src/content/${slug}`.replace(/\\/{2,}/g, '/');\n const candidates = [`${base}.md`, `${base}/index.md`];\n\n const matchKey =\n candidates.find((k) => k in normalizedFiles) ?? stemToKey[slug];\n const contentFile = matchKey ? normalizedFiles[matchKey] : undefined;\n\n if (!contentFile) {\n return {\n filename: base,\n attributes: {},\n slug: '',\n content: fallback,\n } as ContentFile<Attributes | Record<string, never>>;\n }\n\n const resolvedBase = matchKey!.replace(/\\.md$/, '');\n const validationFilename = getValidationFilename(matchKey!);\n\n return contentFile().then(\n async (contentFile: string | { default: any; metadata: any }) => {\n if (typeof contentFile === 'string') {\n const { content, attributes } = schema\n ? await parseRawContentFileAsync(\n contentFile,\n schema,\n validationFilename,\n )\n : parseRawContentFile<Attributes>(contentFile);\n\n return {\n filename: resolvedBase,\n slug,\n attributes,\n content,\n } as ContentFile<Attributes | Record<string, never>>;\n }\n\n const attributes = schema\n ? await validateAttributes(\n schema,\n contentFile.metadata,\n validationFilename,\n )\n : contentFile.metadata;\n\n return {\n filename: resolvedBase,\n slug,\n attributes,\n content: contentFile.default,\n } as ContentFile<Attributes | Record<string, never>>;\n },\n );\n}\n\n/**\n * Resource for requesting an individual content file.\n *\n * @example\n * ```typescript\n * // Without schema (existing behavior)\n * const post = contentFileResource<BlogAttributes>();\n *\n * // With schema validation\n * import * as v from 'valibot';\n * const BlogSchema = v.object({\n * title: v.string(),\n * date: v.pipe(v.string(), v.isoDate()),\n * });\n * const post = contentFileResource({ schema: BlogSchema });\n * ```\n */\nexport function contentFileResource<\n Attributes extends Record<string, any> = Record<string, any>,\n>(\n params?: ContentFileParams,\n fallback?: string,\n): ResourceRef<ContentFileResourceResult<Attributes> | undefined>;\n\nexport function contentFileResource<TSchema extends StandardSchemaV1>(options: {\n params?: ContentFileParams;\n fallback?: string;\n schema: TSchema;\n}): ResourceRef<\n | ContentFileResourceResult<\n StandardSchemaV1.InferOutput<TSchema> & Record<string, any>\n >\n | undefined\n>;\n\nexport function contentFileResource(\n paramsOrOptions?:\n | ContentFileParams\n | {\n params?: ContentFileParams;\n fallback?: string;\n schema?: StandardSchemaV1;\n },\n fallbackArg = 'No Content Found',\n) {\n // Detect options-object form vs legacy positional form\n const isOptionsObject =\n paramsOrOptions &&\n typeof paramsOrOptions === 'object' &&\n !('set' in paramsOrOptions) && // not a Signal\n ('schema' in paramsOrOptions ||\n 'params' in paramsOrOptions ||\n 'fallback' in paramsOrOptions);\n\n const params: ContentFileParams | undefined = isOptionsObject\n ? (paramsOrOptions as { params?: ContentFileParams }).params\n : (paramsOrOptions as ContentFileParams | undefined);\n const fallback: string = isOptionsObject\n ? ((paramsOrOptions as { fallback?: string }).fallback ??\n 'No Content Found')\n : fallbackArg;\n const schema: StandardSchemaV1 | undefined = isOptionsObject\n ? (paramsOrOptions as { schema?: StandardSchemaV1 }).schema\n : undefined;\n\n const loaderPromise = injectContentFileLoader();\n const contentRenderer = inject(ContentRenderer);\n const contentFilesMap = toSignal(from(loaderPromise()));\n const input =\n params ||\n toSignal(\n inject(ActivatedRoute).paramMap.pipe(\n map((params) => params.get('slug') as string),\n ),\n { requireSync: true },\n );\n\n return resource({\n params: computed(() => ({ input: input(), files: contentFilesMap() })),\n loader: async ({ params: resourceParams }) => {\n const { input: param, files } = resourceParams;\n\n if (typeof param === 'string') {\n if (param) {\n const file = await getContentFile(files!, param, fallback, schema);\n if (typeof file.content === 'string') {\n const rendered = (await contentRenderer.render(file.content)) as {\n toc?: Array<{ id: string; level: number; text: string }>;\n };\n return {\n ...file,\n toc: rendered.toc ?? [],\n };\n }\n return {\n ...file,\n toc: [],\n };\n }\n\n return {\n filename: '',\n slug: '',\n attributes: {},\n content: fallback,\n toc: [],\n };\n } else {\n const file = await getContentFile(\n files!,\n param.customFilename,\n fallback,\n schema,\n );\n if (typeof file.content === 'string') {\n const rendered = (await contentRenderer.render(file.content)) as {\n toc?: Array<{ id: string; level: number; text: string }>;\n };\n return {\n ...file,\n toc: rendered.toc ?? [],\n };\n }\n return {\n ...file,\n toc: [],\n };\n }\n },\n });\n}\n"],"mappings":";;;;;;;AAOA,SAAgB,qBACd,UACoD;CAEpD,MAAM,cADoB,yBAAqC,EACvB,CAAA,MAAM,UAC5C,WAAW,MAAM,OAAO,SAAY,GAAA,MACrC;AAED,QAAO,SACL,EAAA,cAAA,aAAA,CAAA;;;;ACmBJ,eAAe,mBACb,QACA,YACA,UACA;CACA,MAAM,SAAS,MAAM,OAAO,aAAa,SAAS,WAAW;AAC7D,KAAI,OAAO,OACH,OAAI,IAAA,2BAA2B,OAAO,QAAQ,SAAS;AAG/D,QAAO,OAAO;;AAGhB,SAAS,sBAAsB,UAA0B;AACvD,QAAO,SAAS,QAAQ,qBAAwB,GAAA;;AAGlD,eAAe,eAGb,cACA,MACA,UACA,QAC0D;CAK1D,MAAK,kBAAY,EAAA;CACf,MAAM,YAAA,EAAgB;AAMtB,MAAA,MAAA,CAAA,KAAgB,aAAA,OAAiB,QAAA,aAAA,EAAA;EAE3B,MAAA,gBACH,IAAA,QAAA,2BAAA,eAAA,CASC,QAAO,WAAgB,IAAA;AACvB,kBAAiB,iBAAc;EAI/B,MAAA,OAAc,cAEf,MAAa,IAAA,CACT,KAAA,EACK,QAAA,YAAA,GAAA;AACV,MAAA,QAAc,CAAA,UAAA,MACR,WAAA,QAAA;;CAKV,MAAM,OAAA,gBAAyB,OAAQ,QAAS,WAAG,IAAA;CAGnD,MAAO,WAFD,CAAA,GAAA,KAAqB,MAAA,GAAA,KAAA,WAAsB,CAG/C,MAAO,MAAA,KAAA,gBAA0D,IAAA,UAAA;CAC/D,MAAI,cAAO,WAAgB,gBAAU,YAAA,KAAA;AACnC,KAAA,CAAM,YAQN,QAAO;EACL,UAAU;EACV,YAAA,EAAA;EACA,MAAA;EACA,SAAA;EACD;CAGH,MAAM,eAAa,SACf,QAAM,SAAA,GAAA;CAOV,MAAO,qBAAA,sBAAA,SAAA;AACL,QAAA,aAAU,CAAA,KAAA,OAAA,gBAAA;AACV,MAAA,OAAA,gBAAA,UAAA;GACA,MAAA,EAAA,SAAA,eAAA,SACS,MAAY,yBAAA,aAAA,QAAA,mBAAA,GACtB,oBAAA,YAAA;AAEJ,UAAA;;IAsCa;IAWR;IAQwC;IAGxC;;AAWA,SACJ;GAQK,UAAS;GACN;GAAyB,YAbb,SAChB,MAAA,mBAAyB,QAAA,YAAgB,UAAA,mBAAA,GACzC,YAAkB;GAW2B,SAAA,YAAA;GAAqB;GACtE;;AAGE,SAAW,oBAAoB,iBAAA,cAAA,oBAAA;OAE3B,kBAAmB,mBACnB,OAAI,oBAAwB,YAC1B,EAAA,SAAM,qBAGN,YAAO,mBACF,YAAA,mBACE,cAAS;OACf,SAAA,kBAAA,gBAAA,SAEH;OACK,WAAA,kBACE,gBAAA,YACN,qBAAA;CAGH,MAAA,SAAO,kBACL,gBAAU,SACV,KAAA;OACA,gBAAc,yBAAA;OACd,kBAAS,OAAA,gBAAA;OACJ,kBAAA,SAAA,KAAA,eAAA,CAAA,CAAA;OACN,QAAA,UAAA,SACI,OAAA,eAAA,CAAA,SAAA,KAAA,KAAA,WAAA,OAAA,IAAA,OAAA,CAAA,CAAA,EAAA,EAAA,aAAA,MAAA,CAAA;AACL,QAAM,SAAO;EAMT,QAAO,gBAAiB;GAAA,OAAA,OAAU;GAAA,OAAA,iBAAA;GAAA,EAAA;EACpC,QAAM,OAAY,EAAA,QAAM,qBAAuB;GAGxC,MAAA,EAAA,OAAA,OAAA,UAAA;AACF,OAAA,OAAA,UAAA,UAAA;AACE,QAAS,OAAO;KACtB,MAAA,OAAA,MAAA,eAAA,OAAA,OAAA,UAAA,OAAA;;MAEI,MAAA,WAAA,MAAA,gBAAA,OAAA,KAAA,QAAA;AACF,aAAA;OACE,GAAA;OACN,KAAA,SAAA,OAAA,EAAA;;;AAGL,YAAA"}
|
|
1
|
+
{"version":3,"file":"analogjs-content-resources.mjs","names":[],"sources":["../../resources/src/content-files-resource.ts","../../resources/src/content-file-resource.ts"],"sourcesContent":["import { resource, ResourceRef } from '@angular/core';\nimport {\n ContentFile,\n injectContentListLoader,\n InjectContentFilesFilterFunction,\n} from '@analogjs/content';\n\nexport function contentFilesResource<Attributes extends Record<string, any>>(\n filterFn?: InjectContentFilesFilterFunction<Attributes> | undefined,\n): ResourceRef<ContentFile<Attributes>[] | undefined> {\n const contentListLoader = injectContentListLoader<Attributes>();\n const contentList = contentListLoader().then((items) =>\n filterFn ? items.filter(filterFn) : items,\n );\n\n return resource({\n loader: () => contentList,\n });\n}\n","import type { StandardSchemaV1 } from '@standard-schema/spec';\nimport {\n computed,\n inject,\n resource,\n Signal,\n type ResourceRef,\n} from '@angular/core';\nimport {\n ContentFile,\n ContentRenderer,\n FrontmatterValidationError,\n parseRawContentFile,\n parseRawContentFileAsync,\n injectContentFileLoader,\n} from '@analogjs/content';\nimport { ActivatedRoute } from '@angular/router';\n\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { from } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nexport interface ContentFileResourceResult<\n Attributes extends Record<string, any> = Record<string, any>,\n> extends ContentFile<Attributes | Record<string, never>> {\n toc: Array<{ id: string; level: number; text: string }>;\n}\n\ntype ContentFileParams =\n | Signal<string | { customFilename: string }>\n | Signal<string>\n | Signal<{ customFilename: string }>;\n\nasync function validateAttributes<TSchema extends StandardSchemaV1>(\n schema: TSchema,\n attributes: unknown,\n filename?: string,\n) {\n const result = await schema['~standard'].validate(attributes);\n if (result.issues) {\n throw new FrontmatterValidationError(result.issues, filename);\n }\n\n return result.value;\n}\n\nfunction getValidationFilename(filename: string): string {\n return filename.replace(/^\\/src\\/content\\//, '');\n}\n\nasync function getContentFile<\n Attributes extends Record<string, any> = Record<string, any>,\n>(\n contentFiles: Record<string, () => Promise<string>>,\n slug: string,\n fallback: string,\n schema?: StandardSchemaV1,\n): Promise<ContentFile<Attributes | Record<string, never>>> {\n // Normalize file keys so both \"/src/content/...\" and \"/<project>/src/content/...\" resolve.\n // This mirrors normalization used elsewhere in the content pipeline.\n const normalizedFiles: Record<string, () => Promise<string>> = {};\n const stemToKey: Record<string, string> = {};\n for (const [key, resolver] of Object.entries(contentFiles)) {\n const normalizedKey = key\n // replace any prefix up to the content directory with /src/content\n // use a non-greedy match so nested paths containing \"/content\" are preserved\n .replace(/^(?:.*?)\\/content(?=\\/)/, '/src/content')\n // normalize duplicate slashes\n .replace(/\\/{2,}/g, '/');\n normalizedFiles[normalizedKey] = resolver;\n // Index by bare filename stem so slug-only lookups work\n const stem = normalizedKey\n .split('/')\n .pop()\n ?.replace(/\\.[^.]+$/, '');\n if (stem && !stemToKey[stem]) {\n stemToKey[stem] = normalizedKey;\n }\n }\n\n // Try direct file first, then directory index variants, then bare slug via stem\n const base = `/src/content/${slug}`.replace(/\\/{2,}/g, '/');\n const candidates = [`${base}.md`, `${base}/index.md`];\n\n const matchKey =\n candidates.find((k) => k in normalizedFiles) ?? stemToKey[slug];\n const contentFile = matchKey ? normalizedFiles[matchKey] : undefined;\n\n if (!contentFile) {\n return {\n filename: base,\n attributes: {},\n slug: '',\n content: fallback,\n } as ContentFile<Attributes | Record<string, never>>;\n }\n\n const resolvedBase = matchKey!.replace(/\\.md$/, '');\n const validationFilename = getValidationFilename(matchKey!);\n\n return contentFile().then(\n async (contentFile: string | { default: any; metadata: any }) => {\n if (typeof contentFile === 'string') {\n const { content, attributes } = schema\n ? await parseRawContentFileAsync(\n contentFile,\n schema,\n validationFilename,\n )\n : parseRawContentFile<Attributes>(contentFile);\n\n return {\n filename: resolvedBase,\n slug,\n attributes,\n content,\n } as ContentFile<Attributes | Record<string, never>>;\n }\n\n const attributes = schema\n ? await validateAttributes(\n schema,\n contentFile.metadata,\n validationFilename,\n )\n : contentFile.metadata;\n\n return {\n filename: resolvedBase,\n slug,\n attributes,\n content: contentFile.default,\n } as ContentFile<Attributes | Record<string, never>>;\n },\n );\n}\n\n/**\n * Resource for requesting an individual content file.\n *\n * @example\n * ```typescript\n * // Without schema (existing behavior)\n * const post = contentFileResource<BlogAttributes>();\n *\n * // With schema validation\n * import * as v from 'valibot';\n * const BlogSchema = v.object({\n * title: v.string(),\n * date: v.pipe(v.string(), v.isoDate()),\n * });\n * const post = contentFileResource({ schema: BlogSchema });\n * ```\n */\nexport function contentFileResource<\n Attributes extends Record<string, any> = Record<string, any>,\n>(\n params?: ContentFileParams,\n fallback?: string,\n): ResourceRef<ContentFileResourceResult<Attributes> | undefined>;\n\nexport function contentFileResource<TSchema extends StandardSchemaV1>(options: {\n params?: ContentFileParams;\n fallback?: string;\n schema: TSchema;\n}): ResourceRef<\n | ContentFileResourceResult<\n StandardSchemaV1.InferOutput<TSchema> & Record<string, any>\n >\n | undefined\n>;\n\nexport function contentFileResource(\n paramsOrOptions?:\n | ContentFileParams\n | {\n params?: ContentFileParams;\n fallback?: string;\n schema?: StandardSchemaV1;\n },\n fallbackArg = 'No Content Found',\n) {\n // Detect options-object form vs legacy positional form\n const isOptionsObject =\n paramsOrOptions &&\n typeof paramsOrOptions === 'object' &&\n !('set' in paramsOrOptions) && // not a Signal\n ('schema' in paramsOrOptions ||\n 'params' in paramsOrOptions ||\n 'fallback' in paramsOrOptions);\n\n const params: ContentFileParams | undefined = isOptionsObject\n ? (paramsOrOptions as { params?: ContentFileParams }).params\n : (paramsOrOptions as ContentFileParams | undefined);\n const fallback: string = isOptionsObject\n ? ((paramsOrOptions as { fallback?: string }).fallback ??\n 'No Content Found')\n : fallbackArg;\n const schema: StandardSchemaV1 | undefined = isOptionsObject\n ? (paramsOrOptions as { schema?: StandardSchemaV1 }).schema\n : undefined;\n\n const loaderPromise = injectContentFileLoader();\n const contentRenderer = inject(ContentRenderer);\n const contentFilesMap = toSignal(from(loaderPromise()));\n const input =\n params ||\n toSignal(\n inject(ActivatedRoute).paramMap.pipe(\n map((params) => params.get('slug') as string),\n ),\n { requireSync: true },\n );\n\n return resource({\n params: computed(() => ({ input: input(), files: contentFilesMap() })),\n loader: async ({ params: resourceParams }) => {\n const { input: param, files } = resourceParams;\n\n if (typeof param === 'string') {\n if (param) {\n const file = await getContentFile(files!, param, fallback, schema);\n if (typeof file.content === 'string') {\n const rendered = (await contentRenderer.render(file.content)) as {\n toc?: Array<{ id: string; level: number; text: string }>;\n };\n return {\n ...file,\n toc: rendered.toc ?? [],\n };\n }\n return {\n ...file,\n toc: [],\n };\n }\n\n return {\n filename: '',\n slug: '',\n attributes: {},\n content: fallback,\n toc: [],\n };\n } else {\n const file = await getContentFile(\n files!,\n param.customFilename,\n fallback,\n schema,\n );\n if (typeof file.content === 'string') {\n const rendered = (await contentRenderer.render(file.content)) as {\n toc?: Array<{ id: string; level: number; text: string }>;\n };\n return {\n ...file,\n toc: rendered.toc ?? [],\n };\n }\n return {\n ...file,\n toc: [],\n };\n }\n },\n });\n}\n"],"mappings":";;;;;;;AAOA,SAAgB,qBACd,UACoD;CAEpD,MAAM,cADoB,yBAAqC,EACvB,CAAA,MAAM,UAC5C,WAAW,MAAM,OAAO,SAAY,GAAA,MACrC;AAED,QAAO,SACL,EAAA,cAAA,aAAA,CAAA;;;;ACiBJ,eAAe,mBACb,QACA,YACA,UACA;CACA,MAAM,SAAS,MAAM,OAAO,aAAa,SAAS,WAAW;AAC7D,KAAI,OAAO,OACH,OAAI,IAAA,2BAA2B,OAAO,QAAQ,SAAS;AAG/D,QAAO,OAAO;;AAGhB,SAAS,sBAAsB,UAA0B;AACvD,QAAO,SAAS,QAAQ,qBAAwB,GAAA;;AAGlD,eAAe,eAGb,cACA,MACA,UACA,QAC0D;CAK1D,MAAK,kBAAY,EAAA;CACf,MAAM,YAAA,EAAgB;AAMtB,MAAA,MAAA,CAAA,KAAgB,aAAA,OAAiB,QAAA,aAAA,EAAA;EAE3B,MAAA,gBACH,IAAA,QAAA,2BAAA,eAAA,CASC,QAAO,WAAgB,IAAA;AACvB,kBAAiB,iBAAc;EAI/B,MAAA,OAAc,cAEf,MAAa,IAAA,CACT,KAAA,EACK,QAAA,YAAA,GAAA;AACV,MAAA,QAAc,CAAA,UAAA,MACR,WAAA,QAAA;;CAKV,MAAM,OAAA,gBAAyB,OAAQ,QAAS,WAAG,IAAA;CAGnD,MAAO,WAFD,CAAA,GAAA,KAAqB,MAAA,GAAA,KAAA,WAAsB,CAG/C,MAAO,MAAA,KAAA,gBAA0D,IAAA,UAAA;CAC/D,MAAI,cAAO,WAAgB,gBAAU,YAAA,KAAA;AACnC,KAAA,CAAM,YAQN,QAAO;EACL,UAAU;EACV,YAAA,EAAA;EACA,MAAA;EACA,SAAA;EACD;CAGH,MAAM,eAAa,SACf,QAAM,SAAA,GAAA;CAOV,MAAO,qBAAA,sBAAA,SAAA;AACL,QAAA,aAAU,CAAA,KAAA,OAAA,gBAAA;AACV,MAAA,OAAA,gBAAA,UAAA;GACA,MAAA,EAAA,SAAA,eAAA,SACS,MAAY,yBAAA,aAAA,QAAA,mBAAA,GACtB,oBAAA,YAAA;AAEJ,UAAA;;IAsCa;IAWR;IAQwC;IAGxC;;AAWA,SACJ;GAQK,UAAS;GACN;GAAyB,YAbb,SAChB,MAAA,mBAAyB,QAAA,YAAgB,UAAA,mBAAA,GACzC,YAAkB;GAW2B,SAAA,YAAA;GAAqB;GACtE;;AAGE,SAAW,oBAAoB,iBAAA,cAAA,oBAAA;OAE3B,kBAAmB,mBACnB,OAAI,oBAAwB,YAC1B,EAAA,SAAM,qBAGN,YAAO,mBACF,YAAA,mBACE,cAAS;OACf,SAAA,kBAAA,gBAAA,SAEH;OACK,WAAA,kBACE,gBAAA,YACN,qBAAA;CAGH,MAAA,SAAO,kBACL,gBAAU,SACV,KAAA;OACA,gBAAc,yBAAA;OACd,kBAAS,OAAA,gBAAA;OACJ,kBAAA,SAAA,KAAA,eAAA,CAAA,CAAA;OACN,QAAA,UAAA,SACI,OAAA,eAAA,CAAA,SAAA,KAAA,KAAA,WAAA,OAAA,IAAA,OAAA,CAAA,CAAA,EAAA,EAAA,aAAA,MAAA,CAAA;AACL,QAAM,SAAO;EAMT,QAAO,gBAAiB;GAAA,OAAA,OAAU;GAAA,OAAA,iBAAA;GAAA,EAAA;EACpC,QAAM,OAAY,EAAA,QAAM,qBAAuB;GAGxC,MAAA,EAAA,OAAA,OAAA,UAAA;AACF,OAAA,OAAA,UAAA,UAAA;AACE,QAAS,OAAO;KACtB,MAAA,OAAA,MAAA,eAAA,OAAA,OAAA,UAAA,OAAA;;MAEI,MAAA,WAAA,MAAA,gBAAA,OAAA,KAAA,QAAA;AACF,aAAA;OACE,GAAA;OACN,KAAA,SAAA,OAAA,EAAA;;;AAGL,YAAA"}
|
|
@@ -34,7 +34,7 @@ var AnchorNavigationDirective = class AnchorNavigationDirective {
|
|
|
34
34
|
static {
|
|
35
35
|
this.ɵfac = i0.ɵɵngDeclareFactory({
|
|
36
36
|
minVersion: "12.0.0",
|
|
37
|
-
version: "21.2.
|
|
37
|
+
version: "21.2.6",
|
|
38
38
|
ngImport: i0,
|
|
39
39
|
type: AnchorNavigationDirective,
|
|
40
40
|
deps: [],
|
|
@@ -44,7 +44,7 @@ var AnchorNavigationDirective = class AnchorNavigationDirective {
|
|
|
44
44
|
static {
|
|
45
45
|
this.ɵdir = i0.ɵɵngDeclareDirective({
|
|
46
46
|
minVersion: "14.0.0",
|
|
47
|
-
version: "21.2.
|
|
47
|
+
version: "21.2.6",
|
|
48
48
|
type: AnchorNavigationDirective,
|
|
49
49
|
isStandalone: true,
|
|
50
50
|
selector: "[analogAnchorNavigation]",
|
|
@@ -55,7 +55,7 @@ var AnchorNavigationDirective = class AnchorNavigationDirective {
|
|
|
55
55
|
};
|
|
56
56
|
i0.ɵɵngDeclareClassMetadata({
|
|
57
57
|
minVersion: "12.0.0",
|
|
58
|
-
version: "21.2.
|
|
58
|
+
version: "21.2.6",
|
|
59
59
|
ngImport: i0,
|
|
60
60
|
type: AnchorNavigationDirective,
|
|
61
61
|
decorators: [{
|
|
@@ -198,7 +198,7 @@ var MarkedContentHighlighter = class MarkedContentHighlighter {
|
|
|
198
198
|
static {
|
|
199
199
|
this.ɵfac = i0.ɵɵngDeclareFactory({
|
|
200
200
|
minVersion: "12.0.0",
|
|
201
|
-
version: "21.2.
|
|
201
|
+
version: "21.2.6",
|
|
202
202
|
ngImport: i0,
|
|
203
203
|
type: MarkedContentHighlighter,
|
|
204
204
|
deps: [],
|
|
@@ -208,7 +208,7 @@ var MarkedContentHighlighter = class MarkedContentHighlighter {
|
|
|
208
208
|
static {
|
|
209
209
|
this.ɵprov = i0.ɵɵngDeclareInjectable({
|
|
210
210
|
minVersion: "12.0.0",
|
|
211
|
-
version: "21.2.
|
|
211
|
+
version: "21.2.6",
|
|
212
212
|
ngImport: i0,
|
|
213
213
|
type: MarkedContentHighlighter
|
|
214
214
|
});
|
|
@@ -216,7 +216,7 @@ var MarkedContentHighlighter = class MarkedContentHighlighter {
|
|
|
216
216
|
};
|
|
217
217
|
i0.ɵɵngDeclareClassMetadata({
|
|
218
218
|
minVersion: "12.0.0",
|
|
219
|
-
version: "21.2.
|
|
219
|
+
version: "21.2.6",
|
|
220
220
|
ngImport: i0,
|
|
221
221
|
type: MarkedContentHighlighter,
|
|
222
222
|
decorators: [{ type: Injectable }]
|
|
@@ -259,7 +259,7 @@ var MarkedSetupService = class MarkedSetupService {
|
|
|
259
259
|
static {
|
|
260
260
|
this.ɵfac = i0.ɵɵngDeclareFactory({
|
|
261
261
|
minVersion: "12.0.0",
|
|
262
|
-
version: "21.2.
|
|
262
|
+
version: "21.2.6",
|
|
263
263
|
ngImport: i0,
|
|
264
264
|
type: MarkedSetupService,
|
|
265
265
|
deps: [],
|
|
@@ -269,7 +269,7 @@ var MarkedSetupService = class MarkedSetupService {
|
|
|
269
269
|
static {
|
|
270
270
|
this.ɵprov = i0.ɵɵngDeclareInjectable({
|
|
271
271
|
minVersion: "12.0.0",
|
|
272
|
-
version: "21.2.
|
|
272
|
+
version: "21.2.6",
|
|
273
273
|
ngImport: i0,
|
|
274
274
|
type: MarkedSetupService
|
|
275
275
|
});
|
|
@@ -277,7 +277,7 @@ var MarkedSetupService = class MarkedSetupService {
|
|
|
277
277
|
};
|
|
278
278
|
i0.ɵɵngDeclareClassMetadata({
|
|
279
279
|
minVersion: "12.0.0",
|
|
280
|
-
version: "21.2.
|
|
280
|
+
version: "21.2.6",
|
|
281
281
|
ngImport: i0,
|
|
282
282
|
type: MarkedSetupService,
|
|
283
283
|
decorators: [{ type: Injectable }],
|
|
@@ -304,7 +304,7 @@ var MarkdownContentRendererService = class MarkdownContentRendererService {
|
|
|
304
304
|
static {
|
|
305
305
|
this.ɵfac = i0.ɵɵngDeclareFactory({
|
|
306
306
|
minVersion: "12.0.0",
|
|
307
|
-
version: "21.2.
|
|
307
|
+
version: "21.2.6",
|
|
308
308
|
ngImport: i0,
|
|
309
309
|
type: MarkdownContentRendererService,
|
|
310
310
|
deps: [],
|
|
@@ -314,7 +314,7 @@ var MarkdownContentRendererService = class MarkdownContentRendererService {
|
|
|
314
314
|
static {
|
|
315
315
|
this.ɵprov = i0.ɵɵngDeclareInjectable({
|
|
316
316
|
minVersion: "12.0.0",
|
|
317
|
-
version: "21.2.
|
|
317
|
+
version: "21.2.6",
|
|
318
318
|
ngImport: i0,
|
|
319
319
|
type: MarkdownContentRendererService
|
|
320
320
|
});
|
|
@@ -322,7 +322,7 @@ var MarkdownContentRendererService = class MarkdownContentRendererService {
|
|
|
322
322
|
};
|
|
323
323
|
i0.ɵɵngDeclareClassMetadata({
|
|
324
324
|
minVersion: "12.0.0",
|
|
325
|
-
version: "21.2.
|
|
325
|
+
version: "21.2.6",
|
|
326
326
|
ngImport: i0,
|
|
327
327
|
type: MarkdownContentRendererService,
|
|
328
328
|
decorators: [{ type: Injectable }]
|
|
@@ -366,7 +366,7 @@ var AnalogMarkdownRouteComponent = class AnalogMarkdownRouteComponent {
|
|
|
366
366
|
static {
|
|
367
367
|
this.ɵfac = i0.ɵɵngDeclareFactory({
|
|
368
368
|
minVersion: "12.0.0",
|
|
369
|
-
version: "21.2.
|
|
369
|
+
version: "21.2.6",
|
|
370
370
|
ngImport: i0,
|
|
371
371
|
type: AnalogMarkdownRouteComponent,
|
|
372
372
|
deps: [],
|
|
@@ -376,7 +376,7 @@ var AnalogMarkdownRouteComponent = class AnalogMarkdownRouteComponent {
|
|
|
376
376
|
static {
|
|
377
377
|
this.ɵcmp = i0.ɵɵngDeclareComponent({
|
|
378
378
|
minVersion: "14.0.0",
|
|
379
|
-
version: "21.2.
|
|
379
|
+
version: "21.2.6",
|
|
380
380
|
type: AnalogMarkdownRouteComponent,
|
|
381
381
|
isStandalone: true,
|
|
382
382
|
selector: "analog-markdown-route",
|
|
@@ -392,7 +392,7 @@ var AnalogMarkdownRouteComponent = class AnalogMarkdownRouteComponent {
|
|
|
392
392
|
};
|
|
393
393
|
i0.ɵɵngDeclareClassMetadata({
|
|
394
394
|
minVersion: "12.0.0",
|
|
395
|
-
version: "21.2.
|
|
395
|
+
version: "21.2.6",
|
|
396
396
|
ngImport: i0,
|
|
397
397
|
type: AnalogMarkdownRouteComponent,
|
|
398
398
|
decorators: [{
|
|
@@ -449,7 +449,7 @@ var AnalogMarkdownComponent = class AnalogMarkdownComponent {
|
|
|
449
449
|
static {
|
|
450
450
|
this.ɵfac = i0.ɵɵngDeclareFactory({
|
|
451
451
|
minVersion: "12.0.0",
|
|
452
|
-
version: "21.2.
|
|
452
|
+
version: "21.2.6",
|
|
453
453
|
ngImport: i0,
|
|
454
454
|
type: AnalogMarkdownComponent,
|
|
455
455
|
deps: [],
|
|
@@ -459,7 +459,7 @@ var AnalogMarkdownComponent = class AnalogMarkdownComponent {
|
|
|
459
459
|
static {
|
|
460
460
|
this.ɵcmp = i0.ɵɵngDeclareComponent({
|
|
461
461
|
minVersion: "17.1.0",
|
|
462
|
-
version: "21.2.
|
|
462
|
+
version: "21.2.6",
|
|
463
463
|
type: AnalogMarkdownComponent,
|
|
464
464
|
isStandalone: true,
|
|
465
465
|
selector: "analog-markdown",
|
|
@@ -490,7 +490,7 @@ var AnalogMarkdownComponent = class AnalogMarkdownComponent {
|
|
|
490
490
|
};
|
|
491
491
|
i0.ɵɵngDeclareClassMetadata({
|
|
492
492
|
minVersion: "12.0.0",
|
|
493
|
-
version: "21.2.
|
|
493
|
+
version: "21.2.6",
|
|
494
494
|
ngImport: i0,
|
|
495
495
|
type: AnalogMarkdownComponent,
|
|
496
496
|
decorators: [{
|
|
@@ -566,7 +566,7 @@ var DevToolsContentRenderer = class DevToolsContentRenderer extends ContentRende
|
|
|
566
566
|
static {
|
|
567
567
|
this.ɵfac = i0.ɵɵngDeclareFactory({
|
|
568
568
|
minVersion: "12.0.0",
|
|
569
|
-
version: "21.2.
|
|
569
|
+
version: "21.2.6",
|
|
570
570
|
ngImport: i0,
|
|
571
571
|
type: DevToolsContentRenderer,
|
|
572
572
|
deps: null,
|
|
@@ -576,7 +576,7 @@ var DevToolsContentRenderer = class DevToolsContentRenderer extends ContentRende
|
|
|
576
576
|
static {
|
|
577
577
|
this.ɵprov = i0.ɵɵngDeclareInjectable({
|
|
578
578
|
minVersion: "12.0.0",
|
|
579
|
-
version: "21.2.
|
|
579
|
+
version: "21.2.6",
|
|
580
580
|
ngImport: i0,
|
|
581
581
|
type: DevToolsContentRenderer
|
|
582
582
|
});
|
|
@@ -584,7 +584,7 @@ var DevToolsContentRenderer = class DevToolsContentRenderer extends ContentRende
|
|
|
584
584
|
};
|
|
585
585
|
i0.ɵɵngDeclareClassMetadata({
|
|
586
586
|
minVersion: "12.0.0",
|
|
587
|
-
version: "21.2.
|
|
587
|
+
version: "21.2.6",
|
|
588
588
|
ngImport: i0,
|
|
589
589
|
type: DevToolsContentRenderer,
|
|
590
590
|
decorators: [{ type: Injectable }]
|
|
@@ -15,7 +15,7 @@ var ContentRenderer = class ContentRenderer {
|
|
|
15
15
|
static {
|
|
16
16
|
this.ɵfac = i0.ɵɵngDeclareFactory({
|
|
17
17
|
minVersion: "12.0.0",
|
|
18
|
-
version: "21.2.
|
|
18
|
+
version: "21.2.6",
|
|
19
19
|
ngImport: i0,
|
|
20
20
|
type: ContentRenderer,
|
|
21
21
|
deps: [],
|
|
@@ -25,7 +25,7 @@ var ContentRenderer = class ContentRenderer {
|
|
|
25
25
|
static {
|
|
26
26
|
this.ɵprov = i0.ɵɵngDeclareInjectable({
|
|
27
27
|
minVersion: "12.0.0",
|
|
28
|
-
version: "21.2.
|
|
28
|
+
version: "21.2.6",
|
|
29
29
|
ngImport: i0,
|
|
30
30
|
type: ContentRenderer
|
|
31
31
|
});
|
|
@@ -33,7 +33,7 @@ var ContentRenderer = class ContentRenderer {
|
|
|
33
33
|
};
|
|
34
34
|
i0.ɵɵngDeclareClassMetadata({
|
|
35
35
|
minVersion: "12.0.0",
|
|
36
|
-
version: "21.2.
|
|
36
|
+
version: "21.2.6",
|
|
37
37
|
ngImport: i0,
|
|
38
38
|
type: ContentRenderer,
|
|
39
39
|
decorators: [{ type: Injectable }]
|
|
@@ -214,7 +214,7 @@ var RenderTaskService = class RenderTaskService {
|
|
|
214
214
|
static {
|
|
215
215
|
this.ɵfac = i0.ɵɵngDeclareFactory({
|
|
216
216
|
minVersion: "12.0.0",
|
|
217
|
-
version: "21.2.
|
|
217
|
+
version: "21.2.6",
|
|
218
218
|
ngImport: i0,
|
|
219
219
|
type: RenderTaskService,
|
|
220
220
|
deps: [],
|
|
@@ -224,7 +224,7 @@ var RenderTaskService = class RenderTaskService {
|
|
|
224
224
|
static {
|
|
225
225
|
this.ɵprov = i0.ɵɵngDeclareInjectable({
|
|
226
226
|
minVersion: "12.0.0",
|
|
227
|
-
version: "21.2.
|
|
227
|
+
version: "21.2.6",
|
|
228
228
|
ngImport: i0,
|
|
229
229
|
type: RenderTaskService
|
|
230
230
|
});
|
|
@@ -232,7 +232,7 @@ var RenderTaskService = class RenderTaskService {
|
|
|
232
232
|
};
|
|
233
233
|
i0.ɵɵngDeclareClassMetadata({
|
|
234
234
|
minVersion: "12.0.0",
|
|
235
|
-
version: "21.2.
|
|
235
|
+
version: "21.2.6",
|
|
236
236
|
ngImport: i0,
|
|
237
237
|
type: RenderTaskService,
|
|
238
238
|
decorators: [{ type: Injectable }]
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@analogjs/content",
|
|
3
|
-
"version": "3.0.0-alpha.
|
|
3
|
+
"version": "3.0.0-alpha.22",
|
|
4
4
|
"description": "Content Rendering for Analog",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"author": "Brandon Roberts <robertsbt@gmail.com>",
|
|
@@ -23,22 +23,22 @@
|
|
|
23
23
|
"url": "https://github.com/sponsors/brandonroberts"
|
|
24
24
|
},
|
|
25
25
|
"peerDependencies": {
|
|
26
|
-
"@angular/common": "^
|
|
27
|
-
"@angular/core": "^
|
|
28
|
-
"@angular/platform-browser": "^
|
|
29
|
-
"@angular/router": "^
|
|
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
32
|
"marked": "^17.0.5",
|
|
33
|
-
"marked-gfm-heading-id": "^4.1.
|
|
34
|
-
"marked-highlight": "^2.2.
|
|
35
|
-
"marked-mangle": "^1.1.
|
|
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
|
-
"@standard-schema/spec": "^1.
|
|
38
|
-
"prismjs": "^1.
|
|
37
|
+
"@standard-schema/spec": "^1.1.0",
|
|
38
|
+
"prismjs": "^1.30.0",
|
|
39
39
|
"satori": "^0.10.14",
|
|
40
40
|
"satori-html": "^0.3.2",
|
|
41
|
-
"sharp": "^0.
|
|
41
|
+
"sharp": "^0.34.5",
|
|
42
42
|
"md4x": ">=0.0.20"
|
|
43
43
|
},
|
|
44
44
|
"peerDependenciesMeta": {
|
|
@@ -59,6 +59,9 @@
|
|
|
59
59
|
},
|
|
60
60
|
"sharp": {
|
|
61
61
|
"optional": true
|
|
62
|
+
},
|
|
63
|
+
"prismjs": {
|
|
64
|
+
"optional": true
|
|
62
65
|
}
|
|
63
66
|
},
|
|
64
67
|
"exports": {
|
|
@@ -105,7 +108,7 @@
|
|
|
105
108
|
"tslib": "^2.3.0"
|
|
106
109
|
},
|
|
107
110
|
"devDependencies": {
|
|
108
|
-
"@analogjs/vite-plugin-angular": "
|
|
111
|
+
"@analogjs/vite-plugin-angular": "3.0.0-alpha.22"
|
|
109
112
|
},
|
|
110
113
|
"ng-update": {
|
|
111
114
|
"packageGroup": [
|
|
@@ -10,6 +10,8 @@ export interface ContentFileResourceResult<Attributes extends Record<string, any
|
|
|
10
10
|
}
|
|
11
11
|
type ContentFileParams = Signal<string | {
|
|
12
12
|
customFilename: string;
|
|
13
|
+
}> | Signal<string> | Signal<{
|
|
14
|
+
customFilename: string;
|
|
13
15
|
}>;
|
|
14
16
|
/**
|
|
15
17
|
* Resource for requesting an individual content file.
|