@asymmetric-effort/specifyjs 0.2.15 → 0.2.16

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.
@@ -1,2 +1,2 @@
1
- "use strict";var n=require("fs"),e=require("path");function t(n){let e=n,t="";for(let n=0;n<10&&e!==t;n++)t=e,e=e.replace(/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script\s*>/gi,""),e=e.replace(/<button\b[^>]*>([\s\S]*?)<\/button\s*>/gi,"$1"),e=e.replace(/<input\b[^>]*\/?>/gi,""),e=e.replace(/<select\b[^<]*(?:(?!<\/select>)<[^<]*)*<\/select\s*>/gi,""),e=e.replace(/<textarea\b[^<]*(?:(?!<\/textarea>)<[^<]*)*<\/textarea\s*>/gi,""),e=e.replace(/<\/?form\b[^>]*>/gi,"");return e=e.replace(/\s+on[a-z]+\s*=\s*"[^"]*"/gi,""),e=e.replace(/\s+on[a-z]+\s*=\s*'[^']*'/gi,""),e=e.replace(/\s+style\s*=\s*"[^"]*javascript\s*:[^"]*"/gi,""),e=e.replace(/\s+style\s*=\s*'[^']*javascript\s*:[^']*'/gi,""),e}function o(n){const e=n.classPrefix??"ns",o=n.sections;if(0===o.length)return"";const s=o.map(n=>`<a href="#${n.id}" class="${e}-nav-link">${i(n.title)}</a>`).join("\n "),r=o.map(n=>{const o=t(n.html);return`\n <section id="${n.id}" class="${e}-section">\n <h2 class="${e}-section-title">${i(n.title)}</h2>\n <div class="${e}-section-content">\n ${o}\n </div>\n <p class="${e}-back-to-top"><a href="#${e}-top">Back to top</a></p>\n </section>`}).join("\n"),c=n.title?`<h1 class="${e}-title">${i(n.title)}</h1>`:"",a=n.description?`<p class="${e}-desc">${i(n.description)}</p>`:"",p=n.copyright?`<footer class="${e}-footer"><p>${i(n.copyright)}</p></footer>`:"";return`\n <noscript>\n <style>\n .${e}-container {\n max-width: 900px;\n margin: 0 auto;\n padding: 20px;\n font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;\n line-height: 1.6;\n color: #1f2937;\n }\n .${e}-title {\n font-size: 2rem;\n margin-bottom: 0.5rem;\n color: #0f172a;\n }\n .${e}-desc {\n font-size: 1.1rem;\n color: #64748b;\n margin-bottom: 1.5rem;\n }\n .${e}-nav {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n padding: 12px 0;\n border-bottom: 1px solid #e2e8f0;\n margin-bottom: 2rem;\n position: sticky;\n top: 0;\n background: white;\n z-index: 10;\n }\n .${e}-nav-link {\n padding: 6px 14px;\n border-radius: 6px;\n background: #f1f5f9;\n color: #3b82f6;\n text-decoration: none;\n font-size: 14px;\n font-weight: 500;\n }\n .${e}-nav-link:hover {\n background: #3b82f6;\n color: white;\n }\n .${e}-section {\n margin-bottom: 3rem;\n padding-bottom: 2rem;\n border-bottom: 1px solid #f1f5f9;\n }\n .${e}-section-title {\n font-size: 1.5rem;\n color: #1e293b;\n margin-bottom: 1rem;\n padding-top: 1rem;\n }\n .${e}-section-content h3 {\n font-size: 1.2rem;\n margin-top: 1.5rem;\n color: #334155;\n }\n .${e}-section-content p {\n margin: 0.5rem 0;\n }\n .${e}-section-content pre {\n background: #1e293b;\n color: #e2e8f0;\n padding: 12px 16px;\n border-radius: 6px;\n overflow-x: auto;\n font-size: 13px;\n line-height: 1.5;\n }\n .${e}-section-content code {\n background: #f1f5f9;\n padding: 2px 6px;\n border-radius: 3px;\n font-size: 0.9em;\n }\n .${e}-section-content pre code {\n background: none;\n padding: 0;\n }\n .${e}-section-content table {\n width: 100%;\n border-collapse: collapse;\n margin: 1rem 0;\n }\n .${e}-section-content th,\n .${e}-section-content td {\n padding: 8px 12px;\n border: 1px solid #e2e8f0;\n text-align: left;\n }\n .${e}-section-content th {\n background: #f8fafc;\n font-weight: 600;\n }\n .${e}-section-content img {\n max-width: 100%;\n height: auto;\n }\n .${e}-back-to-top {\n font-size: 13px;\n margin-top: 1.5rem;\n }\n .${e}-back-to-top a {\n color: #3b82f6;\n text-decoration: none;\n }\n .${e}-footer {\n margin-top: 3rem;\n padding-top: 1rem;\n border-top: 1px solid #e2e8f0;\n color: #94a3b8;\n font-size: 13px;\n text-align: center;\n }\n .${e}-js-notice {\n background: #fef3c7;\n border: 1px solid #f59e0b;\n border-radius: 6px;\n padding: 12px 16px;\n margin-bottom: 1.5rem;\n font-size: 14px;\n color: #92400e;\n }\n </style>\n <div id="${e}-top" class="${e}-container">\n ${c}\n ${a}\n <div class="${e}-js-notice">\n This page works best with JavaScript enabled. You are viewing a\n static version of the content.\n </div>\n <nav class="${e}-nav" aria-label="Section navigation">\n ${s}\n </nav>\n ${r}\n ${p}\n </div>\n </noscript>`}function i(n){return n.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}exports.generateNoscriptHtml=o,exports.specifyJsNoscriptPlugin=function(t){return{name:"specifyjs-noscript",closeBundle(){const i=e.resolve(process.cwd(),"dist"),s=e.join(i,"index.html");if(!n.existsSync(s))return void console.warn("[specifyjs-noscript] index.html not found in dist/");const r=o(t);if(!r)return void console.warn("[specifyjs-noscript] No sections provided, skipping.");const c=t.maxContentSize??524288,a=Buffer.byteLength(r,"utf-8");a>c&&console.warn(`[specifyjs-noscript] Noscript content is ${(a/1024).toFixed(0)}KB (limit: ${(c/1024).toFixed(0)}KB). Consider reducing section content.`);let p=n.readFileSync(s,"utf-8");p=p.replace("</body>",`${r}\n</body>`),n.writeFileSync(s,p,"utf-8"),console.log(`Generated: noscript fallback (${t.sections.length} sections, ${(a/1024).toFixed(1)}KB)`)}}},exports.specifyJsSeoPlugin=function(t){return{name:"specifyjs-seo",closeBundle(){const o=e.resolve(process.cwd(),"dist"),i=(new Date).toISOString().split("T")[0]??"",s=[...t.routes??["/"]],r=[];if(t.docsDir&&n.existsSync(t.docsDir)){!function(t,o){const i=[{dir:t,prefix:""}];for(;i.length>0;){const{dir:t,prefix:s}=i.pop(),r=n.readdirSync(t,{withFileTypes:!0});for(const n of r)n.isDirectory()?i.push({dir:e.join(t,n.name),prefix:s+n.name+"/"}):n.name.endsWith(".md")&&o.push(s+n.name.replace(".md",""))}}(t.docsDir,r);for(const n of r)s.push(`/#/docs/${n}`)}const c=function(n,e,t){return['<?xml version="1.0" encoding="UTF-8"?>','<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">',...e.map(e=>` <url><loc>${n}${e}</loc><lastmod>${t}</lastmod></url>`),"</urlset>"].join("\n")}(t.siteUrl,s,i);n.writeFileSync(e.join(o,"sitemap.xml"),c);const a=function(n,e){const t=["User-agent: *","Allow: /"];return e&&t.push(...e),t.push("",`Sitemap: ${n}/sitemap.xml`),t.join("\n")}(t.siteUrl,t.robotsRules);n.writeFileSync(e.join(o,"robots.txt"),a);const p=function(n,e){const t=[`# ${n.title??"Site"}`];if(n.description){t.push("");const e=n.description.split("\n");for(const n of e)t.push(`> ${n}`)}t.push(""),t.push(`## Website: ${n.siteUrl}`),n.repository&&t.push(`## Repository: ${n.repository}`),n.npmPackage&&t.push(`## npm: https://www.npmjs.com/package/${n.npmPackage}`);const o=e.filter(n=>n.startsWith("guides/")).map(n=>n.replace("guides/","")),i=e.filter(n=>n.startsWith("api/")).map(n=>n.replace("api/",""));if(o.length>0){t.push("","## Documentation","");for(const e of o)t.push(`- ${e}: ${n.siteUrl}/#/docs/guides/${e}`)}if(i.length>0){t.push("","## API Reference","");for(const e of i)t.push(`- ${e}: ${n.siteUrl}/#/docs/api/${e}`)}return n.npmPackage&&t.push("","## Install","","```",`npm install ${n.npmPackage}`,"```"),n.license&&t.push("",`## License: ${n.license}`),n.author&&t.push(`## Author: ${n.author}`),t.join("\n")}(t,r);if(n.writeFileSync(e.join(o,"llms.txt"),p),t.jsonLd){const i=e.join(o,"index.html");if(n.existsSync(i)){let e=n.readFileSync(i,"utf-8");const o=(Array.isArray(t.jsonLd)?t.jsonLd:[t.jsonLd]).map(n=>`<script type="application/ld+json">${JSON.stringify(n)}<\/script>`).join("\n ");e=e.replace("</head>",` ${o}\n </head>`),n.writeFileSync(i,e,"utf-8")}}const l=t.jsonLd?", JSON-LD":"";console.log(`Generated: sitemap.xml (${s.length} URLs), robots.txt, llms.txt${l}`)}}},exports.stripInteractiveElements=t;
1
+ "use strict";var n=require("fs"),e=require("path");const t=new Set(["h1","h2","h3","h4","h5","h6","p","br","hr","blockquote","ul","ol","li","dl","dt","dd","table","thead","tbody","tfoot","tr","th","td","caption","a","strong","em","b","i","u","s","code","pre","kbd","samp","span","div","section","article","aside","header","footer","nav","img","figure","figcaption","picture","source","details","summary","mark","small","sub","sup","abbr","time"]),o=new Set(["script","style","textarea","select","noscript","iframe","object","embed","applet"]),i=new Set(["href","src","alt","title","width","height","class","id","name","colspan","rowspan","scope","rel","target","lang","dir","role","aria-label","aria-describedby","aria-hidden","style"]);function s(n){const e=[];let i=0;const s=n.length;for(;i<s;){const s=n.indexOf("<",i);if(-1===s){e.push(n.slice(i));break}s>i&&e.push(n.slice(i,s));const c=n.indexOf(">",s);if(-1===c){e.push(n.slice(s));break}const a=n.slice(s+1,c),p=a.startsWith("/"),l=p?a.slice(1).trim():a.trim(),d=l.search(/[\s/]/),f=(-1===d?l:l.slice(0,d)).toLowerCase();if(t.has(f))if(p)e.push(`</${f}>`);else{const n=r(-1===d?"":l.slice(d)),t=a.trimEnd().endsWith("/")?" /":"";e.push(`<${f}${n}${t}>`)}else if(!p&&o.has(f)){const e=`</${f}`,t=n.toLowerCase().indexOf(e,c+1);if(-1!==t){const e=n.indexOf(">",t);i=-1!==e?e+1:c+1;continue}}i=c+1}return e.join("")}function r(n){const e=[],t=/([a-z][a-z0-9-]*)\s*(?:=\s*(?:"([^"]*)"|'([^']*)'|(\S+)))?/gi;let o;for(;null!==(o=t.exec(n));){const n=o[1].toLowerCase(),t=o[2]??o[3]??o[4]??"";i.has(n)&&(/javascript\s*:/i.test(t)||e.push(` ${n}="${c(t)}"`))}return e.join("")}function c(n){return n.replace(/&/g,"&amp;").replace(/"/g,"&quot;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function a(n){const e=n.classPrefix??"ns",t=n.sections;if(0===t.length)return"";const o=t.map(n=>`<a href="#${n.id}" class="${e}-nav-link">${p(n.title)}</a>`).join("\n "),i=t.map(n=>{const t=s(n.html);return`\n <section id="${n.id}" class="${e}-section">\n <h2 class="${e}-section-title">${p(n.title)}</h2>\n <div class="${e}-section-content">\n ${t}\n </div>\n <p class="${e}-back-to-top"><a href="#${e}-top">Back to top</a></p>\n </section>`}).join("\n"),r=n.title?`<h1 class="${e}-title">${p(n.title)}</h1>`:"",c=n.description?`<p class="${e}-desc">${p(n.description)}</p>`:"",a=n.copyright?`<footer class="${e}-footer"><p>${p(n.copyright)}</p></footer>`:"";return`\n <noscript>\n <style>\n .${e}-container {\n max-width: 900px;\n margin: 0 auto;\n padding: 20px;\n font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;\n line-height: 1.6;\n color: #1f2937;\n }\n .${e}-title {\n font-size: 2rem;\n margin-bottom: 0.5rem;\n color: #0f172a;\n }\n .${e}-desc {\n font-size: 1.1rem;\n color: #64748b;\n margin-bottom: 1.5rem;\n }\n .${e}-nav {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n padding: 12px 0;\n border-bottom: 1px solid #e2e8f0;\n margin-bottom: 2rem;\n position: sticky;\n top: 0;\n background: white;\n z-index: 10;\n }\n .${e}-nav-link {\n padding: 6px 14px;\n border-radius: 6px;\n background: #f1f5f9;\n color: #3b82f6;\n text-decoration: none;\n font-size: 14px;\n font-weight: 500;\n }\n .${e}-nav-link:hover {\n background: #3b82f6;\n color: white;\n }\n .${e}-section {\n margin-bottom: 3rem;\n padding-bottom: 2rem;\n border-bottom: 1px solid #f1f5f9;\n }\n .${e}-section-title {\n font-size: 1.5rem;\n color: #1e293b;\n margin-bottom: 1rem;\n padding-top: 1rem;\n }\n .${e}-section-content h3 {\n font-size: 1.2rem;\n margin-top: 1.5rem;\n color: #334155;\n }\n .${e}-section-content p {\n margin: 0.5rem 0;\n }\n .${e}-section-content pre {\n background: #1e293b;\n color: #e2e8f0;\n padding: 12px 16px;\n border-radius: 6px;\n overflow-x: auto;\n font-size: 13px;\n line-height: 1.5;\n }\n .${e}-section-content code {\n background: #f1f5f9;\n padding: 2px 6px;\n border-radius: 3px;\n font-size: 0.9em;\n }\n .${e}-section-content pre code {\n background: none;\n padding: 0;\n }\n .${e}-section-content table {\n width: 100%;\n border-collapse: collapse;\n margin: 1rem 0;\n }\n .${e}-section-content th,\n .${e}-section-content td {\n padding: 8px 12px;\n border: 1px solid #e2e8f0;\n text-align: left;\n }\n .${e}-section-content th {\n background: #f8fafc;\n font-weight: 600;\n }\n .${e}-section-content img {\n max-width: 100%;\n height: auto;\n }\n .${e}-back-to-top {\n font-size: 13px;\n margin-top: 1.5rem;\n }\n .${e}-back-to-top a {\n color: #3b82f6;\n text-decoration: none;\n }\n .${e}-footer {\n margin-top: 3rem;\n padding-top: 1rem;\n border-top: 1px solid #e2e8f0;\n color: #94a3b8;\n font-size: 13px;\n text-align: center;\n }\n .${e}-js-notice {\n background: #fef3c7;\n border: 1px solid #f59e0b;\n border-radius: 6px;\n padding: 12px 16px;\n margin-bottom: 1.5rem;\n font-size: 14px;\n color: #92400e;\n }\n </style>\n <div id="${e}-top" class="${e}-container">\n ${r}\n ${c}\n <div class="${e}-js-notice">\n This page works best with JavaScript enabled. You are viewing a\n static version of the content.\n </div>\n <nav class="${e}-nav" aria-label="Section navigation">\n ${o}\n </nav>\n ${i}\n ${a}\n </div>\n </noscript>`}function p(n){return n.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}exports.generateNoscriptHtml=a,exports.specifyJsNoscriptPlugin=function(t){return{name:"specifyjs-noscript",closeBundle(){const o=e.resolve(process.cwd(),"dist"),i=e.join(o,"index.html");if(!n.existsSync(i))return void console.warn("[specifyjs-noscript] index.html not found in dist/");const s=a(t);if(!s)return void console.warn("[specifyjs-noscript] No sections provided, skipping.");const r=t.maxContentSize??524288,c=Buffer.byteLength(s,"utf-8");c>r&&console.warn(`[specifyjs-noscript] Noscript content is ${(c/1024).toFixed(0)}KB (limit: ${(r/1024).toFixed(0)}KB). Consider reducing section content.`);let p=n.readFileSync(i,"utf-8");p=p.replace("</body>",`${s}\n</body>`),n.writeFileSync(i,p,"utf-8"),console.log(`Generated: noscript fallback (${t.sections.length} sections, ${(c/1024).toFixed(1)}KB)`)}}},exports.specifyJsSeoPlugin=function(t){return{name:"specifyjs-seo",closeBundle(){const o=e.resolve(process.cwd(),"dist"),i=(new Date).toISOString().split("T")[0]??"",s=[...t.routes??["/"]],r=[];if(t.docsDir&&n.existsSync(t.docsDir)){!function(t,o){const i=[{dir:t,prefix:""}];for(;i.length>0;){const{dir:t,prefix:s}=i.pop(),r=n.readdirSync(t,{withFileTypes:!0});for(const n of r)n.isDirectory()?i.push({dir:e.join(t,n.name),prefix:s+n.name+"/"}):n.name.endsWith(".md")&&o.push(s+n.name.replace(".md",""))}}(t.docsDir,r);for(const n of r)s.push(`/#/docs/${n}`)}const c=function(n,e,t){return['<?xml version="1.0" encoding="UTF-8"?>','<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">',...e.map(e=>` <url><loc>${n}${e}</loc><lastmod>${t}</lastmod></url>`),"</urlset>"].join("\n")}(t.siteUrl,s,i);n.writeFileSync(e.join(o,"sitemap.xml"),c);const a=function(n,e){const t=["User-agent: *","Allow: /"];return e&&t.push(...e),t.push("",`Sitemap: ${n}/sitemap.xml`),t.join("\n")}(t.siteUrl,t.robotsRules);n.writeFileSync(e.join(o,"robots.txt"),a);const p=function(n,e){const t=[`# ${n.title??"Site"}`];if(n.description){t.push("");const e=n.description.split("\n");for(const n of e)t.push(`> ${n}`)}t.push(""),t.push(`## Website: ${n.siteUrl}`),n.repository&&t.push(`## Repository: ${n.repository}`),n.npmPackage&&t.push(`## npm: https://www.npmjs.com/package/${n.npmPackage}`);const o=e.filter(n=>n.startsWith("guides/")).map(n=>n.replace("guides/","")),i=e.filter(n=>n.startsWith("api/")).map(n=>n.replace("api/",""));if(o.length>0){t.push("","## Documentation","");for(const e of o)t.push(`- ${e}: ${n.siteUrl}/#/docs/guides/${e}`)}if(i.length>0){t.push("","## API Reference","");for(const e of i)t.push(`- ${e}: ${n.siteUrl}/#/docs/api/${e}`)}return n.npmPackage&&t.push("","## Install","","```",`npm install ${n.npmPackage}`,"```"),n.license&&t.push("",`## License: ${n.license}`),n.author&&t.push(`## Author: ${n.author}`),t.join("\n")}(t,r);if(n.writeFileSync(e.join(o,"llms.txt"),p),t.jsonLd){const i=e.join(o,"index.html");if(n.existsSync(i)){let e=n.readFileSync(i,"utf-8");const o=(Array.isArray(t.jsonLd)?t.jsonLd:[t.jsonLd]).map(n=>`<script type="application/ld+json">${JSON.stringify(n)}<\/script>`).join("\n ");e=e.replace("</head>",` ${o}\n </head>`),n.writeFileSync(i,e,"utf-8")}}const l=t.jsonLd?", JSON-LD":"";console.log(`Generated: sitemap.xml (${s.length} URLs), robots.txt, llms.txt${l}`)}}},exports.stripInteractiveElements=s;
2
2
  //# sourceMappingURL=specifyjs-build.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"specifyjs-build.cjs.js","sources":["../../src/build/noscript-plugin.ts","../../src/build/seo-plugin.ts"],"sourcesContent":[null,null],"names":["stripInteractiveElements","html","result","prev","pass","replace","generateNoscriptHtml","config","prefix","classPrefix","sections","length","navLinks","map","s","id","escapeHtml","title","join","sectionBlocks","cleanHtml","desc","description","copyright","str","name","closeBundle","distDir","path","resolve","process","cwd","indexPath","fs","existsSync","console","warn","noscriptHtml","maxSize","maxContentSize","noscriptSize","Buffer","byteLength","toFixed","readFileSync","writeFileSync","log","today","Date","toISOString","split","routes","docPaths","docsDir","rootDir","results","stack","dir","pop","entries","readdirSync","withFileTypes","entry","isDirectory","push","endsWith","walkDocs","dp","sitemap","siteUrl","r","generateSitemap","robots","extraRules","lines","generateRobots","robotsRules","llmsTxt","descLines","dl","repository","npmPackage","guideNames","filter","p","startsWith","apiNames","g","a","license","author","generateLlmsTxt","jsonLd","ldBlocks","Array","isArray","JSON","stringify","extras"],"mappings":"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"}
1
+ {"version":3,"file":"specifyjs-build.cjs.js","sources":["../../src/build/noscript-plugin.ts","../../src/build/seo-plugin.ts"],"sourcesContent":[null,null],"names":["ALLOWED_TAGS","Set","CONTENT_BLOCK_TAGS","ALLOWED_ATTRS","stripInteractiveElements","html","out","i","len","length","ltIdx","indexOf","push","slice","gtIdx","tagContent","isClosing","startsWith","tagBody","trim","spaceIdx","search","tagName","toLowerCase","has","safeAttrs","filterAttributes","selfClose","trimEnd","endsWith","closeTag","closeIdx","closeGt","join","attrString","result","attrRegex","match","exec","name","value","test","escapeAttrValue","val","replace","generateNoscriptHtml","config","prefix","classPrefix","sections","navLinks","map","s","id","escapeHtml","title","sectionBlocks","cleanHtml","desc","description","copyright","str","closeBundle","distDir","path","resolve","process","cwd","indexPath","fs","existsSync","console","warn","noscriptHtml","maxSize","maxContentSize","noscriptSize","Buffer","byteLength","toFixed","readFileSync","writeFileSync","log","today","Date","toISOString","split","routes","docPaths","docsDir","rootDir","results","stack","dir","pop","entries","readdirSync","withFileTypes","entry","isDirectory","walkDocs","dp","sitemap","siteUrl","r","generateSitemap","robots","extraRules","lines","generateRobots","robotsRules","llmsTxt","descLines","dl","repository","npmPackage","guideNames","filter","p","apiNames","g","a","license","author","generateLlmsTxt","jsonLd","ldBlocks","Array","isArray","JSON","stringify","extras"],"mappings":"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"}
@@ -96,12 +96,11 @@ interface NoscriptPluginConfig {
96
96
  maxContentSize?: number;
97
97
  }
98
98
  /**
99
- * Strip interactive elements that don't work without JS.
100
- * Keeps readable content: headings, paragraphs, lists, tables, code, images, links.
101
- *
102
- * Uses iterative passes to handle nested/overlapping patterns that
103
- * single-pass regex cannot catch (addresses CodeQL multi-character
104
- * sanitization and HTML filtering findings).
99
+ * Strip interactive elements from HTML using a whitelist approach.
100
+ * Only allowed tags with allowed attributes are kept. All other
101
+ * tags are removed (their text content is preserved). This is
102
+ * immune to regex bypass attacks because unknown tags are never
103
+ * emitted they're simply not in the whitelist.
105
104
  */
106
105
  declare function stripInteractiveElements(html: string): string;
107
106
  declare function generateNoscriptHtml(config: NoscriptPluginConfig): string;
@@ -1,2 +1,2 @@
1
- import n from"fs";import e from"path";function t(t){return{name:"specifyjs-seo",closeBundle(){const o=e.resolve(process.cwd(),"dist"),i=(new Date).toISOString().split("T")[0]??"",s=[...t.routes??["/"]],r=[];if(t.docsDir&&n.existsSync(t.docsDir)){!function(t,o){const i=[{dir:t,prefix:""}];for(;i.length>0;){const{dir:t,prefix:s}=i.pop(),r=n.readdirSync(t,{withFileTypes:!0});for(const n of r)n.isDirectory()?i.push({dir:e.join(t,n.name),prefix:s+n.name+"/"}):n.name.endsWith(".md")&&o.push(s+n.name.replace(".md",""))}}(t.docsDir,r);for(const n of r)s.push(`/#/docs/${n}`)}const c=function(n,e,t){return['<?xml version="1.0" encoding="UTF-8"?>','<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">',...e.map(e=>` <url><loc>${n}${e}</loc><lastmod>${t}</lastmod></url>`),"</urlset>"].join("\n")}(t.siteUrl,s,i);n.writeFileSync(e.join(o,"sitemap.xml"),c);const a=function(n,e){const t=["User-agent: *","Allow: /"];return e&&t.push(...e),t.push("",`Sitemap: ${n}/sitemap.xml`),t.join("\n")}(t.siteUrl,t.robotsRules);n.writeFileSync(e.join(o,"robots.txt"),a);const p=function(n,e){const t=[`# ${n.title??"Site"}`];if(n.description){t.push("");const e=n.description.split("\n");for(const n of e)t.push(`> ${n}`)}t.push(""),t.push(`## Website: ${n.siteUrl}`),n.repository&&t.push(`## Repository: ${n.repository}`),n.npmPackage&&t.push(`## npm: https://www.npmjs.com/package/${n.npmPackage}`);const o=e.filter(n=>n.startsWith("guides/")).map(n=>n.replace("guides/","")),i=e.filter(n=>n.startsWith("api/")).map(n=>n.replace("api/",""));if(o.length>0){t.push("","## Documentation","");for(const e of o)t.push(`- ${e}: ${n.siteUrl}/#/docs/guides/${e}`)}if(i.length>0){t.push("","## API Reference","");for(const e of i)t.push(`- ${e}: ${n.siteUrl}/#/docs/api/${e}`)}return n.npmPackage&&t.push("","## Install","","```",`npm install ${n.npmPackage}`,"```"),n.license&&t.push("",`## License: ${n.license}`),n.author&&t.push(`## Author: ${n.author}`),t.join("\n")}(t,r);if(n.writeFileSync(e.join(o,"llms.txt"),p),t.jsonLd){const i=e.join(o,"index.html");if(n.existsSync(i)){let e=n.readFileSync(i,"utf-8");const o=(Array.isArray(t.jsonLd)?t.jsonLd:[t.jsonLd]).map(n=>`<script type="application/ld+json">${JSON.stringify(n)}<\/script>`).join("\n ");e=e.replace("</head>",` ${o}\n </head>`),n.writeFileSync(i,e,"utf-8")}}const l=t.jsonLd?", JSON-LD":"";console.log(`Generated: sitemap.xml (${s.length} URLs), robots.txt, llms.txt${l}`)}}}function o(n){let e=n,t="";for(let n=0;n<10&&e!==t;n++)t=e,e=e.replace(/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script\s*>/gi,""),e=e.replace(/<button\b[^>]*>([\s\S]*?)<\/button\s*>/gi,"$1"),e=e.replace(/<input\b[^>]*\/?>/gi,""),e=e.replace(/<select\b[^<]*(?:(?!<\/select>)<[^<]*)*<\/select\s*>/gi,""),e=e.replace(/<textarea\b[^<]*(?:(?!<\/textarea>)<[^<]*)*<\/textarea\s*>/gi,""),e=e.replace(/<\/?form\b[^>]*>/gi,"");return e=e.replace(/\s+on[a-z]+\s*=\s*"[^"]*"/gi,""),e=e.replace(/\s+on[a-z]+\s*=\s*'[^']*'/gi,""),e=e.replace(/\s+style\s*=\s*"[^"]*javascript\s*:[^"]*"/gi,""),e=e.replace(/\s+style\s*=\s*'[^']*javascript\s*:[^']*'/gi,""),e}function i(n){const e=n.classPrefix??"ns",t=n.sections;if(0===t.length)return"";const i=t.map(n=>`<a href="#${n.id}" class="${e}-nav-link">${s(n.title)}</a>`).join("\n "),r=t.map(n=>{const t=o(n.html);return`\n <section id="${n.id}" class="${e}-section">\n <h2 class="${e}-section-title">${s(n.title)}</h2>\n <div class="${e}-section-content">\n ${t}\n </div>\n <p class="${e}-back-to-top"><a href="#${e}-top">Back to top</a></p>\n </section>`}).join("\n"),c=n.title?`<h1 class="${e}-title">${s(n.title)}</h1>`:"",a=n.description?`<p class="${e}-desc">${s(n.description)}</p>`:"",p=n.copyright?`<footer class="${e}-footer"><p>${s(n.copyright)}</p></footer>`:"";return`\n <noscript>\n <style>\n .${e}-container {\n max-width: 900px;\n margin: 0 auto;\n padding: 20px;\n font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;\n line-height: 1.6;\n color: #1f2937;\n }\n .${e}-title {\n font-size: 2rem;\n margin-bottom: 0.5rem;\n color: #0f172a;\n }\n .${e}-desc {\n font-size: 1.1rem;\n color: #64748b;\n margin-bottom: 1.5rem;\n }\n .${e}-nav {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n padding: 12px 0;\n border-bottom: 1px solid #e2e8f0;\n margin-bottom: 2rem;\n position: sticky;\n top: 0;\n background: white;\n z-index: 10;\n }\n .${e}-nav-link {\n padding: 6px 14px;\n border-radius: 6px;\n background: #f1f5f9;\n color: #3b82f6;\n text-decoration: none;\n font-size: 14px;\n font-weight: 500;\n }\n .${e}-nav-link:hover {\n background: #3b82f6;\n color: white;\n }\n .${e}-section {\n margin-bottom: 3rem;\n padding-bottom: 2rem;\n border-bottom: 1px solid #f1f5f9;\n }\n .${e}-section-title {\n font-size: 1.5rem;\n color: #1e293b;\n margin-bottom: 1rem;\n padding-top: 1rem;\n }\n .${e}-section-content h3 {\n font-size: 1.2rem;\n margin-top: 1.5rem;\n color: #334155;\n }\n .${e}-section-content p {\n margin: 0.5rem 0;\n }\n .${e}-section-content pre {\n background: #1e293b;\n color: #e2e8f0;\n padding: 12px 16px;\n border-radius: 6px;\n overflow-x: auto;\n font-size: 13px;\n line-height: 1.5;\n }\n .${e}-section-content code {\n background: #f1f5f9;\n padding: 2px 6px;\n border-radius: 3px;\n font-size: 0.9em;\n }\n .${e}-section-content pre code {\n background: none;\n padding: 0;\n }\n .${e}-section-content table {\n width: 100%;\n border-collapse: collapse;\n margin: 1rem 0;\n }\n .${e}-section-content th,\n .${e}-section-content td {\n padding: 8px 12px;\n border: 1px solid #e2e8f0;\n text-align: left;\n }\n .${e}-section-content th {\n background: #f8fafc;\n font-weight: 600;\n }\n .${e}-section-content img {\n max-width: 100%;\n height: auto;\n }\n .${e}-back-to-top {\n font-size: 13px;\n margin-top: 1.5rem;\n }\n .${e}-back-to-top a {\n color: #3b82f6;\n text-decoration: none;\n }\n .${e}-footer {\n margin-top: 3rem;\n padding-top: 1rem;\n border-top: 1px solid #e2e8f0;\n color: #94a3b8;\n font-size: 13px;\n text-align: center;\n }\n .${e}-js-notice {\n background: #fef3c7;\n border: 1px solid #f59e0b;\n border-radius: 6px;\n padding: 12px 16px;\n margin-bottom: 1.5rem;\n font-size: 14px;\n color: #92400e;\n }\n </style>\n <div id="${e}-top" class="${e}-container">\n ${c}\n ${a}\n <div class="${e}-js-notice">\n This page works best with JavaScript enabled. You are viewing a\n static version of the content.\n </div>\n <nav class="${e}-nav" aria-label="Section navigation">\n ${i}\n </nav>\n ${r}\n ${p}\n </div>\n </noscript>`}function s(n){return n.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}function r(t){return{name:"specifyjs-noscript",closeBundle(){const o=e.resolve(process.cwd(),"dist"),s=e.join(o,"index.html");if(!n.existsSync(s))return void console.warn("[specifyjs-noscript] index.html not found in dist/");const r=i(t);if(!r)return void console.warn("[specifyjs-noscript] No sections provided, skipping.");const c=t.maxContentSize??524288,a=Buffer.byteLength(r,"utf-8");a>c&&console.warn(`[specifyjs-noscript] Noscript content is ${(a/1024).toFixed(0)}KB (limit: ${(c/1024).toFixed(0)}KB). Consider reducing section content.`);let p=n.readFileSync(s,"utf-8");p=p.replace("</body>",`${r}\n</body>`),n.writeFileSync(s,p,"utf-8"),console.log(`Generated: noscript fallback (${t.sections.length} sections, ${(a/1024).toFixed(1)}KB)`)}}}export{i as generateNoscriptHtml,r as specifyJsNoscriptPlugin,t as specifyJsSeoPlugin,o as stripInteractiveElements};
1
+ import n from"fs";import e from"path";function t(t){return{name:"specifyjs-seo",closeBundle(){const o=e.resolve(process.cwd(),"dist"),i=(new Date).toISOString().split("T")[0]??"",s=[...t.routes??["/"]],r=[];if(t.docsDir&&n.existsSync(t.docsDir)){!function(t,o){const i=[{dir:t,prefix:""}];for(;i.length>0;){const{dir:t,prefix:s}=i.pop(),r=n.readdirSync(t,{withFileTypes:!0});for(const n of r)n.isDirectory()?i.push({dir:e.join(t,n.name),prefix:s+n.name+"/"}):n.name.endsWith(".md")&&o.push(s+n.name.replace(".md",""))}}(t.docsDir,r);for(const n of r)s.push(`/#/docs/${n}`)}const c=function(n,e,t){return['<?xml version="1.0" encoding="UTF-8"?>','<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">',...e.map(e=>` <url><loc>${n}${e}</loc><lastmod>${t}</lastmod></url>`),"</urlset>"].join("\n")}(t.siteUrl,s,i);n.writeFileSync(e.join(o,"sitemap.xml"),c);const a=function(n,e){const t=["User-agent: *","Allow: /"];return e&&t.push(...e),t.push("",`Sitemap: ${n}/sitemap.xml`),t.join("\n")}(t.siteUrl,t.robotsRules);n.writeFileSync(e.join(o,"robots.txt"),a);const p=function(n,e){const t=[`# ${n.title??"Site"}`];if(n.description){t.push("");const e=n.description.split("\n");for(const n of e)t.push(`> ${n}`)}t.push(""),t.push(`## Website: ${n.siteUrl}`),n.repository&&t.push(`## Repository: ${n.repository}`),n.npmPackage&&t.push(`## npm: https://www.npmjs.com/package/${n.npmPackage}`);const o=e.filter(n=>n.startsWith("guides/")).map(n=>n.replace("guides/","")),i=e.filter(n=>n.startsWith("api/")).map(n=>n.replace("api/",""));if(o.length>0){t.push("","## Documentation","");for(const e of o)t.push(`- ${e}: ${n.siteUrl}/#/docs/guides/${e}`)}if(i.length>0){t.push("","## API Reference","");for(const e of i)t.push(`- ${e}: ${n.siteUrl}/#/docs/api/${e}`)}return n.npmPackage&&t.push("","## Install","","```",`npm install ${n.npmPackage}`,"```"),n.license&&t.push("",`## License: ${n.license}`),n.author&&t.push(`## Author: ${n.author}`),t.join("\n")}(t,r);if(n.writeFileSync(e.join(o,"llms.txt"),p),t.jsonLd){const i=e.join(o,"index.html");if(n.existsSync(i)){let e=n.readFileSync(i,"utf-8");const o=(Array.isArray(t.jsonLd)?t.jsonLd:[t.jsonLd]).map(n=>`<script type="application/ld+json">${JSON.stringify(n)}<\/script>`).join("\n ");e=e.replace("</head>",` ${o}\n </head>`),n.writeFileSync(i,e,"utf-8")}}const l=t.jsonLd?", JSON-LD":"";console.log(`Generated: sitemap.xml (${s.length} URLs), robots.txt, llms.txt${l}`)}}}const o=new Set(["h1","h2","h3","h4","h5","h6","p","br","hr","blockquote","ul","ol","li","dl","dt","dd","table","thead","tbody","tfoot","tr","th","td","caption","a","strong","em","b","i","u","s","code","pre","kbd","samp","span","div","section","article","aside","header","footer","nav","img","figure","figcaption","picture","source","details","summary","mark","small","sub","sup","abbr","time"]),i=new Set(["script","style","textarea","select","noscript","iframe","object","embed","applet"]),s=new Set(["href","src","alt","title","width","height","class","id","name","colspan","rowspan","scope","rel","target","lang","dir","role","aria-label","aria-describedby","aria-hidden","style"]);function r(n){const e=[];let t=0;const s=n.length;for(;t<s;){const s=n.indexOf("<",t);if(-1===s){e.push(n.slice(t));break}s>t&&e.push(n.slice(t,s));const r=n.indexOf(">",s);if(-1===r){e.push(n.slice(s));break}const a=n.slice(s+1,r),p=a.startsWith("/"),l=p?a.slice(1).trim():a.trim(),d=l.search(/[\s/]/),f=(-1===d?l:l.slice(0,d)).toLowerCase();if(o.has(f))if(p)e.push(`</${f}>`);else{const n=c(-1===d?"":l.slice(d)),t=a.trimEnd().endsWith("/")?" /":"";e.push(`<${f}${n}${t}>`)}else if(!p&&i.has(f)){const e=`</${f}`,o=n.toLowerCase().indexOf(e,r+1);if(-1!==o){const e=n.indexOf(">",o);t=-1!==e?e+1:r+1;continue}}t=r+1}return e.join("")}function c(n){const e=[],t=/([a-z][a-z0-9-]*)\s*(?:=\s*(?:"([^"]*)"|'([^']*)'|(\S+)))?/gi;let o;for(;null!==(o=t.exec(n));){const n=o[1].toLowerCase(),t=o[2]??o[3]??o[4]??"";s.has(n)&&(/javascript\s*:/i.test(t)||e.push(` ${n}="${a(t)}"`))}return e.join("")}function a(n){return n.replace(/&/g,"&amp;").replace(/"/g,"&quot;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function p(n){const e=n.classPrefix??"ns",t=n.sections;if(0===t.length)return"";const o=t.map(n=>`<a href="#${n.id}" class="${e}-nav-link">${l(n.title)}</a>`).join("\n "),i=t.map(n=>{const t=r(n.html);return`\n <section id="${n.id}" class="${e}-section">\n <h2 class="${e}-section-title">${l(n.title)}</h2>\n <div class="${e}-section-content">\n ${t}\n </div>\n <p class="${e}-back-to-top"><a href="#${e}-top">Back to top</a></p>\n </section>`}).join("\n"),s=n.title?`<h1 class="${e}-title">${l(n.title)}</h1>`:"",c=n.description?`<p class="${e}-desc">${l(n.description)}</p>`:"",a=n.copyright?`<footer class="${e}-footer"><p>${l(n.copyright)}</p></footer>`:"";return`\n <noscript>\n <style>\n .${e}-container {\n max-width: 900px;\n margin: 0 auto;\n padding: 20px;\n font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;\n line-height: 1.6;\n color: #1f2937;\n }\n .${e}-title {\n font-size: 2rem;\n margin-bottom: 0.5rem;\n color: #0f172a;\n }\n .${e}-desc {\n font-size: 1.1rem;\n color: #64748b;\n margin-bottom: 1.5rem;\n }\n .${e}-nav {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n padding: 12px 0;\n border-bottom: 1px solid #e2e8f0;\n margin-bottom: 2rem;\n position: sticky;\n top: 0;\n background: white;\n z-index: 10;\n }\n .${e}-nav-link {\n padding: 6px 14px;\n border-radius: 6px;\n background: #f1f5f9;\n color: #3b82f6;\n text-decoration: none;\n font-size: 14px;\n font-weight: 500;\n }\n .${e}-nav-link:hover {\n background: #3b82f6;\n color: white;\n }\n .${e}-section {\n margin-bottom: 3rem;\n padding-bottom: 2rem;\n border-bottom: 1px solid #f1f5f9;\n }\n .${e}-section-title {\n font-size: 1.5rem;\n color: #1e293b;\n margin-bottom: 1rem;\n padding-top: 1rem;\n }\n .${e}-section-content h3 {\n font-size: 1.2rem;\n margin-top: 1.5rem;\n color: #334155;\n }\n .${e}-section-content p {\n margin: 0.5rem 0;\n }\n .${e}-section-content pre {\n background: #1e293b;\n color: #e2e8f0;\n padding: 12px 16px;\n border-radius: 6px;\n overflow-x: auto;\n font-size: 13px;\n line-height: 1.5;\n }\n .${e}-section-content code {\n background: #f1f5f9;\n padding: 2px 6px;\n border-radius: 3px;\n font-size: 0.9em;\n }\n .${e}-section-content pre code {\n background: none;\n padding: 0;\n }\n .${e}-section-content table {\n width: 100%;\n border-collapse: collapse;\n margin: 1rem 0;\n }\n .${e}-section-content th,\n .${e}-section-content td {\n padding: 8px 12px;\n border: 1px solid #e2e8f0;\n text-align: left;\n }\n .${e}-section-content th {\n background: #f8fafc;\n font-weight: 600;\n }\n .${e}-section-content img {\n max-width: 100%;\n height: auto;\n }\n .${e}-back-to-top {\n font-size: 13px;\n margin-top: 1.5rem;\n }\n .${e}-back-to-top a {\n color: #3b82f6;\n text-decoration: none;\n }\n .${e}-footer {\n margin-top: 3rem;\n padding-top: 1rem;\n border-top: 1px solid #e2e8f0;\n color: #94a3b8;\n font-size: 13px;\n text-align: center;\n }\n .${e}-js-notice {\n background: #fef3c7;\n border: 1px solid #f59e0b;\n border-radius: 6px;\n padding: 12px 16px;\n margin-bottom: 1.5rem;\n font-size: 14px;\n color: #92400e;\n }\n </style>\n <div id="${e}-top" class="${e}-container">\n ${s}\n ${c}\n <div class="${e}-js-notice">\n This page works best with JavaScript enabled. You are viewing a\n static version of the content.\n </div>\n <nav class="${e}-nav" aria-label="Section navigation">\n ${o}\n </nav>\n ${i}\n ${a}\n </div>\n </noscript>`}function l(n){return n.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}function d(t){return{name:"specifyjs-noscript",closeBundle(){const o=e.resolve(process.cwd(),"dist"),i=e.join(o,"index.html");if(!n.existsSync(i))return void console.warn("[specifyjs-noscript] index.html not found in dist/");const s=p(t);if(!s)return void console.warn("[specifyjs-noscript] No sections provided, skipping.");const r=t.maxContentSize??524288,c=Buffer.byteLength(s,"utf-8");c>r&&console.warn(`[specifyjs-noscript] Noscript content is ${(c/1024).toFixed(0)}KB (limit: ${(r/1024).toFixed(0)}KB). Consider reducing section content.`);let a=n.readFileSync(i,"utf-8");a=a.replace("</body>",`${s}\n</body>`),n.writeFileSync(i,a,"utf-8"),console.log(`Generated: noscript fallback (${t.sections.length} sections, ${(c/1024).toFixed(1)}KB)`)}}}export{p as generateNoscriptHtml,d as specifyJsNoscriptPlugin,t as specifyJsSeoPlugin,r as stripInteractiveElements};
2
2
  //# sourceMappingURL=specifyjs-build.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"specifyjs-build.esm.js","sources":["../../src/build/seo-plugin.ts","../../src/build/noscript-plugin.ts"],"sourcesContent":[null,null],"names":["specifyJsSeoPlugin","config","name","closeBundle","distDir","path","resolve","process","cwd","today","Date","toISOString","split","routes","docPaths","docsDir","fs","existsSync","rootDir","results","stack","dir","prefix","length","pop","entries","readdirSync","withFileTypes","entry","isDirectory","push","join","endsWith","replace","walkDocs","dp","sitemap","siteUrl","map","r","generateSitemap","writeFileSync","robots","extraRules","lines","generateRobots","robotsRules","llmsTxt","title","description","descLines","dl","repository","npmPackage","guideNames","filter","p","startsWith","apiNames","g","a","license","author","generateLlmsTxt","jsonLd","indexPath","html","readFileSync","ldBlocks","Array","isArray","s","JSON","stringify","extras","console","log","stripInteractiveElements","result","prev","pass","generateNoscriptHtml","classPrefix","sections","navLinks","id","escapeHtml","sectionBlocks","cleanHtml","desc","copyright","str","specifyJsNoscriptPlugin","warn","noscriptHtml","maxSize","maxContentSize","noscriptSize","Buffer","byteLength","toFixed"],"mappings":"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"}
1
+ {"version":3,"file":"specifyjs-build.esm.js","sources":["../../src/build/seo-plugin.ts","../../src/build/noscript-plugin.ts"],"sourcesContent":[null,null],"names":["specifyJsSeoPlugin","config","name","closeBundle","distDir","path","resolve","process","cwd","today","Date","toISOString","split","routes","docPaths","docsDir","fs","existsSync","rootDir","results","stack","dir","prefix","length","pop","entries","readdirSync","withFileTypes","entry","isDirectory","push","join","endsWith","replace","walkDocs","dp","sitemap","siteUrl","map","r","generateSitemap","writeFileSync","robots","extraRules","lines","generateRobots","robotsRules","llmsTxt","title","description","descLines","dl","repository","npmPackage","guideNames","filter","p","startsWith","apiNames","g","a","license","author","generateLlmsTxt","jsonLd","indexPath","html","readFileSync","ldBlocks","Array","isArray","s","JSON","stringify","extras","console","log","ALLOWED_TAGS","Set","CONTENT_BLOCK_TAGS","ALLOWED_ATTRS","stripInteractiveElements","out","i","len","ltIdx","indexOf","slice","gtIdx","tagContent","isClosing","tagBody","trim","spaceIdx","search","tagName","toLowerCase","has","safeAttrs","filterAttributes","selfClose","trimEnd","closeTag","closeIdx","closeGt","attrString","result","attrRegex","match","exec","value","test","escapeAttrValue","val","generateNoscriptHtml","classPrefix","sections","navLinks","id","escapeHtml","sectionBlocks","cleanHtml","desc","copyright","str","specifyJsNoscriptPlugin","warn","noscriptHtml","maxSize","maxContentSize","noscriptSize","Buffer","byteLength","toFixed"],"mappings":"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"}