@aws-sdk/util-user-agent-node 3.973.5 → 3.973.7
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/dist-cjs/index.js +75 -19
- package/dist-es/getNodeModulesParentDirs.js +15 -0
- package/dist-es/getSanitizedDevTypeScriptVersion.js +14 -0
- package/dist-es/getTypeScriptUserAgentPair.js +53 -7
- package/dist-types/{getTypeScriptPackageJsonPaths.d.ts → getNodeModulesParentDirs.d.ts} +2 -2
- package/dist-types/getSanitizedDevTypeScriptVersion.d.ts +8 -0
- package/dist-types/ts3.4/getNodeModulesParentDirs.d.ts +1 -0
- package/dist-types/ts3.4/getSanitizedDevTypeScriptVersion.d.ts +3 -0
- package/package.json +6 -5
- package/dist-es/getTypeScriptPackageJsonPaths.js +0 -17
- package/dist-types/ts3.4/getTypeScriptPackageJsonPaths.d.ts +0 -3
package/dist-cjs/index.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
var node_os = require('node:os');
|
|
4
4
|
var node_process = require('node:process');
|
|
5
|
+
var utilConfigProvider = require('@smithy/util-config-provider');
|
|
5
6
|
var promises = require('node:fs/promises');
|
|
6
7
|
var node_path = require('node:path');
|
|
7
8
|
var middlewareUserAgent = require('@aws-sdk/middleware-user-agent');
|
|
@@ -16,6 +17,21 @@ const getRuntimeUserAgentPair = () => {
|
|
|
16
17
|
return ["md/nodejs", node_process.versions.node];
|
|
17
18
|
};
|
|
18
19
|
|
|
20
|
+
const getNodeModulesParentDirs = (dirname) => {
|
|
21
|
+
const cwd = process.cwd();
|
|
22
|
+
if (!dirname) {
|
|
23
|
+
return [cwd];
|
|
24
|
+
}
|
|
25
|
+
const normalizedPath = node_path.normalize(dirname);
|
|
26
|
+
const parts = normalizedPath.split(node_path.sep);
|
|
27
|
+
const nodeModulesIndex = parts.indexOf("node_modules");
|
|
28
|
+
const parentDir = nodeModulesIndex !== -1 ? parts.slice(0, nodeModulesIndex).join(node_path.sep) : normalizedPath;
|
|
29
|
+
if (cwd === parentDir) {
|
|
30
|
+
return [cwd];
|
|
31
|
+
}
|
|
32
|
+
return [parentDir, cwd];
|
|
33
|
+
};
|
|
34
|
+
|
|
19
35
|
const SEMVER_REGEX = /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+[0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*)?$/;
|
|
20
36
|
const getSanitizedTypeScriptVersion = (version = "") => {
|
|
21
37
|
const match = version.match(SEMVER_REGEX);
|
|
@@ -26,24 +42,22 @@ const getSanitizedTypeScriptVersion = (version = "") => {
|
|
|
26
42
|
return prerelease ? `${major}.${minor}.${patch}-${prerelease}` : `${major}.${minor}.${patch}`;
|
|
27
43
|
};
|
|
28
44
|
|
|
29
|
-
const
|
|
30
|
-
const
|
|
31
|
-
|
|
32
|
-
if (
|
|
33
|
-
return
|
|
45
|
+
const ALLOWED_PREFIXES = ["^", "~", ">=", "<=", ">", "<"];
|
|
46
|
+
const ALLOWED_DIST_TAGS = ["latest", "beta", "dev", "rc", "insiders", "next"];
|
|
47
|
+
const getSanitizedDevTypeScriptVersion = (version = "") => {
|
|
48
|
+
if (ALLOWED_DIST_TAGS.includes(version)) {
|
|
49
|
+
return version;
|
|
34
50
|
}
|
|
35
|
-
const
|
|
36
|
-
const
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
const parentDirPath = node_path.join(parentDir, typescriptPackageJsonPath);
|
|
40
|
-
if (cwdPath === parentDirPath) {
|
|
41
|
-
return [cwdPath];
|
|
51
|
+
const prefix = ALLOWED_PREFIXES.find((p) => version.startsWith(p)) ?? "";
|
|
52
|
+
const sanitizedTypeScriptVersion = getSanitizedTypeScriptVersion(version.slice(prefix.length));
|
|
53
|
+
if (!sanitizedTypeScriptVersion) {
|
|
54
|
+
return undefined;
|
|
42
55
|
}
|
|
43
|
-
return
|
|
56
|
+
return `${prefix}${sanitizedTypeScriptVersion}`;
|
|
44
57
|
};
|
|
45
58
|
|
|
46
59
|
let tscVersion;
|
|
60
|
+
const TS_PACKAGE_JSON = node_path.join("node_modules", "typescript", "package.json");
|
|
47
61
|
const getTypeScriptUserAgentPair = async () => {
|
|
48
62
|
if (tscVersion === null) {
|
|
49
63
|
return undefined;
|
|
@@ -51,23 +65,65 @@ const getTypeScriptUserAgentPair = async () => {
|
|
|
51
65
|
else if (typeof tscVersion === "string") {
|
|
52
66
|
return ["md/tsc", tscVersion];
|
|
53
67
|
}
|
|
68
|
+
let isTypeScriptDetectionDisabled = false;
|
|
69
|
+
try {
|
|
70
|
+
isTypeScriptDetectionDisabled =
|
|
71
|
+
utilConfigProvider.booleanSelector(process.env, "AWS_SDK_JS_TYPESCRIPT_DETECTION_DISABLED", utilConfigProvider.SelectorType.ENV) || false;
|
|
72
|
+
}
|
|
73
|
+
catch { }
|
|
74
|
+
if (isTypeScriptDetectionDisabled) {
|
|
75
|
+
tscVersion = null;
|
|
76
|
+
return undefined;
|
|
77
|
+
}
|
|
54
78
|
const dirname = typeof __dirname !== "undefined" ? __dirname : undefined;
|
|
55
|
-
|
|
79
|
+
const nodeModulesParentDirs = getNodeModulesParentDirs(dirname);
|
|
80
|
+
let versionFromApp;
|
|
81
|
+
for (const nodeModulesParentDir of nodeModulesParentDirs) {
|
|
82
|
+
try {
|
|
83
|
+
const appPackageJsonPath = node_path.join(nodeModulesParentDir, "package.json");
|
|
84
|
+
const packageJson = await promises.readFile(appPackageJsonPath, "utf-8");
|
|
85
|
+
const { dependencies, devDependencies } = JSON.parse(packageJson);
|
|
86
|
+
const version = devDependencies?.typescript ?? dependencies?.typescript;
|
|
87
|
+
if (typeof version !== "string") {
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
versionFromApp = version;
|
|
91
|
+
break;
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
if (!versionFromApp) {
|
|
97
|
+
tscVersion = null;
|
|
98
|
+
return undefined;
|
|
99
|
+
}
|
|
100
|
+
let versionFromNodeModules;
|
|
101
|
+
for (const nodeModulesParentDir of nodeModulesParentDirs) {
|
|
56
102
|
try {
|
|
57
|
-
const
|
|
103
|
+
const tsPackageJsonPath = node_path.join(nodeModulesParentDir, TS_PACKAGE_JSON);
|
|
104
|
+
const packageJson = await promises.readFile(tsPackageJsonPath, "utf-8");
|
|
58
105
|
const { version } = JSON.parse(packageJson);
|
|
59
106
|
const sanitizedVersion = getSanitizedTypeScriptVersion(version);
|
|
60
107
|
if (typeof sanitizedVersion !== "string") {
|
|
61
108
|
continue;
|
|
62
109
|
}
|
|
63
|
-
|
|
64
|
-
|
|
110
|
+
versionFromNodeModules = sanitizedVersion;
|
|
111
|
+
break;
|
|
65
112
|
}
|
|
66
113
|
catch {
|
|
67
114
|
}
|
|
68
115
|
}
|
|
69
|
-
|
|
70
|
-
|
|
116
|
+
if (versionFromNodeModules) {
|
|
117
|
+
tscVersion = versionFromNodeModules;
|
|
118
|
+
return ["md/tsc", tscVersion];
|
|
119
|
+
}
|
|
120
|
+
const sanitizedVersion = getSanitizedDevTypeScriptVersion(versionFromApp);
|
|
121
|
+
if (typeof sanitizedVersion !== "string") {
|
|
122
|
+
tscVersion = null;
|
|
123
|
+
return undefined;
|
|
124
|
+
}
|
|
125
|
+
tscVersion = `dev_${sanitizedVersion}`;
|
|
126
|
+
return ["md/tsc", tscVersion];
|
|
71
127
|
};
|
|
72
128
|
|
|
73
129
|
const crtAvailability = {
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { normalize, sep } from "node:path";
|
|
2
|
+
export const getNodeModulesParentDirs = (dirname) => {
|
|
3
|
+
const cwd = process.cwd();
|
|
4
|
+
if (!dirname) {
|
|
5
|
+
return [cwd];
|
|
6
|
+
}
|
|
7
|
+
const normalizedPath = normalize(dirname);
|
|
8
|
+
const parts = normalizedPath.split(sep);
|
|
9
|
+
const nodeModulesIndex = parts.indexOf("node_modules");
|
|
10
|
+
const parentDir = nodeModulesIndex !== -1 ? parts.slice(0, nodeModulesIndex).join(sep) : normalizedPath;
|
|
11
|
+
if (cwd === parentDir) {
|
|
12
|
+
return [cwd];
|
|
13
|
+
}
|
|
14
|
+
return [parentDir, cwd];
|
|
15
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { getSanitizedTypeScriptVersion } from "./getSanitizedTypeScriptVersion";
|
|
2
|
+
const ALLOWED_PREFIXES = ["^", "~", ">=", "<=", ">", "<"];
|
|
3
|
+
const ALLOWED_DIST_TAGS = ["latest", "beta", "dev", "rc", "insiders", "next"];
|
|
4
|
+
export const getSanitizedDevTypeScriptVersion = (version = "") => {
|
|
5
|
+
if (ALLOWED_DIST_TAGS.includes(version)) {
|
|
6
|
+
return version;
|
|
7
|
+
}
|
|
8
|
+
const prefix = ALLOWED_PREFIXES.find((p) => version.startsWith(p)) ?? "";
|
|
9
|
+
const sanitizedTypeScriptVersion = getSanitizedTypeScriptVersion(version.slice(prefix.length));
|
|
10
|
+
if (!sanitizedTypeScriptVersion) {
|
|
11
|
+
return undefined;
|
|
12
|
+
}
|
|
13
|
+
return `${prefix}${sanitizedTypeScriptVersion}`;
|
|
14
|
+
};
|
|
@@ -1,7 +1,11 @@
|
|
|
1
|
+
import { booleanSelector, SelectorType } from "@smithy/util-config-provider";
|
|
1
2
|
import { readFile } from "node:fs/promises";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { getNodeModulesParentDirs } from "./getNodeModulesParentDirs";
|
|
5
|
+
import { getSanitizedDevTypeScriptVersion } from "./getSanitizedDevTypeScriptVersion";
|
|
2
6
|
import { getSanitizedTypeScriptVersion } from "./getSanitizedTypeScriptVersion";
|
|
3
|
-
import { getTypeScriptPackageJsonPaths } from "./getTypeScriptPackageJsonPaths";
|
|
4
7
|
let tscVersion;
|
|
8
|
+
const TS_PACKAGE_JSON = join("node_modules", "typescript", "package.json");
|
|
5
9
|
export const getTypeScriptUserAgentPair = async () => {
|
|
6
10
|
if (tscVersion === null) {
|
|
7
11
|
return undefined;
|
|
@@ -9,21 +13,63 @@ export const getTypeScriptUserAgentPair = async () => {
|
|
|
9
13
|
else if (typeof tscVersion === "string") {
|
|
10
14
|
return ["md/tsc", tscVersion];
|
|
11
15
|
}
|
|
16
|
+
let isTypeScriptDetectionDisabled = false;
|
|
17
|
+
try {
|
|
18
|
+
isTypeScriptDetectionDisabled =
|
|
19
|
+
booleanSelector(process.env, "AWS_SDK_JS_TYPESCRIPT_DETECTION_DISABLED", SelectorType.ENV) || false;
|
|
20
|
+
}
|
|
21
|
+
catch { }
|
|
22
|
+
if (isTypeScriptDetectionDisabled) {
|
|
23
|
+
tscVersion = null;
|
|
24
|
+
return undefined;
|
|
25
|
+
}
|
|
12
26
|
const dirname = typeof __dirname !== "undefined" ? __dirname : undefined;
|
|
13
|
-
|
|
27
|
+
const nodeModulesParentDirs = getNodeModulesParentDirs(dirname);
|
|
28
|
+
let versionFromApp;
|
|
29
|
+
for (const nodeModulesParentDir of nodeModulesParentDirs) {
|
|
30
|
+
try {
|
|
31
|
+
const appPackageJsonPath = join(nodeModulesParentDir, "package.json");
|
|
32
|
+
const packageJson = await readFile(appPackageJsonPath, "utf-8");
|
|
33
|
+
const { dependencies, devDependencies } = JSON.parse(packageJson);
|
|
34
|
+
const version = devDependencies?.typescript ?? dependencies?.typescript;
|
|
35
|
+
if (typeof version !== "string") {
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
versionFromApp = version;
|
|
39
|
+
break;
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
if (!versionFromApp) {
|
|
45
|
+
tscVersion = null;
|
|
46
|
+
return undefined;
|
|
47
|
+
}
|
|
48
|
+
let versionFromNodeModules;
|
|
49
|
+
for (const nodeModulesParentDir of nodeModulesParentDirs) {
|
|
14
50
|
try {
|
|
15
|
-
const
|
|
51
|
+
const tsPackageJsonPath = join(nodeModulesParentDir, TS_PACKAGE_JSON);
|
|
52
|
+
const packageJson = await readFile(tsPackageJsonPath, "utf-8");
|
|
16
53
|
const { version } = JSON.parse(packageJson);
|
|
17
54
|
const sanitizedVersion = getSanitizedTypeScriptVersion(version);
|
|
18
55
|
if (typeof sanitizedVersion !== "string") {
|
|
19
56
|
continue;
|
|
20
57
|
}
|
|
21
|
-
|
|
22
|
-
|
|
58
|
+
versionFromNodeModules = sanitizedVersion;
|
|
59
|
+
break;
|
|
23
60
|
}
|
|
24
61
|
catch {
|
|
25
62
|
}
|
|
26
63
|
}
|
|
27
|
-
|
|
28
|
-
|
|
64
|
+
if (versionFromNodeModules) {
|
|
65
|
+
tscVersion = versionFromNodeModules;
|
|
66
|
+
return ["md/tsc", tscVersion];
|
|
67
|
+
}
|
|
68
|
+
const sanitizedVersion = getSanitizedDevTypeScriptVersion(versionFromApp);
|
|
69
|
+
if (typeof sanitizedVersion !== "string") {
|
|
70
|
+
tscVersion = null;
|
|
71
|
+
return undefined;
|
|
72
|
+
}
|
|
73
|
+
tscVersion = `dev_${sanitizedVersion}`;
|
|
74
|
+
return ["md/tsc", tscVersion];
|
|
29
75
|
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Returns candidate paths to the
|
|
2
|
+
* Returns candidate paths to the node_modules parent directories based on current
|
|
3
3
|
* working directory and, if provided, from the given directory.
|
|
4
4
|
*
|
|
5
5
|
* @param dirname - Optional directory path to derive an additional candidate path from.
|
|
@@ -7,4 +7,4 @@
|
|
|
7
7
|
*
|
|
8
8
|
* @internal
|
|
9
9
|
*/
|
|
10
|
-
export declare const
|
|
10
|
+
export declare const getNodeModulesParentDirs: (dirname?: string) => string[];
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sanitizes a TypeScript version string for user-agent reporting.
|
|
3
|
+
* Handles dist tags (e.g., "latest", "beta"), version prefixes (e.g., "^", "~"),
|
|
4
|
+
* and semver strings. Returns undefined if the version is invalid.
|
|
5
|
+
*
|
|
6
|
+
* @internal
|
|
7
|
+
*/
|
|
8
|
+
export declare const getSanitizedDevTypeScriptVersion: (version?: string) => string | undefined;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const getNodeModulesParentDirs: (dirname?: string) => string[];
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aws-sdk/util-user-agent-node",
|
|
3
|
-
"version": "3.973.
|
|
3
|
+
"version": "3.973.7",
|
|
4
4
|
"scripts": {
|
|
5
5
|
"build": "concurrently 'yarn:build:types' 'yarn:build:es' && yarn build:cjs",
|
|
6
6
|
"build:cjs": "node ../../scripts/compilation/inline util-user-agent-node",
|
|
@@ -24,10 +24,11 @@
|
|
|
24
24
|
},
|
|
25
25
|
"license": "Apache-2.0",
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@aws-sdk/middleware-user-agent": "^3.972.
|
|
28
|
-
"@aws-sdk/types": "^3.973.
|
|
29
|
-
"@smithy/node-config-provider": "^4.3.
|
|
30
|
-
"@smithy/types": "^4.13.
|
|
27
|
+
"@aws-sdk/middleware-user-agent": "^3.972.21",
|
|
28
|
+
"@aws-sdk/types": "^3.973.6",
|
|
29
|
+
"@smithy/node-config-provider": "^4.3.12",
|
|
30
|
+
"@smithy/types": "^4.13.1",
|
|
31
|
+
"@smithy/util-config-provider": "^4.2.2",
|
|
31
32
|
"tslib": "^2.6.2"
|
|
32
33
|
},
|
|
33
34
|
"devDependencies": {
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { join, normalize, sep } from "node:path";
|
|
2
|
-
const typescriptPackageJsonPath = join("node_modules", "typescript", "package.json");
|
|
3
|
-
export const getTypeScriptPackageJsonPaths = (dirname) => {
|
|
4
|
-
const cwdPath = join(process.cwd(), typescriptPackageJsonPath);
|
|
5
|
-
if (!dirname) {
|
|
6
|
-
return [cwdPath];
|
|
7
|
-
}
|
|
8
|
-
const normalizedPath = normalize(dirname);
|
|
9
|
-
const parts = normalizedPath.split(sep);
|
|
10
|
-
const nodeModulesIndex = parts.indexOf("node_modules");
|
|
11
|
-
const parentDir = nodeModulesIndex !== -1 ? parts.slice(0, nodeModulesIndex).join(sep) : dirname;
|
|
12
|
-
const parentDirPath = join(parentDir, typescriptPackageJsonPath);
|
|
13
|
-
if (cwdPath === parentDirPath) {
|
|
14
|
-
return [cwdPath];
|
|
15
|
-
}
|
|
16
|
-
return [parentDirPath, cwdPath];
|
|
17
|
-
};
|