@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 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 <config.json> Generate OG images from a config file
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 config.json
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 JSON config file.
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":"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"}
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
@@ -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
@@ -1,4 +1,5 @@
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
  //# 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,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"}
@@ -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":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAC7C,OAAO,EAAE,QAAQ,EAAW,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAwBpC,KAAK,UAAU,aAAa,CAAC,WAAmB;IAC9C,MAAM,OAAO,GAAmB;QAC9B,WAAW,EAAE,IAAI;QACjB,YAAY,EAAE,KAAK;QACnB,cAAc,EAAE,KAAK;QACrB,YAAY,EAAE,KAAK;QACnB,WAAW,EAAE,EAAE;QACf,WAAW;KACZ,CAAA;IAED,oBAAoB;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC,CAAA;QACnD,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IACvC,CAAC;IAAC,MAAM,CAAC;QACP,kBAAkB;IACpB,CAAC;IAED,+BAA+B;IAC/B,OAAO,CAAC,YAAY,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC,SAAS,CAAC,CAAA;IACjE,OAAO,CAAC,cAAc,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,UAAU,CAAC,WAAW,CAAC,CAAA;IAEvE,+CAA+C;IAC/C,OAAO,CAAC,YAAY,GAAG,UAAU,CAAC,YAAY,CAAC,IAAI,UAAU,CAAC,mBAAmB,CAAC,CAAA;IAElF,oBAAoB;IACpB,MAAM,cAAc,GAAG;QACrB,gBAAgB,EAAE,gBAAgB,EAAE,eAAe;QACnD,oBAAoB,EAAE,oBAAoB,EAAE,mBAAmB;QAC/D,gBAAgB,EAAE,gBAAgB,EAAE,eAAe;QACnD,oBAAoB,EAAE,oBAAoB,EAAE,mBAAmB;QAC/D,aAAa,EAAE,aAAa,EAAE,YAAY;QAC1C,cAAc,EAAE,cAAc,EAAE,aAAa;KAC9C,CAAA;IAED,KAAK,MAAM,OAAO,IAAI,cAAc,EAAE,CAAC;QACrC,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACxB,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACnC,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,SAAS,WAAW,CAAC,OAAuB;IAC1C,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;IAEpD,OAAO,uEAAuE,OAAO,CAAC,WAAW;;;EAGjG,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;iDA4BoC,CAAA;AACjD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,cAAsB,QAAQ;IAC3D,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAA;IAEtD,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,WAAW,CAAC,CAAA;IAEhD,kDAAkD;IAClD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAA;IACjE,MAAM,WAAW,GAAG;QAClB,GAAG,OAAO,uBAAuB;QACjC,QAAQ,CAAC,mBAAmB;KAC7B,CAAA;IAED,IAAI,UAAU,GAAkB,IAAI,CAAA;IACpC,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;QAC5B,IAAI,CAAC;YACH,QAAQ,CAAC,GAAG,CAAC,YAAY,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;YAChE,UAAU,GAAG,CAAC,CAAA;YACd,MAAK;QACP,CAAC;QAAC,MAAM,CAAC;YACP,WAAW;QACb,CAAC;IACH,CAAC;IAED,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,gEAAgE,CAAC,CAAA;QAC7E,yBAAyB,CAAC,WAAW,CAAC,CAAA;QACtC,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,CAAA;IAEnC,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAA;IAEvD,IAAI,CAAC;QACH,oEAAoE;QACpE,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,UAAU,OAAO,EAAE;YAC5C,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,MAAM;YACb,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;YAC/B,SAAS,EAAE,IAAI,GAAG,IAAI;SACvB,CAAC,CAAA;QAEF,0BAA0B;QAC1B,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAA;QAC7C,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAA;YACxD,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;YACnB,OAAO,IAAI,CAAA;QACb,CAAC;QAED,MAAM,QAAQ,GAAkB,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAA;QACxD,aAAa,CAAC,QAAQ,CAAC,CAAA;QACvB,OAAO,QAAQ,CAAA;IAEjB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,GAAG,GAAG,KAAqD,CAAA;QACjE,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAA;QACxD,IAAI,GAAG,CAAC,MAAM;YAAE,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAA;QACnE,OAAO,CAAC,GAAG,EAAE,CAAA;QACb,yBAAyB,CAAC,WAAW,CAAC,CAAA;QACtC,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,QAAuB;IAC5C,MAAM,KAAK,GAAG,kBAAkB,CAAA;IAChC,MAAM,KAAK,GAAG,kBAAkB,CAAA;IAChC,MAAM,IAAI,GAAG,kBAAkB,CAAA;IAE/B,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAA;IACjC,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;IAClC,OAAO,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC,CAAA;IAC7D,OAAO,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAA;IAC1D,OAAO,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAA;IACxD,OAAO,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,mBAAmB,CAAC,CAAA;IACvE,OAAO,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,mBAAmB,CAAC,CAAA;IAE/E,IAAI,QAAQ,CAAC,eAAe,IAAI,QAAQ,CAAC,cAAc,EAAE,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,sDAAsD,CAAC,CAAA;QAC9E,OAAO,CAAC,GAAG,CAAC,SAAS,QAAQ,CAAC,cAAc,IAAI,CAAC,CAAA;IACnD,CAAC;IAED,IAAI,QAAQ,CAAC,gBAAgB,EAAE,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,YAAY,QAAQ,CAAC,gBAAgB,EAAE,CAAC,CAAA;IACjE,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;IACpC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAA;IAC7B,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAA;IACpC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;IAC9B,OAAO,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;IAEpC,IAAI,QAAQ,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;QACzB,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;YACxC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAA;QACtC,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,OAAO,CAAC,GAAG,EAAE,CAAA;AACf,CAAC;AAED,SAAS,yBAAyB,CAAC,WAAmB;IACpD,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAA;IAC3D,OAAO,CAAC,GAAG,CAAC,+DAA+D,WAAW,MAAM,CAAC,CAAA;IAC7F,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAA;IACpE,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAA;IACpE,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAA;IAElE,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAA;IACjE,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAA;IAEhD,OAAO,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAA;IACzE,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAA;IAC5C,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAA;IACvD,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;AACxB,CAAC"}
@@ -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"}
@@ -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, '&amp;')
57
+ .replace(/</g, '&lt;')
58
+ .replace(/>/g, '&gt;')
59
+ .replace(/"/g, '&quot;')
60
+ .replace(/'/g, '&apos;');
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.4",
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
+ }