@socketsecurity/lib 2.10.4 → 3.0.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 (72) hide show
  1. package/CHANGELOG.md +29 -24
  2. package/README.md +231 -40
  3. package/dist/constants/platform.js +1 -1
  4. package/dist/constants/platform.js.map +3 -3
  5. package/dist/cover/code.js +1 -1
  6. package/dist/cover/code.js.map +3 -3
  7. package/dist/debug.js +2 -2
  8. package/dist/debug.js.map +3 -3
  9. package/dist/dlx-binary.d.ts +29 -6
  10. package/dist/dlx-binary.js +6 -6
  11. package/dist/dlx-binary.js.map +3 -3
  12. package/dist/dlx-package.d.ts +16 -1
  13. package/dist/dlx-package.js +6 -6
  14. package/dist/dlx-package.js.map +3 -3
  15. package/dist/dlx.js +1 -1
  16. package/dist/dlx.js.map +3 -3
  17. package/dist/env/rewire.js +1 -1
  18. package/dist/env/rewire.js.map +3 -3
  19. package/dist/external/yoctocolors-cjs.d.ts +14 -0
  20. package/dist/fs.d.ts +2 -2
  21. package/dist/fs.js.map +1 -1
  22. package/dist/git.js +1 -1
  23. package/dist/git.js.map +3 -3
  24. package/dist/http-request.js +1 -1
  25. package/dist/http-request.js.map +3 -3
  26. package/dist/ipc.js +1 -1
  27. package/dist/ipc.js.map +3 -3
  28. package/dist/links/index.d.ts +65 -0
  29. package/dist/links/index.js +3 -0
  30. package/dist/links/index.js.map +7 -0
  31. package/dist/logger.d.ts +21 -18
  32. package/dist/logger.js +1 -1
  33. package/dist/logger.js.map +3 -3
  34. package/dist/packages/isolation.js +1 -1
  35. package/dist/packages/isolation.js.map +3 -3
  36. package/dist/paths.js +1 -1
  37. package/dist/paths.js.map +2 -2
  38. package/dist/process-lock.js +2 -2
  39. package/dist/process-lock.js.map +3 -3
  40. package/dist/promises.d.ts +6 -21
  41. package/dist/promises.js +1 -1
  42. package/dist/promises.js.map +2 -2
  43. package/dist/prompts/index.d.ts +115 -0
  44. package/dist/prompts/index.js +3 -0
  45. package/dist/prompts/index.js.map +7 -0
  46. package/dist/spinner.d.ts +33 -23
  47. package/dist/spinner.js +1 -1
  48. package/dist/spinner.js.map +3 -3
  49. package/dist/stdio/mask.d.ts +2 -2
  50. package/dist/stdio/mask.js +4 -4
  51. package/dist/stdio/mask.js.map +3 -3
  52. package/dist/stdio/stdout.js +1 -1
  53. package/dist/stdio/stdout.js.map +3 -3
  54. package/dist/themes/context.d.ts +80 -0
  55. package/dist/themes/context.js +3 -0
  56. package/dist/themes/context.js.map +7 -0
  57. package/dist/themes/index.d.ts +53 -0
  58. package/dist/themes/index.js +3 -0
  59. package/dist/themes/index.js.map +7 -0
  60. package/dist/themes/themes.d.ts +49 -0
  61. package/dist/themes/themes.js +3 -0
  62. package/dist/themes/themes.js.map +7 -0
  63. package/dist/themes/types.d.ts +92 -0
  64. package/dist/themes/types.js +3 -0
  65. package/dist/themes/types.js.map +7 -0
  66. package/dist/themes/utils.d.ts +78 -0
  67. package/dist/themes/utils.js +3 -0
  68. package/dist/themes/utils.js.map +7 -0
  69. package/package.json +39 -7
  70. package/dist/download-lock.d.ts +0 -49
  71. package/dist/download-lock.js +0 -10
  72. package/dist/download-lock.js.map +0 -7
package/CHANGELOG.md CHANGED
@@ -5,38 +5,43 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
- ## [2.10.4](https://github.com/SocketDev/socket-lib/releases/tag/v2.10.4) - 2025-10-31
8
+ ## [3.0.0](https://github.com/SocketDev/socket-lib/releases/tag/v3.0.0) - 2025-11-01
9
9
 
10
10
  ### Added
11
11
 
12
- - **Safe directory creation utilities**: Added `safeMkdir()` and `safeMkdirSync()` functions to the `fs` module that gracefully handle concurrent directory creation
13
- - Automatically ignores `EEXIST` errors when directory already exists (prevents race conditions)
14
- - Re-throws all other errors for proper error handling
15
- - Uses TypeScript `unknown` type for proper type narrowing in error handling
16
- - Exported from `@socketsecurity/lib/fs`
12
+ - Theme system with 5 built-in themes: `socket`, `sunset`, `brick`, `lush`, `ultra`
13
+ - `setTheme()`, `getTheme()`, `withTheme()`, `withThemeSync()` for theme management
14
+ - `createTheme()`, `extendTheme()`, `resolveColor()` helper functions
15
+ - `onThemeChange()` event listener for theme reactivity
16
+ - `link()` function for themed terminal hyperlinks in `@socketsecurity/lib/links`
17
+ - Logger and spinner now inherit theme colors automatically
18
+ - Spinner methods: `enableShimmer()`, `disableShimmer()`, `setShimmer()`, `updateShimmer()`
19
+ - DLX cross-platform binary resolution (`.cmd`, `.bat`, `.ps1` on Windows)
20
+ - DLX programmatic options aligned with CLI conventions (`force`, `quiet`, `package`)
17
21
 
18
22
  ### Changed
19
23
 
20
- - **DLX modules now use lazy-loaded file system access**: Refactored `dlx.ts`, `dlx-package.ts`, and `dlx-binary.ts` to use `getFs()` pattern for better bundler compatibility
21
- - Prevents Webpack bundling errors with Node.js built-in modules
22
- - Lazy initialization of `fs` module only when needed
23
- - Maintains consistent pattern across entire DLX subsystem
24
- - **Consistent bare imports for Node.js built-ins**: Replaced all `'node:'` prefixed imports with bare imports (e.g., `'node:fs'` → `'fs'`) across 17 source files
25
- - Better compatibility with legacy bundlers and build tools
26
- - Maintains functionality while improving tooling support
27
- - **All directory creation now uses safe utilities**: Updated all `fs.promises.mkdir()` and `fs.mkdirSync()` calls to use `safeMkdir()` and `safeMkdirSync()` throughout DLX modules
28
- - Eliminates manual `EEXIST` error handling code duplication
29
- - Cleaner, more maintainable codebase
24
+ - Theme context uses AsyncLocalStorage instead of manual stack management
25
+ - Promise retry options renamed: `factor` `backoffFactor`, `minTimeout` → `baseDelayMs`, `maxTimeout` → `maxDelayMs`
30
26
 
31
- ### Fixed
27
+ ### Removed
28
+
29
+ **BREAKING CHANGES:**
30
+
31
+ - `pushTheme()` and `popTheme()` - use `withTheme()` or `withThemeSync()` instead
32
+ - `logger` export - use `getDefaultLogger()` instead
33
+ - `spinner` export - use `getDefaultSpinner()` instead
34
+ - `download-lock.ts` - use `process-lock.ts` instead
35
+ - Promise option aliases: `factor`, `minTimeout`, `maxTimeout`
32
36
 
33
- - **v1.x environment variable backward compatibility**: Restored complete environment variable fallback chains from CLI v1.1.25
34
- - `SOCKET_CLI_API_BASE_URL` now falls back to `SOCKET_SECURITY_API_BASE_URL`
35
- - `SOCKET_CLI_API_PROXY` has 6-level fallback chain (including HTTPS_PROXY, https_proxy, HTTP_PROXY, http_proxy)
36
- - `SOCKET_CLI_API_TOKEN` has 4-level fallback chain (SOCKET_CLI_API_KEY, SOCKET_SECURITY_API_TOKEN, SOCKET_SECURITY_API_KEY)
37
- - `SOCKET_CLI_ORG_SLUG` falls back to `SOCKET_ORG_SLUG`
38
- - `SOCKET_CLI_GITHUB_TOKEN` has 3-level fallback chain (SOCKET_SECURITY_GITHUB_PAT, GITHUB_TOKEN)
39
- - Ensures seamless migration from CLI v1.x to v2.x
37
+ ---
38
+
39
+ # Changelog
40
+
41
+ All notable changes to this project will be documented in this file.
42
+
43
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
44
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
40
45
 
41
46
  ## [2.10.3](https://github.com/SocketDev/socket-lib/releases/tag/v2.10.3) - 2025-10-31
42
47
 
package/README.md CHANGED
@@ -1,87 +1,278 @@
1
1
  # @socketsecurity/lib
2
2
 
