@seo-partner/adapters 1.0.0 → 1.0.4
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/dist/ast-merger.d.ts +24 -0
- package/dist/ast-merger.d.ts.map +1 -0
- package/dist/ast-merger.js +85 -0
- package/dist/ast-merger.js.map +1 -0
- package/dist/astro-adapter.d.ts +6 -0
- package/dist/astro-adapter.d.ts.map +1 -1
- package/dist/astro-adapter.js +19 -0
- package/dist/astro-adapter.js.map +1 -1
- package/dist/blog-scaffold-generator.d.ts +8 -0
- package/dist/blog-scaffold-generator.d.ts.map +1 -0
- package/dist/blog-scaffold-generator.js +138 -0
- package/dist/blog-scaffold-generator.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -1
- package/dist/laravel-adapter.d.ts +7 -0
- package/dist/laravel-adapter.d.ts.map +1 -0
- package/dist/laravel-adapter.js +35 -0
- package/dist/laravel-adapter.js.map +1 -0
- package/dist/layout-title-resolver.d.ts +8 -0
- package/dist/layout-title-resolver.d.ts.map +1 -0
- package/dist/layout-title-resolver.js +28 -0
- package/dist/layout-title-resolver.js.map +1 -0
- package/dist/nuxt-adapter.d.ts +6 -0
- package/dist/nuxt-adapter.d.ts.map +1 -1
- package/dist/nuxt-adapter.js +20 -0
- package/dist/nuxt-adapter.js.map +1 -1
- package/dist/php-native-adapter.d.ts +7 -0
- package/dist/php-native-adapter.d.ts.map +1 -0
- package/dist/php-native-adapter.js +31 -0
- package/dist/php-native-adapter.js.map +1 -0
- package/dist/sitemap-builder.d.ts +10 -0
- package/dist/sitemap-builder.d.ts.map +1 -0
- package/dist/sitemap-builder.js +37 -0
- package/dist/sitemap-builder.js.map +1 -0
- package/dist/skeleton-detector.d.ts +14 -0
- package/dist/skeleton-detector.d.ts.map +1 -0
- package/dist/skeleton-detector.js +33 -0
- package/dist/skeleton-detector.js.map +1 -0
- package/dist/sveltekit-adapter.d.ts +6 -0
- package/dist/sveltekit-adapter.d.ts.map +1 -1
- package/dist/sveltekit-adapter.js +26 -0
- package/dist/sveltekit-adapter.js.map +1 -1
- package/dist/symfony-adapter.d.ts +7 -0
- package/dist/symfony-adapter.d.ts.map +1 -0
- package/dist/symfony-adapter.js +23 -0
- package/dist/symfony-adapter.js.map +1 -0
- package/package.json +2 -2
- package/src/ast-merger.ts +123 -0
- package/src/astro-adapter.ts +155 -126
- package/src/blog-scaffold-generator.ts +153 -0
- package/src/index.ts +8 -0
- package/src/laravel-adapter.ts +45 -0
- package/src/layout-title-resolver.ts +37 -0
- package/src/nuxt-adapter.ts +148 -118
- package/src/php-native-adapter.ts +46 -0
- package/src/sitemap-builder.ts +57 -0
- package/src/skeleton-detector.ts +56 -0
- package/src/sveltekit-adapter.ts +160 -119
- package/src/symfony-adapter.ts +33 -0
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export interface MetadataFields {
|
|
2
|
+
title?: string;
|
|
3
|
+
description?: string;
|
|
4
|
+
canonical?: string;
|
|
5
|
+
openGraph?: {
|
|
6
|
+
title?: string;
|
|
7
|
+
description?: string;
|
|
8
|
+
url?: string;
|
|
9
|
+
siteName?: string;
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
export interface AstMergeResult {
|
|
13
|
+
mergedCode: string;
|
|
14
|
+
modified: boolean;
|
|
15
|
+
hasComplexDynamicLogic: boolean;
|
|
16
|
+
isClientComponent: boolean;
|
|
17
|
+
changes: Array<{
|
|
18
|
+
field: string;
|
|
19
|
+
before?: string | null;
|
|
20
|
+
after: string;
|
|
21
|
+
}>;
|
|
22
|
+
}
|
|
23
|
+
export declare function mergePageMetadataInPlace(sourceCode: string, newMeta: MetadataFields): AstMergeResult;
|
|
24
|
+
//# sourceMappingURL=ast-merger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ast-merger.d.ts","sourceRoot":"","sources":["../src/ast-merger.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE;QACV,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,sBAAsB,EAAE,OAAO,CAAC;IAChC,iBAAiB,EAAE,OAAO,CAAC;IAC3B,OAAO,EAAE,KAAK,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACvB,KAAK,EAAE,MAAM,CAAC;KACf,CAAC,CAAC;CACJ;AAED,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,cAAc,GACtB,cAAc,CA+FhB"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
export function mergePageMetadataInPlace(sourceCode, newMeta) {
|
|
2
|
+
const isClientComponent = /^\s*['"]use client['"]/m.test(sourceCode);
|
|
3
|
+
const hasGenerateMetadata = /\bexport\s+(async\s+)?function\s+generateMetadata\b/.test(sourceCode);
|
|
4
|
+
if (hasGenerateMetadata) {
|
|
5
|
+
return {
|
|
6
|
+
mergedCode: sourceCode,
|
|
7
|
+
modified: false,
|
|
8
|
+
hasComplexDynamicLogic: true,
|
|
9
|
+
isClientComponent,
|
|
10
|
+
changes: [],
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
const changes = [];
|
|
14
|
+
// Match existing `export const metadata = { ... }` or `export const metadata: Metadata = { ... }`
|
|
15
|
+
const metadataRegex = /(export\s+const\s+metadata(?:\s*:\s*\w+)?\s*=\s*\{)([\s\S]*?)(\};?)/m;
|
|
16
|
+
const match = metadataRegex.exec(sourceCode);
|
|
17
|
+
if (match) {
|
|
18
|
+
const prefix = match[1] ?? '';
|
|
19
|
+
let body = match[2] ?? '';
|
|
20
|
+
const suffix = match[3] ?? '';
|
|
21
|
+
// Check title
|
|
22
|
+
if (newMeta.title && !/\btitle\s*:/m.test(body)) {
|
|
23
|
+
const val = newMeta.title;
|
|
24
|
+
body = `\n title: '${val.replace(/'/g, "\\'")}',` + body;
|
|
25
|
+
changes.push({ field: 'title', before: null, after: val });
|
|
26
|
+
}
|
|
27
|
+
// Check description
|
|
28
|
+
if (newMeta.description && !/\bdescription\s*:/m.test(body)) {
|
|
29
|
+
const val = newMeta.description;
|
|
30
|
+
body = `\n description: '${val.replace(/'/g, "\\'")}',` + body;
|
|
31
|
+
changes.push({ field: 'description', before: null, after: val });
|
|
32
|
+
}
|
|
33
|
+
// Check alternates / canonical
|
|
34
|
+
if (newMeta.canonical && !/\balternates\s*:/m.test(body)) {
|
|
35
|
+
const val = newMeta.canonical;
|
|
36
|
+
body = body + `\n alternates: {\n canonical: '${val}',\n },`;
|
|
37
|
+
changes.push({ field: 'alternates.canonical', before: null, after: val });
|
|
38
|
+
}
|
|
39
|
+
// Check openGraph
|
|
40
|
+
if (newMeta.openGraph && !/\bopenGraph\s*:/m.test(body)) {
|
|
41
|
+
const ogTitle = newMeta.openGraph.title ?? newMeta.title ?? '';
|
|
42
|
+
const ogDesc = newMeta.openGraph.description ?? newMeta.description ?? '';
|
|
43
|
+
body = body + `\n openGraph: {\n title: '${ogTitle.replace(/'/g, "\\'")}',\n description: '${ogDesc.replace(/'/g, "\\'")}',\n },`;
|
|
44
|
+
changes.push({ field: 'openGraph', before: null, after: ogTitle });
|
|
45
|
+
}
|
|
46
|
+
const mergedCode = sourceCode.replace(metadataRegex, `${prefix}${body}\n${suffix}`);
|
|
47
|
+
return {
|
|
48
|
+
mergedCode,
|
|
49
|
+
modified: changes.length > 0,
|
|
50
|
+
hasComplexDynamicLogic: false,
|
|
51
|
+
isClientComponent,
|
|
52
|
+
changes,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
// No existing metadata block: create one
|
|
56
|
+
const entries = [];
|
|
57
|
+
if (newMeta.title) {
|
|
58
|
+
entries.push(` title: '${newMeta.title.replace(/'/g, "\\'")}',`);
|
|
59
|
+
changes.push({ field: 'title', before: null, after: newMeta.title });
|
|
60
|
+
}
|
|
61
|
+
if (newMeta.description) {
|
|
62
|
+
entries.push(` description: '${newMeta.description.replace(/'/g, "\\'")}',`);
|
|
63
|
+
changes.push({ field: 'description', before: null, after: newMeta.description });
|
|
64
|
+
}
|
|
65
|
+
if (newMeta.canonical) {
|
|
66
|
+
entries.push(` alternates: {\n canonical: '${newMeta.canonical}',\n },`);
|
|
67
|
+
changes.push({ field: 'alternates.canonical', before: null, after: newMeta.canonical });
|
|
68
|
+
}
|
|
69
|
+
if (newMeta.openGraph) {
|
|
70
|
+
const ogTitle = newMeta.openGraph.title ?? newMeta.title ?? '';
|
|
71
|
+
const ogDesc = newMeta.openGraph.description ?? newMeta.description ?? '';
|
|
72
|
+
entries.push(` openGraph: {\n title: '${ogTitle.replace(/'/g, "\\'")}',\n description: '${ogDesc.replace(/'/g, "\\'")}',\n },`);
|
|
73
|
+
changes.push({ field: 'openGraph', before: null, after: ogTitle });
|
|
74
|
+
}
|
|
75
|
+
const newExport = `\nexport const metadata = {\n${entries.join('\n')}\n};\n`;
|
|
76
|
+
const mergedCode = sourceCode + newExport;
|
|
77
|
+
return {
|
|
78
|
+
mergedCode,
|
|
79
|
+
modified: true,
|
|
80
|
+
hasComplexDynamicLogic: false,
|
|
81
|
+
isClientComponent,
|
|
82
|
+
changes,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=ast-merger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ast-merger.js","sourceRoot":"","sources":["../src/ast-merger.ts"],"names":[],"mappings":"AAwBA,MAAM,UAAU,wBAAwB,CACtC,UAAkB,EAClB,OAAuB;IAEvB,MAAM,iBAAiB,GAAG,yBAAyB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACrE,MAAM,mBAAmB,GAAG,qDAAqD,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAEnG,IAAI,mBAAmB,EAAE,CAAC;QACxB,OAAO;YACL,UAAU,EAAE,UAAU;YACtB,QAAQ,EAAE,KAAK;YACf,sBAAsB,EAAE,IAAI;YAC5B,iBAAiB;YACjB,OAAO,EAAE,EAAE;SACZ,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAoE,EAAE,CAAC;IAEpF,kGAAkG;IAClG,MAAM,aAAa,GAAG,sEAAsE,CAAC;IAC7F,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAE7C,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC9B,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAE9B,cAAc;QACd,IAAI,OAAO,CAAC,KAAK,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAChD,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC;YAC1B,IAAI,GAAG,eAAe,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;YAC1D,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QAC7D,CAAC;QAED,oBAAoB;QACpB,IAAI,OAAO,CAAC,WAAW,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5D,MAAM,GAAG,GAAG,OAAO,CAAC,WAAW,CAAC;YAChC,IAAI,GAAG,qBAAqB,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;YAChE,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QACnE,CAAC;QAED,+BAA+B;QAC/B,IAAI,OAAO,CAAC,SAAS,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACzD,MAAM,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC;YAC9B,IAAI,GAAG,IAAI,GAAG,sCAAsC,GAAG,UAAU,CAAC;YAClE,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,sBAAsB,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QAC5E,CAAC;QAED,kBAAkB;QAClB,IAAI,OAAO,CAAC,SAAS,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACxD,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;YAC/D,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,WAAW,IAAI,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC;YAC1E,IAAI,GAAG,IAAI,GAAG,iCAAiC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,yBAAyB,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,UAAU,CAAC;YAC1I,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;QACrE,CAAC;QAED,MAAM,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,MAAM,GAAG,IAAI,KAAK,MAAM,EAAE,CAAC,CAAC;QACpF,OAAO;YACL,UAAU;YACV,QAAQ,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC;YAC5B,sBAAsB,EAAE,KAAK;YAC7B,iBAAiB;YACjB,OAAO;SACR,CAAC;IACJ,CAAC;IAED,yCAAyC;IACzC,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,OAAO,CAAC,IAAI,CAAC,aAAa,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAClE,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IACvE,CAAC;IACD,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;QACxB,OAAO,CAAC,IAAI,CAAC,mBAAmB,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC9E,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IACnF,CAAC;IACD,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACtB,OAAO,CAAC,IAAI,CAAC,oCAAoC,OAAO,CAAC,SAAS,UAAU,CAAC,CAAC;QAC9E,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,sBAAsB,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IAC1F,CAAC;IACD,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACtB,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;QAC/D,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,WAAW,IAAI,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC;QAC1E,OAAO,CAAC,IAAI,CAAC,+BAA+B,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,yBAAyB,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;QACxI,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IACrE,CAAC;IAED,MAAM,SAAS,GAAG,gCAAgC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;IAC7E,MAAM,UAAU,GAAG,UAAU,GAAG,SAAS,CAAC;IAE1C,OAAO;QACL,UAAU;QACV,QAAQ,EAAE,IAAI;QACd,sBAAsB,EAAE,KAAK;QAC7B,iBAAiB;QACjB,OAAO;KACR,CAAC;AACJ,CAAC"}
|
package/dist/astro-adapter.d.ts
CHANGED
|
@@ -10,4 +10,10 @@ export declare class AstroAdapter implements FrameworkAdapter {
|
|
|
10
10
|
discoverRoutes(projectRoot: string, filePaths: ReadonlyArray<string>, contentsByPath: ReadonlyMap<string, string>, sitemapPaths: ReadonlySet<string>): Promise<ReadonlyArray<DiscoveredRoute>>;
|
|
11
11
|
extractRoute(projectRoot: string, route: DiscoveredRoute, fileContent: string): Promise<ExtractedRouteData>;
|
|
12
12
|
}
|
|
13
|
+
export interface AstroMetaFields {
|
|
14
|
+
title?: string;
|
|
15
|
+
description?: string;
|
|
16
|
+
canonical?: string;
|
|
17
|
+
}
|
|
18
|
+
export declare function patchAstroTemplate(sourceCode: string, meta: AstroMetaFields): string;
|
|
13
19
|
//# sourceMappingURL=astro-adapter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"astro-adapter.d.ts","sourceRoot":"","sources":["../src/astro-adapter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC7E,OAAO,KAAK,EAAE,mBAAmB,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAK3F,qBAAa,YAAa,YAAW,gBAAgB;IACnD,SAAgB,EAAE,WAAW;IAC7B,SAAgB,IAAI,WAAW;IAC/B,SAAgB,OAAO,EAAE,cAAc,CAAS;IAChD,SAAgB,YAAY,EAAE,mBAAmB,CAQ/C;IAEF,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAwB;IAE1C,MAAM,CACjB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,aAAa,CAAC,MAAM,CAAC,EAChC,cAAc,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GAC1C,OAAO,CAAC,OAAO,CAAC;IAqBN,cAAc,CACzB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,aAAa,CAAC,MAAM,CAAC,EAChC,cAAc,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,EAC3C,YAAY,EAAE,WAAW,CAAC,MAAM,CAAC,GAChC,OAAO,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;IAoD7B,YAAY,CACvB,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,eAAe,EACtB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,kBAAkB,CAAC;CAe/B"}
|
|
1
|
+
{"version":3,"file":"astro-adapter.d.ts","sourceRoot":"","sources":["../src/astro-adapter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC7E,OAAO,KAAK,EAAE,mBAAmB,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAK3F,qBAAa,YAAa,YAAW,gBAAgB;IACnD,SAAgB,EAAE,WAAW;IAC7B,SAAgB,IAAI,WAAW;IAC/B,SAAgB,OAAO,EAAE,cAAc,CAAS;IAChD,SAAgB,YAAY,EAAE,mBAAmB,CAQ/C;IAEF,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAwB;IAE1C,MAAM,CACjB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,aAAa,CAAC,MAAM,CAAC,EAChC,cAAc,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GAC1C,OAAO,CAAC,OAAO,CAAC;IAqBN,cAAc,CACzB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,aAAa,CAAC,MAAM,CAAC,EAChC,cAAc,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,EAC3C,YAAY,EAAE,WAAW,CAAC,MAAM,CAAC,GAChC,OAAO,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;IAoD7B,YAAY,CACvB,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,eAAe,EACtB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,kBAAkB,CAAC;CAe/B;AAGD,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,eAAe,GACpB,MAAM,CAkBR"}
|
package/dist/astro-adapter.js
CHANGED
|
@@ -92,4 +92,23 @@ export class AstroAdapter {
|
|
|
92
92
|
return extracted;
|
|
93
93
|
}
|
|
94
94
|
}
|
|
95
|
+
export function patchAstroTemplate(sourceCode, meta) {
|
|
96
|
+
let result = sourceCode;
|
|
97
|
+
const entries = [];
|
|
98
|
+
if (meta.title)
|
|
99
|
+
entries.push(`title: "${meta.title.replace(/"/g, '\\"')}"`);
|
|
100
|
+
if (meta.description)
|
|
101
|
+
entries.push(`description: "${meta.description.replace(/"/g, '\\"')}"`);
|
|
102
|
+
if (meta.canonical)
|
|
103
|
+
entries.push(`canonical: "${meta.canonical}"`);
|
|
104
|
+
const seoVarBlock = `const seoMeta = {\n ${entries.join(',\n ')}\n};\n`;
|
|
105
|
+
const frontmatterMatch = /^---\s*\n([\s\S]*?)\n---/m.exec(result);
|
|
106
|
+
if (frontmatterMatch) {
|
|
107
|
+
result = result.replace(/^---\s*\n/m, `---\n${seoVarBlock}`);
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
result = `---\n${seoVarBlock}---\n\n` + result;
|
|
111
|
+
}
|
|
112
|
+
return result;
|
|
113
|
+
}
|
|
95
114
|
//# sourceMappingURL=astro-adapter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"astro-adapter.js","sourceRoot":"","sources":["../src/astro-adapter.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"astro-adapter.js","sourceRoot":"","sources":["../src/astro-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { FrameworkType } from '@seo-partner/core';
|
|
2
|
+
export interface BlogScaffoldFile {
|
|
3
|
+
relativePath: string;
|
|
4
|
+
code: string;
|
|
5
|
+
description: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function generateBlogScaffold(framework: FrameworkType, pillarTitle?: string): BlogScaffoldFile[];
|
|
8
|
+
//# sourceMappingURL=blog-scaffold-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blog-scaffold-generator.d.ts","sourceRoot":"","sources":["../src/blog-scaffold-generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,aAAa,EACxB,WAAW,SAA6B,GACvC,gBAAgB,EAAE,CA4IpB"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
export function generateBlogScaffold(framework, pillarTitle = 'Actualités et Guides SEO') {
|
|
2
|
+
switch (framework) {
|
|
3
|
+
case 'next_app':
|
|
4
|
+
return [
|
|
5
|
+
{
|
|
6
|
+
relativePath: 'app/blog/page.tsx',
|
|
7
|
+
code: `import type { Metadata } from 'next';
|
|
8
|
+
import Link from 'next/link';
|
|
9
|
+
|
|
10
|
+
export const metadata: Metadata = {
|
|
11
|
+
title: '${pillarTitle} | Blog',
|
|
12
|
+
description: 'Découvrez nos guides d\\\'experts et analyses approfondies.',
|
|
13
|
+
alternates: {
|
|
14
|
+
canonical: '/blog',
|
|
15
|
+
},
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
export default function BlogIndexPage() {
|
|
19
|
+
return (
|
|
20
|
+
<main className="max-w-4xl mx-auto py-12 px-4">
|
|
21
|
+
<h1 className="text-3xl font-bold mb-8">${pillarTitle}</h1>
|
|
22
|
+
<p className="text-gray-600 mb-6">Explorez nos articles et guides complets pour approfondir vos compétences.</p>
|
|
23
|
+
</main>
|
|
24
|
+
);
|
|
25
|
+
}
|
|
26
|
+
`,
|
|
27
|
+
description: 'Page d\'index du blog Next.js App Router',
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
relativePath: 'app/blog/[slug]/page.tsx',
|
|
31
|
+
code: `import type { Metadata } from 'next';
|
|
32
|
+
import { notFound } from 'next/navigation';
|
|
33
|
+
|
|
34
|
+
interface Props {
|
|
35
|
+
params: { slug: string };
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export async function generateMetadata({ params }: Props): Promise<Metadata> {
|
|
39
|
+
return {
|
|
40
|
+
title: \`Article: \${params.slug} | Blog\`,
|
|
41
|
+
description: 'Guide complet et recommandations pratiques.',
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export default function BlogPostPage({ params }: Props) {
|
|
46
|
+
return (
|
|
47
|
+
<article className="max-w-3xl mx-auto py-12 px-4 prose">
|
|
48
|
+
<h1>Détail de l\\\'article : {params.slug}</h1>
|
|
49
|
+
</article>
|
|
50
|
+
);
|
|
51
|
+
}
|
|
52
|
+
`,
|
|
53
|
+
description: 'Route dynamique d\'article Next.js App Router',
|
|
54
|
+
},
|
|
55
|
+
];
|
|
56
|
+
case 'nuxt':
|
|
57
|
+
return [
|
|
58
|
+
{
|
|
59
|
+
relativePath: 'pages/blog/index.vue',
|
|
60
|
+
code: `<script setup lang="ts">
|
|
61
|
+
useSeoMeta({
|
|
62
|
+
title: '${pillarTitle} | Blog',
|
|
63
|
+
description: 'Guides d\\\'experts et ressources pratiques.',
|
|
64
|
+
});
|
|
65
|
+
</script>
|
|
66
|
+
|
|
67
|
+
<template>
|
|
68
|
+
<main class="blog-index">
|
|
69
|
+
<h1>${pillarTitle}</h1>
|
|
70
|
+
</main>
|
|
71
|
+
</template>
|
|
72
|
+
`,
|
|
73
|
+
description: 'Page d\'index du blog Nuxt 3',
|
|
74
|
+
},
|
|
75
|
+
];
|
|
76
|
+
case 'astro':
|
|
77
|
+
return [
|
|
78
|
+
{
|
|
79
|
+
relativePath: 'src/pages/blog/index.astro',
|
|
80
|
+
code: `---
|
|
81
|
+
const pageTitle = "${pillarTitle}";
|
|
82
|
+
---
|
|
83
|
+
<html>
|
|
84
|
+
<head>
|
|
85
|
+
<title>{pageTitle}</title>
|
|
86
|
+
<meta name="description" content="Guides et analyses éditoriales d\\\'experts." />
|
|
87
|
+
</head>
|
|
88
|
+
<body>
|
|
89
|
+
<main>
|
|
90
|
+
<h1>{pageTitle}</h1>
|
|
91
|
+
</main>
|
|
92
|
+
</body>
|
|
93
|
+
</html>
|
|
94
|
+
`,
|
|
95
|
+
description: 'Page d\'index du blog Astro',
|
|
96
|
+
},
|
|
97
|
+
];
|
|
98
|
+
case 'laravel':
|
|
99
|
+
return [
|
|
100
|
+
{
|
|
101
|
+
relativePath: 'resources/views/blog/index.blade.php',
|
|
102
|
+
code: `@extends('layouts.app')
|
|
103
|
+
|
|
104
|
+
@section('title', '${pillarTitle}')
|
|
105
|
+
|
|
106
|
+
@push('meta')
|
|
107
|
+
<meta name="description" content="Retrouvez nos guides et articles spécialisés.">
|
|
108
|
+
@endpush
|
|
109
|
+
|
|
110
|
+
@section('content')
|
|
111
|
+
<div class="container py-5">
|
|
112
|
+
<h1>${pillarTitle}</h1>
|
|
113
|
+
</div>
|
|
114
|
+
@endsection
|
|
115
|
+
`,
|
|
116
|
+
description: 'Vue d\'index du blog Laravel Blade',
|
|
117
|
+
},
|
|
118
|
+
];
|
|
119
|
+
default:
|
|
120
|
+
return [
|
|
121
|
+
{
|
|
122
|
+
relativePath: 'blog/index.php',
|
|
123
|
+
code: `<?php
|
|
124
|
+
$pageTitle = '${pillarTitle}';
|
|
125
|
+
$metaDescription = 'Guides et ressources d\\\'experts.';
|
|
126
|
+
require_once __DIR__ . '/../includes/header.php';
|
|
127
|
+
?>
|
|
128
|
+
<main class="container">
|
|
129
|
+
<h1><?php echo htmlspecialchars($pageTitle); ?></h1>
|
|
130
|
+
</main>
|
|
131
|
+
<?php require_once __DIR__ . '/../includes/footer.php'; ?>
|
|
132
|
+
`,
|
|
133
|
+
description: 'Script d\'index du blog PHP',
|
|
134
|
+
},
|
|
135
|
+
];
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=blog-scaffold-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blog-scaffold-generator.js","sourceRoot":"","sources":["../src/blog-scaffold-generator.ts"],"names":[],"mappings":"AAQA,MAAM,UAAU,oBAAoB,CAClC,SAAwB,EACxB,WAAW,GAAG,0BAA0B;IAExC,QAAQ,SAAS,EAAE,CAAC;QAClB,KAAK,UAAU;YACb,OAAO;gBACL;oBACE,YAAY,EAAE,mBAAmB;oBACjC,IAAI,EAAE;;;;YAIJ,WAAW;;;;;;;;;;gDAUyB,WAAW;;;;;CAK1D;oBACS,WAAW,EAAE,0CAA0C;iBACxD;gBACD;oBACE,YAAY,EAAE,0BAA0B;oBACxC,IAAI,EAAE;;;;;;;;;;;;;;;;;;;;;CAqBf;oBACS,WAAW,EAAE,+CAA+C;iBAC7D;aACF,CAAC;QAEJ,KAAK,MAAM;YACT,OAAO;gBACL;oBACE,YAAY,EAAE,sBAAsB;oBACpC,IAAI,EAAE;;YAEJ,WAAW;;;;;;;UAOb,WAAW;;;CAGpB;oBACS,WAAW,EAAE,8BAA8B;iBAC5C;aACF,CAAC;QAEJ,KAAK,OAAO;YACV,OAAO;gBACL;oBACE,YAAY,EAAE,4BAA4B;oBAC1C,IAAI,EAAE;qBACK,WAAW;;;;;;;;;;;;;CAa/B;oBACS,WAAW,EAAE,6BAA6B;iBAC3C;aACF,CAAC;QAEJ,KAAK,SAAS;YACZ,OAAO;gBACL;oBACE,YAAY,EAAE,sCAAsC;oBACpD,IAAI,EAAE;;qBAEK,WAAW;;;;;;;;UAQtB,WAAW;;;CAGpB;oBACS,WAAW,EAAE,oCAAoC;iBAClD;aACF,CAAC;QAEJ;YACE,OAAO;gBACL;oBACE,YAAY,EAAE,gBAAgB;oBAC9B,IAAI,EAAE;gBACA,WAAW;;;;;;;;CAQ1B;oBACS,WAAW,EAAE,6BAA6B;iBAC3C;aACF,CAAC;IACN,CAAC;AACH,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -7,6 +7,9 @@ export * from './sveltekit-adapter.js';
|
|
|
7
7
|
export * from './remix-adapter.js';
|
|
8
8
|
export * from './django-adapter.js';
|
|
9
9
|
export * from './php-adapter.js';
|
|
10
|
+
export * from './laravel-adapter.js';
|
|
11
|
+
export * from './symfony-adapter.js';
|
|
12
|
+
export * from './php-native-adapter.js';
|
|
10
13
|
export * from './static-adapter.js';
|
|
11
14
|
export * from './parsers/tsx-ast-parser.js';
|
|
12
15
|
export * from './parsers/html-parser.js';
|
|
@@ -21,4 +24,9 @@ export * from './parsers/php-template-parser.js';
|
|
|
21
24
|
export * from './parsers/robots-sitemap-parser.js';
|
|
22
25
|
export * from './parsers/route-normalizer.js';
|
|
23
26
|
export * from './parsers/layout-resolver.js';
|
|
27
|
+
export * from './sitemap-builder.js';
|
|
28
|
+
export * from './skeleton-detector.js';
|
|
29
|
+
export * from './ast-merger.js';
|
|
30
|
+
export * from './layout-title-resolver.js';
|
|
31
|
+
export * from './blog-scaffold-generator.js';
|
|
24
32
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,0BAA0B,CAAC;AACzC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,yBAAyB,CAAC;AACxC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,kCAAkC,CAAC;AACjD,cAAc,oCAAoC,CAAC;AACnD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,8BAA8B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,0BAA0B,CAAC;AACzC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,yBAAyB,CAAC;AACxC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,kCAAkC,CAAC;AACjD,cAAc,oCAAoC,CAAC;AACnD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,iBAAiB,CAAC;AAChC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,8BAA8B,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -7,6 +7,9 @@ export * from './sveltekit-adapter.js';
|
|
|
7
7
|
export * from './remix-adapter.js';
|
|
8
8
|
export * from './django-adapter.js';
|
|
9
9
|
export * from './php-adapter.js';
|
|
10
|
+
export * from './laravel-adapter.js';
|
|
11
|
+
export * from './symfony-adapter.js';
|
|
12
|
+
export * from './php-native-adapter.js';
|
|
10
13
|
export * from './static-adapter.js';
|
|
11
14
|
export * from './parsers/tsx-ast-parser.js';
|
|
12
15
|
export * from './parsers/html-parser.js';
|
|
@@ -21,4 +24,9 @@ export * from './parsers/php-template-parser.js';
|
|
|
21
24
|
export * from './parsers/robots-sitemap-parser.js';
|
|
22
25
|
export * from './parsers/route-normalizer.js';
|
|
23
26
|
export * from './parsers/layout-resolver.js';
|
|
27
|
+
export * from './sitemap-builder.js';
|
|
28
|
+
export * from './skeleton-detector.js';
|
|
29
|
+
export * from './ast-merger.js';
|
|
30
|
+
export * from './layout-title-resolver.js';
|
|
31
|
+
export * from './blog-scaffold-generator.js';
|
|
24
32
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,0BAA0B,CAAC;AACzC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,yBAAyB,CAAC;AACxC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,kCAAkC,CAAC;AACjD,cAAc,oCAAoC,CAAC;AACnD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,8BAA8B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,0BAA0B,CAAC;AACzC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,yBAAyB,CAAC;AACxC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,kCAAkC,CAAC;AACjD,cAAc,oCAAoC,CAAC;AACnD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,iBAAiB,CAAC;AAChC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,8BAA8B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"laravel-adapter.d.ts","sourceRoot":"","sources":["../src/laravel-adapter.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,yBAAyB,CACvC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,iBAAiB,GACtB,MAAM,CAkCR"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export function patchLaravelBladeTemplate(sourceCode, meta) {
|
|
2
|
+
let result = sourceCode;
|
|
3
|
+
// Title section
|
|
4
|
+
if (meta.title && !/@section\(\s*['"]title['"]/i.test(result)) {
|
|
5
|
+
const sectionTitle = `@section('title', '${meta.title.replace(/'/g, "\\'")}')\n`;
|
|
6
|
+
if (/@extends\([^)]+\)/i.test(result)) {
|
|
7
|
+
result = result.replace(/(@extends\([^)]+\)\s*\n)/i, `$1${sectionTitle}`);
|
|
8
|
+
}
|
|
9
|
+
else {
|
|
10
|
+
result = sectionTitle + result;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
// Meta push
|
|
14
|
+
if ((meta.description || meta.canonical) && !/@push\(\s*['"]meta['"]/i.test(result)) {
|
|
15
|
+
const metaTags = ["@push('meta')"];
|
|
16
|
+
if (meta.description) {
|
|
17
|
+
metaTags.push(` <meta name="description" content="${meta.description.replace(/"/g, '"')}">`);
|
|
18
|
+
}
|
|
19
|
+
if (meta.canonical) {
|
|
20
|
+
metaTags.push(` <link rel="canonical" href="${meta.canonical}">`);
|
|
21
|
+
}
|
|
22
|
+
metaTags.push('@endpush\n');
|
|
23
|
+
if (/@section\(\s*['"]title['"][^)]*\)/i.test(result)) {
|
|
24
|
+
result = result.replace(/(@section\(\s*['"]title['"][^)]*\)\s*\n)/i, `$1${metaTags.join('\n')}`);
|
|
25
|
+
}
|
|
26
|
+
else if (/@extends\([^)]+\)/i.test(result)) {
|
|
27
|
+
result = result.replace(/(@extends\([^)]+\)\s*\n)/i, `$1${metaTags.join('\n')}`);
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
result = metaTags.join('\n') + result;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return result;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=laravel-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"laravel-adapter.js","sourceRoot":"","sources":["../src/laravel-adapter.ts"],"names":[],"mappings":"AAMA,MAAM,UAAU,yBAAyB,CACvC,UAAkB,EAClB,IAAuB;IAEvB,IAAI,MAAM,GAAG,UAAU,CAAC;IAExB,gBAAgB;IAChB,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QAC9D,MAAM,YAAY,GAAG,sBAAsB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC;QACjF,IAAI,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACtC,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,2BAA2B,EAAE,KAAK,YAAY,EAAE,CAAC,CAAC;QAC5E,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,YAAY,GAAG,MAAM,CAAC;QACjC,CAAC;IACH,CAAC;IAED,YAAY;IACZ,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACpF,MAAM,QAAQ,GAAa,CAAC,eAAe,CAAC,CAAC;QAC7C,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,QAAQ,CAAC,IAAI,CAAC,uCAAuC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;QACrG,CAAC;QACD,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,QAAQ,CAAC,IAAI,CAAC,iCAAiC,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC;QACrE,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAE5B,IAAI,oCAAoC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACtD,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,2CAA2C,EAAE,KAAK,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACnG,CAAC;aAAM,IAAI,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YAC7C,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,2BAA2B,EAAE,KAAK,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACnF,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;QACxC,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export interface LayoutTitleTemplate {
|
|
2
|
+
template?: string;
|
|
3
|
+
defaultTitle?: string;
|
|
4
|
+
brandName?: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function extractLayoutTitleTemplate(layoutCode: string): LayoutTitleTemplate | null;
|
|
7
|
+
export declare function sanitizePageTitleForLayout(pageTitle: string, layoutTemplate: LayoutTitleTemplate | null): string;
|
|
8
|
+
//# sourceMappingURL=layout-title-resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layout-title-resolver.d.ts","sourceRoot":"","sources":["../src/layout-title-resolver.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,0BAA0B,CAAC,UAAU,EAAE,MAAM,GAAG,mBAAmB,GAAG,IAAI,CAqBzF;AAED,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,mBAAmB,GAAG,IAAI,GAAG,MAAM,CAOhH"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export function extractLayoutTitleTemplate(layoutCode) {
|
|
2
|
+
const match = /title\s*:\s*\{([^}]+)\}/m.exec(layoutCode);
|
|
3
|
+
if (!match || !match[1])
|
|
4
|
+
return null;
|
|
5
|
+
const body = match[1];
|
|
6
|
+
const templateMatch = /template\s*:\s*['"`]([^'"`]+)['"`]/.exec(body);
|
|
7
|
+
const defaultMatch = /default\s*:\s*['"`]([^'"`]+)['"`]/.exec(body);
|
|
8
|
+
const template = templateMatch?.[1];
|
|
9
|
+
const defaultTitle = defaultMatch?.[1];
|
|
10
|
+
let brandName;
|
|
11
|
+
if (template && template.includes('%s')) {
|
|
12
|
+
brandName = template.replace('%s', '').replace(/^[| -]+|[| -]+$/g, '').trim();
|
|
13
|
+
}
|
|
14
|
+
return {
|
|
15
|
+
template,
|
|
16
|
+
defaultTitle,
|
|
17
|
+
brandName,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
export function sanitizePageTitleForLayout(pageTitle, layoutTemplate) {
|
|
21
|
+
if (!layoutTemplate?.brandName) {
|
|
22
|
+
return pageTitle;
|
|
23
|
+
}
|
|
24
|
+
const brand = layoutTemplate.brandName;
|
|
25
|
+
const regex = new RegExp(`(\\s*[|\\-]\\s*${brand.replace(/[-/\\^$*+?.()|[\]{}]/g, '\\$&')})+$`, 'i');
|
|
26
|
+
return pageTitle.replace(regex, '').trim();
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=layout-title-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layout-title-resolver.js","sourceRoot":"","sources":["../src/layout-title-resolver.ts"],"names":[],"mappings":"AAMA,MAAM,UAAU,0BAA0B,CAAC,UAAkB;IAC3D,MAAM,KAAK,GAAG,0BAA0B,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC1D,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAErC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACtB,MAAM,aAAa,GAAG,oCAAoC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtE,MAAM,YAAY,GAAG,mCAAmC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEpE,MAAM,QAAQ,GAAG,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC;IACpC,MAAM,YAAY,GAAG,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC;IAEvC,IAAI,SAA6B,CAAC;IAClC,IAAI,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACxC,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAChF,CAAC;IAED,OAAO;QACL,QAAQ;QACR,YAAY;QACZ,SAAS;KACV,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,SAAiB,EAAE,cAA0C;IACtG,IAAI,CAAC,cAAc,EAAE,SAAS,EAAE,CAAC;QAC/B,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,KAAK,GAAG,cAAc,CAAC,SAAS,CAAC;IACvC,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,kBAAkB,KAAK,CAAC,OAAO,CAAC,uBAAuB,EAAE,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACrG,OAAO,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AAC7C,CAAC"}
|
package/dist/nuxt-adapter.d.ts
CHANGED
|
@@ -10,4 +10,10 @@ export declare class NuxtAdapter implements FrameworkAdapter {
|
|
|
10
10
|
discoverRoutes(projectRoot: string, filePaths: ReadonlyArray<string>, contentsByPath: ReadonlyMap<string, string>, sitemapPaths: ReadonlySet<string>): Promise<ReadonlyArray<DiscoveredRoute>>;
|
|
11
11
|
extractRoute(projectRoot: string, route: DiscoveredRoute, fileContent: string): Promise<ExtractedRouteData>;
|
|
12
12
|
}
|
|
13
|
+
export interface NuxtMetaFields {
|
|
14
|
+
title?: string;
|
|
15
|
+
description?: string;
|
|
16
|
+
canonical?: string;
|
|
17
|
+
}
|
|
18
|
+
export declare function patchNuxtTemplate(sourceCode: string, meta: NuxtMetaFields): string;
|
|
13
19
|
//# sourceMappingURL=nuxt-adapter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nuxt-adapter.d.ts","sourceRoot":"","sources":["../src/nuxt-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC7E,OAAO,KAAK,EAAE,mBAAmB,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAK3F,qBAAa,WAAY,YAAW,gBAAgB;IAClD,SAAgB,EAAE,UAAU;IAC5B,SAAgB,IAAI,YAAY;IAChC,SAAgB,OAAO,EAAE,cAAc,CAAS;IAChD,SAAgB,YAAY,EAAE,mBAAmB,CAQ/C;IAEF,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAwB;IAE1C,MAAM,CACjB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,aAAa,CAAC,MAAM,CAAC,EAChC,cAAc,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GAC1C,OAAO,CAAC,OAAO,CAAC;IAoBN,cAAc,CACzB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,aAAa,CAAC,MAAM,CAAC,EAChC,cAAc,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,EAC3C,YAAY,EAAE,WAAW,CAAC,MAAM,CAAC,GAChC,OAAO,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;IAoD7B,YAAY,CACvB,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,eAAe,EACtB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,kBAAkB,CAAC;CAS/B"}
|
|
1
|
+
{"version":3,"file":"nuxt-adapter.d.ts","sourceRoot":"","sources":["../src/nuxt-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC7E,OAAO,KAAK,EAAE,mBAAmB,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAK3F,qBAAa,WAAY,YAAW,gBAAgB;IAClD,SAAgB,EAAE,UAAU;IAC5B,SAAgB,IAAI,YAAY;IAChC,SAAgB,OAAO,EAAE,cAAc,CAAS;IAChD,SAAgB,YAAY,EAAE,mBAAmB,CAQ/C;IAEF,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAwB;IAE1C,MAAM,CACjB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,aAAa,CAAC,MAAM,CAAC,EAChC,cAAc,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GAC1C,OAAO,CAAC,OAAO,CAAC;IAoBN,cAAc,CACzB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,aAAa,CAAC,MAAM,CAAC,EAChC,cAAc,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,EAC3C,YAAY,EAAE,WAAW,CAAC,MAAM,CAAC,GAChC,OAAO,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;IAoD7B,YAAY,CACvB,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,eAAe,EACtB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,kBAAkB,CAAC;CAS/B;AAGD,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,cAAc,GACnB,MAAM,CAmBR"}
|
package/dist/nuxt-adapter.js
CHANGED
|
@@ -85,4 +85,24 @@ export class NuxtAdapter {
|
|
|
85
85
|
return extracted;
|
|
86
86
|
}
|
|
87
87
|
}
|
|
88
|
+
export function patchNuxtTemplate(sourceCode, meta) {
|
|
89
|
+
let result = sourceCode;
|
|
90
|
+
const entries = [];
|
|
91
|
+
if (meta.title)
|
|
92
|
+
entries.push(` title: '${meta.title.replace(/'/g, "\\'")}',`);
|
|
93
|
+
if (meta.description)
|
|
94
|
+
entries.push(` description: '${meta.description.replace(/'/g, "\\'")}',`);
|
|
95
|
+
if (meta.canonical)
|
|
96
|
+
entries.push(` canonical: '${meta.canonical}',`);
|
|
97
|
+
const seoMetaCall = `useSeoMeta({\n${entries.join('\n')}\n});\n`;
|
|
98
|
+
if (/<script\s+setup[^>]*>/i.test(result)) {
|
|
99
|
+
if (!/useSeoMeta\s*\(/i.test(result)) {
|
|
100
|
+
result = result.replace(/(<script\s+setup[^>]*>\s*\n)/i, `$1${seoMetaCall}`);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
result = `<script setup lang="ts">\n${seoMetaCall}</script>\n\n` + result;
|
|
105
|
+
}
|
|
106
|
+
return result;
|
|
107
|
+
}
|
|
88
108
|
//# sourceMappingURL=nuxt-adapter.js.map
|
package/dist/nuxt-adapter.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nuxt-adapter.js","sourceRoot":"","sources":["../src/nuxt-adapter.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAE9D,MAAM,OAAO,WAAW;IACN,EAAE,GAAG,MAAM,CAAC;IACZ,IAAI,GAAG,QAAQ,CAAC;IAChB,OAAO,GAAmB,KAAK,CAAC;IAChC,YAAY,GAAwB;QAClD,MAAM,EAAE,IAAI;QACZ,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,IAAI;QACd,aAAa,EAAE,IAAI;QACnB,MAAM,EAAE,IAAI;QACZ,MAAM,EAAE,IAAI;QACZ,gBAAgB,EAAE,IAAI;KACvB,CAAC;IAEe,cAAc,GAAG,IAAI,cAAc,EAAE,CAAC;IAEhD,KAAK,CAAC,MAAM,CACjB,WAAmB,EACnB,SAAgC,EAChC,cAA2C;QAE3C,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YAChD,IACE,UAAU,KAAK,gBAAgB;gBAC/B,UAAU,KAAK,gBAAgB;gBAC/B,UAAU,KAAK,iBAAiB,EAChC,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC;YACD,IAAI,UAAU,KAAK,cAAc,EAAE,CAAC;gBAClC,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACnD,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;oBAC9D,OAAO,IAAI,CAAC;gBACd,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAEM,KAAK,CAAC,cAAc,CACzB,WAAmB,EACnB,SAAgC,EAChC,cAA2C,EAC3C,YAAiC;QAEjC,MAAM,MAAM,GAAsB,EAAE,CAAC;QAErC,oCAAoC;QACpC,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YAChD,IAAI,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBACrE,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACnD,MAAM,MAAM,GAAG,WAAW,CACxB;oBACE,OAAO,EAAE,EAAE;oBACX,QAAQ;oBACR,UAAU,EAAE,MAAM;oBAClB,aAAa,EAAE,SAAS;oBACxB,SAAS,EAAE,KAAK;oBAChB,SAAS,EAAE,KAAK;iBACjB,EACD,OAAO,CACR,CAAC;gBACF,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC;oBACjC,QAAQ;oBACR,QAAQ,EAAE,MAAM,CAAC,QAAQ;oBACzB,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,WAAW,EAAE,MAAM,CAAC,WAAW;oBAC/B,SAAS,EAAE,MAAM,CAAC,SAAS;oBAC3B,MAAM,EAAE,MAAM,CAAC,MAAM;iBACtB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YAChD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC;gBAAE,SAAS;YAC/C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAAE,SAAS;YAE3C,MAAM,mBAAmB,GAAG,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC9D,MAAM,OAAO,GAAG,qBAAqB,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC;YACnE,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAE5C,MAAM,CAAC,IAAI,CAAC;gBACV,OAAO;gBACP,QAAQ;gBACR,UAAU,EAAE,MAAM;gBAClB,aAAa,EAAE,SAAS;gBACxB,SAAS,EAAE,KAAK;gBAChB,SAAS;aACV,CAAC,CAAC;QACL,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAEM,KAAK,CAAC,YAAY,CACvB,WAAmB,EACnB,KAAsB,EACtB,WAAmB;QAEnB,IAAI,SAAS,GAAG,WAAW,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QAEhD,yCAAyC;QACzC,MAAM,gBAAgB,GAAG,CAAC,qBAAqB,EAAE,kBAAkB,CAAC,CAAC;QACrE,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;QAE9E,OAAO,SAAS,CAAC;IACnB,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"nuxt-adapter.js","sourceRoot":"","sources":["../src/nuxt-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"php-native-adapter.d.ts","sourceRoot":"","sources":["../src/php-native-adapter.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,mBAAmB,GACxB,MAAM,CAmCR"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export function patchPhpNativeTemplate(sourceCode, meta) {
|
|
2
|
+
let result = sourceCode;
|
|
3
|
+
const vars = [];
|
|
4
|
+
if (meta.title && !/\$pageTitle\s*=/i.test(result)) {
|
|
5
|
+
vars.push(`$pageTitle = '${meta.title.replace(/'/g, "\\'")}';`);
|
|
6
|
+
}
|
|
7
|
+
if (meta.description && !/\$metaDescription\s*=/i.test(result)) {
|
|
8
|
+
vars.push(`$metaDescription = '${meta.description.replace(/'/g, "\\'")}';`);
|
|
9
|
+
}
|
|
10
|
+
if (meta.canonical && !/\$canonicalUrl\s*=/i.test(result)) {
|
|
11
|
+
vars.push(`$canonicalUrl = '${meta.canonical.replace(/'/g, "\\'")}';`);
|
|
12
|
+
}
|
|
13
|
+
if (vars.length === 0) {
|
|
14
|
+
return result;
|
|
15
|
+
}
|
|
16
|
+
const varsBlock = vars.join('\n') + '\n';
|
|
17
|
+
// If file starts with <?php, inject before any header include
|
|
18
|
+
if (/<\?php/i.test(result)) {
|
|
19
|
+
if (/(include|require|include_once|require_once)\s*['"][^'"]*header[^'"]*['"]/i.test(result)) {
|
|
20
|
+
result = result.replace(/((?:include|require|include_once|require_once)\s*['"][^'"]*header[^'"]*['"])/i, `${varsBlock}$1`);
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
result = result.replace(/(<\?php\s*\n)/i, `$1${varsBlock}`);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
result = `<?php\n${varsBlock}?>\n` + result;
|
|
28
|
+
}
|
|
29
|
+
return result;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=php-native-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"php-native-adapter.js","sourceRoot":"","sources":["../src/php-native-adapter.ts"],"names":[],"mappings":"AAMA,MAAM,UAAU,sBAAsB,CACpC,UAAkB,EAClB,IAAyB;IAEzB,IAAI,MAAM,GAAG,UAAU,CAAC;IAExB,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACnD,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IAClE,CAAC;IACD,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/D,IAAI,CAAC,IAAI,CAAC,uBAAuB,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IAC9E,CAAC;IACD,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1D,IAAI,CAAC,IAAI,CAAC,oBAAoB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IACzE,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAEzC,8DAA8D;IAC9D,IAAI,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,IAAI,2EAA2E,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YAC7F,MAAM,GAAG,MAAM,CAAC,OAAO,CACrB,+EAA+E,EAC/E,GAAG,SAAS,IAAI,CACjB,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,gBAAgB,EAAE,KAAK,SAAS,EAAE,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,UAAU,SAAS,MAAM,GAAG,MAAM,CAAC;IAC9C,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export interface SitemapRouteEntry {
|
|
2
|
+
pattern: string;
|
|
3
|
+
isPrivate: boolean;
|
|
4
|
+
lastmod?: string;
|
|
5
|
+
changefreq?: 'always' | 'hourly' | 'daily' | 'weekly' | 'monthly' | 'yearly' | 'never';
|
|
6
|
+
priority?: number;
|
|
7
|
+
}
|
|
8
|
+
export declare function buildSitemapXml(routes: ReadonlyArray<SitemapRouteEntry>, siteUrl: string): string;
|
|
9
|
+
export declare function buildNextJsAppSitemap(routes: ReadonlyArray<SitemapRouteEntry>, siteUrl: string): string;
|
|
10
|
+
//# sourceMappingURL=sitemap-builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sitemap-builder.d.ts","sourceRoot":"","sources":["../src/sitemap-builder.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC;IACvF,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,eAAe,CAC7B,MAAM,EAAE,aAAa,CAAC,iBAAiB,CAAC,EACxC,OAAO,EAAE,MAAM,GACd,MAAM,CAoBR;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,aAAa,CAAC,iBAAiB,CAAC,EACxC,OAAO,EAAE,MAAM,GACd,MAAM,CAmBR"}
|