socket 1.1.102 → 1.1.104
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 +14 -0
- package/dist/cli.js +1311 -174
- package/dist/cli.js.map +1 -1
- package/dist/constants.js +4 -4
- package/dist/constants.js.map +1 -1
- package/dist/tsconfig.dts.tsbuildinfo +1 -1
- package/dist/types/commands/manifest/bazel/bazel-pypi-discovery.d.mts +31 -0
- package/dist/types/commands/manifest/bazel/bazel-pypi-discovery.d.mts.map +1 -0
- package/dist/types/commands/manifest/bazel/bazel-pypi-parser.d.mts +46 -0
- package/dist/types/commands/manifest/bazel/bazel-pypi-parser.d.mts.map +1 -0
- package/dist/types/commands/manifest/bazel/bazel-query-runner.d.mts +16 -2
- package/dist/types/commands/manifest/bazel/bazel-query-runner.d.mts.map +1 -1
- package/dist/types/commands/manifest/bazel/bazel-repo-discovery.d.mts +3 -3
- package/dist/types/commands/manifest/bazel/bazel-repo-discovery.d.mts.map +1 -1
- package/dist/types/commands/manifest/bazel/cmd-manifest-bazel.d.mts +19 -0
- package/dist/types/commands/manifest/bazel/cmd-manifest-bazel.d.mts.map +1 -1
- package/dist/types/commands/manifest/bazel/extract_bazel_to_maven.d.mts +1 -0
- package/dist/types/commands/manifest/bazel/extract_bazel_to_maven.d.mts.map +1 -1
- package/dist/types/commands/manifest/bazel/extract_bazel_to_pypi.d.mts +20 -0
- package/dist/types/commands/manifest/bazel/extract_bazel_to_pypi.d.mts.map +1 -0
- package/dist/types/commands/manifest/generate_auto_manifest.d.mts.map +1 -1
- package/dist/types/utils/dlx.d.mts.map +1 -1
- package/dist/utils.js +27 -3
- package/dist/utils.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { RepoProbe, ValidationResult } from './bazel-repo-discovery.mts';
|
|
2
|
+
export type PypiHubInfo = {
|
|
3
|
+
hubName: string;
|
|
4
|
+
source: 'MODULE.bazel' | 'WORKSPACE' | 'WORKSPACE.bazel' | '.bzl' | 'visible-repos' | 'default-seed' | 'bazel-mod-show-extension';
|
|
5
|
+
workspaceMode: 'bzlmod' | 'legacy' | 'unknown';
|
|
6
|
+
pythonVersion?: string | undefined;
|
|
7
|
+
requirementsLockLabel?: string | undefined;
|
|
8
|
+
requirementsLockPath?: string | undefined;
|
|
9
|
+
probeStdout: string;
|
|
10
|
+
visibleRepoNames?: string[] | undefined;
|
|
11
|
+
};
|
|
12
|
+
export type PypiHubCandidate = Omit<PypiHubInfo, 'probeStdout' | 'visibleRepoNames'>;
|
|
13
|
+
export declare function parseBazelModPipExtensionCandidates(stdout: string, verbose?: boolean): PypiHubCandidate[];
|
|
14
|
+
// Step 1: parse candidate pip hub names from Bzlmod MODULE.bazel and legacy
|
|
15
|
+
// WORKSPACE / .bzl entry points.
|
|
16
|
+
//
|
|
17
|
+
// Precedence: Bzlmod (MODULE.bazel pip.parse) hits are pushed first, then
|
|
18
|
+
// legacy (pip_parse / pip_install / pip_repository) hits. dedupCapped keeps
|
|
19
|
+
// the first occurrence, so during migration scenarios where both
|
|
20
|
+
// MODULE.bazel and WORKSPACE define a hub with the same name, the Bzlmod
|
|
21
|
+
// entry wins implicitly. Pass verbose=true to surface dropped duplicates.
|
|
22
|
+
export declare function parsePypiHubCandidates(cwd: string, verbose?: boolean): PypiHubCandidate[];
|
|
23
|
+
// Step 2: validate a candidate by running the probe and confirming
|
|
24
|
+
// `:pkg` labels or alias rules appear in stdout. Does NOT require
|
|
25
|
+
// `pypi_name=` (that marker lives on spoke repos).
|
|
26
|
+
export declare function validatePypiHub(hubName: string, probe: RepoProbe, verbose?: boolean): Promise<ValidationResult>;
|
|
27
|
+
// Composition: parse, then validate each candidate; return validated subset
|
|
28
|
+
// as a Map keyed by hub name with the validated PypiHubInfo.
|
|
29
|
+
// Always seeds with the default 'pypi' hub name first.
|
|
30
|
+
export declare function discoverPypiHubs(cwd: string, probe: RepoProbe, nativeCandidates?: string[], verbose?: boolean, bazelCommandCandidates?: PypiHubCandidate[]): Promise<Map<string, PypiHubInfo>>;
|
|
31
|
+
//# sourceMappingURL=bazel-pypi-discovery.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bazel-pypi-discovery.d.mts","sourceRoot":"","sources":["../../../../../src/commands/manifest/bazel/bazel-pypi-discovery.mts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAA;AAwC7E,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EACF,cAAc,GACd,WAAW,GACX,iBAAiB,GACjB,MAAM,GACN,eAAe,GACf,cAAc,GACd,0BAA0B,CAAA;IAC9B,aAAa,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAA;IAC9C,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAClC,qBAAqB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC1C,oBAAoB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACzC,WAAW,EAAE,MAAM,CAAA;IACnB,gBAAgB,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAA;CACxC,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG,IAAI,CACjC,WAAW,EACX,aAAa,GAAG,kBAAkB,CACnC,CAAA;AAED,wBAAgB,mCAAmC,CACjD,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,OAAO,GAChB,gBAAgB,EAAE,CAoCpB;AA8GD,4EAA4E;AAC5E,iCAAiC;AACjC,EAAE;AACF,0EAA0E;AAC1E,4EAA4E;AAC5E,iEAAiE;AACjE,yEAAyE;AACzE,0EAA0E;AAC1E,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,OAAO,GAChB,gBAAgB,EAAE,CAoGpB;AAED,mEAAmE;AACnE,kEAAkE;AAClE,mDAAmD;AACnD,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,SAAS,EAChB,OAAO,CAAC,EAAE,OAAO,GAChB,OAAO,CAAC,gBAAgB,CAAC,CA8B3B;AAOD,4EAA4E;AAC5E,6DAA6D;AAC7D,uDAAuD;AACvD,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,SAAS,EAChB,gBAAgB,CAAC,EAAE,MAAM,EAAE,EAC3B,OAAO,CAAC,EAAE,OAAO,EACjB,sBAAsB,CAAC,EAAE,gBAAgB,EAAE,GAC1C,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAyDnC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
export type ExtractedPypiPackage = {
|
|
2
|
+
name: string;
|
|
3
|
+
version: string;
|
|
4
|
+
bazelName: string;
|
|
5
|
+
source?: 'lockfile' | 'spoke-tag' | undefined;
|
|
6
|
+
originalLine?: string | undefined;
|
|
7
|
+
};
|
|
8
|
+
export type ReachedPypiLabel = {
|
|
9
|
+
hubName: string;
|
|
10
|
+
originalLabel: string;
|
|
11
|
+
bazelName: string;
|
|
12
|
+
normalizedName: string;
|
|
13
|
+
apparentLabel: string;
|
|
14
|
+
spokeLabel?: string | undefined;
|
|
15
|
+
};
|
|
16
|
+
// Normalize a PyPI package name per PEP 503:
|
|
17
|
+
// lowercase, then collapse `.`, `_`, and `-` runs to a single `-`.
|
|
18
|
+
export declare function normalizePypiName(name: string): string;
|
|
19
|
+
// Convert a Bazel underscore_name to a PyPI hyphenated-name.
|
|
20
|
+
export declare function bazelNameToPypiName(bazelName: string): string;
|
|
21
|
+
// Resolves a Bazel label or workspace-relative path to a filesystem path.
|
|
22
|
+
// Returns undefined for labels that cannot be resolved locally.
|
|
23
|
+
export declare function resolveRequirementsLockPath(label: string | undefined, cwd: string): string | undefined;
|
|
24
|
+
// Parse a `requirements_lock.txt`-style file into a map keyed by normalized
|
|
25
|
+
// PyPI name. This intentionally ignores unpinned PEP 508 requirement forms
|
|
26
|
+
// because the Bazel extractor must emit exact package versions.
|
|
27
|
+
export declare function parseRequirementsLock(text: string): Map<string, ExtractedPypiPackage>;
|
|
28
|
+
// Read and parse a requirements lockfile from a resolved path, capping file
|
|
29
|
+
// size. Returns undefined when the file is missing, oversized, or unreadable.
|
|
30
|
+
export declare function readRequirementsLockFile(resolvedPath: string | undefined): Map<string, ExtractedPypiPackage> | undefined;
|
|
31
|
+
export declare function parsePypiTagsFromBuildOutput(text: string): ExtractedPypiPackage | null;
|
|
32
|
+
export declare function parseAliasActualFromBuildOutput(text: string): string | undefined;
|
|
33
|
+
// Extract hub package labels from `bazel query` output that match
|
|
34
|
+
// `@<hub>//<name>:pkg` patterns (both line-start and embedded in
|
|
35
|
+
// `--output=build` deps arrays).
|
|
36
|
+
export declare function filterReachedPypiPackages(queryOutput: string, hubName: string): ReachedPypiLabel[];
|
|
37
|
+
// Collect name==version pairs for the reached closure, resolving versions
|
|
38
|
+
// from the lockfile fast path or spoke-tag fallback. Enforces version
|
|
39
|
+
// conflict detection and deterministic output.
|
|
40
|
+
export declare function collectPypiPackages(reached: ReachedPypiLabel[], lockfile: Map<string, ExtractedPypiPackage> | undefined, spokeTagLookup: Map<string, ExtractedPypiPackage> | undefined): Array<{
|
|
41
|
+
name: string;
|
|
42
|
+
version: string;
|
|
43
|
+
source: string;
|
|
44
|
+
label: string;
|
|
45
|
+
}>;
|
|
46
|
+
//# sourceMappingURL=bazel-pypi-parser.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bazel-pypi-parser.d.mts","sourceRoot":"","sources":["../../../../../src/commands/manifest/bazel/bazel-pypi-parser.mts"],"names":[],"mappings":"AAoBA,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,UAAU,GAAG,WAAW,GAAG,SAAS,CAAA;IAC7C,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAClC,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,EAAE,MAAM,CAAA;IACf,aAAa,EAAE,MAAM,CAAA;IACrB,SAAS,EAAE,MAAM,CAAA;IACjB,cAAc,EAAE,MAAM,CAAA;IACtB,aAAa,EAAE,MAAM,CAAA;IACrB,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAChC,CAAA;AAED,6CAA6C;AAC7C,mEAAmE;AACnE,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAMtD;AAED,6DAA6D;AAC7D,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE7D;AAQD,0EAA0E;AAC1E,gEAAgE;AAChE,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,GAAG,EAAE,MAAM,GACV,MAAM,GAAG,SAAS,CAsDpB;AAsCD,4EAA4E;AAC5E,2EAA2E;AAC3E,gEAAgE;AAChE,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,GACX,GAAG,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAkDnC;AAED,4EAA4E;AAC5E,8EAA8E;AAC9E,wBAAgB,wBAAwB,CACtC,YAAY,EAAE,MAAM,GAAG,SAAS,GAC/B,GAAG,CAAC,MAAM,EAAE,oBAAoB,CAAC,GAAG,SAAS,CAkB/C;AAOD,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,MAAM,GACX,oBAAoB,GAAG,IAAI,CAiB7B;AAED,wBAAgB,+BAA+B,CAC7C,IAAI,EAAE,MAAM,GACX,MAAM,GAAG,SAAS,CAGpB;AAED,kEAAkE;AAClE,iEAAiE;AACjE,iCAAiC;AACjC,wBAAgB,yBAAyB,CACvC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,GACd,gBAAgB,EAAE,CA2BpB;AAED,0EAA0E;AAC1E,sEAAsE;AACtE,+CAA+C;AAC/C,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,gBAAgB,EAAE,EAC3B,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,oBAAoB,CAAC,GAAG,SAAS,EACvD,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,oBAAoB,CAAC,GAAG,SAAS,GAC5D,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAqDzE"}
|
|
@@ -25,17 +25,31 @@ export declare function splitBazelFlags(flags: string | undefined): string[];
|
|
|
25
25
|
* and fails on non-zero exit. Rejected spawn calls are normalized into a
|
|
26
26
|
* BazelQueryResult so retry/skip handling can inspect stderr.
|
|
27
27
|
*/
|
|
28
|
-
export declare function runBazelQuery(queryStr: string, opts: BazelQueryOptions): Promise<BazelQueryResult>;
|
|
28
|
+
export declare function runBazelQuery(queryStr: string, opts: BazelQueryOptions, output?: string): Promise<BazelQueryResult>;
|
|
29
29
|
/**
|
|
30
30
|
* Bzlmod-native visible repository enumeration. This is only a candidate
|
|
31
31
|
* source; callers must still validate each returned apparent repo name with a
|
|
32
|
-
* semantic query for generated
|
|
32
|
+
* semantic query for generated ecosystem rules.
|
|
33
33
|
*/
|
|
34
34
|
export declare function runBazelModShowVisibleRepos(opts: BazelQueryOptions): Promise<BazelQueryResult>;
|
|
35
|
+
/**
|
|
36
|
+
* Bzlmod-native rules_python pip extension usage inspection. This is the
|
|
37
|
+
* authoritative source for root-module pip.parse metadata when Bazel supports
|
|
38
|
+
* the command; callers keep bounded static parsing as fallback.
|
|
39
|
+
*/
|
|
40
|
+
export declare function runBazelModShowPipExtension(opts: BazelQueryOptions): Promise<BazelQueryResult>;
|
|
35
41
|
/**
|
|
36
42
|
* Build a `RepoProbe` (compatible with bazel-repo-discovery) bound to opts.
|
|
37
43
|
* Used by `discoverMavenRepos` to validate candidate Maven repo
|
|
38
44
|
* names against the running workspace.
|
|
39
45
|
*/
|
|
40
46
|
export declare function buildProbeFor(opts: BazelQueryOptions): RepoProbe;
|
|
47
|
+
/**
|
|
48
|
+
* Build a `RepoProbe` for validating pip hub candidates.
|
|
49
|
+
* Queries the hub for package targets (e.g. `@<hub>//...`) and returns
|
|
50
|
+
* stdout so the caller can check for `:pkg` labels or alias rules.
|
|
51
|
+
* Does NOT require `pypi_name=` tags in the hub output, because those
|
|
52
|
+
* tags live on spoke repos, not the hub alias layer.
|
|
53
|
+
*/
|
|
54
|
+
export declare function buildPypiProbeFor(opts: BazelQueryOptions): RepoProbe;
|
|
41
55
|
//# sourceMappingURL=bazel-query-runner.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bazel-query-runner.d.mts","sourceRoot":"","sources":["../../../../../src/commands/manifest/bazel/bazel-query-runner.mts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAA;AAE3D,MAAM,MAAM,iBAAiB,GAAG;IAC9B,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;IACX,eAAe,EAAE,MAAM,EAAE,CAAA;IACzB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;IACvB,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;
|
|
1
|
+
{"version":3,"file":"bazel-query-runner.d.mts","sourceRoot":"","sources":["../../../../../src/commands/manifest/bazel/bazel-query-runner.mts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAA;AAE3D,MAAM,MAAM,iBAAiB,GAAG;IAC9B,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;IACX,eAAe,EAAE,MAAM,EAAE,CAAA;IACzB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;IACvB,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAQD,+DAA+D;AAC/D,+EAA6E;AAC7E,2EAA2E;AAC3E,eAAe;AACf,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,EAAE,CAKnE;AA8ID;;;;;GAKG;AACH,wBAAsB,aAAa,CACjC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,iBAAiB,EACvB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,gBAAgB,CAAC,CAsC3B;AAED;;;;GAIG;AACH,wBAAsB,2BAA2B,CAC/C,IAAI,EAAE,iBAAiB,GACtB,OAAO,CAAC,gBAAgB,CAAC,CA0B3B;AAED;;;;GAIG;AACH,wBAAsB,2BAA2B,CAC/C,IAAI,EAAE,iBAAiB,GACtB,OAAO,CAAC,gBAAgB,CAAC,CA0B3B;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,iBAAiB,GAAG,SAAS,CAMhE;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,iBAAiB,GAAG,SAAS,CAMpE"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
// Parse `bazel mod
|
|
2
|
-
//
|
|
3
|
-
//
|
|
1
|
+
// Parse `bazel mod dump_repo_mapping "" --output=json` output. Also accept the
|
|
2
|
+
// older streamed jsonproto shape in case older Bazel versions or fixtures still
|
|
3
|
+
// return repository records with apparentName fields.
|
|
4
4
|
export declare function parseVisibleRepoCandidates(output: string): string[];
|
|
5
5
|
// Step 1: parse candidate Maven repo names from Bzlmod and legacy entry points.
|
|
6
6
|
export declare function parseMavenRepoCandidates(cwd: string, verbose?: boolean): string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bazel-repo-discovery.d.mts","sourceRoot":"","sources":["../../../../../src/commands/manifest/bazel/bazel-repo-discovery.mts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"bazel-repo-discovery.d.mts","sourceRoot":"","sources":["../../../../../src/commands/manifest/bazel/bazel-repo-discovery.mts"],"names":[],"mappings":"AAoIA,+EAA+E;AAC/E,gFAAgF;AAChF,sDAAsD;AACtD,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAuBnE;AAED,gFAAgF;AAChF,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,OAAO,GAChB,MAAM,EAAE,CA8DV;AAED,MAAM,MAAM,SAAS,GAAG,CACtB,QAAQ,EAAE,MAAM,KACb,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAAA;AAE9C,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE,OAAO,CAAA;IACd,yEAAuE;IACvE,yEAAyE;IACzE,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAED,mEAAmE;AACnE,6EAA6E;AAC7E,uEAAuE;AACvE,uEAAuE;AACvE,oDAAoD;AACpD,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,SAAS,EAChB,OAAO,CAAC,EAAE,OAAO,GAChB,OAAO,CAAC,gBAAgB,CAAC,CA8B3B;AAOD,4EAA4E;AAC5E,wEAAwE;AACxE,yEAAyE;AACzE,2EAA2E;AAC3E,4EAA4E;AAC5E,uDAAuD;AACvD,EAAE;AACF,kEAAkE;AAClE,0EAA0E;AAC1E,2EAA2E;AAC3E,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,SAAS,EAChB,gBAAgB,CAAC,EAAE,MAAM,EAAE,EAC3B,OAAO,CAAC,EAAE,OAAO,GAChB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CA4C9B"}
|
|
@@ -4,6 +4,25 @@ export declare const cmdManifestBazel: {
|
|
|
4
4
|
hidden: boolean;
|
|
5
5
|
run: typeof run;
|
|
6
6
|
};
|
|
7
|
+
export type EcosystemOutcome = {
|
|
8
|
+
ecosystem: 'maven' | 'pypi';
|
|
9
|
+
ok: boolean;
|
|
10
|
+
noEcosystemFound?: boolean | undefined;
|
|
11
|
+
hardFailure?: boolean;
|
|
12
|
+
manifestPath?: string | undefined;
|
|
13
|
+
};
|
|
14
|
+
// Pure outcome-matrix evaluator. Exported so dispatcher behavior can be
|
|
15
|
+
// unit-tested without spawning the CLI binary. Throws InputError on
|
|
16
|
+
// failures that must propagate to a non-zero CLI exit; returns void on
|
|
17
|
+
// success.
|
|
18
|
+
//
|
|
19
|
+
// - Hard failure: ok === false && !noEcosystemFound. The ecosystem was
|
|
20
|
+
// detected (or the runner crashed), but extraction failed. Always a
|
|
21
|
+
// non-zero exit, even when another ecosystem succeeded.
|
|
22
|
+
// - No-discovery: noEcosystemFound === true. Genuinely absent ecosystem.
|
|
23
|
+
// Auto-detect mode tolerates this when at least one other ecosystem
|
|
24
|
+
// succeeded; explicit mode treats it as an error.
|
|
25
|
+
export declare function evaluateEcosystemOutcomes(outcomes: readonly EcosystemOutcome[], isExplicit: boolean): void;
|
|
7
26
|
declare function run(argv: string[] | readonly string[], importMeta: ImportMeta, { parentName }: CliCommandContext): Promise<void>;
|
|
8
27
|
export {};
|
|
9
28
|
//# sourceMappingURL=cmd-manifest-bazel.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cmd-manifest-bazel.d.mts","sourceRoot":"","sources":["../../../../../src/commands/manifest/bazel/cmd-manifest-bazel.mts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cmd-manifest-bazel.d.mts","sourceRoot":"","sources":["../../../../../src/commands/manifest/bazel/cmd-manifest-bazel.mts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAEV,iBAAiB,EAClB,MAAM,0CAA0C,CAAA;AA2EjD,eAAO,MAAM,gBAAgB;;;;CAI5B,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,SAAS,EAAE,OAAO,GAAG,MAAM,CAAA;IAC3B,EAAE,EAAE,OAAO,CAAA;IACX,gBAAgB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IACtC,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAClC,CAAA;AAED,wEAAwE;AACxE,oEAAoE;AACpE,uEAAuE;AACvE,WAAW;AACX,EAAE;AACF,uEAAuE;AACvE,sEAAsE;AACtE,0DAA0D;AAC1D,yEAAyE;AACzE,sEAAsE;AACtE,oDAAoD;AACpD,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,SAAS,gBAAgB,EAAE,EACrC,UAAU,EAAE,OAAO,GAClB,IAAI,CAiCN;AAED,iBAAe,GAAG,CAChB,IAAI,EAAE,MAAM,EAAE,GAAG,SAAS,MAAM,EAAE,EAClC,UAAU,EAAE,UAAU,EACtB,EAAE,UAAU,EAAE,EAAE,iBAAiB,GAChC,OAAO,CAAC,IAAI,CAAC,CA+Kf"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extract_bazel_to_maven.d.mts","sourceRoot":"","sources":["../../../../../src/commands/manifest/bazel/extract_bazel_to_maven.mts"],"names":[],"mappings":"AAiCA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAGjE,MAAM,MAAM,mBAAmB,GAAG;IAChC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAA;IAC9B,eAAe,EAAE,MAAM,GAAG,SAAS,CAAA;IACnC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAA;IAC3B,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;IACvB,GAAG,EAAE,MAAM,CAAA;IACX,gEAAgE;IAChE,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;IACvB,GAAG,EAAE,MAAM,CAAA;IACX,gFAAgF;IAChF,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,OAAO,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,aAAa,EAAE,MAAM,CAAA;IACrB,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACjC,EAAE,EAAE,OAAO,CAAA;CACZ,CAAA;AAiBD,KAAK,uBAAuB,GAAG;IAC7B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE;YAAE,GAAG,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACzE,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;IACtC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;CACxC,CAAA;AA2DD,wBAAgB,2BAA2B,CACzC,SAAS,EAAE,iBAAiB,EAAE,GAC7B,uBAAuB,CAqEzB;AA6HD,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,mBAAmB,GACxB,OAAO,CAAC,kBAAkB,CAAC,
|
|
1
|
+
{"version":3,"file":"extract_bazel_to_maven.d.mts","sourceRoot":"","sources":["../../../../../src/commands/manifest/bazel/extract_bazel_to_maven.mts"],"names":[],"mappings":"AAiCA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAGjE,MAAM,MAAM,mBAAmB,GAAG;IAChC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAA;IAC9B,eAAe,EAAE,MAAM,GAAG,SAAS,CAAA;IACnC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAA;IAC3B,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;IACvB,GAAG,EAAE,MAAM,CAAA;IACX,gEAAgE;IAChE,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;IACvB,GAAG,EAAE,MAAM,CAAA;IACX,gFAAgF;IAChF,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,OAAO,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,aAAa,EAAE,MAAM,CAAA;IACrB,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACjC,gBAAgB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IACtC,EAAE,EAAE,OAAO,CAAA;CACZ,CAAA;AAiBD,KAAK,uBAAuB,GAAG;IAC7B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE;YAAE,GAAG,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACzE,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;IACtC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;CACxC,CAAA;AA2DD,wBAAgB,2BAA2B,CACzC,SAAS,EAAE,iBAAiB,EAAE,GAC7B,uBAAuB,CAqEzB;AA6HD,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,mBAAmB,GACxB,OAAO,CAAC,kBAAkB,CAAC,CA8K7B"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export type ExtractBazelToPypiOptions = {
|
|
2
|
+
bazelFlags: string | undefined;
|
|
3
|
+
bazelOutputBase: string | undefined;
|
|
4
|
+
bazelRc: string | undefined;
|
|
5
|
+
bin: string | undefined;
|
|
6
|
+
cwd: string;
|
|
7
|
+
env?: NodeJS.ProcessEnv;
|
|
8
|
+
out: string;
|
|
9
|
+
outLayout?: 'flat' | 'standalone';
|
|
10
|
+
verbose: boolean;
|
|
11
|
+
explicitEcosystem?: boolean;
|
|
12
|
+
};
|
|
13
|
+
export type ExtractBazelToPypiResult = {
|
|
14
|
+
artifactCount: number;
|
|
15
|
+
manifestPath?: string | undefined;
|
|
16
|
+
ok: boolean;
|
|
17
|
+
noEcosystemFound?: boolean;
|
|
18
|
+
};
|
|
19
|
+
export declare function extractBazelToPypi(opts: ExtractBazelToPypiOptions): Promise<ExtractBazelToPypiResult>;
|
|
20
|
+
//# sourceMappingURL=extract_bazel_to_pypi.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extract_bazel_to_pypi.d.mts","sourceRoot":"","sources":["../../../../../src/commands/manifest/bazel/extract_bazel_to_pypi.mts"],"names":[],"mappings":"AAyCA,MAAM,MAAM,yBAAyB,GAAG;IACtC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAA;IAC9B,eAAe,EAAE,MAAM,GAAG,SAAS,CAAA;IACnC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAA;IAC3B,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;IACvB,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;IACvB,GAAG,EAAE,MAAM,CAAA;IACX,SAAS,CAAC,EAAE,MAAM,GAAG,YAAY,CAAA;IACjC,OAAO,EAAE,OAAO,CAAA;IAChB,iBAAiB,CAAC,EAAE,OAAO,CAAA;CAC5B,CAAA;AAED,MAAM,MAAM,wBAAwB,GAAG;IACrC,aAAa,EAAE,MAAM,CAAA;IACrB,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACjC,EAAE,EAAE,OAAO,CAAA;IACX,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B,CAAA;AAmBD,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,yBAAyB,GAC9B,OAAO,CAAC,wBAAwB,CAAC,CA8NnC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate_auto_manifest.d.mts","sourceRoot":"","sources":["../../../../src/commands/manifest/generate_auto_manifest.mts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAA;AACzE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAEjD,MAAM,MAAM,0BAA0B,GAAG;IACvC,cAAc,EAAE,MAAM,EAAE,CAAA;CACzB,CAAA;AAED,wBAAsB,oBAAoB,CAAC,EACzC,GAAG,EACH,QAAQ,EACR,UAAU,EACV,OAAO,EACR,EAAE;IACD,QAAQ,EAAE,oBAAoB,CAAA;IAC9B,GAAG,EAAE,MAAM,CAAA;IACX,UAAU,EAAE,UAAU,CAAA;IACtB,OAAO,EAAE,OAAO,CAAA;CACjB,GAAG,OAAO,CAAC,0BAA0B,CAAC,
|
|
1
|
+
{"version":3,"file":"generate_auto_manifest.d.mts","sourceRoot":"","sources":["../../../../src/commands/manifest/generate_auto_manifest.mts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAA;AACzE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAEjD,MAAM,MAAM,0BAA0B,GAAG;IACvC,cAAc,EAAE,MAAM,EAAE,CAAA;CACzB,CAAA;AAED,wBAAsB,oBAAoB,CAAC,EACzC,GAAG,EACH,QAAQ,EACR,UAAU,EACV,OAAO,EACR,EAAE;IACD,QAAQ,EAAE,oBAAoB,CAAA;IAC9B,GAAG,EAAE,MAAM,CAAA;IACX,UAAU,EAAE,UAAU,CAAA;IACtB,OAAO,EAAE,OAAO,CAAA;CACjB,GAAG,OAAO,CAAC,0BAA0B,CAAC,CAgGtC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dlx.d.mts","sourceRoot":"","sources":["../../../src/utils/dlx.mts"],"names":[],"mappings":"AA0CA,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAC/E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAA;AAMpE,MAAM,MAAM,UAAU,GAAG,gBAAgB,GAAG;IAC1C,KAAK,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IAC3B,KAAK,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;IAC3C,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CAC7B,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAQD;;;;GAIG;AACH,wBAAsB,QAAQ,CAC5B,WAAW,EAAE,cAAc,EAC3B,IAAI,EAAE,MAAM,EAAE,GAAG,SAAS,MAAM,EAAE,EAClC,OAAO,CAAC,EAAE,UAAU,GAAG,SAAS,EAChC,UAAU,CAAC,EAAE,UAAU,GAAG,SAAS,GAClC,OAAO,CAAC,eAAe,CAAC,CAwG1B;AAED,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG;IACzC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAClC,CAAA;
|
|
1
|
+
{"version":3,"file":"dlx.d.mts","sourceRoot":"","sources":["../../../src/utils/dlx.mts"],"names":[],"mappings":"AA0CA,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAC/E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAA;AAMpE,MAAM,MAAM,UAAU,GAAG,gBAAgB,GAAG;IAC1C,KAAK,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IAC3B,KAAK,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;IAC3C,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CAC7B,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAQD;;;;GAIG;AACH,wBAAsB,QAAQ,CAC5B,WAAW,EAAE,cAAc,EAC3B,IAAI,EAAE,MAAM,EAAE,GAAG,SAAS,MAAM,EAAE,EAClC,OAAO,CAAC,EAAE,UAAU,GAAG,SAAS,EAChC,UAAU,CAAC,EAAE,UAAU,GAAG,SAAS,GAClC,OAAO,CAAC,eAAe,CAAC,CAwG1B;AAED,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG;IACzC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAClC,CAAA;AAuKD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,EAAE,GAAG,SAAS,MAAM,EAAE,EAClC,OAAO,CAAC,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,eAAe,GAAG,SAAS,EACrC,UAAU,CAAC,EAAE,UAAU,GAAG,SAAS,GAClC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAuI1B;AAsED;;GAEG;AACH,wBAAsB,cAAc,CAClC,IAAI,EAAE,MAAM,EAAE,GAAG,SAAS,MAAM,EAAE,EAClC,OAAO,CAAC,EAAE,UAAU,GAAG,SAAS,EAChC,UAAU,CAAC,EAAE,UAAU,GAAG,SAAS,GAClC,OAAO,CAAC,eAAe,CAAC,CAU1B;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE,MAAM,EAAE,GAAG,SAAS,MAAM,EAAE,EAClC,OAAO,CAAC,EAAE,UAAU,GAAG,SAAS,EAChC,UAAU,CAAC,EAAE,UAAU,GAAG,SAAS,GAClC,OAAO,CAAC,eAAe,CAAC,CAU1B"}
|
package/dist/utils.js
CHANGED
|
@@ -5254,6 +5254,30 @@ async function spawnDlx(packageSpec, args, options, spawnExtra) {
|
|
|
5254
5254
|
*/
|
|
5255
5255
|
const installedCoanaScriptPathsByVersion = new Map();
|
|
5256
5256
|
|
|
5257
|
+
/**
|
|
5258
|
+
* Strip npm-injected `npm_package_*` env vars before spawning a Coana
|
|
5259
|
+
* subprocess. npm (and pnpm/yarn classic) populate one env var per leaf in
|
|
5260
|
+
* the cwd's package.json — `npm_package_dependencies_*`, `npm_package_scripts_*`,
|
|
5261
|
+
* etc. In big monorepos with hundreds of deps this can easily account for
|
|
5262
|
+
* 50KB+ of environment, pushing combined argv + env past Linux ARG_MAX
|
|
5263
|
+
* (~128KB) and causing `spawn` to fail with E2BIG before Coana even starts.
|
|
5264
|
+
*
|
|
5265
|
+
* Coana does not read `npm_package_*` itself, so dropping them is safe. We
|
|
5266
|
+
* intentionally keep `npm_config_*` (registry, cache, proxy settings sourced
|
|
5267
|
+
* from .npmrc), `npm_lifecycle_*`, and everything else untouched — those can
|
|
5268
|
+
* matter for outbound network behavior of nested `npm install` calls.
|
|
5269
|
+
*/
|
|
5270
|
+
function sanitizeEnvForCoanaSubprocess(env) {
|
|
5271
|
+
const out = {};
|
|
5272
|
+
for (const key of Object.keys(env)) {
|
|
5273
|
+
if (key.startsWith('npm_package_')) {
|
|
5274
|
+
continue;
|
|
5275
|
+
}
|
|
5276
|
+
out[key] = env[key];
|
|
5277
|
+
}
|
|
5278
|
+
return out;
|
|
5279
|
+
}
|
|
5280
|
+
|
|
5257
5281
|
/**
|
|
5258
5282
|
* Spawn an installed Coana entry point via `node` (or directly, if it's a
|
|
5259
5283
|
* native binary). Shared by the SOCKET_CLI_COANA_LOCAL_PATH branch and the
|
|
@@ -5264,7 +5288,7 @@ async function spawnCoanaScriptViaNode(scriptPath, args, finalEnv, options, spaw
|
|
|
5264
5288
|
const spawnArgs = isBinary ? args : [scriptPath, ...args];
|
|
5265
5289
|
const spawnResult = await spawn.spawn(isBinary ? scriptPath : 'node', spawnArgs, {
|
|
5266
5290
|
cwd: options.cwd,
|
|
5267
|
-
env: finalEnv,
|
|
5291
|
+
env: sanitizeEnvForCoanaSubprocess(finalEnv),
|
|
5268
5292
|
stdio: spawnExtra?.['stdio'] || 'inherit'
|
|
5269
5293
|
});
|
|
5270
5294
|
return {
|
|
@@ -5309,7 +5333,7 @@ async function installCoanaToTmpdir(version, finalEnv) {
|
|
|
5309
5333
|
}
|
|
5310
5334
|
const installDir = await fs.promises.mkdtemp(path.join(os.tmpdir(), 'socket-coana-'));
|
|
5311
5335
|
await spawn.spawn('npm', ['install', '--no-save', '--no-package-lock', '--no-audit', '--no-fund', '--prefix', installDir, `@coana-tech/cli@${version}`], {
|
|
5312
|
-
env: finalEnv,
|
|
5336
|
+
env: sanitizeEnvForCoanaSubprocess(finalEnv),
|
|
5313
5337
|
stdio: 'inherit'
|
|
5314
5338
|
});
|
|
5315
5339
|
const scriptPath = await resolveCoanaBinFromInstallDir(installDir);
|
|
@@ -8225,5 +8249,5 @@ exports.updateConfigValue = updateConfigValue;
|
|
|
8225
8249
|
exports.walkNestedMap = walkNestedMap;
|
|
8226
8250
|
exports.webLink = webLink;
|
|
8227
8251
|
exports.writeSocketJson = writeSocketJson;
|
|
8228
|
-
//# debugId=
|
|
8252
|
+
//# debugId=d6940980-1f8e-474c-9258-5fefddeaadb5
|
|
8229
8253
|
//# sourceMappingURL=utils.js.map
|