3
3
  [![Socket Badge](https://socket.dev/api/badge/npm/package/@socketsecurity/lib)](https://socket.dev/npm/package/@socketsecurity/lib)
4
- [![CI - SocketDev/socket-lib](https://github.com/SocketDev/socket-lib/actions/workflows/ci.yml/badge.svg)](https://github.com/SocketDev/socket-lib/actions/workflows/ci.yml)
5
-
4
+ [![CI](https://github.com/SocketDev/socket-lib/actions/workflows/ci.yml/badge.svg)](https://github.com/SocketDev/socket-lib/actions/workflows/ci.yml)
6
5
  [![Follow @SocketSecurity](https://img.shields.io/twitter/follow/SocketSecurity?style=social)](https://twitter.com/SocketSecurity)
7
- [![Follow @socket.dev on Bluesky](https://img.shields.io/badge/Follow-@socket.dev-1DA1F2?style=social&logo=bluesky)](https://bsky.app/profile/socket.dev)
8
6
 
9
- > Core utilities, constants, and helper functions for Socket.dev security tools.
7
+ **Core infrastructure library for Socket.dev security tools** — utilities, constants, and helpers with zero dependencies.
10
8
 
11
- ## Installation
9
+ ## Quick Start
12
10
 
13
11
  ```bash
14
- pnpm install @socketsecurity/lib
12
+ pnpm add @socketsecurity/lib
13
+ ```
14
+
15
+ ```typescript
16
+ // Import what you need - tree-shakeable exports
17
+ import { Spinner } from '@socketsecurity/lib/spinner'
18
+ import { readJsonFile } from '@socketsecurity/lib/fs'
19
+ import { NODE_MODULES } from '@socketsecurity/lib/constants/packages'
20
+
21
+ const spinner = Spinner({ text: 'Loading...' })
22
+ spinner.start()
23
+ const pkg = await readJsonFile('./package.json')
24
+ spinner.stop()
15
25
  ```
16
26
 
17
- ## Features
27
+ ## 📦 What's Inside
18
28
 
19
- - **Constants** — Access Node.js, npm, and package manager constants
20
- - **Type Definitions** — Full TypeScript support with comprehensive type exports
21
- - **Helper Utilities** — File system, path, package, and process utilities
22
- - **Environment Variables** Typed access to environment variables
23
- - **Effects** Visual effects for CLI applications
29
+ ```
30
+ @socketsecurity/lib
31
+ ├── Visual Effects → Spinners, shimmer, themes, logger
32
+ ├── File System → fs, paths, globs, temp files
33
+ ├── Package Management → npm, pnpm, yarn utilities
34
+ ├── Process & Spawn → Safe process spawning, IPC
35
+ ├── Environment → 68 typed env getters (CI, paths, etc)
36
+ ├── Constants → Node.js, npm, platform constants
37
+ ├── Utilities → Arrays, objects, strings, promises
38
+ └── Types → Full TypeScript definitions
39
+ ```
40
+
41
+ ## 💡 Key Features
24
42
 
25
- ## Usage
43
+ ### Visual Effects
44
+
45
+ **Themed spinners and text effects:**
46
+
47
+ ```typescript
48
+ import { Spinner, setTheme } from '@socketsecurity/lib'
49
+
50
+ setTheme('ultra') // 🌈 Rainbow mode!
51
+ const spinner = Spinner({ text: 'Processing...' })
52
+ spinner.enableShimmer()
53
+ spinner.start()
54
+ ```
55
+
56
+ **5 Built-in Themes:** `socket` (purple) · `coana` · `socket-firewall` · `socket-cli-python` · `ultra` (rainbow)
57
+
58
+ 👉 [**Theme System Docs**](./docs/themes.md)
59
+
60
+ ### File System
61
+
62
+ **Safe, typed file operations:**
63
+
64
+ ```typescript
65
+ import { readJsonFile, writeJsonFile } from '@socketsecurity/lib/fs'
66
+
67
+ const pkg = await readJsonFile<PackageJson>('./package.json')
68
+ await writeJsonFile('./output.json', { data: pkg })
69
+ ```
70
+
71
+ ### Package Management
72
+
73
+ **Parse and validate package specs:**
74
+
75
+ ```typescript
76
+ import { parsePackageSpec } from '@socketsecurity/lib/packages'
77
+
78
+ const spec = parsePackageSpec('lodash@^4.17.0')
79
+ // { name: 'lodash', version: '^4.17.0', type: 'range', ... }
80
+ ```
81
+
82
+ ### Environment Variables
83
+
84
+ **68 typed environment getters:**
85
+
86
+ ```typescript
87
+ import { getCI } from '@socketsecurity/lib/env/ci'
88
+ import { getHome } from '@socketsecurity/lib/env/home'
89
+ import { getNodeEnv } from '@socketsecurity/lib/env/node-env'
90
+
91
+ if (getCI()) {
92
+ console.log('Running in CI')
93
+ }
94
+ ```
26
95
 
27
96
  ### Constants
28
97
 
29
- Import Node.js and package manager constants:
98
+ **Access platform and Node.js constants:**
30
99
 
31
100
  ```typescript
32
101
  import {
33
102
  NODE_MODULES,
34
103
  PACKAGE_JSON,
35
- PNPM_LOCK_YAML,
36
104
  NPM_REGISTRY_URL,
37
105
  } from '@socketsecurity/lib/constants/packages'
106
+
107
+ import { DARWIN, WIN32 } from '@socketsecurity/lib/constants/platform'
38
108
  ```
39
109
 
40
- ### Environment Variables
110
+ ## Common Patterns
41
111
 
42
- Access typed environment variables:
112
+ ### Spinner with Progress
43
113
 
44
114
  ```typescript
45
- import { getEnv } from '@socketsecurity/lib/env/getters'
46
- import { NODE_ENV } from '@socketsecurity/lib/env/node-env'
115
+ import { withSpinner, Spinner } from '@socketsecurity/lib/spinner'
47
116
 
48
- const env = getEnv('NODE_ENV')
49
- console.log(NODE_ENV) // 'production' | 'development' | 'test'
117
+ await withSpinner({
118
+ message: 'Installing packages...',
119
+ spinner: Spinner({ color: [140, 82, 255] }),
120
+ operation: async () => {
121
+ await installPackages()
122
+ }
123
+ })
50
124
  ```
51
125
 
52
- For a complete list of available modules, see the [package.json exports](./package.json).
126
+ ### Safe Process Spawning
53
127
 
54
- ## Type Definitions
128
+ ```typescript
129
+ import { spawn } from '@socketsecurity/lib/spawn'
55
130
 
56
- All types are exported for TypeScript projects:
131
+ const result = await spawn('npm', ['install'], {
132
+ cwd: '/path/to/project',
133
+ timeout: 30000
134
+ })
135
+ ```
136
+
137
+ ### JSON File Operations
57
138
 
58
139
  ```typescript
59
- import type {
60
- PackageJson,
61
- TsConfig,
62
- LockFile,
63
- } from '@socketsecurity/lib/types'
64
- ```
140
+ import { readJsonFile, writeJsonFile } from '@socketsecurity/lib/fs'
65
141
 
66
- ## Utilities
142
+ const data = await readJsonFile('./config.json')
143
+ data.version = '2.0.0'
144
+ await writeJsonFile('./config.json', data)
145
+ ```
67
146
 
68
- Access utility modules for common operations:
147
+ ### Promise Utilities
69
148
 
70
149
  ```typescript
71
- // File system utilities
72
- import { readJsonFile, writeJsonFile } from '@socketsecurity/lib/fs'
150
+ import { timeout, retry } from '@socketsecurity/lib/promises'
73
151
 
74
- // Package utilities
75
- import { parsePackageSpec } from '@socketsecurity/lib/packages'
152
+ // Timeout after 5 seconds
153
+ const result = await timeout(fetchData(), 5000)
154
+
155
+ // Retry up to 3 times
156
+ const data = await retry(() => fetchData(), { maxAttempts: 3 })
157
+ ```
158
+
159
+ ## Module Organization
160
+
161
+ **120+ granular exports** organized by category:
162
+
163
+ ```
164
+ /constants/ → Node.js, npm, platform constants
165
+ ├─ packages → PACKAGE_JSON, NODE_MODULES, etc.
166
+ ├─ platform → DARWIN, WIN32, S_IXUSR, etc.
167
+ ├─ node → NODE_VERSION, NODE_PATH, etc.
168
+ ├─ time → MILLISECONDS_PER_*, DLX_BINARY_CACHE_TTL
169
+ └─ encoding → UTF8, CHAR_* codes
170
+
171
+ /env/ → 68 typed environment getters
172
+ ├─ ci → getCI() - Detect CI environment
173
+ ├─ home → getHome() - User home directory
174
+ ├─ node-env → getNodeEnv() - NODE_ENV value
175
+ └─ ... → And 65 more!
176
+
177
+ /packages/ → Package management utilities
178
+ ├─ validation → Package name/version validation
179
+ ├─ operations → Install, extract, manifest
180
+ ├─ registry → npm registry utilities
181
+ └─ editable → Editable installs detection
182
+
183
+ /effects/ → Visual effects for CLI
184
+ ├─ text-shimmer → Animated gradient text
185
+ ├─ pulse-frames → Pulsing text effect
186
+ └─ ultra → Rainbow gradients
76
187
 
77
- // Path utilities
78
- import { normalizePath } from '@socketsecurity/lib/paths'
188
+ /stdio/ → Terminal I/O utilities
189
+ ├─ stdout → Safe stdout operations
190
+ ├─ stderr → Safe stderr operations
191
+ ├─ clear → Clear terminal
192
+ └─ footer → Terminal footers
79
193
 
80
- // And many more...
194
+ /themes/ → Theme system for consistent branding
195
+ ├─ types → Theme type definitions
196
+ ├─ themes → 5 built-in themes
197
+ ├─ context → Global theme management
198
+ └─ utils → Color resolution, theme creation
81
199
  ```
82
200
 
83
- See the [exports map](./package.json) for all available utility modules.
201
+ ## Documentation
202
+
203
+ | Doc | Description |
204
+ |-----|-------------|
205
+ | [**Getting Started**](./docs/getting-started.md) | Development workflow, commands, architecture |
206
+ | [**Theme System**](./docs/themes.md) | Themed spinners, colors, and effects |
207
+ | [**Build Architecture**](./docs/build.md) | Vendored dependencies, build system |
208
+ | [**CLAUDE.md**](./CLAUDE.md) | Coding standards and patterns |
209
+
210
+ ## Architecture
211
+
212
+ ```
213
+ ┌─────────────────────────────────────────────────────┐
214
+ │ @socketsecurity/lib │
215
+ │ Zero runtime dependencies │
216
+ ├─────────────────────────────────────────────────────┤
217
+ │ src/ │
218
+ │ ├── constants/ 14 modules │
219
+ │ ├── env/ 68 getters │
220
+ │ ├── packages/ 12 utilities │
221
+ │ ├── effects/ 4 visual effects │
222
+ │ ├── stdio/ 9 I/O utilities │
223
+ │ ├── themes/ Theme system │
224
+ │ ├── external/ 40+ vendored deps │
225
+ │ └── ... 60+ more modules │
226
+ ├─────────────────────────────────────────────────────┤
227
+ │ Build: esbuild → CommonJS (ES2022) │
228
+ │ Types: tsgo (TypeScript Native Preview) │
229
+ │ Tests: Vitest (4600+ tests, 100% coverage) │
230
+ └─────────────────────────────────────────────────────┘
231
+ ```
232
+
233
+ ## Development
234
+
235
+ ```bash
236
+ # Setup
237
+ git clone https://github.com/SocketDev/socket-lib.git
238
+ cd socket-lib
239
+ pnpm install
240
+
241
+ # Build
242
+ pnpm run build # Production build
243
+ pnpm run dev # Watch mode
244
+
245
+ # Test
246
+ pnpm test # Run all tests
247
+ pnpm run cover # With coverage
248
+
249
+ # Quality
250
+ pnpm run check # Type check
251
+ pnpm run lint # Lint code
252
+ pnpm run fix # Auto-fix issues
253
+ ```
254
+
255
+ ## Stats
256
+
257
+ - **183** TypeScript modules
258
+ - **120+** granular exports
259
+ - **68** typed environment getters
260
+ - **14** constant modules
261
+ - **4600+** tests passing
262
+ - **Zero** runtime dependencies
263
+
264
+ ## Contributing
265
+
266
+ See [CLAUDE.md](./CLAUDE.md) for:
267
+ - Code style and patterns
268
+ - Path alias usage
269
+ - Testing guidelines
270
+ - Build system details
84
271
 
85
272
  ## License
86
273
 
87
274
  MIT
275
+
276
+ ---
277
+
278
+ **Built by Socket.dev** — [socket.dev](https://socket.dev) | [@SocketSecurity](https://twitter.com/SocketSecurity)
@@ -1,3 +1,3 @@
1
1
  /* Socket Lib - Built with esbuild */
2
- var p=Object.defineProperty;var x=Object.getOwnPropertyDescriptor;var I=Object.getOwnPropertyNames;var m=Object.prototype.hasOwnProperty;var S=(t,o)=>{for(var n in o)p(t,n,{get:o[n],enumerable:!0})},_=(t,o,n,c)=>{if(o&&typeof o=="object"||typeof o=="function")for(let r of I(o))!m.call(t,r)&&r!==n&&p(t,r,{get:()=>o[r],enumerable:!(c=x(o,r))||c.enumerable});return t};var a=t=>_(p({},"__esModule",{value:!0}),t);var w={};S(w,{DARWIN:()=>f,S_IXGRP:()=>X,S_IXOTH:()=>l,S_IXUSR:()=>R,WIN32:()=>i});module.exports=a(w);var s=require("node:os");const e=(0,s.platform)(),f=e==="darwin",i=e==="win32",R=64,X=8,l=1;0&&(module.exports={DARWIN,S_IXGRP,S_IXOTH,S_IXUSR,WIN32});
2
+ var p=Object.defineProperty;var x=Object.getOwnPropertyDescriptor;var I=Object.getOwnPropertyNames;var m=Object.prototype.hasOwnProperty;var S=(t,o)=>{for(var n in o)p(t,n,{get:o[n],enumerable:!0})},_=(t,o,n,c)=>{if(o&&typeof o=="object"||typeof o=="function")for(let r of I(o))!m.call(t,r)&&r!==n&&p(t,r,{get:()=>o[r],enumerable:!(c=x(o,r))||c.enumerable});return t};var a=t=>_(p({},"__esModule",{value:!0}),t);var w={};S(w,{DARWIN:()=>f,S_IXGRP:()=>X,S_IXOTH:()=>l,S_IXUSR:()=>R,WIN32:()=>i});module.exports=a(w);var s=require("os");const e=(0,s.platform)(),f=e==="darwin",i=e==="win32",R=64,X=8,l=1;0&&(module.exports={DARWIN,S_IXGRP,S_IXOTH,S_IXUSR,WIN32});
3
3
  //# sourceMappingURL=platform.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/constants/platform.ts"],
4
- "sourcesContent": ["/**\n * Platform detection and OS-specific constants.\n */\n\nimport { platform } from 'node:os'\n\n// Platform detection.\nconst _platform = platform()\nexport const DARWIN = _platform === 'darwin'\nexport const WIN32 = _platform === 'win32'\n\n// File permission modes.\nexport const S_IXUSR = 0o100\nexport const S_IXGRP = 0o010\nexport const S_IXOTH = 0o001\n"],
5
- "mappings": ";4ZAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,YAAAE,EAAA,YAAAC,EAAA,YAAAC,EAAA,YAAAC,EAAA,UAAAC,IAAA,eAAAC,EAAAP,GAIA,IAAAQ,EAAyB,mBAGzB,MAAMC,KAAY,YAAS,EACdP,EAASO,IAAc,SACvBH,EAAQG,IAAc,QAGtBJ,EAAU,GACVF,EAAU,EACVC,EAAU",
6
- "names": ["platform_exports", "__export", "DARWIN", "S_IXGRP", "S_IXOTH", "S_IXUSR", "WIN32", "__toCommonJS", "import_node_os", "_platform"]
4
+ "sourcesContent": ["/**\n * Platform detection and OS-specific constants.\n */\n\nimport { platform } from 'os'\n\n// Platform detection.\nconst _platform = platform()\nexport const DARWIN = _platform === 'darwin'\nexport const WIN32 = _platform === 'win32'\n\n// File permission modes.\nexport const S_IXUSR = 0o100\nexport const S_IXGRP = 0o010\nexport const S_IXOTH = 0o001\n"],
5
+ "mappings": ";4ZAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,YAAAE,EAAA,YAAAC,EAAA,YAAAC,EAAA,YAAAC,EAAA,UAAAC,IAAA,eAAAC,EAAAP,GAIA,IAAAQ,EAAyB,cAGzB,MAAMC,KAAY,YAAS,EACdP,EAASO,IAAc,SACvBH,EAAQG,IAAc,QAGtBJ,EAAU,GACVF,EAAU,EACVC,EAAU",
6
+ "names": ["platform_exports", "__export", "DARWIN", "S_IXGRP", "S_IXOTH", "S_IXUSR", "WIN32", "__toCommonJS", "import_os", "_platform"]
7
7
  }
@@ -1,3 +1,3 @@
1
1
  /* Socket Lib - Built with esbuild */
2
- var u=Object.defineProperty;var b=Object.getOwnPropertyDescriptor;var w=Object.getOwnPropertyNames;var y=Object.prototype.hasOwnProperty;var O=(e,o)=>{for(var c in o)u(e,c,{get:o[c],enumerable:!0})},j=(e,o,c,n)=>{if(o&&typeof o=="object"||typeof o=="function")for(let a of w(o))!y.call(e,a)&&a!==c&&u(e,a,{get:()=>o[a],enumerable:!(n=b(o,a))||n.enumerable});return e};var E=e=>j(u({},"__esModule",{value:!0}),e);var D={};O(D,{getCodeCoverage:()=>x});module.exports=E(D);var m=require("node:fs"),_=require("../fs"),i=require("../objects"),C=require("../spawn");let v;function M(){return v===void 0&&(v=require("node:path")),v}async function x(e){const c={__proto__:null,coveragePath:M().join(process.cwd(),"coverage/coverage-final.json"),generateIfMissing:!1,...e},{coveragePath:n,generateIfMissing:a}=c;if(!n)throw new Error("Coverage path is required");if(!await m.promises.access(n).then(()=>!0).catch(()=>!1))if(a)await(0,C.spawn)("vitest",["run","--coverage"],{cwd:process.cwd(),stdio:"inherit"});else throw new Error(`Coverage file not found at "${n}". Run tests with coverage first.`);const p=await(0,_.readJson)(n);if(!(0,i.isObjectObject)(p))throw new Error(`Invalid coverage data format in "${n}"`);const t={__proto__:null,branches:{__proto__:null,covered:0,total:0},functions:{__proto__:null,covered:0,total:0},lines:{__proto__:null,covered:0,total:0},statements:{__proto__:null,covered:0,total:0}},h=p;for(const d of Object.values(h)){if(!(0,i.isObjectObject)(d))continue;const r=d;if(r.s&&(0,i.isObjectObject)(r.s)){const f=Object.values(r.s);for(const s of f)typeof s=="number"&&(t.statements.total+=1,s>0&&(t.statements.covered+=1))}if(r.b&&(0,i.isObjectObject)(r.b)){const f=Object.values(r.b);for(const s of f)if(Array.isArray(s))for(const g of s)typeof g=="number"&&(t.branches.total+=1,g>0&&(t.branches.covered+=1))}if(r.f&&(0,i.isObjectObject)(r.f)){const f=Object.values(r.f);for(const s of f)typeof s=="number"&&(t.functions.total+=1,s>0&&(t.functions.covered+=1))}t.lines.covered=t.statements.covered,t.lines.total=t.statements.total}return{branches:l(t.branches),functions:l(t.functions),lines:l(t.lines),statements:l(t.statements)}}function l(e){const o=e.total===0?"0.00":(e.covered/e.total*100).toFixed(2);return{covered:e.covered,percent:o,total:e.total}}0&&(module.exports={getCodeCoverage});
2
+ var u=Object.defineProperty;var b=Object.getOwnPropertyDescriptor;var w=Object.getOwnPropertyNames;var y=Object.prototype.hasOwnProperty;var O=(e,o)=>{for(var c in o)u(e,c,{get:o[c],enumerable:!0})},j=(e,o,c,n)=>{if(o&&typeof o=="object"||typeof o=="function")for(let a of w(o))!y.call(e,a)&&a!==c&&u(e,a,{get:()=>o[a],enumerable:!(n=b(o,a))||n.enumerable});return e};var E=e=>j(u({},"__esModule",{value:!0}),e);var D={};O(D,{getCodeCoverage:()=>x});module.exports=E(D);var m=require("fs"),_=require("../fs"),i=require("../objects"),C=require("../spawn");let v;function M(){return v===void 0&&(v=require("node:path")),v}async function x(e){const c={__proto__:null,coveragePath:M().join(process.cwd(),"coverage/coverage-final.json"),generateIfMissing:!1,...e},{coveragePath:n,generateIfMissing:a}=c;if(!n)throw new Error("Coverage path is required");if(!await m.promises.access(n).then(()=>!0).catch(()=>!1))if(a)await(0,C.spawn)("vitest",["run","--coverage"],{cwd:process.cwd(),stdio:"inherit"});else throw new Error(`Coverage file not found at "${n}". Run tests with coverage first.`);const p=await(0,_.readJson)(n);if(!(0,i.isObjectObject)(p))throw new Error(`Invalid coverage data format in "${n}"`);const t={__proto__:null,branches:{__proto__:null,covered:0,total:0},functions:{__proto__:null,covered:0,total:0},lines:{__proto__:null,covered:0,total:0},statements:{__proto__:null,covered:0,total:0}},h=p;for(const d of Object.values(h)){if(!(0,i.isObjectObject)(d))continue;const r=d;if(r.s&&(0,i.isObjectObject)(r.s)){const f=Object.values(r.s);for(const s of f)typeof s=="number"&&(t.statements.total+=1,s>0&&(t.statements.covered+=1))}if(r.b&&(0,i.isObjectObject)(r.b)){const f=Object.values(r.b);for(const s of f)if(Array.isArray(s))for(const g of s)typeof g=="number"&&(t.branches.total+=1,g>0&&(t.branches.covered+=1))}if(r.f&&(0,i.isObjectObject)(r.f)){const f=Object.values(r.f);for(const s of f)typeof s=="number"&&(t.functions.total+=1,s>0&&(t.functions.covered+=1))}t.lines.covered=t.statements.covered,t.lines.total=t.statements.total}return{branches:l(t.branches),functions:l(t.functions),lines:l(t.lines),statements:l(t.statements)}}function l(e){const o=e.total===0?"0.00":(e.covered/e.total*100).toFixed(2);return{covered:e.covered,percent:o,total:e.total}}0&&(module.exports={getCodeCoverage});
3
3
  //# sourceMappingURL=code.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/cover/code.ts"],
4
- "sourcesContent": ["/**\n * @fileoverview Code coverage utilities for parsing v8 coverage data.\n */\n\nimport { promises as fs } from 'node:fs'\n\nimport { readJson } from '../fs'\nimport { isObjectObject } from '../objects'\nimport { spawn } from '../spawn'\n\nimport type {\n CodeCoverageResult,\n CoverageMetric,\n GetCodeCoverageOptions,\n V8CoverageData,\n V8FileCoverage,\n} from './types'\n\nlet _path: typeof import('path') | undefined\n/**\n * Lazily load the path module to avoid Webpack errors.\n * @private\n */\n/*@__NO_SIDE_EFFECTS__*/\nfunction getPath() {\n if (_path === undefined) {\n // Use non-'node:' prefixed require to avoid Webpack errors.\n\n _path = /*@__PURE__*/ require('node:path')\n }\n return _path as typeof import('path')\n}\n\n/**\n * Get code coverage metrics from v8 coverage-final.json.\n *\n * @throws {Error} When coverage file doesn't exist and generateIfMissing is false.\n * @throws {Error} When coverage data format is invalid.\n */\nexport async function getCodeCoverage(\n options?: GetCodeCoverageOptions | undefined,\n): Promise<CodeCoverageResult> {\n const path = getPath()\n const opts = {\n __proto__: null,\n coveragePath: path.join(process.cwd(), 'coverage/coverage-final.json'),\n generateIfMissing: false,\n ...options,\n } as GetCodeCoverageOptions\n\n const { coveragePath, generateIfMissing } = opts\n\n if (!coveragePath) {\n throw new Error('Coverage path is required')\n }\n\n // Check if coverage file exists.\n const coverageExists = await fs\n .access(coveragePath)\n .then(() => true)\n .catch(() => false)\n\n if (!coverageExists) {\n if (generateIfMissing) {\n // Run vitest to generate coverage.\n await spawn('vitest', ['run', '--coverage'], {\n cwd: process.cwd(),\n stdio: 'inherit',\n })\n } else {\n throw new Error(\n `Coverage file not found at \"${coveragePath}\". Run tests with coverage first.`,\n )\n }\n }\n\n // Read and parse coverage-final.json.\n const coverageData = (await readJson(coveragePath)) as unknown\n\n if (!isObjectObject(coverageData)) {\n throw new Error(`Invalid coverage data format in \"${coveragePath}\"`)\n }\n\n // Aggregate metrics across all files.\n const totals = {\n __proto__: null,\n branches: { __proto__: null, covered: 0, total: 0 },\n functions: { __proto__: null, covered: 0, total: 0 },\n lines: { __proto__: null, covered: 0, total: 0 },\n statements: { __proto__: null, covered: 0, total: 0 },\n }\n\n const v8Data = coverageData as V8CoverageData\n\n for (const fileCoverage of Object.values(v8Data)) {\n if (!isObjectObject(fileCoverage)) {\n continue\n }\n\n const fc = fileCoverage as V8FileCoverage\n\n // Aggregate statements.\n if (fc.s && isObjectObject(fc.s)) {\n const statementCounts = Object.values(fc.s)\n for (const count of statementCounts) {\n if (typeof count === 'number') {\n totals.statements.total += 1\n if (count > 0) {\n totals.statements.covered += 1\n }\n }\n }\n }\n\n // Aggregate branches.\n if (fc.b && isObjectObject(fc.b)) {\n const branchCounts = Object.values(fc.b)\n for (const branches of branchCounts) {\n if (Array.isArray(branches)) {\n for (const count of branches) {\n if (typeof count === 'number') {\n totals.branches.total += 1\n if (count > 0) {\n totals.branches.covered += 1\n }\n }\n }\n }\n }\n }\n\n // Aggregate functions.\n if (fc.f && isObjectObject(fc.f)) {\n const functionCounts = Object.values(fc.f)\n for (const count of functionCounts) {\n if (typeof count === 'number') {\n totals.functions.total += 1\n if (count > 0) {\n totals.functions.covered += 1\n }\n }\n }\n }\n\n // Note: Lines are typically derived from statement map in v8.\n // For simplicity, we use statements as a proxy for lines.\n // In a production implementation, you'd parse statementMap to get actual line coverage.\n totals.lines.covered = totals.statements.covered\n totals.lines.total = totals.statements.total\n }\n\n // Calculate percentages.\n return {\n branches: calculateMetric(totals.branches),\n functions: calculateMetric(totals.functions),\n lines: calculateMetric(totals.lines),\n statements: calculateMetric(totals.statements),\n }\n}\n\n/**\n * Calculate coverage metric with percentage.\n */\nfunction calculateMetric(data: {\n covered: number\n total: number\n}): CoverageMetric {\n const percent =\n data.total === 0 ? '0.00' : ((data.covered / data.total) * 100).toFixed(2)\n\n return {\n covered: data.covered,\n percent,\n total: data.total,\n }\n}\n"],
5
- "mappings": ";4ZAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,qBAAAE,IAAA,eAAAC,EAAAH,GAIA,IAAAI,EAA+B,mBAE/BC,EAAyB,iBACzBC,EAA+B,sBAC/BC,EAAsB,oBAUtB,IAAIC,EAMJ,SAASC,GAAU,CACjB,OAAID,IAAU,SAGZA,EAAsB,QAAQ,WAAW,GAEpCA,CACT,CAQA,eAAsBN,EACpBQ,EAC6B,CAE7B,MAAMC,EAAO,CACX,UAAW,KACX,aAHWF,EAAQ,EAGA,KAAK,QAAQ,IAAI,EAAG,8BAA8B,EACrE,kBAAmB,GACnB,GAAGC,CACL,EAEM,CAAE,aAAAE,EAAc,kBAAAC,CAAkB,EAAIF,EAE5C,GAAI,CAACC,EACH,MAAM,IAAI,MAAM,2BAA2B,EAS7C,GAAI,CALmB,MAAM,EAAAE,SAC1B,OAAOF,CAAY,EACnB,KAAK,IAAM,EAAI,EACf,MAAM,IAAM,EAAK,EAGlB,GAAIC,EAEF,QAAM,SAAM,SAAU,CAAC,MAAO,YAAY,EAAG,CAC3C,IAAK,QAAQ,IAAI,EACjB,MAAO,SACT,CAAC,MAED,OAAM,IAAI,MACR,+BAA+BD,CAAY,mCAC7C,EAKJ,MAAMG,EAAgB,QAAM,YAASH,CAAY,EAEjD,GAAI,IAAC,kBAAeG,CAAY,EAC9B,MAAM,IAAI,MAAM,oCAAoCH,CAAY,GAAG,EAIrE,MAAMI,EAAS,CACb,UAAW,KACX,SAAU,CAAE,UAAW,KAAM,QAAS,EAAG,MAAO,CAAE,EAClD,UAAW,CAAE,UAAW,KAAM,QAAS,EAAG,MAAO,CAAE,EACnD,MAAO,CAAE,UAAW,KAAM,QAAS,EAAG,MAAO,CAAE,EAC/C,WAAY,CAAE,UAAW,KAAM,QAAS,EAAG,MAAO,CAAE,CACtD,EAEMC,EAASF,EAEf,UAAWG,KAAgB,OAAO,OAAOD,CAAM,EAAG,CAChD,GAAI,IAAC,kBAAeC,CAAY,EAC9B,SAGF,MAAMC,EAAKD,EAGX,GAAIC,EAAG,MAAK,kBAAeA,EAAG,CAAC,EAAG,CAChC,MAAMC,EAAkB,OAAO,OAAOD,EAAG,CAAC,EAC1C,UAAWE,KAASD,EACd,OAAOC,GAAU,WACnBL,EAAO,WAAW,OAAS,EACvBK,EAAQ,IACVL,EAAO,WAAW,SAAW,GAIrC,CAGA,GAAIG,EAAG,MAAK,kBAAeA,EAAG,CAAC,EAAG,CAChC,MAAMG,EAAe,OAAO,OAAOH,EAAG,CAAC,EACvC,UAAWI,KAAYD,EACrB,GAAI,MAAM,QAAQC,CAAQ,EACxB,UAAWF,KAASE,EACd,OAAOF,GAAU,WACnBL,EAAO,SAAS,OAAS,EACrBK,EAAQ,IACVL,EAAO,SAAS,SAAW,GAMvC,CAGA,GAAIG,EAAG,MAAK,kBAAeA,EAAG,CAAC,EAAG,CAChC,MAAMK,EAAiB,OAAO,OAAOL,EAAG,CAAC,EACzC,UAAWE,KAASG,EACd,OAAOH,GAAU,WACnBL,EAAO,UAAU,OAAS,EACtBK,EAAQ,IACVL,EAAO,UAAU,SAAW,GAIpC,CAKAA,EAAO,MAAM,QAAUA,EAAO,WAAW,QACzCA,EAAO,MAAM,MAAQA,EAAO,WAAW,KACzC,CAGA,MAAO,CACL,SAAUS,EAAgBT,EAAO,QAAQ,EACzC,UAAWS,EAAgBT,EAAO,SAAS,EAC3C,MAAOS,EAAgBT,EAAO,KAAK,EACnC,WAAYS,EAAgBT,EAAO,UAAU,CAC/C,CACF,CAKA,SAASS,EAAgBC,EAGN,CACjB,MAAMC,EACJD,EAAK,QAAU,EAAI,QAAWA,EAAK,QAAUA,EAAK,MAAS,KAAK,QAAQ,CAAC,EAE3E,MAAO,CACL,QAASA,EAAK,QACd,QAAAC,EACA,MAAOD,EAAK,KACd,CACF",
6
- "names": ["code_exports", "__export", "getCodeCoverage", "__toCommonJS", "import_node_fs", "import_fs", "import_objects", "import_spawn", "_path", "getPath", "options", "opts", "coveragePath", "generateIfMissing", "fs", "coverageData", "totals", "v8Data", "fileCoverage", "fc", "statementCounts", "count", "branchCounts", "branches", "functionCounts", "calculateMetric", "data", "percent"]
4
+ "sourcesContent": ["/**\n * @fileoverview Code coverage utilities for parsing v8 coverage data.\n */\n\nimport { promises as fs } from 'fs'\n\nimport { readJson } from '../fs'\nimport { isObjectObject } from '../objects'\nimport { spawn } from '../spawn'\n\nimport type {\n CodeCoverageResult,\n CoverageMetric,\n GetCodeCoverageOptions,\n V8CoverageData,\n V8FileCoverage,\n} from './types'\n\nlet _path: typeof import('path') | undefined\n/**\n * Lazily load the path module to avoid Webpack errors.\n * @private\n */\n/*@__NO_SIDE_EFFECTS__*/\nfunction getPath() {\n if (_path === undefined) {\n // Use non-'node:' prefixed require to avoid Webpack errors.\n\n _path = /*@__PURE__*/ require('node:path')\n }\n return _path as typeof import('path')\n}\n\n/**\n * Get code coverage metrics from v8 coverage-final.json.\n *\n * @throws {Error} When coverage file doesn't exist and generateIfMissing is false.\n * @throws {Error} When coverage data format is invalid.\n */\nexport async function getCodeCoverage(\n options?: GetCodeCoverageOptions | undefined,\n): Promise<CodeCoverageResult> {\n const path = getPath()\n const opts = {\n __proto__: null,\n coveragePath: path.join(process.cwd(), 'coverage/coverage-final.json'),\n generateIfMissing: false,\n ...options,\n } as GetCodeCoverageOptions\n\n const { coveragePath, generateIfMissing } = opts\n\n if (!coveragePath) {\n throw new Error('Coverage path is required')\n }\n\n // Check if coverage file exists.\n const coverageExists = await fs\n .access(coveragePath)\n .then(() => true)\n .catch(() => false)\n\n if (!coverageExists) {\n if (generateIfMissing) {\n // Run vitest to generate coverage.\n await spawn('vitest', ['run', '--coverage'], {\n cwd: process.cwd(),\n stdio: 'inherit',\n })\n } else {\n throw new Error(\n `Coverage file not found at \"${coveragePath}\". Run tests with coverage first.`,\n )\n }\n }\n\n // Read and parse coverage-final.json.\n const coverageData = (await readJson(coveragePath)) as unknown\n\n if (!isObjectObject(coverageData)) {\n throw new Error(`Invalid coverage data format in \"${coveragePath}\"`)\n }\n\n // Aggregate metrics across all files.\n const totals = {\n __proto__: null,\n branches: { __proto__: null, covered: 0, total: 0 },\n functions: { __proto__: null, covered: 0, total: 0 },\n lines: { __proto__: null, covered: 0, total: 0 },\n statements: { __proto__: null, covered: 0, total: 0 },\n }\n\n const v8Data = coverageData as V8CoverageData\n\n for (const fileCoverage of Object.values(v8Data)) {\n if (!isObjectObject(fileCoverage)) {\n continue\n }\n\n const fc = fileCoverage as V8FileCoverage\n\n // Aggregate statements.\n if (fc.s && isObjectObject(fc.s)) {\n const statementCounts = Object.values(fc.s)\n for (const count of statementCounts) {\n if (typeof count === 'number') {\n totals.statements.total += 1\n if (count > 0) {\n totals.statements.covered += 1\n }\n }\n }\n }\n\n // Aggregate branches.\n if (fc.b && isObjectObject(fc.b)) {\n const branchCounts = Object.values(fc.b)\n for (const branches of branchCounts) {\n if (Array.isArray(branches)) {\n for (const count of branches) {\n if (typeof count === 'number') {\n totals.branches.total += 1\n if (count > 0) {\n totals.branches.covered += 1\n }\n }\n }\n }\n }\n }\n\n // Aggregate functions.\n if (fc.f && isObjectObject(fc.f)) {\n const functionCounts = Object.values(fc.f)\n for (const count of functionCounts) {\n if (typeof count === 'number') {\n totals.functions.total += 1\n if (count > 0) {\n totals.functions.covered += 1\n }\n }\n }\n }\n\n // Note: Lines are typically derived from statement map in v8.\n // For simplicity, we use statements as a proxy for lines.\n // In a production implementation, you'd parse statementMap to get actual line coverage.\n totals.lines.covered = totals.statements.covered\n totals.lines.total = totals.statements.total\n }\n\n // Calculate percentages.\n return {\n branches: calculateMetric(totals.branches),\n functions: calculateMetric(totals.functions),\n lines: calculateMetric(totals.lines),\n statements: calculateMetric(totals.statements),\n }\n}\n\n/**\n * Calculate coverage metric with percentage.\n */\nfunction calculateMetric(data: {\n covered: number\n total: number\n}): CoverageMetric {\n const percent =\n data.total === 0 ? '0.00' : ((data.covered / data.total) * 100).toFixed(2)\n\n return {\n covered: data.covered,\n percent,\n total: data.total,\n }\n}\n"],
5
+ "mappings": ";4ZAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,qBAAAE,IAAA,eAAAC,EAAAH,GAIA,IAAAI,EAA+B,cAE/BA,EAAyB,iBACzBC,EAA+B,sBAC/BC,EAAsB,oBAUtB,IAAIC,EAMJ,SAASC,GAAU,CACjB,OAAID,IAAU,SAGZA,EAAsB,QAAQ,WAAW,GAEpCA,CACT,CAQA,eAAsBL,EACpBO,EAC6B,CAE7B,MAAMC,EAAO,CACX,UAAW,KACX,aAHWF,EAAQ,EAGA,KAAK,QAAQ,IAAI,EAAG,8BAA8B,EACrE,kBAAmB,GACnB,GAAGC,CACL,EAEM,CAAE,aAAAE,EAAc,kBAAAC,CAAkB,EAAIF,EAE5C,GAAI,CAACC,EACH,MAAM,IAAI,MAAM,2BAA2B,EAS7C,GAAI,CALmB,MAAM,EAAAE,SAC1B,OAAOF,CAAY,EACnB,KAAK,IAAM,EAAI,EACf,MAAM,IAAM,EAAK,EAGlB,GAAIC,EAEF,QAAM,SAAM,SAAU,CAAC,MAAO,YAAY,EAAG,CAC3C,IAAK,QAAQ,IAAI,EACjB,MAAO,SACT,CAAC,MAED,OAAM,IAAI,MACR,+BAA+BD,CAAY,mCAC7C,EAKJ,MAAMG,EAAgB,QAAM,YAASH,CAAY,EAEjD,GAAI,IAAC,kBAAeG,CAAY,EAC9B,MAAM,IAAI,MAAM,oCAAoCH,CAAY,GAAG,EAIrE,MAAMI,EAAS,CACb,UAAW,KACX,SAAU,CAAE,UAAW,KAAM,QAAS,EAAG,MAAO,CAAE,EAClD,UAAW,CAAE,UAAW,KAAM,QAAS,EAAG,MAAO,CAAE,EACnD,MAAO,CAAE,UAAW,KAAM,QAAS,EAAG,MAAO,CAAE,EAC/C,WAAY,CAAE,UAAW,KAAM,QAAS,EAAG,MAAO,CAAE,CACtD,EAEMC,EAASF,EAEf,UAAWG,KAAgB,OAAO,OAAOD,CAAM,EAAG,CAChD,GAAI,IAAC,kBAAeC,CAAY,EAC9B,SAGF,MAAMC,EAAKD,EAGX,GAAIC,EAAG,MAAK,kBAAeA,EAAG,CAAC,EAAG,CAChC,MAAMC,EAAkB,OAAO,OAAOD,EAAG,CAAC,EAC1C,UAAWE,KAASD,EACd,OAAOC,GAAU,WACnBL,EAAO,WAAW,OAAS,EACvBK,EAAQ,IACVL,EAAO,WAAW,SAAW,GAIrC,CAGA,GAAIG,EAAG,MAAK,kBAAeA,EAAG,CAAC,EAAG,CAChC,MAAMG,EAAe,OAAO,OAAOH,EAAG,CAAC,EACvC,UAAWI,KAAYD,EACrB,GAAI,MAAM,QAAQC,CAAQ,EACxB,UAAWF,KAASE,EACd,OAAOF,GAAU,WACnBL,EAAO,SAAS,OAAS,EACrBK,EAAQ,IACVL,EAAO,SAAS,SAAW,GAMvC,CAGA,GAAIG,EAAG,MAAK,kBAAeA,EAAG,CAAC,EAAG,CAChC,MAAMK,EAAiB,OAAO,OAAOL,EAAG,CAAC,EACzC,UAAWE,KAASG,EACd,OAAOH,GAAU,WACnBL,EAAO,UAAU,OAAS,EACtBK,EAAQ,IACVL,EAAO,UAAU,SAAW,GAIpC,CAKAA,EAAO,MAAM,QAAUA,EAAO,WAAW,QACzCA,EAAO,MAAM,MAAQA,EAAO,WAAW,KACzC,CAGA,MAAO,CACL,SAAUS,EAAgBT,EAAO,QAAQ,EACzC,UAAWS,EAAgBT,EAAO,SAAS,EAC3C,MAAOS,EAAgBT,EAAO,KAAK,EACnC,WAAYS,EAAgBT,EAAO,UAAU,CAC/C,CACF,CAKA,SAASS,EAAgBC,EAGN,CACjB,MAAMC,EACJD,EAAK,QAAU,EAAI,QAAWA,EAAK,QAAUA,EAAK,MAAS,KAAK,QAAQ,CAAC,EAE3E,MAAO,CACL,QAASA,EAAK,QACd,QAAAC,EACA,MAAOD,EAAK,KACd,CACF",
6
+ "names": ["code_exports", "__export", "getCodeCoverage", "__toCommonJS", "import_fs", "import_objects", "import_spawn", "_path", "getPath", "options", "opts", "coveragePath", "generateIfMissing", "fs", "coverageData", "totals", "v8Data", "fileCoverage", "fc", "statementCounts", "count", "branchCounts", "branches", "functionCounts", "calculateMetric", "data", "percent"]
7
7
  }
package/dist/debug.js CHANGED
@@ -1,4 +1,4 @@
1
1
  /* Socket Lib - Built with esbuild */
2
- var U=Object.create;var h=Object.defineProperty;var j=Object.getOwnPropertyDescriptor;var G=Object.getOwnPropertyNames;var L=Object.getPrototypeOf,T=Object.prototype.hasOwnProperty;var W=(n,t)=>{for(var e in t)h(n,e,{get:t[e],enumerable:!0})},S=(n,t,e,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of G(t))!T.call(n,o)&&o!==e&&h(n,o,{get:()=>t[o],enumerable:!(i=j(t,o))||i.enumerable});return n};var I=(n,t,e)=>(e=n!=null?U(L(n)):{},S(t||!n||!n.__esModule?h(e,"default",{value:n,enumerable:!0}):e,n)),J=n=>S(h({},"__esModule",{value:!0}),n);var Y={};W(Y,{debug:()=>z,debugCache:()=>M,debugCacheNs:()=>q,debugDir:()=>F,debugDirNs:()=>v,debugLog:()=>K,debugLogNs:()=>B,debugNs:()=>A,debuglog:()=>V,debugtime:()=>X,isDebug:()=>Q,isDebugNs:()=>P});module.exports=J(Y);var m=require("#constants/process"),E=require("#env/debug"),a=require("#env/socket"),g=I(require("./external/@socketregistry/is-unicode-supported")),f=I(require("./external/debug")),d=require("./logger"),H=require("./objects"),D=require("./strings");const $=Reflect.apply,_=new Map;function C(n){let t=_.get(n);return t||(!(0,E.getDebug)()&&(0,a.getSocketDebug)()&&(n==="error"||n==="notice")&&f.default.enable(n),t=(0,f.default)(n),t.log=R,_.set(n,t),t)}let x;function N(){return x===void 0&&(x=require("node:util")),x}function b(n=3){let t="";const e=Error.captureStackTrace;if(typeof e=="function"){const i={};e(i,b);const o=i.stack;if(typeof o=="string"){let u=0,c=0;for(let s=0,{length:l}=o;s<l;s+=1)if(o[s]===`
3
- `)if(u+=1,u<n)c=s+1;else{const r=o.slice(c,s).trimStart(),w=/(?<=^at\s+).*?(?=\s+\(|$)/.exec(r)?.[0];if(w&&(t=w.replace(/^(?:async|bound|get|new|set)\s+/,""),t.startsWith("Object."))){const k=t.slice(7);(0,H.hasOwn)(Object,k)||(t=k)}break}}}return t}function R(...n){const t=N(),e=f.default.inspectOpts?{...f.default.inspectOpts,showHidden:f.default.inspectOpts.showHidden===null?void 0:f.default.inspectOpts.showHidden,depth:f.default.inspectOpts.depth===null||typeof f.default.inspectOpts.depth=="boolean"?void 0:f.default.inspectOpts.depth}:{};$(d.logger.info,d.logger,[t.formatWithOptions(e,...n)])}function y(n){return n!==null&&typeof n=="object"?{__proto__:null,...n}:{__proto__:null,namespaces:n}}function O(n){if(!(0,a.getSocketDebug)())return!1;if(typeof n!="string"||!n||n==="*")return!0;const t=n.trim().replace(/\s+/g,",").split(",").filter(Boolean),e=[],i=[];for(const o of t)o.startsWith("-")?i.push(o.slice(1)):e.push(o);return e.length&&!e.some(o=>C(o).enabled)?!1:i.every(o=>!C(o).enabled)}function v(n,t,e){const i=y(n),{namespaces:o}=i;if(!O(o))return;const u=b(4)||"anonymous";p===void 0&&(p=(0,g.default)()?"\u25B8":">");let c=e;if(c===void 0){const r=f.default.inspectOpts;r&&(c={...r,showHidden:r.showHidden===null?void 0:r.showHidden,depth:r.depth===null||typeof r.depth=="boolean"?null:r.depth})}const s=i.spinner||(0,m.getSpinner)(),l=s?.isSpinning;s?.stop(),d.logger.info(`[DEBUG] ${u} ${p} object inspection:`),d.logger.dir(t,e),l&&s?.start()}let p;function A(n,...t){const e=y(n),{namespaces:i}=e;if(!O(i))return;const o=b(4)||"anonymous";p===void 0&&(p=(0,g.default)()?"\u25B8":">");const u=t.at(0),c=typeof u=="string"?[(0,D.applyLinePrefix)(`${o?`${o} ${p} `:""}${u}`,{prefix:"[DEBUG] "}),...t.slice(1)]:t,s=e.spinner||(0,m.getSpinner)(),l=s?.isSpinning;s?.stop(),$(d.logger.info,d.logger,c),l&&s?.start()}function B(n,...t){const e=y(n),{namespaces:i}=e;if(!O(i))return;const o=b(4)||"anonymous";p===void 0&&(p=(0,g.default)()?"\u25B8":">");const u=t.at(0),c=typeof u=="string"?[(0,D.applyLinePrefix)(`${o?`${o} ${p} `:""}${u}`,{prefix:"[DEBUG] "}),...t.slice(1)]:[`[DEBUG] ${o} ${p}`,...t],s=e.spinner||(0,m.getSpinner)(),l=s?.isSpinning;s?.stop(),$(d.logger.info,d.logger,c),l&&s?.start()}function q(n,t,e,i){const o=y(n),{namespaces:u}=o;if(!O(u))return;const c=b(4)||"cache";p===void 0&&(p=(0,g.default)()?"\u25B8":">");const s=`[CACHE] ${c} ${p} ${t}: ${e}`,l=i!==void 0?[s,i]:[s],r=o.spinner||(0,m.getSpinner)(),w=r?.isSpinning;r?.stop(),$(d.logger.info,d.logger,l),w&&r?.start()}function M(n,t,e){if(!(0,a.getSocketDebug)())return;const i=b(3)||"cache";p===void 0&&(p=(0,g.default)()?"\u25B8":">");const o=`[CACHE] ${i} ${p} ${n}: ${t}`;console.log(...e!==void 0?[o,e]:[o])}function P(n){return!!(0,a.getSocketDebug)()&&O(n)}function z(...n){A("*",...n)}function F(n,t){v("*",n,t)}function K(...n){B("*",...n)}function Q(){return!!(0,a.getSocketDebug)()}function V(n){return N().debuglog(n)}function X(n){const t=N();let e;const i=()=>{if(e===void 0)e=Date.now();else{const o=Date.now()-e;t.debuglog("time")(`${n}: ${o}ms`),e=void 0}};return i.start=()=>{e=Date.now()},i.end=()=>{if(e!==void 0){const o=Date.now()-e;t.debuglog("time")(`${n}: ${o}ms`),e=void 0}},i}0&&(module.exports={debug,debugCache,debugCacheNs,debugDir,debugDirNs,debugLog,debugLogNs,debugNs,debuglog,debugtime,isDebug,isDebugNs});
2
+ var j=Object.create;var h=Object.defineProperty;var L=Object.getOwnPropertyDescriptor;var G=Object.getOwnPropertyNames;var T=Object.getPrototypeOf,W=Object.prototype.hasOwnProperty;var J=(n,t)=>{for(var e in t)h(n,e,{get:t[e],enumerable:!0})},S=(n,t,e,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of G(t))!W.call(n,o)&&o!==e&&h(n,o,{get:()=>t[o],enumerable:!(i=L(t,o))||i.enumerable});return n};var I=(n,t,e)=>(e=n!=null?j(T(n)):{},S(t||!n||!n.__esModule?h(e,"default",{value:n,enumerable:!0}):e,n)),R=n=>S(h({},"__esModule",{value:!0}),n);var Z={};J(Z,{debug:()=>F,debugCache:()=>P,debugCacheNs:()=>M,debugDir:()=>K,debugDirNs:()=>A,debugLog:()=>Q,debugLogNs:()=>U,debugNs:()=>B,debuglog:()=>X,debugtime:()=>Y,isDebug:()=>V,isDebugNs:()=>z});module.exports=R(Z);var m=require("#constants/process"),E=require("#env/debug"),a=require("#env/socket"),g=I(require("./external/@socketregistry/is-unicode-supported")),f=I(require("./external/debug")),H=require("./logger"),v=require("./objects"),x=require("./strings");const d=(0,H.getDefaultLogger)(),$=Reflect.apply,_=new Map;function C(n){let t=_.get(n);return t||(!(0,E.getDebug)()&&(0,a.getSocketDebug)()&&(n==="error"||n==="notice")&&f.default.enable(n),t=(0,f.default)(n),t.log=q,_.set(n,t),t)}let k;function N(){return k===void 0&&(k=require("node:util")),k}function b(n=3){let t="";const e=Error.captureStackTrace;if(typeof e=="function"){const i={};e(i,b);const o=i.stack;if(typeof o=="string"){let u=0,c=0;for(let s=0,{length:l}=o;s<l;s+=1)if(o[s]===`
3
+ `)if(u+=1,u<n)c=s+1;else{const r=o.slice(c,s).trimStart(),w=/(?<=^at\s+).*?(?=\s+\(|$)/.exec(r)?.[0];if(w&&(t=w.replace(/^(?:async|bound|get|new|set)\s+/,""),t.startsWith("Object."))){const D=t.slice(7);(0,v.hasOwn)(Object,D)||(t=D)}break}}}return t}function q(...n){const t=N(),e=f.default.inspectOpts?{...f.default.inspectOpts,showHidden:f.default.inspectOpts.showHidden===null?void 0:f.default.inspectOpts.showHidden,depth:f.default.inspectOpts.depth===null||typeof f.default.inspectOpts.depth=="boolean"?void 0:f.default.inspectOpts.depth}:{};$(d.info,d,[t.formatWithOptions(e,...n)])}function y(n){return n!==null&&typeof n=="object"?{__proto__:null,...n}:{__proto__:null,namespaces:n}}function O(n){if(!(0,a.getSocketDebug)())return!1;if(typeof n!="string"||!n||n==="*")return!0;const t=n.trim().replace(/\s+/g,",").split(",").filter(Boolean),e=[],i=[];for(const o of t)o.startsWith("-")?i.push(o.slice(1)):e.push(o);return e.length&&!e.some(o=>C(o).enabled)?!1:i.every(o=>!C(o).enabled)}function A(n,t,e){const i=y(n),{namespaces:o}=i;if(!O(o))return;const u=b(4)||"anonymous";p===void 0&&(p=(0,g.default)()?"\u25B8":">");let c=e;if(c===void 0){const r=f.default.inspectOpts;r&&(c={...r,showHidden:r.showHidden===null?void 0:r.showHidden,depth:r.depth===null||typeof r.depth=="boolean"?null:r.depth})}const s=i.spinner||(0,m.getSpinner)(),l=s?.isSpinning;s?.stop(),d.info(`[DEBUG] ${u} ${p} object inspection:`),d.dir(t,e),l&&s?.start()}let p;function B(n,...t){const e=y(n),{namespaces:i}=e;if(!O(i))return;const o=b(4)||"anonymous";p===void 0&&(p=(0,g.default)()?"\u25B8":">");const u=t.at(0),c=typeof u=="string"?[(0,x.applyLinePrefix)(`${o?`${o} ${p} `:""}${u}`,{prefix:"[DEBUG] "}),...t.slice(1)]:t,s=e.spinner||(0,m.getSpinner)(),l=s?.isSpinning;s?.stop(),$(d.info,d,c),l&&s?.start()}function U(n,...t){const e=y(n),{namespaces:i}=e;if(!O(i))return;const o=b(4)||"anonymous";p===void 0&&(p=(0,g.default)()?"\u25B8":">");const u=t.at(0),c=typeof u=="string"?[(0,x.applyLinePrefix)(`${o?`${o} ${p} `:""}${u}`,{prefix:"[DEBUG] "}),...t.slice(1)]:[`[DEBUG] ${o} ${p}`,...t],s=e.spinner||(0,m.getSpinner)(),l=s?.isSpinning;s?.stop(),$(d.info,d,c),l&&s?.start()}function M(n,t,e,i){const o=y(n),{namespaces:u}=o;if(!O(u))return;const c=b(4)||"cache";p===void 0&&(p=(0,g.default)()?"\u25B8":">");const s=`[CACHE] ${c} ${p} ${t}: ${e}`,l=i!==void 0?[s,i]:[s],r=o.spinner||(0,m.getSpinner)(),w=r?.isSpinning;r?.stop(),$(d.info,d,l),w&&r?.start()}function P(n,t,e){if(!(0,a.getSocketDebug)())return;const i=b(3)||"cache";p===void 0&&(p=(0,g.default)()?"\u25B8":">");const o=`[CACHE] ${i} ${p} ${n}: ${t}`;console.log(...e!==void 0?[o,e]:[o])}function z(n){return!!(0,a.getSocketDebug)()&&O(n)}function F(...n){B("*",...n)}function K(n,t){A("*",n,t)}function Q(...n){U("*",...n)}function V(){return!!(0,a.getSocketDebug)()}function X(n){return N().debuglog(n)}function Y(n){const t=N();let e;const i=()=>{if(e===void 0)e=Date.now();else{const o=Date.now()-e;t.debuglog("time")(`${n}: ${o}ms`),e=void 0}};return i.start=()=>{e=Date.now()},i.end=()=>{if(e!==void 0){const o=Date.now()-e;t.debuglog("time")(`${n}: ${o}ms`),e=void 0}},i}0&&(module.exports={debug,debugCache,debugCacheNs,debugDir,debugDirNs,debugLog,debugLogNs,debugNs,debuglog,debugtime,isDebug,isDebugNs});
4
4
  //# sourceMappingURL=debug.js.map
package/dist/debug.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/debug.ts"],
4
- "sourcesContent": ["/**\n * @fileoverview Debug logging utilities with lazy loading and environment-based control.\n * Provides Socket CLI specific debug functionality and logging formatters.\n */\n\nimport { getSpinner } from '#constants/process'\nimport { getDebug } from '#env/debug'\nimport { getSocketDebug } from '#env/socket'\nimport isUnicodeSupported from './external/@socketregistry/is-unicode-supported'\nimport debugJs from './external/debug'\n\nimport { logger } from './logger'\nimport { hasOwn } from './objects'\nimport { applyLinePrefix } from './strings'\n\n// IMPORTANT: Do not use destructuring here - use direct assignment instead.\n// tsgo has a bug that incorrectly transpiles destructured exports, resulting in\n// `exports.SomeName = void 0;` which causes runtime errors.\n// See: https://github.com/SocketDev/socket-packageurl-js/issues/3\nconst ReflectApply = Reflect.apply\n\n// Type definitions\ninterface DebugOptions {\n namespaces?: string\n spinner?: { isSpinning: boolean; stop(): void; start(): void }\n [key: string]: unknown\n}\n\ntype NamespacesOrOptions = string | DebugOptions\n\ninterface InspectOptions {\n depth?: number | null\n colors?: boolean\n [key: string]: unknown\n}\n\nexport type { DebugOptions, NamespacesOrOptions, InspectOptions }\n\nconst debugByNamespace = new Map()\n/**\n * Get or create a debug instance for a namespace.\n * @private\n */\n/*@__NO_SIDE_EFFECTS__*/\nfunction getDebugJsInstance(namespace: string) {\n let inst = debugByNamespace.get(namespace)\n if (inst) {\n return inst\n }\n if (\n !getDebug() &&\n getSocketDebug() &&\n (namespace === 'error' || namespace === 'notice')\n ) {\n debugJs.enable(namespace)\n }\n inst = debugJs(namespace)\n inst.log = customLog\n debugByNamespace.set(namespace, inst)\n return inst\n}\n\nlet _util: typeof import('util') | undefined\n/**\n * Lazily load the util module.\n * @private\n */\n/*@__NO_SIDE_EFFECTS__*/\nfunction getUtil() {\n if (_util === undefined) {\n // Use non-'node:' prefixed require to avoid Webpack errors.\n\n _util = /*@__PURE__*/ require('node:util')\n }\n return _util as typeof import('util')\n}\n\n/**\n * Extract caller information from the stack trace.\n * @private\n */\n/*@__NO_SIDE_EFFECTS__*/\nfunction getCallerInfo(stackOffset: number = 3): string {\n let name = ''\n const captureStackTrace = Error.captureStackTrace\n if (typeof captureStackTrace === 'function') {\n const obj: { stack?: unknown } = {}\n captureStackTrace(obj, getCallerInfo)\n const stack = obj.stack\n if (typeof stack === 'string') {\n let lineCount = 0\n let lineStart = 0\n for (let i = 0, { length } = stack; i < length; i += 1) {\n if (stack[i] === '\\n') {\n lineCount += 1\n if (lineCount < stackOffset) {\n // Store the start index of the next line.\n lineStart = i + 1\n } else {\n // Extract the full line and trim it.\n const line = stack.slice(lineStart, i).trimStart()\n // Match the function name portion (e.g., \"async runFix\").\n const match = /(?<=^at\\s+).*?(?=\\s+\\(|$)/.exec(line)?.[0]\n if (match) {\n name = match\n // Strip known V8 invocation prefixes to get the name.\n .replace(/^(?:async|bound|get|new|set)\\s+/, '')\n if (name.startsWith('Object.')) {\n // Strip leading 'Object.' if not an own property of Object.\n const afterDot = name.slice(7 /*'Object.'.length*/)\n if (!hasOwn(Object, afterDot)) {\n name = afterDot\n }\n }\n }\n break\n }\n }\n }\n }\n }\n return name\n}\n\n/**\n * Custom log function for debug output.\n * @private\n */\n/*@__NO_SIDE_EFFECTS__*/\nfunction customLog(...args: unknown[]) {\n const util = getUtil()\n const inspectOpts = debugJs.inspectOpts\n ? {\n ...debugJs.inspectOpts,\n showHidden:\n debugJs.inspectOpts.showHidden === null\n ? undefined\n : debugJs.inspectOpts.showHidden,\n depth:\n debugJs.inspectOpts.depth === null ||\n typeof debugJs.inspectOpts.depth === 'boolean'\n ? undefined\n : debugJs.inspectOpts.depth,\n }\n : {}\n ReflectApply(logger.info, logger, [\n util.formatWithOptions(inspectOpts, ...args),\n ])\n}\n\n/**\n * Extract options from namespaces parameter.\n * @private\n */\n/*@__NO_SIDE_EFFECTS__*/\nfunction extractOptions(namespaces: NamespacesOrOptions): DebugOptions {\n return namespaces !== null && typeof namespaces === 'object'\n ? ({ __proto__: null, ...namespaces } as DebugOptions)\n : ({ __proto__: null, namespaces } as DebugOptions)\n}\n\n/**\n * Check if debug is enabled for given namespaces.\n * @private\n */\n/*@__NO_SIDE_EFFECTS__*/\nfunction isEnabled(namespaces: string | undefined) {\n // Check if debugging is enabled at all\n if (!getSocketDebug()) {\n return false\n }\n if (typeof namespaces !== 'string' || !namespaces || namespaces === '*') {\n return true\n }\n // Namespace splitting logic is based the 'debug' package implementation:\n // https://github.com/debug-js/debug/blob/4.4.1/src/common.js#L169-L173.\n const split = namespaces\n .trim()\n .replace(/\\s+/g, ',')\n .split(',')\n .filter(Boolean)\n const names = []\n const skips = []\n for (const ns of split) {\n if (ns.startsWith('-')) {\n skips.push(ns.slice(1))\n } else {\n names.push(ns)\n }\n }\n if (names.length && !names.some(ns => getDebugJsInstance(ns).enabled)) {\n return false\n }\n return skips.every(ns => !getDebugJsInstance(ns).enabled)\n}\n\n/**\n * Debug output for object inspection with caller info.\n */\nfunction debugDirNs(\n namespacesOrOpts: NamespacesOrOptions,\n obj: unknown,\n inspectOpts?: InspectOptions | undefined,\n) {\n const options = extractOptions(namespacesOrOpts)\n const { namespaces } = options\n if (!isEnabled(namespaces as string)) {\n return\n }\n // Get caller info with stack offset of 4 (caller -> debugDirNs -> getCallerInfo).\n const callerName = getCallerInfo(4) || 'anonymous'\n\n if (pointingTriangle === undefined) {\n const supported = isUnicodeSupported()\n pointingTriangle = supported ? '\u25B8' : '>'\n }\n\n let opts: InspectOptions | undefined = inspectOpts\n if (opts === undefined) {\n const debugOpts = debugJs.inspectOpts\n if (debugOpts) {\n opts = {\n ...debugOpts,\n showHidden:\n debugOpts.showHidden === null ? undefined : debugOpts.showHidden,\n depth:\n debugOpts.depth === null || typeof debugOpts.depth === 'boolean'\n ? null\n : debugOpts.depth,\n } as InspectOptions\n }\n }\n const spinnerInstance = options.spinner || getSpinner()\n const wasSpinning = spinnerInstance?.isSpinning\n spinnerInstance?.stop()\n logger.info(`[DEBUG] ${callerName} ${pointingTriangle} object inspection:`)\n logger.dir(obj, inspectOpts)\n if (wasSpinning) {\n spinnerInstance?.start()\n }\n}\n\nlet pointingTriangle: string | undefined\n/**\n * Debug output with caller info.\n */\nfunction debugNs(namespacesOrOpts: NamespacesOrOptions, ...args: unknown[]) {\n const options = extractOptions(namespacesOrOpts)\n const { namespaces } = options\n if (!isEnabled(namespaces as string)) {\n return\n }\n // Get caller info with stack offset of 4 (caller -> debugNs -> getCallerInfo).\n const name = getCallerInfo(4) || 'anonymous'\n if (pointingTriangle === undefined) {\n const supported = isUnicodeSupported()\n pointingTriangle = supported ? '\u25B8' : '>'\n }\n const text = args.at(0)\n const logArgs =\n typeof text === 'string'\n ? [\n applyLinePrefix(\n `${name ? `${name} ${pointingTriangle} ` : ''}${text}`,\n { prefix: '[DEBUG] ' },\n ),\n ...args.slice(1),\n ]\n : args\n const spinnerInstance = options.spinner || getSpinner()\n const wasSpinning = spinnerInstance?.isSpinning\n spinnerInstance?.stop()\n ReflectApply(logger.info, logger, logArgs)\n if (wasSpinning) {\n spinnerInstance?.start()\n }\n}\n\n/**\n * Debug logging function with caller info.\n */\nfunction debugLogNs(namespacesOrOpts: NamespacesOrOptions, ...args: unknown[]) {\n const options = extractOptions(namespacesOrOpts)\n const { namespaces } = options\n if (!isEnabled(namespaces as string)) {\n return\n }\n // Get caller info with stack offset of 4 (caller -> debugLogNs -> getCallerInfo).\n const callerName = getCallerInfo(4) || 'anonymous'\n\n if (pointingTriangle === undefined) {\n const supported = isUnicodeSupported()\n pointingTriangle = supported ? '\u25B8' : '>'\n }\n\n const text = args.at(0)\n const logArgs =\n typeof text === 'string'\n ? [\n applyLinePrefix(\n `${callerName ? `${callerName} ${pointingTriangle} ` : ''}${text}`,\n { prefix: '[DEBUG] ' },\n ),\n ...args.slice(1),\n ]\n : [`[DEBUG] ${callerName} ${pointingTriangle}`, ...args]\n\n const spinnerInstance = options.spinner || getSpinner()\n const wasSpinning = spinnerInstance?.isSpinning\n spinnerInstance?.stop()\n ReflectApply(logger.info, logger, logArgs)\n if (wasSpinning) {\n spinnerInstance?.start()\n }\n}\n\n/**\n * Debug output for cache operations with caller info.\n * First argument is the operation type (hit/miss/set/clear).\n * Second argument is the cache key or message.\n * Optional third argument is metadata object.\n */\nfunction debugCacheNs(\n namespacesOrOpts: NamespacesOrOptions,\n operation: string,\n key: string,\n meta?: unknown | undefined,\n) {\n const options = extractOptions(namespacesOrOpts)\n const { namespaces } = options\n if (!isEnabled(namespaces as string)) {\n return\n }\n // Get caller info with stack offset of 4 (caller -> debugCacheNs -> getCallerInfo).\n const callerName = getCallerInfo(4) || 'cache'\n\n if (pointingTriangle === undefined) {\n const supported = isUnicodeSupported()\n pointingTriangle = supported ? '\u25B8' : '>'\n }\n\n const prefix = `[CACHE] ${callerName} ${pointingTriangle} ${operation}: ${key}`\n const logArgs = meta !== undefined ? [prefix, meta] : [prefix]\n\n const spinnerInstance = options.spinner || getSpinner()\n const wasSpinning = spinnerInstance?.isSpinning\n spinnerInstance?.stop()\n ReflectApply(logger.info, logger, logArgs)\n if (wasSpinning) {\n spinnerInstance?.start()\n }\n}\n\n/**\n * Cache debug function with caller info.\n */\n/*@__NO_SIDE_EFFECTS__*/\nexport function debugCache(\n operation: string,\n key: string,\n meta?: unknown | undefined,\n): void {\n if (!getSocketDebug()) {\n return\n }\n // Get caller info with stack offset of 3 (caller -> debugCache -> getCallerInfo).\n const callerName = getCallerInfo(3) || 'cache'\n\n if (pointingTriangle === undefined) {\n const supported = isUnicodeSupported()\n pointingTriangle = supported ? '\u25B8' : '>'\n }\n\n const prefix = `[CACHE] ${callerName} ${pointingTriangle} ${operation}: ${key}`\n const args = meta !== undefined ? [prefix, meta] : [prefix]\n console.log(...args)\n}\n\n/**\n * Check if debug mode is enabled.\n */\n/*@__NO_SIDE_EFFECTS__*/\nfunction isDebugNs(namespaces: string | undefined): boolean {\n return !!getSocketDebug() && isEnabled(namespaces)\n}\n\n/**\n * Debug output with caller info (wrapper for debugNs with default namespace).\n */\nfunction debug(...args: unknown[]): void {\n debugNs('*', ...args)\n}\n\n/**\n * Debug output for object inspection (wrapper for debugDirNs with default namespace).\n */\nfunction debugDir(\n obj: unknown,\n inspectOpts?: InspectOptions | undefined,\n): void {\n debugDirNs('*', obj, inspectOpts)\n}\n\n/**\n * Debug logging function (wrapper for debugLogNs with default namespace).\n */\nfunction debugLog(...args: unknown[]): void {\n debugLogNs('*', ...args)\n}\n\n/**\n * Check if debug mode is enabled.\n */\n/*@__NO_SIDE_EFFECTS__*/\nfunction isDebug(): boolean {\n return !!getSocketDebug()\n}\n\n/**\n * Create a Node.js util.debuglog compatible function.\n * Returns a function that conditionally writes debug messages to stderr.\n */\n/*@__NO_SIDE_EFFECTS__*/\nfunction debuglog(section: string) {\n const util = getUtil()\n return util.debuglog(section)\n}\n\n/**\n * Create timing functions for measuring code execution time.\n * Returns an object with start() and end() methods, plus a callable function.\n */\n/*@__NO_SIDE_EFFECTS__*/\nfunction debugtime(label: string) {\n const util = getUtil()\n // Node.js util doesn't have debugtime - create a custom implementation\n let startTime: number | undefined\n const impl = () => {\n if (startTime === undefined) {\n startTime = Date.now()\n } else {\n const duration = Date.now() - startTime\n util.debuglog('time')(`${label}: ${duration}ms`)\n startTime = undefined\n }\n }\n impl.start = () => {\n startTime = Date.now()\n }\n impl.end = () => {\n if (startTime !== undefined) {\n const duration = Date.now() - startTime\n util.debuglog('time')(`${label}: ${duration}ms`)\n startTime = undefined\n }\n }\n return impl\n}\n\n// Export main debug functions with caller info.\nexport { debug }\n// debugCache is already exported directly above\nexport { debugCacheNs }\nexport { debugDir }\nexport { debugDirNs }\nexport { debugLog }\nexport { debuglog }\nexport { debugLogNs }\nexport { debugNs }\nexport { debugtime }\nexport { isDebug }\nexport { isDebugNs }\n"],
5
- "mappings": "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",
6
- "names": ["debug_exports", "__export", "debug", "debugCache", "debugCacheNs", "debugDir", "debugDirNs", "debugLog", "debugLogNs", "debugNs", "debuglog", "debugtime", "isDebug", "isDebugNs", "__toCommonJS", "import_process", "import_debug", "import_socket", "import_is_unicode_supported", "import_logger", "import_objects", "import_strings", "ReflectApply", "debugByNamespace", "getDebugJsInstance", "namespace", "inst", "debugJs", "customLog", "_util", "getUtil", "getCallerInfo", "stackOffset", "name", "captureStackTrace", "obj", "stack", "lineCount", "lineStart", "i", "length", "line", "match", "afterDot", "args", "util", "inspectOpts", "extractOptions", "namespaces", "isEnabled", "split", "names", "skips", "ns", "namespacesOrOpts", "options", "callerName", "pointingTriangle", "isUnicodeSupported", "opts", "debugOpts", "spinnerInstance", "wasSpinning", "text", "logArgs", "operation", "key", "meta", "prefix", "section", "label", "startTime", "impl", "duration"]
4
+ "sourcesContent": ["/**\n * @fileoverview Debug logging utilities with lazy loading and environment-based control.\n * Provides Socket CLI specific debug functionality and logging formatters.\n */\n\nimport { getSpinner } from '#constants/process'\nimport { getDebug } from '#env/debug'\nimport { getSocketDebug } from '#env/socket'\nimport isUnicodeSupported from './external/@socketregistry/is-unicode-supported'\nimport debugJs from './external/debug'\n\nimport { getDefaultLogger } from './logger'\nimport { hasOwn } from './objects'\nimport { applyLinePrefix } from './strings'\n\nconst logger = getDefaultLogger()\n\n// IMPORTANT: Do not use destructuring here - use direct assignment instead.\n// tsgo has a bug that incorrectly transpiles destructured exports, resulting in\n// `exports.SomeName = void 0;` which causes runtime errors.\n// See: https://github.com/SocketDev/socket-packageurl-js/issues/3\nconst ReflectApply = Reflect.apply\n\n// Type definitions\ninterface DebugOptions {\n namespaces?: string\n spinner?: { isSpinning: boolean; stop(): void; start(): void }\n [key: string]: unknown\n}\n\ntype NamespacesOrOptions = string | DebugOptions\n\ninterface InspectOptions {\n depth?: number | null\n colors?: boolean\n [key: string]: unknown\n}\n\nexport type { DebugOptions, NamespacesOrOptions, InspectOptions }\n\nconst debugByNamespace = new Map()\n/**\n * Get or create a debug instance for a namespace.\n * @private\n */\n/*@__NO_SIDE_EFFECTS__*/\nfunction getDebugJsInstance(namespace: string) {\n let inst = debugByNamespace.get(namespace)\n if (inst) {\n return inst\n }\n if (\n !getDebug() &&\n getSocketDebug() &&\n (namespace === 'error' || namespace === 'notice')\n ) {\n debugJs.enable(namespace)\n }\n inst = debugJs(namespace)\n inst.log = customLog\n debugByNamespace.set(namespace, inst)\n return inst\n}\n\nlet _util: typeof import('util') | undefined\n/**\n * Lazily load the util module.\n * @private\n */\n/*@__NO_SIDE_EFFECTS__*/\nfunction getUtil() {\n if (_util === undefined) {\n // Use non-'node:' prefixed require to avoid Webpack errors.\n\n _util = /*@__PURE__*/ require('node:util')\n }\n return _util as typeof import('util')\n}\n\n/**\n * Extract caller information from the stack trace.\n * @private\n */\n/*@__NO_SIDE_EFFECTS__*/\nfunction getCallerInfo(stackOffset: number = 3): string {\n let name = ''\n const captureStackTrace = Error.captureStackTrace\n if (typeof captureStackTrace === 'function') {\n const obj: { stack?: unknown } = {}\n captureStackTrace(obj, getCallerInfo)\n const stack = obj.stack\n if (typeof stack === 'string') {\n let lineCount = 0\n let lineStart = 0\n for (let i = 0, { length } = stack; i < length; i += 1) {\n if (stack[i] === '\\n') {\n lineCount += 1\n if (lineCount < stackOffset) {\n // Store the start index of the next line.\n lineStart = i + 1\n } else {\n // Extract the full line and trim it.\n const line = stack.slice(lineStart, i).trimStart()\n // Match the function name portion (e.g., \"async runFix\").\n const match = /(?<=^at\\s+).*?(?=\\s+\\(|$)/.exec(line)?.[0]\n if (match) {\n name = match\n // Strip known V8 invocation prefixes to get the name.\n .replace(/^(?:async|bound|get|new|set)\\s+/, '')\n if (name.startsWith('Object.')) {\n // Strip leading 'Object.' if not an own property of Object.\n const afterDot = name.slice(7 /*'Object.'.length*/)\n if (!hasOwn(Object, afterDot)) {\n name = afterDot\n }\n }\n }\n break\n }\n }\n }\n }\n }\n return name\n}\n\n/**\n * Custom log function for debug output.\n * @private\n */\n/*@__NO_SIDE_EFFECTS__*/\nfunction customLog(...args: unknown[]) {\n const util = getUtil()\n const inspectOpts = debugJs.inspectOpts\n ? {\n ...debugJs.inspectOpts,\n showHidden:\n debugJs.inspectOpts.showHidden === null\n ? undefined\n : debugJs.inspectOpts.showHidden,\n depth:\n debugJs.inspectOpts.depth === null ||\n typeof debugJs.inspectOpts.depth === 'boolean'\n ? undefined\n : debugJs.inspectOpts.depth,\n }\n : {}\n ReflectApply(logger.info, logger, [\n util.formatWithOptions(inspectOpts, ...args),\n ])\n}\n\n/**\n * Extract options from namespaces parameter.\n * @private\n */\n/*@__NO_SIDE_EFFECTS__*/\nfunction extractOptions(namespaces: NamespacesOrOptions): DebugOptions {\n return namespaces !== null && typeof namespaces === 'object'\n ? ({ __proto__: null, ...namespaces } as DebugOptions)\n : ({ __proto__: null, namespaces } as DebugOptions)\n}\n\n/**\n * Check if debug is enabled for given namespaces.\n * @private\n */\n/*@__NO_SIDE_EFFECTS__*/\nfunction isEnabled(namespaces: string | undefined) {\n // Check if debugging is enabled at all\n if (!getSocketDebug()) {\n return false\n }\n if (typeof namespaces !== 'string' || !namespaces || namespaces === '*') {\n return true\n }\n // Namespace splitting logic is based the 'debug' package implementation:\n // https://github.com/debug-js/debug/blob/4.4.1/src/common.js#L169-L173.\n const split = namespaces\n .trim()\n .replace(/\\s+/g, ',')\n .split(',')\n .filter(Boolean)\n const names = []\n const skips = []\n for (const ns of split) {\n if (ns.startsWith('-')) {\n skips.push(ns.slice(1))\n } else {\n names.push(ns)\n }\n }\n if (names.length && !names.some(ns => getDebugJsInstance(ns).enabled)) {\n return false\n }\n return skips.every(ns => !getDebugJsInstance(ns).enabled)\n}\n\n/**\n * Debug output for object inspection with caller info.\n */\nfunction debugDirNs(\n namespacesOrOpts: NamespacesOrOptions,\n obj: unknown,\n inspectOpts?: InspectOptions | undefined,\n) {\n const options = extractOptions(namespacesOrOpts)\n const { namespaces } = options\n if (!isEnabled(namespaces as string)) {\n return\n }\n // Get caller info with stack offset of 4 (caller -> debugDirNs -> getCallerInfo).\n const callerName = getCallerInfo(4) || 'anonymous'\n\n if (pointingTriangle === undefined) {\n const supported = isUnicodeSupported()\n pointingTriangle = supported ? '\u25B8' : '>'\n }\n\n let opts: InspectOptions | undefined = inspectOpts\n if (opts === undefined) {\n const debugOpts = debugJs.inspectOpts\n if (debugOpts) {\n opts = {\n ...debugOpts,\n showHidden:\n debugOpts.showHidden === null ? undefined : debugOpts.showHidden,\n depth:\n debugOpts.depth === null || typeof debugOpts.depth === 'boolean'\n ? null\n : debugOpts.depth,\n } as InspectOptions\n }\n }\n const spinnerInstance = options.spinner || getSpinner()\n const wasSpinning = spinnerInstance?.isSpinning\n spinnerInstance?.stop()\n logger.info(`[DEBUG] ${callerName} ${pointingTriangle} object inspection:`)\n logger.dir(obj, inspectOpts)\n if (wasSpinning) {\n spinnerInstance?.start()\n }\n}\n\nlet pointingTriangle: string | undefined\n/**\n * Debug output with caller info.\n */\nfunction debugNs(namespacesOrOpts: NamespacesOrOptions, ...args: unknown[]) {\n const options = extractOptions(namespacesOrOpts)\n const { namespaces } = options\n if (!isEnabled(namespaces as string)) {\n return\n }\n // Get caller info with stack offset of 4 (caller -> debugNs -> getCallerInfo).\n const name = getCallerInfo(4) || 'anonymous'\n if (pointingTriangle === undefined) {\n const supported = isUnicodeSupported()\n pointingTriangle = supported ? '\u25B8' : '>'\n }\n const text = args.at(0)\n const logArgs =\n typeof text === 'string'\n ? [\n applyLinePrefix(\n `${name ? `${name} ${pointingTriangle} ` : ''}${text}`,\n { prefix: '[DEBUG] ' },\n ),\n ...args.slice(1),\n ]\n : args\n const spinnerInstance = options.spinner || getSpinner()\n const wasSpinning = spinnerInstance?.isSpinning\n spinnerInstance?.stop()\n ReflectApply(logger.info, logger, logArgs)\n if (wasSpinning) {\n spinnerInstance?.start()\n }\n}\n\n/**\n * Debug logging function with caller info.\n */\nfunction debugLogNs(namespacesOrOpts: NamespacesOrOptions, ...args: unknown[]) {\n const options = extractOptions(namespacesOrOpts)\n const { namespaces } = options\n if (!isEnabled(namespaces as string)) {\n return\n }\n // Get caller info with stack offset of 4 (caller -> debugLogNs -> getCallerInfo).\n const callerName = getCallerInfo(4) || 'anonymous'\n\n if (pointingTriangle === undefined) {\n const supported = isUnicodeSupported()\n pointingTriangle = supported ? '\u25B8' : '>'\n }\n\n const text = args.at(0)\n const logArgs =\n typeof text === 'string'\n ? [\n applyLinePrefix(\n `${callerName ? `${callerName} ${pointingTriangle} ` : ''}${text}`,\n { prefix: '[DEBUG] ' },\n ),\n ...args.slice(1),\n ]\n : [`[DEBUG] ${callerName} ${pointingTriangle}`, ...args]\n\n const spinnerInstance = options.spinner || getSpinner()\n const wasSpinning = spinnerInstance?.isSpinning\n spinnerInstance?.stop()\n ReflectApply(logger.info, logger, logArgs)\n if (wasSpinning) {\n spinnerInstance?.start()\n }\n}\n\n/**\n * Debug output for cache operations with caller info.\n * First argument is the operation type (hit/miss/set/clear).\n * Second argument is the cache key or message.\n * Optional third argument is metadata object.\n */\nfunction debugCacheNs(\n namespacesOrOpts: NamespacesOrOptions,\n operation: string,\n key: string,\n meta?: unknown | undefined,\n) {\n const options = extractOptions(namespacesOrOpts)\n const { namespaces } = options\n if (!isEnabled(namespaces as string)) {\n return\n }\n // Get caller info with stack offset of 4 (caller -> debugCacheNs -> getCallerInfo).\n const callerName = getCallerInfo(4) || 'cache'\n\n if (pointingTriangle === undefined) {\n const supported = isUnicodeSupported()\n pointingTriangle = supported ? '\u25B8' : '>'\n }\n\n const prefix = `[CACHE] ${callerName} ${pointingTriangle} ${operation}: ${key}`\n const logArgs = meta !== undefined ? [prefix, meta] : [prefix]\n\n const spinnerInstance = options.spinner || getSpinner()\n const wasSpinning = spinnerInstance?.isSpinning\n spinnerInstance?.stop()\n ReflectApply(logger.info, logger, logArgs)\n if (wasSpinning) {\n spinnerInstance?.start()\n }\n}\n\n/**\n * Cache debug function with caller info.\n */\n/*@__NO_SIDE_EFFECTS__*/\nexport function debugCache(\n operation: string,\n key: string,\n meta?: unknown | undefined,\n): void {\n if (!getSocketDebug()) {\n return\n }\n // Get caller info with stack offset of 3 (caller -> debugCache -> getCallerInfo).\n const callerName = getCallerInfo(3) || 'cache'\n\n if (pointingTriangle === undefined) {\n const supported = isUnicodeSupported()\n pointingTriangle = supported ? '\u25B8' : '>'\n }\n\n const prefix = `[CACHE] ${callerName} ${pointingTriangle} ${operation}: ${key}`\n const args = meta !== undefined ? [prefix, meta] : [prefix]\n console.log(...args)\n}\n\n/**\n * Check if debug mode is enabled.\n */\n/*@__NO_SIDE_EFFECTS__*/\nfunction isDebugNs(namespaces: string | undefined): boolean {\n return !!getSocketDebug() && isEnabled(namespaces)\n}\n\n/**\n * Debug output with caller info (wrapper for debugNs with default namespace).\n */\nfunction debug(...args: unknown[]): void {\n debugNs('*', ...args)\n}\n\n/**\n * Debug output for object inspection (wrapper for debugDirNs with default namespace).\n */\nfunction debugDir(\n obj: unknown,\n inspectOpts?: InspectOptions | undefined,\n): void {\n debugDirNs('*', obj, inspectOpts)\n}\n\n/**\n * Debug logging function (wrapper for debugLogNs with default namespace).\n */\nfunction debugLog(...args: unknown[]): void {\n debugLogNs('*', ...args)\n}\n\n/**\n * Check if debug mode is enabled.\n */\n/*@__NO_SIDE_EFFECTS__*/\nfunction isDebug(): boolean {\n return !!getSocketDebug()\n}\n\n/**\n * Create a Node.js util.debuglog compatible function.\n * Returns a function that conditionally writes debug messages to stderr.\n */\n/*@__NO_SIDE_EFFECTS__*/\nfunction debuglog(section: string) {\n const util = getUtil()\n return util.debuglog(section)\n}\n\n/**\n * Create timing functions for measuring code execution time.\n * Returns an object with start() and end() methods, plus a callable function.\n */\n/*@__NO_SIDE_EFFECTS__*/\nfunction debugtime(label: string) {\n const util = getUtil()\n // Node.js util doesn't have debugtime - create a custom implementation\n let startTime: number | undefined\n const impl = () => {\n if (startTime === undefined) {\n startTime = Date.now()\n } else {\n const duration = Date.now() - startTime\n util.debuglog('time')(`${label}: ${duration}ms`)\n startTime = undefined\n }\n }\n impl.start = () => {\n startTime = Date.now()\n }\n impl.end = () => {\n if (startTime !== undefined) {\n const duration = Date.now() - startTime\n util.debuglog('time')(`${label}: ${duration}ms`)\n startTime = undefined\n }\n }\n return impl\n}\n\n// Export main debug functions with caller info.\nexport { debug }\n// debugCache is already exported directly above\nexport { debugCacheNs }\nexport { debugDir }\nexport { debugDirNs }\nexport { debugLog }\nexport { debuglog }\nexport { debugLogNs }\nexport { debugNs }\nexport { debugtime }\nexport { isDebug }\nexport { isDebugNs }\n"],
5
+ "mappings": ";6iBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,WAAAE,EAAA,eAAAC,EAAA,iBAAAC,EAAA,aAAAC,EAAA,eAAAC,EAAA,aAAAC,EAAA,eAAAC,EAAA,YAAAC,EAAA,aAAAC,EAAA,cAAAC,EAAA,YAAAC,EAAA,cAAAC,IAAA,eAAAC,EAAAd,GAKA,IAAAe,EAA2B,8BAC3BC,EAAyB,sBACzBC,EAA+B,uBAC/BC,EAA+B,8DAC/BF,EAAoB,+BAEpBG,EAAiC,oBACjCC,EAAuB,qBACvBC,EAAgC,qBAEhC,MAAMC,KAAS,oBAAiB,EAM1BC,EAAe,QAAQ,MAmBvBC,EAAmB,IAAI,IAM7B,SAASC,EAAmBC,EAAmB,CAC7C,IAAIC,EAAOH,EAAiB,IAAIE,CAAS,EACzC,OAAIC,IAIF,IAAC,YAAS,MACV,kBAAe,IACdD,IAAc,SAAWA,IAAc,WAExC,EAAAE,QAAQ,OAAOF,CAAS,EAE1BC,KAAO,EAAAC,SAAQF,CAAS,EACxBC,EAAK,IAAME,EACXL,EAAiB,IAAIE,EAAWC,CAAI,EAC7BA,EACT,CAEA,IAAIG,EAMJ,SAASC,GAAU,CACjB,OAAID,IAAU,SAGZA,EAAsB,QAAQ,WAAW,GAEpCA,CACT,CAOA,SAASE,EAAcC,EAAsB,EAAW,CACtD,IAAIC,EAAO,GACX,MAAMC,EAAoB,MAAM,kBAChC,GAAI,OAAOA,GAAsB,WAAY,CAC3C,MAAMC,EAA2B,CAAC,EAClCD,EAAkBC,EAAKJ,CAAa,EACpC,MAAMK,EAAQD,EAAI,MAClB,GAAI,OAAOC,GAAU,SAAU,CAC7B,IAAIC,EAAY,EACZC,EAAY,EAChB,QAASC,EAAI,EAAG,CAAE,OAAAC,CAAO,EAAIJ,EAAOG,EAAIC,EAAQD,GAAK,EACnD,GAAIH,EAAMG,CAAC,IAAM;AAAA,EAEf,GADAF,GAAa,EACTA,EAAYL,EAEdM,EAAYC,EAAI,MACX,CAEL,MAAME,EAAOL,EAAM,MAAME,EAAWC,CAAC,EAAE,UAAU,EAE3CG,EAAQ,4BAA4B,KAAKD,CAAI,IAAI,CAAC,EACxD,GAAIC,IACFT,EAAOS,EAEJ,QAAQ,kCAAmC,EAAE,EAC5CT,EAAK,WAAW,SAAS,GAAG,CAE9B,MAAMU,EAAWV,EAAK,MAAM,CAAsB,KAC7C,UAAO,OAAQU,CAAQ,IAC1BV,EAAOU,EAEX,CAEF,KACF,CAGN,CACF,CACA,OAAOV,CACT,CAOA,SAASL,KAAagB,EAAiB,CACrC,MAAMC,EAAOf,EAAQ,EACfgB,EAAc,EAAAnB,QAAQ,YACxB,CACE,GAAG,EAAAA,QAAQ,YACX,WACE,EAAAA,QAAQ,YAAY,aAAe,KAC/B,OACA,EAAAA,QAAQ,YAAY,WAC1B,MACE,EAAAA,QAAQ,YAAY,QAAU,MAC9B,OAAO,EAAAA,QAAQ,YAAY,OAAU,UACjC,OACA,EAAAA,QAAQ,YAAY,KAC5B,EACA,CAAC,EACLL,EAAaD,EAAO,KAAMA,EAAQ,CAChCwB,EAAK,kBAAkBC,EAAa,GAAGF,CAAI,CAC7C,CAAC,CACH,CAOA,SAASG,EAAeC,EAA+C,CACrE,OAAOA,IAAe,MAAQ,OAAOA,GAAe,SAC/C,CAAE,UAAW,KAAM,GAAGA,CAAW,EACjC,CAAE,UAAW,KAAM,WAAAA,CAAW,CACrC,CAOA,SAASC,EAAUD,EAAgC,CAEjD,GAAI,IAAC,kBAAe,EAClB,MAAO,GAET,GAAI,OAAOA,GAAe,UAAY,CAACA,GAAcA,IAAe,IAClE,MAAO,GAIT,MAAME,EAAQF,EACX,KAAK,EACL,QAAQ,OAAQ,GAAG,EACnB,MAAM,GAAG,EACT,OAAO,OAAO,EACXG,EAAQ,CAAC,EACTC,EAAQ,CAAC,EACf,UAAWC,KAAMH,EACXG,EAAG,WAAW,GAAG,EACnBD,EAAM,KAAKC,EAAG,MAAM,CAAC,CAAC,EAEtBF,EAAM,KAAKE,CAAE,EAGjB,OAAIF,EAAM,QAAU,CAACA,EAAM,KAAKE,GAAM7B,EAAmB6B,CAAE,EAAE,OAAO,EAC3D,GAEFD,EAAM,MAAMC,GAAM,CAAC7B,EAAmB6B,CAAE,EAAE,OAAO,CAC1D,CAKA,SAAShD,EACPiD,EACAnB,EACAW,EACA,CACA,MAAMS,EAAUR,EAAeO,CAAgB,EACzC,CAAE,WAAAN,CAAW,EAAIO,EACvB,GAAI,CAACN,EAAUD,CAAoB,EACjC,OAGF,MAAMQ,EAAazB,EAAc,CAAC,GAAK,YAEnC0B,IAAqB,SAEvBA,KADkB,EAAAC,SAAmB,EACN,SAAM,KAGvC,IAAIC,EAAmCb,EACvC,GAAIa,IAAS,OAAW,CACtB,MAAMC,EAAY,EAAAjC,QAAQ,YACtBiC,IACFD,EAAO,CACL,GAAGC,EACH,WACEA,EAAU,aAAe,KAAO,OAAYA,EAAU,WACxD,MACEA,EAAU,QAAU,MAAQ,OAAOA,EAAU,OAAU,UACnD,KACAA,EAAU,KAClB,EAEJ,CACA,MAAMC,EAAkBN,EAAQ,YAAW,cAAW,EAChDO,EAAcD,GAAiB,WACrCA,GAAiB,KAAK,EACtBxC,EAAO,KAAK,WAAWmC,CAAU,IAAIC,CAAgB,qBAAqB,EAC1EpC,EAAO,IAAIc,EAAKW,CAAW,EACvBgB,GACFD,GAAiB,MAAM,CAE3B,CAEA,IAAIJ,EAIJ,SAASjD,EAAQ8C,KAA0CV,EAAiB,CAC1E,MAAMW,EAAUR,EAAeO,CAAgB,EACzC,CAAE,WAAAN,CAAW,EAAIO,EACvB,GAAI,CAACN,EAAUD,CAAoB,EACjC,OAGF,MAAMf,EAAOF,EAAc,CAAC,GAAK,YAC7B0B,IAAqB,SAEvBA,KADkB,EAAAC,SAAmB,EACN,SAAM,KAEvC,MAAMK,EAAOnB,EAAK,GAAG,CAAC,EAChBoB,EACJ,OAAOD,GAAS,SACZ,IACE,mBACE,GAAG9B,EAAO,GAAGA,CAAI,IAAIwB,CAAgB,IAAM,EAAE,GAAGM,CAAI,GACpD,CAAE,OAAQ,UAAW,CACvB,EACA,GAAGnB,EAAK,MAAM,CAAC,CACjB,EACAA,EACAiB,EAAkBN,EAAQ,YAAW,cAAW,EAChDO,EAAcD,GAAiB,WACrCA,GAAiB,KAAK,EACtBvC,EAAaD,EAAO,KAAMA,EAAQ2C,CAAO,EACrCF,GACFD,GAAiB,MAAM,CAE3B,CAKA,SAAStD,EAAW+C,KAA0CV,EAAiB,CAC7E,MAAMW,EAAUR,EAAeO,CAAgB,EACzC,CAAE,WAAAN,CAAW,EAAIO,EACvB,GAAI,CAACN,EAAUD,CAAoB,EACjC,OAGF,MAAMQ,EAAazB,EAAc,CAAC,GAAK,YAEnC0B,IAAqB,SAEvBA,KADkB,EAAAC,SAAmB,EACN,SAAM,KAGvC,MAAMK,EAAOnB,EAAK,GAAG,CAAC,EAChBoB,EACJ,OAAOD,GAAS,SACZ,IACE,mBACE,GAAGP,EAAa,GAAGA,CAAU,IAAIC,CAAgB,IAAM,EAAE,GAAGM,CAAI,GAChE,CAAE,OAAQ,UAAW,CACvB,EACA,GAAGnB,EAAK,MAAM,CAAC,CACjB,EACA,CAAC,WAAWY,CAAU,IAAIC,CAAgB,GAAI,GAAGb,CAAI,EAErDiB,EAAkBN,EAAQ,YAAW,cAAW,EAChDO,EAAcD,GAAiB,WACrCA,GAAiB,KAAK,EACtBvC,EAAaD,EAAO,KAAMA,EAAQ2C,CAAO,EACrCF,GACFD,GAAiB,MAAM,CAE3B,CAQA,SAAS1D,EACPmD,EACAW,EACAC,EACAC,EACA,CACA,MAAMZ,EAAUR,EAAeO,CAAgB,EACzC,CAAE,WAAAN,CAAW,EAAIO,EACvB,GAAI,CAACN,EAAUD,CAAoB,EACjC,OAGF,MAAMQ,EAAazB,EAAc,CAAC,GAAK,QAEnC0B,IAAqB,SAEvBA,KADkB,EAAAC,SAAmB,EACN,SAAM,KAGvC,MAAMU,EAAS,WAAWZ,CAAU,IAAIC,CAAgB,IAAIQ,CAAS,KAAKC,CAAG,GACvEF,EAAUG,IAAS,OAAY,CAACC,EAAQD,CAAI,EAAI,CAACC,CAAM,EAEvDP,EAAkBN,EAAQ,YAAW,cAAW,EAChDO,EAAcD,GAAiB,WACrCA,GAAiB,KAAK,EACtBvC,EAAaD,EAAO,KAAMA,EAAQ2C,CAAO,EACrCF,GACFD,GAAiB,MAAM,CAE3B,CAMO,SAAS3D,EACd+D,EACAC,EACAC,EACM,CACN,GAAI,IAAC,kBAAe,EAClB,OAGF,MAAMX,EAAazB,EAAc,CAAC,GAAK,QAEnC0B,IAAqB,SAEvBA,KADkB,EAAAC,SAAmB,EACN,SAAM,KAGvC,MAAMU,EAAS,WAAWZ,CAAU,IAAIC,CAAgB,IAAIQ,CAAS,KAAKC,CAAG,GAE7E,QAAQ,IAAI,GADCC,IAAS,OAAY,CAACC,EAAQD,CAAI,EAAI,CAACC,CAAM,CACvC,CACrB,CAMA,SAASxD,EAAUoC,EAAyC,CAC1D,MAAO,CAAC,IAAC,kBAAe,GAAKC,EAAUD,CAAU,CACnD,CAKA,SAAS/C,KAAS2C,EAAuB,CACvCpC,EAAQ,IAAK,GAAGoC,CAAI,CACtB,CAKA,SAASxC,EACP+B,EACAW,EACM,CACNzC,EAAW,IAAK8B,EAAKW,CAAW,CAClC,CAKA,SAASxC,KAAYsC,EAAuB,CAC1CrC,EAAW,IAAK,GAAGqC,CAAI,CACzB,CAMA,SAASjC,GAAmB,CAC1B,MAAO,CAAC,IAAC,kBAAe,CAC1B,CAOA,SAASF,EAAS4D,EAAiB,CAEjC,OADavC,EAAQ,EACT,SAASuC,CAAO,CAC9B,CAOA,SAAS3D,EAAU4D,EAAe,CAChC,MAAMzB,EAAOf,EAAQ,EAErB,IAAIyC,EACJ,MAAMC,EAAO,IAAM,CACjB,GAAID,IAAc,OAChBA,EAAY,KAAK,IAAI,MAChB,CACL,MAAME,EAAW,KAAK,IAAI,EAAIF,EAC9B1B,EAAK,SAAS,MAAM,EAAE,GAAGyB,CAAK,KAAKG,CAAQ,IAAI,EAC/CF,EAAY,MACd,CACF,EACA,OAAAC,EAAK,MAAQ,IAAM,CACjBD,EAAY,KAAK,IAAI,CACvB,EACAC,EAAK,IAAM,IAAM,CACf,GAAID,IAAc,OAAW,CAC3B,MAAME,EAAW,KAAK,IAAI,EAAIF,EAC9B1B,EAAK,SAAS,MAAM,EAAE,GAAGyB,CAAK,KAAKG,CAAQ,IAAI,EAC/CF,EAAY,MACd,CACF,EACOC,CACT",
6
+ "names": ["debug_exports", "__export", "debug", "debugCache", "debugCacheNs", "debugDir", "debugDirNs", "debugLog", "debugLogNs", "debugNs", "debuglog", "debugtime", "isDebug", "isDebugNs", "__toCommonJS", "import_process", "import_debug", "import_socket", "import_is_unicode_supported", "import_logger", "import_objects", "import_strings", "logger", "ReflectApply", "debugByNamespace", "getDebugJsInstance", "namespace", "inst", "debugJs", "customLog", "_util", "getUtil", "getCallerInfo", "stackOffset", "name", "captureStackTrace", "obj", "stack", "lineCount", "lineStart", "i", "length", "line", "match", "afterDot", "args", "util", "inspectOpts", "extractOptions", "namespaces", "isEnabled", "split", "names", "skips", "ns", "namespacesOrOpts", "options", "callerName", "pointingTriangle", "isUnicodeSupported", "opts", "debugOpts", "spinnerInstance", "wasSpinning", "text", "logArgs", "operation", "key", "meta", "prefix", "section", "label", "startTime", "impl", "duration"]
7
7
  }