@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 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 typescriptPackageJsonPath = node_path.join("node_modules", "typescript", "package.json");
30
- const getTypeScriptPackageJsonPaths = (dirname) => {
31
- const cwdPath = node_path.join(process.cwd(), typescriptPackageJsonPath);
32
- if (!dirname) {
33
- return [cwdPath];
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 normalizedPath = node_path.normalize(dirname);
36
- const parts = normalizedPath.split(node_path.sep);
37
- const nodeModulesIndex = parts.indexOf("node_modules");
38
- const parentDir = nodeModulesIndex !== -1 ? parts.slice(0, nodeModulesIndex).join(node_path.sep) : dirname;
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 [parentDirPath, cwdPath];
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
- for (const typescriptPackageJsonPath of getTypeScriptPackageJsonPaths(dirname)) {
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 packageJson = await promises.readFile(typescriptPackageJsonPath, "utf-8");
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
- tscVersion = sanitizedVersion;
64
- return ["md/tsc", tscVersion];
110
+ versionFromNodeModules = sanitizedVersion;
111
+ break;
65
112
  }
66
113
  catch {
67
114
  }
68
115
  }
69
- tscVersion = null;
70
- return undefined;
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
- for (const typescriptPackageJsonPath of getTypeScriptPackageJsonPaths(dirname)) {
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 packageJson = await readFile(typescriptPackageJsonPath, "utf-8");
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
- tscVersion = sanitizedVersion;
22
- return ["md/tsc", tscVersion];
58
+ versionFromNodeModules = sanitizedVersion;
59
+ break;
23
60
  }
24
61
  catch {
25
62
  }
26
63
  }
27
- tscVersion = null;
28
- return undefined;
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 TypeScript package.json file derived from the current
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 getTypeScriptPackageJsonPaths: (dirname?: string) => string[];
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[];
@@ -0,0 +1,3 @@
1
+ export declare const getSanitizedDevTypeScriptVersion: (
2
+ version?: string
3
+ ) => string | undefined;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aws-sdk/util-user-agent-node",
3
- "version": "3.973.5",
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.20",
28
- "@aws-sdk/types": "^3.973.5",
29
- "@smithy/node-config-provider": "^4.3.11",
30
- "@smithy/types": "^4.13.0",
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
- };
@@ -1,3 +0,0 @@
1
- export declare const getTypeScriptPackageJsonPaths: (
2
- dirname?: string
3
- ) => string[];