fluxion-ts 0.1.4 → 0.1.6
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/README.md +7 -3
- package/dist/index.cjs +7 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.mjs +7 -3
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -22,7 +22,7 @@ Fluxion is a filesystem-routing dynamic server for Node.js.
|
|
|
22
22
|
## Install
|
|
23
23
|
|
|
24
24
|
```bash
|
|
25
|
-
|
|
25
|
+
pnpm add fluxion
|
|
26
26
|
```
|
|
27
27
|
|
|
28
28
|
## Quick Start
|
|
@@ -42,12 +42,16 @@ fluxion({
|
|
|
42
42
|
Create `dynamicDirectory/hello.ts`:
|
|
43
43
|
|
|
44
44
|
```ts
|
|
45
|
-
|
|
45
|
+
import { defineFluxionHandler } from 'fluxion';
|
|
46
|
+
|
|
47
|
+
// defineFluxionHandler is only for better type inference and editor support.
|
|
48
|
+
// You can export the handler function directly without it.
|
|
49
|
+
export default defineFluxionHandler(async function handler(req) {
|
|
46
50
|
return {
|
|
47
51
|
message: 'hello fluxion',
|
|
48
52
|
path: req.url.pathname,
|
|
49
53
|
};
|
|
50
|
-
}
|
|
54
|
+
})
|
|
51
55
|
```
|
|
52
56
|
|
|
53
57
|
Run:
|
package/dist/index.cjs
CHANGED
|
@@ -933,9 +933,13 @@ function PromiseTry(fn, ...args) {
|
|
|
933
933
|
return new Promise((resolve, reject) => {
|
|
934
934
|
// in case `fn` throws synchronously, we catch it and reject the promise
|
|
935
935
|
try {
|
|
936
|
-
fn(...args)
|
|
937
|
-
|
|
938
|
-
.catch(reject);
|
|
936
|
+
const r = fn(...args);
|
|
937
|
+
if (r instanceof Promise) {
|
|
938
|
+
r.then(resolve).catch(reject);
|
|
939
|
+
}
|
|
940
|
+
else {
|
|
941
|
+
resolve(r);
|
|
942
|
+
}
|
|
939
943
|
}
|
|
940
944
|
catch (error) {
|
|
941
945
|
reject(error);
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/vendor/ansi-styles/index.js","../node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/vendor/supports-color/browser.js","../node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/utilities.js","../node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/index.js","../../src/common/dtm.ts","../../src/common/native.ts","../../src/common/injector.ts","../../src/common/logger.ts","../../src/common/expect.ts","../../src/core/utils/options.ts","../../src/core/cluster/consts.ts","../../src/core/cluster/communicate.ts","../../src/common/consts.ts","../../src/core/utils/respond.ts","../../src/core/cluster/meta-api.ts","../../src/core/cluster/primary.ts","../../src/common/promise-try.ts","../../src/core/utils/headers.ts","../../src/core/utils/request.ts","../../src/core/utils/query.ts","../../src/core/utils/body.ts","../../src/core/utils/cookie.ts","../../src/core/cluster/server.ts","../../src/core/cluster/worker.ts","../../src/core/watch.ts","../../src/core/router.ts","../../src/core/fluxion.ts","../../src/index.ts"],"sourcesContent":["const ANSI_BACKGROUND_OFFSET = 10;\n\nconst wrapAnsi16 = (offset = 0) => code => `\\u001B[${code + offset}m`;\n\nconst wrapAnsi256 = (offset = 0) => code => `\\u001B[${38 + offset};5;${code}m`;\n\nconst wrapAnsi16m = (offset = 0) => (red, green, blue) => `\\u001B[${38 + offset};2;${red};${green};${blue}m`;\n\nconst styles = {\n\tmodifier: {\n\t\treset: [0, 0],\n\t\t// 21 isn't widely supported and 22 does the same thing\n\t\tbold: [1, 22],\n\t\tdim: [2, 22],\n\t\titalic: [3, 23],\n\t\tunderline: [4, 24],\n\t\toverline: [53, 55],\n\t\tinverse: [7, 27],\n\t\thidden: [8, 28],\n\t\tstrikethrough: [9, 29],\n\t},\n\tcolor: {\n\t\tblack: [30, 39],\n\t\tred: [31, 39],\n\t\tgreen: [32, 39],\n\t\tyellow: [33, 39],\n\t\tblue: [34, 39],\n\t\tmagenta: [35, 39],\n\t\tcyan: [36, 39],\n\t\twhite: [37, 39],\n\n\t\t// Bright color\n\t\tblackBright: [90, 39],\n\t\tgray: [90, 39], // Alias of `blackBright`\n\t\tgrey: [90, 39], // Alias of `blackBright`\n\t\tredBright: [91, 39],\n\t\tgreenBright: [92, 39],\n\t\tyellowBright: [93, 39],\n\t\tblueBright: [94, 39],\n\t\tmagentaBright: [95, 39],\n\t\tcyanBright: [96, 39],\n\t\twhiteBright: [97, 39],\n\t},\n\tbgColor: {\n\t\tbgBlack: [40, 49],\n\t\tbgRed: [41, 49],\n\t\tbgGreen: [42, 49],\n\t\tbgYellow: [43, 49],\n\t\tbgBlue: [44, 49],\n\t\tbgMagenta: [45, 49],\n\t\tbgCyan: [46, 49],\n\t\tbgWhite: [47, 49],\n\n\t\t// Bright color\n\t\tbgBlackBright: [100, 49],\n\t\tbgGray: [100, 49], // Alias of `bgBlackBright`\n\t\tbgGrey: [100, 49], // Alias of `bgBlackBright`\n\t\tbgRedBright: [101, 49],\n\t\tbgGreenBright: [102, 49],\n\t\tbgYellowBright: [103, 49],\n\t\tbgBlueBright: [104, 49],\n\t\tbgMagentaBright: [105, 49],\n\t\tbgCyanBright: [106, 49],\n\t\tbgWhiteBright: [107, 49],\n\t},\n};\n\nexport const modifierNames = Object.keys(styles.modifier);\nexport const foregroundColorNames = Object.keys(styles.color);\nexport const backgroundColorNames = Object.keys(styles.bgColor);\nexport const colorNames = [...foregroundColorNames, ...backgroundColorNames];\n\nfunction assembleStyles() {\n\tconst codes = new Map();\n\n\tfor (const [groupName, group] of Object.entries(styles)) {\n\t\tfor (const [styleName, style] of Object.entries(group)) {\n\t\t\tstyles[styleName] = {\n\t\t\t\topen: `\\u001B[${style[0]}m`,\n\t\t\t\tclose: `\\u001B[${style[1]}m`,\n\t\t\t};\n\n\t\t\tgroup[styleName] = styles[styleName];\n\n\t\t\tcodes.set(style[0], style[1]);\n\t\t}\n\n\t\tObject.defineProperty(styles, groupName, {\n\t\t\tvalue: group,\n\t\t\tenumerable: false,\n\t\t});\n\t}\n\n\tObject.defineProperty(styles, 'codes', {\n\t\tvalue: codes,\n\t\tenumerable: false,\n\t});\n\n\tstyles.color.close = '\\u001B[39m';\n\tstyles.bgColor.close = '\\u001B[49m';\n\n\tstyles.color.ansi = wrapAnsi16();\n\tstyles.color.ansi256 = wrapAnsi256();\n\tstyles.color.ansi16m = wrapAnsi16m();\n\tstyles.bgColor.ansi = wrapAnsi16(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi256 = wrapAnsi256(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET);\n\n\t// From https://github.com/Qix-/color-convert/blob/3f0e0d4e92e235796ccb17f6e85c72094a651f49/conversions.js\n\tObject.defineProperties(styles, {\n\t\trgbToAnsi256: {\n\t\t\tvalue(red, green, blue) {\n\t\t\t\t// We use the extended greyscale palette here, with the exception of\n\t\t\t\t// black and white. normal palette only has 4 greyscale shades.\n\t\t\t\tif (red === green && green === blue) {\n\t\t\t\t\tif (red < 8) {\n\t\t\t\t\t\treturn 16;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (red > 248) {\n\t\t\t\t\t\treturn 231;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Math.round(((red - 8) / 247) * 24) + 232;\n\t\t\t\t}\n\n\t\t\t\treturn 16\n\t\t\t\t\t+ (36 * Math.round(red / 255 * 5))\n\t\t\t\t\t+ (6 * Math.round(green / 255 * 5))\n\t\t\t\t\t+ Math.round(blue / 255 * 5);\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToRgb: {\n\t\t\tvalue(hex) {\n\t\t\t\tconst matches = /[a-f\\d]{6}|[a-f\\d]{3}/i.exec(hex.toString(16));\n\t\t\t\tif (!matches) {\n\t\t\t\t\treturn [0, 0, 0];\n\t\t\t\t}\n\n\t\t\t\tlet [colorString] = matches;\n\n\t\t\t\tif (colorString.length === 3) {\n\t\t\t\t\tcolorString = [...colorString].map(character => character + character).join('');\n\t\t\t\t}\n\n\t\t\t\tconst integer = Number.parseInt(colorString, 16);\n\n\t\t\t\treturn [\n\t\t\t\t\t/* eslint-disable no-bitwise */\n\t\t\t\t\t(integer >> 16) & 0xFF,\n\t\t\t\t\t(integer >> 8) & 0xFF,\n\t\t\t\t\tinteger & 0xFF,\n\t\t\t\t\t/* eslint-enable no-bitwise */\n\t\t\t\t];\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi256: {\n\t\t\tvalue: hex => styles.rgbToAnsi256(...styles.hexToRgb(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t\tansi256ToAnsi: {\n\t\t\tvalue(code) {\n\t\t\t\tif (code < 8) {\n\t\t\t\t\treturn 30 + code;\n\t\t\t\t}\n\n\t\t\t\tif (code < 16) {\n\t\t\t\t\treturn 90 + (code - 8);\n\t\t\t\t}\n\n\t\t\t\tlet red;\n\t\t\t\tlet green;\n\t\t\t\tlet blue;\n\n\t\t\t\tif (code >= 232) {\n\t\t\t\t\tred = (((code - 232) * 10) + 8) / 255;\n\t\t\t\t\tgreen = red;\n\t\t\t\t\tblue = red;\n\t\t\t\t} else {\n\t\t\t\t\tcode -= 16;\n\n\t\t\t\t\tconst remainder = code % 36;\n\n\t\t\t\t\tred = Math.floor(code / 36) / 5;\n\t\t\t\t\tgreen = Math.floor(remainder / 6) / 5;\n\t\t\t\t\tblue = (remainder % 6) / 5;\n\t\t\t\t}\n\n\t\t\t\tconst value = Math.max(red, green, blue) * 2;\n\n\t\t\t\tif (value === 0) {\n\t\t\t\t\treturn 30;\n\t\t\t\t}\n\n\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\tlet result = 30 + ((Math.round(blue) << 2) | (Math.round(green) << 1) | Math.round(red));\n\n\t\t\t\tif (value === 2) {\n\t\t\t\t\tresult += 60;\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\trgbToAnsi: {\n\t\t\tvalue: (red, green, blue) => styles.ansi256ToAnsi(styles.rgbToAnsi256(red, green, blue)),\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi: {\n\t\t\tvalue: hex => styles.ansi256ToAnsi(styles.hexToAnsi256(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t});\n\n\treturn styles;\n}\n\nconst ansiStyles = assembleStyles();\n\nexport default ansiStyles;\n","/* eslint-env browser */\n\nconst level = (() => {\n\tif (!('navigator' in globalThis)) {\n\t\treturn 0;\n\t}\n\n\tif (globalThis.navigator.userAgentData) {\n\t\tconst brand = navigator.userAgentData.brands.find(({brand}) => brand === 'Chromium');\n\t\tif (brand && brand.version > 93) {\n\t\t\treturn 3;\n\t\t}\n\t}\n\n\tif (/\\b(Chrome|Chromium)\\//.test(globalThis.navigator.userAgent)) {\n\t\treturn 1;\n\t}\n\n\treturn 0;\n})();\n\nconst colorSupport = level !== 0 && {\n\tlevel,\n\thasBasic: true,\n\thas256: level >= 2,\n\thas16m: level >= 3,\n};\n\nconst supportsColor = {\n\tstdout: colorSupport,\n\tstderr: colorSupport,\n};\n\nexport default supportsColor;\n","// TODO: When targeting Node.js 16, use `String.prototype.replaceAll`.\nexport function stringReplaceAll(string, substring, replacer) {\n\tlet index = string.indexOf(substring);\n\tif (index === -1) {\n\t\treturn string;\n\t}\n\n\tconst substringLength = substring.length;\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\treturnValue += string.slice(endIndex, index) + substring + replacer;\n\t\tendIndex = index + substringLength;\n\t\tindex = string.indexOf(substring, endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.slice(endIndex);\n\treturn returnValue;\n}\n\nexport function stringEncaseCRLFWithFirstIndex(string, prefix, postfix, index) {\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\tconst gotCR = string[index - 1] === '\\r';\n\t\treturnValue += string.slice(endIndex, (gotCR ? index - 1 : index)) + prefix + (gotCR ? '\\r\\n' : '\\n') + postfix;\n\t\tendIndex = index + 1;\n\t\tindex = string.indexOf('\\n', endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.slice(endIndex);\n\treturn returnValue;\n}\n","import ansiStyles from '#ansi-styles';\nimport supportsColor from '#supports-color';\nimport { // eslint-disable-line import/order\n\tstringReplaceAll,\n\tstringEncaseCRLFWithFirstIndex,\n} from './utilities.js';\n\nconst {stdout: stdoutColor, stderr: stderrColor} = supportsColor;\n\nconst GENERATOR = Symbol('GENERATOR');\nconst STYLER = Symbol('STYLER');\nconst IS_EMPTY = Symbol('IS_EMPTY');\n\n// `supportsColor.level` → `ansiStyles.color[name]` mapping\nconst levelMapping = [\n\t'ansi',\n\t'ansi',\n\t'ansi256',\n\t'ansi16m',\n];\n\nconst styles = Object.create(null);\n\nconst applyOptions = (object, options = {}) => {\n\tif (options.level && !(Number.isInteger(options.level) && options.level >= 0 && options.level <= 3)) {\n\t\tthrow new Error('The `level` option should be an integer from 0 to 3');\n\t}\n\n\t// Detect level if not set manually\n\tconst colorLevel = stdoutColor ? stdoutColor.level : 0;\n\tobject.level = options.level === undefined ? colorLevel : options.level;\n};\n\nexport class Chalk {\n\tconstructor(options) {\n\t\t// eslint-disable-next-line no-constructor-return\n\t\treturn chalkFactory(options);\n\t}\n}\n\nconst chalkFactory = options => {\n\tconst chalk = (...strings) => strings.join(' ');\n\tapplyOptions(chalk, options);\n\n\tObject.setPrototypeOf(chalk, createChalk.prototype);\n\n\treturn chalk;\n};\n\nfunction createChalk(options) {\n\treturn chalkFactory(options);\n}\n\nObject.setPrototypeOf(createChalk.prototype, Function.prototype);\n\nfor (const [styleName, style] of Object.entries(ansiStyles)) {\n\tstyles[styleName] = {\n\t\tget() {\n\t\t\tconst builder = createBuilder(this, createStyler(style.open, style.close, this[STYLER]), this[IS_EMPTY]);\n\t\t\tObject.defineProperty(this, styleName, {value: builder});\n\t\t\treturn builder;\n\t\t},\n\t};\n}\n\nstyles.visible = {\n\tget() {\n\t\tconst builder = createBuilder(this, this[STYLER], true);\n\t\tObject.defineProperty(this, 'visible', {value: builder});\n\t\treturn builder;\n\t},\n};\n\nconst getModelAnsi = (model, level, type, ...arguments_) => {\n\tif (model === 'rgb') {\n\t\tif (level === 'ansi16m') {\n\t\t\treturn ansiStyles[type].ansi16m(...arguments_);\n\t\t}\n\n\t\tif (level === 'ansi256') {\n\t\t\treturn ansiStyles[type].ansi256(ansiStyles.rgbToAnsi256(...arguments_));\n\t\t}\n\n\t\treturn ansiStyles[type].ansi(ansiStyles.rgbToAnsi(...arguments_));\n\t}\n\n\tif (model === 'hex') {\n\t\treturn getModelAnsi('rgb', level, type, ...ansiStyles.hexToRgb(...arguments_));\n\t}\n\n\treturn ansiStyles[type][model](...arguments_);\n};\n\nconst usedModels = ['rgb', 'hex', 'ansi256'];\n\nfor (const model of usedModels) {\n\tstyles[model] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(getModelAnsi(model, levelMapping[level], 'color', ...arguments_), ansiStyles.color.close, this[STYLER]);\n\t\t\t\treturn createBuilder(this, styler, this[IS_EMPTY]);\n\t\t\t};\n\t\t},\n\t};\n\n\tconst bgModel = 'bg' + model[0].toUpperCase() + model.slice(1);\n\tstyles[bgModel] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(getModelAnsi(model, levelMapping[level], 'bgColor', ...arguments_), ansiStyles.bgColor.close, this[STYLER]);\n\t\t\t\treturn createBuilder(this, styler, this[IS_EMPTY]);\n\t\t\t};\n\t\t},\n\t};\n}\n\nconst proto = Object.defineProperties(() => {}, {\n\t...styles,\n\tlevel: {\n\t\tenumerable: true,\n\t\tget() {\n\t\t\treturn this[GENERATOR].level;\n\t\t},\n\t\tset(level) {\n\t\t\tthis[GENERATOR].level = level;\n\t\t},\n\t},\n});\n\nconst createStyler = (open, close, parent) => {\n\tlet openAll;\n\tlet closeAll;\n\tif (parent === undefined) {\n\t\topenAll = open;\n\t\tcloseAll = close;\n\t} else {\n\t\topenAll = parent.openAll + open;\n\t\tcloseAll = close + parent.closeAll;\n\t}\n\n\treturn {\n\t\topen,\n\t\tclose,\n\t\topenAll,\n\t\tcloseAll,\n\t\tparent,\n\t};\n};\n\nconst createBuilder = (self, _styler, _isEmpty) => {\n\t// Single argument is hot path, implicit coercion is faster than anything\n\t// eslint-disable-next-line no-implicit-coercion\n\tconst builder = (...arguments_) => applyStyle(builder, (arguments_.length === 1) ? ('' + arguments_[0]) : arguments_.join(' '));\n\n\t// We alter the prototype because we must return a function, but there is\n\t// no way to create a function with a different prototype\n\tObject.setPrototypeOf(builder, proto);\n\n\tbuilder[GENERATOR] = self;\n\tbuilder[STYLER] = _styler;\n\tbuilder[IS_EMPTY] = _isEmpty;\n\n\treturn builder;\n};\n\nconst applyStyle = (self, string) => {\n\tif (self.level <= 0 || !string) {\n\t\treturn self[IS_EMPTY] ? '' : string;\n\t}\n\n\tlet styler = self[STYLER];\n\n\tif (styler === undefined) {\n\t\treturn string;\n\t}\n\n\tconst {openAll, closeAll} = styler;\n\tif (string.includes('\\u001B')) {\n\t\twhile (styler !== undefined) {\n\t\t\t// Replace any instances already present with a re-opening code\n\t\t\t// otherwise only the part of the string until said closing code\n\t\t\t// will be colored, and the rest will simply be 'plain'.\n\t\t\tstring = stringReplaceAll(string, styler.close, styler.open);\n\n\t\t\tstyler = styler.parent;\n\t\t}\n\t}\n\n\t// We can move both next actions out of loop, because remaining actions in loop won't have\n\t// any/visible effect on parts we add here. Close the styling before a linebreak and reopen\n\t// after next line to fix a bleed issue on macOS: https://github.com/chalk/chalk/pull/92\n\tconst lfIndex = string.indexOf('\\n');\n\tif (lfIndex !== -1) {\n\t\tstring = stringEncaseCRLFWithFirstIndex(string, closeAll, openAll, lfIndex);\n\t}\n\n\treturn openAll + string + closeAll;\n};\n\nObject.defineProperties(createChalk.prototype, styles);\n\nconst chalk = createChalk();\nexport const chalkStderr = createChalk({level: stderrColor ? stderrColor.level : 0});\n\nexport {\n\tmodifierNames,\n\tforegroundColorNames,\n\tbackgroundColorNames,\n\tcolorNames,\n\n\t// TODO: Remove these aliases in the next major version\n\tmodifierNames as modifiers,\n\tforegroundColorNames as foregroundColors,\n\tbackgroundColorNames as backgroundColors,\n\tcolorNames as colors,\n} from './vendor/ansi-styles/index.js';\n\nexport {\n\tstdoutColor as supportsColor,\n\tstderrColor as supportsColorStderr,\n};\n\nexport default chalk;\n","export function dtm(dt = new Date()) {\n const y = dt.getFullYear();\n const m = String(dt.getMonth() + 1).padStart(2, '0');\n const d = String(dt.getDate()).padStart(2, '0');\n const hh = String(dt.getHours()).padStart(2, '0');\n const mm = String(dt.getMinutes()).padStart(2, '0');\n const ss = String(dt.getSeconds()).padStart(2, '0');\n const ms = String(dt.getMilliseconds()).padStart(3, '0');\n return `${y}.${m}.${d} ${hh}:${mm}:${ss}.${ms}`;\n}\n","export const $stringify = JSON.stringify;\n\nexport const $keys = Object.keys;\n","import type { InjectionConfig } from '@/common/types.js';\n\nexport function loadFunction(injectionConfig: InjectionConfig): (...args: any[]) => any {\n const m = require(injectionConfig.modulePath);\n if (typeof m === 'function') {\n return m;\n } else if (typeof m.default === 'function') {\n return m.default;\n } else if (typeof m.handler === 'function') {\n return m.handler;\n } else {\n $throw(\n `Invalid handler module '${injectionConfig.modulePath}', make sure it has a default export or named export called \"handler\" which is a function`,\n );\n }\n}\n","import chalk from 'chalk';\nimport type { otherstring, InjectionConfig } from '@/common/types.js';\nimport type { FluxionContext } from '@/core/types.js';\n\nimport { dtm } from './dtm.js';\nimport { $keys, $stringify } from './native.js';\nimport { loadFunction } from './injector.js';\n\ntype LogLevel = 'INFO' | 'WARN' | 'ERROR' | 'SUCC' | 'DEBUG' | 'VERBOSE' | otherstring;\n\ninterface LogEntry {\n timestamp: string;\n level: LogLevel;\n event: string;\n message?: string;\n [key: string]: unknown;\n}\n\ntype LoggerSink = (entry: LogEntry) => void;\n\nexport type LoggerOption = 'one-line' | 'json-line' | InjectionConfig;\n\nexport interface FluxionLogger {\n /**\n * [WARN] We assert that `fields` is an object or undefined.\n */\n write(level: LogLevel, event: string, fields?: object): void;\n info(event: string, fields?: object): void;\n warn(event: string, fields?: object): void;\n error(event: string, fields?: object): void;\n succ(event: string, fields?: object): void;\n debug(event: string, fields?: object): void;\n verbose(event: string, fields?: object): void;\n}\n\nconst safeStringify = (value: unknown): string => {\n try {\n return $stringify(value);\n } catch {\n return '[unserializable]';\n }\n};\n\nconst ColoredLevels: Record<LogLevel, string> = {\n INFO: chalk.hex('#0386e3')('INFO'),\n WARN: chalk.hex('#fb923c')('WARN'),\n ERROR: chalk.hex('#ef4444')('ERROR'),\n SUCC: chalk.hex('#22c55e')('SUCC'),\n DEBUG: chalk.hex('#d327e0')('DEBUG'),\n VERBOSE: chalk.hex('#36ffeb')('SUCC'),\n};\nconst TimestampColor = chalk.hex('#166534');\n\nexport const oneLineLogger: LoggerSink = (entry: LogEntry) => {\n const { level: rawLevel, timestamp: rawTimestamp, event: rawEvent, message: rawMessage, ...fields } = entry;\n\n const timestamp = TimestampColor(`[${rawTimestamp}]`);\n const level = ColoredLevels[rawLevel] ?? rawLevel;\n const body = rawMessage ?? rawEvent;\n const fieldsText = $keys(fields).length > 0 ? ` ${chalk.dim(safeStringify(fields))}` : '';\n\n console.log(`${timestamp} ${level} ${body}${fieldsText}`);\n};\n\n/**\n * & Logger Options here is checked by normalizeOptions function.\n */\nfunction resolveLoggerSink(cx: Pick<FluxionContext, 'options'>): LoggerSink {\n const loggerOption = cx.options.logger;\n if (loggerOption === undefined || loggerOption === 'one-line') {\n return oneLineLogger;\n }\n\n if (loggerOption === 'json-line') {\n return (entry: LogEntry) => console.log(safeStringify(entry));\n }\n\n return loadFunction(loggerOption) as LoggerSink;\n}\n\nexport function createLogger(cx: Pick<FluxionContext, 'options'>): FluxionLogger {\n const sink = resolveLoggerSink(cx);\n\n const logger: FluxionLogger = {\n write(level: LogLevel, event: string, fields: Record<string, unknown> = {}): void {\n const entry: LogEntry = {\n ...fields,\n timestamp: dtm(),\n level,\n event,\n };\n\n try {\n sink(entry);\n } catch {\n // Ignore logger sink failures to avoid breaking request handling.\n }\n },\n info(event: string, fields?: Record<string, unknown>): void {\n this.write('INFO', event, fields);\n },\n warn(event: string, fields?: Record<string, unknown>): void {\n this.write('WARN', event, fields);\n },\n error(event: string, fields?: Record<string, unknown>): void {\n this.write('ERROR', event, fields);\n },\n succ(event: string, fields?: Record<string, unknown>): void {\n this.write('SUCC', event, fields);\n },\n debug(event: string, fields?: Record<string, unknown>): void {\n this.write('DEBUG', event, fields);\n },\n verbose(event: string, fields?: Record<string, unknown>): void {\n this.write('VERBOSE', event, fields);\n },\n };\n\n return logger;\n}\n\n/**\n * ! Error.isError needs Node.js 24\n */\nexport const getErrorMessage = (error: unknown): string =>\n typeof error === 'object' && error !== null ? (error as any).message : String(error);\n","export namespace whether {\n export const isObject = (value: unknown): value is Record<string, unknown> => {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n };\n}\n\nexport namespace expect {\n export function isObject<T = Record<string, unknown>>(o: unknown, message: string): asserts o is T {\n if (typeof o !== 'object' || o === null) {\n $throw(message);\n }\n }\n\n export function isString(s: unknown, message: string): asserts s is string {\n if (typeof s !== 'string') {\n $throw(message);\n }\n }\n\n export function isNumber(n: unknown, message: string): asserts n is number {\n if (typeof n !== 'number') {\n $throw(message);\n }\n }\n\n export function isPositiveInteger(n: unknown, message: string): asserts n is number {\n if (typeof n !== 'number' || n <= 0 || !Number.isSafeInteger(n)) {\n $throw(message);\n }\n }\n\n export function isObjectArray<T = Record<string, unknown>>(arr: unknown, message: string): asserts arr is T[] {\n if (!Array.isArray(arr) || arr.some((item) => typeof item !== 'object' || item === null)) {\n $throw(message);\n }\n }\n}\n","import fs, { existsSync } from 'node:fs';\nimport type { LoggerOption } from '@/common/logger.js';\nimport type { InjectionConfig } from '@/common/types.js';\nimport { expect } from '@/common/expect.js';\n\nimport type { WorkerOptions, FluxionOptions, NormalizedFluxionOptions } from '../types.js';\n\n/**\n * Resolves runtime options with framework defaults.\n */\nfunction resolveWorkerOptions(options: Partial<WorkerOptions>): WorkerOptions {\n return {\n maxWorkerCount: options.maxWorkerCount ?? 4,\n requestTimeoutMs: options.requestTimeoutMs ?? 3000,\n maxInflight: options.maxInflight ?? 64,\n memorySoftLimitMb: options.memorySoftLimitMb ?? 96,\n memoryHardLimitMb: options.memoryHardLimitMb ?? 128,\n memorySampleIntervalMs: options.memorySampleIntervalMs ?? 5000,\n maxOldGenerationSizeMb: options.maxOldGenerationSizeMb ?? 128,\n maxYoungGenerationSizeMb: options.maxYoungGenerationSizeMb ?? 32,\n stackSizeMb: options.stackSizeMb ?? 4,\n maxResponseBytes: options.maxResponseBytes ?? 2 * 1024 * 1024,\n };\n}\n\nfunction expectLoggerOption(o: InjectionConfig | LoggerOption) {\n if (o === 'one-line' || o === 'json-line') {\n return;\n }\n if (typeof o === 'object' && o !== null && typeof o.modulePath === 'string' && typeof o.name === 'string') {\n return;\n }\n $throw(`Invalid logger option, must be 'one-line', 'json-line' or { modulePath: string; name: string; }`);\n}\n\n/**\n * Normalize options and create necessary resources like the dynamic directory and logger.\n */\nexport function normalizeOptions(options: FluxionOptions): NormalizedFluxionOptions {\n expect.isObject(options, 'FluxionOptions must be an object');\n\n let {\n dir,\n host,\n port,\n metaPort,\n injections = [],\n moduleDir = process.cwd(),\n workerOptions = {},\n maxRequestBytes = 8_000_000,\n reloadDelay = 300,\n apiExts = ['.ts'],\n routerExclude = [],\n } = options as FluxionOptions;\n const logger = options.logger ?? 'one-line';\n expectLoggerOption(logger);\n\n expect.isString(dir, 'FluxionOptions.dir must be a string');\n\n expect.isString(moduleDir, 'FluxionOptions.moduleDir must be a string');\n\n expect.isString(host, 'FluxionOptions.host must be a string');\n\n expect.isPositiveInteger(reloadDelay, 'FluxionOptions.reloadDelay must be a positive integer');\n if (reloadDelay < 50) {\n $throw('FluxionOptions.reloadDelay must be greater than or equal to 50');\n }\n\n expect.isPositiveInteger(port, 'FluxionOptions.port must be a positive integer');\n if (port > 65535) {\n $throw('FluxionOptions.port must be less than or equal to 65535');\n }\n metaPort ??= port + 1;\n expect.isPositiveInteger(metaPort, 'FluxionOptions.metaPort must be a positive integer');\n if (metaPort > 65535) {\n $throw('FluxionOptions.metaPort must be less than or equal to 65535');\n }\n if (metaPort === port) {\n $throw('FluxionOptions.metaPort must be different from FluxionOptions.port');\n }\n expect.isObjectArray<InjectionConfig>(injections, 'FluxionOptions.injections must be an array of objects');\n expect.isObject(workerOptions, 'FluxionOptions.workerOptions must be an object');\n expect.isPositiveInteger(maxRequestBytes, 'FluxionOptions.maxRequestBytes must be a positive integer');\n\n if (!existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n\n return {\n dir,\n host,\n port,\n reloadDelay,\n metaPort,\n injections,\n moduleDir,\n workerOptions: resolveWorkerOptions(workerOptions),\n maxRequestBytes,\n logger,\n apiExts,\n routerExclude,\n };\n}\n","import type { PrimaryMessage as PrimaryMessage, WorkerMessage as WorkerMessage } from './types.js';\n\nexport const INJECTION_KEY = Symbol.for('fluxion.injection');\n\nexport const enum PrimaryAction {\n /**\n * Health check message, the worker should respond with Pong and the latency information\n */\n Ping = 100,\n}\n\nexport const enum WorkerAction {\n /**\n * Just created\n */\n Created = 200,\n\n /**\n * Ready for tasks\n * - fluxion options are injected\n */\n Ready,\n\n /**\n * Response to Ping, used for health check and latency measurement\n */\n Pong,\n\n /**\n * Runtime telemetry snapshot from worker process.\n */\n Stats,\n}\n\nexport const isPrimaryMessage = (v: PrimaryMessage): v is PrimaryMessage => [PrimaryAction.Ping].includes(v?.type);\n\nexport const isWorkerMessage = (v: WorkerMessage): v is WorkerMessage =>\n [WorkerAction.Pong, WorkerAction.Created, WorkerAction.Ready, WorkerAction.Stats].includes(v?.type);\n","import type cluster from 'node:cluster';\nimport type { PrimaryMessage, WorkerMessage } from './types.js';\n\nexport const sendToPrimary = (message: WorkerMessage) => process.send?.(message);\n\nexport const sendToWorker = (worker: cluster.Worker, message: PrimaryMessage) => worker.send(message);\n","export const DUMMY_BASE_URL = 'http://fluxion.local';\nexport const META_PREFIX = '/_fluxion';\n\nexport const STATIC_CONTENT_TYPES: Record<string, string> = {\n '.css': 'text/css; charset=utf-8',\n '.html': 'text/html; charset=utf-8',\n '.ico': 'image/x-icon',\n '.js': 'text/javascript; charset=utf-8',\n '.json': 'application/json; charset=utf-8',\n '.map': 'application/json; charset=utf-8',\n '.png': 'image/png',\n '.jpg': 'image/jpeg',\n '.jpeg': 'image/jpeg',\n '.svg': 'image/svg+xml',\n '.txt': 'text/plain; charset=utf-8',\n '.webp': 'image/webp',\n};\n\nexport const enum HttpCode {\n Ok = 200,\n BadRequest = 400,\n PayloadTooLarge = 413,\n NotFound = 404,\n InternalServerError = 500,\n}\n\nexport const enum HandlerResult {\n NotFound,\n Handled,\n}\n","import type { ServerResponse } from 'node:http';\nimport { HttpCode } from '@/common/consts.js';\n\nexport function sendJson(res: ServerResponse, payload: unknown, statusCode: HttpCode = HttpCode.Ok): void {\n res.statusCode = statusCode;\n res.setHeader('Content-Type', 'application/json; charset=utf-8');\n res.end(JSON.stringify(payload));\n}\n\nexport function safeSendJson(res: ServerResponse, payload: unknown, statusCode: HttpCode = HttpCode.Ok): void {\n if (res.writableEnded) {\n return;\n }\n\n if (res.headersSent) {\n res.end();\n return;\n }\n\n sendJson(res, payload, statusCode);\n}\n","import http from 'node:http';\n\nimport { getErrorMessage } from '@/common/logger.js';\nimport { HttpCode, META_PREFIX } from '@/common/consts.js';\nimport { sendJson } from '../utils/respond.js';\nimport { FluxionContext } from '../types.js';\n\nexport function createPrimaryMetaApiServer(\n cx: Pick<FluxionContext, 'logger' | 'options' | 'router'>,\n getWorkersSnapshot: () => unknown,\n): http.Server {\n const server = http.createServer((req, res) => {\n const method = req.method ?? 'GET';\n\n let pathname = '/';\n try {\n pathname = new URL(req.url ?? '/', 'http://fluxion.local').pathname;\n } catch {\n sendJson(res, { message: 'Bad Request: invalid url' }, HttpCode.BadRequest);\n return;\n }\n\n if (method === 'GET' && pathname === META_PREFIX + '/healthz') {\n sendJson(res, {\n ok: true,\n role: 'primary',\n pid: process.pid,\n now: Date.now(),\n uptimeSeconds: Number(process.uptime().toFixed(3)),\n });\n return;\n }\n\n if (method === 'GET' && pathname === META_PREFIX + '/workers') {\n sendJson(res, {\n ok: true,\n now: Date.now(),\n workers: getWorkersSnapshot(),\n });\n return;\n }\n\n sendJson(res, { message: 'Not Found' }, HttpCode.NotFound);\n });\n\n server.on('listening', () => {\n cx.logger.info('MetaApiStarted', {\n pid: process.pid,\n host: cx.options.host,\n port: cx.options.metaPort,\n prefix: META_PREFIX,\n });\n });\n\n server.on('error', (error) => {\n cx.logger.error('MetaApiError', {\n host: cx.options.host,\n port: cx.options.metaPort,\n error: getErrorMessage(error),\n });\n process.exit(1);\n });\n\n server.listen(cx.options.metaPort, cx.options.host);\n return server;\n}\n","import type { WorkerMessage, WorkerState } from './types.js';\nimport type { FluxionContext } from '../types.js';\nimport os from 'node:os';\nimport cluster from 'node:cluster';\n\nimport { isWorkerMessage, WorkerAction, PrimaryAction } from './consts.js';\nimport { sendToWorker } from './communicate.js';\nimport { createPrimaryMetaApiServer } from './meta-api.js';\n\nconst bytesToMb = (bytes: number) => Number((bytes / 1024 / 1024).toFixed(2));\n\nexport function initPrimary(cx: Pick<FluxionContext, 'logger' | 'options' | 'router'>) {\n if (!cluster.isPrimary) {\n $throw('createPrimary should only be called in primary process');\n }\n\n const { workerOptions } = cx.options;\n const cpuCount = Math.max(1, os.cpus().length);\n const workerCount = Math.max(1, Math.min(workerOptions.maxWorkerCount ?? Math.min(2, cpuCount), cpuCount));\n\n cx.logger.info('PrimaryStarted', {\n pid: process.pid,\n workers: workerCount,\n host: cx.options.host,\n port: cx.options.port,\n metaPort: cx.options.metaPort,\n });\n\n const workers = new Map<number, WorkerState>();\n\n const getWorkersSnapshot = () => {\n return {\n primaryPid: process.pid,\n host: cx.options.host,\n port: cx.options.port,\n metaPort: cx.options.metaPort,\n uptimeSeconds: Number(process.uptime().toFixed(3)),\n workers: Array.from(workers.entries()).map(([workerId, info]) => {\n const { instance } = info;\n const stats = info.lastStats;\n return {\n workerId,\n pid: info.pid ?? instance.process.pid ?? null,\n state: info.state,\n createdAt: info.createdAt,\n readyAt: info.readyAt ?? null,\n connected: instance.isConnected(),\n dead: instance.isDead(),\n exitedAfterDisconnect: instance.exitedAfterDisconnect,\n lastPongAt: info.lastPongAt ?? null,\n lastRttMs: info.lastRttMs ?? null,\n stats:\n stats === undefined\n ? null\n : {\n at: stats.at,\n uptimeSeconds: stats.uptimeSeconds,\n cpu: stats.cpu,\n memory: {\n ...stats.memory,\n rssMb: bytesToMb(stats.memory.rss),\n heapTotalMb: bytesToMb(stats.memory.heapTotal),\n heapUsedMb: bytesToMb(stats.memory.heapUsed),\n externalMb: bytesToMb(stats.memory.external),\n arrayBuffersMb: bytesToMb(stats.memory.arrayBuffers),\n },\n },\n };\n }),\n };\n };\n\n createPrimaryMetaApiServer(cx, getWorkersSnapshot);\n\n const attachWorker = (worker: cluster.Worker): void => {\n const workerInfo: WorkerState = {\n state: 'creating',\n pid: worker.process.pid,\n createdAt: Date.now(),\n instance: worker,\n };\n workers.set(worker.id, workerInfo);\n\n worker.on('message', (raw: WorkerMessage) => {\n if (!isWorkerMessage(raw)) {\n return;\n }\n\n if (raw.type === WorkerAction.Pong) {\n const rtt = Date.now() - raw.sentAt;\n workerInfo.pid = raw.pid;\n workerInfo.lastPongAt = Date.now();\n workerInfo.lastRttMs = rtt;\n return;\n }\n\n if (raw.type === WorkerAction.Ready) {\n workerInfo.state = 'ready';\n workerInfo.pid = raw.pid;\n workerInfo.readyAt = Date.now();\n cx.logger.info('WorkerReady', { workerId: worker.id, pid: raw.pid });\n return;\n }\n\n if (raw.type === WorkerAction.Created) {\n workerInfo.state = 'created';\n workerInfo.pid = raw.pid;\n cx.logger.info('WorkerCreated', { workerId: worker.id, pid: raw.pid });\n return;\n }\n\n if (raw.type === WorkerAction.Stats) {\n workerInfo.pid = raw.pid;\n workerInfo.lastStats = raw.stats;\n }\n });\n\n worker.on('exit', (code, signal) => {\n workers.delete(worker.id);\n cx.logger.warn('WorkerExited', {\n workerId: worker.id,\n pid: worker.process.pid ?? 'unknown',\n code,\n signal: signal ?? 'none',\n });\n });\n };\n\n for (let i = 0; i < workerCount; i++) {\n attachWorker(cluster.fork({ WORKER_ID: String(i + 1) }));\n }\n\n const pingTimer = setInterval(() => {\n const sentAt = Date.now();\n for (const info of workers.values()) {\n if (!info.instance.isConnected()) {\n continue;\n }\n try {\n sendToWorker(info.instance, { type: PrimaryAction.Ping, sentAt });\n } catch {\n // Ignore transient IPC errors; worker lifecycle events will reconcile state.\n }\n }\n }, 5000);\n pingTimer.unref();\n}\n","/**\n * For low version of Node.js that does not support `Promise.try`, we can implement it ourselves.\n *\n * Only for async functions.\n */\nexport function PromiseTry<T extends (...args: any[]) => Promise<any>>(fn: T, ...args: Parameters<T>) {\n return new Promise<ReturnType<T>>((resolve, reject) => {\n // in case `fn` throws synchronously, we catch it and reject the promise\n try {\n fn(...args)\n .then(resolve)\n .catch(reject);\n } catch (error) {\n reject(error);\n }\n });\n}\n","import type { IncomingMessage } from 'node:http';\n\nexport function getRealIp(req: IncomingMessage): string {\n const forwardedFor = req.headersDistinct['x-forwarded-for'];\n if (forwardedFor) {\n const firstForwarded = forwardedFor[0]?.split(',')[0]?.trim();\n if (firstForwarded && firstForwarded.length > 0) {\n return firstForwarded;\n }\n }\n\n const realIp = req.headersDistinct['x-real-ip']?.[0].trim();\n if (realIp !== undefined) {\n return realIp;\n }\n\n return req.socket.remoteAddress ?? 'unknown';\n}\n\nexport function isTextualContentType(contentType: string | undefined): boolean {\n if (contentType === undefined) {\n return false;\n }\n\n const normalized = contentType.toLowerCase();\n\n return (\n normalized.startsWith('text/') ||\n normalized.includes('json') ||\n normalized.includes('xml') ||\n normalized.includes('x-www-form-urlencoded') ||\n normalized.includes('javascript')\n );\n}\n","import { DUMMY_BASE_URL } from '@/common/consts.js';\n\nexport function toURL(rawUrl: string | undefined): URL | undefined {\n if (rawUrl === undefined) {\n return undefined;\n }\n\n try {\n return new URL(rawUrl, DUMMY_BASE_URL);\n } catch {\n return undefined;\n }\n}\n","export function parseQuery(searchParams: URLSearchParams): Record<string, string | string[]> {\n const query: Record<string, string | string[]> = {};\n\n for (const [key, value] of searchParams.entries()) {\n const existing = query[key];\n\n if (existing === undefined) {\n query[key] = value;\n continue;\n }\n\n if (Array.isArray(existing)) {\n existing.push(value);\n continue;\n }\n\n query[key] = [existing, value];\n }\n\n return query;\n}\n","import type http from 'node:http';\n\nimport { isTextualContentType } from './headers.js';\nimport { parseQuery } from './query.js';\n\nexport interface BodyPreview {\n exists: boolean;\n value?: string;\n bytes: number;\n truncated: boolean;\n}\n\nfunction createRequestBodyTooLargeError(receivedBytes: number, maxBytes: number): NodeJS.ErrnoException {\n const sizeError = new Error(\n `request body too large: ${receivedBytes.toString()} bytes exceeds ${maxBytes.toString()} bytes`,\n ) as NodeJS.ErrnoException;\n\n sizeError.code = 'REQUEST_BODY_TOO_LARGE';\n\n return sizeError;\n}\n\nfunction getHeaderValue(headerValue: string | string[] | undefined): string | undefined {\n return Array.isArray(headerValue) ? headerValue[0] : headerValue;\n}\n\nfunction createEmptyPreview(): BodyPreview {\n return {\n exists: false,\n bytes: 0,\n truncated: false,\n };\n}\n\nfunction createPreview(\n previewBuffer: Buffer,\n totalBytes: number,\n contentType: string | undefined,\n truncated: boolean,\n): BodyPreview {\n if (totalBytes === 0) {\n return createEmptyPreview();\n }\n\n if (isTextualContentType(contentType)) {\n return {\n exists: true,\n value: previewBuffer.toString('utf8'),\n bytes: totalBytes,\n truncated,\n };\n }\n\n return {\n exists: true,\n value: `<binary body: ${totalBytes} bytes>`,\n bytes: totalBytes,\n truncated,\n };\n}\n\nasync function readRequestBodyWithPreview(\n req: http.IncomingMessage,\n method: string,\n maxBytes: number,\n previewMaxBytes = 8192,\n): Promise<{ rawBody: Buffer | undefined; preview: BodyPreview }> {\n if (method === 'GET' || method === 'HEAD') {\n return {\n rawBody: undefined,\n preview: createEmptyPreview(),\n };\n }\n\n if (req.readableEnded) {\n return {\n rawBody: undefined,\n preview: createEmptyPreview(),\n };\n }\n\n const contentLengthRaw = getHeaderValue(req.headers['content-length']);\n const declaredBytes = contentLengthRaw !== undefined ? Number.parseInt(contentLengthRaw, 10) : NaN;\n\n if (Number.isFinite(declaredBytes) && declaredBytes > maxBytes) {\n throw createRequestBodyTooLargeError(declaredBytes, maxBytes);\n }\n\n return new Promise((resolve, reject) => {\n const rawBodyChunks: Buffer[] = [];\n const previewChunks: Buffer[] = [];\n let totalBytes = 0;\n let previewBytes = 0;\n let previewTruncated = false;\n let settled = false;\n\n const cleanup = (): void => {\n req.off('data', onData);\n req.off('end', onEnd);\n req.off('error', onError);\n req.off('aborted', onAborted);\n };\n\n const settle = (action: () => void): void => {\n if (settled) {\n return;\n }\n\n settled = true;\n action();\n };\n\n const onData = (chunk: Buffer | string | Uint8Array): void => {\n const bufferChunk = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);\n totalBytes += bufferChunk.byteLength;\n\n if (totalBytes > maxBytes) {\n cleanup();\n req.resume();\n settle(() => {\n reject(createRequestBodyTooLargeError(totalBytes, maxBytes));\n });\n return;\n }\n\n rawBodyChunks.push(bufferChunk);\n\n if (previewBytes < previewMaxBytes) {\n const remaining = previewMaxBytes - previewBytes;\n const nextSlice = bufferChunk.subarray(0, remaining);\n previewChunks.push(nextSlice);\n previewBytes += nextSlice.length;\n\n if (nextSlice.length < bufferChunk.length) {\n previewTruncated = true;\n }\n } else {\n previewTruncated = true;\n }\n };\n\n const onEnd = (): void => {\n cleanup();\n settle(() => {\n const rawBody = rawBodyChunks.length > 0 ? Buffer.concat(rawBodyChunks) : undefined;\n const previewBuffer = previewChunks.length > 0 ? Buffer.concat(previewChunks) : Buffer.alloc(0);\n\n resolve({\n rawBody,\n preview: createPreview(\n previewBuffer,\n rawBody?.byteLength ?? 0,\n getHeaderValue(req.headers['content-type']),\n previewTruncated,\n ),\n });\n });\n };\n\n const onError = (error: Error): void => {\n cleanup();\n settle(() => {\n reject(error);\n });\n };\n\n const onAborted = (): void => {\n cleanup();\n settle(() => {\n reject(new Error('request aborted while reading body'));\n });\n };\n\n req.on('data', onData);\n req.once('end', onEnd);\n req.once('error', onError);\n req.once('aborted', onAborted);\n });\n}\n\nexport async function parseBody(\n req: http.IncomingMessage,\n method: string,\n maxBytes: number,\n): Promise<{ body: Record<string, any>; preview: BodyPreview }> {\n const { rawBody, preview } = await readRequestBodyWithPreview(req, method, maxBytes);\n\n if (rawBody === undefined || rawBody.byteLength === 0) {\n return {\n body: {},\n preview,\n };\n }\n\n const contentType = getHeaderValue(req.headers['content-type'])?.toLowerCase() ?? '';\n\n if (contentType.includes('json')) {\n const textBody = rawBody.toString('utf8').trim();\n\n if (textBody.length === 0) {\n return {\n body: {},\n preview,\n };\n }\n\n try {\n const parsed = JSON.parse(textBody) as unknown;\n\n if (parsed !== null && typeof parsed === 'object' && !Array.isArray(parsed)) {\n return {\n body: parsed as Record<string, any>,\n preview,\n };\n }\n\n return {\n body: { value: parsed },\n preview,\n };\n } catch {\n return {\n body: { raw: textBody },\n preview,\n };\n }\n }\n\n if (contentType.includes('x-www-form-urlencoded')) {\n return {\n body: parseQuery(new URLSearchParams(rawBody.toString('utf8'))),\n preview,\n };\n }\n\n if (isTextualContentType(contentType)) {\n return {\n body: { raw: rawBody.toString('utf8') },\n preview,\n };\n }\n\n return {\n body: {},\n preview,\n };\n}\n","/**\n * Parse Cookie header string into an object\n */\nexport function parseCookie(cookieHeader: string | undefined): Record<string, string> {\n if (!cookieHeader) {\n return {};\n }\n\n const cookies: Record<string, string> = {};\n const pairs = cookieHeader.split(';');\n\n for (const pair of pairs) {\n const [key, ...valueParts] = pair.split('=');\n if (!key) continue;\n\n const trimmedKey = key.trim();\n const value = valueParts.join('=').trim();\n cookies[trimmedKey] = decodeURIComponent(value);\n }\n\n return cookies;\n}\n\n/**\n * Serialize an object into a Cookie header string\n */\nexport function serializeCookie(name: string, value: string, options?: {\n maxAge?: number;\n expires?: Date;\n domain?: string;\n path?: string;\n secure?: boolean;\n httpOnly?: boolean;\n sameSite?: 'strict' | 'lax' | 'none';\n}): string {\n let cookie = `${encodeURIComponent(name)}=${encodeURIComponent(value)}`;\n\n if (options) {\n if (options.maxAge !== undefined) {\n cookie += `; Max-Age=${options.maxAge}`;\n }\n if (options.expires) {\n cookie += `; Expires=${options.expires.toUTCString()}`;\n }\n if (options.domain) {\n cookie += `; Domain=${options.domain}`;\n }\n if (options.path) {\n cookie += `; Path=${options.path}`;\n }\n if (options.secure) {\n cookie += '; Secure';\n }\n if (options.httpOnly) {\n cookie += '; HttpOnly';\n }\n if (options.sameSite) {\n cookie += `; SameSite=${options.sameSite}`;\n }\n }\n\n return cookie;\n}\n","import http from 'node:http';\n\nimport type { FluxionContext, NormalizedRequest } from '../types.js';\nimport { $keys } from '@/common/native.js';\nimport { HttpCode, META_PREFIX } from '@/common/consts.js';\nimport { getErrorMessage } from '@/common/logger.js';\n\nimport { getRealIp } from '../utils/headers.js';\nimport { toURL } from '../utils/request.js';\nimport { safeSendJson } from '../utils/respond.js';\nimport { parseBody, type BodyPreview } from '../utils/body.js';\nimport { parseQuery } from '../utils/query.js';\nimport { parseCookie } from '../utils/cookie.js';\nimport { PromiseTry } from '@/common/promise-try.js';\n\nexport function createWorkerServer(cx: FluxionContext): http.Server {\n const server = http.createServer(async (req, res) => {\n const method = req.method ?? 'GET';\n const ip = getRealIp(req);\n const url = toURL(req.url);\n if (url === undefined) {\n safeSendJson(res, { message: 'Bad Request: req.url is undefined' }, HttpCode.BadRequest);\n return;\n }\n\n const normalized: NormalizedRequest = {\n method,\n ip,\n url,\n query: parseQuery(url.searchParams),\n body: {},\n headers: req.headers,\n cookie: parseCookie(req.headers.cookie as string | undefined),\n };\n\n let bodyPreview: BodyPreview = {\n exists: false,\n bytes: 0,\n truncated: false,\n };\n\n cx.logger.info('Req', { method, ip, path: url.pathname });\n\n const start = performance.now();\n res.once('finish', () => {\n const fields: Record<string, unknown> = {\n workerId: process.env.WORKER_ID ?? '[primary]',\n method,\n ip,\n path: url.pathname,\n status: res.statusCode,\n duration: (performance.now() - start).toFixed(4),\n };\n\n if ($keys(normalized.query).length > 0) {\n fields.query = normalized.query;\n }\n\n if (bodyPreview.exists) {\n fields.body = bodyPreview.value;\n fields.bodyBytes = bodyPreview.bytes;\n fields.bodyTruncated = bodyPreview.truncated;\n }\n\n cx.logger.info('Res', fields);\n });\n\n // * Start request handling\n try {\n if (normalized.url.pathname.startsWith(META_PREFIX + '/')) {\n safeSendJson(res, { message: `Meta APIs are available on port ${cx.options.metaPort}` }, HttpCode.NotFound);\n return;\n }\n\n const parsed = await parseBody(req, normalized.method, cx.options.maxRequestBytes);\n normalized.body = parsed.body;\n bodyPreview = parsed.preview;\n\n const handler = await cx.router.getHandler(url);\n if (!handler) {\n safeSendJson(res, { message: 'Not Found' }, HttpCode.NotFound);\n return;\n }\n\n const result = await PromiseTry(handler, normalized, req, res);\n\n if (result !== cx.router.StaticHandled) {\n safeSendJson(res, result);\n }\n } catch (error) {\n cx.logger.error('RequestFailed', {\n method: normalized.method,\n ip: normalized.ip,\n path: normalized.url.pathname,\n error: getErrorMessage(error),\n });\n\n if ((error as NodeJS.ErrnoException).code === 'REQUEST_BODY_TOO_LARGE') {\n safeSendJson(res, { message: getErrorMessage(error) }, HttpCode.PayloadTooLarge);\n } else {\n safeSendJson(res, { message: 'Internal Server Error' }, HttpCode.InternalServerError);\n }\n }\n });\n\n server.on('close', () => {\n cx.logger.info('ServerClosed', {\n host: cx.options.host,\n port: cx.options.port,\n });\n });\n\n server.listen(cx.options.port, cx.options.host, () => {\n cx.logger.info('ServerStarted', {\n pid: process.pid,\n host: cx.options.host,\n port: cx.options.port,\n });\n cx.logger.info('DynamicDirectory', { directory: cx.options.dir });\n });\n\n server.on('error', (error) => {\n cx.logger.error('ServerError', {\n error: getErrorMessage(error),\n });\n });\n\n return server;\n}\n","import type { PrimaryMessage } from './types.js';\nimport type { FluxionContext } from '../types.js';\nimport cluster from 'node:cluster';\n\nimport { getErrorMessage } from '@/common/logger.js';\nimport { loadFunction } from '@/common/injector.js';\nimport { PromiseTry } from '@/common/promise-try.js';\nimport { WorkerAction, PrimaryAction, isPrimaryMessage, INJECTION_KEY } from './consts.js';\nimport { sendToPrimary } from './communicate.js';\nimport { createWorkerServer } from './server.js';\n\nconst inject = async (cx: FluxionContext) => {\n const o = {} as any;\n Reflect.set(globalThis, INJECTION_KEY, o);\n for (let i = 0; i < cx.options.injections.length; i++) {\n const injection = cx.options.injections[i];\n const factory = loadFunction(injection);\n const instance = await PromiseTry(factory);\n o[injection.name] = instance;\n }\n cx.logger.info(`[worker ${process.pid}] injections loaded`, Object.keys(o));\n};\n\nconst startStatsReporter = () => {\n let previousCpuUsage = process.cpuUsage();\n let previousAt = Date.now();\n\n const interval = setInterval(() => {\n const now = Date.now();\n const elapsedMicros = Math.max(1, (now - previousAt) * 1000);\n const cpuDelta = process.cpuUsage(previousCpuUsage);\n const cpuPercent = Number((((cpuDelta.user + cpuDelta.system) / elapsedMicros) * 100).toFixed(2));\n\n previousCpuUsage = process.cpuUsage();\n previousAt = now;\n\n const memoryUsage = process.memoryUsage();\n sendToPrimary({\n type: WorkerAction.Stats,\n pid: process.pid,\n stats: {\n at: now,\n pid: process.pid,\n uptimeSeconds: Number(process.uptime().toFixed(3)),\n cpu: {\n userMicros: cpuDelta.user,\n systemMicros: cpuDelta.system,\n percent: cpuPercent,\n },\n memory: {\n rss: memoryUsage.rss,\n heapTotal: memoryUsage.heapTotal,\n heapUsed: memoryUsage.heapUsed,\n external: memoryUsage.external,\n arrayBuffers: memoryUsage.arrayBuffers,\n },\n },\n });\n }, 2000);\n\n interval.unref();\n};\n\nexport function initWorker(cx: FluxionContext) {\n if (cluster.isPrimary) {\n $throw('createWorker should only be called in worker process');\n }\n\n process.on('message', (raw: PrimaryMessage) => {\n if (!isPrimaryMessage(raw)) {\n return;\n }\n\n if (raw.type === PrimaryAction.Ping) {\n sendToPrimary({ type: WorkerAction.Pong, pid: process.pid, sentAt: raw.sentAt, receivedAt: Date.now() });\n return;\n }\n });\n\n sendToPrimary({ type: WorkerAction.Created, pid: process.pid });\n startStatsReporter();\n\n PromiseTry(async () => {\n await inject(cx);\n createWorkerServer(cx);\n sendToPrimary({ type: WorkerAction.Ready, pid: process.pid });\n }).catch((error) => {\n cx.logger.error('WorkerBootstrapFailed', {\n pid: process.pid,\n error: getErrorMessage(error),\n });\n process.exit(1);\n });\n}\n","import fs from 'node:fs';\nimport path from 'node:path';\nimport type { FluxionContext } from './types.js';\n\nexport class FluxionWatcher {\n // # Options\n private readonly cx: Pick<FluxionContext, 'options' | 'logger' | 'router'>;\n\n private timer: NodeJS.Timeout | null = null;\n private watcher: fs.FSWatcher | null = null;\n private readonly filesChanged: Set<string> = new Set();\n\n constructor(cx: Pick<FluxionContext, 'options' | 'logger' | 'router'>) {\n this.cx = cx;\n }\n\n /**\n * Recursively register all files in the options directory.\n */\n private init(): this {\n const dirPath = path.join(process.cwd(), this.cx.options.dir);\n\n const registerRecursive = (dir: string, relativePath: string) => {\n const entries = fs.readdirSync(dir, { withFileTypes: true });\n\n for (const entry of entries) {\n const entryPath = path.join(dir, entry.name);\n const entryRelativePath = path.join(relativePath, entry.name);\n\n if (entry.isDirectory()) {\n registerRecursive(entryPath, entryRelativePath);\n } else if (entry.isFile()) {\n try {\n this.cx.router.register(entryRelativePath);\n } catch (err) {\n this.cx.logger.error(`Error registering [${entryRelativePath}]: ${(err as Error).message}`);\n }\n }\n }\n };\n\n if (fs.existsSync(dirPath)) {\n registerRecursive(dirPath, '');\n this.cx.logger.info(`Initial registration complete for directory: ${this.cx.options.dir}`);\n } else {\n this.cx.logger.warn(`Directory does not exist: ${this.cx.options.dir}`);\n }\n\n return this;\n }\n\n /**\n * Since all actions are mapped to `rename` and `change` (WatchEventType).\n *\n * We could only record every file and reload them all.\n */\n start(): this {\n this.init();\n this.watcher = fs\n .watch(this.cx.options.dir, { recursive: true }, (_eventType, filename) => {\n if (!filename) {\n return;\n }\n\n this.filesChanged.add(filename);\n if (!this.timer) {\n this.timer = setTimeout(() => {\n this.filesChanged.forEach((p, _, s) => {\n try {\n this.cx.router.register(p);\n } catch (err) {\n this.cx.logger.error(`Error refreshing handlers: ${(err as Error).message}`);\n } finally {\n s.delete(p);\n }\n });\n\n this.timer = null;\n }, this.cx.options.reloadDelay);\n }\n })\n .on('error', (err) => {\n this.cx.logger.error(`Watcher error: ${err.message}`);\n this.cx.logger.error(`Restarting watcher...`);\n this.stop().start();\n });\n\n this.cx.logger.info(`Watcher started on directory: ${this.cx.options.dir}`);\n return this;\n }\n\n stop(): this {\n if (this.watcher) {\n this.watcher.close();\n this.watcher = null;\n }\n\n if (this.timer) {\n clearTimeout(this.timer);\n this.timer = null;\n }\n\n this.filesChanged.clear();\n return this;\n }\n}\n","import type { FluxionContext, FluxionHandler } from './types.js';\nimport { STATIC_CONTENT_TYPES } from '@/common/consts.js';\nimport { loadFunction } from '@/common/injector.js';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nexport class FluxionRouter {\n /**\n * This means the request has been handled by static resource handler, and no more response should be sent.\n */\n public readonly StaticHandled = Symbol.for('fluxion.router.StaticHandled');\n\n private readonly cx: Pick<FluxionContext, 'options' | 'logger'>;\n private readonly handlers: Map<string, FluxionHandler> = new Map();\n\n constructor(cx: Pick<FluxionContext, 'options' | 'logger'>) {\n this.cx = cx;\n }\n\n makeStaticResource(filepath: string): FluxionHandler {\n const fullPath = path.join(this.cx.options.dir, filepath);\n return async (normalized, _req, res) => {\n if (normalized.method !== 'GET' && normalized.method !== 'HEAD') {\n res.statusCode = 405;\n res.setHeader('Allow', 'GET, HEAD');\n res.end();\n return;\n }\n\n if (!fs.existsSync(fullPath)) {\n res.statusCode = 404;\n res.end('Not Found');\n return;\n }\n\n const stat = fs.statSync(fullPath);\n if (!stat.isFile()) {\n res.statusCode = 404;\n res.end('Not Found');\n return;\n }\n\n const extension = path.extname(filepath).toLowerCase();\n const contentType = STATIC_CONTENT_TYPES[extension] ?? 'application/octet-stream';\n\n res.statusCode = 200;\n res.setHeader('Content-Type', contentType);\n res.setHeader('Content-Length', String(stat.size));\n\n if (normalized.method === 'HEAD') {\n res.end();\n return;\n }\n\n return new Promise<symbol>((resolve, reject) => {\n const stream = fs.createReadStream(fullPath);\n stream.on('error', reject);\n stream.on('end', () => resolve(this.StaticHandled));\n stream.pipe(res);\n });\n };\n }\n\n /**\n * 1. Check if the path exists, if not, delete the handler;\n * 2. If the file extension matches `routerExclude`, delete it and return early;\n * 3. If the file extension matches `apiExts`, register it as an API, otherwise register as static resource;\n * @param filepath\n */\n register(filepath: string) {\n const fullpath = path.join(process.cwd(), this.cx.options.dir, filepath);\n if (!fs.existsSync(fullpath)) {\n this.handlers.delete(filepath);\n this.cx.logger.info(`[${filepath}] deleted`);\n return;\n }\n\n delete require.cache[fullpath];\n\n const extension = path.extname(filepath).toLowerCase();\n\n // Check if this file should be excluded from registration\n if (this.cx.options.routerExclude.some((ext) => extension === ext)) {\n this.handlers.delete(filepath);\n this.cx.logger.info(`[${filepath}] excluded`);\n return;\n }\n\n // register as api\n // ! Files with extensions matching `apiExts` are considered as API handlers.\n if (this.cx.options.apiExts.some((ext) => extension === ext)) {\n const handler = loadFunction({ name: fullpath, modulePath: fullpath });\n this.handlers.set(filepath, handler);\n this.cx.logger.info(`[${filepath}] handler registered`);\n return;\n }\n\n // register as static resource\n this.handlers.set(filepath, this.makeStaticResource(filepath));\n this.cx.logger.info(`[${filepath}] static resource registered`);\n }\n\n getHandler(url: URL): FluxionHandler | undefined {\n const relativePath = url.pathname.replace(/^[\\/]+/, '').replace(/[\\/]+$/, '');\n return this.handlers.get(relativePath);\n }\n}\n","import type { FluxionContext, FluxionOptions } from './types.js';\n\nimport { createLogger } from '@/common/logger.js';\nimport { normalizeOptions } from './utils/options.js';\nimport cluster from 'node:cluster';\nimport { initPrimary } from './cluster/primary.js';\nimport { initWorker } from './cluster/worker.js';\nimport { FluxionWatcher } from './watch.js';\nimport { FluxionRouter } from './router.js';\n\nexport async function fluxion(options: FluxionOptions) {\n const context: FluxionContext = {\n options: normalizeOptions(options),\n } as FluxionContext;\n\n context.logger = createLogger(context as Pick<FluxionContext, 'options'>);\n context.router = new FluxionRouter(context as Pick<FluxionContext, 'options' | 'logger'>);\n\n if (cluster.isPrimary) {\n initPrimary(context);\n } else {\n // Only worker creates the watcher\n context.watcher = new FluxionWatcher(context as Pick<FluxionContext, 'options' | 'logger' | 'router'>).start();\n initWorker(context);\n }\n}\n","import type { FluxionHandler, FluxionOptions } from './core/types.js';\nimport { fluxion } from './core/fluxion.js';\n\nexport { fluxion, type FluxionOptions as FluxionOptions };\n\nexport function defineFluxionHandler(handler: FluxionHandler) {\n return handler;\n}\n\nif (process.env.NODE_ENV !== 'production') {\n globalThis.$throw = (message: string) => {\n throw new Error('[fluxion error]' + message);\n };\n\n const int = (n: string | undefined, defaultValue: number): number => {\n if (n === undefined) {\n return defaultValue;\n }\n const parsed = Number.parseInt(n, 10);\n if (Number.isNaN(parsed)) {\n return defaultValue;\n }\n return parsed;\n };\n\n fluxion({\n dir: process.env.DYNAMIC_DIRECTORY ?? 'dynamicDirectory',\n host: process.env.HOST ?? 'localhost',\n port: int(process.env.PORT, 9000),\n metaPort: int(process.env.META_PORT, 9001),\n reloadDelay: process.env.RELOAD_DELAY ? Number.parseInt(process.env.RELOAD_DELAY, 10) : undefined,\n workerOptions: {\n maxWorkerCount: 1,\n },\n });\n}\n"],"names":["styles","existsSync"],"mappings":"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","x_google_ignoreList":[0,1,2,3]}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/vendor/ansi-styles/index.js","../node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/vendor/supports-color/browser.js","../node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/utilities.js","../node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/index.js","../../src/common/dtm.ts","../../src/common/native.ts","../../src/common/injector.ts","../../src/common/logger.ts","../../src/common/expect.ts","../../src/core/utils/options.ts","../../src/core/cluster/consts.ts","../../src/core/cluster/communicate.ts","../../src/common/consts.ts","../../src/core/utils/respond.ts","../../src/core/cluster/meta-api.ts","../../src/core/cluster/primary.ts","../../src/common/promise-try.ts","../../src/core/utils/headers.ts","../../src/core/utils/request.ts","../../src/core/utils/query.ts","../../src/core/utils/body.ts","../../src/core/utils/cookie.ts","../../src/core/cluster/server.ts","../../src/core/cluster/worker.ts","../../src/core/watch.ts","../../src/core/router.ts","../../src/core/fluxion.ts","../../src/index.ts"],"sourcesContent":["const ANSI_BACKGROUND_OFFSET = 10;\n\nconst wrapAnsi16 = (offset = 0) => code => `\\u001B[${code + offset}m`;\n\nconst wrapAnsi256 = (offset = 0) => code => `\\u001B[${38 + offset};5;${code}m`;\n\nconst wrapAnsi16m = (offset = 0) => (red, green, blue) => `\\u001B[${38 + offset};2;${red};${green};${blue}m`;\n\nconst styles = {\n\tmodifier: {\n\t\treset: [0, 0],\n\t\t// 21 isn't widely supported and 22 does the same thing\n\t\tbold: [1, 22],\n\t\tdim: [2, 22],\n\t\titalic: [3, 23],\n\t\tunderline: [4, 24],\n\t\toverline: [53, 55],\n\t\tinverse: [7, 27],\n\t\thidden: [8, 28],\n\t\tstrikethrough: [9, 29],\n\t},\n\tcolor: {\n\t\tblack: [30, 39],\n\t\tred: [31, 39],\n\t\tgreen: [32, 39],\n\t\tyellow: [33, 39],\n\t\tblue: [34, 39],\n\t\tmagenta: [35, 39],\n\t\tcyan: [36, 39],\n\t\twhite: [37, 39],\n\n\t\t// Bright color\n\t\tblackBright: [90, 39],\n\t\tgray: [90, 39], // Alias of `blackBright`\n\t\tgrey: [90, 39], // Alias of `blackBright`\n\t\tredBright: [91, 39],\n\t\tgreenBright: [92, 39],\n\t\tyellowBright: [93, 39],\n\t\tblueBright: [94, 39],\n\t\tmagentaBright: [95, 39],\n\t\tcyanBright: [96, 39],\n\t\twhiteBright: [97, 39],\n\t},\n\tbgColor: {\n\t\tbgBlack: [40, 49],\n\t\tbgRed: [41, 49],\n\t\tbgGreen: [42, 49],\n\t\tbgYellow: [43, 49],\n\t\tbgBlue: [44, 49],\n\t\tbgMagenta: [45, 49],\n\t\tbgCyan: [46, 49],\n\t\tbgWhite: [47, 49],\n\n\t\t// Bright color\n\t\tbgBlackBright: [100, 49],\n\t\tbgGray: [100, 49], // Alias of `bgBlackBright`\n\t\tbgGrey: [100, 49], // Alias of `bgBlackBright`\n\t\tbgRedBright: [101, 49],\n\t\tbgGreenBright: [102, 49],\n\t\tbgYellowBright: [103, 49],\n\t\tbgBlueBright: [104, 49],\n\t\tbgMagentaBright: [105, 49],\n\t\tbgCyanBright: [106, 49],\n\t\tbgWhiteBright: [107, 49],\n\t},\n};\n\nexport const modifierNames = Object.keys(styles.modifier);\nexport const foregroundColorNames = Object.keys(styles.color);\nexport const backgroundColorNames = Object.keys(styles.bgColor);\nexport const colorNames = [...foregroundColorNames, ...backgroundColorNames];\n\nfunction assembleStyles() {\n\tconst codes = new Map();\n\n\tfor (const [groupName, group] of Object.entries(styles)) {\n\t\tfor (const [styleName, style] of Object.entries(group)) {\n\t\t\tstyles[styleName] = {\n\t\t\t\topen: `\\u001B[${style[0]}m`,\n\t\t\t\tclose: `\\u001B[${style[1]}m`,\n\t\t\t};\n\n\t\t\tgroup[styleName] = styles[styleName];\n\n\t\t\tcodes.set(style[0], style[1]);\n\t\t}\n\n\t\tObject.defineProperty(styles, groupName, {\n\t\t\tvalue: group,\n\t\t\tenumerable: false,\n\t\t});\n\t}\n\n\tObject.defineProperty(styles, 'codes', {\n\t\tvalue: codes,\n\t\tenumerable: false,\n\t});\n\n\tstyles.color.close = '\\u001B[39m';\n\tstyles.bgColor.close = '\\u001B[49m';\n\n\tstyles.color.ansi = wrapAnsi16();\n\tstyles.color.ansi256 = wrapAnsi256();\n\tstyles.color.ansi16m = wrapAnsi16m();\n\tstyles.bgColor.ansi = wrapAnsi16(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi256 = wrapAnsi256(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET);\n\n\t// From https://github.com/Qix-/color-convert/blob/3f0e0d4e92e235796ccb17f6e85c72094a651f49/conversions.js\n\tObject.defineProperties(styles, {\n\t\trgbToAnsi256: {\n\t\t\tvalue(red, green, blue) {\n\t\t\t\t// We use the extended greyscale palette here, with the exception of\n\t\t\t\t// black and white. normal palette only has 4 greyscale shades.\n\t\t\t\tif (red === green && green === blue) {\n\t\t\t\t\tif (red < 8) {\n\t\t\t\t\t\treturn 16;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (red > 248) {\n\t\t\t\t\t\treturn 231;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Math.round(((red - 8) / 247) * 24) + 232;\n\t\t\t\t}\n\n\t\t\t\treturn 16\n\t\t\t\t\t+ (36 * Math.round(red / 255 * 5))\n\t\t\t\t\t+ (6 * Math.round(green / 255 * 5))\n\t\t\t\t\t+ Math.round(blue / 255 * 5);\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToRgb: {\n\t\t\tvalue(hex) {\n\t\t\t\tconst matches = /[a-f\\d]{6}|[a-f\\d]{3}/i.exec(hex.toString(16));\n\t\t\t\tif (!matches) {\n\t\t\t\t\treturn [0, 0, 0];\n\t\t\t\t}\n\n\t\t\t\tlet [colorString] = matches;\n\n\t\t\t\tif (colorString.length === 3) {\n\t\t\t\t\tcolorString = [...colorString].map(character => character + character).join('');\n\t\t\t\t}\n\n\t\t\t\tconst integer = Number.parseInt(colorString, 16);\n\n\t\t\t\treturn [\n\t\t\t\t\t/* eslint-disable no-bitwise */\n\t\t\t\t\t(integer >> 16) & 0xFF,\n\t\t\t\t\t(integer >> 8) & 0xFF,\n\t\t\t\t\tinteger & 0xFF,\n\t\t\t\t\t/* eslint-enable no-bitwise */\n\t\t\t\t];\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi256: {\n\t\t\tvalue: hex => styles.rgbToAnsi256(...styles.hexToRgb(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t\tansi256ToAnsi: {\n\t\t\tvalue(code) {\n\t\t\t\tif (code < 8) {\n\t\t\t\t\treturn 30 + code;\n\t\t\t\t}\n\n\t\t\t\tif (code < 16) {\n\t\t\t\t\treturn 90 + (code - 8);\n\t\t\t\t}\n\n\t\t\t\tlet red;\n\t\t\t\tlet green;\n\t\t\t\tlet blue;\n\n\t\t\t\tif (code >= 232) {\n\t\t\t\t\tred = (((code - 232) * 10) + 8) / 255;\n\t\t\t\t\tgreen = red;\n\t\t\t\t\tblue = red;\n\t\t\t\t} else {\n\t\t\t\t\tcode -= 16;\n\n\t\t\t\t\tconst remainder = code % 36;\n\n\t\t\t\t\tred = Math.floor(code / 36) / 5;\n\t\t\t\t\tgreen = Math.floor(remainder / 6) / 5;\n\t\t\t\t\tblue = (remainder % 6) / 5;\n\t\t\t\t}\n\n\t\t\t\tconst value = Math.max(red, green, blue) * 2;\n\n\t\t\t\tif (value === 0) {\n\t\t\t\t\treturn 30;\n\t\t\t\t}\n\n\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\tlet result = 30 + ((Math.round(blue) << 2) | (Math.round(green) << 1) | Math.round(red));\n\n\t\t\t\tif (value === 2) {\n\t\t\t\t\tresult += 60;\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\trgbToAnsi: {\n\t\t\tvalue: (red, green, blue) => styles.ansi256ToAnsi(styles.rgbToAnsi256(red, green, blue)),\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi: {\n\t\t\tvalue: hex => styles.ansi256ToAnsi(styles.hexToAnsi256(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t});\n\n\treturn styles;\n}\n\nconst ansiStyles = assembleStyles();\n\nexport default ansiStyles;\n","/* eslint-env browser */\n\nconst level = (() => {\n\tif (!('navigator' in globalThis)) {\n\t\treturn 0;\n\t}\n\n\tif (globalThis.navigator.userAgentData) {\n\t\tconst brand = navigator.userAgentData.brands.find(({brand}) => brand === 'Chromium');\n\t\tif (brand && brand.version > 93) {\n\t\t\treturn 3;\n\t\t}\n\t}\n\n\tif (/\\b(Chrome|Chromium)\\//.test(globalThis.navigator.userAgent)) {\n\t\treturn 1;\n\t}\n\n\treturn 0;\n})();\n\nconst colorSupport = level !== 0 && {\n\tlevel,\n\thasBasic: true,\n\thas256: level >= 2,\n\thas16m: level >= 3,\n};\n\nconst supportsColor = {\n\tstdout: colorSupport,\n\tstderr: colorSupport,\n};\n\nexport default supportsColor;\n","// TODO: When targeting Node.js 16, use `String.prototype.replaceAll`.\nexport function stringReplaceAll(string, substring, replacer) {\n\tlet index = string.indexOf(substring);\n\tif (index === -1) {\n\t\treturn string;\n\t}\n\n\tconst substringLength = substring.length;\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\treturnValue += string.slice(endIndex, index) + substring + replacer;\n\t\tendIndex = index + substringLength;\n\t\tindex = string.indexOf(substring, endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.slice(endIndex);\n\treturn returnValue;\n}\n\nexport function stringEncaseCRLFWithFirstIndex(string, prefix, postfix, index) {\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\tconst gotCR = string[index - 1] === '\\r';\n\t\treturnValue += string.slice(endIndex, (gotCR ? index - 1 : index)) + prefix + (gotCR ? '\\r\\n' : '\\n') + postfix;\n\t\tendIndex = index + 1;\n\t\tindex = string.indexOf('\\n', endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.slice(endIndex);\n\treturn returnValue;\n}\n","import ansiStyles from '#ansi-styles';\nimport supportsColor from '#supports-color';\nimport { // eslint-disable-line import/order\n\tstringReplaceAll,\n\tstringEncaseCRLFWithFirstIndex,\n} from './utilities.js';\n\nconst {stdout: stdoutColor, stderr: stderrColor} = supportsColor;\n\nconst GENERATOR = Symbol('GENERATOR');\nconst STYLER = Symbol('STYLER');\nconst IS_EMPTY = Symbol('IS_EMPTY');\n\n// `supportsColor.level` → `ansiStyles.color[name]` mapping\nconst levelMapping = [\n\t'ansi',\n\t'ansi',\n\t'ansi256',\n\t'ansi16m',\n];\n\nconst styles = Object.create(null);\n\nconst applyOptions = (object, options = {}) => {\n\tif (options.level && !(Number.isInteger(options.level) && options.level >= 0 && options.level <= 3)) {\n\t\tthrow new Error('The `level` option should be an integer from 0 to 3');\n\t}\n\n\t// Detect level if not set manually\n\tconst colorLevel = stdoutColor ? stdoutColor.level : 0;\n\tobject.level = options.level === undefined ? colorLevel : options.level;\n};\n\nexport class Chalk {\n\tconstructor(options) {\n\t\t// eslint-disable-next-line no-constructor-return\n\t\treturn chalkFactory(options);\n\t}\n}\n\nconst chalkFactory = options => {\n\tconst chalk = (...strings) => strings.join(' ');\n\tapplyOptions(chalk, options);\n\n\tObject.setPrototypeOf(chalk, createChalk.prototype);\n\n\treturn chalk;\n};\n\nfunction createChalk(options) {\n\treturn chalkFactory(options);\n}\n\nObject.setPrototypeOf(createChalk.prototype, Function.prototype);\n\nfor (const [styleName, style] of Object.entries(ansiStyles)) {\n\tstyles[styleName] = {\n\t\tget() {\n\t\t\tconst builder = createBuilder(this, createStyler(style.open, style.close, this[STYLER]), this[IS_EMPTY]);\n\t\t\tObject.defineProperty(this, styleName, {value: builder});\n\t\t\treturn builder;\n\t\t},\n\t};\n}\n\nstyles.visible = {\n\tget() {\n\t\tconst builder = createBuilder(this, this[STYLER], true);\n\t\tObject.defineProperty(this, 'visible', {value: builder});\n\t\treturn builder;\n\t},\n};\n\nconst getModelAnsi = (model, level, type, ...arguments_) => {\n\tif (model === 'rgb') {\n\t\tif (level === 'ansi16m') {\n\t\t\treturn ansiStyles[type].ansi16m(...arguments_);\n\t\t}\n\n\t\tif (level === 'ansi256') {\n\t\t\treturn ansiStyles[type].ansi256(ansiStyles.rgbToAnsi256(...arguments_));\n\t\t}\n\n\t\treturn ansiStyles[type].ansi(ansiStyles.rgbToAnsi(...arguments_));\n\t}\n\n\tif (model === 'hex') {\n\t\treturn getModelAnsi('rgb', level, type, ...ansiStyles.hexToRgb(...arguments_));\n\t}\n\n\treturn ansiStyles[type][model](...arguments_);\n};\n\nconst usedModels = ['rgb', 'hex', 'ansi256'];\n\nfor (const model of usedModels) {\n\tstyles[model] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(getModelAnsi(model, levelMapping[level], 'color', ...arguments_), ansiStyles.color.close, this[STYLER]);\n\t\t\t\treturn createBuilder(this, styler, this[IS_EMPTY]);\n\t\t\t};\n\t\t},\n\t};\n\n\tconst bgModel = 'bg' + model[0].toUpperCase() + model.slice(1);\n\tstyles[bgModel] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(getModelAnsi(model, levelMapping[level], 'bgColor', ...arguments_), ansiStyles.bgColor.close, this[STYLER]);\n\t\t\t\treturn createBuilder(this, styler, this[IS_EMPTY]);\n\t\t\t};\n\t\t},\n\t};\n}\n\nconst proto = Object.defineProperties(() => {}, {\n\t...styles,\n\tlevel: {\n\t\tenumerable: true,\n\t\tget() {\n\t\t\treturn this[GENERATOR].level;\n\t\t},\n\t\tset(level) {\n\t\t\tthis[GENERATOR].level = level;\n\t\t},\n\t},\n});\n\nconst createStyler = (open, close, parent) => {\n\tlet openAll;\n\tlet closeAll;\n\tif (parent === undefined) {\n\t\topenAll = open;\n\t\tcloseAll = close;\n\t} else {\n\t\topenAll = parent.openAll + open;\n\t\tcloseAll = close + parent.closeAll;\n\t}\n\n\treturn {\n\t\topen,\n\t\tclose,\n\t\topenAll,\n\t\tcloseAll,\n\t\tparent,\n\t};\n};\n\nconst createBuilder = (self, _styler, _isEmpty) => {\n\t// Single argument is hot path, implicit coercion is faster than anything\n\t// eslint-disable-next-line no-implicit-coercion\n\tconst builder = (...arguments_) => applyStyle(builder, (arguments_.length === 1) ? ('' + arguments_[0]) : arguments_.join(' '));\n\n\t// We alter the prototype because we must return a function, but there is\n\t// no way to create a function with a different prototype\n\tObject.setPrototypeOf(builder, proto);\n\n\tbuilder[GENERATOR] = self;\n\tbuilder[STYLER] = _styler;\n\tbuilder[IS_EMPTY] = _isEmpty;\n\n\treturn builder;\n};\n\nconst applyStyle = (self, string) => {\n\tif (self.level <= 0 || !string) {\n\t\treturn self[IS_EMPTY] ? '' : string;\n\t}\n\n\tlet styler = self[STYLER];\n\n\tif (styler === undefined) {\n\t\treturn string;\n\t}\n\n\tconst {openAll, closeAll} = styler;\n\tif (string.includes('\\u001B')) {\n\t\twhile (styler !== undefined) {\n\t\t\t// Replace any instances already present with a re-opening code\n\t\t\t// otherwise only the part of the string until said closing code\n\t\t\t// will be colored, and the rest will simply be 'plain'.\n\t\t\tstring = stringReplaceAll(string, styler.close, styler.open);\n\n\t\t\tstyler = styler.parent;\n\t\t}\n\t}\n\n\t// We can move both next actions out of loop, because remaining actions in loop won't have\n\t// any/visible effect on parts we add here. Close the styling before a linebreak and reopen\n\t// after next line to fix a bleed issue on macOS: https://github.com/chalk/chalk/pull/92\n\tconst lfIndex = string.indexOf('\\n');\n\tif (lfIndex !== -1) {\n\t\tstring = stringEncaseCRLFWithFirstIndex(string, closeAll, openAll, lfIndex);\n\t}\n\n\treturn openAll + string + closeAll;\n};\n\nObject.defineProperties(createChalk.prototype, styles);\n\nconst chalk = createChalk();\nexport const chalkStderr = createChalk({level: stderrColor ? stderrColor.level : 0});\n\nexport {\n\tmodifierNames,\n\tforegroundColorNames,\n\tbackgroundColorNames,\n\tcolorNames,\n\n\t// TODO: Remove these aliases in the next major version\n\tmodifierNames as modifiers,\n\tforegroundColorNames as foregroundColors,\n\tbackgroundColorNames as backgroundColors,\n\tcolorNames as colors,\n} from './vendor/ansi-styles/index.js';\n\nexport {\n\tstdoutColor as supportsColor,\n\tstderrColor as supportsColorStderr,\n};\n\nexport default chalk;\n","export function dtm(dt = new Date()) {\n const y = dt.getFullYear();\n const m = String(dt.getMonth() + 1).padStart(2, '0');\n const d = String(dt.getDate()).padStart(2, '0');\n const hh = String(dt.getHours()).padStart(2, '0');\n const mm = String(dt.getMinutes()).padStart(2, '0');\n const ss = String(dt.getSeconds()).padStart(2, '0');\n const ms = String(dt.getMilliseconds()).padStart(3, '0');\n return `${y}.${m}.${d} ${hh}:${mm}:${ss}.${ms}`;\n}\n","export const $stringify = JSON.stringify;\n\nexport const $keys = Object.keys;\n","import type { InjectionConfig } from '@/common/types.js';\n\nexport function loadFunction(injectionConfig: InjectionConfig): (...args: any[]) => any {\n const m = require(injectionConfig.modulePath);\n if (typeof m === 'function') {\n return m;\n } else if (typeof m.default === 'function') {\n return m.default;\n } else if (typeof m.handler === 'function') {\n return m.handler;\n } else {\n $throw(\n `Invalid handler module '${injectionConfig.modulePath}', make sure it has a default export or named export called \"handler\" which is a function`,\n );\n }\n}\n","import chalk from 'chalk';\nimport type { otherstring, InjectionConfig } from '@/common/types.js';\nimport type { FluxionContext } from '@/core/types.js';\n\nimport { dtm } from './dtm.js';\nimport { $keys, $stringify } from './native.js';\nimport { loadFunction } from './injector.js';\n\ntype LogLevel = 'INFO' | 'WARN' | 'ERROR' | 'SUCC' | 'DEBUG' | 'VERBOSE' | otherstring;\n\ninterface LogEntry {\n timestamp: string;\n level: LogLevel;\n event: string;\n message?: string;\n [key: string]: unknown;\n}\n\ntype LoggerSink = (entry: LogEntry) => void;\n\nexport type LoggerOption = 'one-line' | 'json-line' | InjectionConfig;\n\nexport interface FluxionLogger {\n /**\n * [WARN] We assert that `fields` is an object or undefined.\n */\n write(level: LogLevel, event: string, fields?: object): void;\n info(event: string, fields?: object): void;\n warn(event: string, fields?: object): void;\n error(event: string, fields?: object): void;\n succ(event: string, fields?: object): void;\n debug(event: string, fields?: object): void;\n verbose(event: string, fields?: object): void;\n}\n\nconst safeStringify = (value: unknown): string => {\n try {\n return $stringify(value);\n } catch {\n return '[unserializable]';\n }\n};\n\nconst ColoredLevels: Record<LogLevel, string> = {\n INFO: chalk.hex('#0386e3')('INFO'),\n WARN: chalk.hex('#fb923c')('WARN'),\n ERROR: chalk.hex('#ef4444')('ERROR'),\n SUCC: chalk.hex('#22c55e')('SUCC'),\n DEBUG: chalk.hex('#d327e0')('DEBUG'),\n VERBOSE: chalk.hex('#36ffeb')('SUCC'),\n};\nconst TimestampColor = chalk.hex('#166534');\n\nexport const oneLineLogger: LoggerSink = (entry: LogEntry) => {\n const { level: rawLevel, timestamp: rawTimestamp, event: rawEvent, message: rawMessage, ...fields } = entry;\n\n const timestamp = TimestampColor(`[${rawTimestamp}]`);\n const level = ColoredLevels[rawLevel] ?? rawLevel;\n const body = rawMessage ?? rawEvent;\n const fieldsText = $keys(fields).length > 0 ? ` ${chalk.dim(safeStringify(fields))}` : '';\n\n console.log(`${timestamp} ${level} ${body}${fieldsText}`);\n};\n\n/**\n * & Logger Options here is checked by normalizeOptions function.\n */\nfunction resolveLoggerSink(cx: Pick<FluxionContext, 'options'>): LoggerSink {\n const loggerOption = cx.options.logger;\n if (loggerOption === undefined || loggerOption === 'one-line') {\n return oneLineLogger;\n }\n\n if (loggerOption === 'json-line') {\n return (entry: LogEntry) => console.log(safeStringify(entry));\n }\n\n return loadFunction(loggerOption) as LoggerSink;\n}\n\nexport function createLogger(cx: Pick<FluxionContext, 'options'>): FluxionLogger {\n const sink = resolveLoggerSink(cx);\n\n const logger: FluxionLogger = {\n write(level: LogLevel, event: string, fields: Record<string, unknown> = {}): void {\n const entry: LogEntry = {\n ...fields,\n timestamp: dtm(),\n level,\n event,\n };\n\n try {\n sink(entry);\n } catch {\n // Ignore logger sink failures to avoid breaking request handling.\n }\n },\n info(event: string, fields?: Record<string, unknown>): void {\n this.write('INFO', event, fields);\n },\n warn(event: string, fields?: Record<string, unknown>): void {\n this.write('WARN', event, fields);\n },\n error(event: string, fields?: Record<string, unknown>): void {\n this.write('ERROR', event, fields);\n },\n succ(event: string, fields?: Record<string, unknown>): void {\n this.write('SUCC', event, fields);\n },\n debug(event: string, fields?: Record<string, unknown>): void {\n this.write('DEBUG', event, fields);\n },\n verbose(event: string, fields?: Record<string, unknown>): void {\n this.write('VERBOSE', event, fields);\n },\n };\n\n return logger;\n}\n\n/**\n * ! Error.isError needs Node.js 24\n */\nexport const getErrorMessage = (error: unknown): string =>\n typeof error === 'object' && error !== null ? (error as any).message : String(error);\n","export namespace whether {\n export const isObject = (value: unknown): value is Record<string, unknown> => {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n };\n}\n\nexport namespace expect {\n export function isObject<T = Record<string, unknown>>(o: unknown, message: string): asserts o is T {\n if (typeof o !== 'object' || o === null) {\n $throw(message);\n }\n }\n\n export function isString(s: unknown, message: string): asserts s is string {\n if (typeof s !== 'string') {\n $throw(message);\n }\n }\n\n export function isNumber(n: unknown, message: string): asserts n is number {\n if (typeof n !== 'number') {\n $throw(message);\n }\n }\n\n export function isPositiveInteger(n: unknown, message: string): asserts n is number {\n if (typeof n !== 'number' || n <= 0 || !Number.isSafeInteger(n)) {\n $throw(message);\n }\n }\n\n export function isObjectArray<T = Record<string, unknown>>(arr: unknown, message: string): asserts arr is T[] {\n if (!Array.isArray(arr) || arr.some((item) => typeof item !== 'object' || item === null)) {\n $throw(message);\n }\n }\n}\n","import fs, { existsSync } from 'node:fs';\nimport type { LoggerOption } from '@/common/logger.js';\nimport type { InjectionConfig } from '@/common/types.js';\nimport { expect } from '@/common/expect.js';\n\nimport type { WorkerOptions, FluxionOptions, NormalizedFluxionOptions } from '../types.js';\n\n/**\n * Resolves runtime options with framework defaults.\n */\nfunction resolveWorkerOptions(options: Partial<WorkerOptions>): WorkerOptions {\n return {\n maxWorkerCount: options.maxWorkerCount ?? 4,\n requestTimeoutMs: options.requestTimeoutMs ?? 3000,\n maxInflight: options.maxInflight ?? 64,\n memorySoftLimitMb: options.memorySoftLimitMb ?? 96,\n memoryHardLimitMb: options.memoryHardLimitMb ?? 128,\n memorySampleIntervalMs: options.memorySampleIntervalMs ?? 5000,\n maxOldGenerationSizeMb: options.maxOldGenerationSizeMb ?? 128,\n maxYoungGenerationSizeMb: options.maxYoungGenerationSizeMb ?? 32,\n stackSizeMb: options.stackSizeMb ?? 4,\n maxResponseBytes: options.maxResponseBytes ?? 2 * 1024 * 1024,\n };\n}\n\nfunction expectLoggerOption(o: InjectionConfig | LoggerOption) {\n if (o === 'one-line' || o === 'json-line') {\n return;\n }\n if (typeof o === 'object' && o !== null && typeof o.modulePath === 'string' && typeof o.name === 'string') {\n return;\n }\n $throw(`Invalid logger option, must be 'one-line', 'json-line' or { modulePath: string; name: string; }`);\n}\n\n/**\n * Normalize options and create necessary resources like the dynamic directory and logger.\n */\nexport function normalizeOptions(options: FluxionOptions): NormalizedFluxionOptions {\n expect.isObject(options, 'FluxionOptions must be an object');\n\n let {\n dir,\n host,\n port,\n metaPort,\n injections = [],\n moduleDir = process.cwd(),\n workerOptions = {},\n maxRequestBytes = 8_000_000,\n reloadDelay = 300,\n apiExts = ['.ts'],\n routerExclude = [],\n } = options as FluxionOptions;\n const logger = options.logger ?? 'one-line';\n expectLoggerOption(logger);\n\n expect.isString(dir, 'FluxionOptions.dir must be a string');\n\n expect.isString(moduleDir, 'FluxionOptions.moduleDir must be a string');\n\n expect.isString(host, 'FluxionOptions.host must be a string');\n\n expect.isPositiveInteger(reloadDelay, 'FluxionOptions.reloadDelay must be a positive integer');\n if (reloadDelay < 50) {\n $throw('FluxionOptions.reloadDelay must be greater than or equal to 50');\n }\n\n expect.isPositiveInteger(port, 'FluxionOptions.port must be a positive integer');\n if (port > 65535) {\n $throw('FluxionOptions.port must be less than or equal to 65535');\n }\n metaPort ??= port + 1;\n expect.isPositiveInteger(metaPort, 'FluxionOptions.metaPort must be a positive integer');\n if (metaPort > 65535) {\n $throw('FluxionOptions.metaPort must be less than or equal to 65535');\n }\n if (metaPort === port) {\n $throw('FluxionOptions.metaPort must be different from FluxionOptions.port');\n }\n expect.isObjectArray<InjectionConfig>(injections, 'FluxionOptions.injections must be an array of objects');\n expect.isObject(workerOptions, 'FluxionOptions.workerOptions must be an object');\n expect.isPositiveInteger(maxRequestBytes, 'FluxionOptions.maxRequestBytes must be a positive integer');\n\n if (!existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n\n return {\n dir,\n host,\n port,\n reloadDelay,\n metaPort,\n injections,\n moduleDir,\n workerOptions: resolveWorkerOptions(workerOptions),\n maxRequestBytes,\n logger,\n apiExts,\n routerExclude,\n };\n}\n","import type { PrimaryMessage as PrimaryMessage, WorkerMessage as WorkerMessage } from './types.js';\n\nexport const INJECTION_KEY = Symbol.for('fluxion.injection');\n\nexport const enum PrimaryAction {\n /**\n * Health check message, the worker should respond with Pong and the latency information\n */\n Ping = 100,\n}\n\nexport const enum WorkerAction {\n /**\n * Just created\n */\n Created = 200,\n\n /**\n * Ready for tasks\n * - fluxion options are injected\n */\n Ready,\n\n /**\n * Response to Ping, used for health check and latency measurement\n */\n Pong,\n\n /**\n * Runtime telemetry snapshot from worker process.\n */\n Stats,\n}\n\nexport const isPrimaryMessage = (v: PrimaryMessage): v is PrimaryMessage => [PrimaryAction.Ping].includes(v?.type);\n\nexport const isWorkerMessage = (v: WorkerMessage): v is WorkerMessage =>\n [WorkerAction.Pong, WorkerAction.Created, WorkerAction.Ready, WorkerAction.Stats].includes(v?.type);\n","import type cluster from 'node:cluster';\nimport type { PrimaryMessage, WorkerMessage } from './types.js';\n\nexport const sendToPrimary = (message: WorkerMessage) => process.send?.(message);\n\nexport const sendToWorker = (worker: cluster.Worker, message: PrimaryMessage) => worker.send(message);\n","export const DUMMY_BASE_URL = 'http://fluxion.local';\nexport const META_PREFIX = '/_fluxion';\n\nexport const STATIC_CONTENT_TYPES: Record<string, string> = {\n '.css': 'text/css; charset=utf-8',\n '.html': 'text/html; charset=utf-8',\n '.ico': 'image/x-icon',\n '.js': 'text/javascript; charset=utf-8',\n '.json': 'application/json; charset=utf-8',\n '.map': 'application/json; charset=utf-8',\n '.png': 'image/png',\n '.jpg': 'image/jpeg',\n '.jpeg': 'image/jpeg',\n '.svg': 'image/svg+xml',\n '.txt': 'text/plain; charset=utf-8',\n '.webp': 'image/webp',\n};\n\nexport const enum HttpCode {\n Ok = 200,\n BadRequest = 400,\n PayloadTooLarge = 413,\n NotFound = 404,\n InternalServerError = 500,\n}\n\nexport const enum HandlerResult {\n NotFound,\n Handled,\n}\n","import type { ServerResponse } from 'node:http';\nimport { HttpCode } from '@/common/consts.js';\n\nexport function sendJson(res: ServerResponse, payload: unknown, statusCode: HttpCode = HttpCode.Ok): void {\n res.statusCode = statusCode;\n res.setHeader('Content-Type', 'application/json; charset=utf-8');\n res.end(JSON.stringify(payload));\n}\n\nexport function safeSendJson(res: ServerResponse, payload: unknown, statusCode: HttpCode = HttpCode.Ok): void {\n if (res.writableEnded) {\n return;\n }\n\n if (res.headersSent) {\n res.end();\n return;\n }\n\n sendJson(res, payload, statusCode);\n}\n","import http from 'node:http';\n\nimport { getErrorMessage } from '@/common/logger.js';\nimport { HttpCode, META_PREFIX } from '@/common/consts.js';\nimport { sendJson } from '../utils/respond.js';\nimport { FluxionContext } from '../types.js';\n\nexport function createPrimaryMetaApiServer(\n cx: Pick<FluxionContext, 'logger' | 'options' | 'router'>,\n getWorkersSnapshot: () => unknown,\n): http.Server {\n const server = http.createServer((req, res) => {\n const method = req.method ?? 'GET';\n\n let pathname = '/';\n try {\n pathname = new URL(req.url ?? '/', 'http://fluxion.local').pathname;\n } catch {\n sendJson(res, { message: 'Bad Request: invalid url' }, HttpCode.BadRequest);\n return;\n }\n\n if (method === 'GET' && pathname === META_PREFIX + '/healthz') {\n sendJson(res, {\n ok: true,\n role: 'primary',\n pid: process.pid,\n now: Date.now(),\n uptimeSeconds: Number(process.uptime().toFixed(3)),\n });\n return;\n }\n\n if (method === 'GET' && pathname === META_PREFIX + '/workers') {\n sendJson(res, {\n ok: true,\n now: Date.now(),\n workers: getWorkersSnapshot(),\n });\n return;\n }\n\n sendJson(res, { message: 'Not Found' }, HttpCode.NotFound);\n });\n\n server.on('listening', () => {\n cx.logger.info('MetaApiStarted', {\n pid: process.pid,\n host: cx.options.host,\n port: cx.options.metaPort,\n prefix: META_PREFIX,\n });\n });\n\n server.on('error', (error) => {\n cx.logger.error('MetaApiError', {\n host: cx.options.host,\n port: cx.options.metaPort,\n error: getErrorMessage(error),\n });\n process.exit(1);\n });\n\n server.listen(cx.options.metaPort, cx.options.host);\n return server;\n}\n","import type { WorkerMessage, WorkerState } from './types.js';\nimport type { FluxionContext } from '../types.js';\nimport os from 'node:os';\nimport cluster from 'node:cluster';\n\nimport { isWorkerMessage, WorkerAction, PrimaryAction } from './consts.js';\nimport { sendToWorker } from './communicate.js';\nimport { createPrimaryMetaApiServer } from './meta-api.js';\n\nconst bytesToMb = (bytes: number) => Number((bytes / 1024 / 1024).toFixed(2));\n\nexport function initPrimary(cx: Pick<FluxionContext, 'logger' | 'options' | 'router'>) {\n if (!cluster.isPrimary) {\n $throw('createPrimary should only be called in primary process');\n }\n\n const { workerOptions } = cx.options;\n const cpuCount = Math.max(1, os.cpus().length);\n const workerCount = Math.max(1, Math.min(workerOptions.maxWorkerCount ?? Math.min(2, cpuCount), cpuCount));\n\n cx.logger.info('PrimaryStarted', {\n pid: process.pid,\n workers: workerCount,\n host: cx.options.host,\n port: cx.options.port,\n metaPort: cx.options.metaPort,\n });\n\n const workers = new Map<number, WorkerState>();\n\n const getWorkersSnapshot = () => {\n return {\n primaryPid: process.pid,\n host: cx.options.host,\n port: cx.options.port,\n metaPort: cx.options.metaPort,\n uptimeSeconds: Number(process.uptime().toFixed(3)),\n workers: Array.from(workers.entries()).map(([workerId, info]) => {\n const { instance } = info;\n const stats = info.lastStats;\n return {\n workerId,\n pid: info.pid ?? instance.process.pid ?? null,\n state: info.state,\n createdAt: info.createdAt,\n readyAt: info.readyAt ?? null,\n connected: instance.isConnected(),\n dead: instance.isDead(),\n exitedAfterDisconnect: instance.exitedAfterDisconnect,\n lastPongAt: info.lastPongAt ?? null,\n lastRttMs: info.lastRttMs ?? null,\n stats:\n stats === undefined\n ? null\n : {\n at: stats.at,\n uptimeSeconds: stats.uptimeSeconds,\n cpu: stats.cpu,\n memory: {\n ...stats.memory,\n rssMb: bytesToMb(stats.memory.rss),\n heapTotalMb: bytesToMb(stats.memory.heapTotal),\n heapUsedMb: bytesToMb(stats.memory.heapUsed),\n externalMb: bytesToMb(stats.memory.external),\n arrayBuffersMb: bytesToMb(stats.memory.arrayBuffers),\n },\n },\n };\n }),\n };\n };\n\n createPrimaryMetaApiServer(cx, getWorkersSnapshot);\n\n const attachWorker = (worker: cluster.Worker): void => {\n const workerInfo: WorkerState = {\n state: 'creating',\n pid: worker.process.pid,\n createdAt: Date.now(),\n instance: worker,\n };\n workers.set(worker.id, workerInfo);\n\n worker.on('message', (raw: WorkerMessage) => {\n if (!isWorkerMessage(raw)) {\n return;\n }\n\n if (raw.type === WorkerAction.Pong) {\n const rtt = Date.now() - raw.sentAt;\n workerInfo.pid = raw.pid;\n workerInfo.lastPongAt = Date.now();\n workerInfo.lastRttMs = rtt;\n return;\n }\n\n if (raw.type === WorkerAction.Ready) {\n workerInfo.state = 'ready';\n workerInfo.pid = raw.pid;\n workerInfo.readyAt = Date.now();\n cx.logger.info('WorkerReady', { workerId: worker.id, pid: raw.pid });\n return;\n }\n\n if (raw.type === WorkerAction.Created) {\n workerInfo.state = 'created';\n workerInfo.pid = raw.pid;\n cx.logger.info('WorkerCreated', { workerId: worker.id, pid: raw.pid });\n return;\n }\n\n if (raw.type === WorkerAction.Stats) {\n workerInfo.pid = raw.pid;\n workerInfo.lastStats = raw.stats;\n }\n });\n\n worker.on('exit', (code, signal) => {\n workers.delete(worker.id);\n cx.logger.warn('WorkerExited', {\n workerId: worker.id,\n pid: worker.process.pid ?? 'unknown',\n code,\n signal: signal ?? 'none',\n });\n });\n };\n\n for (let i = 0; i < workerCount; i++) {\n attachWorker(cluster.fork({ WORKER_ID: String(i + 1) }));\n }\n\n const pingTimer = setInterval(() => {\n const sentAt = Date.now();\n for (const info of workers.values()) {\n if (!info.instance.isConnected()) {\n continue;\n }\n try {\n sendToWorker(info.instance, { type: PrimaryAction.Ping, sentAt });\n } catch {\n // Ignore transient IPC errors; worker lifecycle events will reconcile state.\n }\n }\n }, 5000);\n pingTimer.unref();\n}\n","/**\n * For low version of Node.js that does not support `Promise.try`, we can implement it ourselves.\n *\n * Only for async functions.\n */\nexport function PromiseTry<T extends (...args: any[]) => any>(fn: T, ...args: Parameters<T>) {\n return new Promise<ReturnType<T>>((resolve, reject) => {\n // in case `fn` throws synchronously, we catch it and reject the promise\n try {\n const r = fn(...args);\n if (r instanceof Promise) {\n r.then(resolve).catch(reject);\n } else {\n resolve(r);\n }\n } catch (error) {\n reject(error);\n }\n });\n}\n","import type { IncomingMessage } from 'node:http';\n\nexport function getRealIp(req: IncomingMessage): string {\n const forwardedFor = req.headersDistinct['x-forwarded-for'];\n if (forwardedFor) {\n const firstForwarded = forwardedFor[0]?.split(',')[0]?.trim();\n if (firstForwarded && firstForwarded.length > 0) {\n return firstForwarded;\n }\n }\n\n const realIp = req.headersDistinct['x-real-ip']?.[0].trim();\n if (realIp !== undefined) {\n return realIp;\n }\n\n return req.socket.remoteAddress ?? 'unknown';\n}\n\nexport function isTextualContentType(contentType: string | undefined): boolean {\n if (contentType === undefined) {\n return false;\n }\n\n const normalized = contentType.toLowerCase();\n\n return (\n normalized.startsWith('text/') ||\n normalized.includes('json') ||\n normalized.includes('xml') ||\n normalized.includes('x-www-form-urlencoded') ||\n normalized.includes('javascript')\n );\n}\n","import { DUMMY_BASE_URL } from '@/common/consts.js';\n\nexport function toURL(rawUrl: string | undefined): URL | undefined {\n if (rawUrl === undefined) {\n return undefined;\n }\n\n try {\n return new URL(rawUrl, DUMMY_BASE_URL);\n } catch {\n return undefined;\n }\n}\n","export function parseQuery(searchParams: URLSearchParams): Record<string, string | string[]> {\n const query: Record<string, string | string[]> = {};\n\n for (const [key, value] of searchParams.entries()) {\n const existing = query[key];\n\n if (existing === undefined) {\n query[key] = value;\n continue;\n }\n\n if (Array.isArray(existing)) {\n existing.push(value);\n continue;\n }\n\n query[key] = [existing, value];\n }\n\n return query;\n}\n","import type http from 'node:http';\n\nimport { isTextualContentType } from './headers.js';\nimport { parseQuery } from './query.js';\n\nexport interface BodyPreview {\n exists: boolean;\n value?: string;\n bytes: number;\n truncated: boolean;\n}\n\nfunction createRequestBodyTooLargeError(receivedBytes: number, maxBytes: number): NodeJS.ErrnoException {\n const sizeError = new Error(\n `request body too large: ${receivedBytes.toString()} bytes exceeds ${maxBytes.toString()} bytes`,\n ) as NodeJS.ErrnoException;\n\n sizeError.code = 'REQUEST_BODY_TOO_LARGE';\n\n return sizeError;\n}\n\nfunction getHeaderValue(headerValue: string | string[] | undefined): string | undefined {\n return Array.isArray(headerValue) ? headerValue[0] : headerValue;\n}\n\nfunction createEmptyPreview(): BodyPreview {\n return {\n exists: false,\n bytes: 0,\n truncated: false,\n };\n}\n\nfunction createPreview(\n previewBuffer: Buffer,\n totalBytes: number,\n contentType: string | undefined,\n truncated: boolean,\n): BodyPreview {\n if (totalBytes === 0) {\n return createEmptyPreview();\n }\n\n if (isTextualContentType(contentType)) {\n return {\n exists: true,\n value: previewBuffer.toString('utf8'),\n bytes: totalBytes,\n truncated,\n };\n }\n\n return {\n exists: true,\n value: `<binary body: ${totalBytes} bytes>`,\n bytes: totalBytes,\n truncated,\n };\n}\n\nasync function readRequestBodyWithPreview(\n req: http.IncomingMessage,\n method: string,\n maxBytes: number,\n previewMaxBytes = 8192,\n): Promise<{ rawBody: Buffer | undefined; preview: BodyPreview }> {\n if (method === 'GET' || method === 'HEAD') {\n return {\n rawBody: undefined,\n preview: createEmptyPreview(),\n };\n }\n\n if (req.readableEnded) {\n return {\n rawBody: undefined,\n preview: createEmptyPreview(),\n };\n }\n\n const contentLengthRaw = getHeaderValue(req.headers['content-length']);\n const declaredBytes = contentLengthRaw !== undefined ? Number.parseInt(contentLengthRaw, 10) : NaN;\n\n if (Number.isFinite(declaredBytes) && declaredBytes > maxBytes) {\n throw createRequestBodyTooLargeError(declaredBytes, maxBytes);\n }\n\n return new Promise((resolve, reject) => {\n const rawBodyChunks: Buffer[] = [];\n const previewChunks: Buffer[] = [];\n let totalBytes = 0;\n let previewBytes = 0;\n let previewTruncated = false;\n let settled = false;\n\n const cleanup = (): void => {\n req.off('data', onData);\n req.off('end', onEnd);\n req.off('error', onError);\n req.off('aborted', onAborted);\n };\n\n const settle = (action: () => void): void => {\n if (settled) {\n return;\n }\n\n settled = true;\n action();\n };\n\n const onData = (chunk: Buffer | string | Uint8Array): void => {\n const bufferChunk = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);\n totalBytes += bufferChunk.byteLength;\n\n if (totalBytes > maxBytes) {\n cleanup();\n req.resume();\n settle(() => {\n reject(createRequestBodyTooLargeError(totalBytes, maxBytes));\n });\n return;\n }\n\n rawBodyChunks.push(bufferChunk);\n\n if (previewBytes < previewMaxBytes) {\n const remaining = previewMaxBytes - previewBytes;\n const nextSlice = bufferChunk.subarray(0, remaining);\n previewChunks.push(nextSlice);\n previewBytes += nextSlice.length;\n\n if (nextSlice.length < bufferChunk.length) {\n previewTruncated = true;\n }\n } else {\n previewTruncated = true;\n }\n };\n\n const onEnd = (): void => {\n cleanup();\n settle(() => {\n const rawBody = rawBodyChunks.length > 0 ? Buffer.concat(rawBodyChunks) : undefined;\n const previewBuffer = previewChunks.length > 0 ? Buffer.concat(previewChunks) : Buffer.alloc(0);\n\n resolve({\n rawBody,\n preview: createPreview(\n previewBuffer,\n rawBody?.byteLength ?? 0,\n getHeaderValue(req.headers['content-type']),\n previewTruncated,\n ),\n });\n });\n };\n\n const onError = (error: Error): void => {\n cleanup();\n settle(() => {\n reject(error);\n });\n };\n\n const onAborted = (): void => {\n cleanup();\n settle(() => {\n reject(new Error('request aborted while reading body'));\n });\n };\n\n req.on('data', onData);\n req.once('end', onEnd);\n req.once('error', onError);\n req.once('aborted', onAborted);\n });\n}\n\nexport async function parseBody(\n req: http.IncomingMessage,\n method: string,\n maxBytes: number,\n): Promise<{ body: Record<string, any>; preview: BodyPreview }> {\n const { rawBody, preview } = await readRequestBodyWithPreview(req, method, maxBytes);\n\n if (rawBody === undefined || rawBody.byteLength === 0) {\n return {\n body: {},\n preview,\n };\n }\n\n const contentType = getHeaderValue(req.headers['content-type'])?.toLowerCase() ?? '';\n\n if (contentType.includes('json')) {\n const textBody = rawBody.toString('utf8').trim();\n\n if (textBody.length === 0) {\n return {\n body: {},\n preview,\n };\n }\n\n try {\n const parsed = JSON.parse(textBody) as unknown;\n\n if (parsed !== null && typeof parsed === 'object' && !Array.isArray(parsed)) {\n return {\n body: parsed as Record<string, any>,\n preview,\n };\n }\n\n return {\n body: { value: parsed },\n preview,\n };\n } catch {\n return {\n body: { raw: textBody },\n preview,\n };\n }\n }\n\n if (contentType.includes('x-www-form-urlencoded')) {\n return {\n body: parseQuery(new URLSearchParams(rawBody.toString('utf8'))),\n preview,\n };\n }\n\n if (isTextualContentType(contentType)) {\n return {\n body: { raw: rawBody.toString('utf8') },\n preview,\n };\n }\n\n return {\n body: {},\n preview,\n };\n}\n","/**\n * Parse Cookie header string into an object\n */\nexport function parseCookie(cookieHeader: string | undefined): Record<string, string> {\n if (!cookieHeader) {\n return {};\n }\n\n const cookies: Record<string, string> = {};\n const pairs = cookieHeader.split(';');\n\n for (const pair of pairs) {\n const [key, ...valueParts] = pair.split('=');\n if (!key) continue;\n\n const trimmedKey = key.trim();\n const value = valueParts.join('=').trim();\n cookies[trimmedKey] = decodeURIComponent(value);\n }\n\n return cookies;\n}\n\n/**\n * Serialize an object into a Cookie header string\n */\nexport function serializeCookie(name: string, value: string, options?: {\n maxAge?: number;\n expires?: Date;\n domain?: string;\n path?: string;\n secure?: boolean;\n httpOnly?: boolean;\n sameSite?: 'strict' | 'lax' | 'none';\n}): string {\n let cookie = `${encodeURIComponent(name)}=${encodeURIComponent(value)}`;\n\n if (options) {\n if (options.maxAge !== undefined) {\n cookie += `; Max-Age=${options.maxAge}`;\n }\n if (options.expires) {\n cookie += `; Expires=${options.expires.toUTCString()}`;\n }\n if (options.domain) {\n cookie += `; Domain=${options.domain}`;\n }\n if (options.path) {\n cookie += `; Path=${options.path}`;\n }\n if (options.secure) {\n cookie += '; Secure';\n }\n if (options.httpOnly) {\n cookie += '; HttpOnly';\n }\n if (options.sameSite) {\n cookie += `; SameSite=${options.sameSite}`;\n }\n }\n\n return cookie;\n}\n","import http from 'node:http';\n\nimport type { FluxionContext, NormalizedRequest } from '../types.js';\nimport { $keys } from '@/common/native.js';\nimport { HttpCode, META_PREFIX } from '@/common/consts.js';\nimport { getErrorMessage } from '@/common/logger.js';\n\nimport { getRealIp } from '../utils/headers.js';\nimport { toURL } from '../utils/request.js';\nimport { safeSendJson } from '../utils/respond.js';\nimport { parseBody, type BodyPreview } from '../utils/body.js';\nimport { parseQuery } from '../utils/query.js';\nimport { parseCookie } from '../utils/cookie.js';\nimport { PromiseTry } from '@/common/promise-try.js';\n\nexport function createWorkerServer(cx: FluxionContext): http.Server {\n const server = http.createServer(async (req, res) => {\n const method = req.method ?? 'GET';\n const ip = getRealIp(req);\n const url = toURL(req.url);\n if (url === undefined) {\n safeSendJson(res, { message: 'Bad Request: req.url is undefined' }, HttpCode.BadRequest);\n return;\n }\n\n const normalized: NormalizedRequest = {\n method,\n ip,\n url,\n query: parseQuery(url.searchParams),\n body: {},\n headers: req.headers,\n cookie: parseCookie(req.headers.cookie as string | undefined),\n };\n\n let bodyPreview: BodyPreview = {\n exists: false,\n bytes: 0,\n truncated: false,\n };\n\n cx.logger.info('Req', { method, ip, path: url.pathname });\n\n const start = performance.now();\n res.once('finish', () => {\n const fields: Record<string, unknown> = {\n workerId: process.env.WORKER_ID ?? '[primary]',\n method,\n ip,\n path: url.pathname,\n status: res.statusCode,\n duration: (performance.now() - start).toFixed(4),\n };\n\n if ($keys(normalized.query).length > 0) {\n fields.query = normalized.query;\n }\n\n if (bodyPreview.exists) {\n fields.body = bodyPreview.value;\n fields.bodyBytes = bodyPreview.bytes;\n fields.bodyTruncated = bodyPreview.truncated;\n }\n\n cx.logger.info('Res', fields);\n });\n\n // * Start request handling\n try {\n if (normalized.url.pathname.startsWith(META_PREFIX + '/')) {\n safeSendJson(res, { message: `Meta APIs are available on port ${cx.options.metaPort}` }, HttpCode.NotFound);\n return;\n }\n\n const parsed = await parseBody(req, normalized.method, cx.options.maxRequestBytes);\n normalized.body = parsed.body;\n bodyPreview = parsed.preview;\n\n const handler = await cx.router.getHandler(url);\n if (!handler) {\n safeSendJson(res, { message: 'Not Found' }, HttpCode.NotFound);\n return;\n }\n\n const result = await PromiseTry(handler, normalized, req, res);\n\n if (result !== cx.router.StaticHandled) {\n safeSendJson(res, result);\n }\n } catch (error) {\n cx.logger.error('RequestFailed', {\n method: normalized.method,\n ip: normalized.ip,\n path: normalized.url.pathname,\n error: getErrorMessage(error),\n });\n\n if ((error as NodeJS.ErrnoException).code === 'REQUEST_BODY_TOO_LARGE') {\n safeSendJson(res, { message: getErrorMessage(error) }, HttpCode.PayloadTooLarge);\n } else {\n safeSendJson(res, { message: 'Internal Server Error' }, HttpCode.InternalServerError);\n }\n }\n });\n\n server.on('close', () => {\n cx.logger.info('ServerClosed', {\n host: cx.options.host,\n port: cx.options.port,\n });\n });\n\n server.listen(cx.options.port, cx.options.host, () => {\n cx.logger.info('ServerStarted', {\n pid: process.pid,\n host: cx.options.host,\n port: cx.options.port,\n });\n cx.logger.info('DynamicDirectory', { directory: cx.options.dir });\n });\n\n server.on('error', (error) => {\n cx.logger.error('ServerError', {\n error: getErrorMessage(error),\n });\n });\n\n return server;\n}\n","import type { PrimaryMessage } from './types.js';\nimport type { FluxionContext } from '../types.js';\nimport cluster from 'node:cluster';\n\nimport { getErrorMessage } from '@/common/logger.js';\nimport { loadFunction } from '@/common/injector.js';\nimport { PromiseTry } from '@/common/promise-try.js';\nimport { WorkerAction, PrimaryAction, isPrimaryMessage, INJECTION_KEY } from './consts.js';\nimport { sendToPrimary } from './communicate.js';\nimport { createWorkerServer } from './server.js';\n\nconst inject = async (cx: FluxionContext) => {\n const o = {} as any;\n Reflect.set(globalThis, INJECTION_KEY, o);\n for (let i = 0; i < cx.options.injections.length; i++) {\n const injection = cx.options.injections[i];\n const factory = loadFunction(injection);\n const instance = await PromiseTry(factory);\n o[injection.name] = instance;\n }\n cx.logger.info(`[worker ${process.pid}] injections loaded`, Object.keys(o));\n};\n\nconst startStatsReporter = () => {\n let previousCpuUsage = process.cpuUsage();\n let previousAt = Date.now();\n\n const interval = setInterval(() => {\n const now = Date.now();\n const elapsedMicros = Math.max(1, (now - previousAt) * 1000);\n const cpuDelta = process.cpuUsage(previousCpuUsage);\n const cpuPercent = Number((((cpuDelta.user + cpuDelta.system) / elapsedMicros) * 100).toFixed(2));\n\n previousCpuUsage = process.cpuUsage();\n previousAt = now;\n\n const memoryUsage = process.memoryUsage();\n sendToPrimary({\n type: WorkerAction.Stats,\n pid: process.pid,\n stats: {\n at: now,\n pid: process.pid,\n uptimeSeconds: Number(process.uptime().toFixed(3)),\n cpu: {\n userMicros: cpuDelta.user,\n systemMicros: cpuDelta.system,\n percent: cpuPercent,\n },\n memory: {\n rss: memoryUsage.rss,\n heapTotal: memoryUsage.heapTotal,\n heapUsed: memoryUsage.heapUsed,\n external: memoryUsage.external,\n arrayBuffers: memoryUsage.arrayBuffers,\n },\n },\n });\n }, 2000);\n\n interval.unref();\n};\n\nexport function initWorker(cx: FluxionContext) {\n if (cluster.isPrimary) {\n $throw('createWorker should only be called in worker process');\n }\n\n process.on('message', (raw: PrimaryMessage) => {\n if (!isPrimaryMessage(raw)) {\n return;\n }\n\n if (raw.type === PrimaryAction.Ping) {\n sendToPrimary({ type: WorkerAction.Pong, pid: process.pid, sentAt: raw.sentAt, receivedAt: Date.now() });\n return;\n }\n });\n\n sendToPrimary({ type: WorkerAction.Created, pid: process.pid });\n startStatsReporter();\n\n PromiseTry(async () => {\n await inject(cx);\n createWorkerServer(cx);\n sendToPrimary({ type: WorkerAction.Ready, pid: process.pid });\n }).catch((error) => {\n cx.logger.error('WorkerBootstrapFailed', {\n pid: process.pid,\n error: getErrorMessage(error),\n });\n process.exit(1);\n });\n}\n","import fs from 'node:fs';\nimport path from 'node:path';\nimport type { FluxionContext } from './types.js';\n\nexport class FluxionWatcher {\n // # Options\n private readonly cx: Pick<FluxionContext, 'options' | 'logger' | 'router'>;\n\n private timer: NodeJS.Timeout | null = null;\n private watcher: fs.FSWatcher | null = null;\n private readonly filesChanged: Set<string> = new Set();\n\n constructor(cx: Pick<FluxionContext, 'options' | 'logger' | 'router'>) {\n this.cx = cx;\n }\n\n /**\n * Recursively register all files in the options directory.\n */\n private init(): this {\n const dirPath = path.join(process.cwd(), this.cx.options.dir);\n\n const registerRecursive = (dir: string, relativePath: string) => {\n const entries = fs.readdirSync(dir, { withFileTypes: true });\n\n for (const entry of entries) {\n const entryPath = path.join(dir, entry.name);\n const entryRelativePath = path.join(relativePath, entry.name);\n\n if (entry.isDirectory()) {\n registerRecursive(entryPath, entryRelativePath);\n } else if (entry.isFile()) {\n try {\n this.cx.router.register(entryRelativePath);\n } catch (err) {\n this.cx.logger.error(`Error registering [${entryRelativePath}]: ${(err as Error).message}`);\n }\n }\n }\n };\n\n if (fs.existsSync(dirPath)) {\n registerRecursive(dirPath, '');\n this.cx.logger.info(`Initial registration complete for directory: ${this.cx.options.dir}`);\n } else {\n this.cx.logger.warn(`Directory does not exist: ${this.cx.options.dir}`);\n }\n\n return this;\n }\n\n /**\n * Since all actions are mapped to `rename` and `change` (WatchEventType).\n *\n * We could only record every file and reload them all.\n */\n start(): this {\n this.init();\n this.watcher = fs\n .watch(this.cx.options.dir, { recursive: true }, (_eventType, filename) => {\n if (!filename) {\n return;\n }\n\n this.filesChanged.add(filename);\n if (!this.timer) {\n this.timer = setTimeout(() => {\n this.filesChanged.forEach((p, _, s) => {\n try {\n this.cx.router.register(p);\n } catch (err) {\n this.cx.logger.error(`Error refreshing handlers: ${(err as Error).message}`);\n } finally {\n s.delete(p);\n }\n });\n\n this.timer = null;\n }, this.cx.options.reloadDelay);\n }\n })\n .on('error', (err) => {\n this.cx.logger.error(`Watcher error: ${err.message}`);\n this.cx.logger.error(`Restarting watcher...`);\n this.stop().start();\n });\n\n this.cx.logger.info(`Watcher started on directory: ${this.cx.options.dir}`);\n return this;\n }\n\n stop(): this {\n if (this.watcher) {\n this.watcher.close();\n this.watcher = null;\n }\n\n if (this.timer) {\n clearTimeout(this.timer);\n this.timer = null;\n }\n\n this.filesChanged.clear();\n return this;\n }\n}\n","import type { FluxionContext, FluxionHandler } from './types.js';\nimport { STATIC_CONTENT_TYPES } from '@/common/consts.js';\nimport { loadFunction } from '@/common/injector.js';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nexport class FluxionRouter {\n /**\n * This means the request has been handled by static resource handler, and no more response should be sent.\n */\n public readonly StaticHandled = Symbol.for('fluxion.router.StaticHandled');\n\n private readonly cx: Pick<FluxionContext, 'options' | 'logger'>;\n private readonly handlers: Map<string, FluxionHandler> = new Map();\n\n constructor(cx: Pick<FluxionContext, 'options' | 'logger'>) {\n this.cx = cx;\n }\n\n makeStaticResource(filepath: string): FluxionHandler {\n const fullPath = path.join(this.cx.options.dir, filepath);\n return async (normalized, _req, res) => {\n if (normalized.method !== 'GET' && normalized.method !== 'HEAD') {\n res.statusCode = 405;\n res.setHeader('Allow', 'GET, HEAD');\n res.end();\n return;\n }\n\n if (!fs.existsSync(fullPath)) {\n res.statusCode = 404;\n res.end('Not Found');\n return;\n }\n\n const stat = fs.statSync(fullPath);\n if (!stat.isFile()) {\n res.statusCode = 404;\n res.end('Not Found');\n return;\n }\n\n const extension = path.extname(filepath).toLowerCase();\n const contentType = STATIC_CONTENT_TYPES[extension] ?? 'application/octet-stream';\n\n res.statusCode = 200;\n res.setHeader('Content-Type', contentType);\n res.setHeader('Content-Length', String(stat.size));\n\n if (normalized.method === 'HEAD') {\n res.end();\n return;\n }\n\n return new Promise<symbol>((resolve, reject) => {\n const stream = fs.createReadStream(fullPath);\n stream.on('error', reject);\n stream.on('end', () => resolve(this.StaticHandled));\n stream.pipe(res);\n });\n };\n }\n\n /**\n * 1. Check if the path exists, if not, delete the handler;\n * 2. If the file extension matches `routerExclude`, delete it and return early;\n * 3. If the file extension matches `apiExts`, register it as an API, otherwise register as static resource;\n * @param filepath\n */\n register(filepath: string) {\n const fullpath = path.join(process.cwd(), this.cx.options.dir, filepath);\n if (!fs.existsSync(fullpath)) {\n this.handlers.delete(filepath);\n this.cx.logger.info(`[${filepath}] deleted`);\n return;\n }\n\n delete require.cache[fullpath];\n\n const extension = path.extname(filepath).toLowerCase();\n\n // Check if this file should be excluded from registration\n if (this.cx.options.routerExclude.some((ext) => extension === ext)) {\n this.handlers.delete(filepath);\n this.cx.logger.info(`[${filepath}] excluded`);\n return;\n }\n\n // register as api\n // ! Files with extensions matching `apiExts` are considered as API handlers.\n if (this.cx.options.apiExts.some((ext) => extension === ext)) {\n const handler = loadFunction({ name: fullpath, modulePath: fullpath });\n this.handlers.set(filepath, handler);\n this.cx.logger.info(`[${filepath}] handler registered`);\n return;\n }\n\n // register as static resource\n this.handlers.set(filepath, this.makeStaticResource(filepath));\n this.cx.logger.info(`[${filepath}] static resource registered`);\n }\n\n getHandler(url: URL): FluxionHandler | undefined {\n const relativePath = url.pathname.replace(/^[\\/]+/, '').replace(/[\\/]+$/, '');\n return this.handlers.get(relativePath);\n }\n}\n","import type { FluxionContext, FluxionOptions } from './types.js';\n\nimport { createLogger } from '@/common/logger.js';\nimport { normalizeOptions } from './utils/options.js';\nimport cluster from 'node:cluster';\nimport { initPrimary } from './cluster/primary.js';\nimport { initWorker } from './cluster/worker.js';\nimport { FluxionWatcher } from './watch.js';\nimport { FluxionRouter } from './router.js';\n\nexport async function fluxion(options: FluxionOptions) {\n const context: FluxionContext = {\n options: normalizeOptions(options),\n } as FluxionContext;\n\n context.logger = createLogger(context as Pick<FluxionContext, 'options'>);\n context.router = new FluxionRouter(context as Pick<FluxionContext, 'options' | 'logger'>);\n\n if (cluster.isPrimary) {\n initPrimary(context);\n } else {\n // Only worker creates the watcher\n context.watcher = new FluxionWatcher(context as Pick<FluxionContext, 'options' | 'logger' | 'router'>).start();\n initWorker(context);\n }\n}\n","import type { FluxionHandler, FluxionOptions } from './core/types.js';\nimport { fluxion } from './core/fluxion.js';\n\nexport { fluxion, type FluxionOptions as FluxionOptions };\n\nexport function defineFluxionHandler(handler: FluxionHandler) {\n return handler;\n}\n\nif (process.env.NODE_ENV !== 'production') {\n globalThis.$throw = (message: string) => {\n throw new Error('[fluxion error]' + message);\n };\n\n const int = (n: string | undefined, defaultValue: number): number => {\n if (n === undefined) {\n return defaultValue;\n }\n const parsed = Number.parseInt(n, 10);\n if (Number.isNaN(parsed)) {\n return defaultValue;\n }\n return parsed;\n };\n\n fluxion({\n dir: process.env.DYNAMIC_DIRECTORY ?? 'dynamicDirectory',\n host: process.env.HOST ?? 'localhost',\n port: int(process.env.PORT, 9000),\n metaPort: int(process.env.META_PORT, 9001),\n reloadDelay: process.env.RELOAD_DELAY ? Number.parseInt(process.env.RELOAD_DELAY, 10) : undefined,\n workerOptions: {\n maxWorkerCount: 1,\n },\n });\n}\n"],"names":["styles","existsSync"],"mappings":"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","x_google_ignoreList":[0,1,2,3]}
|
package/dist/index.d.ts
CHANGED
|
@@ -192,7 +192,7 @@ type FluxionHandler<
|
|
|
192
192
|
request: NormalizedRequest,
|
|
193
193
|
rawRequest: InstanceType<Request>,
|
|
194
194
|
rawResponse: InstanceType<Response> & { req: InstanceType<Request> },
|
|
195
|
-
) => Promise<unknown
|
|
195
|
+
) => Promise<unknown> | unknown;
|
|
196
196
|
|
|
197
197
|
declare function fluxion(options: FluxionOptions): Promise<void>;
|
|
198
198
|
|
package/dist/index.mjs
CHANGED
|
@@ -931,9 +931,13 @@ function PromiseTry(fn, ...args) {
|
|
|
931
931
|
return new Promise((resolve, reject) => {
|
|
932
932
|
// in case `fn` throws synchronously, we catch it and reject the promise
|
|
933
933
|
try {
|
|
934
|
-
fn(...args)
|
|
935
|
-
|
|
936
|
-
.catch(reject);
|
|
934
|
+
const r = fn(...args);
|
|
935
|
+
if (r instanceof Promise) {
|
|
936
|
+
r.then(resolve).catch(reject);
|
|
937
|
+
}
|
|
938
|
+
else {
|
|
939
|
+
resolve(r);
|
|
940
|
+
}
|
|
937
941
|
}
|
|
938
942
|
catch (error) {
|
|
939
943
|
reject(error);
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/vendor/ansi-styles/index.js","../node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/vendor/supports-color/browser.js","../node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/utilities.js","../node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/index.js","../../src/common/dtm.ts","../../src/common/native.ts","../../src/common/injector.ts","../../src/common/logger.ts","../../src/common/expect.ts","../../src/core/utils/options.ts","../../src/core/cluster/consts.ts","../../src/core/cluster/communicate.ts","../../src/common/consts.ts","../../src/core/utils/respond.ts","../../src/core/cluster/meta-api.ts","../../src/core/cluster/primary.ts","../../src/common/promise-try.ts","../../src/core/utils/headers.ts","../../src/core/utils/request.ts","../../src/core/utils/query.ts","../../src/core/utils/body.ts","../../src/core/utils/cookie.ts","../../src/core/cluster/server.ts","../../src/core/cluster/worker.ts","../../src/core/watch.ts","../../src/core/router.ts","../../src/core/fluxion.ts","../../src/index.ts"],"sourcesContent":["const ANSI_BACKGROUND_OFFSET = 10;\n\nconst wrapAnsi16 = (offset = 0) => code => `\\u001B[${code + offset}m`;\n\nconst wrapAnsi256 = (offset = 0) => code => `\\u001B[${38 + offset};5;${code}m`;\n\nconst wrapAnsi16m = (offset = 0) => (red, green, blue) => `\\u001B[${38 + offset};2;${red};${green};${blue}m`;\n\nconst styles = {\n\tmodifier: {\n\t\treset: [0, 0],\n\t\t// 21 isn't widely supported and 22 does the same thing\n\t\tbold: [1, 22],\n\t\tdim: [2, 22],\n\t\titalic: [3, 23],\n\t\tunderline: [4, 24],\n\t\toverline: [53, 55],\n\t\tinverse: [7, 27],\n\t\thidden: [8, 28],\n\t\tstrikethrough: [9, 29],\n\t},\n\tcolor: {\n\t\tblack: [30, 39],\n\t\tred: [31, 39],\n\t\tgreen: [32, 39],\n\t\tyellow: [33, 39],\n\t\tblue: [34, 39],\n\t\tmagenta: [35, 39],\n\t\tcyan: [36, 39],\n\t\twhite: [37, 39],\n\n\t\t// Bright color\n\t\tblackBright: [90, 39],\n\t\tgray: [90, 39], // Alias of `blackBright`\n\t\tgrey: [90, 39], // Alias of `blackBright`\n\t\tredBright: [91, 39],\n\t\tgreenBright: [92, 39],\n\t\tyellowBright: [93, 39],\n\t\tblueBright: [94, 39],\n\t\tmagentaBright: [95, 39],\n\t\tcyanBright: [96, 39],\n\t\twhiteBright: [97, 39],\n\t},\n\tbgColor: {\n\t\tbgBlack: [40, 49],\n\t\tbgRed: [41, 49],\n\t\tbgGreen: [42, 49],\n\t\tbgYellow: [43, 49],\n\t\tbgBlue: [44, 49],\n\t\tbgMagenta: [45, 49],\n\t\tbgCyan: [46, 49],\n\t\tbgWhite: [47, 49],\n\n\t\t// Bright color\n\t\tbgBlackBright: [100, 49],\n\t\tbgGray: [100, 49], // Alias of `bgBlackBright`\n\t\tbgGrey: [100, 49], // Alias of `bgBlackBright`\n\t\tbgRedBright: [101, 49],\n\t\tbgGreenBright: [102, 49],\n\t\tbgYellowBright: [103, 49],\n\t\tbgBlueBright: [104, 49],\n\t\tbgMagentaBright: [105, 49],\n\t\tbgCyanBright: [106, 49],\n\t\tbgWhiteBright: [107, 49],\n\t},\n};\n\nexport const modifierNames = Object.keys(styles.modifier);\nexport const foregroundColorNames = Object.keys(styles.color);\nexport const backgroundColorNames = Object.keys(styles.bgColor);\nexport const colorNames = [...foregroundColorNames, ...backgroundColorNames];\n\nfunction assembleStyles() {\n\tconst codes = new Map();\n\n\tfor (const [groupName, group] of Object.entries(styles)) {\n\t\tfor (const [styleName, style] of Object.entries(group)) {\n\t\t\tstyles[styleName] = {\n\t\t\t\topen: `\\u001B[${style[0]}m`,\n\t\t\t\tclose: `\\u001B[${style[1]}m`,\n\t\t\t};\n\n\t\t\tgroup[styleName] = styles[styleName];\n\n\t\t\tcodes.set(style[0], style[1]);\n\t\t}\n\n\t\tObject.defineProperty(styles, groupName, {\n\t\t\tvalue: group,\n\t\t\tenumerable: false,\n\t\t});\n\t}\n\n\tObject.defineProperty(styles, 'codes', {\n\t\tvalue: codes,\n\t\tenumerable: false,\n\t});\n\n\tstyles.color.close = '\\u001B[39m';\n\tstyles.bgColor.close = '\\u001B[49m';\n\n\tstyles.color.ansi = wrapAnsi16();\n\tstyles.color.ansi256 = wrapAnsi256();\n\tstyles.color.ansi16m = wrapAnsi16m();\n\tstyles.bgColor.ansi = wrapAnsi16(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi256 = wrapAnsi256(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET);\n\n\t// From https://github.com/Qix-/color-convert/blob/3f0e0d4e92e235796ccb17f6e85c72094a651f49/conversions.js\n\tObject.defineProperties(styles, {\n\t\trgbToAnsi256: {\n\t\t\tvalue(red, green, blue) {\n\t\t\t\t// We use the extended greyscale palette here, with the exception of\n\t\t\t\t// black and white. normal palette only has 4 greyscale shades.\n\t\t\t\tif (red === green && green === blue) {\n\t\t\t\t\tif (red < 8) {\n\t\t\t\t\t\treturn 16;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (red > 248) {\n\t\t\t\t\t\treturn 231;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Math.round(((red - 8) / 247) * 24) + 232;\n\t\t\t\t}\n\n\t\t\t\treturn 16\n\t\t\t\t\t+ (36 * Math.round(red / 255 * 5))\n\t\t\t\t\t+ (6 * Math.round(green / 255 * 5))\n\t\t\t\t\t+ Math.round(blue / 255 * 5);\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToRgb: {\n\t\t\tvalue(hex) {\n\t\t\t\tconst matches = /[a-f\\d]{6}|[a-f\\d]{3}/i.exec(hex.toString(16));\n\t\t\t\tif (!matches) {\n\t\t\t\t\treturn [0, 0, 0];\n\t\t\t\t}\n\n\t\t\t\tlet [colorString] = matches;\n\n\t\t\t\tif (colorString.length === 3) {\n\t\t\t\t\tcolorString = [...colorString].map(character => character + character).join('');\n\t\t\t\t}\n\n\t\t\t\tconst integer = Number.parseInt(colorString, 16);\n\n\t\t\t\treturn [\n\t\t\t\t\t/* eslint-disable no-bitwise */\n\t\t\t\t\t(integer >> 16) & 0xFF,\n\t\t\t\t\t(integer >> 8) & 0xFF,\n\t\t\t\t\tinteger & 0xFF,\n\t\t\t\t\t/* eslint-enable no-bitwise */\n\t\t\t\t];\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi256: {\n\t\t\tvalue: hex => styles.rgbToAnsi256(...styles.hexToRgb(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t\tansi256ToAnsi: {\n\t\t\tvalue(code) {\n\t\t\t\tif (code < 8) {\n\t\t\t\t\treturn 30 + code;\n\t\t\t\t}\n\n\t\t\t\tif (code < 16) {\n\t\t\t\t\treturn 90 + (code - 8);\n\t\t\t\t}\n\n\t\t\t\tlet red;\n\t\t\t\tlet green;\n\t\t\t\tlet blue;\n\n\t\t\t\tif (code >= 232) {\n\t\t\t\t\tred = (((code - 232) * 10) + 8) / 255;\n\t\t\t\t\tgreen = red;\n\t\t\t\t\tblue = red;\n\t\t\t\t} else {\n\t\t\t\t\tcode -= 16;\n\n\t\t\t\t\tconst remainder = code % 36;\n\n\t\t\t\t\tred = Math.floor(code / 36) / 5;\n\t\t\t\t\tgreen = Math.floor(remainder / 6) / 5;\n\t\t\t\t\tblue = (remainder % 6) / 5;\n\t\t\t\t}\n\n\t\t\t\tconst value = Math.max(red, green, blue) * 2;\n\n\t\t\t\tif (value === 0) {\n\t\t\t\t\treturn 30;\n\t\t\t\t}\n\n\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\tlet result = 30 + ((Math.round(blue) << 2) | (Math.round(green) << 1) | Math.round(red));\n\n\t\t\t\tif (value === 2) {\n\t\t\t\t\tresult += 60;\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\trgbToAnsi: {\n\t\t\tvalue: (red, green, blue) => styles.ansi256ToAnsi(styles.rgbToAnsi256(red, green, blue)),\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi: {\n\t\t\tvalue: hex => styles.ansi256ToAnsi(styles.hexToAnsi256(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t});\n\n\treturn styles;\n}\n\nconst ansiStyles = assembleStyles();\n\nexport default ansiStyles;\n","/* eslint-env browser */\n\nconst level = (() => {\n\tif (!('navigator' in globalThis)) {\n\t\treturn 0;\n\t}\n\n\tif (globalThis.navigator.userAgentData) {\n\t\tconst brand = navigator.userAgentData.brands.find(({brand}) => brand === 'Chromium');\n\t\tif (brand && brand.version > 93) {\n\t\t\treturn 3;\n\t\t}\n\t}\n\n\tif (/\\b(Chrome|Chromium)\\//.test(globalThis.navigator.userAgent)) {\n\t\treturn 1;\n\t}\n\n\treturn 0;\n})();\n\nconst colorSupport = level !== 0 && {\n\tlevel,\n\thasBasic: true,\n\thas256: level >= 2,\n\thas16m: level >= 3,\n};\n\nconst supportsColor = {\n\tstdout: colorSupport,\n\tstderr: colorSupport,\n};\n\nexport default supportsColor;\n","// TODO: When targeting Node.js 16, use `String.prototype.replaceAll`.\nexport function stringReplaceAll(string, substring, replacer) {\n\tlet index = string.indexOf(substring);\n\tif (index === -1) {\n\t\treturn string;\n\t}\n\n\tconst substringLength = substring.length;\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\treturnValue += string.slice(endIndex, index) + substring + replacer;\n\t\tendIndex = index + substringLength;\n\t\tindex = string.indexOf(substring, endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.slice(endIndex);\n\treturn returnValue;\n}\n\nexport function stringEncaseCRLFWithFirstIndex(string, prefix, postfix, index) {\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\tconst gotCR = string[index - 1] === '\\r';\n\t\treturnValue += string.slice(endIndex, (gotCR ? index - 1 : index)) + prefix + (gotCR ? '\\r\\n' : '\\n') + postfix;\n\t\tendIndex = index + 1;\n\t\tindex = string.indexOf('\\n', endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.slice(endIndex);\n\treturn returnValue;\n}\n","import ansiStyles from '#ansi-styles';\nimport supportsColor from '#supports-color';\nimport { // eslint-disable-line import/order\n\tstringReplaceAll,\n\tstringEncaseCRLFWithFirstIndex,\n} from './utilities.js';\n\nconst {stdout: stdoutColor, stderr: stderrColor} = supportsColor;\n\nconst GENERATOR = Symbol('GENERATOR');\nconst STYLER = Symbol('STYLER');\nconst IS_EMPTY = Symbol('IS_EMPTY');\n\n// `supportsColor.level` → `ansiStyles.color[name]` mapping\nconst levelMapping = [\n\t'ansi',\n\t'ansi',\n\t'ansi256',\n\t'ansi16m',\n];\n\nconst styles = Object.create(null);\n\nconst applyOptions = (object, options = {}) => {\n\tif (options.level && !(Number.isInteger(options.level) && options.level >= 0 && options.level <= 3)) {\n\t\tthrow new Error('The `level` option should be an integer from 0 to 3');\n\t}\n\n\t// Detect level if not set manually\n\tconst colorLevel = stdoutColor ? stdoutColor.level : 0;\n\tobject.level = options.level === undefined ? colorLevel : options.level;\n};\n\nexport class Chalk {\n\tconstructor(options) {\n\t\t// eslint-disable-next-line no-constructor-return\n\t\treturn chalkFactory(options);\n\t}\n}\n\nconst chalkFactory = options => {\n\tconst chalk = (...strings) => strings.join(' ');\n\tapplyOptions(chalk, options);\n\n\tObject.setPrototypeOf(chalk, createChalk.prototype);\n\n\treturn chalk;\n};\n\nfunction createChalk(options) {\n\treturn chalkFactory(options);\n}\n\nObject.setPrototypeOf(createChalk.prototype, Function.prototype);\n\nfor (const [styleName, style] of Object.entries(ansiStyles)) {\n\tstyles[styleName] = {\n\t\tget() {\n\t\t\tconst builder = createBuilder(this, createStyler(style.open, style.close, this[STYLER]), this[IS_EMPTY]);\n\t\t\tObject.defineProperty(this, styleName, {value: builder});\n\t\t\treturn builder;\n\t\t},\n\t};\n}\n\nstyles.visible = {\n\tget() {\n\t\tconst builder = createBuilder(this, this[STYLER], true);\n\t\tObject.defineProperty(this, 'visible', {value: builder});\n\t\treturn builder;\n\t},\n};\n\nconst getModelAnsi = (model, level, type, ...arguments_) => {\n\tif (model === 'rgb') {\n\t\tif (level === 'ansi16m') {\n\t\t\treturn ansiStyles[type].ansi16m(...arguments_);\n\t\t}\n\n\t\tif (level === 'ansi256') {\n\t\t\treturn ansiStyles[type].ansi256(ansiStyles.rgbToAnsi256(...arguments_));\n\t\t}\n\n\t\treturn ansiStyles[type].ansi(ansiStyles.rgbToAnsi(...arguments_));\n\t}\n\n\tif (model === 'hex') {\n\t\treturn getModelAnsi('rgb', level, type, ...ansiStyles.hexToRgb(...arguments_));\n\t}\n\n\treturn ansiStyles[type][model](...arguments_);\n};\n\nconst usedModels = ['rgb', 'hex', 'ansi256'];\n\nfor (const model of usedModels) {\n\tstyles[model] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(getModelAnsi(model, levelMapping[level], 'color', ...arguments_), ansiStyles.color.close, this[STYLER]);\n\t\t\t\treturn createBuilder(this, styler, this[IS_EMPTY]);\n\t\t\t};\n\t\t},\n\t};\n\n\tconst bgModel = 'bg' + model[0].toUpperCase() + model.slice(1);\n\tstyles[bgModel] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(getModelAnsi(model, levelMapping[level], 'bgColor', ...arguments_), ansiStyles.bgColor.close, this[STYLER]);\n\t\t\t\treturn createBuilder(this, styler, this[IS_EMPTY]);\n\t\t\t};\n\t\t},\n\t};\n}\n\nconst proto = Object.defineProperties(() => {}, {\n\t...styles,\n\tlevel: {\n\t\tenumerable: true,\n\t\tget() {\n\t\t\treturn this[GENERATOR].level;\n\t\t},\n\t\tset(level) {\n\t\t\tthis[GENERATOR].level = level;\n\t\t},\n\t},\n});\n\nconst createStyler = (open, close, parent) => {\n\tlet openAll;\n\tlet closeAll;\n\tif (parent === undefined) {\n\t\topenAll = open;\n\t\tcloseAll = close;\n\t} else {\n\t\topenAll = parent.openAll + open;\n\t\tcloseAll = close + parent.closeAll;\n\t}\n\n\treturn {\n\t\topen,\n\t\tclose,\n\t\topenAll,\n\t\tcloseAll,\n\t\tparent,\n\t};\n};\n\nconst createBuilder = (self, _styler, _isEmpty) => {\n\t// Single argument is hot path, implicit coercion is faster than anything\n\t// eslint-disable-next-line no-implicit-coercion\n\tconst builder = (...arguments_) => applyStyle(builder, (arguments_.length === 1) ? ('' + arguments_[0]) : arguments_.join(' '));\n\n\t// We alter the prototype because we must return a function, but there is\n\t// no way to create a function with a different prototype\n\tObject.setPrototypeOf(builder, proto);\n\n\tbuilder[GENERATOR] = self;\n\tbuilder[STYLER] = _styler;\n\tbuilder[IS_EMPTY] = _isEmpty;\n\n\treturn builder;\n};\n\nconst applyStyle = (self, string) => {\n\tif (self.level <= 0 || !string) {\n\t\treturn self[IS_EMPTY] ? '' : string;\n\t}\n\n\tlet styler = self[STYLER];\n\n\tif (styler === undefined) {\n\t\treturn string;\n\t}\n\n\tconst {openAll, closeAll} = styler;\n\tif (string.includes('\\u001B')) {\n\t\twhile (styler !== undefined) {\n\t\t\t// Replace any instances already present with a re-opening code\n\t\t\t// otherwise only the part of the string until said closing code\n\t\t\t// will be colored, and the rest will simply be 'plain'.\n\t\t\tstring = stringReplaceAll(string, styler.close, styler.open);\n\n\t\t\tstyler = styler.parent;\n\t\t}\n\t}\n\n\t// We can move both next actions out of loop, because remaining actions in loop won't have\n\t// any/visible effect on parts we add here. Close the styling before a linebreak and reopen\n\t// after next line to fix a bleed issue on macOS: https://github.com/chalk/chalk/pull/92\n\tconst lfIndex = string.indexOf('\\n');\n\tif (lfIndex !== -1) {\n\t\tstring = stringEncaseCRLFWithFirstIndex(string, closeAll, openAll, lfIndex);\n\t}\n\n\treturn openAll + string + closeAll;\n};\n\nObject.defineProperties(createChalk.prototype, styles);\n\nconst chalk = createChalk();\nexport const chalkStderr = createChalk({level: stderrColor ? stderrColor.level : 0});\n\nexport {\n\tmodifierNames,\n\tforegroundColorNames,\n\tbackgroundColorNames,\n\tcolorNames,\n\n\t// TODO: Remove these aliases in the next major version\n\tmodifierNames as modifiers,\n\tforegroundColorNames as foregroundColors,\n\tbackgroundColorNames as backgroundColors,\n\tcolorNames as colors,\n} from './vendor/ansi-styles/index.js';\n\nexport {\n\tstdoutColor as supportsColor,\n\tstderrColor as supportsColorStderr,\n};\n\nexport default chalk;\n","export function dtm(dt = new Date()) {\n const y = dt.getFullYear();\n const m = String(dt.getMonth() + 1).padStart(2, '0');\n const d = String(dt.getDate()).padStart(2, '0');\n const hh = String(dt.getHours()).padStart(2, '0');\n const mm = String(dt.getMinutes()).padStart(2, '0');\n const ss = String(dt.getSeconds()).padStart(2, '0');\n const ms = String(dt.getMilliseconds()).padStart(3, '0');\n return `${y}.${m}.${d} ${hh}:${mm}:${ss}.${ms}`;\n}\n","export const $stringify = JSON.stringify;\n\nexport const $keys = Object.keys;\n","import type { InjectionConfig } from '@/common/types.js';\n\nexport function loadFunction(injectionConfig: InjectionConfig): (...args: any[]) => any {\n const m = require(injectionConfig.modulePath);\n if (typeof m === 'function') {\n return m;\n } else if (typeof m.default === 'function') {\n return m.default;\n } else if (typeof m.handler === 'function') {\n return m.handler;\n } else {\n $throw(\n `Invalid handler module '${injectionConfig.modulePath}', make sure it has a default export or named export called \"handler\" which is a function`,\n );\n }\n}\n","import chalk from 'chalk';\nimport type { otherstring, InjectionConfig } from '@/common/types.js';\nimport type { FluxionContext } from '@/core/types.js';\n\nimport { dtm } from './dtm.js';\nimport { $keys, $stringify } from './native.js';\nimport { loadFunction } from './injector.js';\n\ntype LogLevel = 'INFO' | 'WARN' | 'ERROR' | 'SUCC' | 'DEBUG' | 'VERBOSE' | otherstring;\n\ninterface LogEntry {\n timestamp: string;\n level: LogLevel;\n event: string;\n message?: string;\n [key: string]: unknown;\n}\n\ntype LoggerSink = (entry: LogEntry) => void;\n\nexport type LoggerOption = 'one-line' | 'json-line' | InjectionConfig;\n\nexport interface FluxionLogger {\n /**\n * [WARN] We assert that `fields` is an object or undefined.\n */\n write(level: LogLevel, event: string, fields?: object): void;\n info(event: string, fields?: object): void;\n warn(event: string, fields?: object): void;\n error(event: string, fields?: object): void;\n succ(event: string, fields?: object): void;\n debug(event: string, fields?: object): void;\n verbose(event: string, fields?: object): void;\n}\n\nconst safeStringify = (value: unknown): string => {\n try {\n return $stringify(value);\n } catch {\n return '[unserializable]';\n }\n};\n\nconst ColoredLevels: Record<LogLevel, string> = {\n INFO: chalk.hex('#0386e3')('INFO'),\n WARN: chalk.hex('#fb923c')('WARN'),\n ERROR: chalk.hex('#ef4444')('ERROR'),\n SUCC: chalk.hex('#22c55e')('SUCC'),\n DEBUG: chalk.hex('#d327e0')('DEBUG'),\n VERBOSE: chalk.hex('#36ffeb')('SUCC'),\n};\nconst TimestampColor = chalk.hex('#166534');\n\nexport const oneLineLogger: LoggerSink = (entry: LogEntry) => {\n const { level: rawLevel, timestamp: rawTimestamp, event: rawEvent, message: rawMessage, ...fields } = entry;\n\n const timestamp = TimestampColor(`[${rawTimestamp}]`);\n const level = ColoredLevels[rawLevel] ?? rawLevel;\n const body = rawMessage ?? rawEvent;\n const fieldsText = $keys(fields).length > 0 ? ` ${chalk.dim(safeStringify(fields))}` : '';\n\n console.log(`${timestamp} ${level} ${body}${fieldsText}`);\n};\n\n/**\n * & Logger Options here is checked by normalizeOptions function.\n */\nfunction resolveLoggerSink(cx: Pick<FluxionContext, 'options'>): LoggerSink {\n const loggerOption = cx.options.logger;\n if (loggerOption === undefined || loggerOption === 'one-line') {\n return oneLineLogger;\n }\n\n if (loggerOption === 'json-line') {\n return (entry: LogEntry) => console.log(safeStringify(entry));\n }\n\n return loadFunction(loggerOption) as LoggerSink;\n}\n\nexport function createLogger(cx: Pick<FluxionContext, 'options'>): FluxionLogger {\n const sink = resolveLoggerSink(cx);\n\n const logger: FluxionLogger = {\n write(level: LogLevel, event: string, fields: Record<string, unknown> = {}): void {\n const entry: LogEntry = {\n ...fields,\n timestamp: dtm(),\n level,\n event,\n };\n\n try {\n sink(entry);\n } catch {\n // Ignore logger sink failures to avoid breaking request handling.\n }\n },\n info(event: string, fields?: Record<string, unknown>): void {\n this.write('INFO', event, fields);\n },\n warn(event: string, fields?: Record<string, unknown>): void {\n this.write('WARN', event, fields);\n },\n error(event: string, fields?: Record<string, unknown>): void {\n this.write('ERROR', event, fields);\n },\n succ(event: string, fields?: Record<string, unknown>): void {\n this.write('SUCC', event, fields);\n },\n debug(event: string, fields?: Record<string, unknown>): void {\n this.write('DEBUG', event, fields);\n },\n verbose(event: string, fields?: Record<string, unknown>): void {\n this.write('VERBOSE', event, fields);\n },\n };\n\n return logger;\n}\n\n/**\n * ! Error.isError needs Node.js 24\n */\nexport const getErrorMessage = (error: unknown): string =>\n typeof error === 'object' && error !== null ? (error as any).message : String(error);\n","export namespace whether {\n export const isObject = (value: unknown): value is Record<string, unknown> => {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n };\n}\n\nexport namespace expect {\n export function isObject<T = Record<string, unknown>>(o: unknown, message: string): asserts o is T {\n if (typeof o !== 'object' || o === null) {\n $throw(message);\n }\n }\n\n export function isString(s: unknown, message: string): asserts s is string {\n if (typeof s !== 'string') {\n $throw(message);\n }\n }\n\n export function isNumber(n: unknown, message: string): asserts n is number {\n if (typeof n !== 'number') {\n $throw(message);\n }\n }\n\n export function isPositiveInteger(n: unknown, message: string): asserts n is number {\n if (typeof n !== 'number' || n <= 0 || !Number.isSafeInteger(n)) {\n $throw(message);\n }\n }\n\n export function isObjectArray<T = Record<string, unknown>>(arr: unknown, message: string): asserts arr is T[] {\n if (!Array.isArray(arr) || arr.some((item) => typeof item !== 'object' || item === null)) {\n $throw(message);\n }\n }\n}\n","import fs, { existsSync } from 'node:fs';\nimport type { LoggerOption } from '@/common/logger.js';\nimport type { InjectionConfig } from '@/common/types.js';\nimport { expect } from '@/common/expect.js';\n\nimport type { WorkerOptions, FluxionOptions, NormalizedFluxionOptions } from '../types.js';\n\n/**\n * Resolves runtime options with framework defaults.\n */\nfunction resolveWorkerOptions(options: Partial<WorkerOptions>): WorkerOptions {\n return {\n maxWorkerCount: options.maxWorkerCount ?? 4,\n requestTimeoutMs: options.requestTimeoutMs ?? 3000,\n maxInflight: options.maxInflight ?? 64,\n memorySoftLimitMb: options.memorySoftLimitMb ?? 96,\n memoryHardLimitMb: options.memoryHardLimitMb ?? 128,\n memorySampleIntervalMs: options.memorySampleIntervalMs ?? 5000,\n maxOldGenerationSizeMb: options.maxOldGenerationSizeMb ?? 128,\n maxYoungGenerationSizeMb: options.maxYoungGenerationSizeMb ?? 32,\n stackSizeMb: options.stackSizeMb ?? 4,\n maxResponseBytes: options.maxResponseBytes ?? 2 * 1024 * 1024,\n };\n}\n\nfunction expectLoggerOption(o: InjectionConfig | LoggerOption) {\n if (o === 'one-line' || o === 'json-line') {\n return;\n }\n if (typeof o === 'object' && o !== null && typeof o.modulePath === 'string' && typeof o.name === 'string') {\n return;\n }\n $throw(`Invalid logger option, must be 'one-line', 'json-line' or { modulePath: string; name: string; }`);\n}\n\n/**\n * Normalize options and create necessary resources like the dynamic directory and logger.\n */\nexport function normalizeOptions(options: FluxionOptions): NormalizedFluxionOptions {\n expect.isObject(options, 'FluxionOptions must be an object');\n\n let {\n dir,\n host,\n port,\n metaPort,\n injections = [],\n moduleDir = process.cwd(),\n workerOptions = {},\n maxRequestBytes = 8_000_000,\n reloadDelay = 300,\n apiExts = ['.ts'],\n routerExclude = [],\n } = options as FluxionOptions;\n const logger = options.logger ?? 'one-line';\n expectLoggerOption(logger);\n\n expect.isString(dir, 'FluxionOptions.dir must be a string');\n\n expect.isString(moduleDir, 'FluxionOptions.moduleDir must be a string');\n\n expect.isString(host, 'FluxionOptions.host must be a string');\n\n expect.isPositiveInteger(reloadDelay, 'FluxionOptions.reloadDelay must be a positive integer');\n if (reloadDelay < 50) {\n $throw('FluxionOptions.reloadDelay must be greater than or equal to 50');\n }\n\n expect.isPositiveInteger(port, 'FluxionOptions.port must be a positive integer');\n if (port > 65535) {\n $throw('FluxionOptions.port must be less than or equal to 65535');\n }\n metaPort ??= port + 1;\n expect.isPositiveInteger(metaPort, 'FluxionOptions.metaPort must be a positive integer');\n if (metaPort > 65535) {\n $throw('FluxionOptions.metaPort must be less than or equal to 65535');\n }\n if (metaPort === port) {\n $throw('FluxionOptions.metaPort must be different from FluxionOptions.port');\n }\n expect.isObjectArray<InjectionConfig>(injections, 'FluxionOptions.injections must be an array of objects');\n expect.isObject(workerOptions, 'FluxionOptions.workerOptions must be an object');\n expect.isPositiveInteger(maxRequestBytes, 'FluxionOptions.maxRequestBytes must be a positive integer');\n\n if (!existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n\n return {\n dir,\n host,\n port,\n reloadDelay,\n metaPort,\n injections,\n moduleDir,\n workerOptions: resolveWorkerOptions(workerOptions),\n maxRequestBytes,\n logger,\n apiExts,\n routerExclude,\n };\n}\n","import type { PrimaryMessage as PrimaryMessage, WorkerMessage as WorkerMessage } from './types.js';\n\nexport const INJECTION_KEY = Symbol.for('fluxion.injection');\n\nexport const enum PrimaryAction {\n /**\n * Health check message, the worker should respond with Pong and the latency information\n */\n Ping = 100,\n}\n\nexport const enum WorkerAction {\n /**\n * Just created\n */\n Created = 200,\n\n /**\n * Ready for tasks\n * - fluxion options are injected\n */\n Ready,\n\n /**\n * Response to Ping, used for health check and latency measurement\n */\n Pong,\n\n /**\n * Runtime telemetry snapshot from worker process.\n */\n Stats,\n}\n\nexport const isPrimaryMessage = (v: PrimaryMessage): v is PrimaryMessage => [PrimaryAction.Ping].includes(v?.type);\n\nexport const isWorkerMessage = (v: WorkerMessage): v is WorkerMessage =>\n [WorkerAction.Pong, WorkerAction.Created, WorkerAction.Ready, WorkerAction.Stats].includes(v?.type);\n","import type cluster from 'node:cluster';\nimport type { PrimaryMessage, WorkerMessage } from './types.js';\n\nexport const sendToPrimary = (message: WorkerMessage) => process.send?.(message);\n\nexport const sendToWorker = (worker: cluster.Worker, message: PrimaryMessage) => worker.send(message);\n","export const DUMMY_BASE_URL = 'http://fluxion.local';\nexport const META_PREFIX = '/_fluxion';\n\nexport const STATIC_CONTENT_TYPES: Record<string, string> = {\n '.css': 'text/css; charset=utf-8',\n '.html': 'text/html; charset=utf-8',\n '.ico': 'image/x-icon',\n '.js': 'text/javascript; charset=utf-8',\n '.json': 'application/json; charset=utf-8',\n '.map': 'application/json; charset=utf-8',\n '.png': 'image/png',\n '.jpg': 'image/jpeg',\n '.jpeg': 'image/jpeg',\n '.svg': 'image/svg+xml',\n '.txt': 'text/plain; charset=utf-8',\n '.webp': 'image/webp',\n};\n\nexport const enum HttpCode {\n Ok = 200,\n BadRequest = 400,\n PayloadTooLarge = 413,\n NotFound = 404,\n InternalServerError = 500,\n}\n\nexport const enum HandlerResult {\n NotFound,\n Handled,\n}\n","import type { ServerResponse } from 'node:http';\nimport { HttpCode } from '@/common/consts.js';\n\nexport function sendJson(res: ServerResponse, payload: unknown, statusCode: HttpCode = HttpCode.Ok): void {\n res.statusCode = statusCode;\n res.setHeader('Content-Type', 'application/json; charset=utf-8');\n res.end(JSON.stringify(payload));\n}\n\nexport function safeSendJson(res: ServerResponse, payload: unknown, statusCode: HttpCode = HttpCode.Ok): void {\n if (res.writableEnded) {\n return;\n }\n\n if (res.headersSent) {\n res.end();\n return;\n }\n\n sendJson(res, payload, statusCode);\n}\n","import http from 'node:http';\n\nimport { getErrorMessage } from '@/common/logger.js';\nimport { HttpCode, META_PREFIX } from '@/common/consts.js';\nimport { sendJson } from '../utils/respond.js';\nimport { FluxionContext } from '../types.js';\n\nexport function createPrimaryMetaApiServer(\n cx: Pick<FluxionContext, 'logger' | 'options' | 'router'>,\n getWorkersSnapshot: () => unknown,\n): http.Server {\n const server = http.createServer((req, res) => {\n const method = req.method ?? 'GET';\n\n let pathname = '/';\n try {\n pathname = new URL(req.url ?? '/', 'http://fluxion.local').pathname;\n } catch {\n sendJson(res, { message: 'Bad Request: invalid url' }, HttpCode.BadRequest);\n return;\n }\n\n if (method === 'GET' && pathname === META_PREFIX + '/healthz') {\n sendJson(res, {\n ok: true,\n role: 'primary',\n pid: process.pid,\n now: Date.now(),\n uptimeSeconds: Number(process.uptime().toFixed(3)),\n });\n return;\n }\n\n if (method === 'GET' && pathname === META_PREFIX + '/workers') {\n sendJson(res, {\n ok: true,\n now: Date.now(),\n workers: getWorkersSnapshot(),\n });\n return;\n }\n\n sendJson(res, { message: 'Not Found' }, HttpCode.NotFound);\n });\n\n server.on('listening', () => {\n cx.logger.info('MetaApiStarted', {\n pid: process.pid,\n host: cx.options.host,\n port: cx.options.metaPort,\n prefix: META_PREFIX,\n });\n });\n\n server.on('error', (error) => {\n cx.logger.error('MetaApiError', {\n host: cx.options.host,\n port: cx.options.metaPort,\n error: getErrorMessage(error),\n });\n process.exit(1);\n });\n\n server.listen(cx.options.metaPort, cx.options.host);\n return server;\n}\n","import type { WorkerMessage, WorkerState } from './types.js';\nimport type { FluxionContext } from '../types.js';\nimport os from 'node:os';\nimport cluster from 'node:cluster';\n\nimport { isWorkerMessage, WorkerAction, PrimaryAction } from './consts.js';\nimport { sendToWorker } from './communicate.js';\nimport { createPrimaryMetaApiServer } from './meta-api.js';\n\nconst bytesToMb = (bytes: number) => Number((bytes / 1024 / 1024).toFixed(2));\n\nexport function initPrimary(cx: Pick<FluxionContext, 'logger' | 'options' | 'router'>) {\n if (!cluster.isPrimary) {\n $throw('createPrimary should only be called in primary process');\n }\n\n const { workerOptions } = cx.options;\n const cpuCount = Math.max(1, os.cpus().length);\n const workerCount = Math.max(1, Math.min(workerOptions.maxWorkerCount ?? Math.min(2, cpuCount), cpuCount));\n\n cx.logger.info('PrimaryStarted', {\n pid: process.pid,\n workers: workerCount,\n host: cx.options.host,\n port: cx.options.port,\n metaPort: cx.options.metaPort,\n });\n\n const workers = new Map<number, WorkerState>();\n\n const getWorkersSnapshot = () => {\n return {\n primaryPid: process.pid,\n host: cx.options.host,\n port: cx.options.port,\n metaPort: cx.options.metaPort,\n uptimeSeconds: Number(process.uptime().toFixed(3)),\n workers: Array.from(workers.entries()).map(([workerId, info]) => {\n const { instance } = info;\n const stats = info.lastStats;\n return {\n workerId,\n pid: info.pid ?? instance.process.pid ?? null,\n state: info.state,\n createdAt: info.createdAt,\n readyAt: info.readyAt ?? null,\n connected: instance.isConnected(),\n dead: instance.isDead(),\n exitedAfterDisconnect: instance.exitedAfterDisconnect,\n lastPongAt: info.lastPongAt ?? null,\n lastRttMs: info.lastRttMs ?? null,\n stats:\n stats === undefined\n ? null\n : {\n at: stats.at,\n uptimeSeconds: stats.uptimeSeconds,\n cpu: stats.cpu,\n memory: {\n ...stats.memory,\n rssMb: bytesToMb(stats.memory.rss),\n heapTotalMb: bytesToMb(stats.memory.heapTotal),\n heapUsedMb: bytesToMb(stats.memory.heapUsed),\n externalMb: bytesToMb(stats.memory.external),\n arrayBuffersMb: bytesToMb(stats.memory.arrayBuffers),\n },\n },\n };\n }),\n };\n };\n\n createPrimaryMetaApiServer(cx, getWorkersSnapshot);\n\n const attachWorker = (worker: cluster.Worker): void => {\n const workerInfo: WorkerState = {\n state: 'creating',\n pid: worker.process.pid,\n createdAt: Date.now(),\n instance: worker,\n };\n workers.set(worker.id, workerInfo);\n\n worker.on('message', (raw: WorkerMessage) => {\n if (!isWorkerMessage(raw)) {\n return;\n }\n\n if (raw.type === WorkerAction.Pong) {\n const rtt = Date.now() - raw.sentAt;\n workerInfo.pid = raw.pid;\n workerInfo.lastPongAt = Date.now();\n workerInfo.lastRttMs = rtt;\n return;\n }\n\n if (raw.type === WorkerAction.Ready) {\n workerInfo.state = 'ready';\n workerInfo.pid = raw.pid;\n workerInfo.readyAt = Date.now();\n cx.logger.info('WorkerReady', { workerId: worker.id, pid: raw.pid });\n return;\n }\n\n if (raw.type === WorkerAction.Created) {\n workerInfo.state = 'created';\n workerInfo.pid = raw.pid;\n cx.logger.info('WorkerCreated', { workerId: worker.id, pid: raw.pid });\n return;\n }\n\n if (raw.type === WorkerAction.Stats) {\n workerInfo.pid = raw.pid;\n workerInfo.lastStats = raw.stats;\n }\n });\n\n worker.on('exit', (code, signal) => {\n workers.delete(worker.id);\n cx.logger.warn('WorkerExited', {\n workerId: worker.id,\n pid: worker.process.pid ?? 'unknown',\n code,\n signal: signal ?? 'none',\n });\n });\n };\n\n for (let i = 0; i < workerCount; i++) {\n attachWorker(cluster.fork({ WORKER_ID: String(i + 1) }));\n }\n\n const pingTimer = setInterval(() => {\n const sentAt = Date.now();\n for (const info of workers.values()) {\n if (!info.instance.isConnected()) {\n continue;\n }\n try {\n sendToWorker(info.instance, { type: PrimaryAction.Ping, sentAt });\n } catch {\n // Ignore transient IPC errors; worker lifecycle events will reconcile state.\n }\n }\n }, 5000);\n pingTimer.unref();\n}\n","/**\n * For low version of Node.js that does not support `Promise.try`, we can implement it ourselves.\n *\n * Only for async functions.\n */\nexport function PromiseTry<T extends (...args: any[]) => Promise<any>>(fn: T, ...args: Parameters<T>) {\n return new Promise<ReturnType<T>>((resolve, reject) => {\n // in case `fn` throws synchronously, we catch it and reject the promise\n try {\n fn(...args)\n .then(resolve)\n .catch(reject);\n } catch (error) {\n reject(error);\n }\n });\n}\n","import type { IncomingMessage } from 'node:http';\n\nexport function getRealIp(req: IncomingMessage): string {\n const forwardedFor = req.headersDistinct['x-forwarded-for'];\n if (forwardedFor) {\n const firstForwarded = forwardedFor[0]?.split(',')[0]?.trim();\n if (firstForwarded && firstForwarded.length > 0) {\n return firstForwarded;\n }\n }\n\n const realIp = req.headersDistinct['x-real-ip']?.[0].trim();\n if (realIp !== undefined) {\n return realIp;\n }\n\n return req.socket.remoteAddress ?? 'unknown';\n}\n\nexport function isTextualContentType(contentType: string | undefined): boolean {\n if (contentType === undefined) {\n return false;\n }\n\n const normalized = contentType.toLowerCase();\n\n return (\n normalized.startsWith('text/') ||\n normalized.includes('json') ||\n normalized.includes('xml') ||\n normalized.includes('x-www-form-urlencoded') ||\n normalized.includes('javascript')\n );\n}\n","import { DUMMY_BASE_URL } from '@/common/consts.js';\n\nexport function toURL(rawUrl: string | undefined): URL | undefined {\n if (rawUrl === undefined) {\n return undefined;\n }\n\n try {\n return new URL(rawUrl, DUMMY_BASE_URL);\n } catch {\n return undefined;\n }\n}\n","export function parseQuery(searchParams: URLSearchParams): Record<string, string | string[]> {\n const query: Record<string, string | string[]> = {};\n\n for (const [key, value] of searchParams.entries()) {\n const existing = query[key];\n\n if (existing === undefined) {\n query[key] = value;\n continue;\n }\n\n if (Array.isArray(existing)) {\n existing.push(value);\n continue;\n }\n\n query[key] = [existing, value];\n }\n\n return query;\n}\n","import type http from 'node:http';\n\nimport { isTextualContentType } from './headers.js';\nimport { parseQuery } from './query.js';\n\nexport interface BodyPreview {\n exists: boolean;\n value?: string;\n bytes: number;\n truncated: boolean;\n}\n\nfunction createRequestBodyTooLargeError(receivedBytes: number, maxBytes: number): NodeJS.ErrnoException {\n const sizeError = new Error(\n `request body too large: ${receivedBytes.toString()} bytes exceeds ${maxBytes.toString()} bytes`,\n ) as NodeJS.ErrnoException;\n\n sizeError.code = 'REQUEST_BODY_TOO_LARGE';\n\n return sizeError;\n}\n\nfunction getHeaderValue(headerValue: string | string[] | undefined): string | undefined {\n return Array.isArray(headerValue) ? headerValue[0] : headerValue;\n}\n\nfunction createEmptyPreview(): BodyPreview {\n return {\n exists: false,\n bytes: 0,\n truncated: false,\n };\n}\n\nfunction createPreview(\n previewBuffer: Buffer,\n totalBytes: number,\n contentType: string | undefined,\n truncated: boolean,\n): BodyPreview {\n if (totalBytes === 0) {\n return createEmptyPreview();\n }\n\n if (isTextualContentType(contentType)) {\n return {\n exists: true,\n value: previewBuffer.toString('utf8'),\n bytes: totalBytes,\n truncated,\n };\n }\n\n return {\n exists: true,\n value: `<binary body: ${totalBytes} bytes>`,\n bytes: totalBytes,\n truncated,\n };\n}\n\nasync function readRequestBodyWithPreview(\n req: http.IncomingMessage,\n method: string,\n maxBytes: number,\n previewMaxBytes = 8192,\n): Promise<{ rawBody: Buffer | undefined; preview: BodyPreview }> {\n if (method === 'GET' || method === 'HEAD') {\n return {\n rawBody: undefined,\n preview: createEmptyPreview(),\n };\n }\n\n if (req.readableEnded) {\n return {\n rawBody: undefined,\n preview: createEmptyPreview(),\n };\n }\n\n const contentLengthRaw = getHeaderValue(req.headers['content-length']);\n const declaredBytes = contentLengthRaw !== undefined ? Number.parseInt(contentLengthRaw, 10) : NaN;\n\n if (Number.isFinite(declaredBytes) && declaredBytes > maxBytes) {\n throw createRequestBodyTooLargeError(declaredBytes, maxBytes);\n }\n\n return new Promise((resolve, reject) => {\n const rawBodyChunks: Buffer[] = [];\n const previewChunks: Buffer[] = [];\n let totalBytes = 0;\n let previewBytes = 0;\n let previewTruncated = false;\n let settled = false;\n\n const cleanup = (): void => {\n req.off('data', onData);\n req.off('end', onEnd);\n req.off('error', onError);\n req.off('aborted', onAborted);\n };\n\n const settle = (action: () => void): void => {\n if (settled) {\n return;\n }\n\n settled = true;\n action();\n };\n\n const onData = (chunk: Buffer | string | Uint8Array): void => {\n const bufferChunk = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);\n totalBytes += bufferChunk.byteLength;\n\n if (totalBytes > maxBytes) {\n cleanup();\n req.resume();\n settle(() => {\n reject(createRequestBodyTooLargeError(totalBytes, maxBytes));\n });\n return;\n }\n\n rawBodyChunks.push(bufferChunk);\n\n if (previewBytes < previewMaxBytes) {\n const remaining = previewMaxBytes - previewBytes;\n const nextSlice = bufferChunk.subarray(0, remaining);\n previewChunks.push(nextSlice);\n previewBytes += nextSlice.length;\n\n if (nextSlice.length < bufferChunk.length) {\n previewTruncated = true;\n }\n } else {\n previewTruncated = true;\n }\n };\n\n const onEnd = (): void => {\n cleanup();\n settle(() => {\n const rawBody = rawBodyChunks.length > 0 ? Buffer.concat(rawBodyChunks) : undefined;\n const previewBuffer = previewChunks.length > 0 ? Buffer.concat(previewChunks) : Buffer.alloc(0);\n\n resolve({\n rawBody,\n preview: createPreview(\n previewBuffer,\n rawBody?.byteLength ?? 0,\n getHeaderValue(req.headers['content-type']),\n previewTruncated,\n ),\n });\n });\n };\n\n const onError = (error: Error): void => {\n cleanup();\n settle(() => {\n reject(error);\n });\n };\n\n const onAborted = (): void => {\n cleanup();\n settle(() => {\n reject(new Error('request aborted while reading body'));\n });\n };\n\n req.on('data', onData);\n req.once('end', onEnd);\n req.once('error', onError);\n req.once('aborted', onAborted);\n });\n}\n\nexport async function parseBody(\n req: http.IncomingMessage,\n method: string,\n maxBytes: number,\n): Promise<{ body: Record<string, any>; preview: BodyPreview }> {\n const { rawBody, preview } = await readRequestBodyWithPreview(req, method, maxBytes);\n\n if (rawBody === undefined || rawBody.byteLength === 0) {\n return {\n body: {},\n preview,\n };\n }\n\n const contentType = getHeaderValue(req.headers['content-type'])?.toLowerCase() ?? '';\n\n if (contentType.includes('json')) {\n const textBody = rawBody.toString('utf8').trim();\n\n if (textBody.length === 0) {\n return {\n body: {},\n preview,\n };\n }\n\n try {\n const parsed = JSON.parse(textBody) as unknown;\n\n if (parsed !== null && typeof parsed === 'object' && !Array.isArray(parsed)) {\n return {\n body: parsed as Record<string, any>,\n preview,\n };\n }\n\n return {\n body: { value: parsed },\n preview,\n };\n } catch {\n return {\n body: { raw: textBody },\n preview,\n };\n }\n }\n\n if (contentType.includes('x-www-form-urlencoded')) {\n return {\n body: parseQuery(new URLSearchParams(rawBody.toString('utf8'))),\n preview,\n };\n }\n\n if (isTextualContentType(contentType)) {\n return {\n body: { raw: rawBody.toString('utf8') },\n preview,\n };\n }\n\n return {\n body: {},\n preview,\n };\n}\n","/**\n * Parse Cookie header string into an object\n */\nexport function parseCookie(cookieHeader: string | undefined): Record<string, string> {\n if (!cookieHeader) {\n return {};\n }\n\n const cookies: Record<string, string> = {};\n const pairs = cookieHeader.split(';');\n\n for (const pair of pairs) {\n const [key, ...valueParts] = pair.split('=');\n if (!key) continue;\n\n const trimmedKey = key.trim();\n const value = valueParts.join('=').trim();\n cookies[trimmedKey] = decodeURIComponent(value);\n }\n\n return cookies;\n}\n\n/**\n * Serialize an object into a Cookie header string\n */\nexport function serializeCookie(name: string, value: string, options?: {\n maxAge?: number;\n expires?: Date;\n domain?: string;\n path?: string;\n secure?: boolean;\n httpOnly?: boolean;\n sameSite?: 'strict' | 'lax' | 'none';\n}): string {\n let cookie = `${encodeURIComponent(name)}=${encodeURIComponent(value)}`;\n\n if (options) {\n if (options.maxAge !== undefined) {\n cookie += `; Max-Age=${options.maxAge}`;\n }\n if (options.expires) {\n cookie += `; Expires=${options.expires.toUTCString()}`;\n }\n if (options.domain) {\n cookie += `; Domain=${options.domain}`;\n }\n if (options.path) {\n cookie += `; Path=${options.path}`;\n }\n if (options.secure) {\n cookie += '; Secure';\n }\n if (options.httpOnly) {\n cookie += '; HttpOnly';\n }\n if (options.sameSite) {\n cookie += `; SameSite=${options.sameSite}`;\n }\n }\n\n return cookie;\n}\n","import http from 'node:http';\n\nimport type { FluxionContext, NormalizedRequest } from '../types.js';\nimport { $keys } from '@/common/native.js';\nimport { HttpCode, META_PREFIX } from '@/common/consts.js';\nimport { getErrorMessage } from '@/common/logger.js';\n\nimport { getRealIp } from '../utils/headers.js';\nimport { toURL } from '../utils/request.js';\nimport { safeSendJson } from '../utils/respond.js';\nimport { parseBody, type BodyPreview } from '../utils/body.js';\nimport { parseQuery } from '../utils/query.js';\nimport { parseCookie } from '../utils/cookie.js';\nimport { PromiseTry } from '@/common/promise-try.js';\n\nexport function createWorkerServer(cx: FluxionContext): http.Server {\n const server = http.createServer(async (req, res) => {\n const method = req.method ?? 'GET';\n const ip = getRealIp(req);\n const url = toURL(req.url);\n if (url === undefined) {\n safeSendJson(res, { message: 'Bad Request: req.url is undefined' }, HttpCode.BadRequest);\n return;\n }\n\n const normalized: NormalizedRequest = {\n method,\n ip,\n url,\n query: parseQuery(url.searchParams),\n body: {},\n headers: req.headers,\n cookie: parseCookie(req.headers.cookie as string | undefined),\n };\n\n let bodyPreview: BodyPreview = {\n exists: false,\n bytes: 0,\n truncated: false,\n };\n\n cx.logger.info('Req', { method, ip, path: url.pathname });\n\n const start = performance.now();\n res.once('finish', () => {\n const fields: Record<string, unknown> = {\n workerId: process.env.WORKER_ID ?? '[primary]',\n method,\n ip,\n path: url.pathname,\n status: res.statusCode,\n duration: (performance.now() - start).toFixed(4),\n };\n\n if ($keys(normalized.query).length > 0) {\n fields.query = normalized.query;\n }\n\n if (bodyPreview.exists) {\n fields.body = bodyPreview.value;\n fields.bodyBytes = bodyPreview.bytes;\n fields.bodyTruncated = bodyPreview.truncated;\n }\n\n cx.logger.info('Res', fields);\n });\n\n // * Start request handling\n try {\n if (normalized.url.pathname.startsWith(META_PREFIX + '/')) {\n safeSendJson(res, { message: `Meta APIs are available on port ${cx.options.metaPort}` }, HttpCode.NotFound);\n return;\n }\n\n const parsed = await parseBody(req, normalized.method, cx.options.maxRequestBytes);\n normalized.body = parsed.body;\n bodyPreview = parsed.preview;\n\n const handler = await cx.router.getHandler(url);\n if (!handler) {\n safeSendJson(res, { message: 'Not Found' }, HttpCode.NotFound);\n return;\n }\n\n const result = await PromiseTry(handler, normalized, req, res);\n\n if (result !== cx.router.StaticHandled) {\n safeSendJson(res, result);\n }\n } catch (error) {\n cx.logger.error('RequestFailed', {\n method: normalized.method,\n ip: normalized.ip,\n path: normalized.url.pathname,\n error: getErrorMessage(error),\n });\n\n if ((error as NodeJS.ErrnoException).code === 'REQUEST_BODY_TOO_LARGE') {\n safeSendJson(res, { message: getErrorMessage(error) }, HttpCode.PayloadTooLarge);\n } else {\n safeSendJson(res, { message: 'Internal Server Error' }, HttpCode.InternalServerError);\n }\n }\n });\n\n server.on('close', () => {\n cx.logger.info('ServerClosed', {\n host: cx.options.host,\n port: cx.options.port,\n });\n });\n\n server.listen(cx.options.port, cx.options.host, () => {\n cx.logger.info('ServerStarted', {\n pid: process.pid,\n host: cx.options.host,\n port: cx.options.port,\n });\n cx.logger.info('DynamicDirectory', { directory: cx.options.dir });\n });\n\n server.on('error', (error) => {\n cx.logger.error('ServerError', {\n error: getErrorMessage(error),\n });\n });\n\n return server;\n}\n","import type { PrimaryMessage } from './types.js';\nimport type { FluxionContext } from '../types.js';\nimport cluster from 'node:cluster';\n\nimport { getErrorMessage } from '@/common/logger.js';\nimport { loadFunction } from '@/common/injector.js';\nimport { PromiseTry } from '@/common/promise-try.js';\nimport { WorkerAction, PrimaryAction, isPrimaryMessage, INJECTION_KEY } from './consts.js';\nimport { sendToPrimary } from './communicate.js';\nimport { createWorkerServer } from './server.js';\n\nconst inject = async (cx: FluxionContext) => {\n const o = {} as any;\n Reflect.set(globalThis, INJECTION_KEY, o);\n for (let i = 0; i < cx.options.injections.length; i++) {\n const injection = cx.options.injections[i];\n const factory = loadFunction(injection);\n const instance = await PromiseTry(factory);\n o[injection.name] = instance;\n }\n cx.logger.info(`[worker ${process.pid}] injections loaded`, Object.keys(o));\n};\n\nconst startStatsReporter = () => {\n let previousCpuUsage = process.cpuUsage();\n let previousAt = Date.now();\n\n const interval = setInterval(() => {\n const now = Date.now();\n const elapsedMicros = Math.max(1, (now - previousAt) * 1000);\n const cpuDelta = process.cpuUsage(previousCpuUsage);\n const cpuPercent = Number((((cpuDelta.user + cpuDelta.system) / elapsedMicros) * 100).toFixed(2));\n\n previousCpuUsage = process.cpuUsage();\n previousAt = now;\n\n const memoryUsage = process.memoryUsage();\n sendToPrimary({\n type: WorkerAction.Stats,\n pid: process.pid,\n stats: {\n at: now,\n pid: process.pid,\n uptimeSeconds: Number(process.uptime().toFixed(3)),\n cpu: {\n userMicros: cpuDelta.user,\n systemMicros: cpuDelta.system,\n percent: cpuPercent,\n },\n memory: {\n rss: memoryUsage.rss,\n heapTotal: memoryUsage.heapTotal,\n heapUsed: memoryUsage.heapUsed,\n external: memoryUsage.external,\n arrayBuffers: memoryUsage.arrayBuffers,\n },\n },\n });\n }, 2000);\n\n interval.unref();\n};\n\nexport function initWorker(cx: FluxionContext) {\n if (cluster.isPrimary) {\n $throw('createWorker should only be called in worker process');\n }\n\n process.on('message', (raw: PrimaryMessage) => {\n if (!isPrimaryMessage(raw)) {\n return;\n }\n\n if (raw.type === PrimaryAction.Ping) {\n sendToPrimary({ type: WorkerAction.Pong, pid: process.pid, sentAt: raw.sentAt, receivedAt: Date.now() });\n return;\n }\n });\n\n sendToPrimary({ type: WorkerAction.Created, pid: process.pid });\n startStatsReporter();\n\n PromiseTry(async () => {\n await inject(cx);\n createWorkerServer(cx);\n sendToPrimary({ type: WorkerAction.Ready, pid: process.pid });\n }).catch((error) => {\n cx.logger.error('WorkerBootstrapFailed', {\n pid: process.pid,\n error: getErrorMessage(error),\n });\n process.exit(1);\n });\n}\n","import fs from 'node:fs';\nimport path from 'node:path';\nimport type { FluxionContext } from './types.js';\n\nexport class FluxionWatcher {\n // # Options\n private readonly cx: Pick<FluxionContext, 'options' | 'logger' | 'router'>;\n\n private timer: NodeJS.Timeout | null = null;\n private watcher: fs.FSWatcher | null = null;\n private readonly filesChanged: Set<string> = new Set();\n\n constructor(cx: Pick<FluxionContext, 'options' | 'logger' | 'router'>) {\n this.cx = cx;\n }\n\n /**\n * Recursively register all files in the options directory.\n */\n private init(): this {\n const dirPath = path.join(process.cwd(), this.cx.options.dir);\n\n const registerRecursive = (dir: string, relativePath: string) => {\n const entries = fs.readdirSync(dir, { withFileTypes: true });\n\n for (const entry of entries) {\n const entryPath = path.join(dir, entry.name);\n const entryRelativePath = path.join(relativePath, entry.name);\n\n if (entry.isDirectory()) {\n registerRecursive(entryPath, entryRelativePath);\n } else if (entry.isFile()) {\n try {\n this.cx.router.register(entryRelativePath);\n } catch (err) {\n this.cx.logger.error(`Error registering [${entryRelativePath}]: ${(err as Error).message}`);\n }\n }\n }\n };\n\n if (fs.existsSync(dirPath)) {\n registerRecursive(dirPath, '');\n this.cx.logger.info(`Initial registration complete for directory: ${this.cx.options.dir}`);\n } else {\n this.cx.logger.warn(`Directory does not exist: ${this.cx.options.dir}`);\n }\n\n return this;\n }\n\n /**\n * Since all actions are mapped to `rename` and `change` (WatchEventType).\n *\n * We could only record every file and reload them all.\n */\n start(): this {\n this.init();\n this.watcher = fs\n .watch(this.cx.options.dir, { recursive: true }, (_eventType, filename) => {\n if (!filename) {\n return;\n }\n\n this.filesChanged.add(filename);\n if (!this.timer) {\n this.timer = setTimeout(() => {\n this.filesChanged.forEach((p, _, s) => {\n try {\n this.cx.router.register(p);\n } catch (err) {\n this.cx.logger.error(`Error refreshing handlers: ${(err as Error).message}`);\n } finally {\n s.delete(p);\n }\n });\n\n this.timer = null;\n }, this.cx.options.reloadDelay);\n }\n })\n .on('error', (err) => {\n this.cx.logger.error(`Watcher error: ${err.message}`);\n this.cx.logger.error(`Restarting watcher...`);\n this.stop().start();\n });\n\n this.cx.logger.info(`Watcher started on directory: ${this.cx.options.dir}`);\n return this;\n }\n\n stop(): this {\n if (this.watcher) {\n this.watcher.close();\n this.watcher = null;\n }\n\n if (this.timer) {\n clearTimeout(this.timer);\n this.timer = null;\n }\n\n this.filesChanged.clear();\n return this;\n }\n}\n","import type { FluxionContext, FluxionHandler } from './types.js';\nimport { STATIC_CONTENT_TYPES } from '@/common/consts.js';\nimport { loadFunction } from '@/common/injector.js';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nexport class FluxionRouter {\n /**\n * This means the request has been handled by static resource handler, and no more response should be sent.\n */\n public readonly StaticHandled = Symbol.for('fluxion.router.StaticHandled');\n\n private readonly cx: Pick<FluxionContext, 'options' | 'logger'>;\n private readonly handlers: Map<string, FluxionHandler> = new Map();\n\n constructor(cx: Pick<FluxionContext, 'options' | 'logger'>) {\n this.cx = cx;\n }\n\n makeStaticResource(filepath: string): FluxionHandler {\n const fullPath = path.join(this.cx.options.dir, filepath);\n return async (normalized, _req, res) => {\n if (normalized.method !== 'GET' && normalized.method !== 'HEAD') {\n res.statusCode = 405;\n res.setHeader('Allow', 'GET, HEAD');\n res.end();\n return;\n }\n\n if (!fs.existsSync(fullPath)) {\n res.statusCode = 404;\n res.end('Not Found');\n return;\n }\n\n const stat = fs.statSync(fullPath);\n if (!stat.isFile()) {\n res.statusCode = 404;\n res.end('Not Found');\n return;\n }\n\n const extension = path.extname(filepath).toLowerCase();\n const contentType = STATIC_CONTENT_TYPES[extension] ?? 'application/octet-stream';\n\n res.statusCode = 200;\n res.setHeader('Content-Type', contentType);\n res.setHeader('Content-Length', String(stat.size));\n\n if (normalized.method === 'HEAD') {\n res.end();\n return;\n }\n\n return new Promise<symbol>((resolve, reject) => {\n const stream = fs.createReadStream(fullPath);\n stream.on('error', reject);\n stream.on('end', () => resolve(this.StaticHandled));\n stream.pipe(res);\n });\n };\n }\n\n /**\n * 1. Check if the path exists, if not, delete the handler;\n * 2. If the file extension matches `routerExclude`, delete it and return early;\n * 3. If the file extension matches `apiExts`, register it as an API, otherwise register as static resource;\n * @param filepath\n */\n register(filepath: string) {\n const fullpath = path.join(process.cwd(), this.cx.options.dir, filepath);\n if (!fs.existsSync(fullpath)) {\n this.handlers.delete(filepath);\n this.cx.logger.info(`[${filepath}] deleted`);\n return;\n }\n\n delete require.cache[fullpath];\n\n const extension = path.extname(filepath).toLowerCase();\n\n // Check if this file should be excluded from registration\n if (this.cx.options.routerExclude.some((ext) => extension === ext)) {\n this.handlers.delete(filepath);\n this.cx.logger.info(`[${filepath}] excluded`);\n return;\n }\n\n // register as api\n // ! Files with extensions matching `apiExts` are considered as API handlers.\n if (this.cx.options.apiExts.some((ext) => extension === ext)) {\n const handler = loadFunction({ name: fullpath, modulePath: fullpath });\n this.handlers.set(filepath, handler);\n this.cx.logger.info(`[${filepath}] handler registered`);\n return;\n }\n\n // register as static resource\n this.handlers.set(filepath, this.makeStaticResource(filepath));\n this.cx.logger.info(`[${filepath}] static resource registered`);\n }\n\n getHandler(url: URL): FluxionHandler | undefined {\n const relativePath = url.pathname.replace(/^[\\/]+/, '').replace(/[\\/]+$/, '');\n return this.handlers.get(relativePath);\n }\n}\n","import type { FluxionContext, FluxionOptions } from './types.js';\n\nimport { createLogger } from '@/common/logger.js';\nimport { normalizeOptions } from './utils/options.js';\nimport cluster from 'node:cluster';\nimport { initPrimary } from './cluster/primary.js';\nimport { initWorker } from './cluster/worker.js';\nimport { FluxionWatcher } from './watch.js';\nimport { FluxionRouter } from './router.js';\n\nexport async function fluxion(options: FluxionOptions) {\n const context: FluxionContext = {\n options: normalizeOptions(options),\n } as FluxionContext;\n\n context.logger = createLogger(context as Pick<FluxionContext, 'options'>);\n context.router = new FluxionRouter(context as Pick<FluxionContext, 'options' | 'logger'>);\n\n if (cluster.isPrimary) {\n initPrimary(context);\n } else {\n // Only worker creates the watcher\n context.watcher = new FluxionWatcher(context as Pick<FluxionContext, 'options' | 'logger' | 'router'>).start();\n initWorker(context);\n }\n}\n","import type { FluxionHandler, FluxionOptions } from './core/types.js';\nimport { fluxion } from './core/fluxion.js';\n\nexport { fluxion, type FluxionOptions as FluxionOptions };\n\nexport function defineFluxionHandler(handler: FluxionHandler) {\n return handler;\n}\n\nif (process.env.NODE_ENV !== 'production') {\n globalThis.$throw = (message: string) => {\n throw new Error('[fluxion error]' + message);\n };\n\n const int = (n: string | undefined, defaultValue: number): number => {\n if (n === undefined) {\n return defaultValue;\n }\n const parsed = Number.parseInt(n, 10);\n if (Number.isNaN(parsed)) {\n return defaultValue;\n }\n return parsed;\n };\n\n fluxion({\n dir: process.env.DYNAMIC_DIRECTORY ?? 'dynamicDirectory',\n host: process.env.HOST ?? 'localhost',\n port: int(process.env.PORT, 9000),\n metaPort: int(process.env.META_PORT, 9001),\n reloadDelay: process.env.RELOAD_DELAY ? Number.parseInt(process.env.RELOAD_DELAY, 10) : undefined,\n workerOptions: {\n maxWorkerCount: 1,\n },\n });\n}\n"],"names":["styles"],"mappings":"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","x_google_ignoreList":[0,1,2,3]}
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/vendor/ansi-styles/index.js","../node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/vendor/supports-color/browser.js","../node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/utilities.js","../node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/index.js","../../src/common/dtm.ts","../../src/common/native.ts","../../src/common/injector.ts","../../src/common/logger.ts","../../src/common/expect.ts","../../src/core/utils/options.ts","../../src/core/cluster/consts.ts","../../src/core/cluster/communicate.ts","../../src/common/consts.ts","../../src/core/utils/respond.ts","../../src/core/cluster/meta-api.ts","../../src/core/cluster/primary.ts","../../src/common/promise-try.ts","../../src/core/utils/headers.ts","../../src/core/utils/request.ts","../../src/core/utils/query.ts","../../src/core/utils/body.ts","../../src/core/utils/cookie.ts","../../src/core/cluster/server.ts","../../src/core/cluster/worker.ts","../../src/core/watch.ts","../../src/core/router.ts","../../src/core/fluxion.ts","../../src/index.ts"],"sourcesContent":["const ANSI_BACKGROUND_OFFSET = 10;\n\nconst wrapAnsi16 = (offset = 0) => code => `\\u001B[${code + offset}m`;\n\nconst wrapAnsi256 = (offset = 0) => code => `\\u001B[${38 + offset};5;${code}m`;\n\nconst wrapAnsi16m = (offset = 0) => (red, green, blue) => `\\u001B[${38 + offset};2;${red};${green};${blue}m`;\n\nconst styles = {\n\tmodifier: {\n\t\treset: [0, 0],\n\t\t// 21 isn't widely supported and 22 does the same thing\n\t\tbold: [1, 22],\n\t\tdim: [2, 22],\n\t\titalic: [3, 23],\n\t\tunderline: [4, 24],\n\t\toverline: [53, 55],\n\t\tinverse: [7, 27],\n\t\thidden: [8, 28],\n\t\tstrikethrough: [9, 29],\n\t},\n\tcolor: {\n\t\tblack: [30, 39],\n\t\tred: [31, 39],\n\t\tgreen: [32, 39],\n\t\tyellow: [33, 39],\n\t\tblue: [34, 39],\n\t\tmagenta: [35, 39],\n\t\tcyan: [36, 39],\n\t\twhite: [37, 39],\n\n\t\t// Bright color\n\t\tblackBright: [90, 39],\n\t\tgray: [90, 39], // Alias of `blackBright`\n\t\tgrey: [90, 39], // Alias of `blackBright`\n\t\tredBright: [91, 39],\n\t\tgreenBright: [92, 39],\n\t\tyellowBright: [93, 39],\n\t\tblueBright: [94, 39],\n\t\tmagentaBright: [95, 39],\n\t\tcyanBright: [96, 39],\n\t\twhiteBright: [97, 39],\n\t},\n\tbgColor: {\n\t\tbgBlack: [40, 49],\n\t\tbgRed: [41, 49],\n\t\tbgGreen: [42, 49],\n\t\tbgYellow: [43, 49],\n\t\tbgBlue: [44, 49],\n\t\tbgMagenta: [45, 49],\n\t\tbgCyan: [46, 49],\n\t\tbgWhite: [47, 49],\n\n\t\t// Bright color\n\t\tbgBlackBright: [100, 49],\n\t\tbgGray: [100, 49], // Alias of `bgBlackBright`\n\t\tbgGrey: [100, 49], // Alias of `bgBlackBright`\n\t\tbgRedBright: [101, 49],\n\t\tbgGreenBright: [102, 49],\n\t\tbgYellowBright: [103, 49],\n\t\tbgBlueBright: [104, 49],\n\t\tbgMagentaBright: [105, 49],\n\t\tbgCyanBright: [106, 49],\n\t\tbgWhiteBright: [107, 49],\n\t},\n};\n\nexport const modifierNames = Object.keys(styles.modifier);\nexport const foregroundColorNames = Object.keys(styles.color);\nexport const backgroundColorNames = Object.keys(styles.bgColor);\nexport const colorNames = [...foregroundColorNames, ...backgroundColorNames];\n\nfunction assembleStyles() {\n\tconst codes = new Map();\n\n\tfor (const [groupName, group] of Object.entries(styles)) {\n\t\tfor (const [styleName, style] of Object.entries(group)) {\n\t\t\tstyles[styleName] = {\n\t\t\t\topen: `\\u001B[${style[0]}m`,\n\t\t\t\tclose: `\\u001B[${style[1]}m`,\n\t\t\t};\n\n\t\t\tgroup[styleName] = styles[styleName];\n\n\t\t\tcodes.set(style[0], style[1]);\n\t\t}\n\n\t\tObject.defineProperty(styles, groupName, {\n\t\t\tvalue: group,\n\t\t\tenumerable: false,\n\t\t});\n\t}\n\n\tObject.defineProperty(styles, 'codes', {\n\t\tvalue: codes,\n\t\tenumerable: false,\n\t});\n\n\tstyles.color.close = '\\u001B[39m';\n\tstyles.bgColor.close = '\\u001B[49m';\n\n\tstyles.color.ansi = wrapAnsi16();\n\tstyles.color.ansi256 = wrapAnsi256();\n\tstyles.color.ansi16m = wrapAnsi16m();\n\tstyles.bgColor.ansi = wrapAnsi16(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi256 = wrapAnsi256(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET);\n\n\t// From https://github.com/Qix-/color-convert/blob/3f0e0d4e92e235796ccb17f6e85c72094a651f49/conversions.js\n\tObject.defineProperties(styles, {\n\t\trgbToAnsi256: {\n\t\t\tvalue(red, green, blue) {\n\t\t\t\t// We use the extended greyscale palette here, with the exception of\n\t\t\t\t// black and white. normal palette only has 4 greyscale shades.\n\t\t\t\tif (red === green && green === blue) {\n\t\t\t\t\tif (red < 8) {\n\t\t\t\t\t\treturn 16;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (red > 248) {\n\t\t\t\t\t\treturn 231;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Math.round(((red - 8) / 247) * 24) + 232;\n\t\t\t\t}\n\n\t\t\t\treturn 16\n\t\t\t\t\t+ (36 * Math.round(red / 255 * 5))\n\t\t\t\t\t+ (6 * Math.round(green / 255 * 5))\n\t\t\t\t\t+ Math.round(blue / 255 * 5);\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToRgb: {\n\t\t\tvalue(hex) {\n\t\t\t\tconst matches = /[a-f\\d]{6}|[a-f\\d]{3}/i.exec(hex.toString(16));\n\t\t\t\tif (!matches) {\n\t\t\t\t\treturn [0, 0, 0];\n\t\t\t\t}\n\n\t\t\t\tlet [colorString] = matches;\n\n\t\t\t\tif (colorString.length === 3) {\n\t\t\t\t\tcolorString = [...colorString].map(character => character + character).join('');\n\t\t\t\t}\n\n\t\t\t\tconst integer = Number.parseInt(colorString, 16);\n\n\t\t\t\treturn [\n\t\t\t\t\t/* eslint-disable no-bitwise */\n\t\t\t\t\t(integer >> 16) & 0xFF,\n\t\t\t\t\t(integer >> 8) & 0xFF,\n\t\t\t\t\tinteger & 0xFF,\n\t\t\t\t\t/* eslint-enable no-bitwise */\n\t\t\t\t];\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi256: {\n\t\t\tvalue: hex => styles.rgbToAnsi256(...styles.hexToRgb(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t\tansi256ToAnsi: {\n\t\t\tvalue(code) {\n\t\t\t\tif (code < 8) {\n\t\t\t\t\treturn 30 + code;\n\t\t\t\t}\n\n\t\t\t\tif (code < 16) {\n\t\t\t\t\treturn 90 + (code - 8);\n\t\t\t\t}\n\n\t\t\t\tlet red;\n\t\t\t\tlet green;\n\t\t\t\tlet blue;\n\n\t\t\t\tif (code >= 232) {\n\t\t\t\t\tred = (((code - 232) * 10) + 8) / 255;\n\t\t\t\t\tgreen = red;\n\t\t\t\t\tblue = red;\n\t\t\t\t} else {\n\t\t\t\t\tcode -= 16;\n\n\t\t\t\t\tconst remainder = code % 36;\n\n\t\t\t\t\tred = Math.floor(code / 36) / 5;\n\t\t\t\t\tgreen = Math.floor(remainder / 6) / 5;\n\t\t\t\t\tblue = (remainder % 6) / 5;\n\t\t\t\t}\n\n\t\t\t\tconst value = Math.max(red, green, blue) * 2;\n\n\t\t\t\tif (value === 0) {\n\t\t\t\t\treturn 30;\n\t\t\t\t}\n\n\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\tlet result = 30 + ((Math.round(blue) << 2) | (Math.round(green) << 1) | Math.round(red));\n\n\t\t\t\tif (value === 2) {\n\t\t\t\t\tresult += 60;\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\trgbToAnsi: {\n\t\t\tvalue: (red, green, blue) => styles.ansi256ToAnsi(styles.rgbToAnsi256(red, green, blue)),\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi: {\n\t\t\tvalue: hex => styles.ansi256ToAnsi(styles.hexToAnsi256(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t});\n\n\treturn styles;\n}\n\nconst ansiStyles = assembleStyles();\n\nexport default ansiStyles;\n","/* eslint-env browser */\n\nconst level = (() => {\n\tif (!('navigator' in globalThis)) {\n\t\treturn 0;\n\t}\n\n\tif (globalThis.navigator.userAgentData) {\n\t\tconst brand = navigator.userAgentData.brands.find(({brand}) => brand === 'Chromium');\n\t\tif (brand && brand.version > 93) {\n\t\t\treturn 3;\n\t\t}\n\t}\n\n\tif (/\\b(Chrome|Chromium)\\//.test(globalThis.navigator.userAgent)) {\n\t\treturn 1;\n\t}\n\n\treturn 0;\n})();\n\nconst colorSupport = level !== 0 && {\n\tlevel,\n\thasBasic: true,\n\thas256: level >= 2,\n\thas16m: level >= 3,\n};\n\nconst supportsColor = {\n\tstdout: colorSupport,\n\tstderr: colorSupport,\n};\n\nexport default supportsColor;\n","// TODO: When targeting Node.js 16, use `String.prototype.replaceAll`.\nexport function stringReplaceAll(string, substring, replacer) {\n\tlet index = string.indexOf(substring);\n\tif (index === -1) {\n\t\treturn string;\n\t}\n\n\tconst substringLength = substring.length;\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\treturnValue += string.slice(endIndex, index) + substring + replacer;\n\t\tendIndex = index + substringLength;\n\t\tindex = string.indexOf(substring, endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.slice(endIndex);\n\treturn returnValue;\n}\n\nexport function stringEncaseCRLFWithFirstIndex(string, prefix, postfix, index) {\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\tconst gotCR = string[index - 1] === '\\r';\n\t\treturnValue += string.slice(endIndex, (gotCR ? index - 1 : index)) + prefix + (gotCR ? '\\r\\n' : '\\n') + postfix;\n\t\tendIndex = index + 1;\n\t\tindex = string.indexOf('\\n', endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.slice(endIndex);\n\treturn returnValue;\n}\n","import ansiStyles from '#ansi-styles';\nimport supportsColor from '#supports-color';\nimport { // eslint-disable-line import/order\n\tstringReplaceAll,\n\tstringEncaseCRLFWithFirstIndex,\n} from './utilities.js';\n\nconst {stdout: stdoutColor, stderr: stderrColor} = supportsColor;\n\nconst GENERATOR = Symbol('GENERATOR');\nconst STYLER = Symbol('STYLER');\nconst IS_EMPTY = Symbol('IS_EMPTY');\n\n// `supportsColor.level` → `ansiStyles.color[name]` mapping\nconst levelMapping = [\n\t'ansi',\n\t'ansi',\n\t'ansi256',\n\t'ansi16m',\n];\n\nconst styles = Object.create(null);\n\nconst applyOptions = (object, options = {}) => {\n\tif (options.level && !(Number.isInteger(options.level) && options.level >= 0 && options.level <= 3)) {\n\t\tthrow new Error('The `level` option should be an integer from 0 to 3');\n\t}\n\n\t// Detect level if not set manually\n\tconst colorLevel = stdoutColor ? stdoutColor.level : 0;\n\tobject.level = options.level === undefined ? colorLevel : options.level;\n};\n\nexport class Chalk {\n\tconstructor(options) {\n\t\t// eslint-disable-next-line no-constructor-return\n\t\treturn chalkFactory(options);\n\t}\n}\n\nconst chalkFactory = options => {\n\tconst chalk = (...strings) => strings.join(' ');\n\tapplyOptions(chalk, options);\n\n\tObject.setPrototypeOf(chalk, createChalk.prototype);\n\n\treturn chalk;\n};\n\nfunction createChalk(options) {\n\treturn chalkFactory(options);\n}\n\nObject.setPrototypeOf(createChalk.prototype, Function.prototype);\n\nfor (const [styleName, style] of Object.entries(ansiStyles)) {\n\tstyles[styleName] = {\n\t\tget() {\n\t\t\tconst builder = createBuilder(this, createStyler(style.open, style.close, this[STYLER]), this[IS_EMPTY]);\n\t\t\tObject.defineProperty(this, styleName, {value: builder});\n\t\t\treturn builder;\n\t\t},\n\t};\n}\n\nstyles.visible = {\n\tget() {\n\t\tconst builder = createBuilder(this, this[STYLER], true);\n\t\tObject.defineProperty(this, 'visible', {value: builder});\n\t\treturn builder;\n\t},\n};\n\nconst getModelAnsi = (model, level, type, ...arguments_) => {\n\tif (model === 'rgb') {\n\t\tif (level === 'ansi16m') {\n\t\t\treturn ansiStyles[type].ansi16m(...arguments_);\n\t\t}\n\n\t\tif (level === 'ansi256') {\n\t\t\treturn ansiStyles[type].ansi256(ansiStyles.rgbToAnsi256(...arguments_));\n\t\t}\n\n\t\treturn ansiStyles[type].ansi(ansiStyles.rgbToAnsi(...arguments_));\n\t}\n\n\tif (model === 'hex') {\n\t\treturn getModelAnsi('rgb', level, type, ...ansiStyles.hexToRgb(...arguments_));\n\t}\n\n\treturn ansiStyles[type][model](...arguments_);\n};\n\nconst usedModels = ['rgb', 'hex', 'ansi256'];\n\nfor (const model of usedModels) {\n\tstyles[model] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(getModelAnsi(model, levelMapping[level], 'color', ...arguments_), ansiStyles.color.close, this[STYLER]);\n\t\t\t\treturn createBuilder(this, styler, this[IS_EMPTY]);\n\t\t\t};\n\t\t},\n\t};\n\n\tconst bgModel = 'bg' + model[0].toUpperCase() + model.slice(1);\n\tstyles[bgModel] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(getModelAnsi(model, levelMapping[level], 'bgColor', ...arguments_), ansiStyles.bgColor.close, this[STYLER]);\n\t\t\t\treturn createBuilder(this, styler, this[IS_EMPTY]);\n\t\t\t};\n\t\t},\n\t};\n}\n\nconst proto = Object.defineProperties(() => {}, {\n\t...styles,\n\tlevel: {\n\t\tenumerable: true,\n\t\tget() {\n\t\t\treturn this[GENERATOR].level;\n\t\t},\n\t\tset(level) {\n\t\t\tthis[GENERATOR].level = level;\n\t\t},\n\t},\n});\n\nconst createStyler = (open, close, parent) => {\n\tlet openAll;\n\tlet closeAll;\n\tif (parent === undefined) {\n\t\topenAll = open;\n\t\tcloseAll = close;\n\t} else {\n\t\topenAll = parent.openAll + open;\n\t\tcloseAll = close + parent.closeAll;\n\t}\n\n\treturn {\n\t\topen,\n\t\tclose,\n\t\topenAll,\n\t\tcloseAll,\n\t\tparent,\n\t};\n};\n\nconst createBuilder = (self, _styler, _isEmpty) => {\n\t// Single argument is hot path, implicit coercion is faster than anything\n\t// eslint-disable-next-line no-implicit-coercion\n\tconst builder = (...arguments_) => applyStyle(builder, (arguments_.length === 1) ? ('' + arguments_[0]) : arguments_.join(' '));\n\n\t// We alter the prototype because we must return a function, but there is\n\t// no way to create a function with a different prototype\n\tObject.setPrototypeOf(builder, proto);\n\n\tbuilder[GENERATOR] = self;\n\tbuilder[STYLER] = _styler;\n\tbuilder[IS_EMPTY] = _isEmpty;\n\n\treturn builder;\n};\n\nconst applyStyle = (self, string) => {\n\tif (self.level <= 0 || !string) {\n\t\treturn self[IS_EMPTY] ? '' : string;\n\t}\n\n\tlet styler = self[STYLER];\n\n\tif (styler === undefined) {\n\t\treturn string;\n\t}\n\n\tconst {openAll, closeAll} = styler;\n\tif (string.includes('\\u001B')) {\n\t\twhile (styler !== undefined) {\n\t\t\t// Replace any instances already present with a re-opening code\n\t\t\t// otherwise only the part of the string until said closing code\n\t\t\t// will be colored, and the rest will simply be 'plain'.\n\t\t\tstring = stringReplaceAll(string, styler.close, styler.open);\n\n\t\t\tstyler = styler.parent;\n\t\t}\n\t}\n\n\t// We can move both next actions out of loop, because remaining actions in loop won't have\n\t// any/visible effect on parts we add here. Close the styling before a linebreak and reopen\n\t// after next line to fix a bleed issue on macOS: https://github.com/chalk/chalk/pull/92\n\tconst lfIndex = string.indexOf('\\n');\n\tif (lfIndex !== -1) {\n\t\tstring = stringEncaseCRLFWithFirstIndex(string, closeAll, openAll, lfIndex);\n\t}\n\n\treturn openAll + string + closeAll;\n};\n\nObject.defineProperties(createChalk.prototype, styles);\n\nconst chalk = createChalk();\nexport const chalkStderr = createChalk({level: stderrColor ? stderrColor.level : 0});\n\nexport {\n\tmodifierNames,\n\tforegroundColorNames,\n\tbackgroundColorNames,\n\tcolorNames,\n\n\t// TODO: Remove these aliases in the next major version\n\tmodifierNames as modifiers,\n\tforegroundColorNames as foregroundColors,\n\tbackgroundColorNames as backgroundColors,\n\tcolorNames as colors,\n} from './vendor/ansi-styles/index.js';\n\nexport {\n\tstdoutColor as supportsColor,\n\tstderrColor as supportsColorStderr,\n};\n\nexport default chalk;\n","export function dtm(dt = new Date()) {\n const y = dt.getFullYear();\n const m = String(dt.getMonth() + 1).padStart(2, '0');\n const d = String(dt.getDate()).padStart(2, '0');\n const hh = String(dt.getHours()).padStart(2, '0');\n const mm = String(dt.getMinutes()).padStart(2, '0');\n const ss = String(dt.getSeconds()).padStart(2, '0');\n const ms = String(dt.getMilliseconds()).padStart(3, '0');\n return `${y}.${m}.${d} ${hh}:${mm}:${ss}.${ms}`;\n}\n","export const $stringify = JSON.stringify;\n\nexport const $keys = Object.keys;\n","import type { InjectionConfig } from '@/common/types.js';\n\nexport function loadFunction(injectionConfig: InjectionConfig): (...args: any[]) => any {\n const m = require(injectionConfig.modulePath);\n if (typeof m === 'function') {\n return m;\n } else if (typeof m.default === 'function') {\n return m.default;\n } else if (typeof m.handler === 'function') {\n return m.handler;\n } else {\n $throw(\n `Invalid handler module '${injectionConfig.modulePath}', make sure it has a default export or named export called \"handler\" which is a function`,\n );\n }\n}\n","import chalk from 'chalk';\nimport type { otherstring, InjectionConfig } from '@/common/types.js';\nimport type { FluxionContext } from '@/core/types.js';\n\nimport { dtm } from './dtm.js';\nimport { $keys, $stringify } from './native.js';\nimport { loadFunction } from './injector.js';\n\ntype LogLevel = 'INFO' | 'WARN' | 'ERROR' | 'SUCC' | 'DEBUG' | 'VERBOSE' | otherstring;\n\ninterface LogEntry {\n timestamp: string;\n level: LogLevel;\n event: string;\n message?: string;\n [key: string]: unknown;\n}\n\ntype LoggerSink = (entry: LogEntry) => void;\n\nexport type LoggerOption = 'one-line' | 'json-line' | InjectionConfig;\n\nexport interface FluxionLogger {\n /**\n * [WARN] We assert that `fields` is an object or undefined.\n */\n write(level: LogLevel, event: string, fields?: object): void;\n info(event: string, fields?: object): void;\n warn(event: string, fields?: object): void;\n error(event: string, fields?: object): void;\n succ(event: string, fields?: object): void;\n debug(event: string, fields?: object): void;\n verbose(event: string, fields?: object): void;\n}\n\nconst safeStringify = (value: unknown): string => {\n try {\n return $stringify(value);\n } catch {\n return '[unserializable]';\n }\n};\n\nconst ColoredLevels: Record<LogLevel, string> = {\n INFO: chalk.hex('#0386e3')('INFO'),\n WARN: chalk.hex('#fb923c')('WARN'),\n ERROR: chalk.hex('#ef4444')('ERROR'),\n SUCC: chalk.hex('#22c55e')('SUCC'),\n DEBUG: chalk.hex('#d327e0')('DEBUG'),\n VERBOSE: chalk.hex('#36ffeb')('SUCC'),\n};\nconst TimestampColor = chalk.hex('#166534');\n\nexport const oneLineLogger: LoggerSink = (entry: LogEntry) => {\n const { level: rawLevel, timestamp: rawTimestamp, event: rawEvent, message: rawMessage, ...fields } = entry;\n\n const timestamp = TimestampColor(`[${rawTimestamp}]`);\n const level = ColoredLevels[rawLevel] ?? rawLevel;\n const body = rawMessage ?? rawEvent;\n const fieldsText = $keys(fields).length > 0 ? ` ${chalk.dim(safeStringify(fields))}` : '';\n\n console.log(`${timestamp} ${level} ${body}${fieldsText}`);\n};\n\n/**\n * & Logger Options here is checked by normalizeOptions function.\n */\nfunction resolveLoggerSink(cx: Pick<FluxionContext, 'options'>): LoggerSink {\n const loggerOption = cx.options.logger;\n if (loggerOption === undefined || loggerOption === 'one-line') {\n return oneLineLogger;\n }\n\n if (loggerOption === 'json-line') {\n return (entry: LogEntry) => console.log(safeStringify(entry));\n }\n\n return loadFunction(loggerOption) as LoggerSink;\n}\n\nexport function createLogger(cx: Pick<FluxionContext, 'options'>): FluxionLogger {\n const sink = resolveLoggerSink(cx);\n\n const logger: FluxionLogger = {\n write(level: LogLevel, event: string, fields: Record<string, unknown> = {}): void {\n const entry: LogEntry = {\n ...fields,\n timestamp: dtm(),\n level,\n event,\n };\n\n try {\n sink(entry);\n } catch {\n // Ignore logger sink failures to avoid breaking request handling.\n }\n },\n info(event: string, fields?: Record<string, unknown>): void {\n this.write('INFO', event, fields);\n },\n warn(event: string, fields?: Record<string, unknown>): void {\n this.write('WARN', event, fields);\n },\n error(event: string, fields?: Record<string, unknown>): void {\n this.write('ERROR', event, fields);\n },\n succ(event: string, fields?: Record<string, unknown>): void {\n this.write('SUCC', event, fields);\n },\n debug(event: string, fields?: Record<string, unknown>): void {\n this.write('DEBUG', event, fields);\n },\n verbose(event: string, fields?: Record<string, unknown>): void {\n this.write('VERBOSE', event, fields);\n },\n };\n\n return logger;\n}\n\n/**\n * ! Error.isError needs Node.js 24\n */\nexport const getErrorMessage = (error: unknown): string =>\n typeof error === 'object' && error !== null ? (error as any).message : String(error);\n","export namespace whether {\n export const isObject = (value: unknown): value is Record<string, unknown> => {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n };\n}\n\nexport namespace expect {\n export function isObject<T = Record<string, unknown>>(o: unknown, message: string): asserts o is T {\n if (typeof o !== 'object' || o === null) {\n $throw(message);\n }\n }\n\n export function isString(s: unknown, message: string): asserts s is string {\n if (typeof s !== 'string') {\n $throw(message);\n }\n }\n\n export function isNumber(n: unknown, message: string): asserts n is number {\n if (typeof n !== 'number') {\n $throw(message);\n }\n }\n\n export function isPositiveInteger(n: unknown, message: string): asserts n is number {\n if (typeof n !== 'number' || n <= 0 || !Number.isSafeInteger(n)) {\n $throw(message);\n }\n }\n\n export function isObjectArray<T = Record<string, unknown>>(arr: unknown, message: string): asserts arr is T[] {\n if (!Array.isArray(arr) || arr.some((item) => typeof item !== 'object' || item === null)) {\n $throw(message);\n }\n }\n}\n","import fs, { existsSync } from 'node:fs';\nimport type { LoggerOption } from '@/common/logger.js';\nimport type { InjectionConfig } from '@/common/types.js';\nimport { expect } from '@/common/expect.js';\n\nimport type { WorkerOptions, FluxionOptions, NormalizedFluxionOptions } from '../types.js';\n\n/**\n * Resolves runtime options with framework defaults.\n */\nfunction resolveWorkerOptions(options: Partial<WorkerOptions>): WorkerOptions {\n return {\n maxWorkerCount: options.maxWorkerCount ?? 4,\n requestTimeoutMs: options.requestTimeoutMs ?? 3000,\n maxInflight: options.maxInflight ?? 64,\n memorySoftLimitMb: options.memorySoftLimitMb ?? 96,\n memoryHardLimitMb: options.memoryHardLimitMb ?? 128,\n memorySampleIntervalMs: options.memorySampleIntervalMs ?? 5000,\n maxOldGenerationSizeMb: options.maxOldGenerationSizeMb ?? 128,\n maxYoungGenerationSizeMb: options.maxYoungGenerationSizeMb ?? 32,\n stackSizeMb: options.stackSizeMb ?? 4,\n maxResponseBytes: options.maxResponseBytes ?? 2 * 1024 * 1024,\n };\n}\n\nfunction expectLoggerOption(o: InjectionConfig | LoggerOption) {\n if (o === 'one-line' || o === 'json-line') {\n return;\n }\n if (typeof o === 'object' && o !== null && typeof o.modulePath === 'string' && typeof o.name === 'string') {\n return;\n }\n $throw(`Invalid logger option, must be 'one-line', 'json-line' or { modulePath: string; name: string; }`);\n}\n\n/**\n * Normalize options and create necessary resources like the dynamic directory and logger.\n */\nexport function normalizeOptions(options: FluxionOptions): NormalizedFluxionOptions {\n expect.isObject(options, 'FluxionOptions must be an object');\n\n let {\n dir,\n host,\n port,\n metaPort,\n injections = [],\n moduleDir = process.cwd(),\n workerOptions = {},\n maxRequestBytes = 8_000_000,\n reloadDelay = 300,\n apiExts = ['.ts'],\n routerExclude = [],\n } = options as FluxionOptions;\n const logger = options.logger ?? 'one-line';\n expectLoggerOption(logger);\n\n expect.isString(dir, 'FluxionOptions.dir must be a string');\n\n expect.isString(moduleDir, 'FluxionOptions.moduleDir must be a string');\n\n expect.isString(host, 'FluxionOptions.host must be a string');\n\n expect.isPositiveInteger(reloadDelay, 'FluxionOptions.reloadDelay must be a positive integer');\n if (reloadDelay < 50) {\n $throw('FluxionOptions.reloadDelay must be greater than or equal to 50');\n }\n\n expect.isPositiveInteger(port, 'FluxionOptions.port must be a positive integer');\n if (port > 65535) {\n $throw('FluxionOptions.port must be less than or equal to 65535');\n }\n metaPort ??= port + 1;\n expect.isPositiveInteger(metaPort, 'FluxionOptions.metaPort must be a positive integer');\n if (metaPort > 65535) {\n $throw('FluxionOptions.metaPort must be less than or equal to 65535');\n }\n if (metaPort === port) {\n $throw('FluxionOptions.metaPort must be different from FluxionOptions.port');\n }\n expect.isObjectArray<InjectionConfig>(injections, 'FluxionOptions.injections must be an array of objects');\n expect.isObject(workerOptions, 'FluxionOptions.workerOptions must be an object');\n expect.isPositiveInteger(maxRequestBytes, 'FluxionOptions.maxRequestBytes must be a positive integer');\n\n if (!existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n\n return {\n dir,\n host,\n port,\n reloadDelay,\n metaPort,\n injections,\n moduleDir,\n workerOptions: resolveWorkerOptions(workerOptions),\n maxRequestBytes,\n logger,\n apiExts,\n routerExclude,\n };\n}\n","import type { PrimaryMessage as PrimaryMessage, WorkerMessage as WorkerMessage } from './types.js';\n\nexport const INJECTION_KEY = Symbol.for('fluxion.injection');\n\nexport const enum PrimaryAction {\n /**\n * Health check message, the worker should respond with Pong and the latency information\n */\n Ping = 100,\n}\n\nexport const enum WorkerAction {\n /**\n * Just created\n */\n Created = 200,\n\n /**\n * Ready for tasks\n * - fluxion options are injected\n */\n Ready,\n\n /**\n * Response to Ping, used for health check and latency measurement\n */\n Pong,\n\n /**\n * Runtime telemetry snapshot from worker process.\n */\n Stats,\n}\n\nexport const isPrimaryMessage = (v: PrimaryMessage): v is PrimaryMessage => [PrimaryAction.Ping].includes(v?.type);\n\nexport const isWorkerMessage = (v: WorkerMessage): v is WorkerMessage =>\n [WorkerAction.Pong, WorkerAction.Created, WorkerAction.Ready, WorkerAction.Stats].includes(v?.type);\n","import type cluster from 'node:cluster';\nimport type { PrimaryMessage, WorkerMessage } from './types.js';\n\nexport const sendToPrimary = (message: WorkerMessage) => process.send?.(message);\n\nexport const sendToWorker = (worker: cluster.Worker, message: PrimaryMessage) => worker.send(message);\n","export const DUMMY_BASE_URL = 'http://fluxion.local';\nexport const META_PREFIX = '/_fluxion';\n\nexport const STATIC_CONTENT_TYPES: Record<string, string> = {\n '.css': 'text/css; charset=utf-8',\n '.html': 'text/html; charset=utf-8',\n '.ico': 'image/x-icon',\n '.js': 'text/javascript; charset=utf-8',\n '.json': 'application/json; charset=utf-8',\n '.map': 'application/json; charset=utf-8',\n '.png': 'image/png',\n '.jpg': 'image/jpeg',\n '.jpeg': 'image/jpeg',\n '.svg': 'image/svg+xml',\n '.txt': 'text/plain; charset=utf-8',\n '.webp': 'image/webp',\n};\n\nexport const enum HttpCode {\n Ok = 200,\n BadRequest = 400,\n PayloadTooLarge = 413,\n NotFound = 404,\n InternalServerError = 500,\n}\n\nexport const enum HandlerResult {\n NotFound,\n Handled,\n}\n","import type { ServerResponse } from 'node:http';\nimport { HttpCode } from '@/common/consts.js';\n\nexport function sendJson(res: ServerResponse, payload: unknown, statusCode: HttpCode = HttpCode.Ok): void {\n res.statusCode = statusCode;\n res.setHeader('Content-Type', 'application/json; charset=utf-8');\n res.end(JSON.stringify(payload));\n}\n\nexport function safeSendJson(res: ServerResponse, payload: unknown, statusCode: HttpCode = HttpCode.Ok): void {\n if (res.writableEnded) {\n return;\n }\n\n if (res.headersSent) {\n res.end();\n return;\n }\n\n sendJson(res, payload, statusCode);\n}\n","import http from 'node:http';\n\nimport { getErrorMessage } from '@/common/logger.js';\nimport { HttpCode, META_PREFIX } from '@/common/consts.js';\nimport { sendJson } from '../utils/respond.js';\nimport { FluxionContext } from '../types.js';\n\nexport function createPrimaryMetaApiServer(\n cx: Pick<FluxionContext, 'logger' | 'options' | 'router'>,\n getWorkersSnapshot: () => unknown,\n): http.Server {\n const server = http.createServer((req, res) => {\n const method = req.method ?? 'GET';\n\n let pathname = '/';\n try {\n pathname = new URL(req.url ?? '/', 'http://fluxion.local').pathname;\n } catch {\n sendJson(res, { message: 'Bad Request: invalid url' }, HttpCode.BadRequest);\n return;\n }\n\n if (method === 'GET' && pathname === META_PREFIX + '/healthz') {\n sendJson(res, {\n ok: true,\n role: 'primary',\n pid: process.pid,\n now: Date.now(),\n uptimeSeconds: Number(process.uptime().toFixed(3)),\n });\n return;\n }\n\n if (method === 'GET' && pathname === META_PREFIX + '/workers') {\n sendJson(res, {\n ok: true,\n now: Date.now(),\n workers: getWorkersSnapshot(),\n });\n return;\n }\n\n sendJson(res, { message: 'Not Found' }, HttpCode.NotFound);\n });\n\n server.on('listening', () => {\n cx.logger.info('MetaApiStarted', {\n pid: process.pid,\n host: cx.options.host,\n port: cx.options.metaPort,\n prefix: META_PREFIX,\n });\n });\n\n server.on('error', (error) => {\n cx.logger.error('MetaApiError', {\n host: cx.options.host,\n port: cx.options.metaPort,\n error: getErrorMessage(error),\n });\n process.exit(1);\n });\n\n server.listen(cx.options.metaPort, cx.options.host);\n return server;\n}\n","import type { WorkerMessage, WorkerState } from './types.js';\nimport type { FluxionContext } from '../types.js';\nimport os from 'node:os';\nimport cluster from 'node:cluster';\n\nimport { isWorkerMessage, WorkerAction, PrimaryAction } from './consts.js';\nimport { sendToWorker } from './communicate.js';\nimport { createPrimaryMetaApiServer } from './meta-api.js';\n\nconst bytesToMb = (bytes: number) => Number((bytes / 1024 / 1024).toFixed(2));\n\nexport function initPrimary(cx: Pick<FluxionContext, 'logger' | 'options' | 'router'>) {\n if (!cluster.isPrimary) {\n $throw('createPrimary should only be called in primary process');\n }\n\n const { workerOptions } = cx.options;\n const cpuCount = Math.max(1, os.cpus().length);\n const workerCount = Math.max(1, Math.min(workerOptions.maxWorkerCount ?? Math.min(2, cpuCount), cpuCount));\n\n cx.logger.info('PrimaryStarted', {\n pid: process.pid,\n workers: workerCount,\n host: cx.options.host,\n port: cx.options.port,\n metaPort: cx.options.metaPort,\n });\n\n const workers = new Map<number, WorkerState>();\n\n const getWorkersSnapshot = () => {\n return {\n primaryPid: process.pid,\n host: cx.options.host,\n port: cx.options.port,\n metaPort: cx.options.metaPort,\n uptimeSeconds: Number(process.uptime().toFixed(3)),\n workers: Array.from(workers.entries()).map(([workerId, info]) => {\n const { instance } = info;\n const stats = info.lastStats;\n return {\n workerId,\n pid: info.pid ?? instance.process.pid ?? null,\n state: info.state,\n createdAt: info.createdAt,\n readyAt: info.readyAt ?? null,\n connected: instance.isConnected(),\n dead: instance.isDead(),\n exitedAfterDisconnect: instance.exitedAfterDisconnect,\n lastPongAt: info.lastPongAt ?? null,\n lastRttMs: info.lastRttMs ?? null,\n stats:\n stats === undefined\n ? null\n : {\n at: stats.at,\n uptimeSeconds: stats.uptimeSeconds,\n cpu: stats.cpu,\n memory: {\n ...stats.memory,\n rssMb: bytesToMb(stats.memory.rss),\n heapTotalMb: bytesToMb(stats.memory.heapTotal),\n heapUsedMb: bytesToMb(stats.memory.heapUsed),\n externalMb: bytesToMb(stats.memory.external),\n arrayBuffersMb: bytesToMb(stats.memory.arrayBuffers),\n },\n },\n };\n }),\n };\n };\n\n createPrimaryMetaApiServer(cx, getWorkersSnapshot);\n\n const attachWorker = (worker: cluster.Worker): void => {\n const workerInfo: WorkerState = {\n state: 'creating',\n pid: worker.process.pid,\n createdAt: Date.now(),\n instance: worker,\n };\n workers.set(worker.id, workerInfo);\n\n worker.on('message', (raw: WorkerMessage) => {\n if (!isWorkerMessage(raw)) {\n return;\n }\n\n if (raw.type === WorkerAction.Pong) {\n const rtt = Date.now() - raw.sentAt;\n workerInfo.pid = raw.pid;\n workerInfo.lastPongAt = Date.now();\n workerInfo.lastRttMs = rtt;\n return;\n }\n\n if (raw.type === WorkerAction.Ready) {\n workerInfo.state = 'ready';\n workerInfo.pid = raw.pid;\n workerInfo.readyAt = Date.now();\n cx.logger.info('WorkerReady', { workerId: worker.id, pid: raw.pid });\n return;\n }\n\n if (raw.type === WorkerAction.Created) {\n workerInfo.state = 'created';\n workerInfo.pid = raw.pid;\n cx.logger.info('WorkerCreated', { workerId: worker.id, pid: raw.pid });\n return;\n }\n\n if (raw.type === WorkerAction.Stats) {\n workerInfo.pid = raw.pid;\n workerInfo.lastStats = raw.stats;\n }\n });\n\n worker.on('exit', (code, signal) => {\n workers.delete(worker.id);\n cx.logger.warn('WorkerExited', {\n workerId: worker.id,\n pid: worker.process.pid ?? 'unknown',\n code,\n signal: signal ?? 'none',\n });\n });\n };\n\n for (let i = 0; i < workerCount; i++) {\n attachWorker(cluster.fork({ WORKER_ID: String(i + 1) }));\n }\n\n const pingTimer = setInterval(() => {\n const sentAt = Date.now();\n for (const info of workers.values()) {\n if (!info.instance.isConnected()) {\n continue;\n }\n try {\n sendToWorker(info.instance, { type: PrimaryAction.Ping, sentAt });\n } catch {\n // Ignore transient IPC errors; worker lifecycle events will reconcile state.\n }\n }\n }, 5000);\n pingTimer.unref();\n}\n","/**\n * For low version of Node.js that does not support `Promise.try`, we can implement it ourselves.\n *\n * Only for async functions.\n */\nexport function PromiseTry<T extends (...args: any[]) => any>(fn: T, ...args: Parameters<T>) {\n return new Promise<ReturnType<T>>((resolve, reject) => {\n // in case `fn` throws synchronously, we catch it and reject the promise\n try {\n const r = fn(...args);\n if (r instanceof Promise) {\n r.then(resolve).catch(reject);\n } else {\n resolve(r);\n }\n } catch (error) {\n reject(error);\n }\n });\n}\n","import type { IncomingMessage } from 'node:http';\n\nexport function getRealIp(req: IncomingMessage): string {\n const forwardedFor = req.headersDistinct['x-forwarded-for'];\n if (forwardedFor) {\n const firstForwarded = forwardedFor[0]?.split(',')[0]?.trim();\n if (firstForwarded && firstForwarded.length > 0) {\n return firstForwarded;\n }\n }\n\n const realIp = req.headersDistinct['x-real-ip']?.[0].trim();\n if (realIp !== undefined) {\n return realIp;\n }\n\n return req.socket.remoteAddress ?? 'unknown';\n}\n\nexport function isTextualContentType(contentType: string | undefined): boolean {\n if (contentType === undefined) {\n return false;\n }\n\n const normalized = contentType.toLowerCase();\n\n return (\n normalized.startsWith('text/') ||\n normalized.includes('json') ||\n normalized.includes('xml') ||\n normalized.includes('x-www-form-urlencoded') ||\n normalized.includes('javascript')\n );\n}\n","import { DUMMY_BASE_URL } from '@/common/consts.js';\n\nexport function toURL(rawUrl: string | undefined): URL | undefined {\n if (rawUrl === undefined) {\n return undefined;\n }\n\n try {\n return new URL(rawUrl, DUMMY_BASE_URL);\n } catch {\n return undefined;\n }\n}\n","export function parseQuery(searchParams: URLSearchParams): Record<string, string | string[]> {\n const query: Record<string, string | string[]> = {};\n\n for (const [key, value] of searchParams.entries()) {\n const existing = query[key];\n\n if (existing === undefined) {\n query[key] = value;\n continue;\n }\n\n if (Array.isArray(existing)) {\n existing.push(value);\n continue;\n }\n\n query[key] = [existing, value];\n }\n\n return query;\n}\n","import type http from 'node:http';\n\nimport { isTextualContentType } from './headers.js';\nimport { parseQuery } from './query.js';\n\nexport interface BodyPreview {\n exists: boolean;\n value?: string;\n bytes: number;\n truncated: boolean;\n}\n\nfunction createRequestBodyTooLargeError(receivedBytes: number, maxBytes: number): NodeJS.ErrnoException {\n const sizeError = new Error(\n `request body too large: ${receivedBytes.toString()} bytes exceeds ${maxBytes.toString()} bytes`,\n ) as NodeJS.ErrnoException;\n\n sizeError.code = 'REQUEST_BODY_TOO_LARGE';\n\n return sizeError;\n}\n\nfunction getHeaderValue(headerValue: string | string[] | undefined): string | undefined {\n return Array.isArray(headerValue) ? headerValue[0] : headerValue;\n}\n\nfunction createEmptyPreview(): BodyPreview {\n return {\n exists: false,\n bytes: 0,\n truncated: false,\n };\n}\n\nfunction createPreview(\n previewBuffer: Buffer,\n totalBytes: number,\n contentType: string | undefined,\n truncated: boolean,\n): BodyPreview {\n if (totalBytes === 0) {\n return createEmptyPreview();\n }\n\n if (isTextualContentType(contentType)) {\n return {\n exists: true,\n value: previewBuffer.toString('utf8'),\n bytes: totalBytes,\n truncated,\n };\n }\n\n return {\n exists: true,\n value: `<binary body: ${totalBytes} bytes>`,\n bytes: totalBytes,\n truncated,\n };\n}\n\nasync function readRequestBodyWithPreview(\n req: http.IncomingMessage,\n method: string,\n maxBytes: number,\n previewMaxBytes = 8192,\n): Promise<{ rawBody: Buffer | undefined; preview: BodyPreview }> {\n if (method === 'GET' || method === 'HEAD') {\n return {\n rawBody: undefined,\n preview: createEmptyPreview(),\n };\n }\n\n if (req.readableEnded) {\n return {\n rawBody: undefined,\n preview: createEmptyPreview(),\n };\n }\n\n const contentLengthRaw = getHeaderValue(req.headers['content-length']);\n const declaredBytes = contentLengthRaw !== undefined ? Number.parseInt(contentLengthRaw, 10) : NaN;\n\n if (Number.isFinite(declaredBytes) && declaredBytes > maxBytes) {\n throw createRequestBodyTooLargeError(declaredBytes, maxBytes);\n }\n\n return new Promise((resolve, reject) => {\n const rawBodyChunks: Buffer[] = [];\n const previewChunks: Buffer[] = [];\n let totalBytes = 0;\n let previewBytes = 0;\n let previewTruncated = false;\n let settled = false;\n\n const cleanup = (): void => {\n req.off('data', onData);\n req.off('end', onEnd);\n req.off('error', onError);\n req.off('aborted', onAborted);\n };\n\n const settle = (action: () => void): void => {\n if (settled) {\n return;\n }\n\n settled = true;\n action();\n };\n\n const onData = (chunk: Buffer | string | Uint8Array): void => {\n const bufferChunk = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);\n totalBytes += bufferChunk.byteLength;\n\n if (totalBytes > maxBytes) {\n cleanup();\n req.resume();\n settle(() => {\n reject(createRequestBodyTooLargeError(totalBytes, maxBytes));\n });\n return;\n }\n\n rawBodyChunks.push(bufferChunk);\n\n if (previewBytes < previewMaxBytes) {\n const remaining = previewMaxBytes - previewBytes;\n const nextSlice = bufferChunk.subarray(0, remaining);\n previewChunks.push(nextSlice);\n previewBytes += nextSlice.length;\n\n if (nextSlice.length < bufferChunk.length) {\n previewTruncated = true;\n }\n } else {\n previewTruncated = true;\n }\n };\n\n const onEnd = (): void => {\n cleanup();\n settle(() => {\n const rawBody = rawBodyChunks.length > 0 ? Buffer.concat(rawBodyChunks) : undefined;\n const previewBuffer = previewChunks.length > 0 ? Buffer.concat(previewChunks) : Buffer.alloc(0);\n\n resolve({\n rawBody,\n preview: createPreview(\n previewBuffer,\n rawBody?.byteLength ?? 0,\n getHeaderValue(req.headers['content-type']),\n previewTruncated,\n ),\n });\n });\n };\n\n const onError = (error: Error): void => {\n cleanup();\n settle(() => {\n reject(error);\n });\n };\n\n const onAborted = (): void => {\n cleanup();\n settle(() => {\n reject(new Error('request aborted while reading body'));\n });\n };\n\n req.on('data', onData);\n req.once('end', onEnd);\n req.once('error', onError);\n req.once('aborted', onAborted);\n });\n}\n\nexport async function parseBody(\n req: http.IncomingMessage,\n method: string,\n maxBytes: number,\n): Promise<{ body: Record<string, any>; preview: BodyPreview }> {\n const { rawBody, preview } = await readRequestBodyWithPreview(req, method, maxBytes);\n\n if (rawBody === undefined || rawBody.byteLength === 0) {\n return {\n body: {},\n preview,\n };\n }\n\n const contentType = getHeaderValue(req.headers['content-type'])?.toLowerCase() ?? '';\n\n if (contentType.includes('json')) {\n const textBody = rawBody.toString('utf8').trim();\n\n if (textBody.length === 0) {\n return {\n body: {},\n preview,\n };\n }\n\n try {\n const parsed = JSON.parse(textBody) as unknown;\n\n if (parsed !== null && typeof parsed === 'object' && !Array.isArray(parsed)) {\n return {\n body: parsed as Record<string, any>,\n preview,\n };\n }\n\n return {\n body: { value: parsed },\n preview,\n };\n } catch {\n return {\n body: { raw: textBody },\n preview,\n };\n }\n }\n\n if (contentType.includes('x-www-form-urlencoded')) {\n return {\n body: parseQuery(new URLSearchParams(rawBody.toString('utf8'))),\n preview,\n };\n }\n\n if (isTextualContentType(contentType)) {\n return {\n body: { raw: rawBody.toString('utf8') },\n preview,\n };\n }\n\n return {\n body: {},\n preview,\n };\n}\n","/**\n * Parse Cookie header string into an object\n */\nexport function parseCookie(cookieHeader: string | undefined): Record<string, string> {\n if (!cookieHeader) {\n return {};\n }\n\n const cookies: Record<string, string> = {};\n const pairs = cookieHeader.split(';');\n\n for (const pair of pairs) {\n const [key, ...valueParts] = pair.split('=');\n if (!key) continue;\n\n const trimmedKey = key.trim();\n const value = valueParts.join('=').trim();\n cookies[trimmedKey] = decodeURIComponent(value);\n }\n\n return cookies;\n}\n\n/**\n * Serialize an object into a Cookie header string\n */\nexport function serializeCookie(name: string, value: string, options?: {\n maxAge?: number;\n expires?: Date;\n domain?: string;\n path?: string;\n secure?: boolean;\n httpOnly?: boolean;\n sameSite?: 'strict' | 'lax' | 'none';\n}): string {\n let cookie = `${encodeURIComponent(name)}=${encodeURIComponent(value)}`;\n\n if (options) {\n if (options.maxAge !== undefined) {\n cookie += `; Max-Age=${options.maxAge}`;\n }\n if (options.expires) {\n cookie += `; Expires=${options.expires.toUTCString()}`;\n }\n if (options.domain) {\n cookie += `; Domain=${options.domain}`;\n }\n if (options.path) {\n cookie += `; Path=${options.path}`;\n }\n if (options.secure) {\n cookie += '; Secure';\n }\n if (options.httpOnly) {\n cookie += '; HttpOnly';\n }\n if (options.sameSite) {\n cookie += `; SameSite=${options.sameSite}`;\n }\n }\n\n return cookie;\n}\n","import http from 'node:http';\n\nimport type { FluxionContext, NormalizedRequest } from '../types.js';\nimport { $keys } from '@/common/native.js';\nimport { HttpCode, META_PREFIX } from '@/common/consts.js';\nimport { getErrorMessage } from '@/common/logger.js';\n\nimport { getRealIp } from '../utils/headers.js';\nimport { toURL } from '../utils/request.js';\nimport { safeSendJson } from '../utils/respond.js';\nimport { parseBody, type BodyPreview } from '../utils/body.js';\nimport { parseQuery } from '../utils/query.js';\nimport { parseCookie } from '../utils/cookie.js';\nimport { PromiseTry } from '@/common/promise-try.js';\n\nexport function createWorkerServer(cx: FluxionContext): http.Server {\n const server = http.createServer(async (req, res) => {\n const method = req.method ?? 'GET';\n const ip = getRealIp(req);\n const url = toURL(req.url);\n if (url === undefined) {\n safeSendJson(res, { message: 'Bad Request: req.url is undefined' }, HttpCode.BadRequest);\n return;\n }\n\n const normalized: NormalizedRequest = {\n method,\n ip,\n url,\n query: parseQuery(url.searchParams),\n body: {},\n headers: req.headers,\n cookie: parseCookie(req.headers.cookie as string | undefined),\n };\n\n let bodyPreview: BodyPreview = {\n exists: false,\n bytes: 0,\n truncated: false,\n };\n\n cx.logger.info('Req', { method, ip, path: url.pathname });\n\n const start = performance.now();\n res.once('finish', () => {\n const fields: Record<string, unknown> = {\n workerId: process.env.WORKER_ID ?? '[primary]',\n method,\n ip,\n path: url.pathname,\n status: res.statusCode,\n duration: (performance.now() - start).toFixed(4),\n };\n\n if ($keys(normalized.query).length > 0) {\n fields.query = normalized.query;\n }\n\n if (bodyPreview.exists) {\n fields.body = bodyPreview.value;\n fields.bodyBytes = bodyPreview.bytes;\n fields.bodyTruncated = bodyPreview.truncated;\n }\n\n cx.logger.info('Res', fields);\n });\n\n // * Start request handling\n try {\n if (normalized.url.pathname.startsWith(META_PREFIX + '/')) {\n safeSendJson(res, { message: `Meta APIs are available on port ${cx.options.metaPort}` }, HttpCode.NotFound);\n return;\n }\n\n const parsed = await parseBody(req, normalized.method, cx.options.maxRequestBytes);\n normalized.body = parsed.body;\n bodyPreview = parsed.preview;\n\n const handler = await cx.router.getHandler(url);\n if (!handler) {\n safeSendJson(res, { message: 'Not Found' }, HttpCode.NotFound);\n return;\n }\n\n const result = await PromiseTry(handler, normalized, req, res);\n\n if (result !== cx.router.StaticHandled) {\n safeSendJson(res, result);\n }\n } catch (error) {\n cx.logger.error('RequestFailed', {\n method: normalized.method,\n ip: normalized.ip,\n path: normalized.url.pathname,\n error: getErrorMessage(error),\n });\n\n if ((error as NodeJS.ErrnoException).code === 'REQUEST_BODY_TOO_LARGE') {\n safeSendJson(res, { message: getErrorMessage(error) }, HttpCode.PayloadTooLarge);\n } else {\n safeSendJson(res, { message: 'Internal Server Error' }, HttpCode.InternalServerError);\n }\n }\n });\n\n server.on('close', () => {\n cx.logger.info('ServerClosed', {\n host: cx.options.host,\n port: cx.options.port,\n });\n });\n\n server.listen(cx.options.port, cx.options.host, () => {\n cx.logger.info('ServerStarted', {\n pid: process.pid,\n host: cx.options.host,\n port: cx.options.port,\n });\n cx.logger.info('DynamicDirectory', { directory: cx.options.dir });\n });\n\n server.on('error', (error) => {\n cx.logger.error('ServerError', {\n error: getErrorMessage(error),\n });\n });\n\n return server;\n}\n","import type { PrimaryMessage } from './types.js';\nimport type { FluxionContext } from '../types.js';\nimport cluster from 'node:cluster';\n\nimport { getErrorMessage } from '@/common/logger.js';\nimport { loadFunction } from '@/common/injector.js';\nimport { PromiseTry } from '@/common/promise-try.js';\nimport { WorkerAction, PrimaryAction, isPrimaryMessage, INJECTION_KEY } from './consts.js';\nimport { sendToPrimary } from './communicate.js';\nimport { createWorkerServer } from './server.js';\n\nconst inject = async (cx: FluxionContext) => {\n const o = {} as any;\n Reflect.set(globalThis, INJECTION_KEY, o);\n for (let i = 0; i < cx.options.injections.length; i++) {\n const injection = cx.options.injections[i];\n const factory = loadFunction(injection);\n const instance = await PromiseTry(factory);\n o[injection.name] = instance;\n }\n cx.logger.info(`[worker ${process.pid}] injections loaded`, Object.keys(o));\n};\n\nconst startStatsReporter = () => {\n let previousCpuUsage = process.cpuUsage();\n let previousAt = Date.now();\n\n const interval = setInterval(() => {\n const now = Date.now();\n const elapsedMicros = Math.max(1, (now - previousAt) * 1000);\n const cpuDelta = process.cpuUsage(previousCpuUsage);\n const cpuPercent = Number((((cpuDelta.user + cpuDelta.system) / elapsedMicros) * 100).toFixed(2));\n\n previousCpuUsage = process.cpuUsage();\n previousAt = now;\n\n const memoryUsage = process.memoryUsage();\n sendToPrimary({\n type: WorkerAction.Stats,\n pid: process.pid,\n stats: {\n at: now,\n pid: process.pid,\n uptimeSeconds: Number(process.uptime().toFixed(3)),\n cpu: {\n userMicros: cpuDelta.user,\n systemMicros: cpuDelta.system,\n percent: cpuPercent,\n },\n memory: {\n rss: memoryUsage.rss,\n heapTotal: memoryUsage.heapTotal,\n heapUsed: memoryUsage.heapUsed,\n external: memoryUsage.external,\n arrayBuffers: memoryUsage.arrayBuffers,\n },\n },\n });\n }, 2000);\n\n interval.unref();\n};\n\nexport function initWorker(cx: FluxionContext) {\n if (cluster.isPrimary) {\n $throw('createWorker should only be called in worker process');\n }\n\n process.on('message', (raw: PrimaryMessage) => {\n if (!isPrimaryMessage(raw)) {\n return;\n }\n\n if (raw.type === PrimaryAction.Ping) {\n sendToPrimary({ type: WorkerAction.Pong, pid: process.pid, sentAt: raw.sentAt, receivedAt: Date.now() });\n return;\n }\n });\n\n sendToPrimary({ type: WorkerAction.Created, pid: process.pid });\n startStatsReporter();\n\n PromiseTry(async () => {\n await inject(cx);\n createWorkerServer(cx);\n sendToPrimary({ type: WorkerAction.Ready, pid: process.pid });\n }).catch((error) => {\n cx.logger.error('WorkerBootstrapFailed', {\n pid: process.pid,\n error: getErrorMessage(error),\n });\n process.exit(1);\n });\n}\n","import fs from 'node:fs';\nimport path from 'node:path';\nimport type { FluxionContext } from './types.js';\n\nexport class FluxionWatcher {\n // # Options\n private readonly cx: Pick<FluxionContext, 'options' | 'logger' | 'router'>;\n\n private timer: NodeJS.Timeout | null = null;\n private watcher: fs.FSWatcher | null = null;\n private readonly filesChanged: Set<string> = new Set();\n\n constructor(cx: Pick<FluxionContext, 'options' | 'logger' | 'router'>) {\n this.cx = cx;\n }\n\n /**\n * Recursively register all files in the options directory.\n */\n private init(): this {\n const dirPath = path.join(process.cwd(), this.cx.options.dir);\n\n const registerRecursive = (dir: string, relativePath: string) => {\n const entries = fs.readdirSync(dir, { withFileTypes: true });\n\n for (const entry of entries) {\n const entryPath = path.join(dir, entry.name);\n const entryRelativePath = path.join(relativePath, entry.name);\n\n if (entry.isDirectory()) {\n registerRecursive(entryPath, entryRelativePath);\n } else if (entry.isFile()) {\n try {\n this.cx.router.register(entryRelativePath);\n } catch (err) {\n this.cx.logger.error(`Error registering [${entryRelativePath}]: ${(err as Error).message}`);\n }\n }\n }\n };\n\n if (fs.existsSync(dirPath)) {\n registerRecursive(dirPath, '');\n this.cx.logger.info(`Initial registration complete for directory: ${this.cx.options.dir}`);\n } else {\n this.cx.logger.warn(`Directory does not exist: ${this.cx.options.dir}`);\n }\n\n return this;\n }\n\n /**\n * Since all actions are mapped to `rename` and `change` (WatchEventType).\n *\n * We could only record every file and reload them all.\n */\n start(): this {\n this.init();\n this.watcher = fs\n .watch(this.cx.options.dir, { recursive: true }, (_eventType, filename) => {\n if (!filename) {\n return;\n }\n\n this.filesChanged.add(filename);\n if (!this.timer) {\n this.timer = setTimeout(() => {\n this.filesChanged.forEach((p, _, s) => {\n try {\n this.cx.router.register(p);\n } catch (err) {\n this.cx.logger.error(`Error refreshing handlers: ${(err as Error).message}`);\n } finally {\n s.delete(p);\n }\n });\n\n this.timer = null;\n }, this.cx.options.reloadDelay);\n }\n })\n .on('error', (err) => {\n this.cx.logger.error(`Watcher error: ${err.message}`);\n this.cx.logger.error(`Restarting watcher...`);\n this.stop().start();\n });\n\n this.cx.logger.info(`Watcher started on directory: ${this.cx.options.dir}`);\n return this;\n }\n\n stop(): this {\n if (this.watcher) {\n this.watcher.close();\n this.watcher = null;\n }\n\n if (this.timer) {\n clearTimeout(this.timer);\n this.timer = null;\n }\n\n this.filesChanged.clear();\n return this;\n }\n}\n","import type { FluxionContext, FluxionHandler } from './types.js';\nimport { STATIC_CONTENT_TYPES } from '@/common/consts.js';\nimport { loadFunction } from '@/common/injector.js';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nexport class FluxionRouter {\n /**\n * This means the request has been handled by static resource handler, and no more response should be sent.\n */\n public readonly StaticHandled = Symbol.for('fluxion.router.StaticHandled');\n\n private readonly cx: Pick<FluxionContext, 'options' | 'logger'>;\n private readonly handlers: Map<string, FluxionHandler> = new Map();\n\n constructor(cx: Pick<FluxionContext, 'options' | 'logger'>) {\n this.cx = cx;\n }\n\n makeStaticResource(filepath: string): FluxionHandler {\n const fullPath = path.join(this.cx.options.dir, filepath);\n return async (normalized, _req, res) => {\n if (normalized.method !== 'GET' && normalized.method !== 'HEAD') {\n res.statusCode = 405;\n res.setHeader('Allow', 'GET, HEAD');\n res.end();\n return;\n }\n\n if (!fs.existsSync(fullPath)) {\n res.statusCode = 404;\n res.end('Not Found');\n return;\n }\n\n const stat = fs.statSync(fullPath);\n if (!stat.isFile()) {\n res.statusCode = 404;\n res.end('Not Found');\n return;\n }\n\n const extension = path.extname(filepath).toLowerCase();\n const contentType = STATIC_CONTENT_TYPES[extension] ?? 'application/octet-stream';\n\n res.statusCode = 200;\n res.setHeader('Content-Type', contentType);\n res.setHeader('Content-Length', String(stat.size));\n\n if (normalized.method === 'HEAD') {\n res.end();\n return;\n }\n\n return new Promise<symbol>((resolve, reject) => {\n const stream = fs.createReadStream(fullPath);\n stream.on('error', reject);\n stream.on('end', () => resolve(this.StaticHandled));\n stream.pipe(res);\n });\n };\n }\n\n /**\n * 1. Check if the path exists, if not, delete the handler;\n * 2. If the file extension matches `routerExclude`, delete it and return early;\n * 3. If the file extension matches `apiExts`, register it as an API, otherwise register as static resource;\n * @param filepath\n */\n register(filepath: string) {\n const fullpath = path.join(process.cwd(), this.cx.options.dir, filepath);\n if (!fs.existsSync(fullpath)) {\n this.handlers.delete(filepath);\n this.cx.logger.info(`[${filepath}] deleted`);\n return;\n }\n\n delete require.cache[fullpath];\n\n const extension = path.extname(filepath).toLowerCase();\n\n // Check if this file should be excluded from registration\n if (this.cx.options.routerExclude.some((ext) => extension === ext)) {\n this.handlers.delete(filepath);\n this.cx.logger.info(`[${filepath}] excluded`);\n return;\n }\n\n // register as api\n // ! Files with extensions matching `apiExts` are considered as API handlers.\n if (this.cx.options.apiExts.some((ext) => extension === ext)) {\n const handler = loadFunction({ name: fullpath, modulePath: fullpath });\n this.handlers.set(filepath, handler);\n this.cx.logger.info(`[${filepath}] handler registered`);\n return;\n }\n\n // register as static resource\n this.handlers.set(filepath, this.makeStaticResource(filepath));\n this.cx.logger.info(`[${filepath}] static resource registered`);\n }\n\n getHandler(url: URL): FluxionHandler | undefined {\n const relativePath = url.pathname.replace(/^[\\/]+/, '').replace(/[\\/]+$/, '');\n return this.handlers.get(relativePath);\n }\n}\n","import type { FluxionContext, FluxionOptions } from './types.js';\n\nimport { createLogger } from '@/common/logger.js';\nimport { normalizeOptions } from './utils/options.js';\nimport cluster from 'node:cluster';\nimport { initPrimary } from './cluster/primary.js';\nimport { initWorker } from './cluster/worker.js';\nimport { FluxionWatcher } from './watch.js';\nimport { FluxionRouter } from './router.js';\n\nexport async function fluxion(options: FluxionOptions) {\n const context: FluxionContext = {\n options: normalizeOptions(options),\n } as FluxionContext;\n\n context.logger = createLogger(context as Pick<FluxionContext, 'options'>);\n context.router = new FluxionRouter(context as Pick<FluxionContext, 'options' | 'logger'>);\n\n if (cluster.isPrimary) {\n initPrimary(context);\n } else {\n // Only worker creates the watcher\n context.watcher = new FluxionWatcher(context as Pick<FluxionContext, 'options' | 'logger' | 'router'>).start();\n initWorker(context);\n }\n}\n","import type { FluxionHandler, FluxionOptions } from './core/types.js';\nimport { fluxion } from './core/fluxion.js';\n\nexport { fluxion, type FluxionOptions as FluxionOptions };\n\nexport function defineFluxionHandler(handler: FluxionHandler) {\n return handler;\n}\n\nif (process.env.NODE_ENV !== 'production') {\n globalThis.$throw = (message: string) => {\n throw new Error('[fluxion error]' + message);\n };\n\n const int = (n: string | undefined, defaultValue: number): number => {\n if (n === undefined) {\n return defaultValue;\n }\n const parsed = Number.parseInt(n, 10);\n if (Number.isNaN(parsed)) {\n return defaultValue;\n }\n return parsed;\n };\n\n fluxion({\n dir: process.env.DYNAMIC_DIRECTORY ?? 'dynamicDirectory',\n host: process.env.HOST ?? 'localhost',\n port: int(process.env.PORT, 9000),\n metaPort: int(process.env.META_PORT, 9001),\n reloadDelay: process.env.RELOAD_DELAY ? Number.parseInt(process.env.RELOAD_DELAY, 10) : undefined,\n workerOptions: {\n maxWorkerCount: 1,\n },\n });\n}\n"],"names":["styles"],"mappings":"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","x_google_ignoreList":[0,1,2,3]}
|