UNPKG

hono

Version:

Web framework built on Web Standards

201 lines (200 loc) 6.03 kB
var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); var utils_exports = {}; __export(utils_exports, { isValidAttributeName: () => isValidAttributeName, isValidTagName: () => isValidTagName, normalizeIntrinsicElementKey: () => normalizeIntrinsicElementKey, styleObjectForEach: () => styleObjectForEach }); module.exports = __toCommonJS(utils_exports); const normalizeElementKeyMap = /* @__PURE__ */ new Map([ ["className", "class"], ["htmlFor", "for"], ["crossOrigin", "crossorigin"], ["httpEquiv", "http-equiv"], ["itemProp", "itemprop"], ["fetchPriority", "fetchpriority"], ["noModule", "nomodule"], ["formAction", "formaction"] ]); const normalizeIntrinsicElementKey = (key) => normalizeElementKeyMap.get(key) || key; const invalidAttributeNameCharRe = /[\s"'<>/=`\\\x00-\x1f\x7f-\x9f]/; const validAttributeNameCache = /* @__PURE__ */ new Set(); const validAttributeNameCacheMax = 1024; const invalidTagNameCharRe = /^[!?]|[\s"'<>/=`\\\x00-\x1f\x7f-\x9f]/; const validTagNameCache = /* @__PURE__ */ new Set(); const validTagNameCacheMax = 256; const cacheValidName = (cache, max, name) => { if (cache.size >= max) { cache.clear(); } cache.add(name); }; const isValidTagName = (name) => { if (validTagNameCache.has(name)) { return true; } if (typeof name !== "string") { return false; } if (name.length === 0) { return true; } if (invalidTagNameCharRe.test(name)) { return false; } cacheValidName(validTagNameCache, validTagNameCacheMax, name); return true; }; const isValidAttributeName = (name) => { if (validAttributeNameCache.has(name)) { return true; } const len = name.length; if (len === 0) { return false; } for (let i = 0; i < len; i++) { const c = name.charCodeAt(i); if (!(c >= 97 && c <= 122 || // a-z c >= 65 && c <= 90 || // A-Z c >= 48 && c <= 57 || // 0-9 c === 45 || // - c === 95 || // _ c === 46 || // . c === 58)) { if (!invalidAttributeNameCharRe.test(name)) { cacheValidName(validAttributeNameCache, validAttributeNameCacheMax, name); return true; } else { return false; } } } cacheValidName(validAttributeNameCache, validAttributeNameCacheMax, name); return true; }; const invalidStylePropertyNameCharRe = /[\s"'():;\\/\[\]{}\x00-\x1f\x7f-\x9f]/; const validStylePropertyNameCache = /* @__PURE__ */ new Set(); const validStylePropertyNameCacheMax = 1024; const isValidStylePropertyName = (name) => { if (validStylePropertyNameCache.has(name)) { return true; } const len = name.length; if (len === 0) { return false; } for (let i = 0; i < len; i++) { const c = name.charCodeAt(i); if (!(c >= 97 && c <= 122 || // a-z c >= 65 && c <= 90 || // A-Z c >= 48 && c <= 57 || // 0-9 c === 45 || // - c === 95)) { if (!invalidStylePropertyNameCharRe.test(name)) { cacheValidName(validStylePropertyNameCache, validStylePropertyNameCacheMax, name); return true; } else { return false; } } } cacheValidName(validStylePropertyNameCache, validStylePropertyNameCacheMax, name); return true; }; const unsafeStyleValueCharRe = /[;"'\\/\[\](){}]/; const hasUnsafeStyleValue = (value) => { if (!unsafeStyleValueCharRe.test(value)) { return false; } let quote = 0; const blockStack = []; for (let i = 0, len = value.length; i < len; i++) { const c = value.charCodeAt(i); if (c === 92) { if (i === len - 1) { return true; } i++; } else if (quote !== 0) { if (c === 10 || c === 12 || c === 13) { return true; } if (c === quote) { quote = 0; } } else if (c === 47 && value.charCodeAt(i + 1) === 42) { const end = value.indexOf("*/", i + 2); if (end === -1) { return true; } i = end + 1; } else if (c === 34 || c === 39) { quote = c; } else if (c === 40) { blockStack.push(41); } else if (c === 91) { blockStack.push(93); } else if (c === 123 || c === 125) { return true; } else if (c === 41 || c === 93) { if (blockStack[blockStack.length - 1] !== c) { return true; } blockStack.pop(); } else if (c === 59 && blockStack.length === 0) { return true; } } return quote !== 0 || blockStack.length !== 0; }; const styleObjectForEach = (style, fn) => { for (const [k, v] of Object.entries(style)) { const key = k[0] === "-" || !/[A-Z]/.test(k) ? k : k.replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`); if (!isValidStylePropertyName(key)) { continue; } if (v == null) { fn(key, null); continue; } let value; if (typeof v === "number") { value = !key.match( /^(?:a|border-im|column(?:-c|s)|flex(?:$|-[^b])|grid-(?:ar|[^a])|font-w|li|or|sca|st|ta|wido|z)|ty$/ ) ? `${v}px` : `${v}`; } else if (typeof v === "string") { if (hasUnsafeStyleValue(v)) { continue; } value = v; } else { continue; } fn(key, value); } }; // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { isValidAttributeName, isValidTagName, normalizeIntrinsicElementKey, styleObjectForEach });