@lownoise-studio/rendershield 0.3.1 → 1.1.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 (87) hide show
  1. package/CHANGELOG.md +73 -32
  2. package/CONTRIBUTING.md +41 -0
  3. package/README.md +227 -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 +39 -26
  8. package/dist/cli.js.map +1 -1
  9. package/dist/cliArgs.d.ts +8 -0
  10. package/dist/cliArgs.d.ts.map +1 -0
  11. package/dist/cliArgs.js +56 -0
  12. package/dist/cliArgs.js.map +1 -0
  13. package/dist/commands/build.d.ts +3 -0
  14. package/dist/commands/build.d.ts.map +1 -0
  15. package/dist/commands/build.js +12 -11
  16. package/dist/commands/build.js.map +1 -1
  17. package/dist/commands/init.d.ts +3 -0
  18. package/dist/commands/init.d.ts.map +1 -0
  19. package/dist/commands/init.js +8 -7
  20. package/dist/commands/init.js.map +1 -1
  21. package/dist/commands/verify.d.ts +33 -0
  22. package/dist/commands/verify.d.ts.map +1 -0
  23. package/dist/commands/verify.js +202 -117
  24. package/dist/commands/verify.js.map +1 -1
  25. package/dist/configPath.d.ts +7 -0
  26. package/dist/configPath.d.ts.map +1 -0
  27. package/dist/configPath.js +8 -0
  28. package/dist/configPath.js.map +1 -0
  29. package/dist/core/generateRobots.d.ts +3 -0
  30. package/dist/core/generateRobots.d.ts.map +1 -0
  31. package/dist/core/generateSitemap.d.ts +3 -0
  32. package/dist/core/generateSitemap.d.ts.map +1 -0
  33. package/dist/core/generateWorker.d.ts +3 -0
  34. package/dist/core/generateWorker.d.ts.map +1 -0
  35. package/dist/core/generateWorker.js +75 -75
  36. package/dist/core/generateWorker.js.map +1 -1
  37. package/dist/core/listOutputRoutes.d.ts +4 -0
  38. package/dist/core/listOutputRoutes.d.ts.map +1 -0
  39. package/dist/core/listOutputRoutes.js +40 -0
  40. package/dist/core/listOutputRoutes.js.map +1 -0
  41. package/dist/core/loadConfig.d.ts +5 -0
  42. package/dist/core/loadConfig.d.ts.map +1 -0
  43. package/dist/core/loadConfig.js +108 -58
  44. package/dist/core/loadConfig.js.map +1 -1
  45. package/dist/core/loadMarkdown.d.ts +3 -0
  46. package/dist/core/loadMarkdown.d.ts.map +1 -0
  47. package/dist/core/loadMarkdown.js +4 -3
  48. package/dist/core/loadMarkdown.js.map +1 -1
  49. package/dist/core/renderHtml.d.ts +3 -0
  50. package/dist/core/renderHtml.d.ts.map +1 -0
  51. package/dist/core/renderHtml.js +25 -10
  52. package/dist/core/renderHtml.js.map +1 -1
  53. package/dist/core/validateOutput.d.ts +28 -0
  54. package/dist/core/validateOutput.d.ts.map +1 -0
  55. package/dist/core/validateOutput.js +7 -1
  56. package/dist/core/validateOutput.js.map +1 -1
  57. package/dist/errors.d.ts +14 -0
  58. package/dist/errors.d.ts.map +1 -0
  59. package/dist/errors.js +24 -0
  60. package/dist/errors.js.map +1 -0
  61. package/dist/index.d.ts +22 -0
  62. package/dist/index.d.ts.map +1 -0
  63. package/dist/index.js +20 -0
  64. package/dist/index.js.map +1 -0
  65. package/dist/types.d.ts +53 -0
  66. package/dist/types.d.ts.map +1 -0
  67. package/dist/types.js +1 -1
  68. package/dist/types.js.map +1 -1
  69. package/docs/CONFIG.md +70 -0
  70. package/docs/deploy-cloudflare.md +40 -14
  71. package/package.json +25 -2
  72. package/rendershield.config.schema.json +100 -0
  73. package/src/cli.ts +96 -75
  74. package/src/cliArgs.ts +71 -0
  75. package/src/commands/build.ts +200 -185
  76. package/src/commands/init.ts +8 -8
  77. package/src/commands/verify.ts +451 -236
  78. package/src/configPath.ts +17 -0
  79. package/src/core/generateWorker.ts +97 -97
  80. package/src/core/listOutputRoutes.ts +51 -0
  81. package/src/core/loadConfig.ts +282 -173
  82. package/src/core/loadMarkdown.ts +9 -3
  83. package/src/core/renderHtml.ts +36 -12
  84. package/src/core/validateOutput.ts +335 -328
  85. package/src/errors.ts +48 -0
  86. package/src/index.ts +43 -0
  87. package/src/types.ts +5 -2
