@rushstack/npm-check-fork 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.json +17 -0
- package/CHANGELOG.md +11 -0
- package/LICENSE +21 -0
- package/README.md +31 -0
- package/lib/BestGuessHomepage.d.ts +4 -0
- package/lib/BestGuessHomepage.d.ts.map +1 -0
- package/lib/BestGuessHomepage.js +25 -0
- package/lib/BestGuessHomepage.js.map +1 -0
- package/lib/CreatePackageSummary.d.ts +4 -0
- package/lib/CreatePackageSummary.d.ts.map +1 -0
- package/lib/CreatePackageSummary.js +84 -0
- package/lib/CreatePackageSummary.js.map +1 -0
- package/lib/FindModulePath.d.ts +7 -0
- package/lib/FindModulePath.d.ts.map +1 -0
- package/lib/FindModulePath.js +27 -0
- package/lib/FindModulePath.js.map +1 -0
- package/lib/GetLatestFromRegistry.d.ts +3 -0
- package/lib/GetLatestFromRegistry.d.ts.map +1 -0
- package/lib/GetLatestFromRegistry.js +43 -0
- package/lib/GetLatestFromRegistry.js.map +1 -0
- package/lib/NpmCheck.d.ts +3 -0
- package/lib/NpmCheck.d.ts.map +1 -0
- package/lib/NpmCheck.js +29 -0
- package/lib/NpmCheck.js.map +1 -0
- package/lib/NpmCheckState.d.ts +3 -0
- package/lib/NpmCheckState.d.ts.map +1 -0
- package/lib/NpmCheckState.js +25 -0
- package/lib/NpmCheckState.js.map +1 -0
- package/lib/ReadPackageJson.d.ts +3 -0
- package/lib/ReadPackageJson.d.ts.map +1 -0
- package/lib/ReadPackageJson.js +24 -0
- package/lib/ReadPackageJson.js.map +1 -0
- package/lib/index.d.ts +4 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +9 -0
- package/lib/index.js.map +1 -0
- package/lib/interfaces/INpmCheck.d.ts +17 -0
- package/lib/interfaces/INpmCheck.d.ts.map +1 -0
- package/lib/interfaces/INpmCheck.js +9 -0
- package/lib/interfaces/INpmCheck.js.map +1 -0
- package/lib/interfaces/INpmCheckPackageSummary.d.ts +15 -0
- package/lib/interfaces/INpmCheckPackageSummary.d.ts.map +1 -0
- package/lib/interfaces/INpmCheckPackageSummary.js +3 -0
- package/lib/interfaces/INpmCheckPackageSummary.js.map +1 -0
- package/lib/interfaces/INpmCheckRegistry.d.ts +26 -0
- package/lib/interfaces/INpmCheckRegistry.d.ts.map +1 -0
- package/lib/interfaces/INpmCheckRegistry.js +3 -0
- package/lib/interfaces/INpmCheckRegistry.js.map +1 -0
- package/lib/tests/BestGuessHomepage.test.d.ts +2 -0
- package/lib/tests/BestGuessHomepage.test.d.ts.map +1 -0
- package/lib/tests/BestGuessHomepage.test.js.map +1 -0
- package/lib/tests/CreatePackageSummary.test.d.ts +2 -0
- package/lib/tests/CreatePackageSummary.test.d.ts.map +1 -0
- package/lib/tests/CreatePackageSummary.test.js.map +1 -0
- package/lib/tests/FindModulePath.test.d.ts +2 -0
- package/lib/tests/FindModulePath.test.d.ts.map +1 -0
- package/lib/tests/FindModulePath.test.js.map +1 -0
- package/lib/tests/GetLatestFromRegistry.test.d.ts +2 -0
- package/lib/tests/GetLatestFromRegistry.test.d.ts.map +1 -0
- package/lib/tests/GetLatestFromRegistry.test.js.map +1 -0
- package/lib/tests/NpmCheck.test.d.ts +2 -0
- package/lib/tests/NpmCheck.test.d.ts.map +1 -0
- package/lib/tests/NpmCheck.test.js.map +1 -0
- package/lib/tests/NpmCheckState.test.d.ts +2 -0
- package/lib/tests/NpmCheckState.test.d.ts.map +1 -0
- package/lib/tests/NpmCheckState.test.js.map +1 -0
- package/lib/tests/ReadPackageJson.test.d.ts +2 -0
- package/lib/tests/ReadPackageJson.test.d.ts.map +1 -0
- package/lib/tests/ReadPackageJson.test.js.map +1 -0
- package/package.json +34 -0
package/CHANGELOG.json
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@rushstack/npm-check-fork",
|
|
3
|
+
"entries": [
|
|
4
|
+
{
|
|
5
|
+
"version": "0.1.0",
|
|
6
|
+
"tag": "@rushstack/npm-check-fork_v0.1.0",
|
|
7
|
+
"date": "Sat, 18 Oct 2025 00:06:19 GMT",
|
|
8
|
+
"comments": {
|
|
9
|
+
"minor": [
|
|
10
|
+
{
|
|
11
|
+
"comment": "Initial fork of npm-check"
|
|
12
|
+
}
|
|
13
|
+
]
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
]
|
|
17
|
+
}
|
package/CHANGELOG.md
ADDED
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
The MIT License (MIT)
|
|
2
|
+
|
|
3
|
+
Copyright (c) Dylan Greene <dylang@gmail.com>
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
|
13
|
+
all copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
21
|
+
THE SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# @rushstack/npm-check-fork
|
|
2
|
+
|
|
3
|
+
This package is a temporary rushstack maintained fork of [`npm-check`](https://github.com/dylang/npm-check), used internally by `rush upgrade-interactive`. It exists to address security vulnerabilities and compatibility issues present in the latest upstream version.
|
|
4
|
+
|
|
5
|
+
**Origin:**
|
|
6
|
+
- Forked from [`npm-check`](https://github.com/dylang/npm-check)
|
|
7
|
+
- Original copyright:
|
|
8
|
+
```
|
|
9
|
+
Copyright (c) 2015 Dylan Greene
|
|
10
|
+
Licensed under the MIT license.
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
**Purpose:**
|
|
14
|
+
This fork is expected to be temporary and will be removed once upstream issues are resolved.
|
|
15
|
+
|
|
16
|
+
## Changes from Upstream
|
|
17
|
+
|
|
18
|
+
- **Removed unused state properties:**
|
|
19
|
+
Properties from the state object that were never set or used have been removed (see `INpmCheckState`).
|
|
20
|
+
- **Removed `peerDependencies` from `INpmCheckPackageSummary`:**
|
|
21
|
+
This property was deprecated in `npm-check` and was never set.
|
|
22
|
+
- **Removed emoji support:**
|
|
23
|
+
Emoji output was never used in rushstack/rush-lib and has been stripped out.
|
|
24
|
+
- **Downgraded `path-exists` dependency:**
|
|
25
|
+
The latest version of `path-exists` is ESM-only; this fork uses a compatible CommonJS version.
|
|
26
|
+
- **Removed `semverDiff` dependency:**
|
|
27
|
+
This was deprecated and its functionality has been replaced by direct usage of `semver`.
|
|
28
|
+
|
|
29
|
+
## License
|
|
30
|
+
|
|
31
|
+
This fork retains the original MIT license from `npm-check`.
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/// <reference path="../src/types/giturl-typings.d.ts" preserve="true" />
|
|
2
|
+
import type { INpmCheckRegistryData } from './interfaces/INpmCheckRegistry';
|
|
3
|
+
export default function bestGuessHomepage(data: INpmCheckRegistryData | undefined): string | false;
|
|
4
|
+
//# sourceMappingURL=BestGuessHomepage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BestGuessHomepage.d.ts","sourceRoot":"","sources":["../src/BestGuessHomepage.ts"],"names":[],"mappings":";AAIA,OAAO,KAAK,EAA2B,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAErG,MAAM,CAAC,OAAO,UAAU,iBAAiB,CAAC,IAAI,EAAE,qBAAqB,GAAG,SAAS,GAAG,MAAM,GAAG,KAAK,CAgBjG"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/// <reference path="./types/giturl-typings.d.ts" preserve="true" />
|
|
3
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
4
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
5
|
+
};
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.default = bestGuessHomepage;
|
|
8
|
+
const giturl_1 = __importDefault(require("giturl"));
|
|
9
|
+
function bestGuessHomepage(data) {
|
|
10
|
+
if (!data) {
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
const packageDataForLatest = data.versions[data['dist-tags'].latest];
|
|
14
|
+
return packageDataForLatest
|
|
15
|
+
? packageDataForLatest.homepage ||
|
|
16
|
+
(packageDataForLatest.bugs &&
|
|
17
|
+
packageDataForLatest.bugs.url &&
|
|
18
|
+
giturl_1.default.parse(packageDataForLatest.bugs.url.trim())) ||
|
|
19
|
+
(packageDataForLatest.repository &&
|
|
20
|
+
packageDataForLatest.repository.url &&
|
|
21
|
+
giturl_1.default.parse(packageDataForLatest.repository.url.trim())) ||
|
|
22
|
+
false
|
|
23
|
+
: false;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=BestGuessHomepage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BestGuessHomepage.js","sourceRoot":"","sources":["../src/BestGuessHomepage.ts"],"names":[],"mappings":";AAAA,oEAAoE;;;;;AAMpE,oCAgBC;AApBD,oDAA4B;AAI5B,SAAwB,iBAAiB,CAAC,IAAuC;IAC/E,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,oBAAoB,GAA4B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;IAE9F,OAAO,oBAAoB;QACzB,CAAC,CAAC,oBAAoB,CAAC,QAAQ;YAC3B,CAAC,oBAAoB,CAAC,IAAI;gBACxB,oBAAoB,CAAC,IAAI,CAAC,GAAG;gBAC7B,gBAAM,CAAC,KAAK,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;YACrD,CAAC,oBAAoB,CAAC,UAAU;gBAC9B,oBAAoB,CAAC,UAAU,CAAC,GAAG;gBACnC,gBAAM,CAAC,KAAK,CAAC,oBAAoB,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;YAC3D,KAAK;QACT,CAAC,CAAC,KAAK,CAAC;AACZ,CAAC","sourcesContent":["/// <reference path=\"./types/giturl-typings.d.ts\" preserve=\"true\" />\n\nimport gitUrl from 'giturl';\n\nimport type { INpmCheckPackageVersion, INpmCheckRegistryData } from './interfaces/INpmCheckRegistry';\n\nexport default function bestGuessHomepage(data: INpmCheckRegistryData | undefined): string | false {\n if (!data) {\n return false;\n }\n const packageDataForLatest: INpmCheckPackageVersion = data.versions[data['dist-tags'].latest];\n\n return packageDataForLatest\n ? packageDataForLatest.homepage ||\n (packageDataForLatest.bugs &&\n packageDataForLatest.bugs.url &&\n gitUrl.parse(packageDataForLatest.bugs.url.trim())) ||\n (packageDataForLatest.repository &&\n packageDataForLatest.repository.url &&\n gitUrl.parse(packageDataForLatest.repository.url.trim())) ||\n false\n : false;\n}\n"]}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { INpmCheckState } from './interfaces/INpmCheck.ts';
|
|
2
|
+
import type { INpmCheckPackageSummary } from './interfaces/INpmCheckPackageSummary';
|
|
3
|
+
export default function createPackageSummary(moduleName: string, state: INpmCheckState): Promise<INpmCheckPackageSummary | false>;
|
|
4
|
+
//# sourceMappingURL=CreatePackageSummary.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CreatePackageSummary.d.ts","sourceRoot":"","sources":["../src/CreatePackageSummary.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAwB,MAAM,2BAA2B,CAAC;AACtF,OAAO,KAAK,EAAE,uBAAuB,EAA4B,MAAM,sCAAsC,CAAC;AAM9G,wBAA8B,oBAAoB,CAChD,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,cAAc,GACpB,OAAO,CAAC,uBAAuB,GAAG,KAAK,CAAC,CAgF1C"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.default = createPackageSummary;
|
|
7
|
+
const node_fs_1 = require("node:fs");
|
|
8
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
9
|
+
const lodash_1 = __importDefault(require("lodash"));
|
|
10
|
+
const semver_1 = __importDefault(require("semver"));
|
|
11
|
+
const FindModulePath_1 = __importDefault(require("./FindModulePath"));
|
|
12
|
+
const GetLatestFromRegistry_1 = __importDefault(require("./GetLatestFromRegistry"));
|
|
13
|
+
const ReadPackageJson_1 = __importDefault(require("./ReadPackageJson"));
|
|
14
|
+
async function createPackageSummary(moduleName, state) {
|
|
15
|
+
const cwdPackageJson = state.cwdPackageJson;
|
|
16
|
+
const modulePath = (0, FindModulePath_1.default)(moduleName, state);
|
|
17
|
+
const packageIsInstalled = (0, node_fs_1.existsSync)(modulePath);
|
|
18
|
+
const modulePackageJson = (0, ReadPackageJson_1.default)(node_path_1.default.join(modulePath, 'package.json'));
|
|
19
|
+
// Ignore private packages
|
|
20
|
+
const isPrivate = Boolean(modulePackageJson.private);
|
|
21
|
+
if (isPrivate) {
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
// Ignore packages that are using github or file urls
|
|
25
|
+
const packageJsonVersion = (cwdPackageJson === null || cwdPackageJson === void 0 ? void 0 : cwdPackageJson.dependencies[moduleName]) || (cwdPackageJson === null || cwdPackageJson === void 0 ? void 0 : cwdPackageJson.devDependencies[moduleName]);
|
|
26
|
+
if (packageJsonVersion && !semver_1.default.validRange(packageJsonVersion)) {
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
return (0, GetLatestFromRegistry_1.default)(moduleName).then((fromRegistry) => {
|
|
30
|
+
var _a;
|
|
31
|
+
const installedVersion = modulePackageJson.version;
|
|
32
|
+
const latest = installedVersion &&
|
|
33
|
+
fromRegistry.latest &&
|
|
34
|
+
fromRegistry.next &&
|
|
35
|
+
semver_1.default.gt(installedVersion, fromRegistry.latest)
|
|
36
|
+
? fromRegistry.next
|
|
37
|
+
: fromRegistry.latest;
|
|
38
|
+
const versions = fromRegistry.versions || [];
|
|
39
|
+
let versionWanted = null;
|
|
40
|
+
if (packageJsonVersion) {
|
|
41
|
+
versionWanted = semver_1.default.maxSatisfying(versions, packageJsonVersion);
|
|
42
|
+
}
|
|
43
|
+
const versionToUse = installedVersion || versionWanted;
|
|
44
|
+
const usingNonSemver = latest !== undefined && semver_1.default.valid(latest) && semver_1.default.lt(latest, '1.0.0-pre');
|
|
45
|
+
let bump;
|
|
46
|
+
const bumpRaw = semver_1.default.valid(latest) &&
|
|
47
|
+
semver_1.default.valid(versionToUse) &&
|
|
48
|
+
(usingNonSemver && versionToUse && latest
|
|
49
|
+
? semver_1.default.diff(versionToUse, latest)
|
|
50
|
+
? 'nonSemver'
|
|
51
|
+
: semver_1.default.diff(versionToUse, latest)
|
|
52
|
+
: versionToUse && latest
|
|
53
|
+
? semver_1.default.diff(versionToUse, latest)
|
|
54
|
+
: undefined);
|
|
55
|
+
if (bumpRaw && bumpRaw !== null) {
|
|
56
|
+
bump = bumpRaw;
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
bump = undefined;
|
|
60
|
+
}
|
|
61
|
+
return {
|
|
62
|
+
// info
|
|
63
|
+
moduleName: moduleName,
|
|
64
|
+
homepage: (_a = fromRegistry.homepage) !== null && _a !== void 0 ? _a : '',
|
|
65
|
+
regError: new Error(fromRegistry.error),
|
|
66
|
+
pkgError: modulePackageJson.error,
|
|
67
|
+
// versions
|
|
68
|
+
latest: latest !== null && latest !== void 0 ? latest : '',
|
|
69
|
+
installed: versionToUse === null ? '' : versionToUse,
|
|
70
|
+
notInstalled: !packageIsInstalled,
|
|
71
|
+
packageJson: packageJsonVersion !== null && packageJsonVersion !== void 0 ? packageJsonVersion : '',
|
|
72
|
+
// meta
|
|
73
|
+
devDependency: lodash_1.default.has(cwdPackageJson === null || cwdPackageJson === void 0 ? void 0 : cwdPackageJson.devDependencies, moduleName),
|
|
74
|
+
mismatch: packageJsonVersion !== undefined &&
|
|
75
|
+
versionToUse !== null &&
|
|
76
|
+
semver_1.default.validRange(packageJsonVersion) &&
|
|
77
|
+
semver_1.default.valid(versionToUse)
|
|
78
|
+
? !semver_1.default.satisfies(versionToUse, packageJsonVersion)
|
|
79
|
+
: false,
|
|
80
|
+
bump: bump
|
|
81
|
+
};
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=CreatePackageSummary.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CreatePackageSummary.js","sourceRoot":"","sources":["../src/CreatePackageSummary.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync } from 'node:fs';\nimport path from 'node:path';\n\nimport _ from 'lodash';\nimport semver from 'semver';\n\nimport type { INpmCheckState, INpmCheckPackageJson } from './interfaces/INpmCheck.ts';\nimport type { INpmCheckPackageSummary, INpmCheckVersionBumpType } from './interfaces/INpmCheckPackageSummary';\nimport type { INpmRegistryInfo } from './interfaces/INpmCheckRegistry';\nimport findModulePath from './FindModulePath';\nimport getLatestFromRegistry from './GetLatestFromRegistry';\nimport readPackageJson from './ReadPackageJson';\n\nexport default async function createPackageSummary(\n moduleName: string,\n state: INpmCheckState\n): Promise<INpmCheckPackageSummary | false> {\n const cwdPackageJson: INpmCheckPackageJson | undefined = state.cwdPackageJson;\n\n const modulePath: string = findModulePath(moduleName, state);\n const packageIsInstalled: boolean = existsSync(modulePath);\n const modulePackageJson: INpmCheckPackageJson = readPackageJson(path.join(modulePath, 'package.json'));\n\n // Ignore private packages\n const isPrivate: boolean = Boolean(modulePackageJson.private);\n if (isPrivate) {\n return false;\n }\n\n // Ignore packages that are using github or file urls\n const packageJsonVersion: string | undefined =\n cwdPackageJson?.dependencies[moduleName] || cwdPackageJson?.devDependencies[moduleName];\n if (packageJsonVersion && !semver.validRange(packageJsonVersion)) {\n return false;\n }\n\n return getLatestFromRegistry(moduleName).then((fromRegistry: INpmRegistryInfo) => {\n const installedVersion: string | undefined = modulePackageJson.version;\n const latest: string | undefined =\n installedVersion &&\n fromRegistry.latest &&\n fromRegistry.next &&\n semver.gt(installedVersion, fromRegistry.latest)\n ? fromRegistry.next\n : fromRegistry.latest;\n const versions: string[] = fromRegistry.versions || [];\n let versionWanted: string | null = null;\n if (packageJsonVersion) {\n versionWanted = semver.maxSatisfying(versions, packageJsonVersion);\n }\n const versionToUse: string | undefined | null = installedVersion || versionWanted;\n const usingNonSemver: boolean | '' | null =\n latest !== undefined && semver.valid(latest) && semver.lt(latest, '1.0.0-pre');\n\n let bump: INpmCheckVersionBumpType;\n const bumpRaw: INpmCheckVersionBumpType =\n semver.valid(latest) &&\n semver.valid(versionToUse) &&\n (usingNonSemver && versionToUse && latest\n ? semver.diff(versionToUse, latest)\n ? 'nonSemver'\n : semver.diff(versionToUse, latest)\n : versionToUse && latest\n ? semver.diff(versionToUse, latest)\n : undefined);\n if (bumpRaw && bumpRaw !== null) {\n bump = bumpRaw as INpmCheckVersionBumpType;\n } else {\n bump = undefined;\n }\n\n return {\n // info\n moduleName: moduleName,\n homepage: fromRegistry.homepage ?? '',\n regError: new Error(fromRegistry.error),\n pkgError: modulePackageJson.error,\n\n // versions\n latest: latest ?? '',\n installed: versionToUse === null ? '' : versionToUse,\n notInstalled: !packageIsInstalled,\n packageJson: packageJsonVersion ?? '',\n\n // meta\n devDependency: _.has(cwdPackageJson?.devDependencies, moduleName),\n mismatch:\n packageJsonVersion !== undefined &&\n versionToUse !== null &&\n semver.validRange(packageJsonVersion) &&\n semver.valid(versionToUse)\n ? !semver.satisfies(versionToUse, packageJsonVersion)\n : false,\n bump: bump\n };\n });\n}\n"]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { INpmCheckState } from './interfaces/INpmCheck.ts';
|
|
2
|
+
/**
|
|
3
|
+
* Searches the directory hierarchy to return the path to the requested node module.
|
|
4
|
+
* If the module can't be found, returns the initial (deepest) tried path.
|
|
5
|
+
*/
|
|
6
|
+
export default function findModulePath(moduleName: string, currentState: INpmCheckState): string;
|
|
7
|
+
//# sourceMappingURL=FindModulePath.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FindModulePath.d.ts","sourceRoot":"","sources":["../src/FindModulePath.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAEhE;;;GAGG;AACH,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,cAAc,GAAG,MAAM,CAa/F"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.default = findModulePath;
|
|
7
|
+
const node_fs_1 = require("node:fs");
|
|
8
|
+
const node_module_1 = __importDefault(require("node:module"));
|
|
9
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
10
|
+
/**
|
|
11
|
+
* Searches the directory hierarchy to return the path to the requested node module.
|
|
12
|
+
* If the module can't be found, returns the initial (deepest) tried path.
|
|
13
|
+
*/
|
|
14
|
+
function findModulePath(moduleName, currentState) {
|
|
15
|
+
const cwd = currentState.cwd;
|
|
16
|
+
// Module._nodeModulePaths does not include some places the node module resolver searches, such as
|
|
17
|
+
// the global prefix or other special directories. This is desirable because if a module is missing
|
|
18
|
+
// in the project directory we want to be sure to report it as missing.
|
|
19
|
+
// We can't use require.resolve because it fails if the module doesn't have an entry point.
|
|
20
|
+
// @ts-ignore
|
|
21
|
+
const nodeModulesPaths = node_module_1.default._nodeModulePaths(cwd);
|
|
22
|
+
const possibleModulePaths = nodeModulesPaths.map((x) => node_path_1.default.join(x, moduleName));
|
|
23
|
+
const modulePath = possibleModulePaths.find((p) => (0, node_fs_1.existsSync)(p));
|
|
24
|
+
// if no existing path was found, return the first tried path anyway
|
|
25
|
+
return modulePath || node_path_1.default.join(cwd, moduleName);
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=FindModulePath.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FindModulePath.js","sourceRoot":"","sources":["../src/FindModulePath.ts"],"names":[],"mappings":";;;;;AAUA,iCAaC;AAvBD,qCAAqC;AACrC,8DAAiC;AACjC,0DAA6B;AAI7B;;;GAGG;AACH,SAAwB,cAAc,CAAC,UAAkB,EAAE,YAA4B;IACrF,MAAM,GAAG,GAAW,YAAY,CAAC,GAAG,CAAC;IAErC,kGAAkG;IAClG,mGAAmG;IACnG,uEAAuE;IACvE,2FAA2F;IAC3F,aAAa;IACb,MAAM,gBAAgB,GAAa,qBAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;IAChE,MAAM,mBAAmB,GAAa,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,mBAAI,CAAC,IAAI,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;IAC5F,MAAM,UAAU,GAAuB,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,oBAAU,EAAC,CAAC,CAAC,CAAC,CAAC;IACtF,oEAAoE;IACpE,OAAO,UAAU,IAAI,mBAAI,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;AAClD,CAAC","sourcesContent":["import { existsSync } from 'node:fs';\nimport Module from 'node:module';\nimport path from 'node:path';\n\nimport type { INpmCheckState } from './interfaces/INpmCheck.ts';\n\n/**\n * Searches the directory hierarchy to return the path to the requested node module.\n * If the module can't be found, returns the initial (deepest) tried path.\n */\nexport default function findModulePath(moduleName: string, currentState: INpmCheckState): string {\n const cwd: string = currentState.cwd;\n\n // Module._nodeModulePaths does not include some places the node module resolver searches, such as\n // the global prefix or other special directories. This is desirable because if a module is missing\n // in the project directory we want to be sure to report it as missing.\n // We can't use require.resolve because it fails if the module doesn't have an entry point.\n // @ts-ignore\n const nodeModulesPaths: string[] = Module._nodeModulePaths(cwd);\n const possibleModulePaths: string[] = nodeModulesPaths.map((x) => path.join(x, moduleName));\n const modulePath: string | undefined = possibleModulePaths.find((p) => existsSync(p));\n // if no existing path was found, return the first tried path anyway\n return modulePath || path.join(cwd, moduleName);\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GetLatestFromRegistry.d.ts","sourceRoot":"","sources":["../src/GetLatestFromRegistry.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAIvE,wBAA8B,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAgCvF"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.default = getNpmInfo;
|
|
7
|
+
const node_os_1 = __importDefault(require("node:os"));
|
|
8
|
+
const lodash_1 = __importDefault(require("lodash"));
|
|
9
|
+
const semver_1 = __importDefault(require("semver"));
|
|
10
|
+
const package_json_1 = __importDefault(require("package-json"));
|
|
11
|
+
const throat_1 = __importDefault(require("throat"));
|
|
12
|
+
const BestGuessHomepage_1 = __importDefault(require("./BestGuessHomepage"));
|
|
13
|
+
const cpuCount = node_os_1.default.cpus().length;
|
|
14
|
+
async function getNpmInfo(packageName) {
|
|
15
|
+
const limit = (0, throat_1.default)(cpuCount, () => (0, package_json_1.default)(packageName, { fullMetadata: true, allVersions: true }));
|
|
16
|
+
return limit()
|
|
17
|
+
.then((rawData) => {
|
|
18
|
+
const CRAZY_HIGH_SEMVER = '8000.0.0';
|
|
19
|
+
const sortedVersions = (0, lodash_1.default)(rawData.versions)
|
|
20
|
+
.keys()
|
|
21
|
+
.remove(lodash_1.default.partial(semver_1.default.gt, CRAZY_HIGH_SEMVER))
|
|
22
|
+
.sort(semver_1.default.compare)
|
|
23
|
+
.valueOf();
|
|
24
|
+
const latest = rawData['dist-tags'].latest;
|
|
25
|
+
const next = rawData['dist-tags'].next;
|
|
26
|
+
const latestStableRelease = semver_1.default.satisfies(latest, '*')
|
|
27
|
+
? latest
|
|
28
|
+
: semver_1.default.maxSatisfying(sortedVersions, '*') || '';
|
|
29
|
+
return {
|
|
30
|
+
latest: latestStableRelease,
|
|
31
|
+
next: next,
|
|
32
|
+
versions: sortedVersions,
|
|
33
|
+
homepage: (0, BestGuessHomepage_1.default)(rawData) || ''
|
|
34
|
+
};
|
|
35
|
+
})
|
|
36
|
+
.catch((error) => {
|
|
37
|
+
const errorMessage = `Registry error ${error.message}`;
|
|
38
|
+
return {
|
|
39
|
+
error: errorMessage
|
|
40
|
+
};
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=GetLatestFromRegistry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GetLatestFromRegistry.js","sourceRoot":"","sources":["../src/GetLatestFromRegistry.ts"],"names":[],"mappings":";;;;;AAYA,6BAgCC;AA5CD,sDAAyB;AAEzB,oDAAuB;AACvB,oDAA4B;AAC5B,gEAAuC;AACvC,oDAA4B;AAE5B,4EAAoD;AAGpD,MAAM,QAAQ,GAAW,iBAAE,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC;AAE3B,KAAK,UAAU,UAAU,CAAC,WAAmB;IAC1D,MAAM,KAAK,GAA4C,IAAA,gBAAM,EAAC,QAAQ,EAAE,GAAG,EAAE,CAC3E,IAAA,sBAAW,EAAC,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CACpE,CAAC;IACF,OAAO,KAAK,EAAE;SACX,IAAI,CAAC,CAAC,OAAiC,EAAE,EAAE;QAC1C,MAAM,iBAAiB,GAAW,UAAU,CAAC;QAC7C,MAAM,cAAc,GAAa,IAAA,gBAAC,EAAC,OAAO,CAAC,QAAQ,CAAC;aACjD,IAAI,EAAE;aACN,MAAM,CAAC,gBAAC,CAAC,OAAO,CAAC,gBAAM,CAAC,EAAE,EAAE,iBAAiB,CAAC,CAAC;aAC/C,IAAI,CAAC,gBAAM,CAAC,OAAO,CAAC;aACpB,OAAO,EAAE,CAAC;QAEb,MAAM,MAAM,GAAW,OAAO,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC;QACnD,MAAM,IAAI,GAAW,OAAO,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC;QAC/C,MAAM,mBAAmB,GAAuB,gBAAM,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC;YAC3E,CAAC,CAAC,MAAM;YACR,CAAC,CAAC,gBAAM,CAAC,aAAa,CAAC,cAAc,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC;QAEpD,OAAO;YACL,MAAM,EAAE,mBAAmB;YAC3B,IAAI,EAAE,IAAI;YACV,QAAQ,EAAE,cAAc;YACxB,QAAQ,EAAE,IAAA,2BAAiB,EAAC,OAAO,CAAC,IAAI,EAAE;SAC3C,CAAC;IACJ,CAAC,CAAC;SACD,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;QACf,MAAM,YAAY,GAAW,kBAAkB,KAAK,CAAC,OAAO,EAAE,CAAC;QAC/D,OAAO;YACL,KAAK,EAAE,YAAY;SACpB,CAAC;IACJ,CAAC,CAAC,CAAC;AACP,CAAC","sourcesContent":["import os from 'node:os';\n\nimport _ from 'lodash';\nimport semver from 'semver';\nimport packageJson from 'package-json';\nimport throat from 'throat';\n\nimport bestGuessHomepage from './BestGuessHomepage';\nimport type { INpmRegistryInfo } from './interfaces/INpmCheckRegistry';\n\nconst cpuCount: number = os.cpus().length;\n\nexport default async function getNpmInfo(packageName: string): Promise<INpmRegistryInfo> {\n const limit: () => Promise<packageJson.FullMetadata> = throat(cpuCount, () =>\n packageJson(packageName, { fullMetadata: true, allVersions: true })\n );\n return limit()\n .then((rawData: packageJson.FullMetadata) => {\n const CRAZY_HIGH_SEMVER: string = '8000.0.0';\n const sortedVersions: string[] = _(rawData.versions)\n .keys()\n .remove(_.partial(semver.gt, CRAZY_HIGH_SEMVER))\n .sort(semver.compare)\n .valueOf();\n\n const latest: string = rawData['dist-tags'].latest;\n const next: string = rawData['dist-tags'].next;\n const latestStableRelease: string | undefined = semver.satisfies(latest, '*')\n ? latest\n : semver.maxSatisfying(sortedVersions, '*') || '';\n\n return {\n latest: latestStableRelease,\n next: next,\n versions: sortedVersions,\n homepage: bestGuessHomepage(rawData) || ''\n };\n })\n .catch((error) => {\n const errorMessage: string = `Registry error ${error.message}`;\n return {\n error: errorMessage\n };\n });\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NpmCheck.d.ts","sourceRoot":"","sources":["../src/NpmCheck.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAwB,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAKtF,wBAA8B,QAAQ,CAAC,cAAc,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,CAkB/F"}
|
package/lib/NpmCheck.js
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.default = NpmCheck;
|
|
7
|
+
const lodash_1 = __importDefault(require("lodash"));
|
|
8
|
+
const CreatePackageSummary_1 = __importDefault(require("./CreatePackageSummary"));
|
|
9
|
+
const NpmCheckState_1 = __importDefault(require("./NpmCheckState"));
|
|
10
|
+
async function NpmCheck(initialOptions) {
|
|
11
|
+
const state = await (0, NpmCheckState_1.default)(initialOptions);
|
|
12
|
+
const cwdPackageJson = state.cwdPackageJson;
|
|
13
|
+
const allDependencies = getDependencies(cwdPackageJson);
|
|
14
|
+
let packages = [];
|
|
15
|
+
if (allDependencies) {
|
|
16
|
+
const packageSummaryPromises = Object.keys(allDependencies).map((moduleName) => (0, CreatePackageSummary_1.default)(moduleName, state));
|
|
17
|
+
packages = await Promise.all(packageSummaryPromises).then((results) => {
|
|
18
|
+
return results.filter((pkg) => pkg !== false);
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
return { ...state, packages };
|
|
22
|
+
}
|
|
23
|
+
function getDependencies(pkg) {
|
|
24
|
+
if (!pkg) {
|
|
25
|
+
return undefined;
|
|
26
|
+
}
|
|
27
|
+
return lodash_1.default.extend(pkg.dependencies, pkg.devDependencies);
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=NpmCheck.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NpmCheck.js","sourceRoot":"","sources":["../src/NpmCheck.ts"],"names":[],"mappings":";;;;;AAOA,2BAkBC;AAzBD,oDAAuB;AAIvB,kFAA0D;AAC1D,oEAA8C;AAE/B,KAAK,UAAU,QAAQ,CAAC,cAA+B;IACpE,MAAM,KAAK,GAAmB,MAAM,IAAA,uBAAe,EAAC,cAAc,CAAC,CAAC;IACpE,MAAM,cAAc,GAAqC,KAAK,CAAC,cAAc,CAAC;IAC9E,MAAM,eAAe,GAAuC,eAAe,CAAC,cAAc,CAAC,CAAC;IAE5F,IAAI,QAAQ,GAA8B,EAAE,CAAC;IAC7C,IAAI,eAAe,EAAE,CAAC;QACpB,MAAM,sBAAsB,GAA+C,MAAM,CAAC,IAAI,CACpF,eAAe,CAChB,CAAC,GAAG,CAAC,CAAC,UAAkB,EAAE,EAAE,CAAC,IAAA,8BAAoB,EAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC;QACvE,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,IAAI,CACvD,CAAC,OAA4C,EAAE,EAAE;YAC/C,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAkC,EAAE,CAAC,GAAG,KAAK,KAAK,CAAC,CAAC;QAChF,CAAC,CACF,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,GAAG,KAAK,EAAE,QAAQ,EAAE,CAAC;AAChC,CAAC;AAED,SAAS,eAAe,CAAC,GAAqC;IAC5D,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,gBAAC,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,eAAe,CAAC,CAAC;AACzD,CAAC","sourcesContent":["import _ from 'lodash';\n\nimport type { INpmCheckPackageJson, INpmCheckState } from './interfaces/INpmCheck.ts';\nimport type { INpmCheckPackageSummary } from './interfaces/INpmCheckPackageSummary';\nimport createPackageSummary from './CreatePackageSummary';\nimport initializeState from './NpmCheckState';\n\nexport default async function NpmCheck(initialOptions?: INpmCheckState): Promise<INpmCheckState> {\n const state: INpmCheckState = await initializeState(initialOptions);\n const cwdPackageJson: INpmCheckPackageJson | undefined = state.cwdPackageJson;\n const allDependencies: Record<string, string> | undefined = getDependencies(cwdPackageJson);\n\n let packages: INpmCheckPackageSummary[] = [];\n if (allDependencies) {\n const packageSummaryPromises: Promise<INpmCheckPackageSummary | false>[] = Object.keys(\n allDependencies\n ).map((moduleName: string) => createPackageSummary(moduleName, state));\n packages = await Promise.all(packageSummaryPromises).then(\n (results: (INpmCheckPackageSummary | false)[]) => {\n return results.filter((pkg): pkg is INpmCheckPackageSummary => pkg !== false);\n }\n );\n }\n\n return { ...state, packages };\n}\n\nfunction getDependencies(pkg: INpmCheckPackageJson | undefined): Record<string, string> | undefined {\n if (!pkg) {\n return undefined;\n }\n\n return _.extend(pkg.dependencies, pkg.devDependencies);\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NpmCheckState.d.ts","sourceRoot":"","sources":["../src/NpmCheckState.ts"],"names":[],"mappings":"AAIA,OAAO,EAGL,KAAK,cAAc,EACpB,MAAM,wBAAwB,CAAC;AAGhC,wBAA8B,eAAe,CAAC,cAAc,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,CAetG"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.default = initializeState;
|
|
7
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
8
|
+
const lodash_1 = __importDefault(require("lodash"));
|
|
9
|
+
const INpmCheck_1 = require("./interfaces/INpmCheck");
|
|
10
|
+
const ReadPackageJson_1 = __importDefault(require("./ReadPackageJson"));
|
|
11
|
+
async function initializeState(initialOptions) {
|
|
12
|
+
var _a;
|
|
13
|
+
const state = lodash_1.default.extend(INpmCheck_1.DefaultNpmCheckOptions, initialOptions);
|
|
14
|
+
if (state.cwd) {
|
|
15
|
+
const cwd = node_path_1.default.resolve(state.cwd);
|
|
16
|
+
const pkg = (0, ReadPackageJson_1.default)(node_path_1.default.join(cwd, 'package.json'));
|
|
17
|
+
state.cwdPackageJson = pkg;
|
|
18
|
+
state.cwd = cwd;
|
|
19
|
+
}
|
|
20
|
+
if ((_a = state.cwdPackageJson) === null || _a === void 0 ? void 0 : _a.error) {
|
|
21
|
+
return Promise.reject(state.cwdPackageJson.error);
|
|
22
|
+
}
|
|
23
|
+
return Promise.resolve(state);
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=NpmCheckState.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NpmCheckState.js","sourceRoot":"","sources":["../src/NpmCheckState.ts"],"names":[],"mappings":";;;;;AAWA,kCAeC;AA1BD,0DAA6B;AAE7B,oDAAuB;AAEvB,sDAIgC;AAChC,wEAAgD;AAEjC,KAAK,UAAU,eAAe,CAAC,cAA+B;;IAC3E,MAAM,KAAK,GAAmB,gBAAC,CAAC,MAAM,CAAC,kCAAsB,EAAE,cAAc,CAAC,CAAC;IAE/E,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC;QACd,MAAM,GAAG,GAAW,mBAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC5C,MAAM,GAAG,GAAyB,IAAA,yBAAe,EAAC,mBAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC,CAAC;QAClF,KAAK,CAAC,cAAc,GAAG,GAAG,CAAC;QAC3B,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC;IAClB,CAAC;IAED,IAAI,MAAA,KAAK,CAAC,cAAc,0CAAE,KAAK,EAAE,CAAC;QAChC,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IACpD,CAAC;IAED,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAChC,CAAC","sourcesContent":["import path from 'node:path';\n\nimport _ from 'lodash';\n\nimport {\n DefaultNpmCheckOptions,\n type INpmCheckPackageJson,\n type INpmCheckState\n} from './interfaces/INpmCheck';\nimport readPackageJson from './ReadPackageJson';\n\nexport default async function initializeState(initialOptions?: INpmCheckState): Promise<INpmCheckState> {\n const state: INpmCheckState = _.extend(DefaultNpmCheckOptions, initialOptions);\n\n if (state.cwd) {\n const cwd: string = path.resolve(state.cwd);\n const pkg: INpmCheckPackageJson = readPackageJson(path.join(cwd, 'package.json'));\n state.cwdPackageJson = pkg;\n state.cwd = cwd;\n }\n\n if (state.cwdPackageJson?.error) {\n return Promise.reject(state.cwdPackageJson.error);\n }\n\n return Promise.resolve(state);\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReadPackageJson.d.ts","sourceRoot":"","sources":["../src/ReadPackageJson.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEtE,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,oBAAoB,CAa9E"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.default = readPackageJson;
|
|
7
|
+
const lodash_1 = __importDefault(require("lodash"));
|
|
8
|
+
function readPackageJson(filename) {
|
|
9
|
+
let pkg = undefined;
|
|
10
|
+
let error = undefined;
|
|
11
|
+
try {
|
|
12
|
+
pkg = require(filename);
|
|
13
|
+
}
|
|
14
|
+
catch (e) {
|
|
15
|
+
if (e && typeof e === 'object' && 'code' in e && e.code === 'MODULE_NOT_FOUND') {
|
|
16
|
+
error = new Error(`A package.json was not found at ${filename}`);
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
error = new Error(`A package.json was found at ${filename}, but it is not valid.`);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
return lodash_1.default.extend({ devDependencies: {}, dependencies: {}, error: error }, pkg);
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=ReadPackageJson.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReadPackageJson.js","sourceRoot":"","sources":["../src/ReadPackageJson.ts"],"names":[],"mappings":";;;;;AAIA,kCAaC;AAjBD,oDAAuB;AAIvB,SAAwB,eAAe,CAAC,QAAgB;IACtD,IAAI,GAAG,GAAqC,SAAS,CAAC;IACtD,IAAI,KAAK,GAAsB,SAAS,CAAC;IACzC,IAAI,CAAC;QACH,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC1B,CAAC;IAAC,OAAO,CAAU,EAAE,CAAC;QACpB,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;YAC/E,KAAK,GAAG,IAAI,KAAK,CAAC,mCAAmC,QAAQ,EAAE,CAAC,CAAC;QACnE,CAAC;aAAM,CAAC;YACN,KAAK,GAAG,IAAI,KAAK,CAAC,+BAA+B,QAAQ,wBAAwB,CAAC,CAAC;QACrF,CAAC;IACH,CAAC;IACD,OAAO,gBAAC,CAAC,MAAM,CAAC,EAAE,eAAe,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,GAAG,CAAC,CAAC;AAChF,CAAC","sourcesContent":["import _ from 'lodash';\n\nimport type { INpmCheckPackageJson } from './interfaces/INpmCheck.ts';\n\nexport default function readPackageJson(filename: string): INpmCheckPackageJson {\n let pkg: INpmCheckPackageJson | undefined = undefined;\n let error: Error | undefined = undefined;\n try {\n pkg = require(filename);\n } catch (e: unknown) {\n if (e && typeof e === 'object' && 'code' in e && e.code === 'MODULE_NOT_FOUND') {\n error = new Error(`A package.json was not found at ${filename}`);\n } else {\n error = new Error(`A package.json was found at ${filename}, but it is not valid.`);\n }\n }\n return _.extend({ devDependencies: {}, dependencies: {}, error: error }, pkg);\n}\n"]}
|
package/lib/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,YAAY,CAAC;AACjD,YAAY,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AACpF,YAAY,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC"}
|
package/lib/index.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.NpmCheck = void 0;
|
|
7
|
+
var NpmCheck_1 = require("./NpmCheck");
|
|
8
|
+
Object.defineProperty(exports, "NpmCheck", { enumerable: true, get: function () { return __importDefault(NpmCheck_1).default; } });
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AAAA,uCAAiD;AAAxC,qHAAA,OAAO,OAAY","sourcesContent":["export { default as NpmCheck } from './NpmCheck';\nexport type { INpmCheckPackageSummary } from './interfaces/INpmCheckPackageSummary';\nexport type { INpmCheckState } from './interfaces/INpmCheck';\n"]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { INpmCheckPackageSummary } from './INpmCheckPackageSummary';
|
|
2
|
+
export interface INpmCheckPackageJson {
|
|
3
|
+
name?: string;
|
|
4
|
+
version?: string;
|
|
5
|
+
devDependencies: Record<string, string>;
|
|
6
|
+
dependencies: Record<string, string>;
|
|
7
|
+
error?: Error;
|
|
8
|
+
scripts?: Record<string, string>;
|
|
9
|
+
[key: string]: any;
|
|
10
|
+
}
|
|
11
|
+
export interface INpmCheckState {
|
|
12
|
+
cwd: string;
|
|
13
|
+
cwdPackageJson?: INpmCheckPackageJson;
|
|
14
|
+
packages?: INpmCheckPackageSummary[];
|
|
15
|
+
}
|
|
16
|
+
export declare const DefaultNpmCheckOptions: INpmCheckState;
|
|
17
|
+
//# sourceMappingURL=INpmCheck.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"INpmCheck.d.ts","sourceRoot":"","sources":["../../src/interfaces/INpmCheck.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEzE,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEjC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,cAAc,CAAC,EAAE,oBAAoB,CAAC;IACtC,QAAQ,CAAC,EAAE,uBAAuB,EAAE,CAAC;CACtC;AAED,eAAO,MAAM,sBAAsB,EAAE,cAIpC,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DefaultNpmCheckOptions = void 0;
|
|
4
|
+
exports.DefaultNpmCheckOptions = {
|
|
5
|
+
cwd: process.cwd(),
|
|
6
|
+
cwdPackageJson: { devDependencies: {}, dependencies: {} },
|
|
7
|
+
packages: undefined
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=INpmCheck.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"INpmCheck.js","sourceRoot":"","sources":["../../src/interfaces/INpmCheck.ts"],"names":[],"mappings":";;;AAmBa,QAAA,sBAAsB,GAAmB;IACpD,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;IAClB,cAAc,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE;IACzD,QAAQ,EAAE,SAAS;CACpB,CAAC","sourcesContent":["import type { INpmCheckPackageSummary } from './INpmCheckPackageSummary';\n\nexport interface INpmCheckPackageJson {\n name?: string;\n version?: string;\n devDependencies: Record<string, string>;\n dependencies: Record<string, string>;\n error?: Error;\n scripts?: Record<string, string>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [key: string]: any;\n}\n\nexport interface INpmCheckState {\n cwd: string;\n cwdPackageJson?: INpmCheckPackageJson;\n packages?: INpmCheckPackageSummary[];\n}\n\nexport const DefaultNpmCheckOptions: INpmCheckState = {\n cwd: process.cwd(),\n cwdPackageJson: { devDependencies: {}, dependencies: {} },\n packages: undefined\n};\n"]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export type INpmCheckVersionBumpType = '' | 'build' | 'major' | 'premajor' | 'minor' | 'preminor' | 'patch' | 'prepatch' | 'prerelease' | 'nonSemver' | undefined | null;
|
|
2
|
+
export interface INpmCheckPackageSummary {
|
|
3
|
+
moduleName: string;
|
|
4
|
+
homepage: string;
|
|
5
|
+
regError?: Error;
|
|
6
|
+
pkgError?: Error;
|
|
7
|
+
latest: string;
|
|
8
|
+
installed: string;
|
|
9
|
+
notInstalled: boolean;
|
|
10
|
+
packageJson: string;
|
|
11
|
+
devDependency: boolean;
|
|
12
|
+
mismatch: boolean;
|
|
13
|
+
bump?: INpmCheckVersionBumpType;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=INpmCheckPackageSummary.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"INpmCheckPackageSummary.d.ts","sourceRoot":"","sources":["../../src/interfaces/INpmCheckPackageSummary.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,wBAAwB,GAChC,EAAE,GACF,OAAO,GACP,OAAO,GACP,UAAU,GACV,OAAO,GACP,UAAU,GACV,OAAO,GACP,UAAU,GACV,YAAY,GACZ,WAAW,GACX,SAAS,GAET,IAAI,CAAC;AAET,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,KAAK,CAAC;IACjB,QAAQ,CAAC,EAAE,KAAK,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,OAAO,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,wBAAwB,CAAC;CACjC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"INpmCheckPackageSummary.js","sourceRoot":"","sources":["../../src/interfaces/INpmCheckPackageSummary.ts"],"names":[],"mappings":"","sourcesContent":["export type INpmCheckVersionBumpType =\n | ''\n | 'build'\n | 'major'\n | 'premajor'\n | 'minor'\n | 'preminor'\n | 'patch'\n | 'prepatch'\n | 'prerelease'\n | 'nonSemver'\n | undefined\n // eslint-disable-next-line @rushstack/no-new-null\n | null;\n\nexport interface INpmCheckPackageSummary {\n moduleName: string; // name of the module.\n homepage: string; // url to the home page.\n regError?: Error; // error communicating with the registry\n pkgError?: Error; // error reading the package.json\n latest: string; // latest according to the registry.\n installed: string; // version installed\n notInstalled: boolean; // Is it installed?\n packageJson: string; // Version or range requested in the parent package.json.\n devDependency: boolean; // Is this a devDependency?\n mismatch: boolean; // Does the version installed not match the range in package.json?\n bump?: INpmCheckVersionBumpType; // What kind of bump is required to get the latest\n}\n"]}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export interface INpmRegistryInfo {
|
|
2
|
+
latest?: string;
|
|
3
|
+
next?: string;
|
|
4
|
+
versions?: string[];
|
|
5
|
+
homepage?: string;
|
|
6
|
+
error?: string;
|
|
7
|
+
}
|
|
8
|
+
interface INpmCheckRegistryInfoBugs {
|
|
9
|
+
url?: string;
|
|
10
|
+
}
|
|
11
|
+
interface INpmCheckRepository {
|
|
12
|
+
url?: string;
|
|
13
|
+
}
|
|
14
|
+
export interface INpmCheckPackageVersion {
|
|
15
|
+
homepage?: string;
|
|
16
|
+
bugs?: INpmCheckRegistryInfoBugs;
|
|
17
|
+
repository?: INpmCheckRepository;
|
|
18
|
+
}
|
|
19
|
+
export interface INpmCheckRegistryData {
|
|
20
|
+
versions: Record<string, INpmCheckPackageVersion>;
|
|
21
|
+
['dist-tags']: {
|
|
22
|
+
latest: string;
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
export {};
|
|
26
|
+
//# sourceMappingURL=INpmCheckRegistry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"INpmCheckRegistry.d.ts","sourceRoot":"","sources":["../../src/interfaces/INpmCheckRegistry.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,yBAAyB;IACjC,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AACD,UAAU,mBAAmB;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AACD,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,yBAAyB,CAAC;IACjC,UAAU,CAAC,EAAE,mBAAmB,CAAC;CAClC;AACD,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;IAClD,CAAC,WAAW,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CACnC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"INpmCheckRegistry.js","sourceRoot":"","sources":["../../src/interfaces/INpmCheckRegistry.ts"],"names":[],"mappings":"","sourcesContent":["export interface INpmRegistryInfo {\n latest?: string;\n next?: string;\n versions?: string[];\n homepage?: string;\n error?: string;\n}\n\ninterface INpmCheckRegistryInfoBugs {\n url?: string;\n}\ninterface INpmCheckRepository {\n url?: string;\n}\nexport interface INpmCheckPackageVersion {\n homepage?: string;\n bugs?: INpmCheckRegistryInfoBugs;\n repository?: INpmCheckRepository;\n}\nexport interface INpmCheckRegistryData {\n versions: Record<string, INpmCheckPackageVersion>;\n ['dist-tags']: { latest: string };\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BestGuessHomepage.test.d.ts","sourceRoot":"","sources":["../../src/tests/BestGuessHomepage.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BestGuessHomepage.test.js","sourceRoot":"","sources":["../../src/tests/BestGuessHomepage.test.ts"],"names":[],"mappings":";;;;;AAAA,oBAAoB;AACpB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AAE7D,6EAAqD;AAGrD,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,CAAC,IAAA,2BAAiB,EAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,IAAI,GAA0B;YAClC,QAAQ,EAAE;gBACR,MAAM,EAAE;oBACN,QAAQ,EAAE,sBAAsB;iBACjC;aACF;YACD,WAAW,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE;SAClC,CAAC;QACF,MAAM,CAAC,IAAA,2BAAiB,EAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,IAAI,GAA0B;YAClC,QAAQ,EAAE;gBACR,MAAM,EAAE;oBACN,IAAI,EAAE,EAAE,GAAG,EAAE,kBAAkB,EAAE;iBAClC;aACF;YACD,WAAW,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE;SAClC,CAAC;QACF,MAAM,CAAC,IAAA,2BAAiB,EAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;QACrE,MAAM,IAAI,GAA0B;YAClC,QAAQ,EAAE;gBACR,MAAM,EAAE;oBACN,UAAU,EAAE,EAAE,GAAG,EAAE,kBAAkB,EAAE;iBACxC;aACF;YACD,WAAW,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE;SAClC,CAAC;QACF,MAAM,CAAC,IAAA,2BAAiB,EAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;QACnE,MAAM,IAAI,GAA0B;YAClC,QAAQ,EAAE;gBACR,MAAM,EAAE,EAAE;aACX;YACD,WAAW,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE;SAClC,CAAC;QACF,MAAM,CAAC,IAAA,2BAAiB,EAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["// Mock gitUrl.parse\njest.mock('giturl', () => ({ parse: (url: string) => url }));\n\nimport bestGuessHomepage from '../BestGuessHomepage';\nimport type { INpmCheckRegistryData } from '../interfaces/INpmCheckRegistry';\n\ndescribe('bestGuessHomepage', () => {\n it('returns false if data is undefined', () => {\n expect(bestGuessHomepage(undefined)).toBe(false);\n });\n\n it('returns homepage if present', () => {\n const data: INpmCheckRegistryData = {\n versions: {\n latest: {\n homepage: 'https://homepage.com'\n }\n },\n 'dist-tags': { latest: 'latest' }\n };\n expect(bestGuessHomepage(data)).toBe('https://homepage.com');\n });\n\n it('returns bugs.url if homepage is missing', () => {\n const data: INpmCheckRegistryData = {\n versions: {\n latest: {\n bugs: { url: 'https://bugs.com' }\n }\n },\n 'dist-tags': { latest: 'latest' }\n };\n expect(bestGuessHomepage(data)).toBe('https://bugs.com');\n });\n\n it('returns repository.url if homepage and bugs.url are missing', () => {\n const data: INpmCheckRegistryData = {\n versions: {\n latest: {\n repository: { url: 'https://repo.com' }\n }\n },\n 'dist-tags': { latest: 'latest' }\n };\n expect(bestGuessHomepage(data)).toBe('https://repo.com');\n });\n\n it('returns false if no homepage, bugs.url, or repository.url', () => {\n const data: INpmCheckRegistryData = {\n versions: {\n latest: {}\n },\n 'dist-tags': { latest: 'latest' }\n };\n expect(bestGuessHomepage(data)).toBe(false);\n });\n});\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CreatePackageSummary.test.d.ts","sourceRoot":"","sources":["../../src/tests/CreatePackageSummary.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CreatePackageSummary.test.js","sourceRoot":"","sources":["../../src/tests/CreatePackageSummary.test.ts"],"names":[],"mappings":"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","sourcesContent":["jest.mock('../GetLatestFromRegistry');\njest.mock('../ReadPackageJson');\njest.mock('../FindModulePath');\n\nimport createPackageSummary from '../CreatePackageSummary';\nimport getLatestFromRegistry from '../GetLatestFromRegistry';\nimport readPackageJson from '../ReadPackageJson';\nimport findModulePath from '../FindModulePath';\nimport type { INpmCheckState, INpmCheckPackageJson } from '../interfaces/INpmCheck';\nimport type { INpmRegistryInfo } from '../interfaces/INpmCheckRegistry';\nimport type { INpmCheckPackageSummary } from '../interfaces/INpmCheckPackageSummary';\n\nconst mockGetLatestFromRegistry = getLatestFromRegistry as jest.MockedFunction<typeof getLatestFromRegistry>;\nconst mockReadPackageJson = readPackageJson as jest.MockedFunction<typeof readPackageJson>;\nconst mockFindModulePath = findModulePath as jest.MockedFunction<typeof findModulePath>;\n\ndescribe('createPackageSummary', () => {\n afterEach(() => {\n jest.clearAllMocks();\n });\n\n it('returns false for private package', async () => {\n mockFindModulePath.mockReturnValue('/mock/path/private-pkg');\n mockReadPackageJson.mockReturnValue({\n dependencies: {},\n devDependencies: {},\n private: true\n } as INpmCheckPackageJson);\n const state: INpmCheckState = {\n cwd: process.cwd(),\n cwdPackageJson: { dependencies: {}, devDependencies: {} }\n };\n const result: INpmCheckPackageSummary | boolean = await createPackageSummary('private-pkg', state);\n expect(result).toBe(false);\n });\n\n it('returns false for invalid semver range', async () => {\n mockFindModulePath.mockReturnValue('/mock/path');\n mockReadPackageJson.mockReturnValue({\n dependencies: {},\n devDependencies: {}\n } as INpmCheckPackageJson);\n const state: INpmCheckState = {\n cwd: process.cwd(),\n cwdPackageJson: {\n dependencies: { 'bad-pkg': 'github:foo/bar' },\n devDependencies: {}\n }\n };\n const result: INpmCheckPackageSummary | boolean = await createPackageSummary('bad-pkg', state);\n expect(result).toBe(false);\n });\n\n it('returns summary for valid package', async () => {\n mockFindModulePath.mockReturnValue('/mock/path');\n mockReadPackageJson.mockReturnValue({\n dependencies: {},\n devDependencies: {}\n } as INpmCheckPackageJson);\n mockGetLatestFromRegistry.mockResolvedValue({\n latest: '2.0.0',\n next: '3.0.0',\n versions: ['1.0.0', '2.0.0', '3.0.0'],\n homepage: 'https://homepage.com'\n } as INpmRegistryInfo);\n const state: INpmCheckState = {\n cwd: process.cwd(),\n cwdPackageJson: { dependencies: { 'good-pkg': '1.0.0' }, devDependencies: {} },\n unusedDependencies: ['good-pkg'],\n missingFromPackageJson: {}\n } as INpmCheckState;\n const result: INpmCheckPackageSummary | boolean = await createPackageSummary('good-pkg', state);\n expect(result).toBeTruthy();\n expect(result).toHaveProperty('moduleName', 'good-pkg');\n expect(result).toHaveProperty('homepage', 'https://homepage.com');\n expect(result).toHaveProperty('latest', '2.0.0');\n expect(result).toHaveProperty('installed', '1.0.0');\n });\n});\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FindModulePath.test.d.ts","sourceRoot":"","sources":["../../src/tests/FindModulePath.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FindModulePath.test.js","sourceRoot":"","sources":["../../src/tests/FindModulePath.test.ts"],"names":[],"mappings":";;;;;AAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;IACvB,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1C,mCAAmC;CACpC,CAAC,CAAC,CAAC;AAEJ,uEAA+C;AAE/C,0DAA6B;AAE7B,MAAM,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;AAEtC,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,SAAS,CAAC,GAAG,EAAE;QACb,IAAI;aACD,KAAK,CAAC,MAAM,EAAE,kBAAkB,CAAC;aACjC,kBAAkB,CAAC,GAAG,EAAE,CAAC,CAAC,yBAAyB,EAAE,iCAAiC,CAAC,CAAC,CAAC;IAC9F,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,GAAG,EAAE;QACZ,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAC5B,MAAM,KAAK,GAAmB,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAoB,CAAC;QACpF,MAAM,MAAM,GAAG,IAAA,wBAAc,EAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QAClD,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,mBAAI,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QAClC,MAAM,KAAK,GAAmB,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAoB,CAAC;QACpF,MAAM,MAAM,GAAG,IAAA,wBAAc,EAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;QACvD,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,mBAAI,CAAC,IAAI,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["jest.mock('path', () => ({\n join: jest.fn((...args) => args.join('/'))\n // Add other path methods as needed\n}));\n\nimport findModulePath from '../FindModulePath';\nimport type { INpmCheckState } from '../interfaces/INpmCheck';\nimport path from 'node:path';\n\nconst Module = require('node:module');\n\ndescribe('findModulePath', () => {\n beforeAll(() => {\n jest\n .spyOn(Module, '_nodeModulePaths')\n .mockImplementation(() => ['/mock/path/node_modules', '/another/mock/path/node_modules']);\n });\n\n afterAll(() => {\n jest.restoreAllMocks();\n });\n\n it('returns found path', () => {\n const state: INpmCheckState = { cwd: '/test/cwd', global: false } as INpmCheckState;\n const result = findModulePath('my-module', state);\n expect(result).toBe(path.join('/test/cwd', 'my-module'));\n });\n\n it('returns first tried path', () => {\n const state: INpmCheckState = { cwd: '/test/cwd', global: false } as INpmCheckState;\n const result = findModulePath('missing-module', state);\n expect(result).toBe(path.join('/test/cwd', 'missing-module'));\n });\n});\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GetLatestFromRegistry.test.d.ts","sourceRoot":"","sources":["../../src/tests/GetLatestFromRegistry.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GetLatestFromRegistry.test.js","sourceRoot":"","sources":["../../src/tests/GetLatestFromRegistry.test.ts"],"names":[],"mappings":";;;;;AAAA,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AAE1B,qFAAkD;AAClD,gEAAuC;AAGvC,MAAM,eAAe,GAAG,sBAAsD,CAAC;AAE/E,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,UAAU,CAAC,GAAG,EAAE;QACd,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;QACnD,eAAe,CAAC,iBAAiB,CAAC;YAChC,QAAQ,EAAE;gBACR,OAAO,EAAE;oBACP,QAAQ,EAAE,sBAAsB;iBACjC;gBACD,OAAO,EAAE;oBACP,IAAI,EAAE,EAAE,GAAG,EAAE,kBAAkB,EAAE;iBAClC;aACF;YACD,WAAW,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE;SACT,CAAC,CAAC;QAC1C,MAAM,MAAM,GAAqB,MAAM,IAAA,+BAAU,EAAC,cAAc,CAAC,CAAC;QAClE,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACjD,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC/C,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,UAAU,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;QAC9D,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,UAAU,EAAE,sBAAsB,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;QACnD,eAAe,CAAC,iBAAiB,CAAC,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC;QAC9D,MAAM,MAAM,GAAqB,MAAM,IAAA,+BAAU,EAAC,cAAc,CAAC,CAAC;QAClE,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QACvC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,KAAK,IAAI,EAAE;QAClD,eAAe,CAAC,iBAAiB,CAAC;YAChC,QAAQ,EAAE;gBACR,OAAO,EAAE,EAAE;gBACX,OAAO,EAAE,EAAE;aACZ;YACD,WAAW,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE;SACT,CAAC,CAAC;QAC1C,MAAM,MAAM,GAAqB,MAAM,IAAA,+BAAU,EAAC,cAAc,CAAC,CAAC;QAClE,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["jest.mock('package-json');\n\nimport getNpmInfo from '../GetLatestFromRegistry';\nimport packageJson from 'package-json';\nimport type { INpmRegistryInfo } from '../interfaces/INpmCheckRegistry';\n\nconst mockPackageJson = packageJson as jest.MockedFunction<typeof packageJson>;\n\ndescribe('getNpmInfo', () => {\n beforeEach(() => {\n jest.clearAllMocks();\n });\n\n it('returns registry info with homepage', async () => {\n mockPackageJson.mockResolvedValue({\n versions: {\n '1.0.0': {\n homepage: 'https://homepage.com'\n },\n '2.0.0': {\n bugs: { url: 'https://bugs.com' }\n }\n },\n 'dist-tags': { latest: '1.0.0', next: '2.0.0' }\n } as unknown as packageJson.FullMetadata);\n const result: INpmRegistryInfo = await getNpmInfo('test-package');\n expect(result).toHaveProperty('latest', '1.0.0');\n expect(result).toHaveProperty('next', '2.0.0');\n expect(result).toHaveProperty('versions', ['1.0.0', '2.0.0']);\n expect(result).toHaveProperty('homepage', 'https://homepage.com');\n });\n\n it('returns error if packageJson throws', async () => {\n mockPackageJson.mockRejectedValue(new Error('Registry down'));\n const result: INpmRegistryInfo = await getNpmInfo('test-package');\n expect(result).toHaveProperty('error');\n expect(result.error).toBe('Registry error Registry down');\n });\n\n it('returns \"\" homepage if not present', async () => {\n mockPackageJson.mockResolvedValue({\n versions: {\n '1.0.0': {},\n '2.0.0': {}\n },\n 'dist-tags': { latest: '1.0.0', next: '2.0.0' }\n } as unknown as packageJson.FullMetadata);\n const result: INpmRegistryInfo = await getNpmInfo('test-package');\n expect(result).toHaveProperty('homepage', '');\n });\n});\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NpmCheck.test.d.ts","sourceRoot":"","sources":["../../src/tests/NpmCheck.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NpmCheck.test.js","sourceRoot":"","sources":["../../src/tests/NpmCheck.test.ts"],"names":[],"mappings":";;;;;AAAA,IAAI,CAAC,IAAI,CAAC,yBAAyB,EAAE,GAAG,EAAE,CAAC,CAAC;IAC1C,UAAU,EAAE,IAAI;IAChB,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;CACnC,CAAC,CAAC,CAAC;AAEJ,mFAA2D;AAC3D,MAAM,wBAAwB,GAAG,8BAAwE,CAAC;AAG1G,2DAAmC;AAEnC,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;IACxB,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;QACjD,wBAAwB,CAAC,kBAAkB,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC;YACjE,UAAU;YACV,QAAQ,EAAE,EAAE;YACZ,MAAM,EAAE,EAAE;YACV,SAAS,EAAE,EAAE;YACb,YAAY,EAAE,IAAI;YAClB,aAAa,EAAE,EAAE;YACjB,WAAW,EAAE,EAAE;YACf,gBAAgB,EAAE,SAAS;YAC3B,aAAa,EAAE,KAAK;YACpB,cAAc,EAAE,KAAK;YACrB,QAAQ,EAAE,KAAK;YACf,IAAI,EAAE,SAAS;SAChB,CAAC,CAAC,CAAC;QACJ,MAAM,MAAM,GAAmB,MAAM,IAAA,kBAAQ,EAAC;YAC5C,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;SACnB,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;QACtC,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClD,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["jest.mock('../CreatePackageSummary', () => ({\n __esModule: true,\n default: jest.fn(async () => ({}))\n}));\n\nimport createPackageSummary from '../CreatePackageSummary';\nconst mockCreatePackageSummary = createPackageSummary as jest.MockedFunction<typeof createPackageSummary>;\n\nimport type { INpmCheckState } from '../interfaces/INpmCheck';\nimport NpmCheck from '../NpmCheck';\n\ndescribe('NpmCheck', () => {\n it('should mimic rush initial options', async () => {\n mockCreatePackageSummary.mockImplementation(async (moduleName) => ({\n moduleName,\n homepage: '',\n latest: '',\n installed: '',\n notInstalled: true,\n packageWanted: '',\n packageJson: '',\n notInPackageJson: undefined,\n devDependency: false,\n peerDependency: false,\n mismatch: false,\n bump: undefined\n }));\n const result: INpmCheckState = await NpmCheck({\n cwd: process.cwd()\n });\n expect(result.packages).toBeDefined();\n if (result.packages && result.packages.length > 0) {\n expect(result.packages[0]).toHaveProperty('moduleName');\n }\n });\n});\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NpmCheckState.test.d.ts","sourceRoot":"","sources":["../../src/tests/NpmCheckState.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NpmCheckState.test.js","sourceRoot":"","sources":["../../src/tests/NpmCheckState.test.ts"],"names":[],"mappings":";;;;;AACA,qEAA+C;AAE/C,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,EAAE,CAAC,oCAAoC,EAAE,KAAK,IAAI,EAAE;QAClD,MAAM,KAAK,GAAmB,MAAM,IAAA,uBAAe,GAAE,CAAC;QACtD,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;QAC5B,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QACtC,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QACpD,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import type { INpmCheckState } from '../interfaces/INpmCheck';\nimport initializeState from '../NpmCheckState';\n\ndescribe('NpmCheckState', () => {\n it('should create with default options', async () => {\n const state: INpmCheckState = await initializeState();\n expect(state).toBeDefined();\n expect(state.cwd).toBe(process.cwd());\n expect(state.cwdPackageJson).toHaveProperty('name');\n expect(state.cwdPackageJson).toHaveProperty('version');\n });\n});\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReadPackageJson.test.d.ts","sourceRoot":"","sources":["../../src/tests/ReadPackageJson.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReadPackageJson.test.js","sourceRoot":"","sources":["../../src/tests/ReadPackageJson.test.ts"],"names":[],"mappings":";;;;;AAAA,0DAA6B;AAE7B,yEAAiD;AAGjD,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;QAC5D,MAAM,QAAQ,GAAW,mBAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC,CAAC;QAClE,MAAM,MAAM,GAAyB,MAAM,IAAA,yBAAe,EAAC,QAAQ,CAAC,CAAC;QAErE,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;QAC7B,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import path from 'node:path';\n\nimport readPackageJson from '../ReadPackageJson';\nimport type { INpmCheckPackageJson } from '../interfaces/INpmCheck';\n\ndescribe('readPackageJson', () => {\n it('should return valid packageJson if it exists', async () => {\n const fileName: string = path.join(process.cwd(), 'package.json');\n const result: INpmCheckPackageJson = await readPackageJson(fileName);\n\n expect(result).toBeDefined();\n expect(result).toHaveProperty('name');\n });\n});\n"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@rushstack/npm-check-fork",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "A fork of npm-check.",
|
|
5
|
+
"repository": {
|
|
6
|
+
"type": "git",
|
|
7
|
+
"url": "https://github.com/microsoft/rushstack.git",
|
|
8
|
+
"directory": "libraries/npm-check-fork"
|
|
9
|
+
},
|
|
10
|
+
"homepage": "https://github.com/dylang/npm-check",
|
|
11
|
+
"main": "lib/index.js",
|
|
12
|
+
"typings": "lib/index.d.ts",
|
|
13
|
+
"license": "MIT",
|
|
14
|
+
"dependencies": {
|
|
15
|
+
"giturl": "^2.0.0",
|
|
16
|
+
"lodash": "~4.17.15",
|
|
17
|
+
"package-json": "^10.0.1",
|
|
18
|
+
"semver": "~7.5.4",
|
|
19
|
+
"throat": "^6.0.2"
|
|
20
|
+
},
|
|
21
|
+
"devDependencies": {
|
|
22
|
+
"@types/lodash": "4.14.116",
|
|
23
|
+
"@types/semver": "7.5.0",
|
|
24
|
+
"eslint": "~9.37.0",
|
|
25
|
+
"local-node-rig": "1.0.0",
|
|
26
|
+
"@rushstack/heft": "1.1.1"
|
|
27
|
+
},
|
|
28
|
+
"scripts": {
|
|
29
|
+
"build": "heft build --clean",
|
|
30
|
+
"test": "heft test --clean",
|
|
31
|
+
"_phase:build": "heft run --only build -- --clean",
|
|
32
|
+
"_phase:test": "heft run --only test -- --clean"
|
|
33
|
+
}
|
|
34
|
+
}
|