@rzl-zone/build-tools 0.0.10 → 0.0.12-beta.0

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 (80) hide show
  1. package/dist/.references/index.d.cts +1 -1
  2. package/dist/.references/index.d.ts +1 -1
  3. package/dist/bundler/rolldown.cjs +4 -4
  4. package/dist/bundler/rolldown.cjs.map +1 -1
  5. package/dist/bundler/rolldown.d.cts +2 -2
  6. package/dist/bundler/rolldown.d.ts +2 -2
  7. package/dist/bundler/rolldown.js +1 -1
  8. package/dist/bundler/rolldown.js.map +1 -1
  9. package/dist/bundler/tsdown.cjs +9 -9
  10. package/dist/bundler/tsdown.cjs.map +1 -1
  11. package/dist/bundler/tsdown.d.cts +2 -2
  12. package/dist/bundler/tsdown.d.ts +2 -2
  13. package/dist/bundler/tsdown.js +3 -3
  14. package/dist/bundler/tsdown.js.map +1 -1
  15. package/dist/bundler/utils.cjs +2 -2
  16. package/dist/bundler/utils.cjs.map +1 -1
  17. package/dist/bundler/utils.d.cts +2 -2
  18. package/dist/bundler/utils.d.ts +2 -2
  19. package/dist/bundler/utils.js +2 -2
  20. package/dist/bundler/utils.js.map +1 -1
  21. package/dist/client-E8kISMNO.cjs +81 -0
  22. package/dist/client-E8kISMNO.cjs.map +1 -0
  23. package/dist/client-MFOxk6MV.js +75 -0
  24. package/dist/client-MFOxk6MV.js.map +1 -0
  25. package/dist/commander-kit/index.cjs +84 -65
  26. package/dist/commander-kit/index.cjs.map +1 -1
  27. package/dist/commander-kit/index.d.cts +3 -3
  28. package/dist/commander-kit/index.d.ts +3 -3
  29. package/dist/commander-kit/index.js +24 -5
  30. package/dist/commander-kit/index.js.map +1 -1
  31. package/dist/{extra-CYpD3D9p.d.ts → extra-B1CzOGop.d.ts} +2 -2
  32. package/dist/{extra-Dc_eIyiW.d.cts → extra-DJwL1pB2.d.cts} +2 -2
  33. package/dist/{fast-globe-options-CZ-9wIKV.d.ts → fast-globe-options-DDloBj5e.d.ts} +3 -3
  34. package/dist/{fast-globe-options-BtIrCNb6.d.cts → fast-globe-options-Rz3TI5hc.d.cts} +3 -3
  35. package/dist/{helper-CWU8QYq3.js → formatter-BS3omf7k.js} +88 -3
  36. package/dist/formatter-BS3omf7k.js.map +1 -0
  37. package/dist/{helper-DvCvgDxy.cjs → formatter-Cbz6g0Mi.cjs} +142 -14
  38. package/dist/formatter-Cbz6g0Mi.cjs.map +1 -0
  39. package/dist/{identity-xuDCNgfm.js → identity-Cznri5bj.js} +5 -6
  40. package/dist/{identity-xuDCNgfm.js.map → identity-Cznri5bj.js.map} +1 -1
  41. package/dist/{identity-D192lL-_.cjs → identity-D2BhaOq4.cjs} +14 -15
  42. package/dist/{identity-D192lL-_.cjs.map → identity-D2BhaOq4.cjs.map} +1 -1
  43. package/dist/{index-1FKLQ7ah.d.cts → index-BW05_5Zw.d.ts} +2 -2
  44. package/dist/{index-qft-a5kh.d.ts → index-C5uH9Zib.d.cts} +2 -2
  45. package/dist/{index-CEsO_rxz.d.ts → index-D5tuL_Tf.d.cts} +2 -2
  46. package/dist/{index-DW1JFluR.d.cts → index-DMYmm0in.d.ts} +2 -2
  47. package/dist/index.cjs +378 -359
  48. package/dist/index.cjs.map +1 -1
  49. package/dist/index.d.cts +81 -48
  50. package/dist/index.d.ts +81 -48
  51. package/dist/index.js +175 -156
  52. package/dist/index.js.map +1 -1
  53. package/dist/package-banner-Com8U-Xm.cjs +59 -0
  54. package/dist/{package-banner-BHyF8RdG.cjs.map → package-banner-Com8U-Xm.cjs.map} +1 -1
  55. package/dist/{package-banner-BmLNyezO.js → package-banner-Jw1DuF8v.js} +4 -5
  56. package/dist/{package-banner-BmLNyezO.js.map → package-banner-Jw1DuF8v.js.map} +1 -1
  57. package/dist/server-Bewzn3sy.cjs +255 -0
  58. package/dist/server-Bewzn3sy.cjs.map +1 -0
  59. package/dist/server-Owi9-DW1.js +198 -0
  60. package/dist/server-Owi9-DW1.js.map +1 -0
  61. package/dist/utils/client.cjs +12 -11
  62. package/dist/utils/client.d.cts +1 -1
  63. package/dist/utils/client.d.ts +1 -1
  64. package/dist/utils/client.js +3 -2
  65. package/dist/utils/server.cjs +5 -2
  66. package/dist/utils/server.d.cts +433 -3
  67. package/dist/utils/server.d.ts +433 -3
  68. package/dist/utils/server.js +3 -3
  69. package/package.json +10 -6
  70. package/dist/client-BmfdVI22.js +0 -160
  71. package/dist/client-BmfdVI22.js.map +0 -1
  72. package/dist/client-DnTjQyyo.cjs +0 -221
  73. package/dist/client-DnTjQyyo.cjs.map +0 -1
  74. package/dist/helper-CWU8QYq3.js.map +0 -1
  75. package/dist/helper-DvCvgDxy.cjs.map +0 -1
  76. package/dist/package-banner-BHyF8RdG.cjs +0 -60
  77. package/dist/server-BA7ruG1h.js +0 -142
  78. package/dist/server-BA7ruG1h.js.map +0 -1
  79. package/dist/server-DZvrqlyy.cjs +0 -181
  80. package/dist/server-DZvrqlyy.cjs.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"helper-CWU8QYq3.js","names":[],"sources":["../src/_internal/utils/helper.ts"],"sourcesContent":["import type {\n AnObjectNonArray,\n AnyFunction,\n Arrayable,\n Extends,\n IsArray,\n IsNever,\n NonPlainObject,\n OrArr,\n ReadonlyDeep\n} from \"@/_internal/types/extra\";\n\n// ----------------------------------------------------------------\n\n/** @internal */\nexport function deepFreeze<T>(value: T): ReadonlyDeep<T> {\n if (typeof value !== \"object\" || value === null) {\n return value as ReadonlyDeep<T>;\n }\n\n const seen = new WeakSet<object>();\n const stack: object[] = [value as object];\n\n while (stack.length) {\n const obj = stack.pop()!;\n\n if (seen.has(obj) || Object.isFrozen(obj)) continue;\n\n seen.add(obj);\n\n // Map\n if (isMap(obj)) {\n for (const [k, v] of obj) {\n if (typeof k === \"object\" && k !== null) stack.push(k);\n if (typeof v === \"object\" && v !== null) stack.push(v);\n }\n }\n\n // Set\n else if (isSet(obj)) {\n for (const v of obj) {\n if (typeof v === \"object\" && v !== null) stack.push(v);\n }\n }\n\n // Fast path Array\n else if (isArray(obj)) {\n for (const v of obj) {\n if (typeof v === \"object\" && v !== null) stack.push(v);\n }\n } else {\n const record = obj as Record<PropertyKey, unknown>;\n\n for (const key of Reflect.ownKeys(record)) {\n const v = record[key];\n if (typeof v === \"object\" && v !== null) stack.push(v);\n }\n\n // const descriptors = Object.getOwnPropertyDescriptors(obj);\n\n // for (const key of Reflect.ownKeys(descriptors)) {\n // const desc = descriptors[key as keyof typeof descriptors];\n // if (!desc) continue;\n\n // if (\"value\" in desc) {\n // const v = desc.value;\n // if (typeof v === \"object\" && v !== null) stack.push(v);\n // }\n // }\n }\n\n Object.freeze(obj);\n }\n\n return value as ReadonlyDeep<T>;\n}\n// ----------------------------------------------------------------\n\n/** @internal */\nexport function isObjectLoose<T>(\n value: T\n): value is Extract<T, object | AnyFunction> {\n return !isNil(value) && (isObjectOrArray(value) || isFunction(value));\n}\n\nexport function isObjectLike<T>(value: T): value is Extract<T, object> {\n return !isFunction(value) && isObjectLoose(value);\n}\n// ----------------------------------------------------------------\n\n/** ----------------------------------------------------------------\n * * ***Check whether a value is thenable (Promise-like).***\n * ----------------------------------------------------------------\n *\n * Determines whether a value implements a `.then()` method and can be\n * treated as a **thenable** object.\n *\n * This includes:\n * - Native `Promise`.\n * - Promise-like objects returned by libraries.\n * - Custom objects implementing `.then()`.\n *\n * ----------------------------------------------------------------\n *\n * @typeParam T\n * The resolved value type of the thenable.\n *\n * @param v\n * The value to check.\n *\n * @returns\n * `true` if the value is thenable, otherwise `false`.\n *\n * When `true`, the value is narrowed to `PromiseLike<T>`.\n *\n * ----------------------------------------------------------------\n *\n * @example\n * ```ts\n * isThenable(Promise.resolve(1));\n * // ➔ true\n *\n * isThenable({ then: () => {} });\n * // ➔ true\n *\n * isThenable(123);\n * // ➔ false\n * ```\n *\n * @example\n * ```ts\n * async function unwrap<T>(value: T | Promise<T>) {\n * if (isThenable<T>(value)) {\n * return await value;\n * }\n *\n * return value;\n * }\n * ```\n *\n * @remarks\n * Thenables are typically resolved before function execution to support async config factories without enforcing `Promise` instances.\n * - This function checks **behavior**, not identity.\n * - The value does **not** have to be an instance of `Promise`.\n * - Useful for async utilities, lazy evaluation, and hybrid sync/async APIs.\n *\n * @internal\n */\nexport const isThenable = <T = unknown>(v: unknown): v is PromiseLike<T> =>\n v != null &&\n (typeof v === \"object\" || typeof v === \"function\") &&\n typeof (v as PromiseLike<T>).then === \"function\";\n\n// ----------------------------------------------------------------\n\n/** @internal */\nexport const isRegExp = (value: unknown): value is RegExp => {\n return value instanceof RegExp;\n};\n\n// ----------------------------------------------------------------\n\n/** @internal */\nexport const isString = (value: unknown): value is string => {\n return typeof value === \"string\";\n};\n\n// ----------------------------------------------------------------\n\n/** @internal */\nexport function isSet<T = unknown>(value: Set<T>): value is Set<T>;\nexport function isSet(value: unknown): value is Set<unknown>;\nexport function isSet(value: unknown): boolean {\n return (\n Object.prototype.toString.call(value) === \"[object Set]\" ||\n value instanceof Set\n );\n}\n\n// ----------------------------------------------------------------\n\n/** @internal */\nexport function isMap<K = unknown, V = unknown>(\n value: Map<K, V>\n): value is Map<K, V>;\nexport function isMap(value: unknown): value is Map<unknown, unknown>;\nexport function isMap(value: unknown): boolean {\n return (\n Object.prototype.toString.call(value) === \"[object Map]\" ||\n value instanceof Map\n );\n}\n\n// ----------------------------------------------------------------\n\n/** @internal */\ntype ArrayFallback<T> =\n IsNever<Extract<T, unknown[] | readonly unknown[]>> extends true\n ? unknown[] & T\n : Extract<T, unknown[] | readonly unknown[]>;\n\n/** @internal */\nexport function isArray<T>(value: T): value is ArrayFallback<T>;\n// export function isArray<T>(value: T): value is IsNever<Extract<T, unknown[]>> extends true ? unknown[]: Extract<T, unknown[]>;\nexport function isArray(value: unknown): value is unknown[];\nexport function isArray(value: unknown): boolean {\n return Array.isArray(value);\n}\n\n// ----------------------------------------------------------------\n\n/** @internal */\nexport const isNull = (val: unknown): val is null => val === null;\n\n// ----------------------------------------------------------------\n\n/** @internal */\ntype IsPlainObjectResult<T> = unknown extends T\n ? Record<PropertyKey, unknown> & T\n : T extends object\n ? T extends NonPlainObject\n ? never\n : IsHasKeysObject<T> extends false\n ? Record<PropertyKey, unknown> & T\n : T\n : Extract<T, Record<PropertyKey, unknown>>;\n\n/** @internal */\nexport function isPlainObject<T>(value: T): value is IsPlainObjectResult<T>;\nexport function isPlainObject<T>(\n value: T\n): value is NonNullable<Extract<T, Record<PropertyKey, unknown>>>;\nexport function isPlainObject(value: unknown) {\n if (!isObject(value)) return false;\n\n const proto = Object.getPrototypeOf(value);\n return proto === Object.prototype || proto === null;\n}\n\n// ----------------------------------------------------------------\n\n/** @internal */\ntype IsObject<T> = unknown extends T\n ? T & Record<PropertyKey, unknown>\n : T extends object\n ? T extends AnObjectNonArray\n ? T\n : IsHasKeysObject<T> extends false\n ? T & Record<PropertyKey, unknown>\n : IsArray<T> extends true\n ? Exclude<T, unknown[]>\n : T\n : never;\n\n/** @internal */\nexport function isObject<T extends object>(value: T): value is IsObject<T>;\nexport function isObject(value: unknown): value is Record<PropertyKey, unknown>;\nexport function isObject(value: unknown): boolean {\n return typeof value === \"object\" && !isNil(value) && !isArray(value);\n}\n\n// ----------------------------------------------------------------\n\n/** @internal */\ntype IsHasKeysObject<T> = keyof T extends never ? false : true;\n\n// ----------------------------------------------------------------\n\n/** @internal */\ntype IsObjectOrArray<T> =\n OrArr<\n [IsNever<T>, Extends<T, Record<PropertyKey, unknown>>, Extends<unknown, T>]\n > extends true\n ? T & Record<PropertyKey, unknown> & unknown[]\n : T extends object\n ? T extends unknown[]\n ? T\n : T extends AnObjectNonArray\n ? T\n : IsHasKeysObject<T> extends false\n ? T & Record<PropertyKey, unknown>\n : T\n : Extract<T, Record<PropertyKey, unknown> & unknown[]>;\n\n/** @internal */\nexport function isObjectOrArray(value: []): value is [];\nexport function isObjectOrArray<T>(value: T): value is IsObjectOrArray<T>;\nexport function isObjectOrArray<T>(value: T): boolean {\n return isArray(value) || isObject(value);\n}\n\n// ----------------------------------------------------------------\n\n/** @internal */\nexport const isNil = (value: unknown): value is null | undefined => {\n return value == null;\n};\n\n// ----------------------------------------------------------------\n\n/** @internal */\nexport const isBoolean = (value: unknown): value is boolean => {\n return typeof value === \"boolean\";\n};\n\n// ----------------------------------------------------------------\n\n/** @internal */\nexport const isUndefined = (value: unknown): value is undefined => {\n return typeof value === \"undefined\";\n};\n\n// ----------------------------------------------------------------\n\n/** @internal */\nexport const isFunction = (value: unknown): value is AnyFunction => {\n return typeof value === \"function\";\n};\n\n// ----------------------------------------------------------------\n\n/** @internal */\n// eslint-disable-next-line @typescript-eslint/no-wrapper-object-types\nexport const isNumberObject = (value: unknown): value is Number => {\n return (\n isObject(value) &&\n Object.prototype.toString.call(value) === \"[object Number]\"\n );\n};\n\n// ----------------------------------------------------------------\n\n/** @internal */\n// eslint-disable-next-line @typescript-eslint/no-wrapper-object-types\nexport const isStringObject = (value: unknown): value is String => {\n return (\n isObject(value) &&\n Object.prototype.toString.call(value) === \"[object String]\"\n );\n};\n\n// ----------------------------------------------------------------\n\n/** @internal */\n// eslint-disable-next-line @typescript-eslint/no-wrapper-object-types\nexport const isBooleanObject = (value: unknown): value is Boolean => {\n return (\n isObject(value) &&\n Object.prototype.toString.call(value) === \"[object Boolean]\"\n );\n};\n\n// ----------------------------------------------------------------\n\n/** @internal */\nexport const isInfinityNumber = (value: unknown): boolean => {\n if (typeof value === \"number\" || isNumberObject(value)) {\n const num = Number(value);\n return num === Infinity || num === -Infinity;\n }\n return false;\n};\n\n// ----------------------------------------------------------------\n\n/** @internal */\nexport const isSymbol = (value: unknown): value is symbol => {\n return typeof value === \"symbol\";\n};\n\n// ----------------------------------------------------------------\n\n/** @internal */\nexport const isBigInt = (value: unknown): value is bigint => {\n return typeof value === \"bigint\";\n};\n\n// ----------------------------------------------------------------\n\n/** @internal */\nexport const isNaN = (value: unknown): boolean => {\n return typeof value === \"number\"\n ? Number.isNaN(value)\n : isNumberObject(value) && Number.isNaN(value.valueOf());\n};\n\n// ----------------------------------------------------------------\n\n/** @internal */\ntype IsNonEmptyStringOptions = {\n /** Whether to trim the string before checking, defaultValue: `true`.\n *\n * @default true */\n trim?: boolean;\n};\n\n/** @internal */\nexport const isNonEmptyString = (\n value: unknown,\n options: IsNonEmptyStringOptions = {}\n): value is string => {\n if (!isString(value)) return false;\n\n const trim = options.trim ?? true;\n\n const str = trim ? value.trim() : value;\n\n return str.length > 0;\n};\n\n// ----------------------------------------------------------------\n\n/** @internal */\ntype IsNumberOptions = {\n /** If set to `true`, `NaN` will be considered a valid number, defaultValue: `false`.\n *\n * @default false\n */\n includeNaN?: boolean;\n};\n\n/** @internal */\nexport const isNumber = (\n value: unknown,\n options: IsNumberOptions = {}\n): value is number => {\n const includeNaN =\n isPlainObject(options) && isBoolean(options.includeNaN)\n ? options.includeNaN\n : false;\n\n const aNumber = typeof value === \"number\";\n return includeNaN ? aNumber : aNumber && !Number.isNaN(value);\n};\n\n// ----------------------------------------------------------------\n\n/** @internal */\nexport const isError = (error: unknown): error is Error => {\n return (\n Object.prototype.toString.call(error) === \"[object Error]\" ||\n error instanceof Error\n );\n};\n// ----------------------------------------------------------------\n\n/** @internal */\ntype isDateOptions = {\n /** * ***Skip the validity check (`!isNaN(date.getTime())`).***\n *\n * When `true`, the function only checks that the value is an\n * instance of `Date` without verifying that it represents a valid\n * date value, default: `false`.\n *\n * @default false\n */\n skipInvalidDate?: boolean;\n};\n\n/** @internal */\nexport const isDate = (\n value: unknown,\n options: isDateOptions = {}\n): value is Date => {\n const skipInvalidDate =\n isPlainObject(options) && isBoolean(options.skipInvalidDate)\n ? options.skipInvalidDate\n : false;\n\n const instanceDate = value instanceof Date;\n\n if (skipInvalidDate) return instanceDate;\n return instanceDate && !isNaN(value.getTime());\n};\n\n// ----------------------------------------------------------------\n\n/** @internal */\nexport type SafeStableStringifyOptions = {\n /** -------------------------------------------------\n * * ***Whether to sort **object keys** alphabetically (recursively).***\n * -------------------------------------------------\n *\n * - `true` (default): object keys are sorted to ensure stable output.\n * - `false`: preserves original insertion order of keys.\n *\n * @default true\n */\n sortKeys?: boolean;\n /** -------------------------------------------------\n * * ***Whether to sort **primitive values inside arrays**.***\n * -------------------------------------------------\n *\n * - `true`: primitive values in arrays are sorted to ensure stable output.\n * - `false` (default): arrays retain their original order; objects and nested arrays are not reordered.\n *\n * @default false\n */\n sortArray?: boolean;\n /** -------------------------------------------------\n * * ***Whether to pretty-print JSON output with 2-space indentation.***\n * -------------------------------------------------\n *\n * - `true`: output is formatted with indentation and newlines.\n * - `false` (default): produces compact single-line JSON.\n *\n * @default false\n */\n pretty?: boolean;\n /** -------------------------------------------------\n * * ***Preserve `undefined` values instead of converting them to `null`.***\n * -------------------------------------------------\n * **Controls how the internal `deepProcess` step rewrites values\n * **before** the final `JSON.stringify` call.**\n * - **Default (`false`):**\n * * Every `undefined` value (object properties **and** array elements)\n * is replaced with `null` **before** serialization, because this happens\n * first, the key is **not removed** by `JSON.stringify`.\n * - **`true`** – Leaves `undefined` untouched so the final\n * `JSON.stringify` call behaves natively:\n * * Object properties with `undefined` are **removed**.\n * * Array elements that are `undefined` become `null`.\n * @default false\n * @example\n * // ✅ keepUndefined = true: behaves like native JSON.stringify\n * safeStableStringify({ a: undefined }, { keepUndefined: true });\n * // ➔ '{}' // key removed\n *\n * // ✅ Default (false): convert undefined to null, key kept\n * safeStableStringify({ a: undefined });\n * // ➔ '{\"a\":null}' // key present, value null\n *\n * // Arrays\n * safeStableStringify([undefined]);\n * // ➔ '[null]' // same, but via pre-replacement\n * safeStableStringify([undefined], { keepUndefined: true });\n * // ➔ '[null]' // element becomes null\n */\n keepUndefined?: boolean;\n};\n\n/** @internal */\nexport const safeStableStringify = (\n value: unknown,\n options: SafeStableStringifyOptions = {}\n): string => {\n const pretty = options.pretty ?? false;\n const sortKeys = options.sortKeys ?? true;\n const sortArray = options.sortArray ?? false;\n const keepUndefined = options.keepUndefined ?? false;\n\n if (isUndefined(value)) {\n return keepUndefined ? \"undefined\" : \"null\";\n }\n\n const seen = new WeakSet();\n\n const isPrimitive = (val: unknown): boolean =>\n isNull(val) || (!isObjectOrArray(val) && !isFunction(val));\n\n const deepProcess = (val: unknown): unknown => {\n if (isNumberObject(val)) {\n const valOf = val.valueOf();\n return isNaN(valOf) || isInfinityNumber(valOf) ? null : valOf;\n }\n if (isStringObject(val)) return val.valueOf();\n if (isBooleanObject(val)) return val.valueOf();\n if (isFunction(val) || isSymbol(val)) return undefined;\n if (isBigInt(val)) return val.toString();\n if (isNaN(val) || isInfinityNumber(val)) return null;\n if (isUndefined(val)) {\n return keepUndefined ? undefined : null;\n }\n\n if (isObjectOrArray(val)) {\n if (seen.has(val)) return \"[Circular]\";\n seen.add(val);\n\n if (isDate(val)) return val.toISOString();\n if (isMap(val)) {\n return {\n map: Array.from(val.entries()).map(([k, v]) => [k, deepProcess(v)])\n };\n }\n if (isSet(val)) return { set: Array.from(val.values()).map(deepProcess) };\n\n if (isArray(val)) {\n const processedArr = val.map(deepProcess);\n if (sortArray) {\n const primitives: unknown[] = [];\n const nonPrimitives: unknown[] = [];\n\n for (const item of processedArr) {\n if (isPrimitive(item)) primitives.push(item);\n else nonPrimitives.push(item);\n }\n primitives.sort((a, b) => {\n if (isNumber(a) && isNumber(b)) return a - b;\n return String(a).localeCompare(String(b));\n });\n return [...primitives, ...nonPrimitives];\n }\n return processedArr;\n }\n\n const keys = Object.keys(val);\n if (sortKeys) {\n keys.sort((a, b) => {\n const na = Number(a);\n const nb = Number(b);\n if (!isNaN(na) && !isNaN(nb)) return na - nb;\n return a.localeCompare(b);\n });\n }\n\n const result: Record<string, unknown> = {};\n\n if (isObject(val)) {\n for (const k of keys) {\n const v = deepProcess(val[k]);\n if (!isUndefined(v)) result[k] = v;\n }\n }\n\n return result;\n }\n\n return val;\n };\n\n try {\n return JSON.stringify(deepProcess(value), null, pretty ? 2 : 0);\n } catch (err) {\n console.warn(\"Error in safeStableStringify:\", err);\n return \"{}\";\n }\n};\n\n// ----------------------------------------------------------------\n\n/** @internal */\ntype NormalizeSpacesOptions = {\n /** If `true`, skips normalization and only trims whitespace from start & end, defaultValue: `false`.\n *\n * @default false\n */\n trimOnly?: boolean;\n /** If `false`, skips trimming value, defaultValue: `true`.\n *\n * @default true\n */\n withTrim?: boolean;\n};\n\n/** @internal */\nexport const normalizeSpaces = (\n value: string | null | undefined,\n options: NormalizeSpacesOptions = {\n withTrim: true,\n trimOnly: false\n }\n): string => {\n if (!isNonEmptyString(value)) return \"\";\n\n if (!isPlainObject(options)) {\n options = {};\n }\n\n const { trimOnly = false, withTrim = true } = options;\n\n if (trimOnly) return value.trim();\n\n if (withTrim) {\n value = value.trim();\n }\n\n // Remove all duplicate spaces (including tabs, newlines, etc.)\n return value.replace(/\\s+/g, \" \");\n};\n\n// ----------------------------------------------------------------\n\n/** ----------------------------------------------------------------\n * * ***Checks whether a value is an array of strings.***\n * ----------------------------------------------------------------\n *\n * Type guard that validates the input is an `Array` where **all**\n * elements are strings.\n *\n * @param {unknown} v - The value to test.\n *\n * @returns {boolean} `true` if the value is a `string[]`.\n *\n * @internal\n */\nexport const isStringArray = (v: unknown): v is string[] =>\n isArray(v) && v.every((i) => isString(i));\n\n/** ----------------------------------------------------------------\n * * ***Checks whether a value is a Set of strings.***\n * ----------------------------------------------------------------\n *\n * Type guard that validates the input is a `Set` where **all**\n * entries are strings.\n *\n * @param {unknown} v - The value to test.\n *\n * @returns {boolean} `true` if the value is a `Set<string>`.\n *\n * @internal\n */\nexport const isStringSet = (v: unknown): v is Set<string> =>\n isSet(v) && [...v].every((i) => isString(i));\n\n/** ----------------------------------------------------------------\n * * ***Asserts that a value is a valid pattern input.***\n * ----------------------------------------------------------------\n *\n * Runtime assertion that validates the provided value is one of the\n * supported pattern types:\n * - `string`.\n * - `string[]`.\n * - `Set<string>`.\n *\n * This function is intended to be used at API boundaries to ensure\n * type safety before further processing.\n *\n * @param {unknown} v - The value to validate.\n * @param {string|undefined} parameterKey - The key parameter to identity which is invalid, default `\"pattern\"`.\n *\n * @throws {TypeError} If the value is not a valid pattern input.\n *\n * @example\n * ```ts\n * assertValidatePatternArgs(pattern);\n * // pattern is now typed as:\n * // string | string[] | Set<string>\n * ```\n *\n * @internal\n */\nexport const assertValidatePatternArgs: (\n v: unknown,\n parameterKey?: string\n) => asserts v is string | string[] | Set<string> = (\n v: unknown,\n parameterKey: string = \"pattern\"\n) => {\n if (!isString(v) && !isStringArray(v) && !isStringSet(v)) {\n throw new TypeError(\n `The \\`${parameterKey}\\` argument must be a string, string[] or Set<string>.`\n );\n }\n};\n\n/** ----------------------------------------------------------------\n * * ***Flattens nested arrays and extracts string values only.***\n * ----------------------------------------------------------------\n *\n * Recursively flattens an input array to **infinite depth** and\n * filters out all non-string values.\n *\n * - *Normalization rules:*\n * - Nested arrays are flattened using `Array.prototype.flat(Infinity)`.\n * - Only values with `typeof === \"string\"` are kept.\n * - Non-string values are discarded.\n *\n * The returned array is always a **new instance** and does not mutate\n * the original input.\n *\n * @param {readonly unknown[]} input - Arbitrary nested array input.\n *\n * @returns {string[]} A flat array containing only string values.\n *\n * @example\n * ```ts\n * flattenStrings([\"a\", [\"b\", [\"c\"]], 1, null]);\n * // ➔ [\"a\", \"b\", \"c\"]\n * ```\n *\n * @internal\n */\nexport const flattenStrings = (input: readonly unknown[]): string[] => {\n return input.flat(Infinity).filter((v): v is string => typeof v === \"string\");\n};\n\n/** ----------------------------------------------------------------\n * * ***Normalizes pattern input into a new `Set<string>` instance.***\n * ----------------------------------------------------------------\n *\n * Converts a pattern value into a deduplicated `Set<string>` for\n * consistent internal handling.\n *\n * #### Normalization behavior\n * - `string` ➔ wrapped into a `Set`.\n * - `string[]` ➔ converted into a `Set` (duplicates removed).\n * - `Set<string>` ➔ cloned into a new `Set`.\n *\n * The returned set is **always a new instance** and the original\n * input is never mutated.\n *\n * #### Validation\n * When `withValidationType` is `true` (default), the input will be\n * validated before normalization.\n *\n * If the provided `pattern` is not one of the supported types,\n * a `TypeError` will be thrown.\n *\n * @param pattern - Pattern value to normalize.\n * @param options - Optional configuration object.\n * @param options.withValidationType - Whether to validate the input\n * before normalization. Defaults to `true`.\n * @param options.parameterKey - The key parameter to identity which is invalid, default `\"pattern\"`.\n *\n * @returns A new deduplicated `Set<string>` instance.\n *\n * @throws {TypeError}\n * Thrown when `pattern` is not a `string`, `string[]`, or `Set<string>`\n * and validation is enabled.\n *\n * @example\n * ```ts\n * toStringSet(\"a\");\n * // ➔ Set { \"a\" }\n * ```\n *\n * @example\n * ```ts\n * toStringSet([\"a\", \"b\", \"a\"]);\n * // ➔ Set { \"a\", \"b\" }\n * ```\n *\n * @example\n * ```ts\n * toStringSet(new Set([\"x\", \"y\"]));\n * // ➔ Set { \"x\", \"y\" }\n * ```\n *\n * @example\n * ```ts\n * toStringSet(123 as any);\n * // ❌ Throws TypeError\n * ```\n *\n * @example\n * ```ts\n * // Disable validation (use cautiously)\n * toStringSet(\"a\", { withValidationType: false });\n * toStringSet(123 as any, { withValidationType: false });\n * ```\n *\n * @internal\n */\nexport const toStringSet = (\n pattern: string | string[] | Set<string>,\n options: {\n withValidationType?: boolean;\n /**\n * The key parameter to identity which is invalid.\n *\n * @default \"pattern\"\n */\n parameterKey?: string;\n } = {}\n): Set<string> => {\n const { withValidationType = true, parameterKey = \"pattern\" } = options;\n if (withValidationType) assertValidatePatternArgs(pattern, parameterKey);\n\n return toObjectSet(pattern);\n};\n\n/** ----------------------------------------------------------------\n * * ***Normalizes a value into a deduplicated `Set`.***\n * ----------------------------------------------------------------\n *\n * Converts a single value, array, or existing `Set` into a `Set<T>`\n * for consistent internal handling.\n *\n * - *Normalization rules:*\n * - `T` ➔ wrapped in a `Set`.\n * - `T[]` ➔ converted to a `Set` (duplicates removed).\n * - `Set<T>` ➔ returned as-is.\n *\n * The returned `Set` is **not mutated** internally by this function.\n * If an existing `Set` is provided, it will be reused.\n *\n * @typeParam T - Value type stored in the set.\n *\n * @param {T | T[] | Set<T>} value - Value to normalize.\n *\n * @returns {Set<T>} A deduplicated set of values.\n *\n * @example\n * ```ts\n * toObjectSet(1);\n * // ➔ Set { 1 }\n * ```\n *\n * @example\n * ```ts\n * toObjectSet([1, 2, 1]);\n * // ➔ Set { 1, 2 }\n * ```\n *\n * @example\n * ```ts\n * toObjectSet(new Set([1, 2]));\n * // ➔ Set { 1, 2 }\n * ```\n *\n * @internal\n */\nexport const toObjectSet = <T>(value: T | T[] | Set<T>): Set<T> => {\n if (isSet(value)) return value;\n\n return new Set(isArray(value) ? value : [value]);\n};\n\n/** ----------------------------------------------------------------\n * * ***Normalize a value into an array.***\n * ----------------------------------------------------------------\n *\n * Converts a single value or an array-like value into a **new array**\n * with consistent typing.\n *\n * - If `value` is already an array ➔ returned as-is.\n * - If `value` is a single item ➔ wrapped in an array.\n *\n * This utility is useful for APIs or configs that accept\n * either a single value or multiple values.\n *\n * ----------------------------------------------------------------\n *\n * @typeParam T\n * The element type of the resulting array.\n *\n * @param value\n * A value or array of values.\n *\n * @returns\n * A normalized array of type `T[]`.\n *\n * ----------------------------------------------------------------\n *\n * @example\n * ```ts\n * toArray(1);\n * // ➔ [1]\n *\n * toArray(\"hello\");\n * // ➔ [\"hello\"]\n *\n * toArray([1, 2, 3]);\n * // ➔ [1, 2, 3]\n * ```\n *\n * @example\n * ```ts\n * type User = { id: number };\n *\n * toArray<User>({ id: 1 });\n * // ➔ [{ id: 1 }]\n *\n * toArray<User>([{ id: 1 }, { id: 2 }]);\n * // ➔ [{ id: 1 }, { id: 2 }]\n * ```\n *\n * @remarks\n * This function does **not** flatten nested arrays.\n * If `value` is already an array, the original reference is preserved.\n *\n * @internal\n */\nexport const toArray = <T>(value: Arrayable<T>): T[] => {\n return isArray(value) ? value : [value];\n};\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"helper-DvCvgDxy.cjs","names":[],"sources":["../src/_internal/utils/helper.ts"],"sourcesContent":["import type {\n AnObjectNonArray,\n AnyFunction,\n Arrayable,\n Extends,\n IsArray,\n IsNever,\n NonPlainObject,\n OrArr,\n ReadonlyDeep\n} from \"@/_internal/types/extra\";\n\n// ----------------------------------------------------------------\n\n/** @internal */\nexport function deepFreeze<T>(value: T): ReadonlyDeep<T> {\n if (typeof value !== \"object\" || value === null) {\n return value as ReadonlyDeep<T>;\n }\n\n const seen = new WeakSet<object>();\n const stack: object[] = [value as object];\n\n while (stack.length) {\n const obj = stack.pop()!;\n\n if (seen.has(obj) || Object.isFrozen(obj)) continue;\n\n seen.add(obj);\n\n // Map\n if (isMap(obj)) {\n for (const [k, v] of obj) {\n if (typeof k === \"object\" && k !== null) stack.push(k);\n if (typeof v === \"object\" && v !== null) stack.push(v);\n }\n }\n\n // Set\n else if (isSet(obj)) {\n for (const v of obj) {\n if (typeof v === \"object\" && v !== null) stack.push(v);\n }\n }\n\n // Fast path Array\n else if (isArray(obj)) {\n for (const v of obj) {\n if (typeof v === \"object\" && v !== null) stack.push(v);\n }\n } else {\n const record = obj as Record<PropertyKey, unknown>;\n\n for (const key of Reflect.ownKeys(record)) {\n const v = record[key];\n if (typeof v === \"object\" && v !== null) stack.push(v);\n }\n\n // const descriptors = Object.getOwnPropertyDescriptors(obj);\n\n // for (const key of Reflect.ownKeys(descriptors)) {\n // const desc = descriptors[key as keyof typeof descriptors];\n // if (!desc) continue;\n\n // if (\"value\" in desc) {\n // const v = desc.value;\n // if (typeof v === \"object\" && v !== null) stack.push(v);\n // }\n // }\n }\n\n Object.freeze(obj);\n }\n\n return value as ReadonlyDeep<T>;\n}\n// ----------------------------------------------------------------\n\n/** @internal */\nexport function isObjectLoose<T>(\n value: T\n): value is Extract<T, object | AnyFunction> {\n return !isNil(value) && (isObjectOrArray(value) || isFunction(value));\n}\n\nexport function isObjectLike<T>(value: T): value is Extract<T, object> {\n return !isFunction(value) && isObjectLoose(value);\n}\n// ----------------------------------------------------------------\n\n/** ----------------------------------------------------------------\n * * ***Check whether a value is thenable (Promise-like).***\n * ----------------------------------------------------------------\n *\n * Determines whether a value implements a `.then()` method and can be\n * treated as a **thenable** object.\n *\n * This includes:\n * - Native `Promise`.\n * - Promise-like objects returned by libraries.\n * - Custom objects implementing `.then()`.\n *\n * ----------------------------------------------------------------\n *\n * @typeParam T\n * The resolved value type of the thenable.\n *\n * @param v\n * The value to check.\n *\n * @returns\n * `true` if the value is thenable, otherwise `false`.\n *\n * When `true`, the value is narrowed to `PromiseLike<T>`.\n *\n * ----------------------------------------------------------------\n *\n * @example\n * ```ts\n * isThenable(Promise.resolve(1));\n * // ➔ true\n *\n * isThenable({ then: () => {} });\n * // ➔ true\n *\n * isThenable(123);\n * // ➔ false\n * ```\n *\n * @example\n * ```ts\n * async function unwrap<T>(value: T | Promise<T>) {\n * if (isThenable<T>(value)) {\n * return await value;\n * }\n *\n * return value;\n * }\n * ```\n *\n * @remarks\n * Thenables are typically resolved before function execution to support async config factories without enforcing `Promise` instances.\n * - This function checks **behavior**, not identity.\n * - The value does **not** have to be an instance of `Promise`.\n * - Useful for async utilities, lazy evaluation, and hybrid sync/async APIs.\n *\n * @internal\n */\nexport const isThenable = <T = unknown>(v: unknown): v is PromiseLike<T> =>\n v != null &&\n (typeof v === \"object\" || typeof v === \"function\") &&\n typeof (v as PromiseLike<T>).then === \"function\";\n\n// ----------------------------------------------------------------\n\n/** @internal */\nexport const isRegExp = (value: unknown): value is RegExp => {\n return value instanceof RegExp;\n};\n\n// ----------------------------------------------------------------\n\n/** @internal */\nexport const isString = (value: unknown): value is string => {\n return typeof value === \"string\";\n};\n\n// ----------------------------------------------------------------\n\n/** @internal */\nexport function isSet<T = unknown>(value: Set<T>): value is Set<T>;\nexport function isSet(value: unknown): value is Set<unknown>;\nexport function isSet(value: unknown): boolean {\n return (\n Object.prototype.toString.call(value) === \"[object Set]\" ||\n value instanceof Set\n );\n}\n\n// ----------------------------------------------------------------\n\n/** @internal */\nexport function isMap<K = unknown, V = unknown>(\n value: Map<K, V>\n): value is Map<K, V>;\nexport function isMap(value: unknown): value is Map<unknown, unknown>;\nexport function isMap(value: unknown): boolean {\n return (\n Object.prototype.toString.call(value) === \"[object Map]\" ||\n value instanceof Map\n );\n}\n\n// ----------------------------------------------------------------\n\n/** @internal */\ntype ArrayFallback<T> =\n IsNever<Extract<T, unknown[] | readonly unknown[]>> extends true\n ? unknown[] & T\n : Extract<T, unknown[] | readonly unknown[]>;\n\n/** @internal */\nexport function isArray<T>(value: T): value is ArrayFallback<T>;\n// export function isArray<T>(value: T): value is IsNever<Extract<T, unknown[]>> extends true ? unknown[]: Extract<T, unknown[]>;\nexport function isArray(value: unknown): value is unknown[];\nexport function isArray(value: unknown): boolean {\n return Array.isArray(value);\n}\n\n// ----------------------------------------------------------------\n\n/** @internal */\nexport const isNull = (val: unknown): val is null => val === null;\n\n// ----------------------------------------------------------------\n\n/** @internal */\ntype IsPlainObjectResult<T> = unknown extends T\n ? Record<PropertyKey, unknown> & T\n : T extends object\n ? T extends NonPlainObject\n ? never\n : IsHasKeysObject<T> extends false\n ? Record<PropertyKey, unknown> & T\n : T\n : Extract<T, Record<PropertyKey, unknown>>;\n\n/** @internal */\nexport function isPlainObject<T>(value: T): value is IsPlainObjectResult<T>;\nexport function isPlainObject<T>(\n value: T\n): value is NonNullable<Extract<T, Record<PropertyKey, unknown>>>;\nexport function isPlainObject(value: unknown) {\n if (!isObject(value)) return false;\n\n const proto = Object.getPrototypeOf(value);\n return proto === Object.prototype || proto === null;\n}\n\n// ----------------------------------------------------------------\n\n/** @internal */\ntype IsObject<T> = unknown extends T\n ? T & Record<PropertyKey, unknown>\n : T extends object\n ? T extends AnObjectNonArray\n ? T\n : IsHasKeysObject<T> extends false\n ? T & Record<PropertyKey, unknown>\n : IsArray<T> extends true\n ? Exclude<T, unknown[]>\n : T\n : never;\n\n/** @internal */\nexport function isObject<T extends object>(value: T): value is IsObject<T>;\nexport function isObject(value: unknown): value is Record<PropertyKey, unknown>;\nexport function isObject(value: unknown): boolean {\n return typeof value === \"object\" && !isNil(value) && !isArray(value);\n}\n\n// ----------------------------------------------------------------\n\n/** @internal */\ntype IsHasKeysObject<T> = keyof T extends never ? false : true;\n\n// ----------------------------------------------------------------\n\n/** @internal */\ntype IsObjectOrArray<T> =\n OrArr<\n [IsNever<T>, Extends<T, Record<PropertyKey, unknown>>, Extends<unknown, T>]\n > extends true\n ? T & Record<PropertyKey, unknown> & unknown[]\n : T extends object\n ? T extends unknown[]\n ? T\n : T extends AnObjectNonArray\n ? T\n : IsHasKeysObject<T> extends false\n ? T & Record<PropertyKey, unknown>\n : T\n : Extract<T, Record<PropertyKey, unknown> & unknown[]>;\n\n/** @internal */\nexport function isObjectOrArray(value: []): value is [];\nexport function isObjectOrArray<T>(value: T): value is IsObjectOrArray<T>;\nexport function isObjectOrArray<T>(value: T): boolean {\n return isArray(value) || isObject(value);\n}\n\n// ----------------------------------------------------------------\n\n/** @internal */\nexport const isNil = (value: unknown): value is null | undefined => {\n return value == null;\n};\n\n// ----------------------------------------------------------------\n\n/** @internal */\nexport const isBoolean = (value: unknown): value is boolean => {\n return typeof value === \"boolean\";\n};\n\n// ----------------------------------------------------------------\n\n/** @internal */\nexport const isUndefined = (value: unknown): value is undefined => {\n return typeof value === \"undefined\";\n};\n\n// ----------------------------------------------------------------\n\n/** @internal */\nexport const isFunction = (value: unknown): value is AnyFunction => {\n return typeof value === \"function\";\n};\n\n// ----------------------------------------------------------------\n\n/** @internal */\n// eslint-disable-next-line @typescript-eslint/no-wrapper-object-types\nexport const isNumberObject = (value: unknown): value is Number => {\n return (\n isObject(value) &&\n Object.prototype.toString.call(value) === \"[object Number]\"\n );\n};\n\n// ----------------------------------------------------------------\n\n/** @internal */\n// eslint-disable-next-line @typescript-eslint/no-wrapper-object-types\nexport const isStringObject = (value: unknown): value is String => {\n return (\n isObject(value) &&\n Object.prototype.toString.call(value) === \"[object String]\"\n );\n};\n\n// ----------------------------------------------------------------\n\n/** @internal */\n// eslint-disable-next-line @typescript-eslint/no-wrapper-object-types\nexport const isBooleanObject = (value: unknown): value is Boolean => {\n return (\n isObject(value) &&\n Object.prototype.toString.call(value) === \"[object Boolean]\"\n );\n};\n\n// ----------------------------------------------------------------\n\n/** @internal */\nexport const isInfinityNumber = (value: unknown): boolean => {\n if (typeof value === \"number\" || isNumberObject(value)) {\n const num = Number(value);\n return num === Infinity || num === -Infinity;\n }\n return false;\n};\n\n// ----------------------------------------------------------------\n\n/** @internal */\nexport const isSymbol = (value: unknown): value is symbol => {\n return typeof value === \"symbol\";\n};\n\n// ----------------------------------------------------------------\n\n/** @internal */\nexport const isBigInt = (value: unknown): value is bigint => {\n return typeof value === \"bigint\";\n};\n\n// ----------------------------------------------------------------\n\n/** @internal */\nexport const isNaN = (value: unknown): boolean => {\n return typeof value === \"number\"\n ? Number.isNaN(value)\n : isNumberObject(value) && Number.isNaN(value.valueOf());\n};\n\n// ----------------------------------------------------------------\n\n/** @internal */\ntype IsNonEmptyStringOptions = {\n /** Whether to trim the string before checking, defaultValue: `true`.\n *\n * @default true */\n trim?: boolean;\n};\n\n/** @internal */\nexport const isNonEmptyString = (\n value: unknown,\n options: IsNonEmptyStringOptions = {}\n): value is string => {\n if (!isString(value)) return false;\n\n const trim = options.trim ?? true;\n\n const str = trim ? value.trim() : value;\n\n return str.length > 0;\n};\n\n// ----------------------------------------------------------------\n\n/** @internal */\ntype IsNumberOptions = {\n /** If set to `true`, `NaN` will be considered a valid number, defaultValue: `false`.\n *\n * @default false\n */\n includeNaN?: boolean;\n};\n\n/** @internal */\nexport const isNumber = (\n value: unknown,\n options: IsNumberOptions = {}\n): value is number => {\n const includeNaN =\n isPlainObject(options) && isBoolean(options.includeNaN)\n ? options.includeNaN\n : false;\n\n const aNumber = typeof value === \"number\";\n return includeNaN ? aNumber : aNumber && !Number.isNaN(value);\n};\n\n// ----------------------------------------------------------------\n\n/** @internal */\nexport const isError = (error: unknown): error is Error => {\n return (\n Object.prototype.toString.call(error) === \"[object Error]\" ||\n error instanceof Error\n );\n};\n// ----------------------------------------------------------------\n\n/** @internal */\ntype isDateOptions = {\n /** * ***Skip the validity check (`!isNaN(date.getTime())`).***\n *\n * When `true`, the function only checks that the value is an\n * instance of `Date` without verifying that it represents a valid\n * date value, default: `false`.\n *\n * @default false\n */\n skipInvalidDate?: boolean;\n};\n\n/** @internal */\nexport const isDate = (\n value: unknown,\n options: isDateOptions = {}\n): value is Date => {\n const skipInvalidDate =\n isPlainObject(options) && isBoolean(options.skipInvalidDate)\n ? options.skipInvalidDate\n : false;\n\n const instanceDate = value instanceof Date;\n\n if (skipInvalidDate) return instanceDate;\n return instanceDate && !isNaN(value.getTime());\n};\n\n// ----------------------------------------------------------------\n\n/** @internal */\nexport type SafeStableStringifyOptions = {\n /** -------------------------------------------------\n * * ***Whether to sort **object keys** alphabetically (recursively).***\n * -------------------------------------------------\n *\n * - `true` (default): object keys are sorted to ensure stable output.\n * - `false`: preserves original insertion order of keys.\n *\n * @default true\n */\n sortKeys?: boolean;\n /** -------------------------------------------------\n * * ***Whether to sort **primitive values inside arrays**.***\n * -------------------------------------------------\n *\n * - `true`: primitive values in arrays are sorted to ensure stable output.\n * - `false` (default): arrays retain their original order; objects and nested arrays are not reordered.\n *\n * @default false\n */\n sortArray?: boolean;\n /** -------------------------------------------------\n * * ***Whether to pretty-print JSON output with 2-space indentation.***\n * -------------------------------------------------\n *\n * - `true`: output is formatted with indentation and newlines.\n * - `false` (default): produces compact single-line JSON.\n *\n * @default false\n */\n pretty?: boolean;\n /** -------------------------------------------------\n * * ***Preserve `undefined` values instead of converting them to `null`.***\n * -------------------------------------------------\n * **Controls how the internal `deepProcess` step rewrites values\n * **before** the final `JSON.stringify` call.**\n * - **Default (`false`):**\n * * Every `undefined` value (object properties **and** array elements)\n * is replaced with `null` **before** serialization, because this happens\n * first, the key is **not removed** by `JSON.stringify`.\n * - **`true`** – Leaves `undefined` untouched so the final\n * `JSON.stringify` call behaves natively:\n * * Object properties with `undefined` are **removed**.\n * * Array elements that are `undefined` become `null`.\n * @default false\n * @example\n * // ✅ keepUndefined = true: behaves like native JSON.stringify\n * safeStableStringify({ a: undefined }, { keepUndefined: true });\n * // ➔ '{}' // key removed\n *\n * // ✅ Default (false): convert undefined to null, key kept\n * safeStableStringify({ a: undefined });\n * // ➔ '{\"a\":null}' // key present, value null\n *\n * // Arrays\n * safeStableStringify([undefined]);\n * // ➔ '[null]' // same, but via pre-replacement\n * safeStableStringify([undefined], { keepUndefined: true });\n * // ➔ '[null]' // element becomes null\n */\n keepUndefined?: boolean;\n};\n\n/** @internal */\nexport const safeStableStringify = (\n value: unknown,\n options: SafeStableStringifyOptions = {}\n): string => {\n const pretty = options.pretty ?? false;\n const sortKeys = options.sortKeys ?? true;\n const sortArray = options.sortArray ?? false;\n const keepUndefined = options.keepUndefined ?? false;\n\n if (isUndefined(value)) {\n return keepUndefined ? \"undefined\" : \"null\";\n }\n\n const seen = new WeakSet();\n\n const isPrimitive = (val: unknown): boolean =>\n isNull(val) || (!isObjectOrArray(val) && !isFunction(val));\n\n const deepProcess = (val: unknown): unknown => {\n if (isNumberObject(val)) {\n const valOf = val.valueOf();\n return isNaN(valOf) || isInfinityNumber(valOf) ? null : valOf;\n }\n if (isStringObject(val)) return val.valueOf();\n if (isBooleanObject(val)) return val.valueOf();\n if (isFunction(val) || isSymbol(val)) return undefined;\n if (isBigInt(val)) return val.toString();\n if (isNaN(val) || isInfinityNumber(val)) return null;\n if (isUndefined(val)) {\n return keepUndefined ? undefined : null;\n }\n\n if (isObjectOrArray(val)) {\n if (seen.has(val)) return \"[Circular]\";\n seen.add(val);\n\n if (isDate(val)) return val.toISOString();\n if (isMap(val)) {\n return {\n map: Array.from(val.entries()).map(([k, v]) => [k, deepProcess(v)])\n };\n }\n if (isSet(val)) return { set: Array.from(val.values()).map(deepProcess) };\n\n if (isArray(val)) {\n const processedArr = val.map(deepProcess);\n if (sortArray) {\n const primitives: unknown[] = [];\n const nonPrimitives: unknown[] = [];\n\n for (const item of processedArr) {\n if (isPrimitive(item)) primitives.push(item);\n else nonPrimitives.push(item);\n }\n primitives.sort((a, b) => {\n if (isNumber(a) && isNumber(b)) return a - b;\n return String(a).localeCompare(String(b));\n });\n return [...primitives, ...nonPrimitives];\n }\n return processedArr;\n }\n\n const keys = Object.keys(val);\n if (sortKeys) {\n keys.sort((a, b) => {\n const na = Number(a);\n const nb = Number(b);\n if (!isNaN(na) && !isNaN(nb)) return na - nb;\n return a.localeCompare(b);\n });\n }\n\n const result: Record<string, unknown> = {};\n\n if (isObject(val)) {\n for (const k of keys) {\n const v = deepProcess(val[k]);\n if (!isUndefined(v)) result[k] = v;\n }\n }\n\n return result;\n }\n\n return val;\n };\n\n try {\n return JSON.stringify(deepProcess(value), null, pretty ? 2 : 0);\n } catch (err) {\n console.warn(\"Error in safeStableStringify:\", err);\n return \"{}\";\n }\n};\n\n// ----------------------------------------------------------------\n\n/** @internal */\ntype NormalizeSpacesOptions = {\n /** If `true`, skips normalization and only trims whitespace from start & end, defaultValue: `false`.\n *\n * @default false\n */\n trimOnly?: boolean;\n /** If `false`, skips trimming value, defaultValue: `true`.\n *\n * @default true\n */\n withTrim?: boolean;\n};\n\n/** @internal */\nexport const normalizeSpaces = (\n value: string | null | undefined,\n options: NormalizeSpacesOptions = {\n withTrim: true,\n trimOnly: false\n }\n): string => {\n if (!isNonEmptyString(value)) return \"\";\n\n if (!isPlainObject(options)) {\n options = {};\n }\n\n const { trimOnly = false, withTrim = true } = options;\n\n if (trimOnly) return value.trim();\n\n if (withTrim) {\n value = value.trim();\n }\n\n // Remove all duplicate spaces (including tabs, newlines, etc.)\n return value.replace(/\\s+/g, \" \");\n};\n\n// ----------------------------------------------------------------\n\n/** ----------------------------------------------------------------\n * * ***Checks whether a value is an array of strings.***\n * ----------------------------------------------------------------\n *\n * Type guard that validates the input is an `Array` where **all**\n * elements are strings.\n *\n * @param {unknown} v - The value to test.\n *\n * @returns {boolean} `true` if the value is a `string[]`.\n *\n * @internal\n */\nexport const isStringArray = (v: unknown): v is string[] =>\n isArray(v) && v.every((i) => isString(i));\n\n/** ----------------------------------------------------------------\n * * ***Checks whether a value is a Set of strings.***\n * ----------------------------------------------------------------\n *\n * Type guard that validates the input is a `Set` where **all**\n * entries are strings.\n *\n * @param {unknown} v - The value to test.\n *\n * @returns {boolean} `true` if the value is a `Set<string>`.\n *\n * @internal\n */\nexport const isStringSet = (v: unknown): v is Set<string> =>\n isSet(v) && [...v].every((i) => isString(i));\n\n/** ----------------------------------------------------------------\n * * ***Asserts that a value is a valid pattern input.***\n * ----------------------------------------------------------------\n *\n * Runtime assertion that validates the provided value is one of the\n * supported pattern types:\n * - `string`.\n * - `string[]`.\n * - `Set<string>`.\n *\n * This function is intended to be used at API boundaries to ensure\n * type safety before further processing.\n *\n * @param {unknown} v - The value to validate.\n * @param {string|undefined} parameterKey - The key parameter to identity which is invalid, default `\"pattern\"`.\n *\n * @throws {TypeError} If the value is not a valid pattern input.\n *\n * @example\n * ```ts\n * assertValidatePatternArgs(pattern);\n * // pattern is now typed as:\n * // string | string[] | Set<string>\n * ```\n *\n * @internal\n */\nexport const assertValidatePatternArgs: (\n v: unknown,\n parameterKey?: string\n) => asserts v is string | string[] | Set<string> = (\n v: unknown,\n parameterKey: string = \"pattern\"\n) => {\n if (!isString(v) && !isStringArray(v) && !isStringSet(v)) {\n throw new TypeError(\n `The \\`${parameterKey}\\` argument must be a string, string[] or Set<string>.`\n );\n }\n};\n\n/** ----------------------------------------------------------------\n * * ***Flattens nested arrays and extracts string values only.***\n * ----------------------------------------------------------------\n *\n * Recursively flattens an input array to **infinite depth** and\n * filters out all non-string values.\n *\n * - *Normalization rules:*\n * - Nested arrays are flattened using `Array.prototype.flat(Infinity)`.\n * - Only values with `typeof === \"string\"` are kept.\n * - Non-string values are discarded.\n *\n * The returned array is always a **new instance** and does not mutate\n * the original input.\n *\n * @param {readonly unknown[]} input - Arbitrary nested array input.\n *\n * @returns {string[]} A flat array containing only string values.\n *\n * @example\n * ```ts\n * flattenStrings([\"a\", [\"b\", [\"c\"]], 1, null]);\n * // ➔ [\"a\", \"b\", \"c\"]\n * ```\n *\n * @internal\n */\nexport const flattenStrings = (input: readonly unknown[]): string[] => {\n return input.flat(Infinity).filter((v): v is string => typeof v === \"string\");\n};\n\n/** ----------------------------------------------------------------\n * * ***Normalizes pattern input into a new `Set<string>` instance.***\n * ----------------------------------------------------------------\n *\n * Converts a pattern value into a deduplicated `Set<string>` for\n * consistent internal handling.\n *\n * #### Normalization behavior\n * - `string` ➔ wrapped into a `Set`.\n * - `string[]` ➔ converted into a `Set` (duplicates removed).\n * - `Set<string>` ➔ cloned into a new `Set`.\n *\n * The returned set is **always a new instance** and the original\n * input is never mutated.\n *\n * #### Validation\n * When `withValidationType` is `true` (default), the input will be\n * validated before normalization.\n *\n * If the provided `pattern` is not one of the supported types,\n * a `TypeError` will be thrown.\n *\n * @param pattern - Pattern value to normalize.\n * @param options - Optional configuration object.\n * @param options.withValidationType - Whether to validate the input\n * before normalization. Defaults to `true`.\n * @param options.parameterKey - The key parameter to identity which is invalid, default `\"pattern\"`.\n *\n * @returns A new deduplicated `Set<string>` instance.\n *\n * @throws {TypeError}\n * Thrown when `pattern` is not a `string`, `string[]`, or `Set<string>`\n * and validation is enabled.\n *\n * @example\n * ```ts\n * toStringSet(\"a\");\n * // ➔ Set { \"a\" }\n * ```\n *\n * @example\n * ```ts\n * toStringSet([\"a\", \"b\", \"a\"]);\n * // ➔ Set { \"a\", \"b\" }\n * ```\n *\n * @example\n * ```ts\n * toStringSet(new Set([\"x\", \"y\"]));\n * // ➔ Set { \"x\", \"y\" }\n * ```\n *\n * @example\n * ```ts\n * toStringSet(123 as any);\n * // ❌ Throws TypeError\n * ```\n *\n * @example\n * ```ts\n * // Disable validation (use cautiously)\n * toStringSet(\"a\", { withValidationType: false });\n * toStringSet(123 as any, { withValidationType: false });\n * ```\n *\n * @internal\n */\nexport const toStringSet = (\n pattern: string | string[] | Set<string>,\n options: {\n withValidationType?: boolean;\n /**\n * The key parameter to identity which is invalid.\n *\n * @default \"pattern\"\n */\n parameterKey?: string;\n } = {}\n): Set<string> => {\n const { withValidationType = true, parameterKey = \"pattern\" } = options;\n if (withValidationType) assertValidatePatternArgs(pattern, parameterKey);\n\n return toObjectSet(pattern);\n};\n\n/** ----------------------------------------------------------------\n * * ***Normalizes a value into a deduplicated `Set`.***\n * ----------------------------------------------------------------\n *\n * Converts a single value, array, or existing `Set` into a `Set<T>`\n * for consistent internal handling.\n *\n * - *Normalization rules:*\n * - `T` ➔ wrapped in a `Set`.\n * - `T[]` ➔ converted to a `Set` (duplicates removed).\n * - `Set<T>` ➔ returned as-is.\n *\n * The returned `Set` is **not mutated** internally by this function.\n * If an existing `Set` is provided, it will be reused.\n *\n * @typeParam T - Value type stored in the set.\n *\n * @param {T | T[] | Set<T>} value - Value to normalize.\n *\n * @returns {Set<T>} A deduplicated set of values.\n *\n * @example\n * ```ts\n * toObjectSet(1);\n * // ➔ Set { 1 }\n * ```\n *\n * @example\n * ```ts\n * toObjectSet([1, 2, 1]);\n * // ➔ Set { 1, 2 }\n * ```\n *\n * @example\n * ```ts\n * toObjectSet(new Set([1, 2]));\n * // ➔ Set { 1, 2 }\n * ```\n *\n * @internal\n */\nexport const toObjectSet = <T>(value: T | T[] | Set<T>): Set<T> => {\n if (isSet(value)) return value;\n\n return new Set(isArray(value) ? value : [value]);\n};\n\n/** ----------------------------------------------------------------\n * * ***Normalize a value into an array.***\n * ----------------------------------------------------------------\n *\n * Converts a single value or an array-like value into a **new array**\n * with consistent typing.\n *\n * - If `value` is already an array ➔ returned as-is.\n * - If `value` is a single item ➔ wrapped in an array.\n *\n * This utility is useful for APIs or configs that accept\n * either a single value or multiple values.\n *\n * ----------------------------------------------------------------\n *\n * @typeParam T\n * The element type of the resulting array.\n *\n * @param value\n * A value or array of values.\n *\n * @returns\n * A normalized array of type `T[]`.\n *\n * ----------------------------------------------------------------\n *\n * @example\n * ```ts\n * toArray(1);\n * // ➔ [1]\n *\n * toArray(\"hello\");\n * // ➔ [\"hello\"]\n *\n * toArray([1, 2, 3]);\n * // ➔ [1, 2, 3]\n * ```\n *\n * @example\n * ```ts\n * type User = { id: number };\n *\n * toArray<User>({ id: 1 });\n * // ➔ [{ id: 1 }]\n *\n * toArray<User>([{ id: 1 }, { id: 2 }]);\n * // ➔ [{ id: 1 }, { id: 2 }]\n * ```\n *\n * @remarks\n * This function does **not** flatten nested arrays.\n * If `value` is already an array, the original reference is preserved.\n *\n * @internal\n */\nexport const toArray = <T>(value: Arrayable<T>): T[] => {\n return isArray(value) ? value : [value];\n};\n"],"mappings":"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"}
