{"version":3,"sources":["../src/node/getHashNode.ts","../src/core/assign.ts","../src/core/is.ts","../src/core/tryCatch.ts","../src/core/send.ts","../src/node/sendNode.ts"],"sourcesContent":["import { createHash } from 'crypto';\n\nasync function sha256(message: string): Promise<string> {\n  const hash = createHash('sha256');\n  hash.update(message);\n  return hash.digest('hex');\n}\n\nexport async function getHashNode(\n  str: string,\n  length?: number,\n): Promise<string> {\n  return (await sha256(str)).slice(0, length);\n}\n","interface Assign {\n  merge?: boolean; // Merge array properties (default) instead of overriding them\n  shallow?: boolean; // Create a shallow copy (default) instead of updating the target object\n  extend?: boolean; // Extend the target with new properties (default) instead of only updating existing ones\n}\n\nconst defaultOptions: Assign = {\n  merge: true,\n  shallow: true,\n  extend: true,\n};\n\nexport function assign<T extends object, U extends object>(\n  target: T,\n  obj: U = {} as U,\n  options: Assign = {},\n): T & U {\n  options = { ...defaultOptions, ...options };\n\n  const finalObj = Object.entries(obj).reduce((acc, [key, sourceProp]) => {\n    const targetProp = target[key as keyof typeof target];\n\n    // Only merge arrays\n    if (\n      options.merge &&\n      Array.isArray(targetProp) &&\n      Array.isArray(sourceProp)\n    ) {\n      acc[key as keyof typeof acc] = sourceProp.reduce(\n        (acc, item) => {\n          // Remove duplicates\n          return acc.includes(item) ? acc : [...acc, item];\n        },\n        [...targetProp],\n      );\n    } else if (options.extend || key in target) {\n      // Extend the target with new properties or update existing ones\n      acc[key as keyof typeof acc] = sourceProp;\n    }\n\n    return acc;\n  }, {} as U);\n\n  // Handle shallow or deep copy based on options\n  if (options.shallow) {\n    return { ...target, ...finalObj };\n  } else {\n    Object.assign(target, finalObj);\n    return target as T & U;\n  }\n}\n","import type { WalkerOS } from '@elbwalker/types';\nimport { Const } from './constants';\n\nexport function isArguments(value: unknown): value is IArguments {\n  return Object.prototype.toString.call(value) === '[object Arguments]';\n}\n\nexport function isArray<T>(value: unknown): value is T[] {\n  return Array.isArray(value);\n}\n\nexport function isBoolean(value: unknown): value is boolean {\n  return typeof value === 'boolean';\n}\n\nexport function isCommand(entity: string) {\n  return entity === Const.Commands.Walker;\n}\n\nexport function isDefined<T>(val: T | undefined): val is T {\n  return typeof val !== 'undefined';\n}\n\nexport function isElementOrDocument(elem: unknown): elem is Element {\n  return elem === document || elem instanceof Element;\n}\n\nexport function isNumber(value: unknown): value is number {\n  return typeof value === 'number' && !Number.isNaN(value);\n}\n\nexport function isObject(value: unknown): value is WalkerOS.AnyObject {\n  return (\n    typeof value === 'object' &&\n    value !== null &&\n    !isArray(value) &&\n    Object.prototype.toString.call(value) === '[object Object]'\n  );\n}\n\nexport function isSameType<T>(\n  variable: unknown,\n  type: T,\n): variable is typeof type {\n  return typeof variable === typeof type;\n}\n\nexport function isString(value: unknown): value is string {\n  return typeof value === 'string';\n}\n","// Use function overload to support different return type depending on onError\n// Types\nexport function tryCatch<P extends unknown[], R, S>(\n  fn: (...args: P) => R | undefined,\n  onError: (err: unknown) => S,\n  onFinally?: () => void,\n): (...args: P) => R | S;\nexport function tryCatch<P extends unknown[], R>(\n  fn: (...args: P) => R | undefined,\n  onError?: undefined,\n  onFinally?: () => void,\n): (...args: P) => R | undefined;\n// Implementation\nexport function tryCatch<P extends unknown[], R, S>(\n  fn: (...args: P) => R | undefined,\n  onError?: (err: unknown) => S,\n  onFinally?: () => void,\n): (...args: P) => R | S | undefined {\n  return function (...args: P): R | S | undefined {\n    try {\n      return fn(...args);\n    } catch (err) {\n      if (!onError) return;\n      return onError(err);\n    } finally {\n      onFinally?.();\n    }\n  };\n}\n\n// Use function overload to support different return type depending on onError\n// Types\nexport function tryCatchAsync<P extends unknown[], R, S>(\n  fn: (...args: P) => R,\n  onError: (err: unknown) => S,\n  onFinally?: () => void | Promise<void>,\n): (...args: P) => Promise<R | S>;\nexport function tryCatchAsync<P extends unknown[], R>(\n  fn: (...args: P) => R,\n  onError?: undefined,\n  onFinally?: () => void | Promise<void>,\n): (...args: P) => Promise<R | undefined>;\n// Implementation\nexport function tryCatchAsync<P extends unknown[], R, S>(\n  fn: (...args: P) => R,\n  onError?: (err: unknown) => S,\n  onFinally?: () => void | Promise<void>,\n): (...args: P) => Promise<R | S | undefined> {\n  return async function (...args: P): Promise<R | S | undefined> {\n    try {\n      return await fn(...args);\n    } catch (err) {\n      if (!onError) return;\n      return await onError(err);\n    } finally {\n      await onFinally?.();\n    }\n  };\n}\n","import type { WalkerOS } from '@elbwalker/types';\nimport { isSameType } from './is';\nimport { assign } from './assign';\n\nexport type SendDataValue = WalkerOS.Property | WalkerOS.Properties;\nexport type SendHeaders = { [key: string]: string };\n\nexport interface SendResponse {\n  ok: boolean;\n  data?: unknown;\n  error?: string;\n}\n\nexport function transformData(data?: SendDataValue): string | undefined {\n  if (data === undefined) return data;\n\n  return isSameType(data, '' as string) ? data : JSON.stringify(data);\n}\n\nexport function getHeaders(headers: SendHeaders = {}): SendHeaders {\n  return assign(\n    {\n      'Content-Type': 'application/json; charset=utf-8',\n    },\n    headers,\n  );\n}\n","import type { SendDataValue, SendResponse, SendHeaders } from '../';\nimport { getHeaders, transformData, tryCatch } from '../';\nimport * as http from 'http';\nimport * as https from 'https';\n\nexport interface SendNodeOptions {\n  headers?: SendHeaders;\n  method?: string;\n  timeout?: number;\n}\n\nexport function sendNode(\n  url: string,\n  data?: SendDataValue,\n  options: SendNodeOptions = {},\n): Promise<SendResponse> {\n  const headers = getHeaders(options.headers);\n  const body = transformData(data);\n  const method = options.method || 'POST';\n  const timeout = options.timeout || 5000;\n\n  return new Promise((resolve) => {\n    const urlObj = new URL(url);\n    const lib = urlObj.protocol === 'https:' ? https : http;\n    const options: http.RequestOptions | https.RequestOptions = {\n      method,\n      headers,\n    };\n\n    const req = lib.request(urlObj, options, (res) => {\n      const chunks: Uint8Array[] = [];\n\n      res.on('data', (chunk) => {\n        chunks.push(chunk);\n      });\n\n      res.on('end', () => {\n        const ok = !!(\n          res.statusCode &&\n          res.statusCode >= 200 &&\n          res.statusCode < 300\n        );\n\n        const responseData = Buffer.concat(chunks).toString();\n        const parsedData = tryCatch(\n          JSON.parse,\n          () => responseData,\n        )(responseData);\n\n        resolve({\n          ok,\n          data: parsedData,\n          error: ok ? undefined : `${res.statusCode} ${res.statusMessage}`,\n        });\n      });\n    });\n\n    req.on('error', (error) => {\n      resolve({\n        ok: false,\n        error: error.message,\n      });\n    });\n\n    req.on('timeout', () => {\n      req.destroy();\n      resolve({\n        ok: false,\n        error: 'Request timeout',\n      });\n    });\n\n    req.setTimeout(timeout);\n\n    if (body) req.write(body);\n\n    req.end();\n  });\n}\n"],"mappings":"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","names":["acc","options"]}