@arach/og 0.2.4 → 0.2.8
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/cli.js +177 -3
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/setup.d.ts +14 -0
- package/dist/setup.d.ts.map +1 -0
- package/dist/setup.js +177 -0
- package/dist/setup.js.map +1 -0
- package/dist/sitemap.d.ts +10 -0
- package/dist/sitemap.d.ts.map +1 -0
- package/dist/sitemap.js +108 -0
- package/dist/sitemap.js.map +1 -0
- package/package.json +7 -8
package/dist/cli.js
CHANGED
|
@@ -5,6 +5,8 @@ import { generateOG, generateOGBatch } from './generate.js';
|
|
|
5
5
|
import { validateOG, formatValidationResult } from './validate.js';
|
|
6
6
|
import { startViewer } from './viewer.js';
|
|
7
7
|
import { auditSite } from './audit.js';
|
|
8
|
+
import { generateSitemap, printSitemapHelp } from './sitemap.js';
|
|
9
|
+
import { runSetup } from './setup.js';
|
|
8
10
|
async function main() {
|
|
9
11
|
const args = process.argv.slice(2);
|
|
10
12
|
if (args.length === 0 || args.includes('--help') || args.includes('-h')) {
|
|
@@ -43,6 +45,96 @@ async function main() {
|
|
|
43
45
|
await auditSite(url);
|
|
44
46
|
return;
|
|
45
47
|
}
|
|
48
|
+
// Generate command with smart defaults
|
|
49
|
+
if (command === 'generate') {
|
|
50
|
+
const configArg = args[1];
|
|
51
|
+
// If a config file is provided, use it
|
|
52
|
+
if (configArg && !configArg.startsWith('--')) {
|
|
53
|
+
const configPath = resolve(process.cwd(), configArg);
|
|
54
|
+
try {
|
|
55
|
+
const content = await readFile(configPath, 'utf-8');
|
|
56
|
+
const config = JSON.parse(content);
|
|
57
|
+
if (Array.isArray(config)) {
|
|
58
|
+
await generateOGBatch(config);
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
await generateOG(config);
|
|
62
|
+
}
|
|
63
|
+
console.log('\n✓ Done!');
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
console.error('Error:', error instanceof Error ? error.message : error);
|
|
68
|
+
process.exit(1);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
// Smart defaults - look for config files or package.json
|
|
72
|
+
const config = await resolveDefaultConfig();
|
|
73
|
+
console.log(`\n Generating OG image...\n`);
|
|
74
|
+
console.log(` Title: ${config.title}`);
|
|
75
|
+
if (config.subtitle)
|
|
76
|
+
console.log(` Subtitle: ${config.subtitle}`);
|
|
77
|
+
console.log(` Template: ${config.template}`);
|
|
78
|
+
console.log(` Output: ${config.output}\n`);
|
|
79
|
+
try {
|
|
80
|
+
await generateOG(config);
|
|
81
|
+
console.log(` ✓ Created ${config.output}\n`);
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
console.error('Error:', error instanceof Error ? error.message : error);
|
|
85
|
+
process.exit(1);
|
|
86
|
+
}
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
// Setup command - uses Claude Code for smart project analysis
|
|
90
|
+
if (command === 'setup') {
|
|
91
|
+
const ogPath = args[1] || 'og.png';
|
|
92
|
+
await runSetup(ogPath);
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
// Sitemap command
|
|
96
|
+
if (command === 'sitemap') {
|
|
97
|
+
const outputIdx = args.indexOf('--output');
|
|
98
|
+
const outputFlag = outputIdx !== -1 ? args[outputIdx + 1] : undefined;
|
|
99
|
+
// Filter out --output and its value from args
|
|
100
|
+
const restArgs = args.slice(1).filter((a, i) => {
|
|
101
|
+
if (a.startsWith('--'))
|
|
102
|
+
return false;
|
|
103
|
+
// Skip the value after --output
|
|
104
|
+
if (outputIdx !== -1 && args.indexOf(a) === outputIdx + 1)
|
|
105
|
+
return false;
|
|
106
|
+
return true;
|
|
107
|
+
});
|
|
108
|
+
// Check if first arg looks like a URL (base URL)
|
|
109
|
+
let baseUrl;
|
|
110
|
+
let paths = [];
|
|
111
|
+
if (restArgs.length > 0) {
|
|
112
|
+
const first = restArgs[0];
|
|
113
|
+
if (first.includes('.') && !first.startsWith('/')) {
|
|
114
|
+
baseUrl = first.startsWith('http') ? first : `https://${first}`;
|
|
115
|
+
paths = restArgs.slice(1);
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
// All args are paths, will need inventory for baseUrl
|
|
119
|
+
paths = restArgs;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
try {
|
|
123
|
+
console.log(`\n Generating sitemap...\n`);
|
|
124
|
+
const output = await generateSitemap({
|
|
125
|
+
baseUrl,
|
|
126
|
+
paths: paths.length > 0 ? paths : undefined,
|
|
127
|
+
output: outputFlag ?? 'sitemap.xml'
|
|
128
|
+
});
|
|
129
|
+
console.log(` ✓ Created ${output}`);
|
|
130
|
+
printSitemapHelp();
|
|
131
|
+
}
|
|
132
|
+
catch (error) {
|
|
133
|
+
console.error('\n Error:', error instanceof Error ? error.message : error);
|
|
134
|
+
process.exit(1);
|
|
135
|
+
}
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
46
138
|
// Init command - add paths manually for local dev
|
|
47
139
|
if (command === 'init') {
|
|
48
140
|
const paths = args.slice(1);
|
|
@@ -126,9 +218,12 @@ function printHelp() {
|
|
|
126
218
|
@arach/og - Declarative OG image generation
|
|
127
219
|
|
|
128
220
|
Usage:
|
|
129
|
-
og
|
|
221
|
+
og generate Generate OG image with smart defaults
|
|
222
|
+
og generate <config> Generate from a config file
|
|
223
|
+
og setup [og.png] Set up meta tags (uses Claude Code)
|
|
130
224
|
og validate <url> Validate OG tags on a single URL
|
|
131
225
|
og audit <url> Audit all pages on a site (uses sitemap)
|
|
226
|
+
og sitemap [url] [paths] Generate a sitemap.xml
|
|
132
227
|
og init <paths...> Add paths to inventory for local dev
|
|
133
228
|
og viewer Launch local viewer for OG inventory
|
|
134
229
|
og --help Show this help message
|
|
@@ -139,7 +234,8 @@ Workflow:
|
|
|
139
234
|
|
|
140
235
|
2. View your inventory: og viewer
|
|
141
236
|
|
|
142
|
-
3. Generate images: og
|
|
237
|
+
3. Generate images: og generate
|
|
238
|
+
Generate sitemap: og sitemap
|
|
143
239
|
|
|
144
240
|
Audit:
|
|
145
241
|
Scan a website's sitemap and audit OG tags for each page.
|
|
@@ -158,6 +254,13 @@ Init:
|
|
|
158
254
|
|
|
159
255
|
Creates/updates .og-inventory.json
|
|
160
256
|
|
|
257
|
+
Sitemap:
|
|
258
|
+
Generate a starter sitemap.xml for your site.
|
|
259
|
+
|
|
260
|
+
$ og sitemap # Uses .og-inventory.json
|
|
261
|
+
$ og sitemap mysite.com / /about /docs # From paths
|
|
262
|
+
$ og sitemap --output public/sitemap.xml # Custom output
|
|
263
|
+
|
|
161
264
|
Viewer:
|
|
162
265
|
Launch local viewer to see your OG inventory.
|
|
163
266
|
|
|
@@ -170,8 +273,12 @@ Validate:
|
|
|
170
273
|
$ og validate https://example.com/page
|
|
171
274
|
|
|
172
275
|
Generate:
|
|
173
|
-
Create OG images from a
|
|
276
|
+
Create OG images. Runs with smart defaults or from a config file.
|
|
277
|
+
|
|
278
|
+
$ og generate # Smart defaults from package.json
|
|
279
|
+
$ og generate og.config.json # From config file
|
|
174
280
|
|
|
281
|
+
Config file format:
|
|
175
282
|
{
|
|
176
283
|
"template": "branded",
|
|
177
284
|
"title": "My App",
|
|
@@ -179,8 +286,75 @@ Generate:
|
|
|
179
286
|
"output": "public/og.png"
|
|
180
287
|
}
|
|
181
288
|
|
|
289
|
+
Smart defaults:
|
|
290
|
+
• Reads title/description from package.json
|
|
291
|
+
• Falls back to directory name
|
|
292
|
+
• Uses 'branded' template
|
|
293
|
+
• Outputs to og.png
|
|
294
|
+
|
|
295
|
+
Setup:
|
|
296
|
+
Analyze your project and get tailored meta tag instructions.
|
|
297
|
+
Uses Claude Code CLI for smart project detection.
|
|
298
|
+
|
|
299
|
+
$ og setup # After generating og.png
|
|
300
|
+
$ og setup public/og.png # Custom image path
|
|
301
|
+
|
|
302
|
+
Detects: React, Next.js, Vite, existing helmet, etc.
|
|
303
|
+
Provides: Copy-pasteable code + step-by-step instructions
|
|
304
|
+
|
|
182
305
|
Templates: branded, docs, minimal, editor-dark
|
|
183
306
|
`);
|
|
184
307
|
}
|
|
308
|
+
async function resolveDefaultConfig() {
|
|
309
|
+
// 1. Check for existing OG config files
|
|
310
|
+
const configFiles = ['og.config.json', '.og.json', 'og.json'];
|
|
311
|
+
for (const file of configFiles) {
|
|
312
|
+
try {
|
|
313
|
+
const content = await readFile(file, 'utf-8');
|
|
314
|
+
const config = JSON.parse(content);
|
|
315
|
+
if (!Array.isArray(config)) {
|
|
316
|
+
console.log(` ✓ Found ${file}\n`);
|
|
317
|
+
return config;
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
catch {
|
|
321
|
+
// Try next
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
// 2. Try to read package.json for project info
|
|
325
|
+
let title = 'My Project';
|
|
326
|
+
let subtitle;
|
|
327
|
+
try {
|
|
328
|
+
const pkgContent = await readFile('package.json', 'utf-8');
|
|
329
|
+
const pkg = JSON.parse(pkgContent);
|
|
330
|
+
if (pkg.name) {
|
|
331
|
+
// Clean up package name (remove scope, convert dashes)
|
|
332
|
+
title = pkg.name
|
|
333
|
+
.replace(/^@[\w-]+\//, '') // Remove scope
|
|
334
|
+
.split('-')
|
|
335
|
+
.map((w) => w.charAt(0).toUpperCase() + w.slice(1))
|
|
336
|
+
.join(' ');
|
|
337
|
+
}
|
|
338
|
+
if (pkg.description) {
|
|
339
|
+
subtitle = pkg.description;
|
|
340
|
+
}
|
|
341
|
+
console.log(` ✓ Using info from package.json\n`);
|
|
342
|
+
}
|
|
343
|
+
catch {
|
|
344
|
+
// Use directory name as fallback
|
|
345
|
+
const dirName = process.cwd().split('/').pop() || 'project';
|
|
346
|
+
title = dirName
|
|
347
|
+
.split('-')
|
|
348
|
+
.map(w => w.charAt(0).toUpperCase() + w.slice(1))
|
|
349
|
+
.join(' ');
|
|
350
|
+
console.log(` ℹ No package.json found, using directory name\n`);
|
|
351
|
+
}
|
|
352
|
+
return {
|
|
353
|
+
template: 'branded',
|
|
354
|
+
title,
|
|
355
|
+
subtitle,
|
|
356
|
+
output: 'og.png'
|
|
357
|
+
};
|
|
358
|
+
}
|
|
185
359
|
main();
|
|
186
360
|
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAC3D,OAAO,EAAE,UAAU,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAA;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
export { generateOG, generateOGBatch } from './generate.js';
|
|
2
2
|
export { validateOG, formatValidationResult } from './validate.js';
|
|
3
|
+
export { generateSitemap } from './sitemap.js';
|
|
3
4
|
export { templates } from './templates/index.js';
|
|
4
5
|
export type { OGConfig, TemplateId, TemplateContext, TemplateFunction } from './types.js';
|
|
5
6
|
export type { ValidationResult, ValidationCheck } from './validate.js';
|
|
7
|
+
export type { SitemapOptions } from './sitemap.js';
|
|
6
8
|
//# 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,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAC3D,OAAO,EAAE,UAAU,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAA;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAChD,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AACzF,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAC3D,OAAO,EAAE,UAAU,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAA;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAChD,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AACzF,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AACtE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA"}
|
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAC3D,OAAO,EAAE,UAAU,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAA;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAC3D,OAAO,EAAE,UAAU,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAA;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA"}
|
package/dist/setup.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface SetupAnalysis {
|
|
2
|
+
isReact: boolean;
|
|
3
|
+
isNextJs: boolean;
|
|
4
|
+
isVite: boolean;
|
|
5
|
+
hasHelmet: boolean;
|
|
6
|
+
hasExistingOgTags: boolean;
|
|
7
|
+
recommendHelmet: boolean;
|
|
8
|
+
metaTagsLocation: string | null;
|
|
9
|
+
installCommand: string | null;
|
|
10
|
+
metaTags: string;
|
|
11
|
+
instructions: string[];
|
|
12
|
+
}
|
|
13
|
+
export declare function runSetup(ogImagePath?: string): Promise<SetupAnalysis | null>;
|
|
14
|
+
//# sourceMappingURL=setup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAA;IAChB,QAAQ,EAAE,OAAO,CAAA;IACjB,MAAM,EAAE,OAAO,CAAA;IACf,SAAS,EAAE,OAAO,CAAA;IAClB,iBAAiB,EAAE,OAAO,CAAA;IAC1B,eAAe,EAAE,OAAO,CAAA;IACxB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,EAAE,MAAM,EAAE,CAAA;CACvB;AA4FD,wBAAsB,QAAQ,CAAC,WAAW,GAAE,MAAiB,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CA8D5F"}
|
package/dist/setup.js
ADDED
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
import { execSync } from 'node:child_process';
|
|
2
|
+
import { readFile } from 'node:fs/promises';
|
|
3
|
+
import { existsSync } from 'node:fs';
|
|
4
|
+
async function gatherContext(ogImagePath) {
|
|
5
|
+
const context = {
|
|
6
|
+
packageJson: null,
|
|
7
|
+
hasAppRouter: false,
|
|
8
|
+
hasPagesRouter: false,
|
|
9
|
+
hasIndexHtml: false,
|
|
10
|
+
layoutFiles: [],
|
|
11
|
+
ogImagePath
|
|
12
|
+
};
|
|
13
|
+
// Read package.json
|
|
14
|
+
try {
|
|
15
|
+
const pkg = await readFile('package.json', 'utf-8');
|
|
16
|
+
context.packageJson = JSON.parse(pkg);
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
// No package.json
|
|
20
|
+
}
|
|
21
|
+
// Check for Next.js app router
|
|
22
|
+
context.hasAppRouter = existsSync('app') || existsSync('src/app');
|
|
23
|
+
context.hasPagesRouter = existsSync('pages') || existsSync('src/pages');
|
|
24
|
+
// Check for index.html (Vite, CRA, plain HTML)
|
|
25
|
+
context.hasIndexHtml = existsSync('index.html') || existsSync('public/index.html');
|
|
26
|
+
// Find layout files
|
|
27
|
+
const layoutPatterns = [
|
|
28
|
+
'app/layout.tsx', 'app/layout.jsx', 'app/layout.js',
|
|
29
|
+
'src/app/layout.tsx', 'src/app/layout.jsx', 'src/app/layout.js',
|
|
30
|
+
'pages/_app.tsx', 'pages/_app.jsx', 'pages/_app.js',
|
|
31
|
+
'src/pages/_app.tsx', 'src/pages/_app.jsx', 'src/pages/_app.js',
|
|
32
|
+
'src/App.tsx', 'src/App.jsx', 'src/App.js',
|
|
33
|
+
'src/main.tsx', 'src/main.jsx', 'src/main.js'
|
|
34
|
+
];
|
|
35
|
+
for (const pattern of layoutPatterns) {
|
|
36
|
+
if (existsSync(pattern)) {
|
|
37
|
+
context.layoutFiles.push(pattern);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return context;
|
|
41
|
+
}
|
|
42
|
+
function buildPrompt(context) {
|
|
43
|
+
const contextJson = JSON.stringify(context, null, 2);
|
|
44
|
+
return `Analyze this project and help set up OG meta tags for the image at "${context.ogImagePath}".
|
|
45
|
+
|
|
46
|
+
PROJECT CONTEXT:
|
|
47
|
+
${contextJson}
|
|
48
|
+
|
|
49
|
+
Respond with ONLY valid JSON matching this exact structure (no markdown, no explanation, just JSON):
|
|
50
|
+
|
|
51
|
+
{
|
|
52
|
+
"isReact": boolean,
|
|
53
|
+
"isNextJs": boolean,
|
|
54
|
+
"isVite": boolean,
|
|
55
|
+
"hasHelmet": boolean,
|
|
56
|
+
"hasExistingOgTags": boolean,
|
|
57
|
+
"recommendHelmet": boolean,
|
|
58
|
+
"metaTagsLocation": "path/to/file or null if unclear",
|
|
59
|
+
"installCommand": "pnpm add react-helmet-async" or null if not needed,
|
|
60
|
+
"metaTags": "the actual code snippet to add (HTML meta tags or React/Next.js code)",
|
|
61
|
+
"instructions": ["step 1", "step 2", ...]
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
Rules:
|
|
65
|
+
- isReact: true if React is a dependency
|
|
66
|
+
- isNextJs: true if Next.js project (next in dependencies)
|
|
67
|
+
- isVite: true if Vite project (vite in devDependencies)
|
|
68
|
+
- hasHelmet: true if react-helmet or react-helmet-async is installed
|
|
69
|
+
- recommendHelmet: true if React (not Next.js) and no helmet installed
|
|
70
|
+
- For Next.js App Router: use generateMetadata or metadata export
|
|
71
|
+
- For Next.js Pages Router: use next/head
|
|
72
|
+
- For React+Vite: use react-helmet-async
|
|
73
|
+
- For plain HTML: just the meta tags
|
|
74
|
+
- metaTags should be copy-pasteable code
|
|
75
|
+
- instructions should be clear, actionable steps`;
|
|
76
|
+
}
|
|
77
|
+
export async function runSetup(ogImagePath = 'og.png') {
|
|
78
|
+
console.log(`\n Analyzing project for OG setup...\n`);
|
|
79
|
+
const context = await gatherContext(ogImagePath);
|
|
80
|
+
// Find claude CLI - prefer ~/.claude/local/claude
|
|
81
|
+
const homedir = process.env.HOME || process.env.USERPROFILE || '';
|
|
82
|
+
const claudePaths = [
|
|
83
|
+
`${homedir}/.claude/local/claude`,
|
|
84
|
+
'claude' // fallback to PATH
|
|
85
|
+
];
|
|
86
|
+
let claudePath = null;
|
|
87
|
+
for (const p of claudePaths) {
|
|
88
|
+
try {
|
|
89
|
+
execSync(`${p} --version`, { encoding: 'utf-8', stdio: 'pipe' });
|
|
90
|
+
claudePath = p;
|
|
91
|
+
break;
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
// Try next
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
if (!claudePath) {
|
|
98
|
+
console.log(` Claude Code CLI not found. Install it or use manual setup.\n`);
|
|
99
|
+
printFallbackInstructions(ogImagePath);
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
102
|
+
const prompt = buildPrompt(context);
|
|
103
|
+
console.log(` Running analysis with Claude Code...\n`);
|
|
104
|
+
try {
|
|
105
|
+
// Shell out to claude -p using stdin to avoid shell escaping issues
|
|
106
|
+
const result = execSync(`${claudePath} -p -`, {
|
|
107
|
+
encoding: 'utf-8',
|
|
108
|
+
input: prompt,
|
|
109
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
110
|
+
maxBuffer: 1024 * 1024
|
|
111
|
+
});
|
|
112
|
+
// Parse the JSON response
|
|
113
|
+
const jsonMatch = result.match(/\{[\s\S]*\}/);
|
|
114
|
+
if (!jsonMatch) {
|
|
115
|
+
console.log(` Could not parse response. Raw output:\n`);
|
|
116
|
+
console.log(result);
|
|
117
|
+
return null;
|
|
118
|
+
}
|
|
119
|
+
const analysis = JSON.parse(jsonMatch[0]);
|
|
120
|
+
printAnalysis(analysis);
|
|
121
|
+
return analysis;
|
|
122
|
+
}
|
|
123
|
+
catch (error) {
|
|
124
|
+
const err = error;
|
|
125
|
+
console.log(` Claude analysis failed. Using fallback.`);
|
|
126
|
+
if (err.stderr)
|
|
127
|
+
console.log(` Error: ${err.stderr.slice(0, 200)}`);
|
|
128
|
+
console.log();
|
|
129
|
+
printFallbackInstructions(ogImagePath);
|
|
130
|
+
return null;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
function printAnalysis(analysis) {
|
|
134
|
+
const check = '\x1b[32m✓\x1b[0m';
|
|
135
|
+
const cross = '\x1b[31m✗\x1b[0m';
|
|
136
|
+
const info = '\x1b[36mℹ\x1b[0m';
|
|
137
|
+
console.log(` Project Analysis`);
|
|
138
|
+
console.log(` ${'─'.repeat(40)}`);
|
|
139
|
+
console.log(` ${analysis.isNextJs ? check : cross} Next.js`);
|
|
140
|
+
console.log(` ${analysis.isReact ? check : cross} React`);
|
|
141
|
+
console.log(` ${analysis.isVite ? check : cross} Vite`);
|
|
142
|
+
console.log(` ${analysis.hasHelmet ? check : cross} Helmet installed`);
|
|
143
|
+
console.log(` ${analysis.hasExistingOgTags ? check : cross} Existing OG tags`);
|
|
144
|
+
if (analysis.recommendHelmet && analysis.installCommand) {
|
|
145
|
+
console.log(`\n ${info} Recommended: Install helmet for meta tag management`);
|
|
146
|
+
console.log(`\n ${analysis.installCommand}\n`);
|
|
147
|
+
}
|
|
148
|
+
if (analysis.metaTagsLocation) {
|
|
149
|
+
console.log(`\n ${info} Add to: ${analysis.metaTagsLocation}`);
|
|
150
|
+
}
|
|
151
|
+
console.log(`\n ${'─'.repeat(40)}`);
|
|
152
|
+
console.log(` Code to add:`);
|
|
153
|
+
console.log(` ${'─'.repeat(40)}\n`);
|
|
154
|
+
console.log(analysis.metaTags);
|
|
155
|
+
console.log(`\n ${'─'.repeat(40)}`);
|
|
156
|
+
if (analysis.instructions.length > 0) {
|
|
157
|
+
console.log(`\n Steps:`);
|
|
158
|
+
analysis.instructions.forEach((step, i) => {
|
|
159
|
+
console.log(` ${i + 1}. ${step}`);
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
console.log();
|
|
163
|
+
}
|
|
164
|
+
function printFallbackInstructions(ogImagePath) {
|
|
165
|
+
console.log(` Add these meta tags to your HTML <head>:\n`);
|
|
166
|
+
console.log(` <meta property="og:image" content="https://yoursite.com/${ogImagePath}" />`);
|
|
167
|
+
console.log(` <meta property="og:image:width" content="1200" />`);
|
|
168
|
+
console.log(` <meta property="og:image:height" content="630" />`);
|
|
169
|
+
console.log(` <meta property="og:type" content="website" />\n`);
|
|
170
|
+
console.log(` For React projects, consider react-helmet-async:`);
|
|
171
|
+
console.log(` pnpm add react-helmet-async\n`);
|
|
172
|
+
console.log(` For Next.js App Router, export metadata from layout.tsx:`);
|
|
173
|
+
console.log(` export const metadata = {`);
|
|
174
|
+
console.log(` openGraph: { images: ['/og.png'] }`);
|
|
175
|
+
console.log(` }\n`);
|
|
176
|
+
}
|
|
177
|
+
//# sourceMappingURL=setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export interface SitemapOptions {
|
|
2
|
+
baseUrl?: string;
|
|
3
|
+
paths?: string[];
|
|
4
|
+
output?: string;
|
|
5
|
+
changefreq?: 'always' | 'hourly' | 'daily' | 'weekly' | 'monthly' | 'yearly' | 'never';
|
|
6
|
+
priority?: number;
|
|
7
|
+
}
|
|
8
|
+
export declare function generateSitemap(options?: SitemapOptions): Promise<string>;
|
|
9
|
+
export declare function printSitemapHelp(): void;
|
|
10
|
+
//# sourceMappingURL=sitemap.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sitemap.d.ts","sourceRoot":"","sources":["../src/sitemap.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,UAAU,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAA;IACtF,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,wBAAsB,eAAe,CAAC,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,CAoCnF;AAoCD,wBAAgB,gBAAgB,IAAI,IAAI,CA6CvC"}
|
package/dist/sitemap.js
ADDED
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { readFile, writeFile } from 'node:fs/promises';
|
|
2
|
+
export async function generateSitemap(options = {}) {
|
|
3
|
+
const output = options.output ?? 'sitemap.xml';
|
|
4
|
+
let baseUrl = options.baseUrl;
|
|
5
|
+
let paths = options.paths ?? [];
|
|
6
|
+
// If no paths provided, try to load from inventory
|
|
7
|
+
if (paths.length === 0) {
|
|
8
|
+
try {
|
|
9
|
+
const inventoryJson = await readFile('.og-inventory.json', 'utf-8');
|
|
10
|
+
const inventory = JSON.parse(inventoryJson);
|
|
11
|
+
baseUrl = baseUrl ?? inventory.baseUrl;
|
|
12
|
+
paths = inventory.pages.map(p => p.path);
|
|
13
|
+
console.log(` ✓ Loaded ${paths.length} paths from .og-inventory.json\n`);
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
// No inventory found
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
if (paths.length === 0) {
|
|
20
|
+
throw new Error('No paths provided and no .og-inventory.json found.\n\n Usage:\n og sitemap <baseUrl> [paths...]\n og sitemap https://mysite.com / /about /docs\n\n Or run `og audit <url>` or `og init <paths>` first to create an inventory.');
|
|
21
|
+
}
|
|
22
|
+
if (!baseUrl) {
|
|
23
|
+
throw new Error('No base URL provided.\n\n Usage: og sitemap <baseUrl> [paths...]\n Example: og sitemap https://mysite.com / /about /docs');
|
|
24
|
+
}
|
|
25
|
+
// Normalize base URL
|
|
26
|
+
const base = baseUrl.replace(/\/$/, '');
|
|
27
|
+
// Generate XML
|
|
28
|
+
const xml = buildSitemapXml(base, paths, options);
|
|
29
|
+
// Write file
|
|
30
|
+
await writeFile(output, xml);
|
|
31
|
+
return output;
|
|
32
|
+
}
|
|
33
|
+
function buildSitemapXml(baseUrl, paths, options) {
|
|
34
|
+
const changefreq = options.changefreq ?? 'weekly';
|
|
35
|
+
const priority = options.priority ?? 0.8;
|
|
36
|
+
const lastmod = new Date().toISOString().split('T')[0];
|
|
37
|
+
const urls = paths.map(path => {
|
|
38
|
+
const normalizedPath = path.startsWith('/') ? path : `/${path}`;
|
|
39
|
+
const fullUrl = `${baseUrl}${normalizedPath}`;
|
|
40
|
+
const isHome = normalizedPath === '/';
|
|
41
|
+
return ` <url>
|
|
42
|
+
<loc>${escapeXml(fullUrl)}</loc>
|
|
43
|
+
<lastmod>${lastmod}</lastmod>
|
|
44
|
+
<changefreq>${changefreq}</changefreq>
|
|
45
|
+
<priority>${isHome ? '1.0' : priority.toFixed(1)}</priority>
|
|
46
|
+
</url>`;
|
|
47
|
+
});
|
|
48
|
+
return `<?xml version="1.0" encoding="UTF-8"?>
|
|
49
|
+
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
|
50
|
+
${urls.join('\n')}
|
|
51
|
+
</urlset>
|
|
52
|
+
`;
|
|
53
|
+
}
|
|
54
|
+
function escapeXml(str) {
|
|
55
|
+
return str
|
|
56
|
+
.replace(/&/g, '&')
|
|
57
|
+
.replace(/</g, '<')
|
|
58
|
+
.replace(/>/g, '>')
|
|
59
|
+
.replace(/"/g, '"')
|
|
60
|
+
.replace(/'/g, ''');
|
|
61
|
+
}
|
|
62
|
+
export function printSitemapHelp() {
|
|
63
|
+
console.log(`
|
|
64
|
+
${'─'.repeat(60)}
|
|
65
|
+
|
|
66
|
+
Next steps:
|
|
67
|
+
|
|
68
|
+
1. Add to your robots.txt:
|
|
69
|
+
Sitemap: https://yoursite.com/sitemap.xml
|
|
70
|
+
|
|
71
|
+
2. Submit to search engines:
|
|
72
|
+
• Google Search Console: https://search.google.com/search-console
|
|
73
|
+
• Bing Webmaster Tools: https://www.bing.com/webmasters
|
|
74
|
+
|
|
75
|
+
3. Verify it's accessible:
|
|
76
|
+
curl https://yoursite.com/sitemap.xml
|
|
77
|
+
|
|
78
|
+
${'─'.repeat(60)}
|
|
79
|
+
|
|
80
|
+
Learn more:
|
|
81
|
+
|
|
82
|
+
Sitemap basics:
|
|
83
|
+
• Sitemap protocol spec: https://www.sitemaps.org/protocol.html
|
|
84
|
+
• Google sitemap guide: https://developers.google.com/search/docs/crawling-indexing/sitemaps/overview
|
|
85
|
+
|
|
86
|
+
SEO fundamentals:
|
|
87
|
+
• Google SEO starter guide: https://developers.google.com/search/docs/fundamentals/seo-starter-guide
|
|
88
|
+
• Ahrefs SEO basics: https://ahrefs.com/seo
|
|
89
|
+
|
|
90
|
+
Quick-start tools:
|
|
91
|
+
|
|
92
|
+
# Next.js projects - auto-generates from pages
|
|
93
|
+
npx next-sitemap
|
|
94
|
+
|
|
95
|
+
# Crawl any site and generate sitemap
|
|
96
|
+
npx sitemap-generator-cli https://yoursite.com
|
|
97
|
+
|
|
98
|
+
# Validate your sitemap
|
|
99
|
+
npx sitemap-validator sitemap.xml
|
|
100
|
+
|
|
101
|
+
Open source repos:
|
|
102
|
+
• next-sitemap: https://github.com/iamvishnusankar/next-sitemap
|
|
103
|
+
• sitemap.js: https://github.com/ekalinin/sitemap.js
|
|
104
|
+
|
|
105
|
+
${'─'.repeat(60)}
|
|
106
|
+
`);
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=sitemap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sitemap.js","sourceRoot":"","sources":["../src/sitemap.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@arach/og",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.8",
|
|
4
4
|
"description": "Declarative OG image generation with Puppeteer",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -18,12 +18,6 @@
|
|
|
18
18
|
"dist",
|
|
19
19
|
"templates"
|
|
20
20
|
],
|
|
21
|
-
"scripts": {
|
|
22
|
-
"build": "tsc",
|
|
23
|
-
"dev": "tsc --watch",
|
|
24
|
-
"test": "node --test src/**/*.test.ts",
|
|
25
|
-
"prepublishOnly": "pnpm build"
|
|
26
|
-
},
|
|
27
21
|
"keywords": [
|
|
28
22
|
"og",
|
|
29
23
|
"opengraph",
|
|
@@ -40,5 +34,10 @@
|
|
|
40
34
|
"devDependencies": {
|
|
41
35
|
"@types/node": "^22.0.0",
|
|
42
36
|
"typescript": "^5.7.0"
|
|
37
|
+
},
|
|
38
|
+
"scripts": {
|
|
39
|
+
"build": "tsc",
|
|
40
|
+
"dev": "tsc --watch",
|
|
41
|
+
"test": "node --test src/**/*.test.ts"
|
|
43
42
|
}
|
|
44
|
-
}
|
|
43
|
+
}
|