@lownoise-studio/rendershield 0.3.1 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/CHANGELOG.md +58 -32
  2. package/CONTRIBUTING.md +41 -0
  3. package/README.md +209 -144
  4. package/SECURITY.md +25 -0
  5. package/dist/cli.d.ts +3 -0
  6. package/dist/cli.d.ts.map +1 -0
  7. package/dist/cli.js +27 -19
  8. package/dist/cli.js.map +1 -1
  9. package/dist/commands/build.d.ts +2 -0
  10. package/dist/commands/build.d.ts.map +1 -0
  11. package/dist/commands/build.js +10 -9
  12. package/dist/commands/build.js.map +1 -1
  13. package/dist/commands/init.d.ts +2 -0
  14. package/dist/commands/init.d.ts.map +1 -0
  15. package/dist/commands/verify.d.ts +19 -0
  16. package/dist/commands/verify.d.ts.map +1 -0
  17. package/dist/commands/verify.js +57 -64
  18. package/dist/commands/verify.js.map +1 -1
  19. package/dist/core/generateRobots.d.ts +3 -0
  20. package/dist/core/generateRobots.d.ts.map +1 -0
  21. package/dist/core/generateSitemap.d.ts +3 -0
  22. package/dist/core/generateSitemap.d.ts.map +1 -0
  23. package/dist/core/generateWorker.d.ts +3 -0
  24. package/dist/core/generateWorker.d.ts.map +1 -0
  25. package/dist/core/generateWorker.js +75 -75
  26. package/dist/core/loadConfig.d.ts +3 -0
  27. package/dist/core/loadConfig.d.ts.map +1 -0
  28. package/dist/core/loadConfig.js +68 -25
  29. package/dist/core/loadConfig.js.map +1 -1
  30. package/dist/core/loadMarkdown.d.ts +3 -0
  31. package/dist/core/loadMarkdown.d.ts.map +1 -0
  32. package/dist/core/loadMarkdown.js +4 -3
  33. package/dist/core/loadMarkdown.js.map +1 -1
  34. package/dist/core/renderHtml.d.ts +3 -0
  35. package/dist/core/renderHtml.d.ts.map +1 -0
  36. package/dist/core/renderHtml.js +25 -10
  37. package/dist/core/renderHtml.js.map +1 -1
  38. package/dist/core/validateOutput.d.ts +28 -0
  39. package/dist/core/validateOutput.d.ts.map +1 -0
  40. package/dist/core/validateOutput.js +7 -1
  41. package/dist/core/validateOutput.js.map +1 -1
  42. package/dist/errors.d.ts +14 -0
  43. package/dist/errors.d.ts.map +1 -0
  44. package/dist/errors.js +24 -0
  45. package/dist/errors.js.map +1 -0
  46. package/dist/index.d.ts +20 -0
  47. package/dist/index.d.ts.map +1 -0
  48. package/dist/index.js +19 -0
  49. package/dist/index.js.map +1 -0
  50. package/dist/types.d.ts +53 -0
  51. package/dist/types.d.ts.map +1 -0
  52. package/dist/types.js +1 -1
  53. package/dist/types.js.map +1 -1
  54. package/docs/deploy-cloudflare.md +40 -14
  55. package/package.json +24 -2
  56. package/src/cli.ts +86 -75
  57. package/src/commands/build.ts +199 -185
  58. package/src/commands/verify.ts +266 -236
  59. package/src/core/generateWorker.ts +97 -97
  60. package/src/core/loadConfig.ts +261 -173
  61. package/src/core/loadMarkdown.ts +9 -3
  62. package/src/core/renderHtml.ts +36 -12
  63. package/src/core/validateOutput.ts +335 -328
  64. package/src/errors.ts +48 -0
  65. package/src/index.ts +40 -0
  66. package/src/types.ts +4 -1
@@ -1,5 +1,7 @@
1
1
  import fs from "fs-extra";
2
2
  import path from "node:path";
3
+ import { SCHEMA_TYPES } from "../types.js";
4
+ import { renderShieldError } from "../errors.js";
3
5
  const CONFIG_NAME = "rendershield.config.json";
4
6
  const DEFAULT_SITEMAP_PATH = "/sitemap.xml";
5
7
  const DEFAULT_ROBOTS_PATH = "/robots.txt";
