@wener/utils 1.1.11 → 1.1.12

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.
Files changed (52) hide show
  1. package/dist/cjs/index.cjs +5 -5
  2. package/dist/cjs/index.cjs.map +1 -1
  3. package/dist/cjs/server.cjs.map +1 -1
  4. package/dist/esm/index.js +4 -4
  5. package/dist/esm/index.js.map +1 -1
  6. package/dist/esm/server.js.map +1 -1
  7. package/dist/system/index.js +5 -5
  8. package/dist/system/index.js.map +1 -1
  9. package/dist/system/server.js.map +1 -1
  10. package/lib/asyncs/AsyncInterval.js +1 -1
  11. package/lib/asyncs/AsyncInterval.js.map +1 -1
  12. package/lib/browsers/copy.js +2 -1
  13. package/lib/browsers/copy.js.map +1 -1
  14. package/lib/browsers/getFileFromDataTransfer.js +3 -2
  15. package/lib/browsers/getFileFromDataTransfer.js.map +1 -1
  16. package/lib/crypto/getRandomValues.js +6 -4
  17. package/lib/crypto/getRandomValues.js.map +1 -1
  18. package/lib/crypto/pem/pem.js +3 -2
  19. package/lib/crypto/pem/pem.js.map +1 -1
  20. package/lib/crypto/randomUUID.js +2 -1
  21. package/lib/crypto/randomUUID.js.map +1 -1
  22. package/lib/crypto/ulid.js +3 -3
  23. package/lib/crypto/ulid.js.map +1 -1
  24. package/lib/index.js +1 -0
  25. package/lib/index.js.map +1 -1
  26. package/lib/io/ArrayBuffers.js +165 -142
  27. package/lib/io/ArrayBuffers.js.map +1 -1
  28. package/lib/io/Buffer.js +6 -5
  29. package/lib/io/Buffer.js.map +1 -1
  30. package/lib/io/isBuffer.js +2 -1
  31. package/lib/io/isBuffer.js.map +1 -1
  32. package/lib/io/isTransferable.js +1 -1
  33. package/lib/io/isTransferable.js.map +1 -1
  34. package/lib/langs/parseBoolean.js.map +1 -1
  35. package/lib/libs/ms.js +117 -0
  36. package/lib/libs/ms.js.map +1 -0
  37. package/lib/logging/createLogger.js +2 -1
  38. package/lib/logging/createLogger.js.map +1 -1
  39. package/lib/maths/random.js +2 -1
  40. package/lib/maths/random.js.map +1 -1
  41. package/lib/modules/parseModuleId.js +2 -1
  42. package/lib/modules/parseModuleId.js.map +1 -1
  43. package/lib/servers/createProxyFetch.js +1 -1
  44. package/lib/servers/createProxyFetch.js.map +1 -1
  45. package/lib/servers/polyfillFetch.js.map +1 -1
  46. package/package.json +2 -1
  47. package/src/index.ts +3 -0
  48. package/src/langs/parseBoolean.ts +1 -1
  49. package/src/libs/README.md +1 -0
  50. package/src/libs/ms.ts +205 -0
  51. package/src/servers/polyfillFetch.ts +1 -0
  52. package/src/servers/polyfillWebSocket.ts +14 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ms.js","sources":["../../src/libs/ms.ts"],"sourcesContent":["// Helpers.\nconst s = 1000;\nconst m = s * 60;\nconst h = m * 60;\nconst d = h * 24;\nconst w = d * 7;\nconst y = d * 365.25;\n\ntype Unit =\n | 'Years'\n | 'Year'\n | 'Yrs'\n | 'Yr'\n | 'Y'\n | 'Weeks'\n | 'Week'\n | 'W'\n | 'Days'\n | 'Day'\n | 'D'\n | 'Hours'\n | 'Hour'\n | 'Hrs'\n | 'Hr'\n | 'H'\n | 'Minutes'\n | 'Minute'\n | 'Mins'\n | 'Min'\n | 'M'\n | 'Seconds'\n | 'Second'\n | 'Secs'\n | 'Sec'\n | 's'\n | 'Milliseconds'\n | 'Millisecond'\n | 'Msecs'\n | 'Msec'\n | 'Ms';\n\ntype UnitAnyCase = Unit | Uppercase<Unit> | Lowercase<Unit>;\n\nexport type StringValue = `${number}` | `${number}${UnitAnyCase}` | `${number} ${UnitAnyCase}`;\n\ninterface Options {\n /**\n * Set to `true` to use verbose formatting. Defaults to `false`.\n */\n long?: boolean;\n}\n\n/**\n * Parse or format the given value.\n *\n * @param value - The string or number to convert\n * @param options - Options for the conversion\n * @throws Error if `value` is not a non-empty string or a number\n */\nfunction msFn(value: StringValue, options?: Options): number;\nfunction msFn(value: number, options?: Options): string;\nfunction msFn(value: StringValue | number, options?: Options): number | string {\n try {\n if (typeof value === 'string' && value.length > 0) {\n return parse(value);\n } else if (typeof value === 'number' && isFinite(value)) {\n return options?.long ? fmtLong(value) : fmtShort(value);\n }\n throw new Error('Value is not a string or number.');\n } catch (error) {\n const message = isError(error)\n ? `${error.message}. value=${JSON.stringify(value)}`\n : 'An unknown error has occurred.';\n throw new Error(message);\n }\n}\n\n/**\n * Parse the given string and return milliseconds.\n *\n * @param str - A string to parse to milliseconds\n * @returns The parsed value in milliseconds, or `NaN` if the string can't be\n * parsed\n */\nfunction parse(str: string): number {\n if (str.length > 100) {\n throw new Error('Value exceeds the maximum length of 100 characters.');\n }\n const match =\n /^(?<value>-?(?:\\d+)?\\.?\\d+) *(?<type>milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n str,\n );\n // Named capture groups need to be manually typed today.\n // https://github.com/microsoft/TypeScript/issues/32098\n const groups = match?.groups as { value: string; type?: string } | undefined;\n if (!groups) {\n return NaN;\n }\n const n = parseFloat(groups.value);\n const type = (groups.type || 'ms').toLowerCase() as Lowercase<Unit>;\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n // This should never occur.\n throw new Error(`The unit ${type as string} was matched, but no matching case exists.`);\n }\n}\n\n// eslint-disable-next-line import/no-default-export\nexport default msFn;\n\n/**\n * Short format for `ms`.\n */\nfunction fmtShort(ms: number): StringValue {\n const msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return `${Math.round(ms / d)}d`;\n }\n if (msAbs >= h) {\n return `${Math.round(ms / h)}h`;\n }\n if (msAbs >= m) {\n return `${Math.round(ms / m)}m`;\n }\n if (msAbs >= s) {\n return `${Math.round(ms / s)}s`;\n }\n return `${ms}ms`;\n}\n\n/**\n * Long format for `ms`.\n */\nfunction fmtLong(ms: number): StringValue {\n const msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n return `${ms} ms`;\n}\n\n/**\n * Pluralization helper.\n */\nfunction plural(ms: number, msAbs: number, n: number, name: string): StringValue {\n const isPlural = msAbs >= n * 1.5;\n return `${Math.round(ms / n)} ${name}${isPlural ? 's' : ''}` as StringValue;\n}\n\n/**\n * A type guard for errors.\n *\n * @param value - The value to test\n * @returns A boolean `true` if the provided value is an Error-like object\n */\nfunction isError(value: unknown): value is Error {\n return typeof value === 'object' && value !== null && 'message' in value;\n}\n"],"names":[],"mappings":"AACA,MAAM,CAAI,GAAA,GAAA,CAAA;AACV,MAAM,IAAI,CAAI,GAAA,EAAA,CAAA;AACd,MAAM,IAAI,CAAI,GAAA,EAAA,CAAA;AACd,MAAM,IAAI,CAAI,GAAA,EAAA,CAAA;AACd,MAAM,IAAI,CAAI,GAAA,CAAA,CAAA;AACd,MAAM,IAAI,CAAI,GAAA,MAAA,CAAA;AAuDd,SAAS,IAAA,CAAK,OAA6B,OAAoC,EAAA;AAC7E,EAAI,IAAA;AACF,IAAA,IAAI,OAAO,KAAA,KAAU,QAAY,IAAA,KAAA,CAAM,SAAS,CAAG,EAAA;AACjD,MAAA,OAAO,MAAM,KAAK,CAAA,CAAA;AAAA,eACT,OAAO,KAAA,KAAU,QAAY,IAAA,QAAA,CAAS,KAAK,CAAG,EAAA;AACvD,MAAA,OAAA,CAAO,mCAAS,IAAO,IAAA,OAAA,CAAQ,KAAK,CAAA,GAAI,SAAS,KAAK,CAAA,CAAA;AAAA,KACxD;AACA,IAAM,MAAA,IAAI,MAAM,kCAAkC,CAAA,CAAA;AAAA,WAC3C,KAAP,EAAA;AACA,IAAM,MAAA,OAAA,GAAU,OAAQ,CAAA,KAAK,CACzB,GAAA,CAAA,EAAG,MAAM,OAAkB,CAAA,QAAA,EAAA,IAAA,CAAK,SAAU,CAAA,KAAK,CAC/C,CAAA,CAAA,GAAA,gCAAA,CAAA;AACJ,IAAM,MAAA,IAAI,MAAM,OAAO,CAAA,CAAA;AAAA,GACzB;AACF,CAAA;AASA,SAAS,MAAM,GAAqB,EAAA;AAClC,EAAI,IAAA,GAAA,CAAI,SAAS,GAAK,EAAA;AACpB,IAAM,MAAA,IAAI,MAAM,qDAAqD,CAAA,CAAA;AAAA,GACvE;AACA,EAAA,MAAM,QACJ,iJAAkJ,CAAA,IAAA;AAAA,IAChJ,GAAA;AAAA,GACF,CAAA;AAGF,EAAA,MAAM,SAAS,KAAO,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,KAAA,CAAA,MAAA,CAAA;AACtB,EAAA,IAAI,CAAC,MAAQ,EAAA;AACX,IAAO,OAAA,GAAA,CAAA;AAAA,GACT;AACA,EAAM,MAAA,CAAA,GAAI,UAAW,CAAA,MAAA,CAAO,KAAK,CAAA,CAAA;AACjC,EAAA,MAAM,IAAQ,GAAA,CAAA,MAAA,CAAO,IAAQ,IAAA,IAAA,EAAM,WAAY,EAAA,CAAA;AAC/C,EAAA,QAAQ,IAAM;AAAA,IACZ,KAAK,OAAA,CAAA;AAAA,IACL,KAAK,MAAA,CAAA;AAAA,IACL,KAAK,KAAA,CAAA;AAAA,IACL,KAAK,IAAA,CAAA;AAAA,IACL,KAAK,GAAA;AACH,MAAA,OAAO,CAAI,GAAA,CAAA,CAAA;AAAA,IACb,KAAK,OAAA,CAAA;AAAA,IACL,KAAK,MAAA,CAAA;AAAA,IACL,KAAK,GAAA;AACH,MAAA,OAAO,CAAI,GAAA,CAAA,CAAA;AAAA,IACb,KAAK,MAAA,CAAA;AAAA,IACL,KAAK,KAAA,CAAA;AAAA,IACL,KAAK,GAAA;AACH,MAAA,OAAO,CAAI,GAAA,CAAA,CAAA;AAAA,IACb,KAAK,OAAA,CAAA;AAAA,IACL,KAAK,MAAA,CAAA;AAAA,IACL,KAAK,KAAA,CAAA;AAAA,IACL,KAAK,IAAA,CAAA;AAAA,IACL,KAAK,GAAA;AACH,MAAA,OAAO,CAAI,GAAA,CAAA,CAAA;AAAA,IACb,KAAK,SAAA,CAAA;AAAA,IACL,KAAK,QAAA,CAAA;AAAA,IACL,KAAK,MAAA,CAAA;AAAA,IACL,KAAK,KAAA,CAAA;AAAA,IACL,KAAK,GAAA;AACH,MAAA,OAAO,CAAI,GAAA,CAAA,CAAA;AAAA,IACb,KAAK,SAAA,CAAA;AAAA,IACL,KAAK,QAAA,CAAA;AAAA,IACL,KAAK,MAAA,CAAA;AAAA,IACL,KAAK,KAAA,CAAA;AAAA,IACL,KAAK,GAAA;AACH,MAAA,OAAO,CAAI,GAAA,CAAA,CAAA;AAAA,IACb,KAAK,cAAA,CAAA;AAAA,IACL,KAAK,aAAA,CAAA;AAAA,IACL,KAAK,OAAA,CAAA;AAAA,IACL,KAAK,MAAA,CAAA;AAAA,IACL,KAAK,IAAA;AACH,MAAO,OAAA,CAAA,CAAA;AAAA,IACT;AAEE,MAAM,MAAA,IAAI,KAAM,CAAA,CAAA,SAAA,EAAY,IAA0D,CAAA,0CAAA,CAAA,CAAA,CAAA;AAAA,GAC1F;AACF,CAAA;AAQA,SAAS,SAAS,EAAyB,EAAA;AACzC,EAAM,MAAA,KAAA,GAAQ,IAAK,CAAA,GAAA,CAAI,EAAE,CAAA,CAAA;AACzB,EAAA,IAAI,SAAS,CAAG,EAAA;AACd,IAAA,OAAO,CAAG,EAAA,IAAA,CAAK,KAAM,CAAA,EAAA,GAAK,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,GAC7B;AACA,EAAA,IAAI,SAAS,CAAG,EAAA;AACd,IAAA,OAAO,CAAG,EAAA,IAAA,CAAK,KAAM,CAAA,EAAA,GAAK,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,GAC7B;AACA,EAAA,IAAI,SAAS,CAAG,EAAA;AACd,IAAA,OAAO,CAAG,EAAA,IAAA,CAAK,KAAM,CAAA,EAAA,GAAK,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,GAC7B;AACA,EAAA,IAAI,SAAS,CAAG,EAAA;AACd,IAAA,OAAO,CAAG,EAAA,IAAA,CAAK,KAAM,CAAA,EAAA,GAAK,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,GAC7B;AACA,EAAA,OAAO,CAAG,EAAA,EAAA,CAAA,EAAA,CAAA,CAAA;AACZ,CAAA;AAKA,SAAS,QAAQ,EAAyB,EAAA;AACxC,EAAM,MAAA,KAAA,GAAQ,IAAK,CAAA,GAAA,CAAI,EAAE,CAAA,CAAA;AACzB,EAAA,IAAI,SAAS,CAAG,EAAA;AACd,IAAA,OAAO,MAAO,CAAA,EAAA,EAAI,KAAO,EAAA,CAAA,EAAG,KAAK,CAAA,CAAA;AAAA,GACnC;AACA,EAAA,IAAI,SAAS,CAAG,EAAA;AACd,IAAA,OAAO,MAAO,CAAA,EAAA,EAAI,KAAO,EAAA,CAAA,EAAG,MAAM,CAAA,CAAA;AAAA,GACpC;AACA,EAAA,IAAI,SAAS,CAAG,EAAA;AACd,IAAA,OAAO,MAAO,CAAA,EAAA,EAAI,KAAO,EAAA,CAAA,EAAG,QAAQ,CAAA,CAAA;AAAA,GACtC;AACA,EAAA,IAAI,SAAS,CAAG,EAAA;AACd,IAAA,OAAO,MAAO,CAAA,EAAA,EAAI,KAAO,EAAA,CAAA,EAAG,QAAQ,CAAA,CAAA;AAAA,GACtC;AACA,EAAA,OAAO,CAAG,EAAA,EAAA,CAAA,GAAA,CAAA,CAAA;AACZ,CAAA;AAKA,SAAS,MAAO,CAAA,EAAA,EAAY,KAAe,EAAA,CAAA,EAAW,IAA2B,EAAA;AAC/E,EAAM,MAAA,QAAA,GAAW,SAAS,CAAI,GAAA,GAAA,CAAA;AAC9B,EAAO,OAAA,CAAA,EAAG,KAAK,KAAM,CAAA,EAAA,GAAK,CAAC,CAAK,CAAA,CAAA,EAAA,IAAA,CAAA,EAAO,WAAW,GAAM,GAAA,EAAA,CAAA,CAAA,CAAA;AAC1D,CAAA;AAQA,SAAS,QAAQ,KAAgC,EAAA;AAC/C,EAAA,OAAO,OAAO,KAAA,KAAU,QAAY,IAAA,KAAA,KAAU,QAAQ,SAAa,IAAA,KAAA,CAAA;AACrE;;;;"}