@@ -1,60 +0,0 @@
1
- /*!
2
- * ========================================================================
3
- * @rzl-zone/build-tools
4
- * ------------------------------------------------------------------------
5
- * Version: `0.0.10`
6
- * Author: `Rizalvin Dwiky <rizalvindwiky1998@gmail.com>`
7
- * Repository: `https://github.com/rzl-zone/rzl-zone/tree/main/packages/build-tools`
8
- * ========================================================================
9
- */
10
-
11
- "use strict";
12
- const require_helper = require('./helper-DvCvgDxy.cjs');
13
- const require_server = require('./server-DZvrqlyy.cjs');
14
- const require_client = require('./client-DnTjQyyo.cjs');
15
- require("@rzl-zone/node-only");
16
- let node_path = require("node:path");
17
- node_path = require_helper.__toESM(node_path, 1);
18
- const getPackageJson = async (options = {}) => {
19
- let current = require_helper.isNonEmptyString(options.cwd) ? node_path.default.resolve(options.cwd) : process.cwd();
20
- while (true) {
21
- const pkgPath = node_path.default.join(current, "package.json");
22
- if (require_server.fsExtra.existsSync(pkgPath)) try {
23
- return JSON.parse(require_server.fsExtra.readFileSync(pkgPath, "utf-8"));
24
- } catch (err) {
25
- throw new Error(`[@rzl-zone/build-tools] - (get-package-json): Invalid package.json at '${pkgPath}'` + require_client.EOL + `Reason: ${err?.message || "unknown"}`, { cause: err });
26
- }
27
- const parent = node_path.default.dirname(current);
28
- if (parent === current) break;
29
- current = parent;
30
- }
31
- throw new Error("[@rzl-zone/build-tools] - (get-package-json): Unable to locate package.json");
32
- };
33
- const generatePackageBanner = async (options = {}) => {
34
- let pkgJson;
35
- if (require_helper.isPlainObject(options.packageJson)) pkgJson = options.packageJson;
36
- else try {
37
- pkgJson = await getPackageJson();
38
- } catch (error) {
39
- throw new Error("[@rzl-zone/build-tools] - (generate-package-banner): Failed to resolve package.json" + require_client.EOL + `Reason: ${error?.message || "unknown"}`, { cause: error });
40
- }
41
- const withEof = options.withEof ?? true;
42
- const title = options.title ?? (require_helper.isNonEmptyString(pkgJson.name) ? pkgJson.name : "Unknown Package");
43
- const version = require_helper.isNonEmptyString(pkgJson.version) ? pkgJson.version : "Unknown";
44
- const author = options.author ?? (require_helper.isNonEmptyString(pkgJson.author) ? pkgJson.author : require_helper.isPlainObject(pkgJson.author) && require_helper.isNonEmptyString(pkgJson.author.name) ? pkgJson.author.name : "Unknown");
45
- const repository = require_helper.isNonEmptyString(pkgJson.homepage) ? pkgJson.homepage.split("#")[0] : require_helper.isNonEmptyString(pkgJson.repository) ? pkgJson.repository.replace(/^git\+/, "").replace(/\.git$/, "") : require_helper.isPlainObject(pkgJson.repository) && require_helper.isNonEmptyString(pkgJson.repository.url) ? pkgJson.repository.url.replace(/^git\+/, "").replace(/\.git$/, "") : "Unknown";
46
- return require_client.joinLinesLoose("/*!", "* ========================================================================", `* ${title}`, "* ------------------------------------------------------------------------", `* Version: \`${version}\``, `* Author: \`${author}\``, `* Repository: \`${repository}\``, "* ========================================================================", "*/", withEof ? "" : false);
47
- };
48
- Object.defineProperty(exports, 'generatePackageBanner', {
49
- enumerable: true,
50
- get: function () {
51
- return generatePackageBanner;
52
- }
53
- });
54
- Object.defineProperty(exports, 'getPackageJson', {
55
- enumerable: true,
56
- get: function () {
57
- return getPackageJson;
58
- }
59
- });
60
- //# sourceMappingURL=package-banner-BHyF8RdG.cjs.map
@@ -1,142 +0,0 @@
1
- /*!
2
- * ========================================================================
3
- * @rzl-zone/build-tools
4
- * ------------------------------------------------------------------------
5
- * Version: `0.0.10`
6
- * Author: `Rizalvin Dwiky <rizalvindwiky1998@gmail.com>`
7
- * Repository: `https://github.com/rzl-zone/rzl-zone/tree/main/packages/build-tools`
8
- * ========================================================================
9
- */
10
-
11
- import { p as isPlainObject, y as safeStableStringify } from "./helper-CWU8QYq3.js";
12
- import "@rzl-zone/node-only";
13
- import os from "node:os";
14
- import _fastGlob from "fast-glob";
15
- import _fsExtra from "fs-extra";
16
- import "dotenv/config";
17
- const defaultPatternOptions = {
18
- absolute: false,
19
- baseNameMatch: false,
20
- caseSensitiveMatch: true,
21
- concurrency: os.cpus().length,
22
- dot: true,
23
- followSymbolicLinks: true,
24
- globstar: true,
25
- ignore: [],
26
- markDirectories: false,
27
- objectMode: false,
28
- onlyDirectories: false,
29
- onlyFiles: true,
30
- unique: true,
31
- throwErrorOnBrokenSymbolicLink: false
32
- };
33
- function isKeyAllowed(key, policy) {
34
- if (!policy) return true;
35
- if (policy.filesOnly && (key === "onlyFiles" || key === "onlyDirectories")) return false;
36
- if (policy.forceUnique && key === "unique") return false;
37
- return true;
38
- }
39
- const PATTERN_OPTION_KEYS = new Set(Object.keys(defaultPatternOptions));
40
- function assignIfAllowed(key, source, target) {
41
- target[key] = source[key];
42
- }
43
- function sanitizePatternOptions(input, policy) {
44
- if (!isPlainObject(input)) return {};
45
- const source = input;
46
- const result = {};
47
- for (const key of Object.keys(source)) if (PATTERN_OPTION_KEYS.has(key) && isKeyAllowed(key, policy)) assignIfAllowed(key, source, result);
48
- return result;
49
- }
50
- function resolvePatternOptions(input, policy) {
51
- const clean = sanitizePatternOptions(input, policy);
52
- const options = {
53
- ...defaultPatternOptions,
54
- ...clean
55
- };
56
- if (policy?.filesOnly) {
57
- delete options.onlyFiles;
58
- delete options.onlyDirectories;
59
- }
60
- if (policy?.forceUnique) delete options.unique;
61
- return options;
62
- }
63
- function sourceOfPatternOptions(value, defaultValue) {
64
- const stableStringifyOptions = {
65
- keepUndefined: true,
66
- sortArray: true,
67
- sortKeys: true
68
- };
69
- return safeStableStringify(value, stableStringifyOptions) === safeStableStringify(defaultValue, stableStringifyOptions) ? "default" : "overridden";
70
- }
71
- const USE_EMOJI = process.env.FORCE_EMOJI === "1";
72
- const emojiIcons = {
73
- start: "🕐",
74
- arrowRight: "▶️",
75
- arrowRightMini: "›",
76
- bulletBold: "●",
77
- bullet: "•",
78
- whiteCircle: "○",
79
- whiteBullet: "◦",
80
- smallSquare: "▪",
81
- success: "✅",
82
- warn: "⚠️",
83
- error: "❌",
84
- config: "⚙️",
85
- settings: "🛠️",
86
- file: "📄",
87
- files: "📁",
88
- folder: "📂",
89
- path: "🧭",
90
- add: "➕",
91
- remove: "➖",
92
- update: "♻️",
93
- copy: "📋",
94
- move: "📦",
95
- clean: "🧹",
96
- build: "🏗️",
97
- generate: "🧩",
98
- compile: "⚡",
99
- watch: "👀",
100
- info: "ℹ️",
101
- debug: "🐛",
102
- question: "❓",
103
- separator: "━"
104
- };
105
- const asciiIcons = {
106
- start: "▶",
107
- arrowRight: "▶",
108
- arrowRightMini: "›",
109
- bulletBold: "●",
110
- bullet: "•",
111
- whiteCircle: "○",
112
- whiteBullet: "◦",
113
- smallSquare: "▪",
114
- success: "✅",
115
- warn: "⚠️ ",
116
- error: "❌",
117
- config: "#",
118
- settings: "@",
119
- file: "F",
120
- files: "DIR",
121
- folder: "DIR",
122
- path: "~",
123
- add: "+",
124
- remove: "-",
125
- update: "~",
126
- copy: "=",
127
- move: ">",
128
- clean: "x",
129
- build: "#",
130
- generate: "*",
131
- compile: ">",
132
- watch: "o",
133
- info: "i",
134
- debug: "d",
135
- question: "?",
136
- separator: "-"
137
- };
138
- const ICONS = Object.freeze(USE_EMOJI ? emojiIcons : asciiIcons);
139
- const fsExtra = _fsExtra;
140
- const fastGlob = _fastGlob;
141
- export { resolvePatternOptions as a, defaultPatternOptions as i, fsExtra as n, sourceOfPatternOptions as o, ICONS as r, fastGlob as t };
142
- //# sourceMappingURL=server-BA7ruG1h.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"server-BA7ruG1h.js","names":[],"sources":["../src/_internal/libs/fast-globe-options.ts","../src/utils/helper/icons.ts","../src/utils/server.ts"],"sourcesContent":["import \"@rzl-zone/node-only\";\n\nimport type { OmitStrict, Prettify } from \"../types/extra\";\n\nimport os from \"node:os\";\nimport * as fg from \"fast-glob\";\n\nimport {\n isPlainObject,\n safeStableStringify,\n type SafeStableStringifyOptions\n} from \"@/_internal/utils/helper\";\n\ntype IfTrueGeneric<T extends boolean, K> = T extends true ? K : never;\n\n/** ----------------------------------------------------------------\n * * ***Supported pattern matching options.***\n * ----------------------------------------------------------------\n * Defines the subset of {@link fg | `fast-glob`} options exposed by\n * this module for pattern-based file resolution.\n *\n * This type intentionally omits several low-level or environment-\n * controlled fields to ensure predictable and safe behavior.\n *\n * ----------------------------------------------------------------\n *\n * *Excluded options (managed internally):*\n *\n * - `fs`\n * - `cwd`\n * - `stats`\n * - `deep`\n * - `extglob`\n * - `suppressErrors`\n * - `braceExpansion`\n *\n * These fields are controlled by the runtime environment and should\n * not be overridden by consumers.\n *\n * ----------------------------------------------------------------\n * @template FilesOnly\n * When `true`, directory filtering options (`onlyFiles`, `onlyDirectories`)\n * are removed from the public API surface, preventing consumers from\n * modifying directory matching behavior.\n *\n * @template ForceUnique\n * When `true`, the `unique` option is removed from the public API to enforce internal uniqueness handling.\n *\n * This allows higher-level utilities to guarantee that matched results\n * are always deduplicated.\n *\n * ----------------------------------------------------------------\n *\n * This type serves as the public configuration contract used when\n * resolving glob patterns.\n */\nexport type PatternOptions<\n FilesOnly extends boolean = false,\n ForceUnique extends boolean = false\n> = OmitStrict<\n fg.Options,\n | \"fs\"\n | \"cwd\"\n | \"stats\"\n | \"deep\"\n | \"extglob\"\n | \"suppressErrors\"\n | \"braceExpansion\"\n | \"dot\"\n | IfTrueGeneric<FilesOnly, \"onlyFiles\" | \"onlyDirectories\">\n | IfTrueGeneric<ForceUnique, \"unique\">,\n { skipPrettify: true }\n> & {\n /** Allow patterns to match entries that begin with a period (`.`).\n *\n * @default true\n */\n dot?: boolean;\n};\n\n/** ----------------------------------------------------------------\n * * ***Pattern configuration wrapper.***\n * ----------------------------------------------------------------\n *\n * Provides an optional container for {@link PatternOptions | `PatternOptions`}.\n *\n * This wrapper allows pattern matching configuration to be composed\n * within higher-level configuration objects without flattening\n * the option namespace.\n *\n * ----------------------------------------------------------------\n *\n * @template FilesOnly\n * When `true`, directory-related options (`onlyFiles`, `onlyDirectories`)\n * are removed from the public configuration to enforce file-only matching.\n *\n * @template ForceUnique\n * When `true`, the `unique` option is removed from the underlying\n * {@link PatternOptions | `PatternOptions`} to guarantee deduplicated results.\n *\n * ----------------------------------------------------------------\n *\n * @example\n * ```ts\n * const config: PatternConfig = {\n * patternOptions: {\n * dot: true\n * }\n * };\n * ```\n */\nexport type PatternConfig<\n FilesOnly extends boolean = false,\n ForceUnique extends boolean = false\n> = Prettify<{\n /** ----------------------------------------------------------------\n * * ***Pattern matching options.***\n * ----------------------------------------------------------------\n *\n * Optional configuration for controlling file pattern resolution.\n *\n * When provided, these options are sanitized and merged with\n * the internal default configuration before being passed to\n * {@link fg | `fast-glob`}.\n *\n * @see {@link PatternOptions | `PatternOptions`} for supported fields.\n */\n patternOptions?: PatternOptions<FilesOnly, ForceUnique>;\n}>;\n\n/** ----------------------------------------------------------------\n * * ***Default pattern matching configuration.***\n * ----------------------------------------------------------------\n *\n * Represents the canonical baseline configuration used when\n * resolving pattern options.\n *\n * These values are applied whenever a user does not explicitly\n * provide overrides.\n *\n * This object also acts as the runtime source of truth for\n * allowed pattern option keys.\n */\nexport const defaultPatternOptions: PatternOptions = {\n absolute: false,\n baseNameMatch: false,\n caseSensitiveMatch: true,\n concurrency: os.cpus().length,\n dot: true,\n followSymbolicLinks: true,\n globstar: true,\n ignore: [],\n markDirectories: false,\n objectMode: false,\n onlyDirectories: false,\n onlyFiles: true,\n unique: true,\n throwErrorOnBrokenSymbolicLink: false\n};\n\n/** ----------------------------------------------------------------\n * * ***Determines whether a pattern option key is allowed.***\n * ----------------------------------------------------------------\n *\n * Evaluates whether a given {@link PatternOptions | `PatternOptions`}\n * key is permitted under the provided runtime policy.\n *\n * This function enforces restrictions such as:\n *\n * - Disallowing directory-related options when `filesOnly` is enabled.\n * - Preventing external control over the `unique` option when\n * `forceUnique` is enabled.\n *\n * ----------------------------------------------------------------\n *\n * @param key\n * A candidate {@link PatternOptions | `PatternOptions`} property key.\n *\n * @param policy\n * Optional runtime policy controlling which keys are allowed.\n *\n * @returns\n * `true` if the key is permitted under the current policy,\n * otherwise `false`.\n *\n * @internal\n */\nfunction isKeyAllowed(\n key: keyof PatternOptions,\n policy?: PatternRuntimePolicy<boolean, boolean>\n): boolean {\n if (!policy) return true;\n\n if (policy.filesOnly && (key === \"onlyFiles\" || key === \"onlyDirectories\"))\n return false;\n\n if (policy.forceUnique && key === \"unique\") return false;\n\n return true;\n}\n\n/** ----------------------------------------------------------------\n * * ***Runtime whitelist of allowed pattern option keys.***\n * ----------------------------------------------------------------\n *\n * Derived directly from {@link defaultPatternOptions | `defaultPatternOptions`}.\n *\n * This ensures strict synchronization between:\n *\n * - The static {@link PatternOptions | `PatternOptions`} type.\n * - Runtime validation logic used during option sanitization.\n *\n * By deriving the key list from the default configuration,\n * this module avoids manual duplication of allowed option names.\n *\n * ----------------------------------------------------------------\n *\n * This whitelist is used internally to:\n *\n * - Remove unknown properties from user-provided configuration.\n * - Guarantee that only supported options are passed to\n * {@link fg | `fast-glob`}.\n *\n * ----------------------------------------------------------------\n *\n * @internal\n */\nconst PATTERN_OPTION_KEYS = new Set<keyof PatternOptions>(\n Object.keys(defaultPatternOptions) as (keyof PatternOptions)[]\n);\n\n/** ----------------------------------------------------------------\n * * ***Assigns a validated pattern option property.***\n * ----------------------------------------------------------------\n *\n * Performs a type-safe assignment from a source object into a\n * partial {@link PatternOptions | `PatternOptions`} result object.\n *\n * A generic constraint is used to preserve proper indexed access\n * typing and avoid union assignment limitations in TypeScript.\n *\n * This helper assumes that:\n *\n * - The provided `key` has already been validated against\n * {@link PATTERN_OPTION_KEYS | `PATTERN_OPTION_KEYS`}.\n * - The property exists on the `source` object.\n *\n * ----------------------------------------------------------------\n *\n * @template K\n * A valid key of {@link PatternOptions | `PatternOptions`}.\n *\n * @param key\n * The validated pattern option key to assign.\n *\n * @param source\n * The original input object containing the property value.\n *\n * @param target\n * The partial result object receiving the assigned value.\n *\n * @internal\n */\nfunction assignIfAllowed<K extends keyof PatternOptions>(\n key: K,\n source: Record<string, unknown>,\n target: Partial<PatternOptions>\n) {\n target[key] = source[key] as PatternOptions[K];\n}\n\n/** ----------------------------------------------------------------\n * * ***Runtime policy controlling pattern option exposure.***\n * ----------------------------------------------------------------\n *\n * Defines runtime constraints that restrict which fields from\n * {@link PatternOptions | `PatternOptions`} are allowed to appear\n * in the final resolved configuration.\n *\n * This policy is primarily used by higher-level utilities that\n * enforce stricter behavior than the raw {@link fg | `fast-glob`} API.\n *\n * ----------------------------------------------------------------\n *\n * *Supported policies:*\n *\n * - `filesOnly`\n * Prevents directory-related configuration from being externally\n * controlled.\n *\n * - `forceUnique`\n * Ensures that uniqueness behavior is handled internally and\n * cannot be overridden by user configuration.\n *\n * ----------------------------------------------------------------\n *\n * These policies influence both:\n *\n * - Runtime sanitization of user-provided pattern options.\n * - Final resolution of merged configuration values.\n *\n * ----------------------------------------------------------------\n *\n * @template FilesOnly\n * Indicates whether directory-related options should be excluded.\n *\n * @template ForceUnique\n * Indicates whether the `unique` option should be excluded.\n */\nexport type PatternRuntimePolicy<\n FilesOnly extends boolean = boolean,\n ForceUnique extends boolean = boolean\n> = {\n /** ----------------------------------------------------------------\n * * ***Restricts directory-related pattern options.***\n * ----------------------------------------------------------------\n *\n * When enabled, directory filtering options are excluded from the\n * final configuration produced by the pattern resolution process.\n *\n * This prevents external configuration from modifying whether\n * directories or files are matched by the underlying\n * {@link fg | `fast-glob`} operation.\n *\n * ----------------------------------------------------------------\n *\n * *Affected options:*\n *\n * - `onlyFiles`\n * - `onlyDirectories`\n *\n * ----------------------------------------------------------------\n *\n * When `true`, these options are ignored during sanitization and\n * removed from the final resolved configuration.\n *\n * ----------------------------------------------------------------\n * @default false\n */\n filesOnly?: FilesOnly;\n\n /** ----------------------------------------------------------------\n * * ***Enforces internal uniqueness behavior.***\n * ----------------------------------------------------------------\n *\n * When enabled, the `unique` option is excluded from user-provided\n * configuration and controlled internally by the runtime.\n *\n * This ensures that result deduplication behavior cannot be\n * overridden by external configuration.\n *\n * ----------------------------------------------------------------\n *\n * *Affected option:*\n *\n * - `unique`\n *\n * ----------------------------------------------------------------\n *\n * When `true`, this option is ignored during sanitization and\n * removed from the final resolved configuration.\n *\n * ----------------------------------------------------------------\n * @default false\n */\n forceUnique?: ForceUnique;\n};\n\n/** ----------------------------------------------------------------\n * * ***Sanitizes pattern options by removing unknown keys.***\n * ----------------------------------------------------------------\n *\n * Ensures that the provided object only contains keys that exist in\n * {@link defaultPatternOptions | `defaultPatternOptions`}, any unknown keys will be removed.\n *\n * This function is intended for API boundary validation to prevent\n * unsafe or unexpected configuration injection.\n *\n * - *Behavior:*\n * - Ignores non-object values (returns empty object).\n * - Removes keys not present in {@link defaultPatternOptions | `defaultPatternOptions`}.\n * - Does NOT mutate the original object.\n *\n * ----------------------------------------------------------------\n *\n * @param input\n * The value to sanitize.\n *\n * @param policy\n * Optional runtime policy restricting which pattern options\n * are allowed during sanitization.\n *\n * @returns\n * A new object containing only allowed pattern option keys.\n *\n * @example\n * ```ts\n * const userOptions = {\n * absolute: true,\n * dot: true,\n * fakeKey: 123\n * };\n *\n * const clean = sanitizePatternOptions(userOptions);\n *\n * // Result:\n * // {\n * // absolute: true,\n * // dot: true\n * // }\n * ```\n */\nexport function sanitizePatternOptions(\n input: unknown,\n policy?: PatternRuntimePolicy<false, false>\n): Partial<PatternOptions<false, false>>;\nexport function sanitizePatternOptions(\n input: unknown,\n policy?: PatternRuntimePolicy<true, false>\n): Partial<PatternOptions<true, false>>;\nexport function sanitizePatternOptions(\n input: unknown,\n policy?: PatternRuntimePolicy<false, true>\n): Partial<PatternOptions<false, true>>;\nexport function sanitizePatternOptions(\n input: unknown,\n policy?: PatternRuntimePolicy<true, true>\n): Partial<PatternOptions<true, true>>;\nexport function sanitizePatternOptions(\n input: unknown,\n policy?: PatternRuntimePolicy<false, false>\n): Partial<PatternOptions<false, false>>;\nexport function sanitizePatternOptions(\n input: unknown,\n policy?: PatternRuntimePolicy<boolean, boolean>\n): Partial<PatternOptions>;\nexport function sanitizePatternOptions(\n input: unknown,\n policy?: PatternRuntimePolicy<boolean, boolean>\n): Partial<PatternOptions> {\n if (!isPlainObject(input)) return {};\n\n const source = input as Record<string, unknown>;\n const result: Partial<PatternOptions> = {};\n\n for (const key of Object.keys(source) as (keyof PatternOptions)[]) {\n if (PATTERN_OPTION_KEYS.has(key) && isKeyAllowed(key, policy)) {\n assignIfAllowed(key, source, result);\n }\n }\n\n return result;\n}\n\n/** ----------------------------------------------------------------\n * * ***Resolves pattern options with default values.***\n * ----------------------------------------------------------------\n *\n * Applies {@link sanitizePatternOptions | `sanitizePatternOptions`} to the provided input and merges\n * the result with `defaultPatternOptions`.\n *\n * - Unknown keys are removed.\n * - Missing keys fall back to defaults.\n *\n * Guarantees a fully-formed {@link PatternOptions | `PatternOptions`} object safe for direct\n * usage with `fast-glob`.\n *\n * ----------------------------------------------------------------\n *\n * @param input\n * Optional user-provided pattern options.\n *\n * @param policy\n * Optional runtime policy restricting which configuration\n * fields are allowed in the final resolved options.\n *\n * @returns\n * A complete and validated\n * {@link PatternOptions | `PatternOptions`} object ready for\n * direct usage with {@link fg | `fast-glob`}.\n *\n * @example\n * ```ts\n * const options = resolvePatternOptions({\n * dot: true,\n * fakeKey: 123\n * });\n *\n * // Result:\n * // {\n * // absolute: false,\n * // baseNameMatch: false,\n * // ...\n * // dot: true,\n * // ...\n * // }\n *\n * const matched = await fastGlobe(patterns, options);\n * ```\n */\nexport function resolvePatternOptions(\n input: unknown,\n policy?: PatternRuntimePolicy<false, false>\n): PatternOptions<false, false>;\nexport function resolvePatternOptions(\n input: unknown,\n policy?: PatternRuntimePolicy<true, false>\n): PatternOptions<true, false>;\nexport function resolvePatternOptions(\n input: unknown,\n policy?: PatternRuntimePolicy<false, true>\n): PatternOptions<false, true>;\nexport function resolvePatternOptions(\n input: unknown,\n policy?: PatternRuntimePolicy<true, true>\n): PatternOptions<true, true>;\nexport function resolvePatternOptions(\n input: unknown,\n policy?: PatternRuntimePolicy<false, false>\n): PatternOptions<false, false>;\nexport function resolvePatternOptions(\n input: unknown,\n policy?: PatternRuntimePolicy<boolean, boolean>\n): PatternOptions {\n const clean = sanitizePatternOptions(input, policy);\n\n const options: PatternOptions = {\n ...defaultPatternOptions,\n ...clean\n };\n\n if (policy?.filesOnly) {\n delete options.onlyFiles;\n delete options.onlyDirectories;\n }\n\n if (policy?.forceUnique) {\n delete options.unique;\n }\n\n return options;\n}\n\n/** ----------------------------------------------------------------\n * * ***Stable structural equality detector.***\n * ----------------------------------------------------------------\n *\n * Determines whether two values are structurally identical using\n * deterministic serialization via `safeStableStringify`.\n *\n * - *This comparison:*\n * - Preserves `undefined` values.\n * - Sorts object keys.\n * - Sorts arrays (optional structural normalization).\n *\n * - *Ensures stable equality checks for configuration objects where:*\n * - Property order may differ.\n * - Object references are not identical.\n * - Deep comparison is required.\n *\n * ----------------------------------------------------------------\n *\n * @template T - Value type being compared.\n *\n * @param value - The current runtime value.\n * @param defaultValue - The default reference value.\n *\n * @returns\n * - `\"default\"` ➔ If values are structurally identical.\n * - `\"overridden\"` ➔ If values differ.\n *\n * @example\n * ```ts\n * const source = sourceOfPatternOptions(\n * cleanPatternOptions,\n * defaultPatternOptions\n * );\n *\n * // ➔ \"default\" | \"overridden\"\n * ```\n *\n * @internal\n */\nexport function sourceOfPatternOptions<T>(\n value: T,\n defaultValue: T\n): \"default\" | \"overridden\" {\n const stableStringifyOptions = {\n keepUndefined: true,\n sortArray: true,\n sortKeys: true\n } satisfies SafeStableStringifyOptions;\n\n const a = safeStableStringify(value, stableStringifyOptions);\n\n const b = safeStableStringify(defaultValue, stableStringifyOptions);\n\n return a === b ? \"default\" : \"overridden\";\n}\n","import \"@rzl-zone/node-only\";\n\nimport \"dotenv/config\";\n\n// eslint-disable-next-line turbo/no-undeclared-env-vars\nconst USE_EMOJI = process.env.FORCE_EMOJI === \"1\";\n\ntype Icons = {\n readonly [K in keyof typeof emojiIcons]: string;\n};\n\nconst emojiIcons = {\n /* flow */\n start: \"🕐\",\n arrowRight: \"▶️\",\n arrowRightMini: \"›\",\n\n /* list */\n bulletBold: \"●\",\n bullet: \"•\",\n whiteCircle: \"○\",\n whiteBullet: \"◦\",\n smallSquare: \"▪\",\n\n /* status */\n success: \"✅\",\n warn: \"⚠️\",\n error: \"❌\",\n\n /* config */\n config: \"⚙️\",\n settings: \"🛠️\",\n\n /* files & fs */\n file: \"📄\",\n files: \"📁\",\n folder: \"📂\",\n path: \"🧭\",\n\n /* actions */\n add: \"➕\",\n remove: \"➖\",\n update: \"♻️\",\n copy: \"📋\",\n move: \"📦\",\n clean: \"🧹\",\n\n /* build / process */\n build: \"🏗️\",\n generate: \"🧩\",\n compile: \"⚡\",\n watch: \"👀\",\n\n /* info / misc */\n info: \"ℹ️\",\n debug: \"🐛\",\n question: \"❓\",\n separator: \"━\"\n} as const;\n\nconst asciiIcons = {\n /* flow */\n start: \"▶\",\n arrowRight: \"▶\",\n arrowRightMini: \"›\",\n\n /* list */\n bulletBold: \"●\",\n bullet: \"•\",\n whiteCircle: \"○\",\n whiteBullet: \"◦\",\n smallSquare: \"▪\",\n\n /* status */\n success: \"✅\",\n warn: \"⚠️ \",\n error: \"❌\",\n\n /* config */\n config: \"#\",\n settings: \"@\",\n\n /* files & fs */\n file: \"F\",\n files: \"DIR\",\n folder: \"DIR\",\n path: \"~\",\n\n /* actions */\n add: \"+\",\n remove: \"-\",\n update: \"~\",\n copy: \"=\",\n move: \">\",\n clean: \"x\",\n\n /* build / process */\n build: \"#\",\n generate: \"*\",\n compile: \">\",\n watch: \"o\",\n\n /* info / misc */\n info: \"i\",\n debug: \"d\",\n question: \"?\",\n separator: \"-\"\n} as const satisfies Icons;\n\n/** ----------------------------------------------------------------\n * * ***CLI icon mapping (emoji or ASCII fallback).***\n * ----------------------------------------------------------------\n *\n * Provides a centralized set of visual symbols used across the CLI\n * for rendering flow indicators, status messages, filesystem labels,\n * and action markers.\n *\n * - *The icon set is determined at runtime via the environment variable:*\n * - `FORCE_EMOJI=1` ➜ Emoji icons are enabled.\n * - Otherwise ➜ ASCII-safe fallback icons are used.\n *\n * - *This ensures compatibility with:*\n * - Terminals that do not support emoji rendering.\n * - CI environments.\n * - Minimal shells or log files.\n * - *Behavior:*\n * - The object shape is identical in both modes.\n * - Only the visual representation changes.\n * - The value is resolved once at module evaluation time.\n * ----------------------------------------------------------------\n * #### Environment Control\n * ```bash\n * FORCE_EMOJI=1\n * ```\n * ----------------------------------------------------------------\n * @remarks\n * This constant is intended for internal CLI rendering only, do not mutate the returned object.\n *\n * @example\n * ```ts\n * console.log(`${ICONS.success} Build completed`);\n * ```\n *\n */\nexport const ICONS: Readonly<Icons> = Object.freeze(\n USE_EMOJI ? emojiIcons : asciiIcons\n);\n","import \"@rzl-zone/node-only\";\n\nimport _fsExtra from \"fs-extra\";\nimport _fastGlob from \"fast-glob\";\n\nexport { ICONS } from \"@/utils/helper/icons\";\n\n/** ----------------------------------------------------------------\n * * ***Node.js–only filesystem utilities (fs-extra).***\n * ----------------------------------------------------------------\n *\n * This export is a **thin re-export** of the `fs-extra` package,\n * intended for **server-side / Node.js environments only**.\n *\n * ⚠️ **DO NOT import this in browser or client-side code.**\n * The underlying implementation depends on Node.js built-in\n * modules such as `fs`, `path`, and `process`.\n *\n * - *Typical use cases:*\n * - CLI tools.\n * - Build scripts.\n * - File system manipulation on the server.\n *\n * @see {@link https://github.com/jprichardson/node-fs-extra | **`https://github.com/jprichardson/node-fs-extra`**}.\n * @environment node\n */\nexport const fsExtra: typeof _fsExtra = _fsExtra;\n\n/** ----------------------------------------------------------------\n * * ***High-performance file system globbing utility (fast-glob).***\n * ----------------------------------------------------------------\n *\n * This export re-exports the default export of `fast-glob`,\n * which is implemented using **CommonJS `export =` semantics**.\n *\n * Due to its reliance on Node.js APIs, this module is\n * **server-side only** and must not be bundled for the browser.\n *\n * - *Typical use cases:*\n * - Resolving file patterns in build tools.\n * - Scanning project directories.\n * - CLI and automation scripts.\n *\n * @see {@link https://github.com/mrmlnc/fast-glob | **`https://github.com/mrmlnc/fast-glob`**}.\n * @environment node\n */\nexport const fastGlob: typeof _fastGlob = _fastGlob;\n\nexport {\n defaultPatternOptions,\n type PatternConfig,\n type PatternOptions\n} from \"@/_internal/libs/fast-globe-options\";\n"],"mappings":"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"}
@@ -1,181 +0,0 @@
1
- /*!
2
- * ========================================================================
3
- * @rzl-zone/build-tools
4
- * ------------------------------------------------------------------------
5
- * Version: `0.0.10`
6
- * Author: `Rizalvin Dwiky <rizalvindwiky1998@gmail.com>`
7
- * Repository: `https://github.com/rzl-zone/rzl-zone/tree/main/packages/build-tools`
8
- * ========================================================================
9
- */
10
-
11
- "use strict";
12
- const require_helper = require('./helper-DvCvgDxy.cjs');
13
- require("@rzl-zone/node-only");
14
- let node_os = require("node:os");
15
- node_os = require_helper.__toESM(node_os, 1);
16
- let fast_glob = require("fast-glob");
17
- fast_glob = require_helper.__toESM(fast_glob, 1);
18
- let fs_extra = require("fs-extra");
19
- fs_extra = require_helper.__toESM(fs_extra, 1);
20
- require("dotenv/config");
21
- const defaultPatternOptions = {
22
- absolute: false,
23
- baseNameMatch: false,
24
- caseSensitiveMatch: true,
25
- concurrency: node_os.default.cpus().length,
26
- dot: true,
27
- followSymbolicLinks: true,
28
- globstar: true,
29
- ignore: [],
30
- markDirectories: false,
31
- objectMode: false,
32
- onlyDirectories: false,
33
- onlyFiles: true,
34
- unique: true,
35
- throwErrorOnBrokenSymbolicLink: false
36
- };
37
- function isKeyAllowed(key, policy) {
38
- if (!policy) return true;
39
- if (policy.filesOnly && (key === "onlyFiles" || key === "onlyDirectories")) return false;
40
- if (policy.forceUnique && key === "unique") return false;
41
- return true;
42
- }
43
- const PATTERN_OPTION_KEYS = new Set(Object.keys(defaultPatternOptions));
44
- function assignIfAllowed(key, source, target) {
45
- target[key] = source[key];
46
- }
47
- function sanitizePatternOptions(input, policy) {
48
- if (!require_helper.isPlainObject(input)) return {};
49
- const source = input;
50
- const result = {};
51
- for (const key of Object.keys(source)) if (PATTERN_OPTION_KEYS.has(key) && isKeyAllowed(key, policy)) assignIfAllowed(key, source, result);
52
- return result;
53
- }
54
- function resolvePatternOptions(input, policy) {
55
- const clean = sanitizePatternOptions(input, policy);
56
- const options = {
57
- ...defaultPatternOptions,
58
- ...clean
59
- };
60
- if (policy?.filesOnly) {
61
- delete options.onlyFiles;
62
- delete options.onlyDirectories;
63
- }
64
- if (policy?.forceUnique) delete options.unique;
65
- return options;
66
- }
67
- function sourceOfPatternOptions(value, defaultValue) {
68
- const stableStringifyOptions = {
69
- keepUndefined: true,
70
- sortArray: true,
71
- sortKeys: true
72
- };
73
- return require_helper.safeStableStringify(value, stableStringifyOptions) === require_helper.safeStableStringify(defaultValue, stableStringifyOptions) ? "default" : "overridden";
74
- }
75
- const USE_EMOJI = process.env.FORCE_EMOJI === "1";
76
- const emojiIcons = {
77
- start: "🕐",
78
- arrowRight: "▶️",
79
- arrowRightMini: "›",
80
- bulletBold: "●",
81
- bullet: "•",
82
- whiteCircle: "○",
83
- whiteBullet: "◦",
84
- smallSquare: "▪",
85
- success: "✅",
86
- warn: "⚠️",
87
- error: "❌",
88
- config: "⚙️",
89
- settings: "🛠️",
90
- file: "📄",
91
- files: "📁",
92
- folder: "📂",
93
- path: "🧭",
94
- add: "➕",
95
- remove: "➖",
96
- update: "♻️",
97
- copy: "📋",
98
- move: "📦",
99
- clean: "🧹",
100
- build: "🏗️",
101
- generate: "🧩",
102
- compile: "⚡",
103
- watch: "👀",
104
- info: "ℹ️",
105
- debug: "🐛",
106
- question: "❓",
107
- separator: "━"
108
- };
109
- const asciiIcons = {
110
- start: "▶",
111
- arrowRight: "▶",
112
- arrowRightMini: "›",
113
- bulletBold: "●",
114
- bullet: "•",
115
- whiteCircle: "○",
116
- whiteBullet: "◦",
117
- smallSquare: "▪",
118
- success: "✅",
119
- warn: "⚠️ ",
120
- error: "❌",
121
- config: "#",
122
- settings: "@",
123
- file: "F",
124
- files: "DIR",
125
- folder: "DIR",
126
- path: "~",
127
- add: "+",
128
- remove: "-",
129
- update: "~",
130
- copy: "=",
131
- move: ">",
132
- clean: "x",
133
- build: "#",
134
- generate: "*",
135
- compile: ">",
136
- watch: "o",
137
- info: "i",
138
- debug: "d",
139
- question: "?",
140
- separator: "-"
141
- };
142
- const ICONS = Object.freeze(USE_EMOJI ? emojiIcons : asciiIcons);
143
- const fsExtra = fs_extra.default;
144
- const fastGlob = fast_glob.default;
145
- Object.defineProperty(exports, 'ICONS', {
146
- enumerable: true,
147
- get: function () {
148
- return ICONS;
149
- }
150
- });
151
- Object.defineProperty(exports, 'defaultPatternOptions', {
152
- enumerable: true,
153
- get: function () {
154
- return defaultPatternOptions;
155
- }
156
- });
157
- Object.defineProperty(exports, 'fastGlob', {
158
- enumerable: true,
159
- get: function () {
160
- return fastGlob;
161
- }
162
- });
163
- Object.defineProperty(exports, 'fsExtra', {
164
- enumerable: true,
165
- get: function () {
166
- return fsExtra;
167
- }
168
- });
169
- Object.defineProperty(exports, 'resolvePatternOptions', {
170
- enumerable: true,
171
- get: function () {
172
- return resolvePatternOptions;
173
- }
174
- });
175
- Object.defineProperty(exports, 'sourceOfPatternOptions', {
176
- enumerable: true,
177
- get: function () {
178
- return sourceOfPatternOptions;
179
- }
180
- });
181
- //# sourceMappingURL=server-DZvrqlyy.cjs.map