@@ -13,11 +15,11 @@ function coerceBoolFlag(parsed, key, defaultEnabled) {
13
15
  // If present, validate shape
14
16
  const v = parsed[key];
15
17
  if (!isObject(v)) {
16
- throw new Error(`${key} must be an object like { "enabled": true }`);
18
+ throw renderShieldError("CONFIG_INVALID", `${key} must be an object like { "enabled": true }`);
17
19
  }
18
20
  const enabled = v.enabled;
19
21
  if (typeof enabled !== "boolean") {
20
- throw new Error(`${key}.enabled must be a boolean`);
22
+ throw renderShieldError("CONFIG_INVALID", `${key}.enabled must be a boolean`);
21
23
  }
22
24
  return { enabled };
23
25
  }
@@ -32,32 +34,32 @@ function coerceBoolFlag(parsed, key, defaultEnabled) {
32
34
  function validateWorkerWhenEnabled(parsed) {
33
35
  const worker = parsed.worker;
34
36
  if (!worker?.lovableOrigin || typeof worker.lovableOrigin !== "string") {
35
- throw new Error(`worker.lovableOrigin is required when worker.enabled is true. Example: "https://your-site.lovable.app"`);
37
+ throw renderShieldError("CONFIG_INVALID", `worker.lovableOrigin is required when worker.enabled is true. Example: "https://your-site.lovable.app"`);
36
38
  }
37
39
  let url;
38
40
  try {
39
41
  url = new URL(worker.lovableOrigin);
40
42
  }
41
43
  catch {
42
- throw new Error(`worker.lovableOrigin must be a valid URL. Got: "${worker.lovableOrigin}"`);
44
+ throw renderShieldError("CONFIG_INVALID", `worker.lovableOrigin must be a valid URL. Got: "${worker.lovableOrigin}"`);
43
45
  }
44
46
  const scheme = url.protocol.toLowerCase();
45
47
  if (scheme !== "http:" && scheme !== "https:") {
46
- throw new Error(`worker.lovableOrigin must use http or https. Got: "${url.protocol}"`);
48
+ throw renderShieldError("CONFIG_INVALID", `worker.lovableOrigin must use http or https. Got: "${url.protocol}"`);
47
49
  }
48
50
  if (!Array.isArray(worker.rewriteRouteBases) ||
49
51
  worker.rewriteRouteBases.length === 0) {
50
- throw new Error(`worker.rewriteRouteBases must be a non-empty array when worker.enabled is true. Example: ["/blog/"]`);
52
+ throw renderShieldError("CONFIG_INVALID", `worker.rewriteRouteBases must be a non-empty array when worker.enabled is true. Example: ["/blog/"]`);
51
53
  }
52
54
  if (!Array.isArray(worker.botUserAgentPatterns) ||
53
55
  worker.botUserAgentPatterns.length === 0) {
54
- throw new Error(`worker.botUserAgentPatterns must be a non-empty array when worker.enabled is true. Example: ["googlebot", "bingbot"]`);
56
+ throw renderShieldError("CONFIG_INVALID", `worker.botUserAgentPatterns must be a non-empty array when worker.enabled is true. Example: ["googlebot", "bingbot"]`);
55
57
  }
56
58
  // Substring match only; empty string would match every User-Agent
57
59
  for (let i = 0; i < worker.botUserAgentPatterns.length; i++) {
58
60
  const p = worker.botUserAgentPatterns[i];
59
61
  if (typeof p !== "string" || p.trim() === "") {
60
- throw new Error(`worker.botUserAgentPatterns[${i}] must be a non-empty string (substring match). Empty or invalid entry would overmatch.`);
62
+ throw renderShieldError("CONFIG_INVALID", `worker.botUserAgentPatterns[${i}] must be a non-empty string (substring match). Empty or invalid entry would overmatch.`);
61
63
  }
62
64
  }
63
65
  }
@@ -65,7 +67,7 @@ export async function loadConfig(cwd = process.cwd()) {
65
67
  const p = path.join(cwd, CONFIG_NAME);
66
68
  const exists = await fs.pathExists(p);
67
69
  if (!exists) {
68
- throw new Error(`Missing ${CONFIG_NAME}. Run: rendershield init`);
70
+ throw renderShieldError("CONFIG_MISSING", `Missing ${CONFIG_NAME}. Run: rendershield init`);
69
71
  }
70
72
  const raw = await fs.readFile(p, "utf8");
71
73
  let parsed;
@@ -73,27 +75,35 @@ export async function loadConfig(cwd = process.cwd()) {
73
75
  parsed = JSON.parse(raw);
74
76
  }
75
77
  catch {
76
- throw new Error(`${CONFIG_NAME} is not valid JSON`);
78
+ throw renderShieldError("CONFIG_INVALID", `${CONFIG_NAME} is not valid JSON`);
77
79
  }
78
80
  // Minimal validation (v0)
79
- if (parsed?.version !== 1)
80
- throw new Error(`Config version must be 1`);
81
- if (!parsed?.site?.canonicalBase)
82
- throw new Error(`site.canonicalBase is required`);
83
- if (!parsed?.site?.siteName)
84
- throw new Error(`site.siteName is required`);
85
- if (!parsed?.site?.defaultOgImage)
86
- throw new Error(`site.defaultOgImage is required`);
87
- if (!parsed?.site?.authorName)
88
- throw new Error(`site.authorName is required`);
89
- if (!parsed?.content?.markdown?.baseDir)
90
- throw new Error(`content.markdown.baseDir is required`);
81
+ if (parsed?.version !== 1) {
82
+ throw renderShieldError("CONFIG_INVALID", "Config version must be 1");
83
+ }
84
+ if (!parsed?.site?.canonicalBase) {
85
+ throw renderShieldError("CONFIG_INVALID", "site.canonicalBase is required");
86
+ }
87
+ if (!parsed?.site?.siteName) {
88
+ throw renderShieldError("CONFIG_INVALID", "site.siteName is required");
89
+ }
90
+ if (!parsed?.site?.defaultOgImage) {
91
+ throw renderShieldError("CONFIG_INVALID", "site.defaultOgImage is required");
92
+ }
93
+ if (!parsed?.site?.authorName) {
94
+ throw renderShieldError("CONFIG_INVALID", "site.authorName is required");
95
+ }
96
+ if (!parsed?.content?.markdown?.baseDir) {
97
+ throw renderShieldError("CONFIG_INVALID", "content.markdown.baseDir is required");
98
+ }
91
99
  if (!Array.isArray(parsed?.content?.markdown?.collections) ||
92
100
  parsed.content.markdown.collections.length === 0) {
93
- throw new Error(`content.markdown.collections must be a non-empty array`);
101
+ throw renderShieldError("CONFIG_INVALID", "content.markdown.collections must be a non-empty array");
94
102
  }
95
- if (!parsed?.output?.outDir)
96
- throw new Error(`output.outDir is required`);
103
+ if (!parsed?.output?.outDir) {
104
+ throw renderShieldError("CONFIG_INVALID", "output.outDir is required");
105
+ }
106
+ parsed.content.markdown.collections = normalizeCollections(parsed.content.markdown.collections);
97
107
  // Validate + default these optional sections (preserve path so it is not lost)
98
108
  const sitemapFlag = coerceBoolFlag(parsed, "sitemap", true);
99
109
  const sitemapObj = parsed.sitemap;
@@ -125,4 +135,37 @@ export async function loadConfig(cwd = process.cwd()) {
125
135
  }
126
136
  return parsed;
127
137
  }
138
+ function normalizeCollections(collections) {
139
+ return collections.map((raw, index) => {
140
+ if (!isObject(raw)) {
141
+ throw renderShieldError("CONFIG_INVALID", `content.markdown.collections[${index}] must be an object`);
142
+ }
143
+ const name = raw.name;
144
+ const pattern = raw.pattern;
145
+ const routeBase = raw.routeBase;
146
+ const schemaTypeRaw = raw.schemaType;
147
+ if (typeof name !== "string" || name.trim() === "") {
148
+ throw renderShieldError("CONFIG_INVALID", `content.markdown.collections[${index}].name must be a non-empty string`);
149
+ }
150
+ if (typeof pattern !== "string" || pattern.trim() === "") {
151
+ throw renderShieldError("CONFIG_INVALID", `content.markdown.collections[${index}].pattern must be a non-empty string`);
152
+ }
153
+ if (typeof routeBase !== "string" || routeBase.trim() === "") {
154
+ throw renderShieldError("CONFIG_INVALID", `content.markdown.collections[${index}].routeBase must be a non-empty string`);
155
+ }
156
+ const schemaType = schemaTypeRaw === undefined ? "Article" : parseSchemaType(schemaTypeRaw, index);
157
+ return {
158
+ name: name.trim(),
159
+ pattern: pattern.trim(),
160
+ routeBase: routeBase.trim(),
161
+ schemaType,
162
+ };
163
+ });
164
+ }
165
+ function parseSchemaType(value, index) {
166
+ if (typeof value !== "string" || !SCHEMA_TYPES.includes(value)) {
167
+ throw renderShieldError("CONFIG_INVALID", `content.markdown.collections[${index}].schemaType must be one of: ${SCHEMA_TYPES.join(", ")}`);
168
+ }
169
+ return value;
170
+ }
128
171
  //# sourceMappingURL=loadConfig.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"loadConfig.js","sourceRoot":"","sources":["../../src/core/loadConfig.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"loadConfig.js","sourceRoot":"","sources":["../../src/core/loadConfig.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { MarkdownDoc, RenderShieldConfig } from "../types.js";
2
+ export declare function loadAllMarkdownDocs(cfg: RenderShieldConfig, cwd?: string): Promise<MarkdownDoc[]>;
3
+ //# sourceMappingURL=loadMarkdown.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loadMarkdown.d.ts","sourceRoot":"","sources":["../../src/core/loadMarkdown.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AA8B9D,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,kBAAkB,EAAE,GAAG,SAAgB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAoD9G"}
@@ -3,11 +3,12 @@ import fg from "fast-glob";
3
3
  import fs from "fs-extra";
4
4
  import matter from "gray-matter";
5
5
  import MarkdownIt from "markdown-it";
6
+ import { renderShieldError } from "../errors.js";
6
7
  const md = new MarkdownIt({ html: false, linkify: true, typographer: true });
7
8
  const REQUIRED_FIELDS = "title, excerpt, datePublished, coverImage, slug";
8
9
  function requireString(value, field, file) {
9
10
  if (typeof value !== "string" || value.trim().length === 0) {
10
- throw new Error(`Missing required frontmatter field "${field}" in ${file}. Required fields: ${REQUIRED_FIELDS}`);
11
+ throw renderShieldError("CONTENT_INVALID", `Missing required frontmatter field "${field}" in ${file}. Required fields: ${REQUIRED_FIELDS}`);
11
12
  }
12
13
  return value.trim();
13
14
  }
@@ -18,7 +19,7 @@ function normalizeDate(value, file) {
18
19
  if (value instanceof Date) {
19
20
  return value.toISOString().slice(0, 10);
20
21
  }
21
- throw new Error(`Invalid datePublished in ${file}. Use format YYYY-MM-DD.`);
22
+ throw renderShieldError("CONTENT_INVALID", `Invalid datePublished in ${file}. Use format YYYY-MM-DD.`);
22
23
  }
23
24
  export async function loadAllMarkdownDocs(cfg, cwd = process.cwd()) {
24
25
  const baseDirAbs = path.join(cwd, cfg.content.markdown.baseDir);
@@ -34,7 +35,7 @@ export async function loadAllMarkdownDocs(cfg, cwd = process.cwd()) {
34
35
  const excerpt = requireString(parsed.data?.excerpt, "excerpt", abs);
35
36
  const datePublishedRaw = parsed.data?.datePublished;
36
37
  if (datePublishedRaw === undefined || datePublishedRaw === null) {
37
- throw new Error(`Missing required frontmatter field "datePublished" in ${abs}. Required fields: ${REQUIRED_FIELDS}`);
38
+ throw renderShieldError("CONTENT_INVALID", `Missing required frontmatter field "datePublished" in ${abs}. Required fields: ${REQUIRED_FIELDS}`);
38
39
  }
39
40
  const datePublished = normalizeDate(datePublishedRaw, abs);
40
41
  const coverImage = requireString(parsed.data?.coverImage, "coverImage", abs);
@@ -1 +1 @@
1
- {"version":3,"file":"loadMarkdown.js","sourceRoot":"","sources":["../../src/core/loadMarkdown.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"loadMarkdown.js","sourceRoot":"","sources":["../../src/core/loadMarkdown.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,WAAW,CAAC;AAC3B,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,UAAU,MAAM,aAAa,CAAC;AAErC,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEjD,MAAM,EAAE,GAAG,IAAI,UAAU,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;AAE7E,MAAM,eAAe,GAAG,iDAAiD,CAAC;AAE1E,SAAS,aAAa,CAAC,KAAc,EAAE,KAAa,EAAE,IAAY;IAChE,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3D,MAAM,iBAAiB,CACrB,iBAAiB,EACjB,uCAAuC,KAAK,QAAQ,IAAI,sBAAsB,eAAe,EAAE,CAChG,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;AACtB,CAAC;AAED,SAAS,aAAa,CAAC,KAAc,EAAE,IAAY;IACjD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACnE,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,KAAK,YAAY,IAAI,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC1C,CAAC;IACD,MAAM,iBAAiB,CACrB,iBAAiB,EACjB,4BAA4B,IAAI,0BAA0B,CAC3D,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,GAAuB,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE;IACpF,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAEhE,MAAM,GAAG,GAAkB,EAAE,CAAC;IAE9B,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;QACnD,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;QAC5B,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAExE,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;YACvC,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YAC3C,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;YAE3B,MAAM,KAAK,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;YAC9D,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;YAEpE,MAAM,gBAAgB,GAAG,MAAM,CAAC,IAAI,EAAE,aAAa,CAAC;YACpD,IAAI,gBAAgB,KAAK,SAAS,IAAI,gBAAgB,KAAK,IAAI,EAAE,CAAC;gBAChE,MAAM,iBAAiB,CACrB,iBAAiB,EACjB,yDAAyD,GAAG,sBAAsB,eAAe,EAAE,CACpG,CAAC;YACJ,CAAC;YACD,MAAM,aAAa,GAAG,aAAa,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC;YAE3D,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,CAAC,CAAC;YAC7E,MAAM,IAAI,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;YAE3D,sBAAsB;YACtB,MAAM,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC;YAC3F,MAAM,SAAS,GAAG,GAAG,SAAS,IAAI,IAAI,EAAE,CAAC;YAEzC,MAAM,WAAW,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;YAEpD,GAAG,CAAC,IAAI,CAAC;gBACP,UAAU,EAAE,GAAG;gBACf,UAAU,EAAE,GAAG,CAAC,IAAI;gBACpB,SAAS;gBACT,KAAK;gBACL,OAAO;gBACP,aAAa;gBACb,UAAU;gBACV,IAAI;gBACJ,WAAW;aACZ,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,sBAAsB;IACtB,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IAC3D,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { MarkdownDoc, RenderShieldConfig } from "../types.js";
2
+ export declare function renderPageHtml(cfg: RenderShieldConfig, doc: MarkdownDoc): string;
3
+ //# sourceMappingURL=renderHtml.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderHtml.d.ts","sourceRoot":"","sources":["../../src/core/renderHtml.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAc,MAAM,aAAa,CAAC;AAgD1E,wBAAgB,cAAc,CAAC,GAAG,EAAE,kBAAkB,EAAE,GAAG,EAAE,WAAW,GAAG,MAAM,CAuDhF"}
@@ -11,6 +11,27 @@ function joinUrl(base, pathname) {
11
11
  const p = pathname.startsWith("/") ? pathname : `/${pathname}`;
12
12
  return b + p;
13
13
  }
14
+ function resolveSchemaType(cfg, doc) {
15
+ const collection = cfg.content.markdown.collections.find((c) => c.name === doc.collection);
16
+ return collection?.schemaType ?? "Article";
17
+ }
18
+ function buildJsonLd(schemaType, cfg, doc, canonicalUrl, ogImageUrl) {
19
+ const base = {
20
+ "@context": "https://schema.org",
21
+ "@type": schemaType,
22
+ mainEntityOfPage: canonicalUrl,
23
+ image: ogImageUrl,
24
+ };
25
+ if (schemaType === "WebPage") {
26
+ return { ...base, name: doc.title };
27
+ }
28
+ return {
29
+ ...base,
30
+ headline: doc.title,
31
+ author: { "@type": "Person", name: cfg.site.authorName },
32
+ datePublished: doc.datePublished,
33
+ };
34
+ }
14
35
  export function renderPageHtml(cfg, doc) {
15
36
  const canonicalUrl = joinUrl(cfg.site.canonicalBase, doc.routePath);
16
37
  const ogImageUrl = doc.coverImage.startsWith("http")
@@ -18,15 +39,9 @@ export function renderPageHtml(cfg, doc) {
18
39
  : joinUrl(cfg.site.canonicalBase, doc.coverImage);
19
40
  const title = `${doc.title} - ${cfg.site.siteName}`;
20
41
  const description = doc.excerpt;
21
- const jsonLd = {
22
- "@context": "https://schema.org",
23
- "@type": "Article",
24
- headline: doc.title,
25
- author: { "@type": "Person", name: cfg.site.authorName },
26
- datePublished: doc.datePublished,
27
- image: ogImageUrl,
28
- mainEntityOfPage: canonicalUrl,
29
- };
42
+ const schemaType = resolveSchemaType(cfg, doc);
43
+ const ogType = schemaType === "WebPage" ? "website" : "article";
44
+ const jsonLd = buildJsonLd(schemaType, cfg, doc, canonicalUrl, ogImageUrl);
30
45
  // NOTE: doc.htmlContent is already HTML from markdown-it.
31
46
  // We trust it as generated output, not user-injected raw HTML (markdown-it html:false).
32
47
  const html = `<!doctype html>
@@ -39,7 +54,7 @@ export function renderPageHtml(cfg, doc) {
39
54
  <meta name="description" content="${escapeHtml(description)}">
40
55
  <link rel="canonical" href="${escapeHtml(canonicalUrl)}">
41
56
 
42
- <meta property="og:type" content="article">
57
+ <meta property="og:type" content="${ogType}">
43
58
  <meta property="og:title" content="${escapeHtml(doc.title)}">
44
59
  <meta property="og:description" content="${escapeHtml(description)}">
45
60
  <meta property="og:image" content="${escapeHtml(ogImageUrl)}">
@@ -1 +1 @@
1
- {"version":3,"file":"renderHtml.js","sourceRoot":"","sources":["../../src/core/renderHtml.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"renderHtml.js","sourceRoot":"","sources":["../../src/core/renderHtml.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ export type ValidateParams = {
2
+ html: string;
3
+ outFile: string;
4
+ routePath: string;
5
+ /** Source markdown file path; included in error context when provided */
6
+ sourcePath?: string;
7
+ /**
8
+ * Allowed JSON-LD @type values. Default allows Article, BlogPosting, WebPage.
9
+ * Add types (e.g. FAQPage, Organization) if your renderer emits them.
10
+ */
11
+ allowedJsonLdTypes?: string[];
12
+ };
13
+ export type ContractCheckResult = {
14
+ ok: boolean;
15
+ missing: string[];
16
+ };
17
+ /**
18
+ * Runs the same contract checks as validatePrerenderHtml but returns a result instead of throwing.
19
+ * Used by verify --prod to report whether production HTML satisfies the bot contract.
20
+ */
21
+ export declare function checkPrerenderContract(html: string, options?: {
22
+ routePath?: string;
23
+ outFile?: string;
24
+ sourcePath?: string;
25
+ allowedJsonLdTypes?: string[];
26
+ }): ContractCheckResult;
27
+ export declare function validatePrerenderHtml(params: ValidateParams): void;
28
+ //# sourceMappingURL=validateOutput.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validateOutput.d.ts","sourceRoot":"","sources":["../../src/core/validateOutput.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,yEAAyE;IACzE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC/B,CAAC;AA2MF,MAAM,MAAM,mBAAmB,GAAG;IAChC,EAAE,EAAE,OAAO,CAAC;IACZ,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB,CAAC;AAEF;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;IACP,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B,GACL,mBAAmB,CAKrB;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CA0BlE"}
@@ -1,3 +1,4 @@
1
+ import { renderShieldError } from "../errors.js";
1
2
  const DEFAULT_ALLOWED_JSON_LD_TYPES = ["Article", "BlogPosting", "WebPage"];
2
3
  function hasNonEmptyTitle(html) {
3
4
  const m = html.match(/<title>([\s\S]*?)<\/title>/i);
@@ -177,7 +178,12 @@ export function validatePrerenderHtml(params) {
177
178
  `\nMissing/invalid requirements:\n` +
178
179
  missing.map((m) => `- ${m}`).join("\n") +
179
180
  `\n\nFix the source content or renderer so bots receive complete HTML. Check frontmatter and template (title, excerpt, datePublished, coverImage, slug).`;
180
- throw new Error(msg);
181
+ throw renderShieldError("VALIDATION_FAILED", msg, {
182
+ routePath: params.routePath,
183
+ outFile: params.outFile,
184
+ sourcePath: params.sourcePath,
185
+ missing,
186
+ });
181
187
  }
182
188
  }
183
189
  /** Shared contract checks; returns missing list. validatePrerenderHtml throws when missing.length > 0. */
@@ -1 +1 @@
1
- {"version":3,"file":"validateOutput.js","sourceRoot":"","sources":["../../src/core/validateOutput.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validateOutput.js","sourceRoot":"","sources":["../../src/core/validateOutput.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Stable error codes for programmatic consumers and CI integrations.
3
+ */
4
+ export type RenderShieldErrorCode = "CONFIG_MISSING" | "CONFIG_INVALID" | "OUTPUT_PATH_UNSAFE" | "CONTENT_INVALID" | "BUILD_FAILED" | "VALIDATION_FAILED" | "VERIFY_FAILED" | "CLI_INVALID_ARGS";
5
+ export declare class RenderShieldError extends Error {
6
+ readonly code: RenderShieldErrorCode;
7
+ readonly details?: Record<string, unknown>;
8
+ constructor(code: RenderShieldErrorCode, message: string, details?: Record<string, unknown>);
9
+ }
10
+ export declare function isRenderShieldError(err: unknown): err is RenderShieldError;
11
+ export declare function renderShieldError(code: RenderShieldErrorCode, message: string, details?: Record<string, unknown>): RenderShieldError;
12
+ /** Format an error for CLI output; includes code when available. */
13
+ export declare function formatCliError(err: unknown): string;
14
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAC7B,gBAAgB,GAChB,gBAAgB,GAChB,oBAAoB,GACpB,iBAAiB,GACjB,cAAc,GACd,mBAAmB,GACnB,eAAe,GACf,kBAAkB,CAAC;AAEvB,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,QAAQ,CAAC,IAAI,EAAE,qBAAqB,CAAC;IACrC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBAGzC,IAAI,EAAE,qBAAqB,EAC3B,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAOpC;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,iBAAiB,CAE1E;AAED,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,qBAAqB,EAC3B,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,iBAAiB,CAEnB;AAED,oEAAoE;AACpE,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAKnD"}
package/dist/errors.js ADDED
@@ -0,0 +1,24 @@
1
+ export class RenderShieldError extends Error {
2
+ code;
3
+ details;
4
+ constructor(code, message, details) {
5
+ super(message);
6
+ this.name = "RenderShieldError";
7
+ this.code = code;
8
+ this.details = details;
9
+ }
10
+ }
11
+ export function isRenderShieldError(err) {
12
+ return err instanceof RenderShieldError;
13
+ }
14
+ export function renderShieldError(code, message, details) {
15
+ return new RenderShieldError(code, message, details);
16
+ }
17
+ /** Format an error for CLI output; includes code when available. */
18
+ export function formatCliError(err) {
19
+ if (isRenderShieldError(err)) {
20
+ return `[${err.code}] ${err.message}`;
21
+ }
22
+ return err instanceof Error ? err.message : String(err);
23
+ }
24
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAaA,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IACjC,IAAI,CAAwB;IAC5B,OAAO,CAA2B;IAE3C,YACE,IAA2B,EAC3B,OAAe,EACf,OAAiC;QAEjC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;QAChC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;CACF;AAED,MAAM,UAAU,mBAAmB,CAAC,GAAY;IAC9C,OAAO,GAAG,YAAY,iBAAiB,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,IAA2B,EAC3B,OAAe,EACf,OAAiC;IAEjC,OAAO,IAAI,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AACvD,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,cAAc,CAAC,GAAY;IACzC,IAAI,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7B,OAAO,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC;IACxC,CAAC;IACD,OAAO,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC1D,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * RenderShield programmatic API.
3
+ *
4
+ * CLI usage: `npx rendershield <command>`
5
+ * Library usage: import commands and core helpers from `@lownoise-studio/rendershield`.
6
+ */
7
+ export { cmdInit } from "./commands/init.js";
8
+ export { cmdBuild } from "./commands/build.js";
9
+ export { cmdVerify, type VerifyProdOptions, type VerifyLocalResult, type VerifyProdResult, type VerifyResult, } from "./commands/verify.js";
10
+ export { loadConfig } from "./core/loadConfig.js";
11
+ export { loadAllMarkdownDocs } from "./core/loadMarkdown.js";
12
+ export { renderPageHtml } from "./core/renderHtml.js";
13
+ export { validatePrerenderHtml, checkPrerenderContract, type ValidateParams, type ContractCheckResult, } from "./core/validateOutput.js";
14
+ export { generateSitemapXml } from "./core/generateSitemap.js";
15
+ export { generateRobotsTxt } from "./core/generateRobots.js";
16
+ export { generateWorkerJs } from "./core/generateWorker.js";
17
+ export type { RenderShieldConfig, MarkdownDoc, SchemaType } from "./types.js";
18
+ export { SCHEMA_TYPES } from "./types.js";
19
+ export { RenderShieldError, isRenderShieldError, renderShieldError, formatCliError, type RenderShieldErrorCode, } from "./errors.js";
20
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EACL,SAAS,EACT,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,YAAY,GAClB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,KAAK,cAAc,EACnB,KAAK,mBAAmB,GACzB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,YAAY,EAAE,kBAAkB,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,EACjB,cAAc,EACd,KAAK,qBAAqB,GAC3B,MAAM,aAAa,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,19 @@
1
+ /**
2
+ * RenderShield programmatic API.
3
+ *
4
+ * CLI usage: `npx rendershield <command>`
5
+ * Library usage: import commands and core helpers from `@lownoise-studio/rendershield`.
6
+ */
7
+ export { cmdInit } from "./commands/init.js";
8
+ export { cmdBuild } from "./commands/build.js";
9
+ export { cmdVerify, } from "./commands/verify.js";
10
+ export { loadConfig } from "./core/loadConfig.js";
11
+ export { loadAllMarkdownDocs } from "./core/loadMarkdown.js";
12
+ export { renderPageHtml } from "./core/renderHtml.js";
13
+ export { validatePrerenderHtml, checkPrerenderContract, } from "./core/validateOutput.js";
14
+ export { generateSitemapXml } from "./core/generateSitemap.js";
15
+ export { generateRobotsTxt } from "./core/generateRobots.js";
16
+ export { generateWorkerJs } from "./core/generateWorker.js";
17
+ export { SCHEMA_TYPES } from "./types.js";
18
+ export { RenderShieldError, isRenderShieldError, renderShieldError, formatCliError, } from "./errors.js";
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EACL,SAAS,GAKV,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GAGvB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAG5D,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,EACjB,cAAc,GAEf,MAAM,aAAa,CAAC"}
@@ -0,0 +1,53 @@
1
+ export declare const SCHEMA_TYPES: readonly ["Article", "BlogPosting", "WebPage"];
2
+ export type SchemaType = (typeof SCHEMA_TYPES)[number];
3
+ export type RenderShieldConfig = {
4
+ version: 1;
5
+ site: {
6
+ canonicalBase: string;
7
+ siteName: string;
8
+ defaultOgImage: string;
9
+ authorName: string;
10
+ };
11
+ content: {
12
+ markdown: {
13
+ baseDir: string;
14
+ collections: Array<{
15
+ name: string;
16
+ pattern: string;
17
+ routeBase: string;
18
+ schemaType: SchemaType;
19
+ }>;
20
+ };
21
+ };
22
+ output: {
23
+ outDir: string;
24
+ prettyHtml: boolean;
25
+ };
26
+ sitemap: {
27
+ enabled: boolean;
28
+ path: string;
29
+ };
30
+ robots: {
31
+ enabled: boolean;
32
+ path: string;
33
+ };
34
+ worker: {
35
+ enabled: boolean;
36
+ lovableOrigin: string;
37
+ rewriteRouteBases: string[];
38
+ botUserAgentPatterns: string[];
39
+ debugHeaders: boolean;
40
+ };
41
+ };
42
+ export type MarkdownDoc = {
43
+ sourcePath: string;
44
+ collection: string;
45
+ routePath: string;
46
+ title: string;
47
+ excerpt: string;
48
+ datePublished: string;
49
+ coverImage: string;
50
+ slug: string;
51
+ htmlContent: string;
52
+ };
53
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY,gDAAiD,CAAC;AAC3E,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;AAEvD,MAAM,MAAM,kBAAkB,GAAG;IAC7B,OAAO,EAAE,CAAC,CAAC;IACX,IAAI,EAAE;QACJ,aAAa,EAAE,MAAM,CAAC;QACtB,QAAQ,EAAE,MAAM,CAAC;QACjB,cAAc,EAAE,MAAM,CAAC;QACvB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,OAAO,EAAE;QACP,QAAQ,EAAE;YACR,OAAO,EAAE,MAAM,CAAC;YAChB,WAAW,EAAE,KAAK,CAAC;gBACjB,IAAI,EAAE,MAAM,CAAC;gBACb,OAAO,EAAE,MAAM,CAAC;gBAChB,SAAS,EAAE,MAAM,CAAC;gBAClB,UAAU,EAAE,UAAU,CAAC;aACxB,CAAC,CAAC;SACJ,CAAC;KACH,CAAC;IACF,MAAM,EAAE;QACN,MAAM,EAAE,MAAM,CAAC;QACf,UAAU,EAAE,OAAO,CAAC;KACrB,CAAC;IACF,OAAO,EAAE;QACP,OAAO,EAAE,OAAO,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,MAAM,EAAE;QACN,OAAO,EAAE,OAAO,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,MAAM,EAAE;QACN,OAAO,EAAE,OAAO,CAAC;QACjB,aAAa,EAAE,MAAM,CAAC;QACtB,iBAAiB,EAAE,MAAM,EAAE,CAAC;QAC5B,oBAAoB,EAAE,MAAM,EAAE,CAAC;QAC/B,YAAY,EAAE,OAAO,CAAC;KACvB,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC"}
package/dist/types.js CHANGED
@@ -1,2 +1,2 @@
1
- export {};
1
+ export const SCHEMA_TYPES = ["Article", "BlogPosting", "WebPage"];
2
2
  //# sourceMappingURL=types.js.map
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,SAAS,EAAE,aAAa,EAAE,SAAS,CAAU,CAAC"}