@@ -3,8 +3,9 @@ function createLogger(write = ({
3
3
  values,
4
4
  ...ctx
5
5
  }) => {
6
+ var _a;
6
7
  ({ values, ...ctx } = merge(ctx, values));
7
- console[level]?.(...values, ctx);
8
+ (_a = console[level]) == null ? void 0 : _a.call(console, ...values, ctx);
8
9
  }, context = {}) {
9
10
  return {
10
11
  trace: (...values) => write({ ...context, level: "trace", values }),
@@ -1 +1 @@
1
- {"version":3,"file":"createLogger.js","sources":["../../src/logging/createLogger.ts"],"sourcesContent":["import type { LoggerWithChild, LogLevel } from './Logger';\n\nexport function createLogger(\n write: (o: { level: LogLevel; values: any[] } & Record<string | symbol, any>) => void = ({\n level,\n values,\n ...ctx\n }) => {\n ({ values, ...ctx } = merge(ctx, values));\n console[level]?.(...values, ctx);\n },\n context: object = {},\n): LoggerWithChild {\n return {\n trace: (...values) => write({ ...context, level: 'trace', values }),\n debug: (...values) => write({ ...context, level: 'debug', values }),\n info: (...values) => write({ ...context, level: 'info', values }),\n warn: (...values) => write({ ...context, level: 'warn', values }),\n error: (...values) => write({ ...context, level: 'error', values }),\n child: (ctx) => createLogger(write, { ...context, ...ctx }),\n };\n}\n\n// logger.info({name:'wener'},'message')\n// merge initial context with message object\nfunction merge(ctx: any, values: any[]) {\n if (values[0] && typeof values[0] === 'object') {\n return { ...ctx, ...values[0], values: values.slice(1) };\n }\n return { ...ctx, values };\n}\n"],"names":[],"mappings":"AAEgB,SAAA,YAAA,CACd,QAAwF,CAAC;AAAA,EACvF,KAAA;AAAA,EACA,MAAA;AAAA,EACA,GAAG,GAAA;AACL,CAAM,KAAA;AACJ,EAAA,CAAC,EAAE,MAAQ,EAAA,GAAG,KAAQ,GAAA,KAAA,CAAM,KAAK,MAAM,CAAA,EAAA;AACvC,EAAA,OAAA,CAAQ,KAAK,CAAA,GAAI,GAAG,MAAA,EAAQ,GAAG,CAAA,CAAA;AACjC,CACA,EAAA,OAAA,GAAkB,EACD,EAAA;AACjB,EAAO,OAAA;AAAA,IACL,KAAA,EAAO,CAAI,GAAA,MAAA,KAAW,KAAM,CAAA,EAAE,GAAG,OAAS,EAAA,KAAA,EAAO,OAAS,EAAA,MAAA,EAAQ,CAAA;AAAA,IAClE,KAAA,EAAO,CAAI,GAAA,MAAA,KAAW,KAAM,CAAA,EAAE,GAAG,OAAS,EAAA,KAAA,EAAO,OAAS,EAAA,MAAA,EAAQ,CAAA;AAAA,IAClE,IAAA,EAAM,CAAI,GAAA,MAAA,KAAW,KAAM,CAAA,EAAE,GAAG,OAAS,EAAA,KAAA,EAAO,MAAQ,EAAA,MAAA,EAAQ,CAAA;AAAA,IAChE,IAAA,EAAM,CAAI,GAAA,MAAA,KAAW,KAAM,CAAA,EAAE,GAAG,OAAS,EAAA,KAAA,EAAO,MAAQ,EAAA,MAAA,EAAQ,CAAA;AAAA,IAChE,KAAA,EAAO,CAAI,GAAA,MAAA,KAAW,KAAM,CAAA,EAAE,GAAG,OAAS,EAAA,KAAA,EAAO,OAAS,EAAA,MAAA,EAAQ,CAAA;AAAA,IAClE,KAAA,EAAO,CAAC,GAAA,KAAQ,YAAa,CAAA,KAAA,EAAO,EAAE,GAAG,OAAA,EAAS,GAAG,GAAA,EAAK,CAAA;AAAA,GAC5D,CAAA;AACF,CAAA;AAIA,SAAS,KAAA,CAAM,KAAU,MAAe,EAAA;AACtC,EAAA,IAAI,OAAO,CAAC,CAAA,IAAK,OAAO,MAAO,CAAA,CAAC,MAAM,QAAU,EAAA;AAC9C,IAAO,OAAA,EAAE,GAAG,GAAA,EAAK,GAAG,MAAA,CAAO,CAAC,CAAA,EAAG,MAAQ,EAAA,MAAA,CAAO,KAAM,CAAA,CAAC,CAAE,EAAA,CAAA;AAAA,GACzD;AACA,EAAO,OAAA,EAAE,GAAG,GAAA,EAAK,MAAO,EAAA,CAAA;AAC1B;;;;"}
1
+ {"version":3,"file":"createLogger.js","sources":["../../src/logging/createLogger.ts"],"sourcesContent":["import type { LoggerWithChild, LogLevel } from './Logger';\n\nexport function createLogger(\n write: (o: { level: LogLevel; values: any[] } & Record<string | symbol, any>) => void = ({\n level,\n values,\n ...ctx\n }) => {\n ({ values, ...ctx } = merge(ctx, values));\n console[level]?.(...values, ctx);\n },\n context: object = {},\n): LoggerWithChild {\n return {\n trace: (...values) => write({ ...context, level: 'trace', values }),\n debug: (...values) => write({ ...context, level: 'debug', values }),\n info: (...values) => write({ ...context, level: 'info', values }),\n warn: (...values) => write({ ...context, level: 'warn', values }),\n error: (...values) => write({ ...context, level: 'error', values }),\n child: (ctx) => createLogger(write, { ...context, ...ctx }),\n };\n}\n\n// logger.info({name:'wener'},'message')\n// merge initial context with message object\nfunction merge(ctx: any, values: any[]) {\n if (values[0] && typeof values[0] === 'object') {\n return { ...ctx, ...values[0], values: values.slice(1) };\n }\n return { ...ctx, values };\n}\n"],"names":[],"mappings":"AAEgB,SAAA,YAAA,CACd,QAAwF,CAAC;AAAA,EACvF,KAAA;AAAA,EACA,MAAA;AAAA,EACA,GAAG,GAAA;AACL,CAAM,KAAA;AAPR,EAAA,IAAA,EAAA,CAAA;AAQI,EAAA,CAAC,EAAE,MAAQ,EAAA,GAAG,KAAQ,GAAA,KAAA,CAAM,KAAK,MAAM,CAAA,EAAA;AACvC,EAAQ,CAAA,EAAA,GAAA,OAAA,CAAA,KAAA,CAAA,KAAR,IAAiB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,OAAA,EAAA,GAAG,MAAQ,EAAA,GAAA,CAAA,CAAA;AAC9B,CACA,EAAA,OAAA,GAAkB,EACD,EAAA;AACjB,EAAO,OAAA;AAAA,IACL,KAAA,EAAO,CAAI,GAAA,MAAA,KAAW,KAAM,CAAA,EAAE,GAAG,OAAS,EAAA,KAAA,EAAO,OAAS,EAAA,MAAA,EAAQ,CAAA;AAAA,IAClE,KAAA,EAAO,CAAI,GAAA,MAAA,KAAW,KAAM,CAAA,EAAE,GAAG,OAAS,EAAA,KAAA,EAAO,OAAS,EAAA,MAAA,EAAQ,CAAA;AAAA,IAClE,IAAA,EAAM,CAAI,GAAA,MAAA,KAAW,KAAM,CAAA,EAAE,GAAG,OAAS,EAAA,KAAA,EAAO,MAAQ,EAAA,MAAA,EAAQ,CAAA;AAAA,IAChE,IAAA,EAAM,CAAI,GAAA,MAAA,KAAW,KAAM,CAAA,EAAE,GAAG,OAAS,EAAA,KAAA,EAAO,MAAQ,EAAA,MAAA,EAAQ,CAAA;AAAA,IAChE,KAAA,EAAO,CAAI,GAAA,MAAA,KAAW,KAAM,CAAA,EAAE,GAAG,OAAS,EAAA,KAAA,EAAO,OAAS,EAAA,MAAA,EAAQ,CAAA;AAAA,IAClE,KAAA,EAAO,CAAC,GAAA,KAAQ,YAAa,CAAA,KAAA,EAAO,EAAE,GAAG,OAAA,EAAS,GAAG,GAAA,EAAK,CAAA;AAAA,GAC5D,CAAA;AACF,CAAA;AAIA,SAAS,KAAA,CAAM,KAAU,MAAe,EAAA;AACtC,EAAA,IAAI,OAAO,CAAC,CAAA,IAAK,OAAO,MAAO,CAAA,CAAC,MAAM,QAAU,EAAA;AAC9C,IAAO,OAAA,EAAE,GAAG,GAAA,EAAK,GAAG,MAAA,CAAO,CAAC,CAAA,EAAG,MAAQ,EAAA,MAAA,CAAO,KAAM,CAAA,CAAC,CAAE,EAAA,CAAA;AAAA,GACzD;AACA,EAAO,OAAA,EAAE,GAAG,GAAA,EAAK,MAAO,EAAA,CAAA;AAC1B;;;;"}
@@ -1,5 +1,6 @@
1
1
  function createRandom(o = {}) {
2
- let seed = typeof o.seed === "string" ? 0 : o.seed ?? 0;
2
+ var _a;
3
+ let seed = typeof o.seed === "string" ? 0 : (_a = o.seed) != null ? _a : 0;
3
4
  if (typeof o.seed === "string") {
4
5
  let sum = 0;
5
6
  for (let i = 0; i < o.seed.length; i++) {
@@ -1 +1 @@
1
- {"version":3,"file":"random.js","sources":["../../src/maths/random.ts"],"sourcesContent":["/// javascript pseudo random\nexport function createRandom(o: { seed?: string | number } = {}) {\n let seed = typeof o.seed === 'string' ? 0 : o.seed ?? 0;\n if (typeof o.seed === 'string') {\n let sum = 0;\n for (let i = 0; i < o.seed.length; i++) {\n sum += o.seed.charCodeAt(i);\n }\n seed = sum;\n }\n\n return () => {\n const x = Math.sin(seed++) * 10000;\n return x - Math.floor(x);\n };\n}\n"],"names":[],"mappings":"AACgB,SAAA,YAAA,CAAa,CAAgC,GAAA,EAAI,EAAA;AAC/D,EAAA,IAAI,OAAO,OAAO,CAAA,CAAE,SAAS,QAAW,GAAA,CAAA,GAAI,EAAE,IAAQ,IAAA,CAAA,CAAA;AACtD,EAAI,IAAA,OAAO,CAAE,CAAA,IAAA,KAAS,QAAU,EAAA;AAC9B,IAAA,IAAI,GAAM,GAAA,CAAA,CAAA;AACV,IAAA,KAAA,IAAS,IAAI,CAAG,EAAA,CAAA,GAAI,CAAE,CAAA,IAAA,CAAK,QAAQ,CAAK,EAAA,EAAA;AACtC,MAAO,GAAA,IAAA,CAAA,CAAE,IAAK,CAAA,UAAA,CAAW,CAAC,CAAA,CAAA;AAAA,KAC5B;AACA,IAAO,IAAA,GAAA,GAAA,CAAA;AAAA,GACT;AAEA,EAAA,OAAO,MAAM;AACX,IAAA,MAAM,CAAI,GAAA,IAAA,CAAK,GAAI,CAAA,IAAA,EAAM,CAAI,GAAA,GAAA,CAAA;AAC7B,IAAO,OAAA,CAAA,GAAI,IAAK,CAAA,KAAA,CAAM,CAAC,CAAA,CAAA;AAAA,GACzB,CAAA;AACF;;;;"}
1
+ {"version":3,"file":"random.js","sources":["../../src/maths/random.ts"],"sourcesContent":["/// javascript pseudo random\nexport function createRandom(o: { seed?: string | number } = {}) {\n let seed = typeof o.seed === 'string' ? 0 : o.seed ?? 0;\n if (typeof o.seed === 'string') {\n let sum = 0;\n for (let i = 0; i < o.seed.length; i++) {\n sum += o.seed.charCodeAt(i);\n }\n seed = sum;\n }\n\n return () => {\n const x = Math.sin(seed++) * 10000;\n return x - Math.floor(x);\n };\n}\n"],"names":[],"mappings":"AACgB,SAAA,YAAA,CAAa,CAAgC,GAAA,EAAI,EAAA;AADjE,EAAA,IAAA,EAAA,CAAA;AAEE,EAAI,IAAA,IAAA,GAAO,OAAO,CAAE,CAAA,IAAA,KAAS,WAAW,CAAI,GAAA,CAAA,EAAA,GAAA,CAAA,CAAE,SAAF,IAAU,GAAA,EAAA,GAAA,CAAA,CAAA;AACtD,EAAI,IAAA,OAAO,CAAE,CAAA,IAAA,KAAS,QAAU,EAAA;AAC9B,IAAA,IAAI,GAAM,GAAA,CAAA,CAAA;AACV,IAAA,KAAA,IAAS,IAAI,CAAG,EAAA,CAAA,GAAI,CAAE,CAAA,IAAA,CAAK,QAAQ,CAAK,EAAA,EAAA;AACtC,MAAO,GAAA,IAAA,CAAA,CAAE,IAAK,CAAA,UAAA,CAAW,CAAC,CAAA,CAAA;AAAA,KAC5B;AACA,IAAO,IAAA,GAAA,GAAA,CAAA;AAAA,GACT;AAEA,EAAA,OAAO,MAAM;AACX,IAAA,MAAM,CAAI,GAAA,IAAA,CAAK,GAAI,CAAA,IAAA,EAAM,CAAI,GAAA,GAAA,CAAA;AAC7B,IAAO,OAAA,CAAA,GAAI,IAAK,CAAA,KAAA,CAAM,CAAC,CAAA,CAAA;AAAA,GACzB,CAAA;AACF;;;;"}
@@ -1,6 +1,7 @@
1
1
  const regModuleId = /^(?<n>(?:@(?<org>[a-z0-9-~][a-z0-9-._~]*)\/)?(?<pkg>[a-z0-9-~][a-z0-9-._~]*))(?:@(?<v>[-a-z0-9><=_.^~]+))?(?<p>\/[^\r\n]*)?$/;
2
2
  function parseModuleId(s) {
3
- const groups = s.match(regModuleId)?.groups;
3
+ var _a;
4
+ const groups = (_a = s.match(regModuleId)) == null ? void 0 : _a.groups;
4
5
  if (!groups) {
5
6
  return void 0;
6
7
  }
@@ -1 +1 @@
1
- {"version":3,"file":"parseModuleId.js","sources":["../../src/modules/parseModuleId.ts"],"sourcesContent":["// https://regex101.com/r/eMcXQ9/1\nconst regModuleId =\n /^(?<n>(?:@(?<org>[a-z0-9-~][a-z0-9-._~]*)\\/)?(?<pkg>[a-z0-9-~][a-z0-9-._~]*))(?:@(?<v>[-a-z0-9><=_.^~]+))?(?<p>\\/[^\\r\\n]*)?$/;\n\nexport type ParsedModuleId = {\n id: string; // name@version\n name: string; // @org/pkg, pkg\n version?: string; // 1.1.1\n range: string; // version, tag, range\n pkg: string;\n path?: string;\n org?: string;\n versioned: boolean; // is module id contain a version specifier\n} & (\n | { scoped: false }\n | {\n scoped: true;\n org: string;\n }\n);\n\n/**\n * Parse NPM module id\n *\n * @example\n * parseModuleId('@wener/reaction@latest/index.js')\n * // { id: '@wener/reaction@latest', name: '@wener/reaction', version: 'latest', range: 'latest', pkg: 'reaction', path: '/index.js', scoped: true, org: 'wener' }\n */\nexport function parseModuleId(s: string): ParsedModuleId | undefined {\n const groups = s.match(regModuleId)?.groups;\n if (!groups) {\n return undefined;\n }\n const { n: name, v: version, p: path, org, pkg } = groups;\n const scoped = Boolean(org);\n const v = /^\\d+\\.\\d+\\.\\d+/.test(version) ? version : undefined;\n const range = version || 'latest';\n const o: ParsedModuleId = {\n id: `${name}@${range}`,\n name,\n range,\n scoped,\n pkg,\n org,\n versioned: Boolean(version),\n };\n if (v) {\n o.version = v;\n }\n if (path) {\n o.path = path;\n }\n if (!o.scoped) {\n delete o.org;\n }\n return o;\n}\n"],"names":[],"mappings":"AACA,MAAM,WACJ,GAAA,8HAAA,CAAA;AA0BK,SAAS,cAAc,CAAuC,EAAA;AACnE,EAAA,MAAM,MAAS,GAAA,CAAA,CAAE,KAAM,CAAA,WAAW,CAAG,EAAA,MAAA,CAAA;AACrC,EAAA,IAAI,CAAC,MAAQ,EAAA;AACX,IAAO,OAAA,KAAA,CAAA,CAAA;AAAA,GACT;AACA,EAAM,MAAA,EAAE,GAAG,IAAM,EAAA,CAAA,EAAG,SAAS,CAAG,EAAA,IAAA,EAAM,GAAK,EAAA,GAAA,EAAQ,GAAA,MAAA,CAAA;AACnD,EAAM,MAAA,MAAA,GAAS,QAAQ,GAAG,CAAA,CAAA;AAC1B,EAAA,MAAM,CAAI,GAAA,gBAAA,CAAiB,IAAK,CAAA,OAAO,IAAI,OAAU,GAAA,KAAA,CAAA,CAAA;AACrD,EAAA,MAAM,QAAQ,OAAW,IAAA,QAAA,CAAA;AACzB,EAAA,MAAM,CAAoB,GAAA;AAAA,IACxB,EAAA,EAAI,GAAG,IAAQ,CAAA,CAAA,EAAA,KAAA,CAAA,CAAA;AAAA,IACf,IAAA;AAAA,IACA,KAAA;AAAA,IACA,MAAA;AAAA,IACA,GAAA;AAAA,IACA,GAAA;AAAA,IACA,SAAA,EAAW,QAAQ,OAAO,CAAA;AAAA,GAC5B,CAAA;AACA,EAAA,IAAI,CAAG,EAAA;AACL,IAAA,CAAA,CAAE,OAAU,GAAA,CAAA,CAAA;AAAA,GACd;AACA,EAAA,IAAI,IAAM,EAAA;AACR,IAAA,CAAA,CAAE,IAAO,GAAA,IAAA,CAAA;AAAA,GACX;AACA,EAAI,IAAA,CAAC,EAAE,MAAQ,EAAA;AACb,IAAA,OAAO,CAAE,CAAA,GAAA,CAAA;AAAA,GACX;AACA,EAAO,OAAA,CAAA,CAAA;AACT;;;;"}
1
+ {"version":3,"file":"parseModuleId.js","sources":["../../src/modules/parseModuleId.ts"],"sourcesContent":["// https://regex101.com/r/eMcXQ9/1\nconst regModuleId =\n /^(?<n>(?:@(?<org>[a-z0-9-~][a-z0-9-._~]*)\\/)?(?<pkg>[a-z0-9-~][a-z0-9-._~]*))(?:@(?<v>[-a-z0-9><=_.^~]+))?(?<p>\\/[^\\r\\n]*)?$/;\n\nexport type ParsedModuleId = {\n id: string; // name@version\n name: string; // @org/pkg, pkg\n version?: string; // 1.1.1\n range: string; // version, tag, range\n pkg: string;\n path?: string;\n org?: string;\n versioned: boolean; // is module id contain a version specifier\n} & (\n | { scoped: false }\n | {\n scoped: true;\n org: string;\n }\n);\n\n/**\n * Parse NPM module id\n *\n * @example\n * parseModuleId('@wener/reaction@latest/index.js')\n * // { id: '@wener/reaction@latest', name: '@wener/reaction', version: 'latest', range: 'latest', pkg: 'reaction', path: '/index.js', scoped: true, org: 'wener' }\n */\nexport function parseModuleId(s: string): ParsedModuleId | undefined {\n const groups = s.match(regModuleId)?.groups;\n if (!groups) {\n return undefined;\n }\n const { n: name, v: version, p: path, org, pkg } = groups;\n const scoped = Boolean(org);\n const v = /^\\d+\\.\\d+\\.\\d+/.test(version) ? version : undefined;\n const range = version || 'latest';\n const o: ParsedModuleId = {\n id: `${name}@${range}`,\n name,\n range,\n scoped,\n pkg,\n org,\n versioned: Boolean(version),\n };\n if (v) {\n o.version = v;\n }\n if (path) {\n o.path = path;\n }\n if (!o.scoped) {\n delete o.org;\n }\n return o;\n}\n"],"names":[],"mappings":"AACA,MAAM,WACJ,GAAA,8HAAA,CAAA;AA0BK,SAAS,cAAc,CAAuC,EAAA;AA5BrE,EAAA,IAAA,EAAA,CAAA;AA6BE,EAAA,MAAM,MAAS,GAAA,CAAA,EAAA,GAAA,CAAA,CAAE,KAAM,CAAA,WAAW,MAAnB,IAAsB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAA,CAAA;AACrC,EAAA,IAAI,CAAC,MAAQ,EAAA;AACX,IAAO,OAAA,KAAA,CAAA,CAAA;AAAA,GACT;AACA,EAAM,MAAA,EAAE,GAAG,IAAM,EAAA,CAAA,EAAG,SAAS,CAAG,EAAA,IAAA,EAAM,GAAK,EAAA,GAAA,EAAQ,GAAA,MAAA,CAAA;AACnD,EAAM,MAAA,MAAA,GAAS,QAAQ,GAAG,CAAA,CAAA;AAC1B,EAAA,MAAM,CAAI,GAAA,gBAAA,CAAiB,IAAK,CAAA,OAAO,IAAI,OAAU,GAAA,KAAA,CAAA,CAAA;AACrD,EAAA,MAAM,QAAQ,OAAW,IAAA,QAAA,CAAA;AACzB,EAAA,MAAM,CAAoB,GAAA;AAAA,IACxB,EAAA,EAAI,GAAG,IAAQ,CAAA,CAAA,EAAA,KAAA,CAAA,CAAA;AAAA,IACf,IAAA;AAAA,IACA,KAAA;AAAA,IACA,MAAA;AAAA,IACA,GAAA;AAAA,IACA,GAAA;AAAA,IACA,SAAA,EAAW,QAAQ,OAAO,CAAA;AAAA,GAC5B,CAAA;AACA,EAAA,IAAI,CAAG,EAAA;AACL,IAAA,CAAA,CAAE,OAAU,GAAA,CAAA,CAAA;AAAA,GACd;AACA,EAAA,IAAI,IAAM,EAAA;AACR,IAAA,CAAA,CAAE,IAAO,GAAA,IAAA,CAAA;AAAA,GACX;AACA,EAAI,IAAA,CAAC,EAAE,MAAQ,EAAA;AACb,IAAA,OAAO,CAAE,CAAA,GAAA,CAAA;AAAA,GACX;AACA,EAAO,OAAA,CAAA,CAAA;AACT;;;;"}
@@ -14,7 +14,7 @@ function createProxyFetch(proxy, fetch) {
14
14
  if (!NodeRequest) {
15
15
  ({ Request: NodeRequest, default: NodeFetch } = await import('node-fetch'));
16
16
  }
17
- fetch ||= NodeFetch;
17
+ fetch || (fetch = NodeFetch);
18
18
  if (url instanceof Request) {
19
19
  return fetch(new Request(url, { agent }));
20
20
  }
@@ -1 +1 @@
1
- {"version":3,"file":"createProxyFetch.js","sources":["../../src/servers/createProxyFetch.ts"],"sourcesContent":["import { FetchLike } from '../fetch';\n\nexport function createProxyFetch(proxy?: string, fetch?: FetchLike): FetchLike {\n if (!proxy) {\n return fetch || globalThis.fetch;\n }\n\n let agent: any;\n const Request = globalThis.Request;\n let NodeRequest: any;\n let NodeFetch: any;\n return async (url, init?: RequestInit) => {\n if (!agent) {\n const { default: createHttpsProxyAgent } = await import('https-proxy-agent');\n agent = createHttpsProxyAgent(proxy);\n }\n\n // node-fetch 才可以,node v18 fetch 不支持\n if (!NodeRequest) {\n ({ Request: NodeRequest, default: NodeFetch } = await import('node-fetch'));\n }\n\n fetch ||= NodeFetch;\n\n if (url instanceof Request) {\n return (fetch as any)(new Request(url, { agent } as any));\n }\n if ((url as any) instanceof NodeRequest) {\n return (fetch as any)(new NodeRequest(url, { agent } as any));\n }\n return (fetch as any)(url, {\n ...init,\n agent,\n } as any);\n };\n}\n"],"names":[],"mappings":"AAEgB,SAAA,gBAAA,CAAiB,OAAgB,KAA8B,EAAA;AAC7E,EAAA,IAAI,CAAC,KAAO,EAAA;AACV,IAAA,OAAO,SAAS,UAAW,CAAA,KAAA,CAAA;AAAA,GAC7B;AAEA,EAAI,IAAA,KAAA,CAAA;AACJ,EAAA,MAAM,UAAU,UAAW,CAAA,OAAA,CAAA;AAC3B,EAAI,IAAA,WAAA,CAAA;AACJ,EAAI,IAAA,SAAA,CAAA;AACJ,EAAO,OAAA,OAAO,KAAK,IAAuB,KAAA;AACxC,IAAA,IAAI,CAAC,KAAO,EAAA;AACV,MAAA,MAAM,EAAE,OAAS,EAAA,qBAAA,EAA0B,GAAA,MAAM,OAAO,mBAAmB,CAAA,CAAA;AAC3E,MAAA,KAAA,GAAQ,sBAAsB,KAAK,CAAA,CAAA;AAAA,KACrC;AAGA,IAAA,IAAI,CAAC,WAAa,EAAA;AAChB,MAAC,CAAA,EAAE,SAAS,WAAa,EAAA,OAAA,EAAS,WAAc,GAAA,MAAM,OAAO,YAAY,CAAA,EAAA;AAAA,KAC3E;AAEA,IAAU,KAAA,KAAA,SAAA,CAAA;AAEV,IAAA,IAAI,eAAe,OAAS,EAAA;AAC1B,MAAA,OAAQ,MAAc,IAAI,OAAA,CAAQ,KAAK,EAAE,KAAA,EAAc,CAAC,CAAA,CAAA;AAAA,KAC1D;AACA,IAAA,IAAK,eAAuB,WAAa,EAAA;AACvC,MAAA,OAAQ,MAAc,IAAI,WAAA,CAAY,KAAK,EAAE,KAAA,EAAc,CAAC,CAAA,CAAA;AAAA,KAC9D;AACA,IAAA,OAAQ,MAAc,GAAK,EAAA;AAAA,MACzB,GAAG,IAAA;AAAA,MACH,KAAA;AAAA,KACM,CAAA,CAAA;AAAA,GACV,CAAA;AACF;;;;"}
1
+ {"version":3,"file":"createProxyFetch.js","sources":["../../src/servers/createProxyFetch.ts"],"sourcesContent":["import { FetchLike } from '../fetch';\n\nexport function createProxyFetch(proxy?: string, fetch?: FetchLike): FetchLike {\n if (!proxy) {\n return fetch || globalThis.fetch;\n }\n\n let agent: any;\n const Request = globalThis.Request;\n let NodeRequest: any;\n let NodeFetch: any;\n return async (url, init?: RequestInit) => {\n if (!agent) {\n const { default: createHttpsProxyAgent } = await import('https-proxy-agent');\n agent = createHttpsProxyAgent(proxy);\n }\n\n // node-fetch 才可以,node v18 fetch 不支持\n if (!NodeRequest) {\n ({ Request: NodeRequest, default: NodeFetch } = await import('node-fetch'));\n }\n\n fetch ||= NodeFetch;\n\n if (url instanceof Request) {\n return (fetch as any)(new Request(url, { agent } as any));\n }\n if ((url as any) instanceof NodeRequest) {\n return (fetch as any)(new NodeRequest(url, { agent } as any));\n }\n return (fetch as any)(url, {\n ...init,\n agent,\n } as any);\n };\n}\n"],"names":[],"mappings":"AAEgB,SAAA,gBAAA,CAAiB,OAAgB,KAA8B,EAAA;AAC7E,EAAA,IAAI,CAAC,KAAO,EAAA;AACV,IAAA,OAAO,SAAS,UAAW,CAAA,KAAA,CAAA;AAAA,GAC7B;AAEA,EAAI,IAAA,KAAA,CAAA;AACJ,EAAA,MAAM,UAAU,UAAW,CAAA,OAAA,CAAA;AAC3B,EAAI,IAAA,WAAA,CAAA;AACJ,EAAI,IAAA,SAAA,CAAA;AACJ,EAAO,OAAA,OAAO,KAAK,IAAuB,KAAA;AACxC,IAAA,IAAI,CAAC,KAAO,EAAA;AACV,MAAA,MAAM,EAAE,OAAS,EAAA,qBAAA,EAA0B,GAAA,MAAM,OAAO,mBAAmB,CAAA,CAAA;AAC3E,MAAA,KAAA,GAAQ,sBAAsB,KAAK,CAAA,CAAA;AAAA,KACrC;AAGA,IAAA,IAAI,CAAC,WAAa,EAAA;AAChB,MAAC,CAAA,EAAE,SAAS,WAAa,EAAA,OAAA,EAAS,WAAc,GAAA,MAAM,OAAO,YAAY,CAAA,EAAA;AAAA,KAC3E;AAEA,IAAU,KAAA,KAAA,KAAA,GAAA,SAAA,CAAA,CAAA;AAEV,IAAA,IAAI,eAAe,OAAS,EAAA;AAC1B,MAAA,OAAQ,MAAc,IAAI,OAAA,CAAQ,KAAK,EAAE,KAAA,EAAc,CAAC,CAAA,CAAA;AAAA,KAC1D;AACA,IAAA,IAAK,eAAuB,WAAa,EAAA;AACvC,MAAA,OAAQ,MAAc,IAAI,WAAA,CAAY,KAAK,EAAE,KAAA,EAAc,CAAC,CAAA,CAAA;AAAA,KAC9D;AACA,IAAA,OAAQ,MAAc,GAAK,EAAA;AAAA,MACzB,GAAG,IAAA;AAAA,MACH,KAAA;AAAA,KACM,CAAA,CAAA;AAAA,GACV,CAAA;AACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"polyfillFetch.js","sources":["../../src/servers/polyfillFetch.ts"],"sourcesContent":["import type { MaybePromise } from '../asyncs/MaybePromise';\n\nexport function polyfillFetch(nodeFetch: typeof import('node-fetch')): boolean;\nexport function polyfillFetch(nodeFetch?: undefined): Promise<boolean>;\nexport function polyfillFetch(nodeFetch?: typeof import('node-fetch')): MaybePromise<boolean> {\n if ('fetch' in globalThis) {\n return false;\n }\n // sync mode\n if (nodeFetch) {\n const { default: fetch, Response, Headers, Request, AbortError, FetchError, FormData, Blob, File } = nodeFetch;\n Object.assign(globalThis, {\n fetch,\n Response,\n Headers,\n Request,\n AbortError,\n FetchError,\n FormData,\n Blob,\n File,\n });\n return true;\n }\n return import('node-fetch').then((v) => polyfillFetch(v));\n}\n"],"names":[],"mappings":"AAIO,SAAS,cAAc,SAAgE,EAAA;AAC5F,EAAA,IAAI,WAAW,UAAY,EAAA;AACzB,IAAO,OAAA,KAAA,CAAA;AAAA,GACT;AAEA,EAAA,IAAI,SAAW,EAAA;AACb,IAAM,MAAA,EAAE,OAAS,EAAA,KAAA,EAAO,QAAU,EAAA,OAAA,EAAS,OAAS,EAAA,UAAA,EAAY,UAAY,EAAA,QAAA,EAAU,IAAM,EAAA,IAAA,EAAS,GAAA,SAAA,CAAA;AACrG,IAAA,MAAA,CAAO,OAAO,UAAY,EAAA;AAAA,MACxB,KAAA;AAAA,MACA,QAAA;AAAA,MACA,OAAA;AAAA,MACA,OAAA;AAAA,MACA,UAAA;AAAA,MACA,UAAA;AAAA,MACA,QAAA;AAAA,MACA,IAAA;AAAA,MACA,IAAA;AAAA,KACD,CAAA,CAAA;AACD,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AACA,EAAO,OAAA,OAAO,YAAY,CAAE,CAAA,IAAA,CAAK,CAAC,CAAM,KAAA,aAAA,CAAc,CAAC,CAAC,CAAA,CAAA;AAC1D;;;;"}
1
+ {"version":3,"file":"polyfillFetch.js","sources":["../../src/servers/polyfillFetch.ts"],"sourcesContent":["import type { MaybePromise } from '../asyncs/MaybePromise';\n\nexport function polyfillFetch(nodeFetch: typeof import('node-fetch')): boolean;\nexport function polyfillFetch(nodeFetch?: undefined): Promise<boolean>;\nexport function polyfillFetch(nodeFetch?: typeof import('node-fetch')): MaybePromise<boolean> {\n if ('fetch' in globalThis) {\n return false;\n }\n // sync mode\n if (nodeFetch) {\n const { default: fetch, Response, Headers, Request, AbortError, FetchError, FormData, Blob, File } = nodeFetch;\n Object.assign(globalThis, {\n fetch,\n Response,\n Headers,\n Request,\n AbortError,\n FetchError,\n FormData,\n Blob,\n File,\n });\n // abort controller\n return true;\n }\n return import('node-fetch').then((v) => polyfillFetch(v));\n}\n"],"names":[],"mappings":"AAIO,SAAS,cAAc,SAAgE,EAAA;AAC5F,EAAA,IAAI,WAAW,UAAY,EAAA;AACzB,IAAO,OAAA,KAAA,CAAA;AAAA,GACT;AAEA,EAAA,IAAI,SAAW,EAAA;AACb,IAAM,MAAA,EAAE,OAAS,EAAA,KAAA,EAAO,QAAU,EAAA,OAAA,EAAS,OAAS,EAAA,UAAA,EAAY,UAAY,EAAA,QAAA,EAAU,IAAM,EAAA,IAAA,EAAS,GAAA,SAAA,CAAA;AACrG,IAAA,MAAA,CAAO,OAAO,UAAY,EAAA;AAAA,MACxB,KAAA;AAAA,MACA,QAAA;AAAA,MACA,OAAA;AAAA,MACA,OAAA;AAAA,MACA,UAAA;AAAA,MACA,UAAA;AAAA,MACA,QAAA;AAAA,MACA,IAAA;AAAA,MACA,IAAA;AAAA,KACD,CAAA,CAAA;AAED,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AACA,EAAO,OAAA,OAAO,YAAY,CAAE,CAAA,IAAA,CAAK,CAAC,CAAM,KAAA,aAAA,CAAc,CAAC,CAAC,CAAA,CAAA;AAC1D;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wener/utils",
3
- "version": "1.1.11",
3
+ "version": "1.1.12",
4
4
  "type": "module",
5
5
  "description": "Utils for daily use",
6
6
  "repository": {
@@ -58,6 +58,7 @@
58
58
  ],
59
59
  "devDependencies": {
60
60
  "@types/lodash": "^4.14.191",
61
+ "@types/ws": "^8.5.4",
61
62
  "ava": "^5.1.1",
62
63
  "https-proxy-agent": "^5.0.1",
63
64
  "lodash": "^4.17.21",
package/src/index.ts CHANGED
@@ -86,3 +86,6 @@ export { PEM } from './crypto/pem/pem';
86
86
  export { createRandom } from './maths/random';
87
87
 
88
88
  export { type FetchLike } from './fetch';
89
+
90
+ // bundled
91
+ export { default as ms } from './libs/ms';
@@ -1,5 +1,5 @@
1
1
  export function parseBoolean(s: string | boolean | number | null | undefined, strict: true): boolean | undefined;
2
- export function parseBoolean(s: string | boolean | number | null | undefined): boolean;
2
+ export function parseBoolean(s: string | boolean | number | null | undefined | any): boolean;
3
3
  export function parseBoolean(s?: string | boolean | number | null, strict = false): boolean | undefined {
4
4
  if (typeof s === 'boolean') {
5
5
  return s;
@@ -0,0 +1 @@
1
+ - https://github.com/vercel/ms/blob/master/src/index.ts
package/src/libs/ms.ts ADDED
@@ -0,0 +1,205 @@
1
+ // Helpers.
2
+ const s = 1000;
3
+ const m = s * 60;
4
+ const h = m * 60;
5
+ const d = h * 24;
6
+ const w = d * 7;
7
+ const y = d * 365.25;
8
+
9
+ type Unit =
10
+ | 'Years'
11
+ | 'Year'
12
+ | 'Yrs'
13
+ | 'Yr'
14
+ | 'Y'
15
+ | 'Weeks'
16
+ | 'Week'
17
+ | 'W'
18
+ | 'Days'
19
+ | 'Day'
20
+ | 'D'
21
+ | 'Hours'
22
+ | 'Hour'
23
+ | 'Hrs'
24
+ | 'Hr'
25
+ | 'H'
26
+ | 'Minutes'
27
+ | 'Minute'
28
+ | 'Mins'
29
+ | 'Min'
30
+ | 'M'
31
+ | 'Seconds'
32
+ | 'Second'
33
+ | 'Secs'
34
+ | 'Sec'
35
+ | 's'
36
+ | 'Milliseconds'
37
+ | 'Millisecond'
38
+ | 'Msecs'
39
+ | 'Msec'
40
+ | 'Ms';
41
+
42
+ type UnitAnyCase = Unit | Uppercase<Unit> | Lowercase<Unit>;
43
+
44
+ export type StringValue = `${number}` | `${number}${UnitAnyCase}` | `${number} ${UnitAnyCase}`;
45
+
46
+ interface Options {
47
+ /**
48
+ * Set to `true` to use verbose formatting. Defaults to `false`.
49
+ */
50
+ long?: boolean;
51
+ }
52
+
53
+ /**
54
+ * Parse or format the given value.
55
+ *
56
+ * @param value - The string or number to convert
57
+ * @param options - Options for the conversion
58
+ * @throws Error if `value` is not a non-empty string or a number
59
+ */
60
+ function msFn(value: StringValue, options?: Options): number;
61
+ function msFn(value: number, options?: Options): string;
62
+ function msFn(value: StringValue | number, options?: Options): number | string {
63
+ try {
64
+ if (typeof value === 'string' && value.length > 0) {
65
+ return parse(value);
66
+ } else if (typeof value === 'number' && isFinite(value)) {
67
+ return options?.long ? fmtLong(value) : fmtShort(value);
68
+ }
69
+ throw new Error('Value is not a string or number.');
70
+ } catch (error) {
71
+ const message = isError(error)
72
+ ? `${error.message}. value=${JSON.stringify(value)}`
73
+ : 'An unknown error has occurred.';
74
+ throw new Error(message);
75
+ }
76
+ }
77
+
78
+ /**
79
+ * Parse the given string and return milliseconds.
80
+ *
81
+ * @param str - A string to parse to milliseconds
82
+ * @returns The parsed value in milliseconds, or `NaN` if the string can't be
83
+ * parsed
84
+ */
85
+ function parse(str: string): number {
86
+ if (str.length > 100) {
87
+ throw new Error('Value exceeds the maximum length of 100 characters.');
88
+ }
89
+ const match =
90
+ /^(?<value>-?(?:\d+)?\.?\d+) *(?<type>milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(
91
+ str,
92
+ );
93
+ // Named capture groups need to be manually typed today.
94
+ // https://github.com/microsoft/TypeScript/issues/32098
95
+ const groups = match?.groups as { value: string; type?: string } | undefined;
96
+ if (!groups) {
97
+ return NaN;
98
+ }
99
+ const n = parseFloat(groups.value);
100
+ const type = (groups.type || 'ms').toLowerCase() as Lowercase<Unit>;
101
+ switch (type) {
102
+ case 'years':
103
+ case 'year':
104
+ case 'yrs':
105
+ case 'yr':
106
+ case 'y':
107
+ return n * y;
108
+ case 'weeks':
109
+ case 'week':
110
+ case 'w':
111
+ return n * w;
112
+ case 'days':
113
+ case 'day':
114
+ case 'd':
115
+ return n * d;
116
+ case 'hours':
117
+ case 'hour':
118
+ case 'hrs':
119
+ case 'hr':
120
+ case 'h':
121
+ return n * h;
122
+ case 'minutes':
123
+ case 'minute':
124
+ case 'mins':
125
+ case 'min':
126
+ case 'm':
127
+ return n * m;
128
+ case 'seconds':
129
+ case 'second':
130
+ case 'secs':
131
+ case 'sec':
132
+ case 's':
133
+ return n * s;
134
+ case 'milliseconds':
135
+ case 'millisecond':
136
+ case 'msecs':
137
+ case 'msec':
138
+ case 'ms':
139
+ return n;
140
+ default:
141
+ // This should never occur.
142
+ throw new Error(`The unit ${type as string} was matched, but no matching case exists.`);
143
+ }
144
+ }
145
+
146
+ // eslint-disable-next-line import/no-default-export
147
+ export default msFn;
148
+
149
+ /**
150
+ * Short format for `ms`.
151
+ */
152
+ function fmtShort(ms: number): StringValue {
153
+ const msAbs = Math.abs(ms);
154
+ if (msAbs >= d) {
155
+ return `${Math.round(ms / d)}d`;
156
+ }
157
+ if (msAbs >= h) {
158
+ return `${Math.round(ms / h)}h`;
159
+ }
160
+ if (msAbs >= m) {
161
+ return `${Math.round(ms / m)}m`;
162
+ }
163
+ if (msAbs >= s) {
164
+ return `${Math.round(ms / s)}s`;
165
+ }
166
+ return `${ms}ms`;
167
+ }
168
+
169
+ /**
170
+ * Long format for `ms`.
171
+ */
172
+ function fmtLong(ms: number): StringValue {
173
+ const msAbs = Math.abs(ms);
174
+ if (msAbs >= d) {
175
+ return plural(ms, msAbs, d, 'day');
176
+ }
177
+ if (msAbs >= h) {
178
+ return plural(ms, msAbs, h, 'hour');
179
+ }
180
+ if (msAbs >= m) {
181
+ return plural(ms, msAbs, m, 'minute');
182
+ }
183
+ if (msAbs >= s) {
184
+ return plural(ms, msAbs, s, 'second');
185
+ }
186
+ return `${ms} ms`;
187
+ }
188
+
189
+ /**
190
+ * Pluralization helper.
191
+ */
192
+ function plural(ms: number, msAbs: number, n: number, name: string): StringValue {
193
+ const isPlural = msAbs >= n * 1.5;
194
+ return `${Math.round(ms / n)} ${name}${isPlural ? 's' : ''}` as StringValue;
195
+ }
196
+
197
+ /**
198
+ * A type guard for errors.
199
+ *
200
+ * @param value - The value to test
201
+ * @returns A boolean `true` if the provided value is an Error-like object
202
+ */
203
+ function isError(value: unknown): value is Error {
204
+ return typeof value === 'object' && value !== null && 'message' in value;
205
+ }
@@ -20,6 +20,7 @@ export function polyfillFetch(nodeFetch?: typeof import('node-fetch')): MaybePro
20
20
  Blob,
21
21
  File,
22
22
  });
23
+ // abort controller
23
24
  return true;
24
25
  }
25
26
  return import('node-fetch').then((v) => polyfillFetch(v));
@@ -0,0 +1,14 @@
1
+ import type { MaybePromise } from '../asyncs/MaybePromise';
2
+
3
+ export function polyfillWebSocket(ws: any): boolean;
4
+ export function polyfillWebSocket(ws?: undefined): Promise<boolean>;
5
+ export function polyfillWebSocket(ws?: any): MaybePromise<boolean> {
6
+ if ('WebSocket' in globalThis) {
7
+ return false;
8
+ }
9
+ if (ws) {
10
+ const { WebSocket } = ws;
11
+ Object.assign(globalThis, { WebSocket });
12
+ }
13
+ return import('ws').then((ws) => polyfillWebSocket(ws));
14
+ }