elit 3.3.2 → 3.3.4
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/build.d.mts +1 -1
- package/dist/build.js +1 -0
- package/dist/build.js.map +1 -0
- package/dist/build.mjs +1 -0
- package/dist/build.mjs.map +1 -0
- package/dist/chokidar.js +1 -0
- package/dist/chokidar.js.map +1 -0
- package/dist/chokidar.mjs +1 -0
- package/dist/chokidar.mjs.map +1 -0
- package/dist/cli.js +4691 -34
- package/dist/config.d.mts +3 -1
- package/dist/config.d.ts +3 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +1 -0
- package/dist/config.js.map +1 -0
- package/dist/config.mjs +1 -0
- package/dist/config.mjs.map +1 -0
- package/dist/coverage.d.mts +85 -0
- package/dist/coverage.d.ts +76 -0
- package/dist/coverage.d.ts.map +1 -0
- package/dist/coverage.js +1549 -0
- package/dist/coverage.js.map +1 -0
- package/dist/coverage.mjs +1520 -0
- package/dist/coverage.mjs.map +1 -0
- package/dist/database.d.mts +31 -6
- package/dist/database.d.ts +31 -6
- package/dist/database.d.ts.map +1 -1
- package/dist/database.js +60 -33
- package/dist/database.js.map +1 -0
- package/dist/database.mjs +60 -33
- package/dist/database.mjs.map +1 -0
- package/dist/dom.js +1 -0
- package/dist/dom.js.map +1 -0
- package/dist/dom.mjs +1 -0
- package/dist/dom.mjs.map +1 -0
- package/dist/el.js +1 -0
- package/dist/el.js.map +1 -0
- package/dist/el.mjs +1 -0
- package/dist/el.mjs.map +1 -0
- package/dist/fs.js +1 -0
- package/dist/fs.js.map +1 -0
- package/dist/fs.mjs +1 -0
- package/dist/fs.mjs.map +1 -0
- package/dist/hmr.js +1 -0
- package/dist/hmr.js.map +1 -0
- package/dist/hmr.mjs +1 -0
- package/dist/hmr.mjs.map +1 -0
- package/dist/http.js +1 -0
- package/dist/http.js.map +1 -0
- package/dist/http.mjs +1 -0
- package/dist/http.mjs.map +1 -0
- package/dist/https.d.mts +1 -1
- package/dist/https.js +1 -0
- package/dist/https.js.map +1 -0
- package/dist/https.mjs +1 -0
- package/dist/https.mjs.map +1 -0
- package/dist/index.d.mts +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +1 -0
- package/dist/index.mjs.map +1 -0
- package/dist/mime-types.js +1 -0
- package/dist/mime-types.js.map +1 -0
- package/dist/mime-types.mjs +1 -0
- package/dist/mime-types.mjs.map +1 -0
- package/dist/path.js +1 -0
- package/dist/path.js.map +1 -0
- package/dist/path.mjs +1 -0
- package/dist/path.mjs.map +1 -0
- package/dist/router.js +1 -0
- package/dist/router.js.map +1 -0
- package/dist/router.mjs +1 -0
- package/dist/router.mjs.map +1 -0
- package/dist/runtime.js +1 -0
- package/dist/runtime.js.map +1 -0
- package/dist/runtime.mjs +1 -0
- package/dist/runtime.mjs.map +1 -0
- package/dist/{server-Cz3z-5ls.d.mts → server-BFTzgJpO.d.mts} +62 -1
- package/dist/{server-BG2CaVMh.d.ts → server-CIXtexNS.d.ts} +62 -1
- package/dist/server.d.mts +1 -1
- package/dist/server.d.ts +9 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +12 -0
- package/dist/server.js.map +1 -0
- package/dist/server.mjs +12 -0
- package/dist/server.mjs.map +1 -0
- package/dist/state.d.mts +1 -1
- package/dist/state.js +1 -0
- package/dist/state.js.map +1 -0
- package/dist/state.mjs +1 -0
- package/dist/state.mjs.map +1 -0
- package/dist/style.js +1 -0
- package/dist/style.js.map +1 -0
- package/dist/style.mjs +1 -0
- package/dist/style.mjs.map +1 -0
- package/dist/test-globals.d.ts +184 -0
- package/dist/test-reporter.d.mts +77 -0
- package/dist/test-reporter.d.ts +73 -0
- package/dist/test-reporter.d.ts.map +1 -0
- package/dist/test-reporter.js +726 -0
- package/dist/test-reporter.js.map +1 -0
- package/dist/test-reporter.mjs +696 -0
- package/dist/test-reporter.mjs.map +1 -0
- package/dist/test-runtime.d.mts +122 -0
- package/dist/test-runtime.d.ts +120 -0
- package/dist/test-runtime.d.ts.map +1 -0
- package/dist/test-runtime.js +1292 -0
- package/dist/test-runtime.js.map +1 -0
- package/dist/test-runtime.mjs +1269 -0
- package/dist/test-runtime.mjs.map +1 -0
- package/dist/test.d.mts +39 -0
- package/dist/test.d.ts +38 -0
- package/dist/test.d.ts.map +1 -0
- package/dist/test.js +4966 -0
- package/dist/test.js.map +1 -0
- package/dist/test.mjs +4944 -0
- package/dist/test.mjs.map +1 -0
- package/dist/types.d.mts +62 -1
- package/dist/types.d.ts +52 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -0
- package/dist/types.js.map +1 -0
- package/dist/types.mjs +1 -0
- package/dist/types.mjs.map +1 -0
- package/dist/ws.js +1 -0
- package/dist/ws.js.map +1 -0
- package/dist/ws.mjs +1 -0
- package/dist/ws.mjs.map +1 -0
- package/dist/wss.js +1 -0
- package/dist/wss.js.map +1 -0
- package/dist/wss.mjs +1 -0
- package/dist/wss.mjs.map +1 -0
- package/package.json +37 -5
- package/src/cli.ts +169 -1
- package/src/config.ts +3 -1
- package/src/coverage.ts +1479 -0
- package/src/database.ts +71 -35
- package/src/server.ts +12 -0
- package/src/test-globals.d.ts +184 -0
- package/src/test-reporter.ts +609 -0
- package/src/test-runtime.ts +1359 -0
- package/src/test.ts +368 -0
- package/src/types.ts +59 -0
package/dist/el.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/el.ts"],"sourcesContent":["/**\n * Elit - Element Factories\n */\n\nimport type { VNode, Child, Props, ElementFactory } from './types';\n\n/**\n * Helper: Check if document is available (eliminates duplication in document checks)\n */\nconst hasDocument = typeof document !== 'undefined';\n\n/**\n * Helper: Capitalize first letter (eliminates duplication in tag name processing)\n */\nfunction capitalize(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\n/**\n * Helper: Bind document method safely (eliminates duplication in document method binding)\n */\nfunction bindDocMethod<T extends Function>(method: T | undefined): T | undefined {\n return hasDocument && method ? method.bind(doc) : undefined as any;\n}\n\n/**\n * Helper: Create prefixed element factories (eliminates duplication in factory creation)\n */\nfunction createPrefixedFactories(tags: readonly string[], prefix: string, elements: any): void {\n tags.forEach(tag => {\n const name = prefix + capitalize(tag);\n elements[name] = createElementFactory(tag);\n });\n}\n\nexport const createElementFactory = (tag: string): ElementFactory => {\n return function(props?: Props | Child | null, ...rest: Child[]): VNode {\n if (!arguments.length) return { tagName: tag, props: {}, children: [] };\n\n const isState = props && typeof props === 'object' && 'value' in props && 'subscribe' in props;\n const isVNode = props && typeof props === 'object' && 'tagName' in props;\n const isChild = typeof props !== 'object' || Array.isArray(props) || props === null || isState || isVNode;\n\n const actualProps: Props = isChild ? {} : props as Props;\n const args: Child[] = isChild ? [props as Child, ...rest] : rest;\n\n if (!args.length) return { tagName: tag, props: actualProps, children: [] };\n\n const flatChildren: Child[] = [];\n for (let i = 0, len = args.length; i < len; i++) {\n const child = args[i];\n if (child == null || child === false) continue;\n\n if (Array.isArray(child)) {\n for (let j = 0, cLen = child.length; j < cLen; j++) {\n const c = child[j];\n c != null && c !== false && flatChildren.push(c);\n }\n } else {\n flatChildren.push(child);\n }\n }\n\n return { tagName: tag, props: actualProps, children: flatChildren };\n } as ElementFactory;\n};\n\n// HTML Tags\nconst tags = [\n 'html', 'head', 'body', 'title', 'base', 'link', 'meta', 'style',\n 'address', 'article', 'aside', 'footer', 'header', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'main', 'nav', 'section',\n 'blockquote', 'dd', 'div', 'dl', 'dt', 'figcaption', 'figure', 'hr', 'li', 'ol', 'p', 'pre', 'ul',\n 'a', 'abbr', 'b', 'bdi', 'bdo', 'br', 'cite', 'code', 'data', 'dfn', 'em', 'i', 'kbd', 'mark', 'q',\n 'rp', 'rt', 'ruby', 's', 'samp', 'small', 'span', 'strong', 'sub', 'sup', 'time', 'u', 'wbr',\n 'area', 'audio', 'img', 'map', 'track', 'video',\n 'embed', 'iframe', 'object', 'param', 'picture', 'portal', 'source',\n 'canvas', 'noscript', 'script',\n 'del', 'ins',\n 'caption', 'col', 'colgroup', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr',\n 'button', 'datalist', 'fieldset', 'form', 'input', 'label', 'legend', 'meter',\n 'optgroup', 'option', 'output', 'progress', 'select', 'textarea',\n 'details', 'dialog', 'menu', 'summary',\n 'slot', 'template'\n] as const;\n\n// SVG Tags\nconst svgTags = [\n 'svg', 'circle', 'rect', 'path', 'line', 'polyline', 'polygon', 'ellipse', 'g', 'text', 'tspan',\n 'defs', 'linearGradient', 'radialGradient', 'stop', 'pattern', 'mask', 'clipPath', 'use', 'symbol',\n 'marker', 'image', 'foreignObject', 'animate', 'animateTransform', 'animateMotion', 'set', 'filter',\n 'feBlend', 'feColorMatrix', 'feComponentTransfer', 'feComposite', 'feConvolveMatrix', 'feDiffuseLighting',\n 'feDisplacementMap', 'feFlood', 'feGaussianBlur', 'feMorphology', 'feOffset', 'feSpecularLighting',\n 'feTile', 'feTurbulence'\n] as const;\n\n// MathML Tags\nconst mathTags = [\n 'math', 'mi', 'mn', 'mo', 'ms', 'mtext', 'mrow', 'mfrac', 'msqrt', 'mroot', 'msub', 'msup'\n] as const;\n\ntype Elements = {\n [K in typeof tags[number]]: ElementFactory;\n} & {\n [K in typeof svgTags[number] as `svg${Capitalize<K>}`]: ElementFactory;\n} & {\n [K in typeof mathTags[number] as `math${Capitalize<K>}`]: ElementFactory;\n} & {\n varElement: ElementFactory;\n};\n\nconst elements: Partial<Elements> = {};\n\ntags.forEach(tag => {\n (elements as any)[tag] = createElementFactory(tag);\n});\n\ncreatePrefixedFactories(svgTags, 'svg', elements);\ncreatePrefixedFactories(mathTags, 'math', elements);\n\n(elements as any).varElement = createElementFactory('var');\n\n// Export all element factories\nexport const {\n html, head, body, title, base, link, meta, style,\n address, article, aside, footer, header, h1, h2, h3, h4, h5, h6, main, nav, section,\n blockquote, dd, div, dl, dt, figcaption, figure, hr, li, ol, p, pre, ul,\n a, abbr, b, bdi, bdo, br, cite, code, data, dfn, em, i, kbd, mark, q,\n rp, rt, ruby, s, samp, small, span, strong, sub, sup, time, u, wbr,\n area, audio, img, map, track, video,\n embed, iframe, object, param, picture, portal, source,\n canvas, noscript, script,\n del, ins,\n caption, col, colgroup, table, tbody, td, tfoot, th, thead, tr,\n button, datalist, fieldset, form, input, label, legend, meter,\n optgroup, option, output, progress, select, textarea,\n details, dialog, menu, summary,\n slot, template,\n svgSvg, svgCircle, svgRect, svgPath, svgLine, svgPolyline, svgPolygon, svgEllipse, svgG, svgText, svgTspan,\n svgDefs, svgLinearGradient, svgRadialGradient, svgStop, svgPattern, svgMask, svgClipPath, svgUse, svgSymbol,\n svgMarker, svgImage, svgForeignObject, svgAnimate, svgAnimateTransform, svgAnimateMotion, svgSet, svgFilter,\n svgFeBlend, svgFeColorMatrix, svgFeComponentTransfer, svgFeComposite, svgFeConvolveMatrix, svgFeDiffuseLighting,\n svgFeDisplacementMap, svgFeFlood, svgFeGaussianBlur, svgFeMorphology, svgFeOffset, svgFeSpecularLighting,\n svgFeTile, svgFeTurbulence,\n mathMath, mathMi, mathMn, mathMo, mathMs, mathMtext, mathMrow, mathMfrac, mathMsqrt, mathMroot, mathMsub, mathMsup,\n varElement\n} = elements as Elements;\nexport const el = elements;\n// Export elements object for dynamic access\nexport { elements };\n// Fragment element factory - groups children without a wrapper element\n// Similar to React's Fragment: <><div>1</div><div>2</div></>\nexport const frag: ElementFactory = function(...children: Child[]): VNode {\n const flatChildren: Child[] = [];\n for (let i = 0, len = children.length; i < len; i++) {\n const child = children[i];\n if (child == null || child === false) continue;\n\n if (Array.isArray(child)) {\n for (let j = 0, cLen = child.length; j < cLen; j++) {\n const c = child[j];\n c != null && c !== false && flatChildren.push(c);\n }\n } else {\n flatChildren.push(child);\n }\n }\n return { tagName: '', props: {}, children: flatChildren };\n} as ElementFactory;\n\n// DOM utility functions - Shorthand helpers for common document operations\nexport const doc = hasDocument ? document : undefined as any;\nexport const getEl = bindDocMethod(doc?.querySelector);\nexport const getEls = bindDocMethod(doc?.querySelectorAll);\nexport const createEl = bindDocMethod(doc?.createElement);\nexport const createSvgEl = hasDocument ? doc.createElementNS.bind(doc, 'http://www.w3.org/2000/svg') : undefined as any;\nexport const createMathEl = hasDocument ? doc.createElementNS.bind(doc, 'http://www.w3.org/1998/Math/MathML') : undefined as any;\nexport const fragment = bindDocMethod(doc?.createDocumentFragment);\nexport const textNode = bindDocMethod(doc?.createTextNode);\nexport const commentNode = bindDocMethod(doc?.createComment);\nexport const getElId = bindDocMethod(doc?.getElementById);\nexport const getElClass = bindDocMethod(doc?.getElementsByClassName);\nexport const getElTag = bindDocMethod(doc?.getElementsByTagName);\nexport const getElName = bindDocMethod(doc?.getElementsByName);"],"mappings":"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","names":["tags","elements","i","i"]}
|
package/dist/el.mjs
CHANGED
package/dist/el.mjs.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/el.ts"],"sourcesContent":["/**\n * Elit - Element Factories\n */\n\nimport type { VNode, Child, Props, ElementFactory } from './types';\n\n/**\n * Helper: Check if document is available (eliminates duplication in document checks)\n */\nconst hasDocument = typeof document !== 'undefined';\n\n/**\n * Helper: Capitalize first letter (eliminates duplication in tag name processing)\n */\nfunction capitalize(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\n/**\n * Helper: Bind document method safely (eliminates duplication in document method binding)\n */\nfunction bindDocMethod<T extends Function>(method: T | undefined): T | undefined {\n return hasDocument && method ? method.bind(doc) : undefined as any;\n}\n\n/**\n * Helper: Create prefixed element factories (eliminates duplication in factory creation)\n */\nfunction createPrefixedFactories(tags: readonly string[], prefix: string, elements: any): void {\n tags.forEach(tag => {\n const name = prefix + capitalize(tag);\n elements[name] = createElementFactory(tag);\n });\n}\n\nexport const createElementFactory = (tag: string): ElementFactory => {\n return function(props?: Props | Child | null, ...rest: Child[]): VNode {\n if (!arguments.length) return { tagName: tag, props: {}, children: [] };\n\n const isState = props && typeof props === 'object' && 'value' in props && 'subscribe' in props;\n const isVNode = props && typeof props === 'object' && 'tagName' in props;\n const isChild = typeof props !== 'object' || Array.isArray(props) || props === null || isState || isVNode;\n\n const actualProps: Props = isChild ? {} : props as Props;\n const args: Child[] = isChild ? [props as Child, ...rest] : rest;\n\n if (!args.length) return { tagName: tag, props: actualProps, children: [] };\n\n const flatChildren: Child[] = [];\n for (let i = 0, len = args.length; i < len; i++) {\n const child = args[i];\n if (child == null || child === false) continue;\n\n if (Array.isArray(child)) {\n for (let j = 0, cLen = child.length; j < cLen; j++) {\n const c = child[j];\n c != null && c !== false && flatChildren.push(c);\n }\n } else {\n flatChildren.push(child);\n }\n }\n\n return { tagName: tag, props: actualProps, children: flatChildren };\n } as ElementFactory;\n};\n\n// HTML Tags\nconst tags = [\n 'html', 'head', 'body', 'title', 'base', 'link', 'meta', 'style',\n 'address', 'article', 'aside', 'footer', 'header', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'main', 'nav', 'section',\n 'blockquote', 'dd', 'div', 'dl', 'dt', 'figcaption', 'figure', 'hr', 'li', 'ol', 'p', 'pre', 'ul',\n 'a', 'abbr', 'b', 'bdi', 'bdo', 'br', 'cite', 'code', 'data', 'dfn', 'em', 'i', 'kbd', 'mark', 'q',\n 'rp', 'rt', 'ruby', 's', 'samp', 'small', 'span', 'strong', 'sub', 'sup', 'time', 'u', 'wbr',\n 'area', 'audio', 'img', 'map', 'track', 'video',\n 'embed', 'iframe', 'object', 'param', 'picture', 'portal', 'source',\n 'canvas', 'noscript', 'script',\n 'del', 'ins',\n 'caption', 'col', 'colgroup', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr',\n 'button', 'datalist', 'fieldset', 'form', 'input', 'label', 'legend', 'meter',\n 'optgroup', 'option', 'output', 'progress', 'select', 'textarea',\n 'details', 'dialog', 'menu', 'summary',\n 'slot', 'template'\n] as const;\n\n// SVG Tags\nconst svgTags = [\n 'svg', 'circle', 'rect', 'path', 'line', 'polyline', 'polygon', 'ellipse', 'g', 'text', 'tspan',\n 'defs', 'linearGradient', 'radialGradient', 'stop', 'pattern', 'mask', 'clipPath', 'use', 'symbol',\n 'marker', 'image', 'foreignObject', 'animate', 'animateTransform', 'animateMotion', 'set', 'filter',\n 'feBlend', 'feColorMatrix', 'feComponentTransfer', 'feComposite', 'feConvolveMatrix', 'feDiffuseLighting',\n 'feDisplacementMap', 'feFlood', 'feGaussianBlur', 'feMorphology', 'feOffset', 'feSpecularLighting',\n 'feTile', 'feTurbulence'\n] as const;\n\n// MathML Tags\nconst mathTags = [\n 'math', 'mi', 'mn', 'mo', 'ms', 'mtext', 'mrow', 'mfrac', 'msqrt', 'mroot', 'msub', 'msup'\n] as const;\n\ntype Elements = {\n [K in typeof tags[number]]: ElementFactory;\n} & {\n [K in typeof svgTags[number] as `svg${Capitalize<K>}`]: ElementFactory;\n} & {\n [K in typeof mathTags[number] as `math${Capitalize<K>}`]: ElementFactory;\n} & {\n varElement: ElementFactory;\n};\n\nconst elements: Partial<Elements> = {};\n\ntags.forEach(tag => {\n (elements as any)[tag] = createElementFactory(tag);\n});\n\ncreatePrefixedFactories(svgTags, 'svg', elements);\ncreatePrefixedFactories(mathTags, 'math', elements);\n\n(elements as any).varElement = createElementFactory('var');\n\n// Export all element factories\nexport const {\n html, head, body, title, base, link, meta, style,\n address, article, aside, footer, header, h1, h2, h3, h4, h5, h6, main, nav, section,\n blockquote, dd, div, dl, dt, figcaption, figure, hr, li, ol, p, pre, ul,\n a, abbr, b, bdi, bdo, br, cite, code, data, dfn, em, i, kbd, mark, q,\n rp, rt, ruby, s, samp, small, span, strong, sub, sup, time, u, wbr,\n area, audio, img, map, track, video,\n embed, iframe, object, param, picture, portal, source,\n canvas, noscript, script,\n del, ins,\n caption, col, colgroup, table, tbody, td, tfoot, th, thead, tr,\n button, datalist, fieldset, form, input, label, legend, meter,\n optgroup, option, output, progress, select, textarea,\n details, dialog, menu, summary,\n slot, template,\n svgSvg, svgCircle, svgRect, svgPath, svgLine, svgPolyline, svgPolygon, svgEllipse, svgG, svgText, svgTspan,\n svgDefs, svgLinearGradient, svgRadialGradient, svgStop, svgPattern, svgMask, svgClipPath, svgUse, svgSymbol,\n svgMarker, svgImage, svgForeignObject, svgAnimate, svgAnimateTransform, svgAnimateMotion, svgSet, svgFilter,\n svgFeBlend, svgFeColorMatrix, svgFeComponentTransfer, svgFeComposite, svgFeConvolveMatrix, svgFeDiffuseLighting,\n svgFeDisplacementMap, svgFeFlood, svgFeGaussianBlur, svgFeMorphology, svgFeOffset, svgFeSpecularLighting,\n svgFeTile, svgFeTurbulence,\n mathMath, mathMi, mathMn, mathMo, mathMs, mathMtext, mathMrow, mathMfrac, mathMsqrt, mathMroot, mathMsub, mathMsup,\n varElement\n} = elements as Elements;\nexport const el = elements;\n// Export elements object for dynamic access\nexport { elements };\n// Fragment element factory - groups children without a wrapper element\n// Similar to React's Fragment: <><div>1</div><div>2</div></>\nexport const frag: ElementFactory = function(...children: Child[]): VNode {\n const flatChildren: Child[] = [];\n for (let i = 0, len = children.length; i < len; i++) {\n const child = children[i];\n if (child == null || child === false) continue;\n\n if (Array.isArray(child)) {\n for (let j = 0, cLen = child.length; j < cLen; j++) {\n const c = child[j];\n c != null && c !== false && flatChildren.push(c);\n }\n } else {\n flatChildren.push(child);\n }\n }\n return { tagName: '', props: {}, children: flatChildren };\n} as ElementFactory;\n\n// DOM utility functions - Shorthand helpers for common document operations\nexport const doc = hasDocument ? document : undefined as any;\nexport const getEl = bindDocMethod(doc?.querySelector);\nexport const getEls = bindDocMethod(doc?.querySelectorAll);\nexport const createEl = bindDocMethod(doc?.createElement);\nexport const createSvgEl = hasDocument ? doc.createElementNS.bind(doc, 'http://www.w3.org/2000/svg') : undefined as any;\nexport const createMathEl = hasDocument ? doc.createElementNS.bind(doc, 'http://www.w3.org/1998/Math/MathML') : undefined as any;\nexport const fragment = bindDocMethod(doc?.createDocumentFragment);\nexport const textNode = bindDocMethod(doc?.createTextNode);\nexport const commentNode = bindDocMethod(doc?.createComment);\nexport const getElId = bindDocMethod(doc?.getElementById);\nexport const getElClass = bindDocMethod(doc?.getElementsByClassName);\nexport const getElTag = bindDocMethod(doc?.getElementsByTagName);\nexport const getElName = bindDocMethod(doc?.getElementsByName);"],"mappings":"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","names":["tags","elements","i","i"]}
|
package/dist/fs.js
CHANGED
package/dist/fs.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/fs.ts","../src/runtime.ts"],"sourcesContent":["/**\n * File System module with unified API across runtimes\n * Compatible with Node.js 'fs' module API\n * - Node.js: uses 'fs' module\n * - Bun: uses Bun.file() and native APIs\n * - Deno: uses Deno.readFile(), etc.\n */\n\nimport { runtime, isNode, isBun, isDeno } from './runtime';\n\n/**\n * Helper: Check if runtime is Bun or Deno (eliminates duplication in Deno API calls)\n */\nconst isBunOrDeno = isBun || isDeno;\n\n/**\n * Helper: Parse options from string or object (eliminates duplication in options parsing)\n */\nfunction parseOptions<T>(options: T | string | undefined, defaultValue: T): T {\n return typeof options === 'string' ? { encoding: options } as T : options || defaultValue;\n}\n\n/**\n * Helper: Decode content with optional encoding (eliminates duplication in read operations)\n */\nfunction decodeContent(content: ArrayBuffer | Uint8Array, encoding?: string | null): string | Buffer {\n if (encoding) {\n return new TextDecoder(encoding).decode(content);\n }\n return Buffer.from(content instanceof ArrayBuffer ? new Uint8Array(content) : content);\n}\n\n/**\n * Helper: Convert data to Uint8Array (eliminates duplication in write operations)\n */\nfunction dataToUint8Array(data: string | Buffer | Uint8Array): Uint8Array {\n if (typeof data === 'string') {\n return new TextEncoder().encode(data);\n }\n if (data instanceof Buffer) {\n return new Uint8Array(data);\n }\n return data;\n}\n\n/**\n * Helper: Process directory entries (eliminates duplication in readdir operations)\n */\nfunction processDenoEntries(iterator: any, withFileTypes?: boolean): any[] {\n const entries: any[] = [];\n for (const entry of iterator) {\n if (withFileTypes) {\n entries.push(createDirentFromDenoEntry(entry));\n } else {\n entries.push(entry.name);\n }\n }\n return entries;\n}\n\n/**\n * Helper: Process directory entries async (eliminates duplication in async readdir)\n */\nasync function processDenoEntriesAsync(iterator: any, withFileTypes?: boolean): Promise<any[]> {\n const entries: any[] = [];\n for await (const entry of iterator) {\n if (withFileTypes) {\n entries.push(createDirentFromDenoEntry(entry));\n } else {\n entries.push(entry.name);\n }\n }\n return entries;\n}\n\n// Pre-load fs module for Node.js\nlet fs: any, fsPromises: any;\nif (isNode) {\n fs = require('fs');\n fsPromises = require('fs/promises');\n}\n\n/**\n * File encoding types\n */\nexport type BufferEncoding =\n | 'ascii' | 'utf8' | 'utf-8' | 'utf16le' | 'ucs2' | 'ucs-2'\n | 'base64' | 'base64url' | 'latin1' | 'binary' | 'hex';\n\n/**\n * Read file options\n */\nexport interface ReadFileOptions {\n encoding?: BufferEncoding | null;\n flag?: string;\n signal?: AbortSignal;\n}\n\n/**\n * Write file options\n */\nexport interface WriteFileOptions {\n encoding?: BufferEncoding | null;\n mode?: number;\n flag?: string;\n signal?: AbortSignal;\n}\n\n/**\n * Mkdir options\n */\nexport interface MkdirOptions {\n recursive?: boolean;\n mode?: number;\n}\n\n/**\n * Readdir options\n */\nexport interface ReaddirOptions {\n encoding?: BufferEncoding | null;\n withFileTypes?: boolean;\n recursive?: boolean;\n}\n\n/**\n * File stats\n */\nexport interface Stats {\n isFile(): boolean;\n isDirectory(): boolean;\n isBlockDevice(): boolean;\n isCharacterDevice(): boolean;\n isSymbolicLink(): boolean;\n isFIFO(): boolean;\n isSocket(): boolean;\n dev: number;\n ino: number;\n mode: number;\n nlink: number;\n uid: number;\n gid: number;\n rdev: number;\n size: number;\n blksize: number;\n blocks: number;\n atimeMs: number;\n mtimeMs: number;\n ctimeMs: number;\n birthtimeMs: number;\n atime: Date;\n mtime: Date;\n ctime: Date;\n birthtime: Date;\n}\n\n/**\n * Directory entry\n */\nexport interface Dirent {\n name: string;\n isFile(): boolean;\n isDirectory(): boolean;\n isBlockDevice(): boolean;\n isCharacterDevice(): boolean;\n isSymbolicLink(): boolean;\n isFIFO(): boolean;\n isSocket(): boolean;\n}\n\n/**\n * Read file (async)\n */\nexport async function readFile(path: string, options?: ReadFileOptions | BufferEncoding): Promise<string | Buffer> {\n const opts = parseOptions<ReadFileOptions>(options, {});\n\n if (isNode) {\n return fsPromises.readFile(path, opts);\n } else if (isBun) {\n // @ts-ignore\n const file = Bun.file(path);\n const content = await file.arrayBuffer();\n return decodeContent(content, opts.encoding);\n } else if (isDeno) {\n // @ts-ignore\n const content = await Deno.readFile(path);\n return decodeContent(content, opts.encoding);\n }\n\n throw new Error('Unsupported runtime');\n}\n\n/**\n * Read file (sync)\n */\nexport function readFileSync(path: string, options?: ReadFileOptions | BufferEncoding): string | Buffer {\n const opts = parseOptions<ReadFileOptions>(options, {});\n\n if (isNode) {\n return fs.readFileSync(path, opts);\n } else if (isBun) {\n // @ts-ignore\n const file = Bun.file(path);\n const content = file.arrayBuffer();\n return decodeContent(content as ArrayBuffer, opts.encoding);\n } else if (isDeno) {\n // @ts-ignore\n const content = Deno.readFileSync(path);\n return decodeContent(content, opts.encoding);\n }\n\n throw new Error('Unsupported runtime');\n}\n\n/**\n * Write file (async)\n */\nexport async function writeFile(path: string, data: string | Buffer | Uint8Array, options?: WriteFileOptions | BufferEncoding): Promise<void> {\n const opts = parseOptions<WriteFileOptions>(options, {});\n\n if (isNode) {\n return fsPromises.writeFile(path, data, opts);\n } else if (isBun) {\n // @ts-ignore\n await Bun.write(path, data);\n } else if (isDeno) {\n // @ts-ignore\n await Deno.writeFile(path, dataToUint8Array(data));\n }\n}\n\n/**\n * Write file (sync)\n */\nexport function writeFileSync(path: string, data: string | Buffer | Uint8Array, options?: WriteFileOptions | BufferEncoding): void {\n const opts = parseOptions<WriteFileOptions>(options, {});\n\n if (isNode) {\n fs.writeFileSync(path, data, opts);\n } else if (isBun) {\n // @ts-ignore\n Bun.write(path, data);\n } else if (isDeno) {\n // @ts-ignore\n Deno.writeFileSync(path, dataToUint8Array(data));\n }\n}\n\n/**\n * Append file (async)\n */\nexport async function appendFile(path: string, data: string | Buffer, options?: WriteFileOptions | BufferEncoding): Promise<void> {\n const opts = parseOptions<WriteFileOptions>(options, {});\n\n if (isNode) {\n return fsPromises.appendFile(path, data, opts);\n } else {\n if (await exists(path)) {\n const existing = await readFile(path);\n const combined = Buffer.isBuffer(existing)\n ? Buffer.concat([existing, Buffer.isBuffer(data) ? data : Buffer.from(data)])\n : existing + (Buffer.isBuffer(data) ? data.toString() : data);\n await writeFile(path, combined, opts);\n } else {\n await writeFile(path, data, opts);\n }\n }\n}\n\n/**\n * Append file (sync)\n */\nexport function appendFileSync(path: string, data: string | Buffer, options?: WriteFileOptions | BufferEncoding): void {\n const opts = parseOptions<WriteFileOptions>(options, {});\n\n if (isNode) {\n fs.appendFileSync(path, data, opts);\n } else {\n if (existsSync(path)) {\n const existing = readFileSync(path);\n const combined = Buffer.isBuffer(existing)\n ? Buffer.concat([existing, Buffer.isBuffer(data) ? data : Buffer.from(data)])\n : existing + (Buffer.isBuffer(data) ? data.toString() : data);\n writeFileSync(path, combined, opts);\n } else {\n writeFileSync(path, data, opts);\n }\n }\n}\n\n/**\n * Check if file/directory exists (async)\n */\nexport async function exists(path: string): Promise<boolean> {\n try {\n await stat(path);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Check if file/directory exists (sync)\n */\nexport function existsSync(path: string): boolean {\n try {\n statSync(path);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Get file stats (async)\n */\nexport async function stat(path: string): Promise<Stats> {\n if (isNode) {\n return fsPromises.stat(path);\n } else if (isBun) {\n // @ts-ignore\n const file = Bun.file(path);\n const size = file.size;\n const exists = await file.exists();\n\n if (!exists) {\n throw new Error(`ENOENT: no such file or directory, stat '${path}'`);\n }\n\n // Create a Stats-like object\n return createStatsObject(path, size, false);\n } else if (isDeno) {\n // @ts-ignore\n const info = await Deno.stat(path);\n return createStatsFromDenoFileInfo(info);\n }\n\n throw new Error('Unsupported runtime');\n}\n\n/**\n * Get file stats (sync)\n */\nexport function statSync(path: string): Stats {\n if (isNode) {\n return fs.statSync(path);\n } else if (isBun) {\n // @ts-ignore\n const file = Bun.file(path);\n const size = file.size;\n\n // Bun doesn't have sync exists check, so we try to read\n try {\n file.arrayBuffer();\n } catch {\n throw new Error(`ENOENT: no such file or directory, stat '${path}'`);\n }\n\n return createStatsObject(path, size, false);\n } else if (isDeno) {\n // @ts-ignore\n const info = Deno.statSync(path);\n return createStatsFromDenoFileInfo(info);\n }\n\n throw new Error('Unsupported runtime');\n}\n\n/**\n * Create directory (async)\n */\nexport async function mkdir(path: string, options?: MkdirOptions | number): Promise<void> {\n const opts = typeof options === 'number' ? { mode: options } as MkdirOptions : options || {};\n\n if (isNode) {\n await fsPromises.mkdir(path, opts);\n } else if (isBun) {\n // @ts-ignore\n await Deno.mkdir(path, { recursive: opts.recursive });\n } else if (isDeno) {\n // @ts-ignore\n await Deno.mkdir(path, { recursive: opts.recursive });\n }\n}\n\n/**\n * Create directory (sync)\n */\nexport function mkdirSync(path: string, options?: MkdirOptions | number): void {\n const opts = typeof options === 'number' ? { mode: options } as MkdirOptions : options || {};\n\n if (isNode) {\n fs.mkdirSync(path, opts);\n } else if (isBun) {\n // @ts-ignore\n Deno.mkdirSync(path, { recursive: opts.recursive });\n } else if (isDeno) {\n // @ts-ignore\n Deno.mkdirSync(path, { recursive: opts.recursive });\n }\n}\n\n/**\n * Read directory (async)\n */\nexport async function readdir(path: string, options?: ReaddirOptions | BufferEncoding): Promise<string[] | Dirent[]> {\n const opts = parseOptions<ReaddirOptions>(options, {});\n\n if (isNode) {\n return fsPromises.readdir(path, opts);\n } else if (isBunOrDeno) {\n // @ts-ignore\n return processDenoEntriesAsync(Deno.readDir(path), opts.withFileTypes);\n }\n\n throw new Error('Unsupported runtime');\n}\n\n/**\n * Read directory (sync)\n */\nexport function readdirSync(path: string, options?: ReaddirOptions | BufferEncoding): string[] | Dirent[] {\n const opts = parseOptions<ReaddirOptions>(options, {});\n\n if (isNode) {\n return fs.readdirSync(path, opts);\n } else if (isBunOrDeno) {\n // @ts-ignore\n return processDenoEntries(Deno.readDirSync(path), opts.withFileTypes);\n }\n\n throw new Error('Unsupported runtime');\n}\n\n/**\n * Remove file (async)\n */\nexport async function unlink(path: string): Promise<void> {\n if (isNode) {\n return fsPromises.unlink(path);\n } else if (isBun) {\n // @ts-ignore\n await Deno.remove(path);\n } else if (isDeno) {\n // @ts-ignore\n await Deno.remove(path);\n }\n}\n\n/**\n * Remove file (sync)\n */\nexport function unlinkSync(path: string): void {\n if (isNode) {\n fs.unlinkSync(path);\n } else if (isBun) {\n // @ts-ignore\n Deno.removeSync(path);\n } else if (isDeno) {\n // @ts-ignore\n Deno.removeSync(path);\n }\n}\n\n/**\n * Remove directory (async)\n */\nexport async function rmdir(path: string, options?: { recursive?: boolean }): Promise<void> {\n if (isNode) {\n return fsPromises.rmdir(path, options);\n } else if (isBun) {\n // @ts-ignore\n await Deno.remove(path, { recursive: options?.recursive });\n } else if (isDeno) {\n // @ts-ignore\n await Deno.remove(path, { recursive: options?.recursive });\n }\n}\n\n/**\n * Remove directory (sync)\n */\nexport function rmdirSync(path: string, options?: { recursive?: boolean }): void {\n if (isNode) {\n fs.rmdirSync(path, options);\n } else if (isBun) {\n // @ts-ignore\n Deno.removeSync(path, { recursive: options?.recursive });\n } else if (isDeno) {\n // @ts-ignore\n Deno.removeSync(path, { recursive: options?.recursive });\n }\n}\n\n/**\n * Rename/move file (async)\n */\nexport async function rename(oldPath: string, newPath: string): Promise<void> {\n if (isNode) {\n return fsPromises.rename(oldPath, newPath);\n } else if (isBun) {\n // @ts-ignore\n await Deno.rename(oldPath, newPath);\n } else if (isDeno) {\n // @ts-ignore\n await Deno.rename(oldPath, newPath);\n }\n}\n\n/**\n * Rename/move file (sync)\n */\nexport function renameSync(oldPath: string, newPath: string): void {\n if (isNode) {\n fs.renameSync(oldPath, newPath);\n } else if (isBun) {\n // @ts-ignore\n Deno.renameSync(oldPath, newPath);\n } else if (isDeno) {\n // @ts-ignore\n Deno.renameSync(oldPath, newPath);\n }\n}\n\n/**\n * Copy file (async)\n */\nexport async function copyFile(src: string, dest: string, flags?: number): Promise<void> {\n if (isNode) {\n return fsPromises.copyFile(src, dest, flags);\n } else if (isBun) {\n // @ts-ignore\n await Deno.copyFile(src, dest);\n } else if (isDeno) {\n // @ts-ignore\n await Deno.copyFile(src, dest);\n }\n}\n\n/**\n * Copy file (sync)\n */\nexport function copyFileSync(src: string, dest: string, flags?: number): void {\n if (isNode) {\n fs.copyFileSync(src, dest, flags);\n } else if (isBun) {\n // @ts-ignore\n Deno.copyFileSync(src, dest);\n } else if (isDeno) {\n // @ts-ignore\n Deno.copyFileSync(src, dest);\n }\n}\n\n/**\n * Resolve pathname to absolute path (async)\n */\nexport async function realpath(path: string, options?: { encoding?: BufferEncoding }): Promise<string> {\n if (isNode) {\n return fsPromises.realpath(path, options);\n } else if (isBun) {\n // Bun supports fs.promises.realpath\n const fs = require('fs/promises');\n return fs.realpath(path, options);\n } else if (isDeno) {\n // @ts-ignore\n return await Deno.realPath(path);\n }\n return path;\n}\n\n/**\n * Resolve pathname to absolute path (sync)\n */\nexport function realpathSync(path: string, options?: { encoding?: BufferEncoding }): string {\n if (isNode) {\n return fs.realpathSync(path, options);\n } else if (isBun) {\n // Bun supports fs.realpathSync\n const fs = require('fs');\n return fs.realpathSync(path, options);\n } else if (isDeno) {\n // @ts-ignore\n return Deno.realPathSync(path);\n }\n return path;\n}\n\n/**\n * Helper: Create Stats object\n */\nfunction createStatsObject(_path: string, size: number, isDir: boolean): Stats {\n const now = Date.now();\n return {\n isFile: () => !isDir,\n isDirectory: () => isDir,\n isBlockDevice: () => false,\n isCharacterDevice: () => false,\n isSymbolicLink: () => false,\n isFIFO: () => false,\n isSocket: () => false,\n dev: 0,\n ino: 0,\n mode: isDir ? 16877 : 33188,\n nlink: 1,\n uid: 0,\n gid: 0,\n rdev: 0,\n size,\n blksize: 4096,\n blocks: Math.ceil(size / 512),\n atimeMs: now,\n mtimeMs: now,\n ctimeMs: now,\n birthtimeMs: now,\n atime: new Date(now),\n mtime: new Date(now),\n ctime: new Date(now),\n birthtime: new Date(now),\n };\n}\n\n/**\n * Helper: Create Stats from Deno FileInfo\n */\nfunction createStatsFromDenoFileInfo(info: any): Stats {\n return {\n isFile: () => info.isFile,\n isDirectory: () => info.isDirectory,\n isBlockDevice: () => false,\n isCharacterDevice: () => false,\n isSymbolicLink: () => info.isSymlink || false,\n isFIFO: () => false,\n isSocket: () => false,\n dev: info.dev || 0,\n ino: info.ino || 0,\n mode: info.mode || 0,\n nlink: info.nlink || 1,\n uid: info.uid || 0,\n gid: info.gid || 0,\n rdev: 0,\n size: info.size,\n blksize: info.blksize || 4096,\n blocks: info.blocks || Math.ceil(info.size / 512),\n atimeMs: info.atime?.getTime() || Date.now(),\n mtimeMs: info.mtime?.getTime() || Date.now(),\n ctimeMs: info.birthtime?.getTime() || Date.now(),\n birthtimeMs: info.birthtime?.getTime() || Date.now(),\n atime: info.atime || new Date(),\n mtime: info.mtime || new Date(),\n ctime: info.birthtime || new Date(),\n birthtime: info.birthtime || new Date(),\n };\n}\n\n/**\n * Helper: Create Dirent from Deno DirEntry\n */\nfunction createDirentFromDenoEntry(entry: any): Dirent {\n return {\n name: entry.name,\n isFile: () => entry.isFile,\n isDirectory: () => entry.isDirectory,\n isBlockDevice: () => false,\n isCharacterDevice: () => false,\n isSymbolicLink: () => entry.isSymlink || false,\n isFIFO: () => false,\n isSocket: () => false,\n };\n}\n\n/**\n * Get current runtime\n */\nexport function getRuntime(): 'node' | 'bun' | 'deno' {\n return runtime;\n}\n\n/**\n * Promises API (re-export for compatibility)\n */\nexport const promises = {\n readFile,\n writeFile,\n appendFile,\n stat,\n mkdir,\n readdir,\n unlink,\n rmdir,\n rename,\n copyFile,\n realpath,\n};\n\n/**\n * Default export\n */\nexport default {\n readFile,\n readFileSync,\n writeFile,\n writeFileSync,\n appendFile,\n appendFileSync,\n exists,\n existsSync,\n stat,\n statSync,\n mkdir,\n mkdirSync,\n readdir,\n readdirSync,\n unlink,\n unlinkSync,\n rmdir,\n rmdirSync,\n rename,\n renameSync,\n copyFile,\n copyFileSync,\n realpath,\n realpathSync,\n promises,\n getRuntime,\n};\n","/**\n * Runtime detection and global type declarations\n * Shared across all modules for consistency\n */\n\n/**\n * Runtime detection (cached at module load)\n */\nexport const runtime = (() => {\n // @ts-ignore - Deno global\n if (typeof Deno !== 'undefined') return 'deno';\n // @ts-ignore - Bun global\n if (typeof Bun !== 'undefined') return 'bun';\n return 'node';\n})() as 'node' | 'bun' | 'deno';\n\nexport const isNode = runtime === 'node';\nexport const isBun = runtime === 'bun';\nexport const isDeno = runtime === 'deno';\n\n// Global declarations for runtime-specific APIs\ndeclare global {\n // @ts-ignore - Bun global\n const Bun: {\n build(options: {\n entrypoints: string[];\n outdir?: string;\n target?: string;\n format?: string;\n minify?: boolean;\n sourcemap?: string;\n external?: string[];\n naming?: string;\n plugins?: any[];\n define?: Record<string, string>;\n }): Promise<{\n success: boolean;\n outputs: Array<{ path: string; size: number }>;\n logs: any[];\n }>;\n Transpiler: new (options?: {\n loader?: string;\n target?: string;\n minify?: boolean;\n }) => {\n transform(code: string, loader?: string): Promise<string>;\n transformSync(code: string, loader?: string): string;\n };\n file(path: string): {\n size: number;\n arrayBuffer(): ArrayBuffer | Promise<ArrayBuffer>;\n exists(): Promise<boolean>;\n };\n write(path: string, data: string | Buffer | Uint8Array): Promise<void>;\n } | undefined;\n\n // @ts-ignore - Deno global\n const Deno: {\n emit(rootSpecifier: string | URL, options?: {\n bundle?: 'module' | 'classic';\n check?: boolean;\n compilerOptions?: any;\n importMap?: string;\n importMapPath?: string;\n sources?: Record<string, string>;\n }): Promise<{\n files: Record<string, string>;\n diagnostics: any[];\n }>;\n writeTextFile(path: string, data: string): Promise<void>;\n readFile(path: string): Promise<Uint8Array>;\n readFileSync(path: string): Uint8Array;\n writeFile(path: string, data: Uint8Array): Promise<void>;\n writeFileSync(path: string, data: Uint8Array): void;\n stat(path: string): Promise<any>;\n statSync(path: string): any;\n mkdir(path: string, options?: { recursive?: boolean }): Promise<void>;\n mkdirSync(path: string, options?: { recursive?: boolean }): void;\n readDir(path: string): AsyncIterable<any>;\n readDirSync(path: string): Iterable<any>;\n remove(path: string, options?: { recursive?: boolean }): Promise<void>;\n removeSync(path: string, options?: { recursive?: boolean }): void;\n rename(oldPath: string, newPath: string): Promise<void>;\n renameSync(oldPath: string, newPath: string): void;\n copyFile(src: string, dest: string): Promise<void>;\n copyFileSync(src: string, dest: string): void;\n realPath(path: string): Promise<string>;\n realPathSync(path: string): string;\n watchFs(paths: string | string[]): AsyncIterable<{\n kind: string;\n paths: string[];\n }>;\n build: {\n os: string;\n };\n } | undefined;\n}\n"],"mappings":"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","names":["exists","fs"]}
|
package/dist/fs.mjs
CHANGED
package/dist/fs.mjs.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/runtime.ts","../src/fs.ts"],"sourcesContent":["/**\n * Runtime detection and global type declarations\n * Shared across all modules for consistency\n */\n\n/**\n * Runtime detection (cached at module load)\n */\nexport const runtime = (() => {\n // @ts-ignore - Deno global\n if (typeof Deno !== 'undefined') return 'deno';\n // @ts-ignore - Bun global\n if (typeof Bun !== 'undefined') return 'bun';\n return 'node';\n})() as 'node' | 'bun' | 'deno';\n\nexport const isNode = runtime === 'node';\nexport const isBun = runtime === 'bun';\nexport const isDeno = runtime === 'deno';\n\n// Global declarations for runtime-specific APIs\ndeclare global {\n // @ts-ignore - Bun global\n const Bun: {\n build(options: {\n entrypoints: string[];\n outdir?: string;\n target?: string;\n format?: string;\n minify?: boolean;\n sourcemap?: string;\n external?: string[];\n naming?: string;\n plugins?: any[];\n define?: Record<string, string>;\n }): Promise<{\n success: boolean;\n outputs: Array<{ path: string; size: number }>;\n logs: any[];\n }>;\n Transpiler: new (options?: {\n loader?: string;\n target?: string;\n minify?: boolean;\n }) => {\n transform(code: string, loader?: string): Promise<string>;\n transformSync(code: string, loader?: string): string;\n };\n file(path: string): {\n size: number;\n arrayBuffer(): ArrayBuffer | Promise<ArrayBuffer>;\n exists(): Promise<boolean>;\n };\n write(path: string, data: string | Buffer | Uint8Array): Promise<void>;\n } | undefined;\n\n // @ts-ignore - Deno global\n const Deno: {\n emit(rootSpecifier: string | URL, options?: {\n bundle?: 'module' | 'classic';\n check?: boolean;\n compilerOptions?: any;\n importMap?: string;\n importMapPath?: string;\n sources?: Record<string, string>;\n }): Promise<{\n files: Record<string, string>;\n diagnostics: any[];\n }>;\n writeTextFile(path: string, data: string): Promise<void>;\n readFile(path: string): Promise<Uint8Array>;\n readFileSync(path: string): Uint8Array;\n writeFile(path: string, data: Uint8Array): Promise<void>;\n writeFileSync(path: string, data: Uint8Array): void;\n stat(path: string): Promise<any>;\n statSync(path: string): any;\n mkdir(path: string, options?: { recursive?: boolean }): Promise<void>;\n mkdirSync(path: string, options?: { recursive?: boolean }): void;\n readDir(path: string): AsyncIterable<any>;\n readDirSync(path: string): Iterable<any>;\n remove(path: string, options?: { recursive?: boolean }): Promise<void>;\n removeSync(path: string, options?: { recursive?: boolean }): void;\n rename(oldPath: string, newPath: string): Promise<void>;\n renameSync(oldPath: string, newPath: string): void;\n copyFile(src: string, dest: string): Promise<void>;\n copyFileSync(src: string, dest: string): void;\n realPath(path: string): Promise<string>;\n realPathSync(path: string): string;\n watchFs(paths: string | string[]): AsyncIterable<{\n kind: string;\n paths: string[];\n }>;\n build: {\n os: string;\n };\n } | undefined;\n}\n","/**\n * File System module with unified API across runtimes\n * Compatible with Node.js 'fs' module API\n * - Node.js: uses 'fs' module\n * - Bun: uses Bun.file() and native APIs\n * - Deno: uses Deno.readFile(), etc.\n */\n\nimport { runtime, isNode, isBun, isDeno } from './runtime';\n\n/**\n * Helper: Check if runtime is Bun or Deno (eliminates duplication in Deno API calls)\n */\nconst isBunOrDeno = isBun || isDeno;\n\n/**\n * Helper: Parse options from string or object (eliminates duplication in options parsing)\n */\nfunction parseOptions<T>(options: T | string | undefined, defaultValue: T): T {\n return typeof options === 'string' ? { encoding: options } as T : options || defaultValue;\n}\n\n/**\n * Helper: Decode content with optional encoding (eliminates duplication in read operations)\n */\nfunction decodeContent(content: ArrayBuffer | Uint8Array, encoding?: string | null): string | Buffer {\n if (encoding) {\n return new TextDecoder(encoding).decode(content);\n }\n return Buffer.from(content instanceof ArrayBuffer ? new Uint8Array(content) : content);\n}\n\n/**\n * Helper: Convert data to Uint8Array (eliminates duplication in write operations)\n */\nfunction dataToUint8Array(data: string | Buffer | Uint8Array): Uint8Array {\n if (typeof data === 'string') {\n return new TextEncoder().encode(data);\n }\n if (data instanceof Buffer) {\n return new Uint8Array(data);\n }\n return data;\n}\n\n/**\n * Helper: Process directory entries (eliminates duplication in readdir operations)\n */\nfunction processDenoEntries(iterator: any, withFileTypes?: boolean): any[] {\n const entries: any[] = [];\n for (const entry of iterator) {\n if (withFileTypes) {\n entries.push(createDirentFromDenoEntry(entry));\n } else {\n entries.push(entry.name);\n }\n }\n return entries;\n}\n\n/**\n * Helper: Process directory entries async (eliminates duplication in async readdir)\n */\nasync function processDenoEntriesAsync(iterator: any, withFileTypes?: boolean): Promise<any[]> {\n const entries: any[] = [];\n for await (const entry of iterator) {\n if (withFileTypes) {\n entries.push(createDirentFromDenoEntry(entry));\n } else {\n entries.push(entry.name);\n }\n }\n return entries;\n}\n\n// Pre-load fs module for Node.js\nlet fs: any, fsPromises: any;\nif (isNode) {\n fs = require('fs');\n fsPromises = require('fs/promises');\n}\n\n/**\n * File encoding types\n */\nexport type BufferEncoding =\n | 'ascii' | 'utf8' | 'utf-8' | 'utf16le' | 'ucs2' | 'ucs-2'\n | 'base64' | 'base64url' | 'latin1' | 'binary' | 'hex';\n\n/**\n * Read file options\n */\nexport interface ReadFileOptions {\n encoding?: BufferEncoding | null;\n flag?: string;\n signal?: AbortSignal;\n}\n\n/**\n * Write file options\n */\nexport interface WriteFileOptions {\n encoding?: BufferEncoding | null;\n mode?: number;\n flag?: string;\n signal?: AbortSignal;\n}\n\n/**\n * Mkdir options\n */\nexport interface MkdirOptions {\n recursive?: boolean;\n mode?: number;\n}\n\n/**\n * Readdir options\n */\nexport interface ReaddirOptions {\n encoding?: BufferEncoding | null;\n withFileTypes?: boolean;\n recursive?: boolean;\n}\n\n/**\n * File stats\n */\nexport interface Stats {\n isFile(): boolean;\n isDirectory(): boolean;\n isBlockDevice(): boolean;\n isCharacterDevice(): boolean;\n isSymbolicLink(): boolean;\n isFIFO(): boolean;\n isSocket(): boolean;\n dev: number;\n ino: number;\n mode: number;\n nlink: number;\n uid: number;\n gid: number;\n rdev: number;\n size: number;\n blksize: number;\n blocks: number;\n atimeMs: number;\n mtimeMs: number;\n ctimeMs: number;\n birthtimeMs: number;\n atime: Date;\n mtime: Date;\n ctime: Date;\n birthtime: Date;\n}\n\n/**\n * Directory entry\n */\nexport interface Dirent {\n name: string;\n isFile(): boolean;\n isDirectory(): boolean;\n isBlockDevice(): boolean;\n isCharacterDevice(): boolean;\n isSymbolicLink(): boolean;\n isFIFO(): boolean;\n isSocket(): boolean;\n}\n\n/**\n * Read file (async)\n */\nexport async function readFile(path: string, options?: ReadFileOptions | BufferEncoding): Promise<string | Buffer> {\n const opts = parseOptions<ReadFileOptions>(options, {});\n\n if (isNode) {\n return fsPromises.readFile(path, opts);\n } else if (isBun) {\n // @ts-ignore\n const file = Bun.file(path);\n const content = await file.arrayBuffer();\n return decodeContent(content, opts.encoding);\n } else if (isDeno) {\n // @ts-ignore\n const content = await Deno.readFile(path);\n return decodeContent(content, opts.encoding);\n }\n\n throw new Error('Unsupported runtime');\n}\n\n/**\n * Read file (sync)\n */\nexport function readFileSync(path: string, options?: ReadFileOptions | BufferEncoding): string | Buffer {\n const opts = parseOptions<ReadFileOptions>(options, {});\n\n if (isNode) {\n return fs.readFileSync(path, opts);\n } else if (isBun) {\n // @ts-ignore\n const file = Bun.file(path);\n const content = file.arrayBuffer();\n return decodeContent(content as ArrayBuffer, opts.encoding);\n } else if (isDeno) {\n // @ts-ignore\n const content = Deno.readFileSync(path);\n return decodeContent(content, opts.encoding);\n }\n\n throw new Error('Unsupported runtime');\n}\n\n/**\n * Write file (async)\n */\nexport async function writeFile(path: string, data: string | Buffer | Uint8Array, options?: WriteFileOptions | BufferEncoding): Promise<void> {\n const opts = parseOptions<WriteFileOptions>(options, {});\n\n if (isNode) {\n return fsPromises.writeFile(path, data, opts);\n } else if (isBun) {\n // @ts-ignore\n await Bun.write(path, data);\n } else if (isDeno) {\n // @ts-ignore\n await Deno.writeFile(path, dataToUint8Array(data));\n }\n}\n\n/**\n * Write file (sync)\n */\nexport function writeFileSync(path: string, data: string | Buffer | Uint8Array, options?: WriteFileOptions | BufferEncoding): void {\n const opts = parseOptions<WriteFileOptions>(options, {});\n\n if (isNode) {\n fs.writeFileSync(path, data, opts);\n } else if (isBun) {\n // @ts-ignore\n Bun.write(path, data);\n } else if (isDeno) {\n // @ts-ignore\n Deno.writeFileSync(path, dataToUint8Array(data));\n }\n}\n\n/**\n * Append file (async)\n */\nexport async function appendFile(path: string, data: string | Buffer, options?: WriteFileOptions | BufferEncoding): Promise<void> {\n const opts = parseOptions<WriteFileOptions>(options, {});\n\n if (isNode) {\n return fsPromises.appendFile(path, data, opts);\n } else {\n if (await exists(path)) {\n const existing = await readFile(path);\n const combined = Buffer.isBuffer(existing)\n ? Buffer.concat([existing, Buffer.isBuffer(data) ? data : Buffer.from(data)])\n : existing + (Buffer.isBuffer(data) ? data.toString() : data);\n await writeFile(path, combined, opts);\n } else {\n await writeFile(path, data, opts);\n }\n }\n}\n\n/**\n * Append file (sync)\n */\nexport function appendFileSync(path: string, data: string | Buffer, options?: WriteFileOptions | BufferEncoding): void {\n const opts = parseOptions<WriteFileOptions>(options, {});\n\n if (isNode) {\n fs.appendFileSync(path, data, opts);\n } else {\n if (existsSync(path)) {\n const existing = readFileSync(path);\n const combined = Buffer.isBuffer(existing)\n ? Buffer.concat([existing, Buffer.isBuffer(data) ? data : Buffer.from(data)])\n : existing + (Buffer.isBuffer(data) ? data.toString() : data);\n writeFileSync(path, combined, opts);\n } else {\n writeFileSync(path, data, opts);\n }\n }\n}\n\n/**\n * Check if file/directory exists (async)\n */\nexport async function exists(path: string): Promise<boolean> {\n try {\n await stat(path);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Check if file/directory exists (sync)\n */\nexport function existsSync(path: string): boolean {\n try {\n statSync(path);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Get file stats (async)\n */\nexport async function stat(path: string): Promise<Stats> {\n if (isNode) {\n return fsPromises.stat(path);\n } else if (isBun) {\n // @ts-ignore\n const file = Bun.file(path);\n const size = file.size;\n const exists = await file.exists();\n\n if (!exists) {\n throw new Error(`ENOENT: no such file or directory, stat '${path}'`);\n }\n\n // Create a Stats-like object\n return createStatsObject(path, size, false);\n } else if (isDeno) {\n // @ts-ignore\n const info = await Deno.stat(path);\n return createStatsFromDenoFileInfo(info);\n }\n\n throw new Error('Unsupported runtime');\n}\n\n/**\n * Get file stats (sync)\n */\nexport function statSync(path: string): Stats {\n if (isNode) {\n return fs.statSync(path);\n } else if (isBun) {\n // @ts-ignore\n const file = Bun.file(path);\n const size = file.size;\n\n // Bun doesn't have sync exists check, so we try to read\n try {\n file.arrayBuffer();\n } catch {\n throw new Error(`ENOENT: no such file or directory, stat '${path}'`);\n }\n\n return createStatsObject(path, size, false);\n } else if (isDeno) {\n // @ts-ignore\n const info = Deno.statSync(path);\n return createStatsFromDenoFileInfo(info);\n }\n\n throw new Error('Unsupported runtime');\n}\n\n/**\n * Create directory (async)\n */\nexport async function mkdir(path: string, options?: MkdirOptions | number): Promise<void> {\n const opts = typeof options === 'number' ? { mode: options } as MkdirOptions : options || {};\n\n if (isNode) {\n await fsPromises.mkdir(path, opts);\n } else if (isBun) {\n // @ts-ignore\n await Deno.mkdir(path, { recursive: opts.recursive });\n } else if (isDeno) {\n // @ts-ignore\n await Deno.mkdir(path, { recursive: opts.recursive });\n }\n}\n\n/**\n * Create directory (sync)\n */\nexport function mkdirSync(path: string, options?: MkdirOptions | number): void {\n const opts = typeof options === 'number' ? { mode: options } as MkdirOptions : options || {};\n\n if (isNode) {\n fs.mkdirSync(path, opts);\n } else if (isBun) {\n // @ts-ignore\n Deno.mkdirSync(path, { recursive: opts.recursive });\n } else if (isDeno) {\n // @ts-ignore\n Deno.mkdirSync(path, { recursive: opts.recursive });\n }\n}\n\n/**\n * Read directory (async)\n */\nexport async function readdir(path: string, options?: ReaddirOptions | BufferEncoding): Promise<string[] | Dirent[]> {\n const opts = parseOptions<ReaddirOptions>(options, {});\n\n if (isNode) {\n return fsPromises.readdir(path, opts);\n } else if (isBunOrDeno) {\n // @ts-ignore\n return processDenoEntriesAsync(Deno.readDir(path), opts.withFileTypes);\n }\n\n throw new Error('Unsupported runtime');\n}\n\n/**\n * Read directory (sync)\n */\nexport function readdirSync(path: string, options?: ReaddirOptions | BufferEncoding): string[] | Dirent[] {\n const opts = parseOptions<ReaddirOptions>(options, {});\n\n if (isNode) {\n return fs.readdirSync(path, opts);\n } else if (isBunOrDeno) {\n // @ts-ignore\n return processDenoEntries(Deno.readDirSync(path), opts.withFileTypes);\n }\n\n throw new Error('Unsupported runtime');\n}\n\n/**\n * Remove file (async)\n */\nexport async function unlink(path: string): Promise<void> {\n if (isNode) {\n return fsPromises.unlink(path);\n } else if (isBun) {\n // @ts-ignore\n await Deno.remove(path);\n } else if (isDeno) {\n // @ts-ignore\n await Deno.remove(path);\n }\n}\n\n/**\n * Remove file (sync)\n */\nexport function unlinkSync(path: string): void {\n if (isNode) {\n fs.unlinkSync(path);\n } else if (isBun) {\n // @ts-ignore\n Deno.removeSync(path);\n } else if (isDeno) {\n // @ts-ignore\n Deno.removeSync(path);\n }\n}\n\n/**\n * Remove directory (async)\n */\nexport async function rmdir(path: string, options?: { recursive?: boolean }): Promise<void> {\n if (isNode) {\n return fsPromises.rmdir(path, options);\n } else if (isBun) {\n // @ts-ignore\n await Deno.remove(path, { recursive: options?.recursive });\n } else if (isDeno) {\n // @ts-ignore\n await Deno.remove(path, { recursive: options?.recursive });\n }\n}\n\n/**\n * Remove directory (sync)\n */\nexport function rmdirSync(path: string, options?: { recursive?: boolean }): void {\n if (isNode) {\n fs.rmdirSync(path, options);\n } else if (isBun) {\n // @ts-ignore\n Deno.removeSync(path, { recursive: options?.recursive });\n } else if (isDeno) {\n // @ts-ignore\n Deno.removeSync(path, { recursive: options?.recursive });\n }\n}\n\n/**\n * Rename/move file (async)\n */\nexport async function rename(oldPath: string, newPath: string): Promise<void> {\n if (isNode) {\n return fsPromises.rename(oldPath, newPath);\n } else if (isBun) {\n // @ts-ignore\n await Deno.rename(oldPath, newPath);\n } else if (isDeno) {\n // @ts-ignore\n await Deno.rename(oldPath, newPath);\n }\n}\n\n/**\n * Rename/move file (sync)\n */\nexport function renameSync(oldPath: string, newPath: string): void {\n if (isNode) {\n fs.renameSync(oldPath, newPath);\n } else if (isBun) {\n // @ts-ignore\n Deno.renameSync(oldPath, newPath);\n } else if (isDeno) {\n // @ts-ignore\n Deno.renameSync(oldPath, newPath);\n }\n}\n\n/**\n * Copy file (async)\n */\nexport async function copyFile(src: string, dest: string, flags?: number): Promise<void> {\n if (isNode) {\n return fsPromises.copyFile(src, dest, flags);\n } else if (isBun) {\n // @ts-ignore\n await Deno.copyFile(src, dest);\n } else if (isDeno) {\n // @ts-ignore\n await Deno.copyFile(src, dest);\n }\n}\n\n/**\n * Copy file (sync)\n */\nexport function copyFileSync(src: string, dest: string, flags?: number): void {\n if (isNode) {\n fs.copyFileSync(src, dest, flags);\n } else if (isBun) {\n // @ts-ignore\n Deno.copyFileSync(src, dest);\n } else if (isDeno) {\n // @ts-ignore\n Deno.copyFileSync(src, dest);\n }\n}\n\n/**\n * Resolve pathname to absolute path (async)\n */\nexport async function realpath(path: string, options?: { encoding?: BufferEncoding }): Promise<string> {\n if (isNode) {\n return fsPromises.realpath(path, options);\n } else if (isBun) {\n // Bun supports fs.promises.realpath\n const fs = require('fs/promises');\n return fs.realpath(path, options);\n } else if (isDeno) {\n // @ts-ignore\n return await Deno.realPath(path);\n }\n return path;\n}\n\n/**\n * Resolve pathname to absolute path (sync)\n */\nexport function realpathSync(path: string, options?: { encoding?: BufferEncoding }): string {\n if (isNode) {\n return fs.realpathSync(path, options);\n } else if (isBun) {\n // Bun supports fs.realpathSync\n const fs = require('fs');\n return fs.realpathSync(path, options);\n } else if (isDeno) {\n // @ts-ignore\n return Deno.realPathSync(path);\n }\n return path;\n}\n\n/**\n * Helper: Create Stats object\n */\nfunction createStatsObject(_path: string, size: number, isDir: boolean): Stats {\n const now = Date.now();\n return {\n isFile: () => !isDir,\n isDirectory: () => isDir,\n isBlockDevice: () => false,\n isCharacterDevice: () => false,\n isSymbolicLink: () => false,\n isFIFO: () => false,\n isSocket: () => false,\n dev: 0,\n ino: 0,\n mode: isDir ? 16877 : 33188,\n nlink: 1,\n uid: 0,\n gid: 0,\n rdev: 0,\n size,\n blksize: 4096,\n blocks: Math.ceil(size / 512),\n atimeMs: now,\n mtimeMs: now,\n ctimeMs: now,\n birthtimeMs: now,\n atime: new Date(now),\n mtime: new Date(now),\n ctime: new Date(now),\n birthtime: new Date(now),\n };\n}\n\n/**\n * Helper: Create Stats from Deno FileInfo\n */\nfunction createStatsFromDenoFileInfo(info: any): Stats {\n return {\n isFile: () => info.isFile,\n isDirectory: () => info.isDirectory,\n isBlockDevice: () => false,\n isCharacterDevice: () => false,\n isSymbolicLink: () => info.isSymlink || false,\n isFIFO: () => false,\n isSocket: () => false,\n dev: info.dev || 0,\n ino: info.ino || 0,\n mode: info.mode || 0,\n nlink: info.nlink || 1,\n uid: info.uid || 0,\n gid: info.gid || 0,\n rdev: 0,\n size: info.size,\n blksize: info.blksize || 4096,\n blocks: info.blocks || Math.ceil(info.size / 512),\n atimeMs: info.atime?.getTime() || Date.now(),\n mtimeMs: info.mtime?.getTime() || Date.now(),\n ctimeMs: info.birthtime?.getTime() || Date.now(),\n birthtimeMs: info.birthtime?.getTime() || Date.now(),\n atime: info.atime || new Date(),\n mtime: info.mtime || new Date(),\n ctime: info.birthtime || new Date(),\n birthtime: info.birthtime || new Date(),\n };\n}\n\n/**\n * Helper: Create Dirent from Deno DirEntry\n */\nfunction createDirentFromDenoEntry(entry: any): Dirent {\n return {\n name: entry.name,\n isFile: () => entry.isFile,\n isDirectory: () => entry.isDirectory,\n isBlockDevice: () => false,\n isCharacterDevice: () => false,\n isSymbolicLink: () => entry.isSymlink || false,\n isFIFO: () => false,\n isSocket: () => false,\n };\n}\n\n/**\n * Get current runtime\n */\nexport function getRuntime(): 'node' | 'bun' | 'deno' {\n return runtime;\n}\n\n/**\n * Promises API (re-export for compatibility)\n */\nexport const promises = {\n readFile,\n writeFile,\n appendFile,\n stat,\n mkdir,\n readdir,\n unlink,\n rmdir,\n rename,\n copyFile,\n realpath,\n};\n\n/**\n * Default export\n */\nexport default {\n readFile,\n readFileSync,\n writeFile,\n writeFileSync,\n appendFile,\n appendFileSync,\n exists,\n existsSync,\n stat,\n statSync,\n mkdir,\n mkdirSync,\n readdir,\n readdirSync,\n unlink,\n unlinkSync,\n rmdir,\n rmdirSync,\n rename,\n renameSync,\n copyFile,\n copyFileSync,\n realpath,\n realpathSync,\n promises,\n getRuntime,\n};\n"],"mappings":"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","names":["exists","fs"]}
|
package/dist/hmr.js
CHANGED
package/dist/hmr.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/hmr.ts"],"sourcesContent":["/**\n * Client-side HMR runtime for Elit\n * Import this in your app to enable hot module replacement\n */\n\nexport interface HMRClient {\n /** Check if HMR is enabled */\n enabled: boolean;\n /** Manually reload the page */\n reload: () => void;\n /** Accept HMR updates for current module */\n accept: (callback?: () => void) => void;\n /** Decline HMR updates (forces full reload) */\n decline: () => void;\n /** Dispose callback before module is replaced */\n dispose: (callback: () => void) => void;\n}\n\ndeclare global {\n interface Window {\n __ELIT_HMR__: HMRClient;\n }\n}\n\nclass ElitHMR implements HMRClient {\n enabled = false;\n private ws: WebSocket | null = null;\n private acceptCallbacks: (() => void)[] = [];\n private disposeCallbacks: (() => void)[] = [];\n private declined = false;\n\n constructor() {\n if (typeof window === 'undefined') {\n return;\n }\n\n // Skip HMR for file:// protocol\n if (window.location.protocol === 'file:') {\n console.log('[Elit HMR] Disabled for file:// protocol');\n return;\n }\n\n this.connect();\n }\n\n private connect() {\n const protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:';\n const host = window.location.hostname;\n const port = window.location.port || '3000';\n\n this.ws = new WebSocket(`${protocol}//${host}:${port}`);\n\n this.ws.onopen = () => {\n this.enabled = true;\n console.log('[Elit HMR] Connected ✓');\n };\n\n this.ws.onmessage = (event) => {\n try {\n const data = JSON.parse(event.data);\n this.handleMessage(data);\n } catch (error) {\n console.error('[Elit HMR] Error parsing message:', error);\n }\n };\n\n this.ws.onclose = () => {\n this.enabled = false;\n console.log('[Elit HMR] Disconnected - HMR disabled until manual refresh');\n // Don't auto-reload, let user decide when to refresh\n };\n\n this.ws.onerror = (error) => {\n console.error('[Elit HMR] WebSocket error:', error);\n };\n }\n\n private handleMessage(data: any) {\n switch (data.type) {\n case 'connected':\n console.log('[Elit HMR] Ready');\n break;\n\n case 'update':\n console.log(`[Elit HMR] Update detected: ${data.path}`);\n\n if (this.declined) {\n this.reload();\n return;\n }\n\n // Run dispose callbacks\n this.disposeCallbacks.forEach(cb => cb());\n this.disposeCallbacks = [];\n\n // Run accept callbacks or log (don't auto-reload)\n if (this.acceptCallbacks.length > 0) {\n this.acceptCallbacks.forEach(cb => cb());\n console.log('[Elit HMR] Update accepted via callback');\n } else {\n console.log('[Elit HMR] Update detected - manually refresh to see changes');\n }\n break;\n\n case 'reload':\n console.log('[Elit HMR] Full reload requested - manually refresh to see changes');\n // Don't auto-reload\n break;\n\n case 'error':\n console.error('[Elit HMR] Server error:', data.error);\n break;\n }\n }\n\n reload() {\n window.location.reload();\n }\n\n accept(callback?: () => void) {\n if (callback) {\n this.acceptCallbacks.push(callback);\n }\n this.declined = false;\n }\n\n decline() {\n this.declined = true;\n }\n\n dispose(callback: () => void) {\n this.disposeCallbacks.push(callback);\n }\n}\n\n// Create singleton instance\nconst hmr = new ElitHMR();\n\n// Expose globally\nif (typeof window !== 'undefined') {\n window.__ELIT_HMR__ = hmr;\n}\n\nexport default hmr;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAwBA,IAAM,UAAN,MAAmC;AAAA,EAOjC,cAAc;AANd,mBAAU;AACV,SAAQ,KAAuB;AAC/B,SAAQ,kBAAkC,CAAC;AAC3C,SAAQ,mBAAmC,CAAC;AAC5C,SAAQ,WAAW;AAGjB,QAAI,OAAO,WAAW,aAAa;AACjC;AAAA,IACF;AAGA,QAAI,OAAO,SAAS,aAAa,SAAS;AACxC,cAAQ,IAAI,0CAA0C;AACtD;AAAA,IACF;AAEA,SAAK,QAAQ;AAAA,EACf;AAAA,EAEQ,UAAU;AAChB,UAAM,WAAW,OAAO,SAAS,aAAa,WAAW,SAAS;AAClE,UAAM,OAAO,OAAO,SAAS;AAC7B,UAAM,OAAO,OAAO,SAAS,QAAQ;AAErC,SAAK,KAAK,IAAI,UAAU,GAAG,QAAQ,KAAK,IAAI,IAAI,IAAI,EAAE;AAEtD,SAAK,GAAG,SAAS,MAAM;AACrB,WAAK,UAAU;AACf,cAAQ,IAAI,6BAAwB;AAAA,IACtC;AAEA,SAAK,GAAG,YAAY,CAAC,UAAU;AAC7B,UAAI;AACF,cAAM,OAAO,KAAK,MAAM,MAAM,IAAI;AAClC,aAAK,cAAc,IAAI;AAAA,MACzB,SAAS,OAAO;AACd,gBAAQ,MAAM,qCAAqC,KAAK;AAAA,MAC1D;AAAA,IACF;AAEA,SAAK,GAAG,UAAU,MAAM;AACtB,WAAK,UAAU;AACf,cAAQ,IAAI,6DAA6D;AAAA,IAE3E;AAEA,SAAK,GAAG,UAAU,CAAC,UAAU;AAC3B,cAAQ,MAAM,+BAA+B,KAAK;AAAA,IACpD;AAAA,EACF;AAAA,EAEQ,cAAc,MAAW;AAC/B,YAAQ,KAAK,MAAM;AAAA,MACjB,KAAK;AACH,gBAAQ,IAAI,kBAAkB;AAC9B;AAAA,MAEF,KAAK;AACH,gBAAQ,IAAI,+BAA+B,KAAK,IAAI,EAAE;AAEtD,YAAI,KAAK,UAAU;AACjB,eAAK,OAAO;AACZ;AAAA,QACF;AAGA,aAAK,iBAAiB,QAAQ,QAAM,GAAG,CAAC;AACxC,aAAK,mBAAmB,CAAC;AAGzB,YAAI,KAAK,gBAAgB,SAAS,GAAG;AACnC,eAAK,gBAAgB,QAAQ,QAAM,GAAG,CAAC;AACvC,kBAAQ,IAAI,yCAAyC;AAAA,QACvD,OAAO;AACL,kBAAQ,IAAI,8DAA8D;AAAA,QAC5E;AACA;AAAA,MAEF,KAAK;AACH,gBAAQ,IAAI,oEAAoE;AAEhF;AAAA,MAEF,KAAK;AACH,gBAAQ,MAAM,4BAA4B,KAAK,KAAK;AACpD;AAAA,IACJ;AAAA,EACF;AAAA,EAEA,SAAS;AACP,WAAO,SAAS,OAAO;AAAA,EACzB;AAAA,EAEA,OAAO,UAAuB;AAC5B,QAAI,UAAU;AACZ,WAAK,gBAAgB,KAAK,QAAQ;AAAA,IACpC;AACA,SAAK,WAAW;AAAA,EAClB;AAAA,EAEA,UAAU;AACR,SAAK,WAAW;AAAA,EAClB;AAAA,EAEA,QAAQ,UAAsB;AAC5B,SAAK,iBAAiB,KAAK,QAAQ;AAAA,EACrC;AACF;AAGA,IAAM,MAAM,IAAI,QAAQ;AAGxB,IAAI,OAAO,WAAW,aAAa;AACjC,SAAO,eAAe;AACxB;AAEA,IAAO,cAAQ;","names":[]}
|
package/dist/hmr.mjs
CHANGED
package/dist/hmr.mjs.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/hmr.ts"],"sourcesContent":["/**\n * Client-side HMR runtime for Elit\n * Import this in your app to enable hot module replacement\n */\n\nexport interface HMRClient {\n /** Check if HMR is enabled */\n enabled: boolean;\n /** Manually reload the page */\n reload: () => void;\n /** Accept HMR updates for current module */\n accept: (callback?: () => void) => void;\n /** Decline HMR updates (forces full reload) */\n decline: () => void;\n /** Dispose callback before module is replaced */\n dispose: (callback: () => void) => void;\n}\n\ndeclare global {\n interface Window {\n __ELIT_HMR__: HMRClient;\n }\n}\n\nclass ElitHMR implements HMRClient {\n enabled = false;\n private ws: WebSocket | null = null;\n private acceptCallbacks: (() => void)[] = [];\n private disposeCallbacks: (() => void)[] = [];\n private declined = false;\n\n constructor() {\n if (typeof window === 'undefined') {\n return;\n }\n\n // Skip HMR for file:// protocol\n if (window.location.protocol === 'file:') {\n console.log('[Elit HMR] Disabled for file:// protocol');\n return;\n }\n\n this.connect();\n }\n\n private connect() {\n const protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:';\n const host = window.location.hostname;\n const port = window.location.port || '3000';\n\n this.ws = new WebSocket(`${protocol}//${host}:${port}`);\n\n this.ws.onopen = () => {\n this.enabled = true;\n console.log('[Elit HMR] Connected ✓');\n };\n\n this.ws.onmessage = (event) => {\n try {\n const data = JSON.parse(event.data);\n this.handleMessage(data);\n } catch (error) {\n console.error('[Elit HMR] Error parsing message:', error);\n }\n };\n\n this.ws.onclose = () => {\n this.enabled = false;\n console.log('[Elit HMR] Disconnected - HMR disabled until manual refresh');\n // Don't auto-reload, let user decide when to refresh\n };\n\n this.ws.onerror = (error) => {\n console.error('[Elit HMR] WebSocket error:', error);\n };\n }\n\n private handleMessage(data: any) {\n switch (data.type) {\n case 'connected':\n console.log('[Elit HMR] Ready');\n break;\n\n case 'update':\n console.log(`[Elit HMR] Update detected: ${data.path}`);\n\n if (this.declined) {\n this.reload();\n return;\n }\n\n // Run dispose callbacks\n this.disposeCallbacks.forEach(cb => cb());\n this.disposeCallbacks = [];\n\n // Run accept callbacks or log (don't auto-reload)\n if (this.acceptCallbacks.length > 0) {\n this.acceptCallbacks.forEach(cb => cb());\n console.log('[Elit HMR] Update accepted via callback');\n } else {\n console.log('[Elit HMR] Update detected - manually refresh to see changes');\n }\n break;\n\n case 'reload':\n console.log('[Elit HMR] Full reload requested - manually refresh to see changes');\n // Don't auto-reload\n break;\n\n case 'error':\n console.error('[Elit HMR] Server error:', data.error);\n break;\n }\n }\n\n reload() {\n window.location.reload();\n }\n\n accept(callback?: () => void) {\n if (callback) {\n this.acceptCallbacks.push(callback);\n }\n this.declined = false;\n }\n\n decline() {\n this.declined = true;\n }\n\n dispose(callback: () => void) {\n this.disposeCallbacks.push(callback);\n }\n}\n\n// Create singleton instance\nconst hmr = new ElitHMR();\n\n// Expose globally\nif (typeof window !== 'undefined') {\n window.__ELIT_HMR__ = hmr;\n}\n\nexport default hmr;\n"],"mappings":";AAwBA,IAAM,UAAN,MAAmC;AAAA,EAOjC,cAAc;AANd,mBAAU;AACV,SAAQ,KAAuB;AAC/B,SAAQ,kBAAkC,CAAC;AAC3C,SAAQ,mBAAmC,CAAC;AAC5C,SAAQ,WAAW;AAGjB,QAAI,OAAO,WAAW,aAAa;AACjC;AAAA,IACF;AAGA,QAAI,OAAO,SAAS,aAAa,SAAS;AACxC,cAAQ,IAAI,0CAA0C;AACtD;AAAA,IACF;AAEA,SAAK,QAAQ;AAAA,EACf;AAAA,EAEQ,UAAU;AAChB,UAAM,WAAW,OAAO,SAAS,aAAa,WAAW,SAAS;AAClE,UAAM,OAAO,OAAO,SAAS;AAC7B,UAAM,OAAO,OAAO,SAAS,QAAQ;AAErC,SAAK,KAAK,IAAI,UAAU,GAAG,QAAQ,KAAK,IAAI,IAAI,IAAI,EAAE;AAEtD,SAAK,GAAG,SAAS,MAAM;AACrB,WAAK,UAAU;AACf,cAAQ,IAAI,6BAAwB;AAAA,IACtC;AAEA,SAAK,GAAG,YAAY,CAAC,UAAU;AAC7B,UAAI;AACF,cAAM,OAAO,KAAK,MAAM,MAAM,IAAI;AAClC,aAAK,cAAc,IAAI;AAAA,MACzB,SAAS,OAAO;AACd,gBAAQ,MAAM,qCAAqC,KAAK;AAAA,MAC1D;AAAA,IACF;AAEA,SAAK,GAAG,UAAU,MAAM;AACtB,WAAK,UAAU;AACf,cAAQ,IAAI,6DAA6D;AAAA,IAE3E;AAEA,SAAK,GAAG,UAAU,CAAC,UAAU;AAC3B,cAAQ,MAAM,+BAA+B,KAAK;AAAA,IACpD;AAAA,EACF;AAAA,EAEQ,cAAc,MAAW;AAC/B,YAAQ,KAAK,MAAM;AAAA,MACjB,KAAK;AACH,gBAAQ,IAAI,kBAAkB;AAC9B;AAAA,MAEF,KAAK;AACH,gBAAQ,IAAI,+BAA+B,KAAK,IAAI,EAAE;AAEtD,YAAI,KAAK,UAAU;AACjB,eAAK,OAAO;AACZ;AAAA,QACF;AAGA,aAAK,iBAAiB,QAAQ,QAAM,GAAG,CAAC;AACxC,aAAK,mBAAmB,CAAC;AAGzB,YAAI,KAAK,gBAAgB,SAAS,GAAG;AACnC,eAAK,gBAAgB,QAAQ,QAAM,GAAG,CAAC;AACvC,kBAAQ,IAAI,yCAAyC;AAAA,QACvD,OAAO;AACL,kBAAQ,IAAI,8DAA8D;AAAA,QAC5E;AACA;AAAA,MAEF,KAAK;AACH,gBAAQ,IAAI,oEAAoE;AAEhF;AAAA,MAEF,KAAK;AACH,gBAAQ,MAAM,4BAA4B,KAAK,KAAK;AACpD;AAAA,IACJ;AAAA,EACF;AAAA,EAEA,SAAS;AACP,WAAO,SAAS,OAAO;AAAA,EACzB;AAAA,EAEA,OAAO,UAAuB;AAC5B,QAAI,UAAU;AACZ,WAAK,gBAAgB,KAAK,QAAQ;AAAA,IACpC;AACA,SAAK,WAAW;AAAA,EAClB;AAAA,EAEA,UAAU;AACR,SAAK,WAAW;AAAA,EAClB;AAAA,EAEA,QAAQ,UAAsB;AAC5B,SAAK,iBAAiB,KAAK,QAAQ;AAAA,EACrC;AACF;AAGA,IAAM,MAAM,IAAI,QAAQ;AAGxB,IAAI,OAAO,WAAW,aAAa;AACjC,SAAO,eAAe;AACxB;AAEA,IAAO,cAAQ;","names":[]}
|
package/dist/http.js
CHANGED
package/dist/http.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/http.ts","../src/runtime.ts"],"sourcesContent":["/**\n * HTTP module with unified API across runtimes\n * Ultra-optimized for maximum performance across Node.js, Bun, and Deno\n *\n * Performance optimizations:\n * - Bun fast path: Zero class instantiation (object literals only)\n * - Eliminated EventEmitter overhead for Bun/Deno\n * - Zero-copy headers conversion\n * - Inline response creation\n * - Reduced object allocations\n * - Direct closure capture (no resolver indirection)\n */\n\nimport { EventEmitter } from 'node:events';\nimport { runtime, isBun, isDeno, isNode } from './runtime';\n\n/**\n * Helper: Check if running on Node.js (eliminates duplication in runtime checks)\n */\n\n\n/**\n * Helper: Queue callback (eliminates duplication in callback handling)\n */\nfunction queueCallback(callback?: () => void): void {\n if (callback) queueMicrotask(callback);\n}\n\n/**\n * Helper: Convert headers to HeadersInit (eliminates duplication in Response creation)\n */\nfunction headersToInit(headers: OutgoingHttpHeaders): HeadersInit {\n const result: HeadersInit = {};\n for (const key in headers) {\n const value = headers[key];\n result[key] = Array.isArray(value) ? value.join(', ') : String(value);\n }\n return result;\n}\n\n/**\n * Helper: Create address object (eliminates duplication in address() method)\n */\nfunction createAddress(port: number, address: string, family = 'IPv4'): { port: number; family: string; address: string } {\n return { port, family, address };\n}\n\n/**\n * Helper: Create error Response (eliminates duplication in error handling)\n */\nfunction createErrorResponse(): Response {\n return new Response('Internal Server Error', { status: 500 });\n}\n\n/**\n * Helper: Emit listening and queue callback (eliminates duplication in Bun/Deno listen)\n */\nfunction emitListeningWithCallback(server: Server, callback?: () => void): void {\n server._listening = true;\n server.emit('listening');\n queueCallback(callback);\n}\n\n/**\n * Helper: Close server and emit events (eliminates duplication in Bun/Deno close)\n */\nfunction closeAndEmit(server: Server, callback?: (err?: Error) => void): void {\n server._listening = false;\n server.emit('close');\n if (callback) queueMicrotask(() => callback());\n}\n\n// Lazy-load native modules for Node.js\nlet http: any, https: any;\n\n// Initialize immediately for Node.js (synchronous require)\nif (isNode && typeof process !== 'undefined') {\n try {\n http = require('node:http');\n https = require('node:https');\n } catch (e) {\n // Fallback for older Node versions\n http = require('http');\n https = require('https');\n }\n}\n\n/**\n * HTTP Methods\n */\nexport const METHODS = [\n 'GET', 'POST', 'PUT', 'DELETE', 'PATCH',\n 'HEAD', 'OPTIONS', 'CONNECT', 'TRACE'\n] as const;\n\n/**\n * HTTP Status Codes (compact object)\n */\nexport const STATUS_CODES: Record<number, string> = {\n 100: 'Continue', 101: 'Switching Protocols', 102: 'Processing',\n 200: 'OK', 201: 'Created', 202: 'Accepted', 203: 'Non-Authoritative Information',\n 204: 'No Content', 205: 'Reset Content', 206: 'Partial Content',\n 300: 'Multiple Choices', 301: 'Moved Permanently', 302: 'Found',\n 303: 'See Other', 304: 'Not Modified', 307: 'Temporary Redirect', 308: 'Permanent Redirect',\n 400: 'Bad Request', 401: 'Unauthorized', 402: 'Payment Required', 403: 'Forbidden',\n 404: 'Not Found', 405: 'Method Not Allowed', 406: 'Not Acceptable',\n 407: 'Proxy Authentication Required', 408: 'Request Timeout', 409: 'Conflict',\n 410: 'Gone', 411: 'Length Required', 412: 'Precondition Failed',\n 413: 'Payload Too Large', 414: 'URI Too Long', 415: 'Unsupported Media Type',\n 416: 'Range Not Satisfiable', 417: 'Expectation Failed', 418: \"I'm a teapot\",\n 422: 'Unprocessable Entity', 425: 'Too Early', 426: 'Upgrade Required',\n 428: 'Precondition Required', 429: 'Too Many Requests',\n 431: 'Request Header Fields Too Large', 451: 'Unavailable For Legal Reasons',\n 500: 'Internal Server Error', 501: 'Not Implemented', 502: 'Bad Gateway',\n 503: 'Service Unavailable', 504: 'Gateway Timeout', 505: 'HTTP Version Not Supported',\n 506: 'Variant Also Negotiates', 507: 'Insufficient Storage', 508: 'Loop Detected',\n 510: 'Not Extended', 511: 'Network Authentication Required',\n};\n\n/**\n * HTTP Headers type\n */\nexport type IncomingHttpHeaders = Record<string, string | string[] | undefined>;\nexport type OutgoingHttpHeaders = Record<string, string | string[] | number>;\n\n/**\n * IncomingMessage - Ultra-optimized for zero-copy operations\n */\nexport class IncomingMessage extends EventEmitter {\n public method: string;\n public url: string;\n public headers: IncomingHttpHeaders;\n public statusCode?: number;\n public statusMessage?: string;\n public httpVersion: string = '1.1';\n public rawHeaders: string[] = [];\n public socket: any;\n\n private _req: any;\n\n constructor(req: any) {\n super();\n this._req = req;\n\n if (isNode) {\n // Direct property access (fastest)\n this.method = req.method;\n this.url = req.url;\n this.headers = req.headers;\n this.statusCode = req.statusCode;\n this.statusMessage = req.statusMessage;\n this.httpVersion = req.httpVersion;\n this.rawHeaders = req.rawHeaders;\n this.socket = req.socket;\n } else {\n // Bun/Deno Request object - zero-copy parsing\n this.method = req.method;\n const urlObj = new URL(req.url);\n this.url = urlObj.pathname + urlObj.search;\n\n // Direct headers reference (zero-copy)\n this.headers = req.headers;\n this.rawHeaders = [];\n }\n }\n\n async text(): Promise<string> {\n if (isNode) {\n return new Promise((resolve, reject) => {\n const chunks: Buffer[] = [];\n this._req.on('data', (chunk: Buffer) => chunks.push(chunk));\n this._req.on('end', () => resolve(Buffer.concat(chunks).toString('utf8')));\n this._req.on('error', reject);\n });\n }\n // Bun/Deno - direct text() call\n return this._req.text();\n }\n\n async json(): Promise<any> {\n if (isNode) {\n const text = await this.text();\n return JSON.parse(text);\n }\n // Bun/Deno - optimized json() method\n return this._req.json();\n }\n}\n\n/**\n * ServerResponse - Ultra-optimized write operations\n */\nexport class ServerResponse extends EventEmitter {\n public statusCode: number = 200;\n public statusMessage: string = 'OK';\n public headersSent: boolean = false;\n\n private _headers: OutgoingHttpHeaders;\n private _body: string = '';\n private _resolve?: (response: Response) => void;\n private _finished: boolean = false;\n private _nodeRes?: any;\n\n constructor(_req?: IncomingMessage, nodeRes?: any) {\n super();\n this._nodeRes = nodeRes;\n // Use Object.create(null) for faster property access\n this._headers = Object.create(null);\n }\n\n setHeader(name: string, value: string | string[] | number): this {\n if (this.headersSent) {\n throw new Error('Cannot set headers after they are sent');\n }\n\n if (isNode && this._nodeRes) {\n this._nodeRes.setHeader(name, value);\n }\n\n this._headers[name.toLowerCase()] = value;\n return this;\n }\n\n getHeader(name: string): string | string[] | number | undefined {\n if (isNode && this._nodeRes) {\n return this._nodeRes.getHeader(name);\n }\n return this._headers[name.toLowerCase()];\n }\n\n getHeaders(): OutgoingHttpHeaders {\n if (isNode && this._nodeRes) {\n return this._nodeRes.getHeaders();\n }\n return { ...this._headers };\n }\n\n getHeaderNames(): string[] {\n if (isNode && this._nodeRes) {\n return this._nodeRes.getHeaderNames();\n }\n return Object.keys(this._headers);\n }\n\n hasHeader(name: string): boolean {\n if (isNode && this._nodeRes) {\n return this._nodeRes.hasHeader(name);\n }\n return name.toLowerCase() in this._headers;\n }\n\n removeHeader(name: string): void {\n if (this.headersSent) {\n throw new Error('Cannot remove headers after they are sent');\n }\n\n if (isNode && this._nodeRes) {\n this._nodeRes.removeHeader(name);\n }\n\n delete this._headers[name.toLowerCase()];\n }\n\n writeHead(statusCode: number, statusMessage?: string | OutgoingHttpHeaders, headers?: OutgoingHttpHeaders): this {\n if (this.headersSent) {\n throw new Error('Cannot write headers after they are sent');\n }\n\n this.statusCode = statusCode;\n\n if (typeof statusMessage === 'string') {\n this.statusMessage = statusMessage;\n if (headers) {\n for (const key in headers) {\n this.setHeader(key, headers[key]!);\n }\n }\n } else if (statusMessage) {\n for (const key in statusMessage) {\n this.setHeader(key, statusMessage[key]!);\n }\n }\n\n if (isNode && this._nodeRes) {\n if (typeof statusMessage === 'string') {\n this._nodeRes.writeHead(statusCode, statusMessage, headers);\n } else {\n this._nodeRes.writeHead(statusCode, statusMessage);\n }\n }\n\n this.headersSent = true;\n return this;\n }\n\n write(chunk: any, encoding?: BufferEncoding | (() => void), callback?: () => void): boolean {\n if (typeof encoding === 'function') {\n callback = encoding;\n encoding = 'utf8';\n }\n\n if (!this.headersSent) {\n this.writeHead(this.statusCode);\n }\n\n if (isNode && this._nodeRes) {\n return this._nodeRes.write(chunk, encoding, callback);\n }\n\n this._body += chunk;\n queueCallback(callback);\n\n return true;\n }\n\n end(chunk?: any, encoding?: BufferEncoding | (() => void), callback?: () => void): this {\n if (this._finished) {\n return this;\n }\n\n if (typeof chunk === 'function') {\n callback = chunk;\n chunk = undefined;\n } else if (typeof encoding === 'function') {\n callback = encoding;\n encoding = 'utf8';\n }\n\n if (chunk !== undefined) {\n this.write(chunk, encoding as BufferEncoding);\n }\n\n if (!this.headersSent) {\n this.writeHead(this.statusCode);\n }\n\n this._finished = true;\n\n if (isNode && this._nodeRes) {\n // Don't pass chunk to end() since we already wrote it via this.write() above\n this._nodeRes.end(callback);\n this.emit('finish');\n } else {\n // Bun/Deno - ultra-optimized inline Response creation\n const response = new Response(this._body, {\n status: this.statusCode,\n statusText: this.statusMessage,\n headers: headersToInit(this._headers),\n });\n\n if (this._resolve) {\n this._resolve(response);\n }\n\n queueCallback(callback);\n }\n\n return this;\n }\n\n _setResolver(resolve: (response: Response) => void): void {\n this._resolve = resolve;\n }\n\n // Express.js-like methods\n json(data: any, statusCode = 200): this {\n if (!this.headersSent) {\n this.setHeader('Content-Type', 'application/json');\n }\n this.statusCode = statusCode;\n this.end(JSON.stringify(data));\n return this;\n }\n\n send(data: any): this {\n if (typeof data === 'object') {\n return this.json(data);\n }\n if (!this.headersSent) {\n this.setHeader('Content-Type', 'text/plain');\n }\n this.end(String(data));\n return this;\n }\n\n status(code: number): this {\n this.statusCode = code;\n return this;\n }\n}\n\n/**\n * Server - Optimized for each runtime\n */\nexport class Server extends EventEmitter {\n private nativeServer?: any;\n private requestListener?: RequestListener;\n public _listening: boolean = false;\n\n constructor(requestListener?: RequestListener) {\n super();\n this.requestListener = requestListener;\n }\n\n listen(port?: number, hostname?: string, backlog?: number, listeningListener?: () => void): this;\n listen(port?: number, hostname?: string, listeningListener?: () => void): this;\n listen(port?: number, listeningListener?: () => void): this;\n listen(options?: { port?: number; hostname?: string; backlog?: number }, listeningListener?: () => void): this;\n listen(...args: any[]): this {\n let port = 3000;\n let hostname = '0.0.0.0';\n let callback: (() => void) | undefined;\n\n // Optimized argument parsing\n const firstArg = args[0];\n if (typeof firstArg === 'number') {\n port = firstArg;\n const secondArg = args[1];\n if (typeof secondArg === 'string') {\n hostname = secondArg;\n callback = args[2] || args[3];\n } else if (typeof secondArg === 'function') {\n callback = secondArg;\n }\n } else if (firstArg && typeof firstArg === 'object') {\n port = firstArg.port || 3000;\n hostname = firstArg.hostname || '0.0.0.0';\n callback = args[1];\n }\n\n const self = this;\n\n if (isNode) {\n // Node.js - delegate directly to native http\n this.nativeServer = http.createServer((req: any, res: any) => {\n const incomingMessage = new IncomingMessage(req);\n const serverResponse = new ServerResponse(incomingMessage, res);\n\n if (self.requestListener) {\n self.requestListener(incomingMessage, serverResponse);\n } else {\n self.emit('request', incomingMessage, serverResponse);\n }\n });\n\n // Forward upgrade event for WebSocket support\n this.nativeServer.on('upgrade', (req: any, socket: any, head: any) => {\n self.emit('upgrade', req, socket, head);\n });\n\n this.nativeServer.listen(port, hostname, () => {\n this._listening = true;\n this.emit('listening');\n if (callback) callback();\n });\n\n this.nativeServer.on('error', (err: Error) => this.emit('error', err));\n this.nativeServer.on('close', () => {\n this._listening = false;\n this.emit('close');\n });\n } else if (isBun) {\n // Bun - ULTRA-OPTIMIZED direct fast path (zero wrapper overhead)\n // @ts-ignore\n this.nativeServer = Bun.serve({\n port,\n hostname,\n fetch: (req: Request) => {\n // Fast path: Create minimal context object to avoid wrapper classes\n const urlObj = new URL(req.url);\n const pathname = urlObj.pathname + urlObj.search;\n\n // Ultra-lightweight response builder (no class instantiation)\n let statusCode = 200;\n let statusMessage = 'OK';\n let body = '';\n const headers: Record<string, string> = Object.create(null);\n let responseReady = false;\n\n // Minimal IncomingMessage-compatible object (object literal is faster than class)\n const incomingMessage: any = {\n method: req.method,\n url: pathname,\n headers: req.headers,\n httpVersion: '1.1',\n rawHeaders: [],\n _req: req,\n text: () => req.text(),\n json: () => req.json(),\n };\n\n // Minimal ServerResponse-compatible object (inline methods, no inheritance)\n const serverResponse: any = {\n statusCode: 200,\n statusMessage: 'OK',\n headersSent: false,\n _headers: headers,\n\n setHeader(name: string, value: string | string[] | number) {\n headers[name.toLowerCase()] = Array.isArray(value) ? value.join(', ') : String(value);\n return this;\n },\n\n getHeader(name: string) {\n return headers[name.toLowerCase()];\n },\n\n getHeaders() {\n return { ...headers };\n },\n\n writeHead(status: number, arg2?: any, arg3?: any) {\n statusCode = status;\n this.statusCode = status;\n this.headersSent = true;\n\n if (typeof arg2 === 'string') {\n statusMessage = arg2;\n this.statusMessage = arg2;\n if (arg3) {\n for (const key in arg3) {\n headers[key.toLowerCase()] = arg3[key];\n }\n }\n } else if (arg2) {\n for (const key in arg2) {\n headers[key.toLowerCase()] = arg2[key];\n }\n }\n return this;\n },\n\n write(chunk: any) {\n if (!this.headersSent) {\n this.writeHead(statusCode);\n }\n body += chunk;\n return true;\n },\n\n end(chunk?: any) {\n if (chunk !== undefined) {\n this.write(chunk);\n }\n if (!this.headersSent) {\n this.writeHead(statusCode);\n }\n responseReady = true;\n return this;\n },\n };\n\n // Execute handler\n if (self.requestListener) {\n self.requestListener(incomingMessage, serverResponse);\n }\n\n // Inline Response creation (fastest path - no function calls)\n if (responseReady) {\n return new Response(body, {\n status: statusCode,\n statusText: statusMessage,\n headers: headers as HeadersInit,\n });\n }\n\n // Fallback for async (rare case)\n return new Promise<Response>((resolve) => {\n serverResponse.end = (chunk?: any) => {\n if (chunk !== undefined) {\n body += chunk;\n }\n resolve(new Response(body, {\n status: statusCode,\n statusText: statusMessage,\n headers: headers as HeadersInit,\n }));\n };\n });\n },\n error: createErrorResponse,\n });\n\n emitListeningWithCallback(this, callback);\n } else if (isDeno) {\n // Deno - use Deno.serve()\n // @ts-ignore\n this.nativeServer = Deno.serve({\n port,\n hostname,\n handler: (req: Request) => {\n return new Promise<Response>((resolve) => {\n const incomingMessage = new IncomingMessage(req);\n const serverResponse = new ServerResponse();\n\n serverResponse._setResolver(resolve);\n\n if (self.requestListener) {\n self.requestListener(incomingMessage, serverResponse);\n } else {\n self.emit('request', incomingMessage, serverResponse);\n }\n });\n },\n onError: (error: Error) => {\n this.emit('error', error);\n return createErrorResponse();\n },\n });\n\n emitListeningWithCallback(this, callback);\n }\n\n return this;\n }\n\n close(callback?: (err?: Error) => void): this {\n if (!this.nativeServer) {\n if (callback) queueMicrotask(() => callback());\n return this;\n }\n\n if (isNode) {\n this.nativeServer.close(callback);\n } else if (isBun) {\n this.nativeServer.stop();\n closeAndEmit(this, callback);\n } else if (isDeno) {\n // @ts-ignore\n this.nativeServer.shutdown();\n closeAndEmit(this, callback);\n }\n\n return this;\n }\n\n address(): { port: number; family: string; address: string } | null {\n if (!this.nativeServer) return null;\n\n if (isNode) {\n const addr = this.nativeServer.address();\n if (!addr) return null;\n if (typeof addr === 'string') {\n return createAddress(0, addr, 'unix');\n }\n return addr;\n } else if (isBun) {\n return createAddress(this.nativeServer.port, this.nativeServer.hostname);\n } else if (isDeno) {\n // @ts-ignore\n const addr = this.nativeServer.addr;\n return createAddress(addr.port, addr.hostname);\n }\n\n return null;\n }\n\n get listening(): boolean {\n return this._listening;\n }\n}\n\n/**\n * Request listener type\n */\nexport type RequestListener = (req: IncomingMessage, res: ServerResponse) => void;\n\n/**\n * Request options\n */\nexport interface RequestOptions {\n method?: string;\n headers?: OutgoingHttpHeaders;\n timeout?: number;\n signal?: AbortSignal;\n}\n\n/**\n * Server options\n */\nexport interface ServerOptions {\n IncomingMessage?: typeof IncomingMessage;\n ServerResponse?: typeof ServerResponse;\n}\n\n/**\n * Client request - lightweight wrapper\n */\nexport class ClientRequest extends EventEmitter {\n constructor(_url: string | URL, _options: RequestOptions = {}) {\n super();\n }\n\n write(_chunk: any): boolean {\n return true;\n }\n\n end(callback?: () => void): void {\n queueCallback(callback);\n }\n}\n\n/**\n * HTTP Agent\n */\nexport class Agent {\n constructor(public options?: any) { }\n}\n\n/**\n * Create HTTP server\n */\nexport function createServer(requestListener?: RequestListener): Server;\nexport function createServer(options: ServerOptions, requestListener?: RequestListener): Server;\nexport function createServer(\n optionsOrListener?: ServerOptions | RequestListener,\n requestListener?: RequestListener\n): Server {\n return new Server(typeof optionsOrListener === 'function' ? optionsOrListener : requestListener);\n}\n\n/**\n * Make HTTP request - optimized per runtime\n */\nexport function request(url: string | URL, options?: RequestOptions, callback?: (res: IncomingMessage) => void): ClientRequest {\n const urlString = typeof url === 'string' ? url : url.toString();\n const req = new ClientRequest(urlString, options);\n\n if (isNode) {\n const urlObj = new URL(urlString);\n const client = urlObj.protocol === 'https:' ? https : http;\n\n const nodeReq = client.request(urlString, {\n method: options?.method || 'GET',\n headers: options?.headers,\n timeout: options?.timeout,\n signal: options?.signal,\n }, (res: any) => {\n const incomingMessage = new IncomingMessage(res);\n if (callback) callback(incomingMessage);\n req.emit('response', incomingMessage);\n });\n\n nodeReq.on('error', (error: Error) => req.emit('error', error));\n nodeReq.end();\n } else {\n // Bun/Deno - use optimized fetch\n queueMicrotask(async () => {\n try {\n const response = await fetch(urlString, {\n method: options?.method || 'GET',\n headers: options?.headers as HeadersInit,\n signal: options?.signal,\n });\n\n const fetchRequest = new Request(urlString);\n const incomingMessage = new IncomingMessage(fetchRequest);\n incomingMessage.statusCode = response.status;\n incomingMessage.statusMessage = response.statusText;\n\n if (callback) callback(incomingMessage);\n req.emit('response', incomingMessage);\n } catch (error) {\n req.emit('error', error);\n }\n });\n }\n\n return req;\n}\n\n/**\n * Make HTTP GET request\n */\nexport function get(url: string | URL, options?: RequestOptions, callback?: (res: IncomingMessage) => void): ClientRequest {\n return request(url, { ...options, method: 'GET' }, callback);\n}\n\n/**\n * Get current runtime\n */\nexport function getRuntime(): 'node' | 'bun' | 'deno' {\n return runtime;\n}\n\n/**\n * Default export\n */\nexport default {\n createServer,\n request,\n get,\n Server,\n IncomingMessage,\n ServerResponse,\n Agent,\n ClientRequest,\n METHODS,\n STATUS_CODES,\n getRuntime,\n};\n","/**\n * Runtime detection and global type declarations\n * Shared across all modules for consistency\n */\n\n/**\n * Runtime detection (cached at module load)\n */\nexport const runtime = (() => {\n // @ts-ignore - Deno global\n if (typeof Deno !== 'undefined') return 'deno';\n // @ts-ignore - Bun global\n if (typeof Bun !== 'undefined') return 'bun';\n return 'node';\n})() as 'node' | 'bun' | 'deno';\n\nexport const isNode = runtime === 'node';\nexport const isBun = runtime === 'bun';\nexport const isDeno = runtime === 'deno';\n\n// Global declarations for runtime-specific APIs\ndeclare global {\n // @ts-ignore - Bun global\n const Bun: {\n build(options: {\n entrypoints: string[];\n outdir?: string;\n target?: string;\n format?: string;\n minify?: boolean;\n sourcemap?: string;\n external?: string[];\n naming?: string;\n plugins?: any[];\n define?: Record<string, string>;\n }): Promise<{\n success: boolean;\n outputs: Array<{ path: string; size: number }>;\n logs: any[];\n }>;\n Transpiler: new (options?: {\n loader?: string;\n target?: string;\n minify?: boolean;\n }) => {\n transform(code: string, loader?: string): Promise<string>;\n transformSync(code: string, loader?: string): string;\n };\n file(path: string): {\n size: number;\n arrayBuffer(): ArrayBuffer | Promise<ArrayBuffer>;\n exists(): Promise<boolean>;\n };\n write(path: string, data: string | Buffer | Uint8Array): Promise<void>;\n } | undefined;\n\n // @ts-ignore - Deno global\n const Deno: {\n emit(rootSpecifier: string | URL, options?: {\n bundle?: 'module' | 'classic';\n check?: boolean;\n compilerOptions?: any;\n importMap?: string;\n importMapPath?: string;\n sources?: Record<string, string>;\n }): Promise<{\n files: Record<string, string>;\n diagnostics: any[];\n }>;\n writeTextFile(path: string, data: string): Promise<void>;\n readFile(path: string): Promise<Uint8Array>;\n readFileSync(path: string): Uint8Array;\n writeFile(path: string, data: Uint8Array): Promise<void>;\n writeFileSync(path: string, data: Uint8Array): void;\n stat(path: string): Promise<any>;\n statSync(path: string): any;\n mkdir(path: string, options?: { recursive?: boolean }): Promise<void>;\n mkdirSync(path: string, options?: { recursive?: boolean }): void;\n readDir(path: string): AsyncIterable<any>;\n readDirSync(path: string): Iterable<any>;\n remove(path: string, options?: { recursive?: boolean }): Promise<void>;\n removeSync(path: string, options?: { recursive?: boolean }): void;\n rename(oldPath: string, newPath: string): Promise<void>;\n renameSync(oldPath: string, newPath: string): void;\n copyFile(src: string, dest: string): Promise<void>;\n copyFileSync(src: string, dest: string): void;\n realPath(path: string): Promise<string>;\n realPathSync(path: string): string;\n watchFs(paths: string | string[]): AsyncIterable<{\n kind: string;\n paths: string[];\n }>;\n build: {\n os: string;\n };\n } | undefined;\n}\n"],"mappings":"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","names":[]}
|
package/dist/http.mjs
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/http.ts","../src/runtime.ts"],"sourcesContent":["/**\n * HTTP module with unified API across runtimes\n * Ultra-optimized for maximum performance across Node.js, Bun, and Deno\n *\n * Performance optimizations:\n * - Bun fast path: Zero class instantiation (object literals only)\n * - Eliminated EventEmitter overhead for Bun/Deno\n * - Zero-copy headers conversion\n * - Inline response creation\n * - Reduced object allocations\n * - Direct closure capture (no resolver indirection)\n */\n\nimport { EventEmitter } from 'node:events';\nimport { runtime, isBun, isDeno, isNode } from './runtime';\n\n/**\n * Helper: Check if running on Node.js (eliminates duplication in runtime checks)\n */\n\n\n/**\n * Helper: Queue callback (eliminates duplication in callback handling)\n */\nfunction queueCallback(callback?: () => void): void {\n if (callback) queueMicrotask(callback);\n}\n\n/**\n * Helper: Convert headers to HeadersInit (eliminates duplication in Response creation)\n */\nfunction headersToInit(headers: OutgoingHttpHeaders): HeadersInit {\n const result: HeadersInit = {};\n for (const key in headers) {\n const value = headers[key];\n result[key] = Array.isArray(value) ? value.join(', ') : String(value);\n }\n return result;\n}\n\n/**\n * Helper: Create address object (eliminates duplication in address() method)\n */\nfunction createAddress(port: number, address: string, family = 'IPv4'): { port: number; family: string; address: string } {\n return { port, family, address };\n}\n\n/**\n * Helper: Create error Response (eliminates duplication in error handling)\n */\nfunction createErrorResponse(): Response {\n return new Response('Internal Server Error', { status: 500 });\n}\n\n/**\n * Helper: Emit listening and queue callback (eliminates duplication in Bun/Deno listen)\n */\nfunction emitListeningWithCallback(server: Server, callback?: () => void): void {\n server._listening = true;\n server.emit('listening');\n queueCallback(callback);\n}\n\n/**\n * Helper: Close server and emit events (eliminates duplication in Bun/Deno close)\n */\nfunction closeAndEmit(server: Server, callback?: (err?: Error) => void): void {\n server._listening = false;\n server.emit('close');\n if (callback) queueMicrotask(() => callback());\n}\n\n// Lazy-load native modules for Node.js\nlet http: any, https: any;\n\n// Initialize immediately for Node.js (synchronous require)\nif (isNode && typeof process !== 'undefined') {\n try {\n http = require('node:http');\n https = require('node:https');\n } catch (e) {\n // Fallback for older Node versions\n http = require('http');\n https = require('https');\n }\n}\n\n/**\n * HTTP Methods\n */\nexport const METHODS = [\n 'GET', 'POST', 'PUT', 'DELETE', 'PATCH',\n 'HEAD', 'OPTIONS', 'CONNECT', 'TRACE'\n] as const;\n\n/**\n * HTTP Status Codes (compact object)\n */\nexport const STATUS_CODES: Record<number, string> = {\n 100: 'Continue', 101: 'Switching Protocols', 102: 'Processing',\n 200: 'OK', 201: 'Created', 202: 'Accepted', 203: 'Non-Authoritative Information',\n 204: 'No Content', 205: 'Reset Content', 206: 'Partial Content',\n 300: 'Multiple Choices', 301: 'Moved Permanently', 302: 'Found',\n 303: 'See Other', 304: 'Not Modified', 307: 'Temporary Redirect', 308: 'Permanent Redirect',\n 400: 'Bad Request', 401: 'Unauthorized', 402: 'Payment Required', 403: 'Forbidden',\n 404: 'Not Found', 405: 'Method Not Allowed', 406: 'Not Acceptable',\n 407: 'Proxy Authentication Required', 408: 'Request Timeout', 409: 'Conflict',\n 410: 'Gone', 411: 'Length Required', 412: 'Precondition Failed',\n 413: 'Payload Too Large', 414: 'URI Too Long', 415: 'Unsupported Media Type',\n 416: 'Range Not Satisfiable', 417: 'Expectation Failed', 418: \"I'm a teapot\",\n 422: 'Unprocessable Entity', 425: 'Too Early', 426: 'Upgrade Required',\n 428: 'Precondition Required', 429: 'Too Many Requests',\n 431: 'Request Header Fields Too Large', 451: 'Unavailable For Legal Reasons',\n 500: 'Internal Server Error', 501: 'Not Implemented', 502: 'Bad Gateway',\n 503: 'Service Unavailable', 504: 'Gateway Timeout', 505: 'HTTP Version Not Supported',\n 506: 'Variant Also Negotiates', 507: 'Insufficient Storage', 508: 'Loop Detected',\n 510: 'Not Extended', 511: 'Network Authentication Required',\n};\n\n/**\n * HTTP Headers type\n */\nexport type IncomingHttpHeaders = Record<string, string | string[] | undefined>;\nexport type OutgoingHttpHeaders = Record<string, string | string[] | number>;\n\n/**\n * IncomingMessage - Ultra-optimized for zero-copy operations\n */\nexport class IncomingMessage extends EventEmitter {\n public method: string;\n public url: string;\n public headers: IncomingHttpHeaders;\n public statusCode?: number;\n public statusMessage?: string;\n public httpVersion: string = '1.1';\n public rawHeaders: string[] = [];\n public socket: any;\n\n private _req: any;\n\n constructor(req: any) {\n super();\n this._req = req;\n\n if (isNode) {\n // Direct property access (fastest)\n this.method = req.method;\n this.url = req.url;\n this.headers = req.headers;\n this.statusCode = req.statusCode;\n this.statusMessage = req.statusMessage;\n this.httpVersion = req.httpVersion;\n this.rawHeaders = req.rawHeaders;\n this.socket = req.socket;\n } else {\n // Bun/Deno Request object - zero-copy parsing\n this.method = req.method;\n const urlObj = new URL(req.url);\n this.url = urlObj.pathname + urlObj.search;\n\n // Direct headers reference (zero-copy)\n this.headers = req.headers;\n this.rawHeaders = [];\n }\n }\n\n async text(): Promise<string> {\n if (isNode) {\n return new Promise((resolve, reject) => {\n const chunks: Buffer[] = [];\n this._req.on('data', (chunk: Buffer) => chunks.push(chunk));\n this._req.on('end', () => resolve(Buffer.concat(chunks).toString('utf8')));\n this._req.on('error', reject);\n });\n }\n // Bun/Deno - direct text() call\n return this._req.text();\n }\n\n async json(): Promise<any> {\n if (isNode) {\n const text = await this.text();\n return JSON.parse(text);\n }\n // Bun/Deno - optimized json() method\n return this._req.json();\n }\n}\n\n/**\n * ServerResponse - Ultra-optimized write operations\n */\nexport class ServerResponse extends EventEmitter {\n public statusCode: number = 200;\n public statusMessage: string = 'OK';\n public headersSent: boolean = false;\n\n private _headers: OutgoingHttpHeaders;\n private _body: string = '';\n private _resolve?: (response: Response) => void;\n private _finished: boolean = false;\n private _nodeRes?: any;\n\n constructor(_req?: IncomingMessage, nodeRes?: any) {\n super();\n this._nodeRes = nodeRes;\n // Use Object.create(null) for faster property access\n this._headers = Object.create(null);\n }\n\n setHeader(name: string, value: string | string[] | number): this {\n if (this.headersSent) {\n throw new Error('Cannot set headers after they are sent');\n }\n\n if (isNode && this._nodeRes) {\n this._nodeRes.setHeader(name, value);\n }\n\n this._headers[name.toLowerCase()] = value;\n return this;\n }\n\n getHeader(name: string): string | string[] | number | undefined {\n if (isNode && this._nodeRes) {\n return this._nodeRes.getHeader(name);\n }\n return this._headers[name.toLowerCase()];\n }\n\n getHeaders(): OutgoingHttpHeaders {\n if (isNode && this._nodeRes) {\n return this._nodeRes.getHeaders();\n }\n return { ...this._headers };\n }\n\n getHeaderNames(): string[] {\n if (isNode && this._nodeRes) {\n return this._nodeRes.getHeaderNames();\n }\n return Object.keys(this._headers);\n }\n\n hasHeader(name: string): boolean {\n if (isNode && this._nodeRes) {\n return this._nodeRes.hasHeader(name);\n }\n return name.toLowerCase() in this._headers;\n }\n\n removeHeader(name: string): void {\n if (this.headersSent) {\n throw new Error('Cannot remove headers after they are sent');\n }\n\n if (isNode && this._nodeRes) {\n this._nodeRes.removeHeader(name);\n }\n\n delete this._headers[name.toLowerCase()];\n }\n\n writeHead(statusCode: number, statusMessage?: string | OutgoingHttpHeaders, headers?: OutgoingHttpHeaders): this {\n if (this.headersSent) {\n throw new Error('Cannot write headers after they are sent');\n }\n\n this.statusCode = statusCode;\n\n if (typeof statusMessage === 'string') {\n this.statusMessage = statusMessage;\n if (headers) {\n for (const key in headers) {\n this.setHeader(key, headers[key]!);\n }\n }\n } else if (statusMessage) {\n for (const key in statusMessage) {\n this.setHeader(key, statusMessage[key]!);\n }\n }\n\n if (isNode && this._nodeRes) {\n if (typeof statusMessage === 'string') {\n this._nodeRes.writeHead(statusCode, statusMessage, headers);\n } else {\n this._nodeRes.writeHead(statusCode, statusMessage);\n }\n }\n\n this.headersSent = true;\n return this;\n }\n\n write(chunk: any, encoding?: BufferEncoding | (() => void), callback?: () => void): boolean {\n if (typeof encoding === 'function') {\n callback = encoding;\n encoding = 'utf8';\n }\n\n if (!this.headersSent) {\n this.writeHead(this.statusCode);\n }\n\n if (isNode && this._nodeRes) {\n return this._nodeRes.write(chunk, encoding, callback);\n }\n\n this._body += chunk;\n queueCallback(callback);\n\n return true;\n }\n\n end(chunk?: any, encoding?: BufferEncoding | (() => void), callback?: () => void): this {\n if (this._finished) {\n return this;\n }\n\n if (typeof chunk === 'function') {\n callback = chunk;\n chunk = undefined;\n } else if (typeof encoding === 'function') {\n callback = encoding;\n encoding = 'utf8';\n }\n\n if (chunk !== undefined) {\n this.write(chunk, encoding as BufferEncoding);\n }\n\n if (!this.headersSent) {\n this.writeHead(this.statusCode);\n }\n\n this._finished = true;\n\n if (isNode && this._nodeRes) {\n // Don't pass chunk to end() since we already wrote it via this.write() above\n this._nodeRes.end(callback);\n this.emit('finish');\n } else {\n // Bun/Deno - ultra-optimized inline Response creation\n const response = new Response(this._body, {\n status: this.statusCode,\n statusText: this.statusMessage,\n headers: headersToInit(this._headers),\n });\n\n if (this._resolve) {\n this._resolve(response);\n }\n\n queueCallback(callback);\n }\n\n return this;\n }\n\n _setResolver(resolve: (response: Response) => void): void {\n this._resolve = resolve;\n }\n\n // Express.js-like methods\n json(data: any, statusCode = 200): this {\n if (!this.headersSent) {\n this.setHeader('Content-Type', 'application/json');\n }\n this.statusCode = statusCode;\n this.end(JSON.stringify(data));\n return this;\n }\n\n send(data: any): this {\n if (typeof data === 'object') {\n return this.json(data);\n }\n if (!this.headersSent) {\n this.setHeader('Content-Type', 'text/plain');\n }\n this.end(String(data));\n return this;\n }\n\n status(code: number): this {\n this.statusCode = code;\n return this;\n }\n}\n\n/**\n * Server - Optimized for each runtime\n */\nexport class Server extends EventEmitter {\n private nativeServer?: any;\n private requestListener?: RequestListener;\n public _listening: boolean = false;\n\n constructor(requestListener?: RequestListener) {\n super();\n this.requestListener = requestListener;\n }\n\n listen(port?: number, hostname?: string, backlog?: number, listeningListener?: () => void): this;\n listen(port?: number, hostname?: string, listeningListener?: () => void): this;\n listen(port?: number, listeningListener?: () => void): this;\n listen(options?: { port?: number; hostname?: string; backlog?: number }, listeningListener?: () => void): this;\n listen(...args: any[]): this {\n let port = 3000;\n let hostname = '0.0.0.0';\n let callback: (() => void) | undefined;\n\n // Optimized argument parsing\n const firstArg = args[0];\n if (typeof firstArg === 'number') {\n port = firstArg;\n const secondArg = args[1];\n if (typeof secondArg === 'string') {\n hostname = secondArg;\n callback = args[2] || args[3];\n } else if (typeof secondArg === 'function') {\n callback = secondArg;\n }\n } else if (firstArg && typeof firstArg === 'object') {\n port = firstArg.port || 3000;\n hostname = firstArg.hostname || '0.0.0.0';\n callback = args[1];\n }\n\n const self = this;\n\n if (isNode) {\n // Node.js - delegate directly to native http\n this.nativeServer = http.createServer((req: any, res: any) => {\n const incomingMessage = new IncomingMessage(req);\n const serverResponse = new ServerResponse(incomingMessage, res);\n\n if (self.requestListener) {\n self.requestListener(incomingMessage, serverResponse);\n } else {\n self.emit('request', incomingMessage, serverResponse);\n }\n });\n\n // Forward upgrade event for WebSocket support\n this.nativeServer.on('upgrade', (req: any, socket: any, head: any) => {\n self.emit('upgrade', req, socket, head);\n });\n\n this.nativeServer.listen(port, hostname, () => {\n this._listening = true;\n this.emit('listening');\n if (callback) callback();\n });\n\n this.nativeServer.on('error', (err: Error) => this.emit('error', err));\n this.nativeServer.on('close', () => {\n this._listening = false;\n this.emit('close');\n });\n } else if (isBun) {\n // Bun - ULTRA-OPTIMIZED direct fast path (zero wrapper overhead)\n // @ts-ignore\n this.nativeServer = Bun.serve({\n port,\n hostname,\n fetch: (req: Request) => {\n // Fast path: Create minimal context object to avoid wrapper classes\n const urlObj = new URL(req.url);\n const pathname = urlObj.pathname + urlObj.search;\n\n // Ultra-lightweight response builder (no class instantiation)\n let statusCode = 200;\n let statusMessage = 'OK';\n let body = '';\n const headers: Record<string, string> = Object.create(null);\n let responseReady = false;\n\n // Minimal IncomingMessage-compatible object (object literal is faster than class)\n const incomingMessage: any = {\n method: req.method,\n url: pathname,\n headers: req.headers,\n httpVersion: '1.1',\n rawHeaders: [],\n _req: req,\n text: () => req.text(),\n json: () => req.json(),\n };\n\n // Minimal ServerResponse-compatible object (inline methods, no inheritance)\n const serverResponse: any = {\n statusCode: 200,\n statusMessage: 'OK',\n headersSent: false,\n _headers: headers,\n\n setHeader(name: string, value: string | string[] | number) {\n headers[name.toLowerCase()] = Array.isArray(value) ? value.join(', ') : String(value);\n return this;\n },\n\n getHeader(name: string) {\n return headers[name.toLowerCase()];\n },\n\n getHeaders() {\n return { ...headers };\n },\n\n writeHead(status: number, arg2?: any, arg3?: any) {\n statusCode = status;\n this.statusCode = status;\n this.headersSent = true;\n\n if (typeof arg2 === 'string') {\n statusMessage = arg2;\n this.statusMessage = arg2;\n if (arg3) {\n for (const key in arg3) {\n headers[key.toLowerCase()] = arg3[key];\n }\n }\n } else if (arg2) {\n for (const key in arg2) {\n headers[key.toLowerCase()] = arg2[key];\n }\n }\n return this;\n },\n\n write(chunk: any) {\n if (!this.headersSent) {\n this.writeHead(statusCode);\n }\n body += chunk;\n return true;\n },\n\n end(chunk?: any) {\n if (chunk !== undefined) {\n this.write(chunk);\n }\n if (!this.headersSent) {\n this.writeHead(statusCode);\n }\n responseReady = true;\n return this;\n },\n };\n\n // Execute handler\n if (self.requestListener) {\n self.requestListener(incomingMessage, serverResponse);\n }\n\n // Inline Response creation (fastest path - no function calls)\n if (responseReady) {\n return new Response(body, {\n status: statusCode,\n statusText: statusMessage,\n headers: headers as HeadersInit,\n });\n }\n\n // Fallback for async (rare case)\n return new Promise<Response>((resolve) => {\n serverResponse.end = (chunk?: any) => {\n if (chunk !== undefined) {\n body += chunk;\n }\n resolve(new Response(body, {\n status: statusCode,\n statusText: statusMessage,\n headers: headers as HeadersInit,\n }));\n };\n });\n },\n error: createErrorResponse,\n });\n\n emitListeningWithCallback(this, callback);\n } else if (isDeno) {\n // Deno - use Deno.serve()\n // @ts-ignore\n this.nativeServer = Deno.serve({\n port,\n hostname,\n handler: (req: Request) => {\n return new Promise<Response>((resolve) => {\n const incomingMessage = new IncomingMessage(req);\n const serverResponse = new ServerResponse();\n\n serverResponse._setResolver(resolve);\n\n if (self.requestListener) {\n self.requestListener(incomingMessage, serverResponse);\n } else {\n self.emit('request', incomingMessage, serverResponse);\n }\n });\n },\n onError: (error: Error) => {\n this.emit('error', error);\n return createErrorResponse();\n },\n });\n\n emitListeningWithCallback(this, callback);\n }\n\n return this;\n }\n\n close(callback?: (err?: Error) => void): this {\n if (!this.nativeServer) {\n if (callback) queueMicrotask(() => callback());\n return this;\n }\n\n if (isNode) {\n this.nativeServer.close(callback);\n } else if (isBun) {\n this.nativeServer.stop();\n closeAndEmit(this, callback);\n } else if (isDeno) {\n // @ts-ignore\n this.nativeServer.shutdown();\n closeAndEmit(this, callback);\n }\n\n return this;\n }\n\n address(): { port: number; family: string; address: string } | null {\n if (!this.nativeServer) return null;\n\n if (isNode) {\n const addr = this.nativeServer.address();\n if (!addr) return null;\n if (typeof addr === 'string') {\n return createAddress(0, addr, 'unix');\n }\n return addr;\n } else if (isBun) {\n return createAddress(this.nativeServer.port, this.nativeServer.hostname);\n } else if (isDeno) {\n // @ts-ignore\n const addr = this.nativeServer.addr;\n return createAddress(addr.port, addr.hostname);\n }\n\n return null;\n }\n\n get listening(): boolean {\n return this._listening;\n }\n}\n\n/**\n * Request listener type\n */\nexport type RequestListener = (req: IncomingMessage, res: ServerResponse) => void;\n\n/**\n * Request options\n */\nexport interface RequestOptions {\n method?: string;\n headers?: OutgoingHttpHeaders;\n timeout?: number;\n signal?: AbortSignal;\n}\n\n/**\n * Server options\n */\nexport interface ServerOptions {\n IncomingMessage?: typeof IncomingMessage;\n ServerResponse?: typeof ServerResponse;\n}\n\n/**\n * Client request - lightweight wrapper\n */\nexport class ClientRequest extends EventEmitter {\n constructor(_url: string | URL, _options: RequestOptions = {}) {\n super();\n }\n\n write(_chunk: any): boolean {\n return true;\n }\n\n end(callback?: () => void): void {\n queueCallback(callback);\n }\n}\n\n/**\n * HTTP Agent\n */\nexport class Agent {\n constructor(public options?: any) { }\n}\n\n/**\n * Create HTTP server\n */\nexport function createServer(requestListener?: RequestListener): Server;\nexport function createServer(options: ServerOptions, requestListener?: RequestListener): Server;\nexport function createServer(\n optionsOrListener?: ServerOptions | RequestListener,\n requestListener?: RequestListener\n): Server {\n return new Server(typeof optionsOrListener === 'function' ? optionsOrListener : requestListener);\n}\n\n/**\n * Make HTTP request - optimized per runtime\n */\nexport function request(url: string | URL, options?: RequestOptions, callback?: (res: IncomingMessage) => void): ClientRequest {\n const urlString = typeof url === 'string' ? url : url.toString();\n const req = new ClientRequest(urlString, options);\n\n if (isNode) {\n const urlObj = new URL(urlString);\n const client = urlObj.protocol === 'https:' ? https : http;\n\n const nodeReq = client.request(urlString, {\n method: options?.method || 'GET',\n headers: options?.headers,\n timeout: options?.timeout,\n signal: options?.signal,\n }, (res: any) => {\n const incomingMessage = new IncomingMessage(res);\n if (callback) callback(incomingMessage);\n req.emit('response', incomingMessage);\n });\n\n nodeReq.on('error', (error: Error) => req.emit('error', error));\n nodeReq.end();\n } else {\n // Bun/Deno - use optimized fetch\n queueMicrotask(async () => {\n try {\n const response = await fetch(urlString, {\n method: options?.method || 'GET',\n headers: options?.headers as HeadersInit,\n signal: options?.signal,\n });\n\n const fetchRequest = new Request(urlString);\n const incomingMessage = new IncomingMessage(fetchRequest);\n incomingMessage.statusCode = response.status;\n incomingMessage.statusMessage = response.statusText;\n\n if (callback) callback(incomingMessage);\n req.emit('response', incomingMessage);\n } catch (error) {\n req.emit('error', error);\n }\n });\n }\n\n return req;\n}\n\n/**\n * Make HTTP GET request\n */\nexport function get(url: string | URL, options?: RequestOptions, callback?: (res: IncomingMessage) => void): ClientRequest {\n return request(url, { ...options, method: 'GET' }, callback);\n}\n\n/**\n * Get current runtime\n */\nexport function getRuntime(): 'node' | 'bun' | 'deno' {\n return runtime;\n}\n\n/**\n * Default export\n */\nexport default {\n createServer,\n request,\n get,\n Server,\n IncomingMessage,\n ServerResponse,\n Agent,\n ClientRequest,\n METHODS,\n STATUS_CODES,\n getRuntime,\n};\n","/**\n * Runtime detection and global type declarations\n * Shared across all modules for consistency\n */\n\n/**\n * Runtime detection (cached at module load)\n */\nexport const runtime = (() => {\n // @ts-ignore - Deno global\n if (typeof Deno !== 'undefined') return 'deno';\n // @ts-ignore - Bun global\n if (typeof Bun !== 'undefined') return 'bun';\n return 'node';\n})() as 'node' | 'bun' | 'deno';\n\nexport const isNode = runtime === 'node';\nexport const isBun = runtime === 'bun';\nexport const isDeno = runtime === 'deno';\n\n// Global declarations for runtime-specific APIs\ndeclare global {\n // @ts-ignore - Bun global\n const Bun: {\n build(options: {\n entrypoints: string[];\n outdir?: string;\n target?: string;\n format?: string;\n minify?: boolean;\n sourcemap?: string;\n external?: string[];\n naming?: string;\n plugins?: any[];\n define?: Record<string, string>;\n }): Promise<{\n success: boolean;\n outputs: Array<{ path: string; size: number }>;\n logs: any[];\n }>;\n Transpiler: new (options?: {\n loader?: string;\n target?: string;\n minify?: boolean;\n }) => {\n transform(code: string, loader?: string): Promise<string>;\n transformSync(code: string, loader?: string): string;\n };\n file(path: string): {\n size: number;\n arrayBuffer(): ArrayBuffer | Promise<ArrayBuffer>;\n exists(): Promise<boolean>;\n };\n write(path: string, data: string | Buffer | Uint8Array): Promise<void>;\n } | undefined;\n\n // @ts-ignore - Deno global\n const Deno: {\n emit(rootSpecifier: string | URL, options?: {\n bundle?: 'module' | 'classic';\n check?: boolean;\n compilerOptions?: any;\n importMap?: string;\n importMapPath?: string;\n sources?: Record<string, string>;\n }): Promise<{\n files: Record<string, string>;\n diagnostics: any[];\n }>;\n writeTextFile(path: string, data: string): Promise<void>;\n readFile(path: string): Promise<Uint8Array>;\n readFileSync(path: string): Uint8Array;\n writeFile(path: string, data: Uint8Array): Promise<void>;\n writeFileSync(path: string, data: Uint8Array): void;\n stat(path: string): Promise<any>;\n statSync(path: string): any;\n mkdir(path: string, options?: { recursive?: boolean }): Promise<void>;\n mkdirSync(path: string, options?: { recursive?: boolean }): void;\n readDir(path: string): AsyncIterable<any>;\n readDirSync(path: string): Iterable<any>;\n remove(path: string, options?: { recursive?: boolean }): Promise<void>;\n removeSync(path: string, options?: { recursive?: boolean }): void;\n rename(oldPath: string, newPath: string): Promise<void>;\n renameSync(oldPath: string, newPath: string): void;\n copyFile(src: string, dest: string): Promise<void>;\n copyFileSync(src: string, dest: string): void;\n realPath(path: string): Promise<string>;\n realPathSync(path: string): string;\n watchFs(paths: string | string[]): AsyncIterable<{\n kind: string;\n paths: string[];\n }>;\n build: {\n os: string;\n };\n } | undefined;\n}\n"],"mappings":"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","names":[]}
|
package/dist/https.d.mts
CHANGED
package/dist/https.js
CHANGED