puredocs_v2 1.0.0 → 1.0.1

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/server.cjs CHANGED
@@ -5,7 +5,7 @@ const path = require("node:path");
5
5
  const node_url = require("node:url");
6
6
  var _documentCurrentScript = typeof document !== "undefined" ? document.currentScript : null;
7
7
  const currentDir = typeof __dirname === "string" ? __dirname : path.dirname(node_url.fileURLToPath(typeof document === "undefined" ? require("url").pathToFileURL(__filename).href : _documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === "SCRIPT" && _documentCurrentScript.src || new URL("server.cjs", document.baseURI).href));
8
- const cssPath = path.resolve(currentDir, "puredocs.css");
8
+ const cssPath = path.resolve(currentDir, "puredocs_v2.css");
9
9
  const umdPath = path.resolve(currentDir, "puredocs.umd.js");
10
10
  let inlineAssetsCache = null;
11
11
  function getInlineAssets() {
@@ -1 +1 @@
1
- {"version":3,"file":"server.cjs","sources":["../src/server.ts"],"sourcesContent":["import { readFileSync } from 'node:fs';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nexport interface PureDocsOptions {\n specUrl?: string;\n spec?: Record<string, unknown>;\n title?: string;\n theme?: 'light' | 'dark' | 'auto';\n primaryColor?: string;\n}\n\nexport interface PureDocsRouteOptions extends PureDocsOptions {\n route?: string;\n}\n\nexport interface PureDocsHtmlPayload {\n css: string;\n script: string;\n bootstrapScript: string;\n pageTitle: string;\n}\n\nexport type PureDocsHtmlTemplate = (payload: PureDocsHtmlPayload) => string;\n\ninterface ExpressLikeResponse {\n type?: (value: string) => unknown;\n setHeader?: (name: string, value: string) => unknown;\n send?: (body: string) => unknown;\n end?: (body?: string) => unknown;\n}\n\ninterface ExpressLikeApp {\n get: (path: string, handler: (_req: unknown, res: ExpressLikeResponse) => unknown) => unknown;\n}\n\ninterface FastifyLikeReply {\n type?: (value: string) => FastifyLikeReply;\n header?: (name: string, value: string) => FastifyLikeReply;\n send?: (body: string) => unknown;\n}\n\ninterface FastifyLikeApp {\n get: (path: string, handler: (_request: unknown, reply: FastifyLikeReply) => unknown) => unknown;\n}\n\ninterface PureDocsClientConfig {\n specUrl?: string;\n spec?: Record<string, unknown>;\n title?: string;\n theme?: 'light' | 'dark' | 'auto';\n primaryColor?: string;\n}\n\ninterface InlineAssets {\n css: string;\n umd: string;\n}\n\nconst currentDir = typeof __dirname === 'string'\n ? __dirname\n : path.dirname(fileURLToPath(import.meta.url));\n\nconst cssPath = path.resolve(currentDir, 'puredocs.css');\nconst umdPath = path.resolve(currentDir, 'puredocs.umd.js');\n\nlet inlineAssetsCache: InlineAssets | null = null;\n\nfunction getInlineAssets(): InlineAssets {\n if (!inlineAssetsCache) {\n const css = readFileSync(cssPath, 'utf8');\n const umd = readFileSync(umdPath, 'utf8');\n\n inlineAssetsCache = {\n css: css.replace(/<\\/style>/gi, '<\\\\/style>'),\n umd: umd.replace(/<\\/script>/gi, '<\\\\/script>'),\n };\n }\n\n return inlineAssetsCache;\n}\n\nfunction toSafeJson(value: unknown): string {\n return JSON.stringify(value)\n .replace(/</g, '\\\\u003c')\n .replace(/>/g, '\\\\u003e')\n .replace(/&/g, '\\\\u0026')\n .replace(/\\u2028/g, '\\\\u2028')\n .replace(/\\u2029/g, '\\\\u2029');\n}\n\nfunction escapeHtml(value: string): string {\n return value\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&#39;');\n}\n\nfunction buildClientConfig(options: PureDocsOptions): PureDocsClientConfig {\n if (!options.specUrl && !options.spec) {\n throw new Error('[PureDocs] pureDocs.html() requires either \"specUrl\" or \"spec\".');\n }\n\n return {\n specUrl: options.specUrl,\n spec: options.spec,\n title: options.title,\n theme: options.theme ?? 'auto',\n primaryColor: options.primaryColor,\n };\n}\n\nfunction sendHtmlResponse(res: ExpressLikeResponse, html: string): unknown {\n if (typeof res.type === 'function') {\n res.type('text/html');\n } else if (typeof res.setHeader === 'function') {\n res.setHeader('content-type', 'text/html; charset=utf-8');\n }\n\n if (typeof res.send === 'function') {\n return res.send(html);\n }\n if (typeof res.end === 'function') {\n return res.end(html);\n }\n\n throw new Error('[PureDocs] Unsupported response object: expected res.send() or res.end().');\n}\n\nfunction resolveRoute(options: PureDocsRouteOptions): string {\n const route = options.route || '/docs';\n return route.startsWith('/') ? route : `/${route}`;\n}\n\nexport function pureDocsHtml(options: PureDocsOptions, template?: PureDocsHtmlTemplate): string {\n const { css, umd } = getInlineAssets();\n const clientConfig = buildClientConfig(options);\n const pageTitle = options.title ? `${options.title} — pureDocs` : 'pureDocs';\n const bootstrapScript = `PureDocs.bootstrap(${toSafeJson(clientConfig)});`;\n\n const payload: PureDocsHtmlPayload = {\n css,\n script: umd,\n bootstrapScript,\n pageTitle,\n };\n\n if (template) {\n return template(payload);\n }\n\n return [\n '<!doctype html>',\n '<html lang=\"en\">',\n '<head>',\n ' <meta charset=\"utf-8\" />',\n ' <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />',\n ` <title>${escapeHtml(pageTitle)}</title>`,\n ` <style>${css}</style>`,\n '</head>',\n '<body>',\n ` <script>${umd}</script>`,\n ` <script>${bootstrapScript}</script>`,\n '</body>',\n '</html>',\n ].join('\\n');\n}\n\nexport function pureDocsExpress(app: ExpressLikeApp, options: PureDocsRouteOptions): string {\n const html = pureDocsHtml(options);\n const route = resolveRoute(options);\n\n app.get(route, (_req, res) => sendHtmlResponse(res, html));\n return html;\n}\n\nexport function pureDocsFastify(app: FastifyLikeApp, options: PureDocsRouteOptions): string {\n const html = pureDocsHtml(options);\n const route = resolveRoute(options);\n\n app.get(route, (_request, reply) => {\n if (typeof reply.type === 'function') {\n reply.type('text/html');\n } else if (typeof reply.header === 'function') {\n reply.header('content-type', 'text/html; charset=utf-8');\n }\n return reply.send ? reply.send(html) : html;\n });\n\n return html;\n}\n\nexport const pureDocs = {\n html: pureDocsHtml,\n express: pureDocsExpress,\n fastify: pureDocsFastify,\n};\n\nexport default pureDocs;\n"],"names":["fileURLToPath","readFileSync"],"mappings":"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"}
1
+ {"version":3,"file":"server.cjs","sources":["../src/server.ts"],"sourcesContent":["import { readFileSync } from 'node:fs';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nexport interface PureDocsOptions {\n specUrl?: string;\n spec?: Record<string, unknown>;\n title?: string;\n theme?: 'light' | 'dark' | 'auto';\n primaryColor?: string;\n}\n\nexport interface PureDocsRouteOptions extends PureDocsOptions {\n route?: string;\n}\n\nexport interface PureDocsHtmlPayload {\n css: string;\n script: string;\n bootstrapScript: string;\n pageTitle: string;\n}\n\nexport type PureDocsHtmlTemplate = (payload: PureDocsHtmlPayload) => string;\n\ninterface ExpressLikeResponse {\n type?: (value: string) => unknown;\n setHeader?: (name: string, value: string) => unknown;\n send?: (body: string) => unknown;\n end?: (body?: string) => unknown;\n}\n\ninterface ExpressLikeApp {\n get: (path: string, handler: (_req: unknown, res: ExpressLikeResponse) => unknown) => unknown;\n}\n\ninterface FastifyLikeReply {\n type?: (value: string) => FastifyLikeReply;\n header?: (name: string, value: string) => FastifyLikeReply;\n send?: (body: string) => unknown;\n}\n\ninterface FastifyLikeApp {\n get: (path: string, handler: (_request: unknown, reply: FastifyLikeReply) => unknown) => unknown;\n}\n\ninterface PureDocsClientConfig {\n specUrl?: string;\n spec?: Record<string, unknown>;\n title?: string;\n theme?: 'light' | 'dark' | 'auto';\n primaryColor?: string;\n}\n\ninterface InlineAssets {\n css: string;\n umd: string;\n}\n\nconst currentDir = typeof __dirname === 'string'\n ? __dirname\n : path.dirname(fileURLToPath(import.meta.url));\n\nconst cssPath = path.resolve(currentDir, 'puredocs_v2.css');\nconst umdPath = path.resolve(currentDir, 'puredocs.umd.js');\n\nlet inlineAssetsCache: InlineAssets | null = null;\n\nfunction getInlineAssets(): InlineAssets {\n if (!inlineAssetsCache) {\n const css = readFileSync(cssPath, 'utf8');\n const umd = readFileSync(umdPath, 'utf8');\n\n inlineAssetsCache = {\n css: css.replace(/<\\/style>/gi, '<\\\\/style>'),\n umd: umd.replace(/<\\/script>/gi, '<\\\\/script>'),\n };\n }\n\n return inlineAssetsCache;\n}\n\nfunction toSafeJson(value: unknown): string {\n return JSON.stringify(value)\n .replace(/</g, '\\\\u003c')\n .replace(/>/g, '\\\\u003e')\n .replace(/&/g, '\\\\u0026')\n .replace(/\\u2028/g, '\\\\u2028')\n .replace(/\\u2029/g, '\\\\u2029');\n}\n\nfunction escapeHtml(value: string): string {\n return value\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&#39;');\n}\n\nfunction buildClientConfig(options: PureDocsOptions): PureDocsClientConfig {\n if (!options.specUrl && !options.spec) {\n throw new Error('[PureDocs] pureDocs.html() requires either \"specUrl\" or \"spec\".');\n }\n\n return {\n specUrl: options.specUrl,\n spec: options.spec,\n title: options.title,\n theme: options.theme ?? 'auto',\n primaryColor: options.primaryColor,\n };\n}\n\nfunction sendHtmlResponse(res: ExpressLikeResponse, html: string): unknown {\n if (typeof res.type === 'function') {\n res.type('text/html');\n } else if (typeof res.setHeader === 'function') {\n res.setHeader('content-type', 'text/html; charset=utf-8');\n }\n\n if (typeof res.send === 'function') {\n return res.send(html);\n }\n if (typeof res.end === 'function') {\n return res.end(html);\n }\n\n throw new Error('[PureDocs] Unsupported response object: expected res.send() or res.end().');\n}\n\nfunction resolveRoute(options: PureDocsRouteOptions): string {\n const route = options.route || '/docs';\n return route.startsWith('/') ? route : `/${route}`;\n}\n\nexport function pureDocsHtml(options: PureDocsOptions, template?: PureDocsHtmlTemplate): string {\n const { css, umd } = getInlineAssets();\n const clientConfig = buildClientConfig(options);\n const pageTitle = options.title ? `${options.title} — pureDocs` : 'pureDocs';\n const bootstrapScript = `PureDocs.bootstrap(${toSafeJson(clientConfig)});`;\n\n const payload: PureDocsHtmlPayload = {\n css,\n script: umd,\n bootstrapScript,\n pageTitle,\n };\n\n if (template) {\n return template(payload);\n }\n\n return [\n '<!doctype html>',\n '<html lang=\"en\">',\n '<head>',\n ' <meta charset=\"utf-8\" />',\n ' <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />',\n ` <title>${escapeHtml(pageTitle)}</title>`,\n ` <style>${css}</style>`,\n '</head>',\n '<body>',\n ` <script>${umd}</script>`,\n ` <script>${bootstrapScript}</script>`,\n '</body>',\n '</html>',\n ].join('\\n');\n}\n\nexport function pureDocsExpress(app: ExpressLikeApp, options: PureDocsRouteOptions): string {\n const html = pureDocsHtml(options);\n const route = resolveRoute(options);\n\n app.get(route, (_req, res) => sendHtmlResponse(res, html));\n return html;\n}\n\nexport function pureDocsFastify(app: FastifyLikeApp, options: PureDocsRouteOptions): string {\n const html = pureDocsHtml(options);\n const route = resolveRoute(options);\n\n app.get(route, (_request, reply) => {\n if (typeof reply.type === 'function') {\n reply.type('text/html');\n } else if (typeof reply.header === 'function') {\n reply.header('content-type', 'text/html; charset=utf-8');\n }\n return reply.send ? reply.send(html) : html;\n });\n\n return html;\n}\n\nexport const pureDocs = {\n html: pureDocsHtml,\n express: pureDocsExpress,\n fastify: pureDocsFastify,\n};\n\nexport default pureDocs;\n"],"names":["fileURLToPath","readFileSync"],"mappings":"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"}
package/dist/server.js CHANGED
@@ -2,7 +2,7 @@ import { readFileSync } from "node:fs";
2
2
  import path from "node:path";
3
3
  import { fileURLToPath } from "node:url";
4
4
  const currentDir = typeof __dirname === "string" ? __dirname : path.dirname(fileURLToPath(import.meta.url));
5
- const cssPath = path.resolve(currentDir, "puredocs.css");
5
+ const cssPath = path.resolve(currentDir, "puredocs_v2.css");
6
6
  const umdPath = path.resolve(currentDir, "puredocs.umd.js");
7
7
  let inlineAssetsCache = null;
8
8
  function getInlineAssets() {
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sources":["../src/server.ts"],"sourcesContent":["import { readFileSync } from 'node:fs';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nexport interface PureDocsOptions {\n specUrl?: string;\n spec?: Record<string, unknown>;\n title?: string;\n theme?: 'light' | 'dark' | 'auto';\n primaryColor?: string;\n}\n\nexport interface PureDocsRouteOptions extends PureDocsOptions {\n route?: string;\n}\n\nexport interface PureDocsHtmlPayload {\n css: string;\n script: string;\n bootstrapScript: string;\n pageTitle: string;\n}\n\nexport type PureDocsHtmlTemplate = (payload: PureDocsHtmlPayload) => string;\n\ninterface ExpressLikeResponse {\n type?: (value: string) => unknown;\n setHeader?: (name: string, value: string) => unknown;\n send?: (body: string) => unknown;\n end?: (body?: string) => unknown;\n}\n\ninterface ExpressLikeApp {\n get: (path: string, handler: (_req: unknown, res: ExpressLikeResponse) => unknown) => unknown;\n}\n\ninterface FastifyLikeReply {\n type?: (value: string) => FastifyLikeReply;\n header?: (name: string, value: string) => FastifyLikeReply;\n send?: (body: string) => unknown;\n}\n\ninterface FastifyLikeApp {\n get: (path: string, handler: (_request: unknown, reply: FastifyLikeReply) => unknown) => unknown;\n}\n\ninterface PureDocsClientConfig {\n specUrl?: string;\n spec?: Record<string, unknown>;\n title?: string;\n theme?: 'light' | 'dark' | 'auto';\n primaryColor?: string;\n}\n\ninterface InlineAssets {\n css: string;\n umd: string;\n}\n\nconst currentDir = typeof __dirname === 'string'\n ? __dirname\n : path.dirname(fileURLToPath(import.meta.url));\n\nconst cssPath = path.resolve(currentDir, 'puredocs.css');\nconst umdPath = path.resolve(currentDir, 'puredocs.umd.js');\n\nlet inlineAssetsCache: InlineAssets | null = null;\n\nfunction getInlineAssets(): InlineAssets {\n if (!inlineAssetsCache) {\n const css = readFileSync(cssPath, 'utf8');\n const umd = readFileSync(umdPath, 'utf8');\n\n inlineAssetsCache = {\n css: css.replace(/<\\/style>/gi, '<\\\\/style>'),\n umd: umd.replace(/<\\/script>/gi, '<\\\\/script>'),\n };\n }\n\n return inlineAssetsCache;\n}\n\nfunction toSafeJson(value: unknown): string {\n return JSON.stringify(value)\n .replace(/</g, '\\\\u003c')\n .replace(/>/g, '\\\\u003e')\n .replace(/&/g, '\\\\u0026')\n .replace(/\\u2028/g, '\\\\u2028')\n .replace(/\\u2029/g, '\\\\u2029');\n}\n\nfunction escapeHtml(value: string): string {\n return value\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&#39;');\n}\n\nfunction buildClientConfig(options: PureDocsOptions): PureDocsClientConfig {\n if (!options.specUrl && !options.spec) {\n throw new Error('[PureDocs] pureDocs.html() requires either \"specUrl\" or \"spec\".');\n }\n\n return {\n specUrl: options.specUrl,\n spec: options.spec,\n title: options.title,\n theme: options.theme ?? 'auto',\n primaryColor: options.primaryColor,\n };\n}\n\nfunction sendHtmlResponse(res: ExpressLikeResponse, html: string): unknown {\n if (typeof res.type === 'function') {\n res.type('text/html');\n } else if (typeof res.setHeader === 'function') {\n res.setHeader('content-type', 'text/html; charset=utf-8');\n }\n\n if (typeof res.send === 'function') {\n return res.send(html);\n }\n if (typeof res.end === 'function') {\n return res.end(html);\n }\n\n throw new Error('[PureDocs] Unsupported response object: expected res.send() or res.end().');\n}\n\nfunction resolveRoute(options: PureDocsRouteOptions): string {\n const route = options.route || '/docs';\n return route.startsWith('/') ? route : `/${route}`;\n}\n\nexport function pureDocsHtml(options: PureDocsOptions, template?: PureDocsHtmlTemplate): string {\n const { css, umd } = getInlineAssets();\n const clientConfig = buildClientConfig(options);\n const pageTitle = options.title ? `${options.title} — pureDocs` : 'pureDocs';\n const bootstrapScript = `PureDocs.bootstrap(${toSafeJson(clientConfig)});`;\n\n const payload: PureDocsHtmlPayload = {\n css,\n script: umd,\n bootstrapScript,\n pageTitle,\n };\n\n if (template) {\n return template(payload);\n }\n\n return [\n '<!doctype html>',\n '<html lang=\"en\">',\n '<head>',\n ' <meta charset=\"utf-8\" />',\n ' <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />',\n ` <title>${escapeHtml(pageTitle)}</title>`,\n ` <style>${css}</style>`,\n '</head>',\n '<body>',\n ` <script>${umd}</script>`,\n ` <script>${bootstrapScript}</script>`,\n '</body>',\n '</html>',\n ].join('\\n');\n}\n\nexport function pureDocsExpress(app: ExpressLikeApp, options: PureDocsRouteOptions): string {\n const html = pureDocsHtml(options);\n const route = resolveRoute(options);\n\n app.get(route, (_req, res) => sendHtmlResponse(res, html));\n return html;\n}\n\nexport function pureDocsFastify(app: FastifyLikeApp, options: PureDocsRouteOptions): string {\n const html = pureDocsHtml(options);\n const route = resolveRoute(options);\n\n app.get(route, (_request, reply) => {\n if (typeof reply.type === 'function') {\n reply.type('text/html');\n } else if (typeof reply.header === 'function') {\n reply.header('content-type', 'text/html; charset=utf-8');\n }\n return reply.send ? reply.send(html) : html;\n });\n\n return html;\n}\n\nexport const pureDocs = {\n html: pureDocsHtml,\n express: pureDocsExpress,\n fastify: pureDocsFastify,\n};\n\nexport default pureDocs;\n"],"names":[],"mappings":";;;AA2DA,MAAM,aAAa,OAAO,cAAc,WACpC,YACA,KAAK,QAAQ,cAAc,YAAY,GAAG,CAAC;AAE/C,MAAM,UAAU,KAAK,QAAQ,YAAY,cAAc;AACvD,MAAM,UAAU,KAAK,QAAQ,YAAY,iBAAiB;AAE1D,IAAI,oBAAyC;AAE7C,SAAS,kBAAgC;AACvC,MAAI,CAAC,mBAAmB;AACtB,UAAM,MAAM,aAAa,SAAS,MAAM;AACxC,UAAM,MAAM,aAAa,SAAS,MAAM;AAExC,wBAAoB;AAAA,MAClB,KAAK,IAAI,QAAQ,eAAe,YAAY;AAAA,MAC5C,KAAK,IAAI,QAAQ,gBAAgB,aAAa;AAAA,IAAA;AAAA,EAElD;AAEA,SAAO;AACT;AAEA,SAAS,WAAW,OAAwB;AAC1C,SAAO,KAAK,UAAU,KAAK,EACxB,QAAQ,MAAM,SAAS,EACvB,QAAQ,MAAM,SAAS,EACvB,QAAQ,MAAM,SAAS,EACvB,QAAQ,WAAW,SAAS,EAC5B,QAAQ,WAAW,SAAS;AACjC;AAEA,SAAS,WAAW,OAAuB;AACzC,SAAO,MACJ,QAAQ,MAAM,OAAO,EACrB,QAAQ,MAAM,MAAM,EACpB,QAAQ,MAAM,MAAM,EACpB,QAAQ,MAAM,QAAQ,EACtB,QAAQ,MAAM,OAAO;AAC1B;AAEA,SAAS,kBAAkB,SAAgD;AACzE,MAAI,CAAC,QAAQ,WAAW,CAAC,QAAQ,MAAM;AACrC,UAAM,IAAI,MAAM,iEAAiE;AAAA,EACnF;AAEA,SAAO;AAAA,IACL,SAAS,QAAQ;AAAA,IACjB,MAAM,QAAQ;AAAA,IACd,OAAO,QAAQ;AAAA,IACf,OAAO,QAAQ,SAAS;AAAA,IACxB,cAAc,QAAQ;AAAA,EAAA;AAE1B;AAEA,SAAS,iBAAiB,KAA0B,MAAuB;AACzE,MAAI,OAAO,IAAI,SAAS,YAAY;AAClC,QAAI,KAAK,WAAW;AAAA,EACtB,WAAW,OAAO,IAAI,cAAc,YAAY;AAC9C,QAAI,UAAU,gBAAgB,0BAA0B;AAAA,EAC1D;AAEA,MAAI,OAAO,IAAI,SAAS,YAAY;AAClC,WAAO,IAAI,KAAK,IAAI;AAAA,EACtB;AACA,MAAI,OAAO,IAAI,QAAQ,YAAY;AACjC,WAAO,IAAI,IAAI,IAAI;AAAA,EACrB;AAEA,QAAM,IAAI,MAAM,2EAA2E;AAC7F;AAEA,SAAS,aAAa,SAAuC;AAC3D,QAAM,QAAQ,QAAQ,SAAS;AAC/B,SAAO,MAAM,WAAW,GAAG,IAAI,QAAQ,IAAI,KAAK;AAClD;AAEO,SAAS,aAAa,SAA0B,UAAyC;AAC9F,QAAM,EAAE,KAAK,IAAA,IAAQ,gBAAA;AACrB,QAAM,eAAe,kBAAkB,OAAO;AAC9C,QAAM,YAAY,QAAQ,QAAQ,GAAG,QAAQ,KAAK,gBAAgB;AAClE,QAAM,kBAAkB,sBAAsB,WAAW,YAAY,CAAC;AAEtE,QAAM,UAA+B;AAAA,IACnC;AAAA,IACA,QAAQ;AAAA,IACR;AAAA,IACA;AAAA,EAAA;AAGF,MAAI,UAAU;AACZ,WAAO,SAAS,OAAO;AAAA,EACzB;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,YAAY,WAAW,SAAS,CAAC;AAAA,IACjC,YAAY,GAAG;AAAA,IACf;AAAA,IACA;AAAA,IACA,aAAa,GAAG;AAAA,IAChB,aAAa,eAAe;AAAA,IAC5B;AAAA,IACA;AAAA,EAAA,EACA,KAAK,IAAI;AACb;AAEO,SAAS,gBAAgB,KAAqB,SAAuC;AAC1F,QAAM,OAAO,aAAa,OAAO;AACjC,QAAM,QAAQ,aAAa,OAAO;AAElC,MAAI,IAAI,OAAO,CAAC,MAAM,QAAQ,iBAAiB,KAAK,IAAI,CAAC;AACzD,SAAO;AACT;AAEO,SAAS,gBAAgB,KAAqB,SAAuC;AAC1F,QAAM,OAAO,aAAa,OAAO;AACjC,QAAM,QAAQ,aAAa,OAAO;AAElC,MAAI,IAAI,OAAO,CAAC,UAAU,UAAU;AAClC,QAAI,OAAO,MAAM,SAAS,YAAY;AACpC,YAAM,KAAK,WAAW;AAAA,IACxB,WAAW,OAAO,MAAM,WAAW,YAAY;AAC7C,YAAM,OAAO,gBAAgB,0BAA0B;AAAA,IACzD;AACA,WAAO,MAAM,OAAO,MAAM,KAAK,IAAI,IAAI;AAAA,EACzC,CAAC;AAED,SAAO;AACT;AAEO,MAAM,WAAW;AAAA,EACtB,MAAM;AAAA,EACN,SAAS;AAAA,EACT,SAAS;AACX;"}
1
+ {"version":3,"file":"server.js","sources":["../src/server.ts"],"sourcesContent":["import { readFileSync } from 'node:fs';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nexport interface PureDocsOptions {\n specUrl?: string;\n spec?: Record<string, unknown>;\n title?: string;\n theme?: 'light' | 'dark' | 'auto';\n primaryColor?: string;\n}\n\nexport interface PureDocsRouteOptions extends PureDocsOptions {\n route?: string;\n}\n\nexport interface PureDocsHtmlPayload {\n css: string;\n script: string;\n bootstrapScript: string;\n pageTitle: string;\n}\n\nexport type PureDocsHtmlTemplate = (payload: PureDocsHtmlPayload) => string;\n\ninterface ExpressLikeResponse {\n type?: (value: string) => unknown;\n setHeader?: (name: string, value: string) => unknown;\n send?: (body: string) => unknown;\n end?: (body?: string) => unknown;\n}\n\ninterface ExpressLikeApp {\n get: (path: string, handler: (_req: unknown, res: ExpressLikeResponse) => unknown) => unknown;\n}\n\ninterface FastifyLikeReply {\n type?: (value: string) => FastifyLikeReply;\n header?: (name: string, value: string) => FastifyLikeReply;\n send?: (body: string) => unknown;\n}\n\ninterface FastifyLikeApp {\n get: (path: string, handler: (_request: unknown, reply: FastifyLikeReply) => unknown) => unknown;\n}\n\ninterface PureDocsClientConfig {\n specUrl?: string;\n spec?: Record<string, unknown>;\n title?: string;\n theme?: 'light' | 'dark' | 'auto';\n primaryColor?: string;\n}\n\ninterface InlineAssets {\n css: string;\n umd: string;\n}\n\nconst currentDir = typeof __dirname === 'string'\n ? __dirname\n : path.dirname(fileURLToPath(import.meta.url));\n\nconst cssPath = path.resolve(currentDir, 'puredocs_v2.css');\nconst umdPath = path.resolve(currentDir, 'puredocs.umd.js');\n\nlet inlineAssetsCache: InlineAssets | null = null;\n\nfunction getInlineAssets(): InlineAssets {\n if (!inlineAssetsCache) {\n const css = readFileSync(cssPath, 'utf8');\n const umd = readFileSync(umdPath, 'utf8');\n\n inlineAssetsCache = {\n css: css.replace(/<\\/style>/gi, '<\\\\/style>'),\n umd: umd.replace(/<\\/script>/gi, '<\\\\/script>'),\n };\n }\n\n return inlineAssetsCache;\n}\n\nfunction toSafeJson(value: unknown): string {\n return JSON.stringify(value)\n .replace(/</g, '\\\\u003c')\n .replace(/>/g, '\\\\u003e')\n .replace(/&/g, '\\\\u0026')\n .replace(/\\u2028/g, '\\\\u2028')\n .replace(/\\u2029/g, '\\\\u2029');\n}\n\nfunction escapeHtml(value: string): string {\n return value\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&#39;');\n}\n\nfunction buildClientConfig(options: PureDocsOptions): PureDocsClientConfig {\n if (!options.specUrl && !options.spec) {\n throw new Error('[PureDocs] pureDocs.html() requires either \"specUrl\" or \"spec\".');\n }\n\n return {\n specUrl: options.specUrl,\n spec: options.spec,\n title: options.title,\n theme: options.theme ?? 'auto',\n primaryColor: options.primaryColor,\n };\n}\n\nfunction sendHtmlResponse(res: ExpressLikeResponse, html: string): unknown {\n if (typeof res.type === 'function') {\n res.type('text/html');\n } else if (typeof res.setHeader === 'function') {\n res.setHeader('content-type', 'text/html; charset=utf-8');\n }\n\n if (typeof res.send === 'function') {\n return res.send(html);\n }\n if (typeof res.end === 'function') {\n return res.end(html);\n }\n\n throw new Error('[PureDocs] Unsupported response object: expected res.send() or res.end().');\n}\n\nfunction resolveRoute(options: PureDocsRouteOptions): string {\n const route = options.route || '/docs';\n return route.startsWith('/') ? route : `/${route}`;\n}\n\nexport function pureDocsHtml(options: PureDocsOptions, template?: PureDocsHtmlTemplate): string {\n const { css, umd } = getInlineAssets();\n const clientConfig = buildClientConfig(options);\n const pageTitle = options.title ? `${options.title} — pureDocs` : 'pureDocs';\n const bootstrapScript = `PureDocs.bootstrap(${toSafeJson(clientConfig)});`;\n\n const payload: PureDocsHtmlPayload = {\n css,\n script: umd,\n bootstrapScript,\n pageTitle,\n };\n\n if (template) {\n return template(payload);\n }\n\n return [\n '<!doctype html>',\n '<html lang=\"en\">',\n '<head>',\n ' <meta charset=\"utf-8\" />',\n ' <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />',\n ` <title>${escapeHtml(pageTitle)}</title>`,\n ` <style>${css}</style>`,\n '</head>',\n '<body>',\n ` <script>${umd}</script>`,\n ` <script>${bootstrapScript}</script>`,\n '</body>',\n '</html>',\n ].join('\\n');\n}\n\nexport function pureDocsExpress(app: ExpressLikeApp, options: PureDocsRouteOptions): string {\n const html = pureDocsHtml(options);\n const route = resolveRoute(options);\n\n app.get(route, (_req, res) => sendHtmlResponse(res, html));\n return html;\n}\n\nexport function pureDocsFastify(app: FastifyLikeApp, options: PureDocsRouteOptions): string {\n const html = pureDocsHtml(options);\n const route = resolveRoute(options);\n\n app.get(route, (_request, reply) => {\n if (typeof reply.type === 'function') {\n reply.type('text/html');\n } else if (typeof reply.header === 'function') {\n reply.header('content-type', 'text/html; charset=utf-8');\n }\n return reply.send ? reply.send(html) : html;\n });\n\n return html;\n}\n\nexport const pureDocs = {\n html: pureDocsHtml,\n express: pureDocsExpress,\n fastify: pureDocsFastify,\n};\n\nexport default pureDocs;\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "puredocs_v2",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "description": "Beautiful API documentation portal from any OpenAPI 3.1 spec. One-liner for Express & Fastify. Standard Web Component for everything else.",
5
5
  "author": "esurkov1",
6
6
  "license": "SEE LICENSE IN LICENSE",
@@ -49,10 +49,10 @@
49
49
  "import": "./dist/puredocs.js",
50
50
  "require": "./dist/puredocs.cjs"
51
51
  },
52
- "./style.css": "./dist/puredocs.css"
52
+ "./style.css": "./dist/puredocs_v2.css"
53
53
  },
54
54
  "sideEffects": [
55
- "./dist/puredocs.css",
55
+ "./dist/puredocs_v2.css",
56
56
  "./dist/puredocs.js",
57
57
  "./dist/puredocs.umd.js"
58
58
  ],
@@ -65,17 +65,24 @@
65
65
  "dev": "vite",
66
66
  "build": "vite build && vite build -c vite.server.config.ts && tsc --emitDeclarationOnly",
67
67
  "preview": "vite preview",
68
- "typecheck": "tsc --noEmit"
68
+ "typecheck": "tsc --noEmit",
69
+ "test": "vitest run",
70
+ "test:watch": "vitest"
69
71
  },
70
72
  "dependencies": {
71
73
  "js-yaml": "^4.1.0"
72
74
  },
73
75
  "devDependencies": {
76
+ "@types/express": "^4.17.21",
74
77
  "@types/js-yaml": "^4.0.9",
75
78
  "@types/node": "^22.13.10",
79
+ "express": "^4.21.0",
80
+ "fastify": "^5.1.0",
81
+ "supertest": "^7.0.0",
76
82
  "typescript": "^5.7.0",
77
83
  "vite": "^6.1.0",
78
- "vite-plugin-dts": "^4.5.0"
84
+ "vite-plugin-dts": "^4.5.0",
85
+ "vitest": "^2.1.0"
79
86
  },
80
87
  "engines": {
81
88
  "node": ">=18",
File without changes