package/src/errors.ts ADDED
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Stable error codes for programmatic consumers and CI integrations.
3
+ */
4
+ export type RenderShieldErrorCode =
5
+ | "CONFIG_MISSING"
6
+ | "CONFIG_INVALID"
7
+ | "OUTPUT_PATH_UNSAFE"
8
+ | "CONTENT_INVALID"
9
+ | "BUILD_FAILED"
10
+ | "VALIDATION_FAILED"
11
+ | "VERIFY_FAILED"
12
+ | "CLI_INVALID_ARGS";
13
+
14
+ export class RenderShieldError extends Error {
15
+ readonly code: RenderShieldErrorCode;
16
+ readonly details?: Record<string, unknown>;
17
+
18
+ constructor(
19
+ code: RenderShieldErrorCode,
20
+ message: string,
21
+ details?: Record<string, unknown>
22
+ ) {
23
+ super(message);
24
+ this.name = "RenderShieldError";
25
+ this.code = code;
26
+ this.details = details;
27
+ }
28
+ }
29
+
30
+ export function isRenderShieldError(err: unknown): err is RenderShieldError {
31
+ return err instanceof RenderShieldError;
32
+ }
33
+
34
+ export function renderShieldError(
35
+ code: RenderShieldErrorCode,
36
+ message: string,
37
+ details?: Record<string, unknown>
38
+ ): RenderShieldError {
39
+ return new RenderShieldError(code, message, details);
40
+ }
41
+
42
+ /** Format an error for CLI output; includes code when available. */
43
+ export function formatCliError(err: unknown): string {
44
+ if (isRenderShieldError(err)) {
45
+ return `[${err.code}] ${err.message}`;
46
+ }
47
+ return err instanceof Error ? err.message : String(err);
48
+ }
package/src/index.ts ADDED
@@ -0,0 +1,43 @@
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
+
8
+ export { cmdInit } from "./commands/init.js";
9
+ export { cmdBuild } from "./commands/build.js";
10
+ export {
11
+ cmdVerify,
12
+ type VerifyOptions,
13
+ type VerifyLocalResult,
14
+ type VerifyProdResult,
15
+ type VerifyResult,
16
+ type VerifyPageResult,
17
+ } from "./commands/verify.js";
18
+
19
+ export { loadConfig } from "./core/loadConfig.js";
20
+ export { loadAllMarkdownDocs } from "./core/loadMarkdown.js";
21
+ export { renderPageHtml } from "./core/renderHtml.js";
22
+ export {
23
+ validatePrerenderHtml,
24
+ checkPrerenderContract,
25
+ type ValidateParams,
26
+ type ContractCheckResult,
27
+ } from "./core/validateOutput.js";
28
+ export { generateSitemapXml } from "./core/generateSitemap.js";
29
+ export { generateRobotsTxt } from "./core/generateRobots.js";
30
+ export { generateWorkerJs } from "./core/generateWorker.js";
31
+
32
+ export type { CommandOptions } from "./configPath.js";
33
+ export { DEFAULT_CONFIG_NAME, resolveConfigFile } from "./configPath.js";
34
+ export type { RenderShieldConfig, MarkdownDoc, SchemaType } from "./types.js";
35
+ export { SCHEMA_TYPES } from "./types.js";
36
+
37
+ export {
38
+ RenderShieldError,
39
+ isRenderShieldError,
40
+ renderShieldError,
41
+ formatCliError,
42
+ type RenderShieldErrorCode,
43
+ } from "./errors.js";
package/src/types.ts CHANGED
@@ -1,3 +1,6 @@
1
+ export const SCHEMA_TYPES = ["Article", "BlogPosting", "WebPage"] as const;
2
+ export type SchemaType = (typeof SCHEMA_TYPES)[number];
3
+
1
4
  export type RenderShieldConfig = {
2
5
  version: 1;
3
6
  site: {
@@ -13,7 +16,7 @@ export type RenderShieldConfig = {
13
16
  name: string; // blog
14
17
  pattern: string; // blog/**/*.md
15
18
  routeBase: string; // /blog
16
- schemaType: "Article"; // v0 only supports Article
19
+ schemaType: SchemaType;
17
20
  }>;
18
21
  };
19
22
  };
@@ -31,7 +34,7 @@ export type RenderShieldConfig = {
31
34
  };
32
35
  worker: {
33
36
  enabled: boolean;
34
- lovableOrigin: string; // https://YOUR_SITE.lovable.app
37
+ spaOrigin: string; // https://app.example.com — human SPA / hosting origin
35
38
  rewriteRouteBases: string[]; // ["/blog/"]
36
39
  botUserAgentPatterns: string[];
37
40
  debugHeaders: boolean;