@socketsecurity/lib 1.3.2 → 1.3.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +20 -0
- package/dist/abort.js +1 -60
- package/dist/abort.js.map +2 -2
- package/dist/agent.js +1 -289
- package/dist/agent.js.map +2 -2
- package/dist/ansi.js +1 -60
- package/dist/ansi.js.map +2 -2
- package/dist/argv/flags.js +1 -282
- package/dist/argv/flags.js.map +2 -2
- package/dist/argv/parse.js +1 -171
- package/dist/argv/parse.js.map +2 -2
- package/dist/arrays.js +1 -85
- package/dist/arrays.js.map +2 -2
- package/dist/bin.js +1 -402
- package/dist/bin.js.map +2 -2
- package/dist/cacache.js +1 -137
- package/dist/cacache.js.map +2 -2
- package/dist/cache-with-ttl.js +1 -223
- package/dist/cache-with-ttl.js.map +2 -2
- package/dist/constants/agents.js +1 -126
- package/dist/constants/agents.js.map +2 -2
- package/dist/constants/core.js +2 -57
- package/dist/constants/core.js.map +2 -2
- package/dist/constants/encoding.js +1 -48
- package/dist/constants/encoding.js.map +2 -2
- package/dist/constants/github.js +1 -30
- package/dist/constants/github.js.map +2 -2
- package/dist/constants/licenses.js +1 -66
- package/dist/constants/licenses.js.map +2 -2
- package/dist/constants/node.d.ts +2 -3
- package/dist/constants/node.js +1 -171
- package/dist/constants/node.js.map +3 -3
- package/dist/constants/packages.js +1 -128
- package/dist/constants/packages.js.map +2 -2
- package/dist/constants/paths.js +1 -150
- package/dist/constants/paths.js.map +2 -2
- package/dist/constants/platform.js +1 -41
- package/dist/constants/platform.js.map +2 -2
- package/dist/constants/process.js +1 -52
- package/dist/constants/process.js.map +2 -2
- package/dist/constants/socket.js +1 -81
- package/dist/constants/socket.js.map +2 -2
- package/dist/constants/testing.js +1 -36
- package/dist/constants/testing.js.map +2 -2
- package/dist/constants/time.js +1 -39
- package/dist/constants/time.js.map +2 -2
- package/dist/constants/typescript.js +1 -54
- package/dist/constants/typescript.js.map +2 -2
- package/dist/cover/code.js +1 -135
- package/dist/cover/code.js.map +2 -2
- package/dist/cover/formatters.js +11 -101
- package/dist/cover/formatters.js.map +2 -2
- package/dist/cover/type.js +1 -63
- package/dist/cover/type.js.map +2 -2
- package/dist/cover/types.js +1 -15
- package/dist/cover/types.js.map +2 -2
- package/dist/debug.js +2 -343
- package/dist/debug.js.map +2 -2
- package/dist/dlx-binary.js +1 -259
- package/dist/dlx-binary.js.map +2 -2
- package/dist/dlx-package.js +1 -149
- package/dist/dlx-package.js.map +2 -2
- package/dist/dlx.js +1 -166
- package/dist/dlx.js.map +2 -2
- package/dist/download-lock.js +1 -137
- package/dist/download-lock.js.map +2 -2
- package/dist/effects/pulse-frames.js +1 -64
- package/dist/effects/pulse-frames.js.map +2 -2
- package/dist/effects/text-shimmer.js +1 -174
- package/dist/effects/text-shimmer.js.map +2 -2
- package/dist/effects/types.js +1 -15
- package/dist/effects/types.js.map +2 -2
- package/dist/effects/ultra.js +1 -61
- package/dist/effects/ultra.js.map +2 -2
- package/dist/env/appdata.js +1 -28
- package/dist/env/appdata.js.map +2 -2
- package/dist/env/ci.js +1 -29
- package/dist/env/ci.js.map +2 -2
- package/dist/env/comspec.js +1 -28
- package/dist/env/comspec.js.map +2 -2
- package/dist/env/debug.js +1 -28
- package/dist/env/debug.js.map +2 -2
- package/dist/env/getters.js +1 -281
- package/dist/env/getters.js.map +2 -2
- package/dist/env/github-api-url.js +1 -28
- package/dist/env/github-api-url.js.map +2 -2
- package/dist/env/github-base-ref.js +1 -28
- package/dist/env/github-base-ref.js.map +2 -2
- package/dist/env/github-ref-name.js +1 -28
- package/dist/env/github-ref-name.js.map +2 -2
- package/dist/env/github-ref-type.js +1 -28
- package/dist/env/github-ref-type.js.map +2 -2
- package/dist/env/github-repository.js +1 -28
- package/dist/env/github-repository.js.map +2 -2
- package/dist/env/github-server-url.js +1 -28
- package/dist/env/github-server-url.js.map +2 -2
- package/dist/env/github-token.js +1 -28
- package/dist/env/github-token.js.map +2 -2
- package/dist/env/helpers.js +1 -47
- package/dist/env/helpers.js.map +2 -2
- package/dist/env/home.js +1 -28
- package/dist/env/home.js.map +2 -2
- package/dist/env/jest-worker-id.js +1 -28
- package/dist/env/jest-worker-id.js.map +2 -2
- package/dist/env/lang.js +1 -28
- package/dist/env/lang.js.map +2 -2
- package/dist/env/lc-all.js +1 -28
- package/dist/env/lc-all.js.map +2 -2
- package/dist/env/lc-messages.js +1 -28
- package/dist/env/lc-messages.js.map +2 -2
- package/dist/env/localappdata.js +1 -28
- package/dist/env/localappdata.js.map +2 -2
- package/dist/env/node-auth-token.js +1 -28
- package/dist/env/node-auth-token.js.map +2 -2
- package/dist/env/node-env.js +1 -28
- package/dist/env/node-env.js.map +2 -2
- package/dist/env/npm-config-registry.js +1 -28
- package/dist/env/npm-config-registry.js.map +2 -2
- package/dist/env/npm-config-user-agent.js +1 -28
- package/dist/env/npm-config-user-agent.js.map +2 -2
- package/dist/env/npm-lifecycle-event.js +1 -28
- package/dist/env/npm-lifecycle-event.js.map +2 -2
- package/dist/env/npm-registry.js +1 -28
- package/dist/env/npm-registry.js.map +2 -2
- package/dist/env/npm-token.js +1 -28
- package/dist/env/npm-token.js.map +2 -2
- package/dist/env/path.js +1 -28
- package/dist/env/path.js.map +2 -2
- package/dist/env/pre-commit.js +1 -29
- package/dist/env/pre-commit.js.map +2 -2
- package/dist/env/shell.js +1 -28
- package/dist/env/shell.js.map +2 -2
- package/dist/env/socket-accept-risks.js +1 -29
- package/dist/env/socket-accept-risks.js.map +2 -2
- package/dist/env/socket-api-base-url.js +1 -28
- package/dist/env/socket-api-base-url.js.map +2 -2
- package/dist/env/socket-api-proxy.js +1 -28
- package/dist/env/socket-api-proxy.js.map +2 -2
- package/dist/env/socket-api-timeout.js +1 -29
- package/dist/env/socket-api-timeout.js.map +2 -2
- package/dist/env/socket-api-token.js +1 -28
- package/dist/env/socket-api-token.js.map +2 -2
- package/dist/env/socket-cacache-dir.js +1 -28
- package/dist/env/socket-cacache-dir.js.map +2 -2
- package/dist/env/socket-cli-accept-risks.js +1 -31
- package/dist/env/socket-cli-accept-risks.js.map +2 -2
- package/dist/env/socket-cli-api-base-url.js +1 -28
- package/dist/env/socket-cli-api-base-url.js.map +2 -2
- package/dist/env/socket-cli-api-proxy.js +1 -28
- package/dist/env/socket-cli-api-proxy.js.map +2 -2
- package/dist/env/socket-cli-api-timeout.js +1 -29
- package/dist/env/socket-cli-api-timeout.js.map +2 -2
- package/dist/env/socket-cli-api-token.js +1 -28
- package/dist/env/socket-cli-api-token.js.map +2 -2
- package/dist/env/socket-cli-config.js +1 -28
- package/dist/env/socket-cli-config.js.map +2 -2
- package/dist/env/socket-cli-fix.js +1 -28
- package/dist/env/socket-cli-fix.js.map +2 -2
- package/dist/env/socket-cli-no-api-token.js +1 -31
- package/dist/env/socket-cli-no-api-token.js.map +2 -2
- package/dist/env/socket-cli-optimize.js +1 -29
- package/dist/env/socket-cli-optimize.js.map +2 -2
- package/dist/env/socket-cli-org-slug.js +1 -28
- package/dist/env/socket-cli-org-slug.js.map +2 -2
- package/dist/env/socket-cli-shadow-accept-risks.js +1 -31
- package/dist/env/socket-cli-shadow-accept-risks.js.map +2 -2
- package/dist/env/socket-cli-shadow-api-token.js +1 -28
- package/dist/env/socket-cli-shadow-api-token.js.map +2 -2
- package/dist/env/socket-cli-shadow-bin.js +1 -28
- package/dist/env/socket-cli-shadow-bin.js.map +2 -2
- package/dist/env/socket-cli-shadow-progress.js +1 -31
- package/dist/env/socket-cli-shadow-progress.js.map +2 -2
- package/dist/env/socket-cli-shadow-silent.js +1 -31
- package/dist/env/socket-cli-shadow-silent.js.map +2 -2
- package/dist/env/socket-cli-view-all-risks.js +1 -31
- package/dist/env/socket-cli-view-all-risks.js.map +2 -2
- package/dist/env/socket-config.js +1 -28
- package/dist/env/socket-config.js.map +2 -2
- package/dist/env/socket-debug.js +1 -28
- package/dist/env/socket-debug.js.map +2 -2
- package/dist/env/socket-home.js +1 -28
- package/dist/env/socket-home.js.map +2 -2
- package/dist/env/socket-no-api-token.js +1 -29
- package/dist/env/socket-no-api-token.js.map +2 -2
- package/dist/env/socket-npm-registry.js +1 -28
- package/dist/env/socket-npm-registry.js.map +2 -2
- package/dist/env/socket-org-slug.js +1 -28
- package/dist/env/socket-org-slug.js.map +2 -2
- package/dist/env/socket-registry-url.js +1 -28
- package/dist/env/socket-registry-url.js.map +2 -2
- package/dist/env/socket-view-all-risks.js +1 -29
- package/dist/env/socket-view-all-risks.js.map +2 -2
- package/dist/env/temp.js +1 -28
- package/dist/env/temp.js.map +2 -2
- package/dist/env/term.js +1 -28
- package/dist/env/term.js.map +2 -2
- package/dist/env/tmp.js +1 -28
- package/dist/env/tmp.js.map +2 -2
- package/dist/env/tmpdir.js +1 -28
- package/dist/env/tmpdir.js.map +2 -2
- package/dist/env/userprofile.js +1 -28
- package/dist/env/userprofile.js.map +2 -2
- package/dist/env/vitest.js +1 -29
- package/dist/env/vitest.js.map +2 -2
- package/dist/env/xdg-cache-home.js +1 -28
- package/dist/env/xdg-cache-home.js.map +2 -2
- package/dist/env/xdg-config-home.js +1 -28
- package/dist/env/xdg-config-home.js.map +2 -2
- package/dist/env/xdg-data-home.js +1 -28
- package/dist/env/xdg-data-home.js.map +2 -2
- package/dist/env.js +1 -61
- package/dist/env.js.map +2 -2
- package/dist/fs.js +3 -626
- package/dist/fs.js.map +2 -2
- package/dist/functions.js +1 -68
- package/dist/functions.js.map +2 -2
- package/dist/git.js +2 -320
- package/dist/git.js.map +2 -2
- package/dist/github.js +1 -201
- package/dist/github.js.map +2 -2
- package/dist/globs.js +1 -152
- package/dist/globs.js.map +2 -2
- package/dist/http-request.js +1 -313
- package/dist/http-request.js.map +2 -2
- package/dist/index.js +1 -62
- package/dist/index.js.map +2 -2
- package/dist/ipc.js +1 -232
- package/dist/ipc.js.map +2 -2
- package/dist/json.js +1 -73
- package/dist/json.js.map +2 -2
- package/dist/logger.js +1 -1254
- package/dist/logger.js.map +2 -2
- package/dist/maintained-node-versions.js +1 -35
- package/dist/maintained-node-versions.js.map +2 -2
- package/dist/memoization.js +1 -210
- package/dist/memoization.js.map +2 -2
- package/dist/objects.d.ts +0 -3
- package/dist/objects.js +1 -319
- package/dist/objects.js.map +3 -3
- package/dist/packages/editable.js +9 -356
- package/dist/packages/editable.js.map +2 -2
- package/dist/packages/exports.js +1 -162
- package/dist/packages/exports.js.map +2 -2
- package/dist/packages/isolation.js +1 -195
- package/dist/packages/isolation.js.map +2 -2
- package/dist/packages/licenses.js +1 -214
- package/dist/packages/licenses.js.map +2 -2
- package/dist/packages/manifest.js +1 -190
- package/dist/packages/manifest.js.map +2 -2
- package/dist/packages/normalize.js +1 -120
- package/dist/packages/normalize.js.map +2 -2
- package/dist/packages/operations.js +1 -304
- package/dist/packages/operations.js.map +2 -2
- package/dist/packages/paths.js +1 -53
- package/dist/packages/paths.js.map +2 -2
- package/dist/packages/provenance.js +1 -178
- package/dist/packages/provenance.js.map +2 -2
- package/dist/packages/registry.js +1 -28
- package/dist/packages/registry.js.map +2 -2
- package/dist/packages/specs.js +1 -83
- package/dist/packages/specs.js.map +2 -2
- package/dist/packages/validation.js +1 -51
- package/dist/packages/validation.js.map +2 -2
- package/dist/packages.js +1 -129
- package/dist/packages.js.map +2 -2
- package/dist/path.js +1 -448
- package/dist/path.js.map +2 -2
- package/dist/paths.js +1 -143
- package/dist/paths.js.map +2 -2
- package/dist/performance.js +15 -216
- package/dist/performance.js.map +2 -2
- package/dist/promise-queue.js +1 -109
- package/dist/promise-queue.js.map +2 -2
- package/dist/promises.js +1 -269
- package/dist/promises.js.map +2 -2
- package/dist/prompts.js +1 -58
- package/dist/prompts.js.map +2 -2
- package/dist/regexps.js +1 -30
- package/dist/regexps.js.map +2 -2
- package/dist/sea.js +1 -44
- package/dist/sea.js.map +2 -2
- package/dist/shadow.js +1 -58
- package/dist/shadow.js.map +2 -2
- package/dist/signal-exit.js +1 -248
- package/dist/signal-exit.js.map +2 -2
- package/dist/sorts.js +1 -94
- package/dist/sorts.js.map +2 -2
- package/dist/spawn.js +1 -199
- package/dist/spawn.js.map +2 -2
- package/dist/spinner.js +1 -865
- package/dist/spinner.js.map +2 -2
- package/dist/ssri.js +1 -71
- package/dist/ssri.js.map +2 -2
- package/dist/stdio/clear.js +1 -82
- package/dist/stdio/clear.js.map +2 -2
- package/dist/stdio/divider.js +3 -89
- package/dist/stdio/divider.js.map +2 -2
- package/dist/stdio/footer.js +2 -94
- package/dist/stdio/footer.js.map +2 -2
- package/dist/stdio/header.js +2 -100
- package/dist/stdio/header.js.map +2 -2
- package/dist/stdio/mask.js +5 -206
- package/dist/stdio/mask.js.map +2 -2
- package/dist/stdio/progress.js +2 -209
- package/dist/stdio/progress.js.map +2 -2
- package/dist/stdio/prompts.js +1 -88
- package/dist/stdio/prompts.js.map +2 -2
- package/dist/stdio/stderr.js +2 -89
- package/dist/stdio/stderr.js.map +2 -2
- package/dist/stdio/stdout.js +2 -103
- package/dist/stdio/stdout.js.map +2 -2
- package/dist/streams.js +1 -78
- package/dist/streams.js.map +2 -2
- package/dist/strings.js +3 -251
- package/dist/strings.js.map +2 -2
- package/dist/suppress-warnings.js +1 -98
- package/dist/suppress-warnings.js.map +2 -2
- package/dist/tables.js +3 -128
- package/dist/tables.js.map +2 -2
- package/dist/temporary-executor.js +1 -53
- package/dist/temporary-executor.js.map +2 -2
- package/dist/types.js +1 -72
- package/dist/types.js.map +2 -2
- package/dist/url.js +1 -142
- package/dist/url.js.map +2 -2
- package/dist/utils/get-ipc.js +1 -58
- package/dist/utils/get-ipc.js.map +2 -2
- package/dist/validation/json-parser.js +1 -127
- package/dist/validation/json-parser.js.map +2 -2
- package/dist/validation/types.js +1 -15
- package/dist/validation/types.js.map +2 -2
- package/dist/versions.js +1 -153
- package/dist/versions.js.map +2 -2
- package/dist/words.js +1 -50
- package/dist/words.js.map +2 -2
- package/dist/zod.js +1 -27
- package/dist/zod.js.map +2 -2
- package/package.json +4 -4
package/dist/dlx-package.js.map
CHANGED
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/dlx-package.ts"],
|
|
4
4
|
"sourcesContent": ["/**\n * @fileoverview DLX package execution - Install and execute npm packages.\n *\n * This module provides functionality to install and execute npm packages\n * in the ~/.socket/_dlx directory, similar to npx but with Socket's own cache.\n *\n * Uses content-addressed storage like npm's _npx:\n * - Hash is generated from package spec (name@version)\n * - Each unique spec gets its own directory: ~/.socket/_dlx/<hash>/\n * - Allows caching multiple versions of the same package\n *\n * Version range handling:\n * - Exact versions (1.0.0) use cache if available\n * - Range versions (^1.0.0, ~1.0.0) auto-force to get latest within range\n * - User can override with explicit force: false\n *\n * Key difference from dlx-binary.ts:\n * - dlx-binary.ts: Downloads standalone binaries from URLs\n * - dlx-package.ts: Installs npm packages from registries\n */\n\nimport { createHash } from 'node:crypto'\nimport { existsSync } from 'node:fs'\nimport path from 'node:path'\n\nimport { WIN32 } from './constants/platform'\nimport { readJsonSync } from './fs'\nimport { normalizePath } from './path'\nimport { getSocketDlxDir } from './paths'\nimport type { SpawnExtra, SpawnOptions } from './spawn'\nimport { spawn } from './spawn'\n\n/**\n * Regex to check if a version string contains range operators.\n * Matches any version with range operators: ~, ^, >, <, =, x, X, *, spaces, or ||.\n */\nconst rangeOperatorsRegExp = /[~^><=xX* ]|\\|\\|/\n\nexport interface DlxPackageOptions {\n /**\n * Package to install (e.g., '@cyclonedx/cdxgen@10.0.0').\n */\n package: string\n /**\n * Force reinstallation even if package exists.\n */\n force?: boolean | undefined\n /**\n * Additional spawn options for the execution.\n */\n spawnOptions?: SpawnOptions | undefined\n}\n\nexport interface DlxPackageResult {\n /** Path to the installed package directory. */\n packageDir: string\n /** Path to the binary that was executed. */\n binaryPath: string\n /** Whether the package was newly installed. */\n installed: boolean\n /** The spawn promise for the running process. */\n spawnPromise: ReturnType<typeof spawn>\n}\n\n/**\n * Generate a cache key from package spec, similar to npm's _npx.\n * Uses first 16 hex characters of SHA256 hash.\n */\nfunction generatePackageCacheKey(packageSpec: string): string {\n return createHash('sha256').update(packageSpec).digest('hex').slice(0, 16)\n}\n\n/**\n * Parse package spec into name and version.\n * Examples:\n * - 'lodash@4.17.21' \u2192 { name: 'lodash', version: '4.17.21' }\n * - '@scope/pkg@1.0.0' \u2192 { name: '@scope/pkg', version: '1.0.0' }\n * - 'lodash' \u2192 { name: 'lodash', version: undefined }\n */\nfunction parsePackageSpec(spec: string): {\n name: string\n version: string | undefined\n} {\n // Handle scoped packages (@scope/name@version).\n if (spec.startsWith('@')) {\n const parts = spec.split('@')\n if (parts.length === 3) {\n // @scope@version -> Invalid, but handle gracefully.\n return { name: parts[1], version: parts[2] }\n }\n if (parts.length === 2) {\n // @scope/name with no version.\n return { name: `@${parts[1]}`, version: undefined }\n }\n // @scope/name@version.\n const scopeAndName = `@${parts[1]}`\n return { name: scopeAndName, version: parts[2] }\n }\n\n // Handle unscoped packages (name@version).\n const atIndex = spec.lastIndexOf('@')\n if (atIndex === -1) {\n return { name: spec, version: undefined }\n }\n\n return {\n name: spec.slice(0, atIndex),\n version: spec.slice(atIndex + 1),\n }\n}\n\n/**\n * Install package to ~/.socket/_dlx/<hash>/ if not already installed.\n */\nasync function ensurePackageInstalled(\n packageSpec: string,\n packageName: string,\n force: boolean,\n): Promise<{ installed: boolean; packageDir: string }> {\n const cacheKey = generatePackageCacheKey(packageSpec)\n const packageDir = normalizePath(path.join(getSocketDlxDir(), cacheKey))\n const installedDir = normalizePath(\n path.join(packageDir, 'node_modules', packageName),\n )\n\n // Check if already installed (unless force).\n if (!force && existsSync(installedDir)) {\n // Verify package.json exists.\n const pkgJsonPath = path.join(installedDir, 'package.json')\n if (existsSync(pkgJsonPath)) {\n return { installed: false, packageDir }\n }\n }\n\n // Use npm install --prefix to install to specific directory.\n await spawn(\n 'npm',\n [\n 'install',\n '--prefix',\n packageDir,\n '--no-save',\n '--no-package-lock',\n '--no-audit',\n '--no-fund',\n packageSpec,\n ],\n {\n stdio: 'pipe',\n },\n )\n\n return { installed: true, packageDir }\n}\n\n/**\n * Find the binary path for an installed package.\n */\nfunction findBinaryPath(\n packageDir: string,\n packageName: string,\n binaryName?: string,\n): string {\n const installedDir = normalizePath(\n path.join(packageDir, 'node_modules', packageName),\n )\n const pkgJsonPath = path.join(installedDir, 'package.json')\n\n // Read package.json to find bin entry.\n const pkgJson = readJsonSync(pkgJsonPath) as Record<string, unknown>\n const bin = pkgJson['bin']\n\n let binPath: string | undefined\n\n if (typeof bin === 'string') {\n // Single binary.\n binPath = bin\n } else if (typeof bin === 'object' && bin !== null) {\n // Multiple binaries - use binaryName or package name.\n const binName = binaryName || packageName.split('/').pop()\n binPath = (bin as Record<string, string>)[binName!]\n }\n\n if (!binPath) {\n throw new Error(`No binary found for package \"${packageName}\"`)\n }\n\n return normalizePath(path.join(installedDir, binPath))\n}\n\n/**\n * Execute a package via DLX - install if needed and run its binary.\n *\n * This is the Socket equivalent of npx/pnpm dlx/yarn dlx, but using\n * our own cache directory (~/.socket/_dlx) and installation logic.\n *\n * Auto-forces reinstall for version ranges to get latest within range.\n */\nexport async function dlxPackage(\n args: readonly string[] | string[],\n options?: DlxPackageOptions | undefined,\n spawnExtra?: SpawnExtra | undefined,\n): Promise<DlxPackageResult> {\n const {\n force: userForce,\n package: packageSpec,\n spawnOptions,\n } = { __proto__: null, ...options } as DlxPackageOptions\n\n // Parse package spec.\n const { name: packageName, version: packageVersion } =\n parsePackageSpec(packageSpec)\n\n // Auto-force for version ranges to get latest within range.\n // User can still override with explicit force: false if they want cache.\n const isVersionRange =\n packageVersion !== undefined && rangeOperatorsRegExp.test(packageVersion)\n const force = userForce !== undefined ? userForce : isVersionRange\n\n // Build full package spec for installation.\n const fullPackageSpec = packageVersion\n ? `${packageName}@${packageVersion}`\n : packageName\n\n // Ensure package is installed.\n const { installed, packageDir } = await ensurePackageInstalled(\n fullPackageSpec,\n packageName,\n force,\n )\n\n // Find binary path.\n const binaryPath = findBinaryPath(packageDir, packageName)\n\n // Make binary executable on Unix systems.\n if (!WIN32 && existsSync(binaryPath)) {\n const { chmodSync } = require('node:fs')\n try {\n chmodSync(binaryPath, 0o755)\n } catch {\n // Ignore chmod errors.\n }\n }\n\n // Execute binary.\n const spawnPromise = spawn(binaryPath, args, spawnOptions, spawnExtra)\n\n return {\n binaryPath,\n installed,\n packageDir,\n spawnPromise,\n }\n}\n"],
|
|
5
|
-
"mappings": "
|
|
6
|
-
"names": ["path"]
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["dlx_package_exports", "__export", "dlxPackage", "__toCommonJS", "import_node_crypto", "import_node_fs", "import_node_path", "import_platform", "import_fs", "import_path", "import_paths", "import_spawn", "rangeOperatorsRegExp", "generatePackageCacheKey", "packageSpec", "parsePackageSpec", "spec", "parts", "atIndex", "ensurePackageInstalled", "packageName", "force", "cacheKey", "packageDir", "path", "installedDir", "pkgJsonPath", "findBinaryPath", "binaryName", "bin", "binPath", "binName", "args", "options", "spawnExtra", "userForce", "spawnOptions", "packageVersion", "isVersionRange", "fullPackageSpec", "installed", "binaryPath", "chmodSync", "spawnPromise"]
|
|
7
7
|
}
|
package/dist/dlx.js
CHANGED
|
@@ -1,168 +1,3 @@
|
|
|
1
1
|
/* Socket Lib - Built with esbuild */
|
|
2
|
-
var
|
|
3
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
-
var __export = (target, all) => {
|
|
7
|
-
for (var name in all)
|
|
8
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
-
};
|
|
10
|
-
var __copyProps = (to, from, except, desc) => {
|
|
11
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
-
for (let key of __getOwnPropNames(from))
|
|
13
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
-
}
|
|
16
|
-
return to;
|
|
17
|
-
};
|
|
18
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
-
var dlx_exports = {};
|
|
20
|
-
__export(dlx_exports, {
|
|
21
|
-
clearDlx: () => clearDlx,
|
|
22
|
-
clearDlxSync: () => clearDlxSync,
|
|
23
|
-
dlxDirExists: () => dlxDirExists,
|
|
24
|
-
dlxDirExistsAsync: () => dlxDirExistsAsync,
|
|
25
|
-
ensureDlxDir: () => ensureDlxDir,
|
|
26
|
-
ensureDlxDirSync: () => ensureDlxDirSync,
|
|
27
|
-
getDlxInstalledPackageDir: () => getDlxInstalledPackageDir,
|
|
28
|
-
getDlxPackageDir: () => getDlxPackageDir,
|
|
29
|
-
getDlxPackageJsonPath: () => getDlxPackageJsonPath,
|
|
30
|
-
getDlxPackageNodeModulesDir: () => getDlxPackageNodeModulesDir,
|
|
31
|
-
isDlxPackageInstalled: () => isDlxPackageInstalled,
|
|
32
|
-
isDlxPackageInstalledAsync: () => isDlxPackageInstalledAsync,
|
|
33
|
-
listDlxPackages: () => listDlxPackages,
|
|
34
|
-
listDlxPackagesAsync: () => listDlxPackagesAsync,
|
|
35
|
-
removeDlxPackage: () => removeDlxPackage,
|
|
36
|
-
removeDlxPackageSync: () => removeDlxPackageSync
|
|
37
|
-
});
|
|
38
|
-
module.exports = __toCommonJS(dlx_exports);
|
|
39
|
-
var import_node_fs = require("node:fs");
|
|
40
|
-
var import_fs = require("./fs");
|
|
41
|
-
var import_path = require("./path");
|
|
42
|
-
var import_paths = require("./paths");
|
|
43
|
-
var import_promises = require("./promises");
|
|
44
|
-
let _path;
|
|
45
|
-
// @__NO_SIDE_EFFECTS__
|
|
46
|
-
function getPath() {
|
|
47
|
-
if (_path === void 0) {
|
|
48
|
-
_path = require("node:path");
|
|
49
|
-
}
|
|
50
|
-
return _path;
|
|
51
|
-
}
|
|
52
|
-
async function clearDlx() {
|
|
53
|
-
const packages = await listDlxPackagesAsync();
|
|
54
|
-
await (0, import_promises.pEach)(packages, (pkg) => removeDlxPackage(pkg));
|
|
55
|
-
}
|
|
56
|
-
function clearDlxSync() {
|
|
57
|
-
const packages = listDlxPackages();
|
|
58
|
-
for (const pkg of packages) {
|
|
59
|
-
removeDlxPackageSync(pkg);
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
function dlxDirExists() {
|
|
63
|
-
return (0, import_node_fs.existsSync)((0, import_paths.getSocketDlxDir)());
|
|
64
|
-
}
|
|
65
|
-
async function dlxDirExistsAsync() {
|
|
66
|
-
try {
|
|
67
|
-
await import_node_fs.promises.access((0, import_paths.getSocketDlxDir)());
|
|
68
|
-
return true;
|
|
69
|
-
} catch {
|
|
70
|
-
return false;
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
async function ensureDlxDir() {
|
|
74
|
-
await import_node_fs.promises.mkdir((0, import_paths.getSocketDlxDir)(), { recursive: true });
|
|
75
|
-
}
|
|
76
|
-
function ensureDlxDirSync() {
|
|
77
|
-
const { mkdirSync } = require("node:fs");
|
|
78
|
-
mkdirSync((0, import_paths.getSocketDlxDir)(), { recursive: true });
|
|
79
|
-
}
|
|
80
|
-
function getDlxInstalledPackageDir(packageName) {
|
|
81
|
-
const path = /* @__PURE__ */ getPath();
|
|
82
|
-
return (0, import_path.normalizePath)(
|
|
83
|
-
path.join(getDlxPackageNodeModulesDir(packageName), packageName)
|
|
84
|
-
);
|
|
85
|
-
}
|
|
86
|
-
function getDlxPackageDir(packageName) {
|
|
87
|
-
const path = /* @__PURE__ */ getPath();
|
|
88
|
-
return (0, import_path.normalizePath)(path.join((0, import_paths.getSocketDlxDir)(), packageName));
|
|
89
|
-
}
|
|
90
|
-
function getDlxPackageJsonPath(packageName) {
|
|
91
|
-
const path = /* @__PURE__ */ getPath();
|
|
92
|
-
return (0, import_path.normalizePath)(
|
|
93
|
-
path.join(getDlxInstalledPackageDir(packageName), "package.json")
|
|
94
|
-
);
|
|
95
|
-
}
|
|
96
|
-
function getDlxPackageNodeModulesDir(packageName) {
|
|
97
|
-
const path = /* @__PURE__ */ getPath();
|
|
98
|
-
return (0, import_path.normalizePath)(path.join(getDlxPackageDir(packageName), "node_modules"));
|
|
99
|
-
}
|
|
100
|
-
function isDlxPackageInstalled(packageName) {
|
|
101
|
-
return (0, import_node_fs.existsSync)(getDlxInstalledPackageDir(packageName));
|
|
102
|
-
}
|
|
103
|
-
async function isDlxPackageInstalledAsync(packageName) {
|
|
104
|
-
try {
|
|
105
|
-
await import_node_fs.promises.access(getDlxInstalledPackageDir(packageName));
|
|
106
|
-
return true;
|
|
107
|
-
} catch {
|
|
108
|
-
return false;
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
function listDlxPackages() {
|
|
112
|
-
try {
|
|
113
|
-
return (0, import_fs.readDirNamesSync)((0, import_paths.getSocketDlxDir)(), { sort: true });
|
|
114
|
-
} catch {
|
|
115
|
-
return [];
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
async function listDlxPackagesAsync() {
|
|
119
|
-
try {
|
|
120
|
-
const entries = await import_node_fs.promises.readdir((0, import_paths.getSocketDlxDir)(), {
|
|
121
|
-
withFileTypes: true
|
|
122
|
-
});
|
|
123
|
-
return entries.filter((e) => e.isDirectory()).map((e) => e.name).sort();
|
|
124
|
-
} catch {
|
|
125
|
-
return [];
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
async function removeDlxPackage(packageName) {
|
|
129
|
-
const packageDir = getDlxPackageDir(packageName);
|
|
130
|
-
try {
|
|
131
|
-
await (0, import_fs.safeDelete)(packageDir, { recursive: true, force: true });
|
|
132
|
-
} catch (e) {
|
|
133
|
-
throw new Error(`Failed to remove DLX package "${packageName}"`, {
|
|
134
|
-
cause: e
|
|
135
|
-
});
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
function removeDlxPackageSync(packageName) {
|
|
139
|
-
const { rmSync } = require("node:fs");
|
|
140
|
-
const packageDir = getDlxPackageDir(packageName);
|
|
141
|
-
try {
|
|
142
|
-
rmSync(packageDir, { recursive: true, force: true });
|
|
143
|
-
} catch (e) {
|
|
144
|
-
throw new Error(`Failed to remove DLX package "${packageName}"`, {
|
|
145
|
-
cause: e
|
|
146
|
-
});
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
// Annotate the CommonJS export names for ESM import in node:
|
|
150
|
-
0 && (module.exports = {
|
|
151
|
-
clearDlx,
|
|
152
|
-
clearDlxSync,
|
|
153
|
-
dlxDirExists,
|
|
154
|
-
dlxDirExistsAsync,
|
|
155
|
-
ensureDlxDir,
|
|
156
|
-
ensureDlxDirSync,
|
|
157
|
-
getDlxInstalledPackageDir,
|
|
158
|
-
getDlxPackageDir,
|
|
159
|
-
getDlxPackageJsonPath,
|
|
160
|
-
getDlxPackageNodeModulesDir,
|
|
161
|
-
isDlxPackageInstalled,
|
|
162
|
-
isDlxPackageInstalledAsync,
|
|
163
|
-
listDlxPackages,
|
|
164
|
-
listDlxPackagesAsync,
|
|
165
|
-
removeDlxPackage,
|
|
166
|
-
removeDlxPackageSync
|
|
167
|
-
});
|
|
2
|
+
var x=Object.defineProperty;var P=Object.getOwnPropertyDescriptor;var k=Object.getOwnPropertyNames;var v=Object.prototype.hasOwnProperty;var w=(r,t)=>{for(var e in t)x(r,e,{get:t[e],enumerable:!0})},S=(r,t,e,c)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of k(t))!v.call(r,i)&&i!==e&&x(r,i,{get:()=>t[i],enumerable:!(c=P(t,i))||c.enumerable});return r};var j=r=>S(x({},"__esModule",{value:!0}),r);var $={};w($,{clearDlx:()=>E,clearDlxSync:()=>b,dlxDirExists:()=>q,dlxDirExistsAsync:()=>A,ensureDlxDir:()=>F,ensureDlxDirSync:()=>I,getDlxInstalledPackageDir:()=>l,getDlxPackageDir:()=>p,getDlxPackageJsonPath:()=>L,getDlxPackageNodeModulesDir:()=>D,isDlxPackageInstalled:()=>X,isDlxPackageInstalledAsync:()=>_,listDlxPackages:()=>m,listDlxPackagesAsync:()=>d,removeDlxPackage:()=>y,removeDlxPackageSync:()=>h});module.exports=j($);var n=require("node:fs"),s=require("./fs"),a=require("./path"),o=require("./paths"),g=require("./promises");let f;function u(){return f===void 0&&(f=require("node:path")),f}async function E(){const r=await d();await(0,g.pEach)(r,t=>y(t))}function b(){const r=m();for(const t of r)h(t)}function q(){return(0,n.existsSync)((0,o.getSocketDlxDir)())}async function A(){try{return await n.promises.access((0,o.getSocketDlxDir)()),!0}catch{return!1}}async function F(){await n.promises.mkdir((0,o.getSocketDlxDir)(),{recursive:!0})}function I(){const{mkdirSync:r}=require("node:fs");r((0,o.getSocketDlxDir)(),{recursive:!0})}function l(r){return(0,a.normalizePath)(u().join(D(r),r))}function p(r){return(0,a.normalizePath)(u().join((0,o.getSocketDlxDir)(),r))}function L(r){return(0,a.normalizePath)(u().join(l(r),"package.json"))}function D(r){return(0,a.normalizePath)(u().join(p(r),"node_modules"))}function X(r){return(0,n.existsSync)(l(r))}async function _(r){try{return await n.promises.access(l(r)),!0}catch{return!1}}function m(){try{return(0,s.readDirNamesSync)((0,o.getSocketDlxDir)(),{sort:!0})}catch{return[]}}async function d(){try{return(await n.promises.readdir((0,o.getSocketDlxDir)(),{withFileTypes:!0})).filter(t=>t.isDirectory()).map(t=>t.name).sort()}catch{return[]}}async function y(r){const t=p(r);try{await(0,s.safeDelete)(t,{recursive:!0,force:!0})}catch(e){throw new Error(`Failed to remove DLX package "${r}"`,{cause:e})}}function h(r){const{rmSync:t}=require("node:fs"),e=p(r);try{t(e,{recursive:!0,force:!0})}catch(c){throw new Error(`Failed to remove DLX package "${r}"`,{cause:c})}}0&&(module.exports={clearDlx,clearDlxSync,dlxDirExists,dlxDirExistsAsync,ensureDlxDir,ensureDlxDirSync,getDlxInstalledPackageDir,getDlxPackageDir,getDlxPackageJsonPath,getDlxPackageNodeModulesDir,isDlxPackageInstalled,isDlxPackageInstalledAsync,listDlxPackages,listDlxPackagesAsync,removeDlxPackage,removeDlxPackageSync});
|
|
168
3
|
//# sourceMappingURL=dlx.js.map
|
package/dist/dlx.js.map
CHANGED
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/dlx.ts"],
|
|
4
4
|
"sourcesContent": ["/** @fileoverview DLX (execute package) utilities for Socket ecosystem shared installations. */\n\nimport { existsSync, promises as fs } from 'node:fs'\n\nimport { readDirNamesSync, safeDelete } from './fs'\nimport { normalizePath } from './path'\nimport { getSocketDlxDir } from './paths'\nimport { pEach } from './promises'\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!\n}\n\n/**\n * Clear all DLX package installations.\n */\nexport async function clearDlx(): Promise<void> {\n const packages = await listDlxPackagesAsync()\n await pEach(packages, pkg => removeDlxPackage(pkg))\n}\n\n/**\n * Clear all DLX package installations synchronously.\n */\nexport function clearDlxSync(): void {\n const packages = listDlxPackages()\n for (const pkg of packages) {\n removeDlxPackageSync(pkg)\n }\n}\n\n/**\n * Check if the DLX directory exists.\n */\nexport function dlxDirExists(): boolean {\n return existsSync(getSocketDlxDir())\n}\n\n/**\n * Check if the DLX directory exists asynchronously.\n */\nexport async function dlxDirExistsAsync(): Promise<boolean> {\n try {\n await fs.access(getSocketDlxDir())\n return true\n } catch {\n return false\n }\n}\n\n/**\n * Ensure the DLX directory exists, creating it if necessary.\n */\nexport async function ensureDlxDir(): Promise<void> {\n await fs.mkdir(getSocketDlxDir(), { recursive: true })\n}\n\n/**\n * Ensure the DLX directory exists synchronously, creating it if necessary.\n */\nexport function ensureDlxDirSync(): void {\n const { mkdirSync } = require('node:fs')\n mkdirSync(getSocketDlxDir(), { recursive: true })\n}\n\n/**\n * Get the installed package directory within DLX node_modules.\n */\nexport function getDlxInstalledPackageDir(packageName: string): string {\n const path = getPath()\n return normalizePath(\n path.join(getDlxPackageNodeModulesDir(packageName), packageName),\n )\n}\n\n/**\n * Get the DLX installation directory for a specific package.\n */\nexport function getDlxPackageDir(packageName: string): string {\n const path = getPath()\n return normalizePath(path.join(getSocketDlxDir(), packageName))\n}\n\n/**\n * Get the package.json path for a DLX installed package.\n */\nexport function getDlxPackageJsonPath(packageName: string): string {\n const path = getPath()\n return normalizePath(\n path.join(getDlxInstalledPackageDir(packageName), 'package.json'),\n )\n}\n\n/**\n * Get the node_modules directory for a DLX package installation.\n */\nexport function getDlxPackageNodeModulesDir(packageName: string): string {\n const path = getPath()\n return normalizePath(path.join(getDlxPackageDir(packageName), 'node_modules'))\n}\n\n/**\n * Check if a package is installed in DLX.\n */\nexport function isDlxPackageInstalled(packageName: string): boolean {\n return existsSync(getDlxInstalledPackageDir(packageName))\n}\n\n/**\n * Check if a package is installed in DLX asynchronously.\n */\nexport async function isDlxPackageInstalledAsync(\n packageName: string,\n): Promise<boolean> {\n try {\n await fs.access(getDlxInstalledPackageDir(packageName))\n return true\n } catch {\n return false\n }\n}\n\n/**\n * List all packages installed in DLX.\n */\nexport function listDlxPackages(): string[] {\n try {\n return readDirNamesSync(getSocketDlxDir(), { sort: true })\n } catch {\n return []\n }\n}\n\n/**\n * List all packages installed in DLX asynchronously.\n */\nexport async function listDlxPackagesAsync(): Promise<string[]> {\n try {\n const entries = await fs.readdir(getSocketDlxDir(), {\n withFileTypes: true,\n })\n return entries\n .filter(e => e.isDirectory())\n .map(e => e.name)\n .sort()\n } catch {\n return []\n }\n}\n\n/**\n * Remove a DLX package installation.\n */\nexport async function removeDlxPackage(packageName: string): Promise<void> {\n const packageDir = getDlxPackageDir(packageName)\n try {\n await safeDelete(packageDir, { recursive: true, force: true })\n } catch (e) {\n throw new Error(`Failed to remove DLX package \"${packageName}\"`, {\n cause: e,\n })\n }\n}\n\n/**\n * Remove a DLX package installation synchronously.\n */\nexport function removeDlxPackageSync(packageName: string): void {\n const { rmSync } = require('node:fs')\n const packageDir = getDlxPackageDir(packageName)\n try {\n rmSync(packageDir, { recursive: true, force: true })\n } catch (e) {\n throw new Error(`Failed to remove DLX package \"${packageName}\"`, {\n cause: e,\n })\n }\n}\n"],
|
|
5
|
-
"mappings": "
|
|
6
|
-
"names": ["fs"]
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["dlx_exports", "__export", "clearDlx", "clearDlxSync", "dlxDirExists", "dlxDirExistsAsync", "ensureDlxDir", "ensureDlxDirSync", "getDlxInstalledPackageDir", "getDlxPackageDir", "getDlxPackageJsonPath", "getDlxPackageNodeModulesDir", "isDlxPackageInstalled", "isDlxPackageInstalledAsync", "listDlxPackages", "listDlxPackagesAsync", "removeDlxPackage", "removeDlxPackageSync", "__toCommonJS", "import_node_fs", "import_fs", "import_path", "import_paths", "import_promises", "_path", "getPath", "packages", "pkg", "fs", "mkdirSync", "packageName", "e", "packageDir", "rmSync"]
|
|
7
7
|
}
|
package/dist/download-lock.js
CHANGED
|
@@ -1,139 +1,3 @@
|
|
|
1
1
|
/* Socket Lib - Built with esbuild */
|
|
2
|
-
var
|
|
3
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
-
var __export = (target, all) => {
|
|
7
|
-
for (var name in all)
|
|
8
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
-
};
|
|
10
|
-
var __copyProps = (to, from, except, desc) => {
|
|
11
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
-
for (let key of __getOwnPropNames(from))
|
|
13
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
-
}
|
|
16
|
-
return to;
|
|
17
|
-
};
|
|
18
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
-
var download_lock_exports = {};
|
|
20
|
-
__export(download_lock_exports, {
|
|
21
|
-
downloadWithLock: () => downloadWithLock
|
|
22
|
-
});
|
|
23
|
-
module.exports = __toCommonJS(download_lock_exports);
|
|
24
|
-
var import_node_fs = require("node:fs");
|
|
25
|
-
var import_promises = require("node:fs/promises");
|
|
26
|
-
var import_node_path = require("node:path");
|
|
27
|
-
var import_http_request = require("./http-request");
|
|
28
|
-
function getLockFilePath(destPath, locksDir) {
|
|
29
|
-
const dir = locksDir || `${(0, import_node_path.dirname)(destPath)}/.locks`;
|
|
30
|
-
const filename = `${destPath.replace(/[^\w.-]/g, "_")}.lock`;
|
|
31
|
-
return (0, import_node_path.join)(dir, filename);
|
|
32
|
-
}
|
|
33
|
-
function isLockStale(lockInfo, staleTimeout) {
|
|
34
|
-
const age = Date.now() - lockInfo.startTime;
|
|
35
|
-
if (age > staleTimeout) {
|
|
36
|
-
return true;
|
|
37
|
-
}
|
|
38
|
-
try {
|
|
39
|
-
process.kill(lockInfo.pid, 0);
|
|
40
|
-
return false;
|
|
41
|
-
} catch {
|
|
42
|
-
return true;
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
async function acquireLock(destPath, url, options) {
|
|
46
|
-
const { lockTimeout, locksDir, pollInterval, staleTimeout } = options;
|
|
47
|
-
const lockPath = getLockFilePath(destPath, locksDir);
|
|
48
|
-
const lockDir = (0, import_node_path.dirname)(lockPath);
|
|
49
|
-
await (0, import_promises.mkdir)(lockDir, { recursive: true });
|
|
50
|
-
const startTime = Date.now();
|
|
51
|
-
while (true) {
|
|
52
|
-
try {
|
|
53
|
-
if ((0, import_node_fs.existsSync)(lockPath)) {
|
|
54
|
-
const lockContent = await (0, import_promises.readFile)(lockPath, "utf8");
|
|
55
|
-
const lockInfo2 = JSON.parse(lockContent);
|
|
56
|
-
if (isLockStale(lockInfo2, staleTimeout)) {
|
|
57
|
-
await (0, import_promises.rm)(lockPath, { force: true });
|
|
58
|
-
} else {
|
|
59
|
-
if (Date.now() - startTime > lockTimeout) {
|
|
60
|
-
throw new Error(
|
|
61
|
-
`Lock acquisition timed out after ${lockTimeout}ms (held by PID ${lockInfo2.pid})`
|
|
62
|
-
);
|
|
63
|
-
}
|
|
64
|
-
await new Promise((resolve) => setTimeout(resolve, pollInterval));
|
|
65
|
-
continue;
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
const lockInfo = {
|
|
69
|
-
pid: process.pid,
|
|
70
|
-
startTime: Date.now(),
|
|
71
|
-
url
|
|
72
|
-
};
|
|
73
|
-
await (0, import_promises.writeFile)(lockPath, JSON.stringify(lockInfo, null, 2), {
|
|
74
|
-
// Use 'wx' flag to fail if file exists (atomic operation)
|
|
75
|
-
flag: "wx"
|
|
76
|
-
});
|
|
77
|
-
return lockPath;
|
|
78
|
-
} catch (e) {
|
|
79
|
-
if (e.code === "EEXIST") {
|
|
80
|
-
if (Date.now() - startTime > lockTimeout) {
|
|
81
|
-
throw new Error(`Lock acquisition timed out after ${lockTimeout}ms`);
|
|
82
|
-
}
|
|
83
|
-
await new Promise((resolve) => setTimeout(resolve, pollInterval));
|
|
84
|
-
continue;
|
|
85
|
-
}
|
|
86
|
-
throw e;
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
async function releaseLock(lockPath) {
|
|
91
|
-
try {
|
|
92
|
-
await (0, import_promises.rm)(lockPath, { force: true });
|
|
93
|
-
} catch {
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
async function downloadWithLock(url, destPath, options) {
|
|
97
|
-
const {
|
|
98
|
-
lockTimeout = 6e4,
|
|
99
|
-
locksDir,
|
|
100
|
-
pollInterval = 1e3,
|
|
101
|
-
staleTimeout = 3e5,
|
|
102
|
-
...downloadOptions
|
|
103
|
-
} = { __proto__: null, ...options };
|
|
104
|
-
if ((0, import_node_fs.existsSync)(destPath)) {
|
|
105
|
-
const statResult = await (0, import_promises.stat)(destPath).catch(() => null);
|
|
106
|
-
if (statResult && statResult.size > 0) {
|
|
107
|
-
return {
|
|
108
|
-
path: destPath,
|
|
109
|
-
size: statResult.size
|
|
110
|
-
};
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
const lockPath = await acquireLock(destPath, url, {
|
|
114
|
-
lockTimeout,
|
|
115
|
-
locksDir,
|
|
116
|
-
pollInterval,
|
|
117
|
-
staleTimeout
|
|
118
|
-
});
|
|
119
|
-
try {
|
|
120
|
-
if ((0, import_node_fs.existsSync)(destPath)) {
|
|
121
|
-
const statResult = await (0, import_promises.stat)(destPath).catch(() => null);
|
|
122
|
-
if (statResult && statResult.size > 0) {
|
|
123
|
-
return {
|
|
124
|
-
path: destPath,
|
|
125
|
-
size: statResult.size
|
|
126
|
-
};
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
const result = await (0, import_http_request.httpDownload)(url, destPath, downloadOptions);
|
|
130
|
-
return result;
|
|
131
|
-
} finally {
|
|
132
|
-
await releaseLock(lockPath);
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
// Annotate the CommonJS export names for ESM import in node:
|
|
136
|
-
0 && (module.exports = {
|
|
137
|
-
downloadWithLock
|
|
138
|
-
});
|
|
2
|
+
var d=Object.defineProperty;var T=Object.getOwnPropertyDescriptor;var L=Object.getOwnPropertyNames;var h=Object.prototype.hasOwnProperty;var y=(o,t)=>{for(var n in t)d(o,n,{get:t[n],enumerable:!0})},b=(o,t,n,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of L(t))!h.call(o,r)&&r!==n&&d(o,r,{get:()=>t[r],enumerable:!(i=T(t,r))||i.enumerable});return o};var I=o=>b(d({},"__esModule",{value:!0}),o);var E={};y(E,{downloadWithLock:()=>z});module.exports=I(E);var m=require("node:fs"),e=require("node:fs/promises"),l=require("node:path"),D=require("./http-request");function O(o,t){const n=t||`${(0,l.dirname)(o)}/.locks`,i=`${o.replace(/[^\w.-]/g,"_")}.lock`;return(0,l.join)(n,i)}function x(o,t){if(Date.now()-o.startTime>t)return!0;try{return process.kill(o.pid,0),!1}catch{return!0}}async function _(o,t,n){const{lockTimeout:i,locksDir:r,pollInterval:u,staleTimeout:f}=n,a=O(o,r),w=(0,l.dirname)(a);await(0,e.mkdir)(w,{recursive:!0});const c=Date.now();for(;;)try{if((0,m.existsSync)(a)){const p=await(0,e.readFile)(a,"utf8"),k=JSON.parse(p);if(x(k,f))await(0,e.rm)(a,{force:!0});else{if(Date.now()-c>i)throw new Error(`Lock acquisition timed out after ${i}ms (held by PID ${k.pid})`);await new Promise(g=>setTimeout(g,u));continue}}const s={pid:process.pid,startTime:Date.now(),url:t};return await(0,e.writeFile)(a,JSON.stringify(s,null,2),{flag:"wx"}),a}catch(s){if(s.code==="EEXIST"){if(Date.now()-c>i)throw new Error(`Lock acquisition timed out after ${i}ms`);await new Promise(p=>setTimeout(p,u));continue}throw s}}async function v(o){try{await(0,e.rm)(o,{force:!0})}catch{}}async function z(o,t,n){const{lockTimeout:i=6e4,locksDir:r,pollInterval:u=1e3,staleTimeout:f=3e5,...a}={__proto__:null,...n};if((0,m.existsSync)(t)){const c=await(0,e.stat)(t).catch(()=>null);if(c&&c.size>0)return{path:t,size:c.size}}const w=await _(t,o,{lockTimeout:i,locksDir:r,pollInterval:u,staleTimeout:f});try{if((0,m.existsSync)(t)){const s=await(0,e.stat)(t).catch(()=>null);if(s&&s.size>0)return{path:t,size:s.size}}return await(0,D.httpDownload)(o,t,a)}finally{await v(w)}}0&&(module.exports={downloadWithLock});
|
|
139
3
|
//# sourceMappingURL=download-lock.js.map
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/download-lock.ts"],
|
|
4
4
|
"sourcesContent": ["/** @fileoverview Download locking utilities to prevent concurrent downloads of the same resource. Uses file-based locking for cross-process synchronization. */\n\nimport { existsSync } from 'node:fs'\nimport { mkdir, readFile, rm, stat, writeFile } from 'node:fs/promises'\nimport { dirname, join } from 'node:path'\nimport type { HttpDownloadOptions, HttpDownloadResult } from './http-request'\nimport { httpDownload } from './http-request'\n\nexport interface DownloadLockInfo {\n pid: number\n startTime: number\n url: string\n}\n\nexport interface DownloadWithLockOptions extends HttpDownloadOptions {\n /**\n * Maximum time to wait for lock acquisition in milliseconds.\n * @default 60000 (1 minute)\n */\n lockTimeout?: number | undefined\n /**\n * Directory where lock files are stored.\n * @default '<destPath>.locks'\n */\n locksDir?: string | undefined\n /**\n * Interval for checking stale locks in milliseconds.\n * @default 1000 (1 second)\n */\n pollInterval?: number | undefined\n /**\n * Maximum age of a lock before it's considered stale in milliseconds.\n * @default 300000 (5 minutes)\n */\n staleTimeout?: number | undefined\n}\n\n/**\n * Get the path to the lock file for a destination path.\n */\nfunction getLockFilePath(destPath: string, locksDir?: string): string {\n const dir = locksDir || `${dirname(destPath)}/.locks`\n const filename = `${destPath.replace(/[^\\w.-]/g, '_')}.lock`\n return join(dir, filename)\n}\n\n/**\n * Check if a lock is stale (process no longer exists or too old).\n */\nfunction isLockStale(\n lockInfo: DownloadLockInfo,\n staleTimeout: number,\n): boolean {\n // Check if lock is too old\n const age = Date.now() - lockInfo.startTime\n if (age > staleTimeout) {\n return true\n }\n\n // Check if process still exists (Node.js specific)\n try {\n // process.kill(pid, 0) doesn't actually kill the process\n // It just checks if the process exists\n process.kill(lockInfo.pid, 0)\n return false\n } catch {\n // Process doesn't exist\n return true\n }\n}\n\n/**\n * Acquire a lock for downloading to a destination path.\n * @throws {Error} When lock cannot be acquired within timeout.\n */\nasync function acquireLock(\n destPath: string,\n url: string,\n options: {\n lockTimeout: number\n locksDir?: string | undefined\n pollInterval: number\n staleTimeout: number\n },\n): Promise<string> {\n const { lockTimeout, locksDir, pollInterval, staleTimeout } = options\n const lockPath = getLockFilePath(destPath, locksDir)\n const lockDir = dirname(lockPath)\n\n // Ensure lock directory exists\n await mkdir(lockDir, { recursive: true })\n\n const startTime = Date.now()\n\n while (true) {\n try {\n // Try to read existing lock\n if (existsSync(lockPath)) {\n // eslint-disable-next-line no-await-in-loop\n const lockContent = await readFile(lockPath, 'utf8')\n const lockInfo: DownloadLockInfo = JSON.parse(lockContent)\n\n // Check if lock is stale\n if (isLockStale(lockInfo, staleTimeout)) {\n // Remove stale lock\n // eslint-disable-next-line no-await-in-loop\n await rm(lockPath, { force: true })\n } else {\n // Lock is valid, check timeout\n if (Date.now() - startTime > lockTimeout) {\n throw new Error(\n `Lock acquisition timed out after ${lockTimeout}ms (held by PID ${lockInfo.pid})`,\n )\n }\n\n // Wait and retry\n // eslint-disable-next-line no-await-in-loop\n await new Promise(resolve => setTimeout(resolve, pollInterval))\n continue\n }\n }\n\n // Try to create lock file\n const lockInfo: DownloadLockInfo = {\n pid: process.pid,\n startTime: Date.now(),\n url,\n }\n\n // eslint-disable-next-line no-await-in-loop\n await writeFile(lockPath, JSON.stringify(lockInfo, null, 2), {\n // Use 'wx' flag to fail if file exists (atomic operation)\n flag: 'wx',\n })\n\n // Successfully acquired lock\n return lockPath\n } catch (e) {\n // If file already exists, another process created it first\n if ((e as NodeJS.ErrnoException).code === 'EEXIST') {\n if (Date.now() - startTime > lockTimeout) {\n throw new Error(`Lock acquisition timed out after ${lockTimeout}ms`)\n }\n // eslint-disable-next-line no-await-in-loop\n await new Promise(resolve => setTimeout(resolve, pollInterval))\n continue\n }\n\n // Other error\n throw e\n }\n }\n}\n\n/**\n * Release a lock by removing the lock file.\n */\nasync function releaseLock(lockPath: string): Promise<void> {\n try {\n await rm(lockPath, { force: true })\n } catch {\n // Ignore errors when releasing lock\n }\n}\n\n/**\n * Download a file with locking to prevent concurrent downloads of the same resource.\n * If another process is already downloading to the same destination, this will wait\n * for the download to complete (up to lockTimeout) before proceeding.\n *\n * @throws {Error} When download fails or lock cannot be acquired.\n *\n * @example\n * ```typescript\n * const result = await downloadWithLock(\n * 'https://example.com/file.tar.gz',\n * '/tmp/downloads/file.tar.gz',\n * {\n * retries: 3,\n * lockTimeout: 60000, // Wait up to 1 minute for other downloads\n * }\n * )\n * ```\n */\nexport async function downloadWithLock(\n url: string,\n destPath: string,\n options?: DownloadWithLockOptions | undefined,\n): Promise<HttpDownloadResult> {\n const {\n lockTimeout = 60_000,\n locksDir,\n pollInterval = 1000,\n staleTimeout = 300_000,\n ...downloadOptions\n } = { __proto__: null, ...options } as DownloadWithLockOptions\n\n // If file already exists and has content, return immediately\n if (existsSync(destPath)) {\n const statResult = await stat(destPath).catch(() => null)\n if (statResult && statResult.size > 0) {\n return {\n path: destPath,\n size: statResult.size,\n }\n }\n }\n\n // Acquire lock\n const lockPath = await acquireLock(destPath, url, {\n lockTimeout,\n locksDir,\n pollInterval,\n staleTimeout,\n })\n\n try {\n // Check again if file was created while we were waiting for lock\n if (existsSync(destPath)) {\n const statResult = await stat(destPath).catch(() => null)\n if (statResult && statResult.size > 0) {\n return {\n path: destPath,\n size: statResult.size,\n }\n }\n }\n\n // Perform download\n const result = await httpDownload(url, destPath, downloadOptions)\n\n return result\n } finally {\n // Always release lock\n await releaseLock(lockPath)\n }\n}\n"],
|
|
5
|
-
"mappings": "
|
|
6
|
-
"names": ["lockInfo"]
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["download_lock_exports", "__export", "downloadWithLock", "__toCommonJS", "import_node_fs", "import_promises", "import_node_path", "import_http_request", "getLockFilePath", "destPath", "locksDir", "dir", "filename", "isLockStale", "lockInfo", "staleTimeout", "acquireLock", "url", "options", "lockTimeout", "pollInterval", "lockPath", "lockDir", "startTime", "lockContent", "resolve", "e", "releaseLock", "downloadOptions", "statResult"]
|
|
7
7
|
}
|
|
@@ -1,66 +1,3 @@
|
|
|
1
1
|
/* Socket Lib - Built with esbuild */
|
|
2
|
-
var
|
|
3
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
-
var __export = (target, all) => {
|
|
7
|
-
for (var name in all)
|
|
8
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
-
};
|
|
10
|
-
var __copyProps = (to, from, except, desc) => {
|
|
11
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
-
for (let key of __getOwnPropNames(from))
|
|
13
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
-
}
|
|
16
|
-
return to;
|
|
17
|
-
};
|
|
18
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
-
var pulse_frames_exports = {};
|
|
20
|
-
__export(pulse_frames_exports, {
|
|
21
|
-
generateSocketSpinnerFrames: () => generateSocketSpinnerFrames
|
|
22
|
-
});
|
|
23
|
-
module.exports = __toCommonJS(pulse_frames_exports);
|
|
24
|
-
function generateSocketSpinnerFrames(options) {
|
|
25
|
-
const opts = { __proto__: null, ...options };
|
|
26
|
-
const interval = opts.interval ?? 50;
|
|
27
|
-
const bold = "\x1B[1m";
|
|
28
|
-
const dim = "\x1B[2m";
|
|
29
|
-
const reset = "\x1B[0m";
|
|
30
|
-
const lightning = "\u26A1\uFE0E";
|
|
31
|
-
const starFilled = "\u2726\uFE0E";
|
|
32
|
-
const starOutline = "\u2727\uFE0E";
|
|
33
|
-
const starTiny = "\u22C6\uFE0E";
|
|
34
|
-
const frames = [
|
|
35
|
-
// Build up from dim to bright
|
|
36
|
-
`${dim}${starOutline}${reset}`,
|
|
37
|
-
`${dim}${starOutline}${reset}`,
|
|
38
|
-
`${dim}${starTiny}${reset}`,
|
|
39
|
-
`${starFilled}${reset}`,
|
|
40
|
-
`${starFilled}${reset}`,
|
|
41
|
-
`${bold}${starFilled}${reset}`,
|
|
42
|
-
`${bold}${starFilled}${reset}`,
|
|
43
|
-
`${bold}${lightning}${reset}`,
|
|
44
|
-
`${bold}${lightning}${reset}`,
|
|
45
|
-
`${bold}${lightning}${reset}`,
|
|
46
|
-
// Fade down
|
|
47
|
-
`${bold}${lightning}${reset}`,
|
|
48
|
-
`${bold}${lightning}${reset}`,
|
|
49
|
-
`${bold}${starFilled}${reset}`,
|
|
50
|
-
`${bold}${starFilled}${reset}`,
|
|
51
|
-
`${starFilled}${reset}`,
|
|
52
|
-
`${starFilled}${reset}`,
|
|
53
|
-
`${dim}${starTiny}${reset}`,
|
|
54
|
-
`${dim}${starOutline}${reset}`
|
|
55
|
-
];
|
|
56
|
-
return {
|
|
57
|
-
__proto__: null,
|
|
58
|
-
frames,
|
|
59
|
-
interval
|
|
60
|
-
};
|
|
61
|
-
}
|
|
62
|
-
// Annotate the CommonJS export names for ESM import in node:
|
|
63
|
-
0 && (module.exports = {
|
|
64
|
-
generateSocketSpinnerFrames
|
|
65
|
-
});
|
|
2
|
+
var l=Object.defineProperty;var u=Object.getOwnPropertyDescriptor;var c=Object.getOwnPropertyNames;var d=Object.prototype.hasOwnProperty;var b=(r,t)=>{for(var s in t)l(r,s,{get:t[s],enumerable:!0})},p=(r,t,s,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let e of c(t))!d.call(r,e)&&e!==s&&l(r,e,{get:()=>t[e],enumerable:!(n=u(t,e))||n.enumerable});return r};var F=r=>p(l({},"__esModule",{value:!0}),r);var E={};b(E,{generateSocketSpinnerFrames:()=>f});module.exports=F(E);function f(r){const s={__proto__:null,...r}.interval??50,n="\x1B[1m",e="\x1B[2m",$="\x1B[0m",a="\u26A1\uFE0E",o="\u2726\uFE0E",i="\u2727\uFE0E",m="\u22C6\uFE0E";return{__proto__:null,frames:[`${e}${i}${$}`,`${e}${i}${$}`,`${e}${m}${$}`,`${o}${$}`,`${o}${$}`,`${n}${o}${$}`,`${n}${o}${$}`,`${n}${a}${$}`,`${n}${a}${$}`,`${n}${a}${$}`,`${n}${a}${$}`,`${n}${a}${$}`,`${n}${o}${$}`,`${n}${o}${$}`,`${o}${$}`,`${o}${$}`,`${e}${m}${$}`,`${e}${i}${$}`],interval:s}}0&&(module.exports={generateSocketSpinnerFrames});
|
|
66
3
|
//# sourceMappingURL=pulse-frames.js.map
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/effects/pulse-frames.ts"],
|
|
4
4
|
"sourcesContent": ["/**\n * @fileoverview Socket pulse animation frames generator.\n * Generates themeable pulsing animation frames using sparkles (\u2727 \u2726) and lightning (\u26A1).\n * Follows the cli-spinners format: https://github.com/sindresorhus/cli-spinners\n */\n\nexport type SocketFramesOptions = {\n readonly baseColor?: readonly [number, number, number] | undefined\n readonly interval?: number | undefined\n}\n\n/**\n * Generate Socket pulse animation frames.\n * Creates a pulsing throbber using Unicode sparkles and lightning symbols.\n * Frames use brightness modifiers (bold/dim) but no embedded colors.\n * Yocto-spinner applies the current spinner color to each frame.\n *\n * Returns a spinner definition compatible with cli-spinners format.\n *\n * @see https://github.com/sindresorhus/cli-spinners/blob/main/spinners.json\n */\nexport function generateSocketSpinnerFrames(\n options?: SocketFramesOptions | undefined,\n): {\n frames: string[]\n interval: number\n} {\n const opts = { __proto__: null, ...options } as SocketFramesOptions\n const interval = opts.interval ?? 50\n\n // ANSI codes for brightness modifiers only (no colors).\n // Yocto-spinner will apply the spinner's current color to each frame.\n const bold = '\\x1b[1m'\n const dim = '\\x1b[2m'\n const reset = '\\x1b[0m'\n\n // Using VS15 (\\uFE0E) to force text-style rendering.\n // Lightning bolt (\u26A1) is wider than stars. To keep consistent spacing:\n // - All frames have NO internal padding\n // - Yocto-spinner adds 1 space after each frame\n // - Success/fail symbols also get 1 space (consistent)\n const lightning = '\u26A1\\uFE0E'\n const starFilled = '\u2726\\uFE0E'\n const starOutline = '\u2727\\uFE0E'\n const starTiny = '\u22C6\\uFE0E'\n\n // Pulse frames with brightness modifiers only.\n // Each frame gets colored by yocto-spinner based on current spinner.color.\n // Yocto-spinner adds 1 space after the frame automatically.\n const frames = [\n // Build up from dim to bright\n `${dim}${starOutline}${reset}`,\n `${dim}${starOutline}${reset}`,\n `${dim}${starTiny}${reset}`,\n `${starFilled}${reset}`,\n `${starFilled}${reset}`,\n `${bold}${starFilled}${reset}`,\n `${bold}${starFilled}${reset}`,\n `${bold}${lightning}${reset}`,\n `${bold}${lightning}${reset}`,\n `${bold}${lightning}${reset}`,\n // Fade down\n `${bold}${lightning}${reset}`,\n `${bold}${lightning}${reset}`,\n `${bold}${starFilled}${reset}`,\n `${bold}${starFilled}${reset}`,\n `${starFilled}${reset}`,\n `${starFilled}${reset}`,\n `${dim}${starTiny}${reset}`,\n `${dim}${starOutline}${reset}`,\n ]\n\n return {\n __proto__: null,\n frames,\n interval,\n } as { frames: string[]; interval: number }\n}\n"],
|
|
5
|
-
"mappings": "
|
|
6
|
-
"names": []
|
|
5
|
+
"mappings": ";4ZAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,iCAAAE,IAAA,eAAAC,EAAAH,GAqBO,SAASE,EACdE,EAIA,CAEA,MAAMC,EADO,CAAE,UAAW,KAAM,GAAGD,CAAQ,EACrB,UAAY,GAI5BE,EAAO,UACPC,EAAM,UACNC,EAAQ,UAORC,EAAY,eACZC,EAAa,eACbC,EAAc,eACdC,EAAW,eA4BjB,MAAO,CACL,UAAW,KACX,OAzBa,CAEb,GAAGL,CAAG,GAAGI,CAAW,GAAGH,CAAK,GAC5B,GAAGD,CAAG,GAAGI,CAAW,GAAGH,CAAK,GAC5B,GAAGD,CAAG,GAAGK,CAAQ,GAAGJ,CAAK,GACzB,GAAGE,CAAU,GAAGF,CAAK,GACrB,GAAGE,CAAU,GAAGF,CAAK,GACrB,GAAGF,CAAI,GAAGI,CAAU,GAAGF,CAAK,GAC5B,GAAGF,CAAI,GAAGI,CAAU,GAAGF,CAAK,GAC5B,GAAGF,CAAI,GAAGG,CAAS,GAAGD,CAAK,GAC3B,GAAGF,CAAI,GAAGG,CAAS,GAAGD,CAAK,GAC3B,GAAGF,CAAI,GAAGG,CAAS,GAAGD,CAAK,GAE3B,GAAGF,CAAI,GAAGG,CAAS,GAAGD,CAAK,GAC3B,GAAGF,CAAI,GAAGG,CAAS,GAAGD,CAAK,GAC3B,GAAGF,CAAI,GAAGI,CAAU,GAAGF,CAAK,GAC5B,GAAGF,CAAI,GAAGI,CAAU,GAAGF,CAAK,GAC5B,GAAGE,CAAU,GAAGF,CAAK,GACrB,GAAGE,CAAU,GAAGF,CAAK,GACrB,GAAGD,CAAG,GAAGK,CAAQ,GAAGJ,CAAK,GACzB,GAAGD,CAAG,GAAGI,CAAW,GAAGH,CAAK,EAC9B,EAKE,SAAAH,CACF,CACF",
|
|
6
|
+
"names": ["pulse_frames_exports", "__export", "generateSocketSpinnerFrames", "__toCommonJS", "options", "interval", "bold", "dim", "reset", "lightning", "starFilled", "starOutline", "starTiny"]
|
|
7
7
|
}
|