superlib 1.0.21 → 1.2.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/dist/basic/BaseError.d.ts +4 -0
- package/dist/basic/BaseError.d.ts.map +1 -0
- package/dist/basic/BaseError.js +6 -0
- package/dist/basic/Result.d.ts +29 -0
- package/dist/basic/Result.d.ts.map +1 -0
- package/dist/basic/Result.js +55 -0
- package/dist/basic/ResultAsync.d.ts +9 -0
- package/dist/basic/ResultAsync.d.ts.map +1 -0
- package/dist/basic/ResultAsync.js +41 -0
- package/dist/basic/assert.d.ts +8 -0
- package/dist/basic/assert.d.ts.map +1 -0
- package/dist/basic/assert.js +25 -0
- package/dist/basic/index.d.ts +5 -0
- package/dist/basic/index.d.ts.map +1 -0
- package/dist/basic/index.js +4 -0
- package/dist/decorators/Retry.d.ts +3 -0
- package/dist/decorators/Retry.d.ts.map +1 -0
- package/dist/decorators/Retry.js +9 -0
- package/dist/decorators/Timeout.d.ts +3 -0
- package/dist/decorators/Timeout.d.ts.map +1 -0
- package/dist/decorators/Timeout.js +9 -0
- package/dist/decorators/common.d.ts +2 -0
- package/dist/decorators/common.d.ts.map +1 -0
- package/dist/decorators/common.js +17 -0
- package/dist/decorators/index.d.ts +3 -0
- package/dist/decorators/index.d.ts.map +1 -0
- package/dist/decorators/index.js +2 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/platform/JsonHttpClient/JsonHttpClient.d.ts +18 -0
- package/dist/platform/JsonHttpClient/JsonHttpClient.d.ts.map +1 -0
- package/dist/platform/JsonHttpClient/JsonHttpClient.js +48 -0
- package/dist/platform/JsonHttpClient/index.d.ts +2 -0
- package/dist/platform/JsonHttpClient/index.d.ts.map +1 -0
- package/dist/platform/JsonHttpClient/index.js +1 -0
- package/dist/platform/ProcessContext/EnvReader.d.ts +12 -0
- package/dist/platform/ProcessContext/EnvReader.d.ts.map +1 -0
- package/dist/platform/ProcessContext/EnvReader.js +56 -0
- package/dist/platform/ProcessContext/ProcessContext.d.ts +40 -0
- package/dist/platform/ProcessContext/ProcessContext.d.ts.map +1 -0
- package/dist/platform/ProcessContext/ProcessContext.js +57 -0
- package/dist/platform/ProcessContext/index.d.ts +3 -0
- package/dist/platform/ProcessContext/index.d.ts.map +1 -0
- package/dist/platform/ProcessContext/index.js +2 -0
- package/dist/platform/filesystem/AbsolutePath.d.ts +18 -0
- package/dist/platform/filesystem/AbsolutePath.d.ts.map +1 -0
- package/dist/platform/filesystem/AbsolutePath.js +28 -0
- package/dist/platform/filesystem/FileSystem.d.ts +19 -0
- package/dist/platform/filesystem/FileSystem.d.ts.map +1 -0
- package/dist/platform/filesystem/FileSystem.js +92 -0
- package/dist/platform/filesystem/IFileSystem.d.ts +46 -0
- package/dist/platform/filesystem/IFileSystem.d.ts.map +1 -0
- package/dist/platform/filesystem/IFileSystem.js +1 -0
- package/dist/platform/filesystem/MemoryFileSystem.d.ts +29 -0
- package/dist/platform/filesystem/MemoryFileSystem.d.ts.map +1 -0
- package/dist/platform/filesystem/MemoryFileSystem.js +126 -0
- package/dist/platform/filesystem/index.d.ts +5 -0
- package/dist/platform/filesystem/index.d.ts.map +1 -0
- package/dist/platform/filesystem/index.js +4 -0
- package/dist/platform/get-port/checkPort.d.ts +2 -0
- package/dist/platform/get-port/checkPort.d.ts.map +1 -0
- package/dist/platform/get-port/checkPort.js +20 -0
- package/dist/platform/get-port/getPort.d.ts +8 -0
- package/dist/platform/get-port/getPort.d.ts.map +1 -0
- package/dist/platform/get-port/getPort.js +13 -0
- package/dist/platform/safeFetch/index.d.ts +2 -0
- package/dist/platform/safeFetch/index.d.ts.map +1 -0
- package/dist/platform/safeFetch/index.js +1 -0
- package/dist/platform/safeFetch/makeSafeFetch.d.ts +23 -0
- package/dist/platform/safeFetch/makeSafeFetch.d.ts.map +1 -0
- package/dist/platform/safeFetch/makeSafeFetch.js +19 -0
- package/dist/random/FixedRandom.d.ts +12 -0
- package/dist/random/FixedRandom.d.ts.map +1 -0
- package/dist/random/FixedRandom.js +43 -0
- package/dist/random/Random.d.ts +18 -0
- package/dist/random/Random.d.ts.map +1 -0
- package/dist/random/Random.js +24 -0
- package/dist/random/RealRandom.d.ts +5 -0
- package/dist/random/RealRandom.d.ts.map +1 -0
- package/dist/random/RealRandom.js +6 -0
- package/dist/random/SeededRandom.d.ts +10 -0
- package/dist/random/SeededRandom.d.ts.map +1 -0
- package/dist/random/SeededRandom.js +15 -0
- package/dist/random/index.d.ts +5 -0
- package/dist/random/index.d.ts.map +1 -0
- package/dist/random/index.js +4 -0
- package/dist/schema/StandardSchema.d.ts +60 -0
- package/dist/schema/StandardSchema.d.ts.map +1 -0
- package/dist/schema/StandardSchema.js +1 -0
- package/dist/schema/validateSchema.d.ts +9 -0
- package/dist/schema/validateSchema.d.ts.map +1 -0
- package/dist/schema/validateSchema.js +9 -0
- package/dist/task/all.d.ts +14 -0
- package/dist/task/all.d.ts.map +1 -0
- package/dist/task/all.js +61 -0
- package/dist/task/index.d.ts +15 -0
- package/dist/task/index.d.ts.map +1 -0
- package/dist/task/index.js +11 -0
- package/dist/task/pipe.d.ts +8 -0
- package/dist/task/pipe.d.ts.map +1 -0
- package/dist/task/pipe.js +11 -0
- package/dist/task/retry.d.ts +27 -0
- package/dist/task/retry.d.ts.map +1 -0
- package/dist/task/retry.js +61 -0
- package/dist/task/timeout.d.ts +21 -0
- package/dist/task/timeout.d.ts.map +1 -0
- package/dist/task/timeout.js +39 -0
- package/dist/task/types.d.ts +3 -0
- package/dist/task/types.d.ts.map +1 -0
- package/dist/task/types.js +1 -0
- package/dist/time/Clock.d.ts +18 -0
- package/dist/time/Clock.d.ts.map +1 -0
- package/dist/time/Clock.js +26 -0
- package/dist/time/index.d.ts +4 -0
- package/dist/time/index.d.ts.map +1 -0
- package/dist/time/index.js +3 -0
- package/dist/time/sleep.d.ts +3 -0
- package/dist/time/sleep.d.ts.map +1 -0
- package/dist/time/sleep.js +5 -0
- package/dist/time/temporal.d.ts +5 -0
- package/dist/time/temporal.d.ts.map +1 -0
- package/dist/time/temporal.js +20 -0
- package/dist/types/index.d.ts +4 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +1 -0
- package/package.json +57 -17
- package/README.md +0 -46
- package/elm-projects.js +0 -62
- package/index.js +0 -3
- package/lib.js +0 -117
- package/libm.js +0 -52
- package/projects.js +0 -145
- package/providers/github.js +0 -22
- package/providers/lib/connection.js +0 -19
- package/providers/npmjs.js +0 -22
- package/tests/providers.js +0 -13
- package/tests/utilities.js +0 -13
- package/utilities.js +0 -116
package/package.json
CHANGED
|
@@ -1,27 +1,67 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "superlib",
|
|
3
|
-
"version": "1.0
|
|
4
|
-
"description": "
|
|
5
|
-
"
|
|
6
|
-
|
|
7
|
-
|
|
3
|
+
"version": "1.2.0",
|
|
4
|
+
"description": "A missing standard library for TypeScript, providing utilities for async orchestration, error handling, filesystem abstraction, and common patterns",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"async",
|
|
7
|
+
"result",
|
|
8
|
+
"stdlib",
|
|
9
|
+
"task",
|
|
10
|
+
"typescript",
|
|
11
|
+
"utilities"
|
|
12
|
+
],
|
|
13
|
+
"license": "MIT",
|
|
14
|
+
"author": "Kris Kaczor",
|
|
8
15
|
"repository": {
|
|
9
16
|
"type": "git",
|
|
10
|
-
"url": "https://github.com/
|
|
17
|
+
"url": "git+https://github.com/superlibdotdev/superlib.git"
|
|
11
18
|
},
|
|
12
|
-
"
|
|
13
|
-
"
|
|
14
|
-
|
|
19
|
+
"files": [
|
|
20
|
+
"dist"
|
|
21
|
+
],
|
|
22
|
+
"type": "module",
|
|
23
|
+
"main": "./dist/index.js",
|
|
24
|
+
"module": "./dist/index.js",
|
|
25
|
+
"types": "./dist/index.d.ts",
|
|
26
|
+
"exports": {
|
|
27
|
+
".": {
|
|
28
|
+
"types": "./dist/index.d.ts",
|
|
29
|
+
"default": "./dist/index.js"
|
|
30
|
+
},
|
|
31
|
+
"./platform/filesystem": {
|
|
32
|
+
"types": "./dist/platform/filesystem/index.d.ts",
|
|
33
|
+
"default": "./dist/platform/filesystem/index.js"
|
|
34
|
+
},
|
|
35
|
+
"./platform/get-port": {
|
|
36
|
+
"types": "./dist/platform/get-port/index.d.ts",
|
|
37
|
+
"default": "./dist/platform/get-port/index.js"
|
|
38
|
+
},
|
|
39
|
+
"./platform/JsonHttpClient": {
|
|
40
|
+
"types": "./dist/platform/JsonHttpClient/index.d.ts",
|
|
41
|
+
"default": "./dist/platform/JsonHttpClient/index.js"
|
|
42
|
+
},
|
|
43
|
+
"./platform/ProcessContext": {
|
|
44
|
+
"types": "./dist/platform/ProcessContext/index.d.ts",
|
|
45
|
+
"default": "./dist/platform/ProcessContext/index.js"
|
|
46
|
+
},
|
|
47
|
+
"./platform/safeFetch": {
|
|
48
|
+
"types": "./dist/platform/safeFetch/index.d.ts",
|
|
49
|
+
"default": "./dist/platform/safeFetch/index.js"
|
|
50
|
+
}
|
|
15
51
|
},
|
|
16
|
-
"
|
|
17
|
-
"
|
|
52
|
+
"scripts": {
|
|
53
|
+
"build": "tsc -p tsconfig.build.json && bun run scripts/fix-imports.ts",
|
|
54
|
+
"lint": "oxlint --type-aware --type-check --deny-warnings",
|
|
55
|
+
"lint:fix": "bun run lint --fix",
|
|
56
|
+
"test": "bun test",
|
|
57
|
+
"fix": "cd ../.. && bun run fix"
|
|
18
58
|
},
|
|
19
59
|
"dependencies": {
|
|
20
|
-
"
|
|
21
|
-
"
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
"
|
|
25
|
-
"
|
|
60
|
+
"remeda": "^2.32.0",
|
|
61
|
+
"temporal-polyfill": "^0.3.0"
|
|
62
|
+
},
|
|
63
|
+
"devDependencies": {
|
|
64
|
+
"@types/node": "^22.0.0",
|
|
65
|
+
"zod": "^4.3.5"
|
|
26
66
|
}
|
|
27
67
|
}
|
package/README.md
DELETED
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
# Simple dependency analysis tool for Node and Elm
|
|
2
|
-
|
|
3
|
-
[NpmJs](https://www.npmjs.com/package/superlib)
|
|
4
|
-
|
|
5
|
-
## Install
|
|
6
|
-
|
|
7
|
-
npm install -g superlib
|
|
8
|
-
|
|
9
|
-
## Requirements
|
|
10
|
-
|
|
11
|
-
Node 5.7.0+
|
|
12
|
-
|
|
13
|
-
## Help
|
|
14
|
-
|
|
15
|
-
```bash
|
|
16
|
-
lib --help
|
|
17
|
-
libm --help
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
## Usage
|
|
21
|
-
|
|
22
|
-
Go to npm/elm project or a folder with many npm project subdirectories and run one of these commands:
|
|
23
|
-
|
|
24
|
-
lib
|
|
25
|
-
lib [dep]
|
|
26
|
-
libm
|
|
27
|
-
libm [dep]
|
|
28
|
-
|
|
29
|
-
or
|
|
30
|
-
|
|
31
|
-
lib --path /Path/To/Project
|
|
32
|
-
libm --path /Path/To/Project
|
|
33
|
-
|
|
34
|
-
## Tips
|
|
35
|
-
|
|
36
|
-
If you use `iTerm2 v3.0`, you can click on the links in terminal with `CMD+click`.
|
|
37
|
-
|
|
38
|
-
## Screenshots
|
|
39
|
-
|
|
40
|
-
lib
|
|
41
|
-
|
|
42
|
-

|
|
43
|
-
|
|
44
|
-
libm
|
|
45
|
-
|
|
46
|
-

|
package/elm-projects.js
DELETED
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
var fs = require('fs');
|
|
2
|
-
var pth = require('path');
|
|
3
|
-
var util = require('./utilities');
|
|
4
|
-
var colors = require('colors');
|
|
5
|
-
|
|
6
|
-
class ElmProjects {
|
|
7
|
-
// scan(path) {
|
|
8
|
-
// return util.scanDirSync(path)
|
|
9
|
-
// .filter(dir => this.valid(dir))
|
|
10
|
-
// .map(dir => this.info(dir))
|
|
11
|
-
// }
|
|
12
|
-
|
|
13
|
-
valid(path) {
|
|
14
|
-
return util.fileExists(`${path}/elm-package.json`);
|
|
15
|
-
//return util.fileExists(`${path}/elm-stuff/exact-dependencies.json`)
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
// returns the info for one project
|
|
19
|
-
info(path) {
|
|
20
|
-
if (this.valid(path)) {
|
|
21
|
-
let pkg = require(`${path}/elm-package.json`);
|
|
22
|
-
return pkg;
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
exactDeps(path) {
|
|
27
|
-
return new Promise((s, r) => {
|
|
28
|
-
let exactDepsPath = `${path}/elm-stuff/exact-dependencies.json`;
|
|
29
|
-
if (util.fileExists(exactDepsPath)) {
|
|
30
|
-
s(require(exactDepsPath));
|
|
31
|
-
} else {
|
|
32
|
-
r('Run "elm package install" first');
|
|
33
|
-
}
|
|
34
|
-
});
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
exactDepsFullInfo(path) {
|
|
38
|
-
if (this.valid(path)) {
|
|
39
|
-
return new Promise((s, r) => {
|
|
40
|
-
let info = this.info(path);
|
|
41
|
-
this.exactDeps(path)
|
|
42
|
-
.then(projectInfo => {
|
|
43
|
-
s(
|
|
44
|
-
Object.keys(projectInfo).map(dep => {
|
|
45
|
-
let depPkg = require(`${path}/elm-stuff/packages/${dep}/${projectInfo[dep]}/elm-package.json`);
|
|
46
|
-
let original = !!Object.keys(info.dependencies).find(d => d == dep);
|
|
47
|
-
return {
|
|
48
|
-
name: dep,
|
|
49
|
-
original: original,
|
|
50
|
-
version: projectInfo[dep],
|
|
51
|
-
summary: depPkg.summary
|
|
52
|
-
};
|
|
53
|
-
})
|
|
54
|
-
);
|
|
55
|
-
})
|
|
56
|
-
.catch(e => r(e));
|
|
57
|
-
});
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
module.exports = ElmProjects;
|
package/index.js
DELETED
package/lib.js
DELETED
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
var colors = require('colors');
|
|
3
|
-
var fs = require('fs');
|
|
4
|
-
var util = require('./utilities');
|
|
5
|
-
var path = require('path');
|
|
6
|
-
|
|
7
|
-
var Projects = require('./projects');
|
|
8
|
-
var projects = new Projects();
|
|
9
|
-
|
|
10
|
-
var ElmProjects = require('./elm-projects');
|
|
11
|
-
var elmProjects = new ElmProjects();
|
|
12
|
-
|
|
13
|
-
// Parse command line options
|
|
14
|
-
var program = require('commander');
|
|
15
|
-
|
|
16
|
-
var pkg = require(path.join(__dirname, 'package.json'));
|
|
17
|
-
|
|
18
|
-
program
|
|
19
|
-
.version(pkg.version)
|
|
20
|
-
.description('Awesomest npm dependencies analysis tool')
|
|
21
|
-
.option('-p, --path <path>', 'Project(s) on which to run the command')
|
|
22
|
-
.parse(process.argv);
|
|
23
|
-
|
|
24
|
-
let dep = program.args[0];
|
|
25
|
-
|
|
26
|
-
function isDepInstalled(projectPath, dep) {
|
|
27
|
-
return util.isDirectory(path.join(projectPath, dep));
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
function colorizeDeps(projectPath, deps) {
|
|
31
|
-
let modulesPath = path.join(projectPath, 'node_modules');
|
|
32
|
-
return deps.map(d => {
|
|
33
|
-
let str = isDepInstalled(modulesPath, d) ? colors.yellow(d) : colors.red(d);
|
|
34
|
-
return dep && d.toLowerCase().indexOf(dep.toLowerCase()) > -1 ? colors.bold(str) : str;
|
|
35
|
-
});
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
function showProject(project, dep) {
|
|
39
|
-
if ((dep && projects.hasDep(project, dep)) || !dep) {
|
|
40
|
-
let dir = '';
|
|
41
|
-
if (project.name != project.folder) {
|
|
42
|
-
dir = ` (directory: ${project.folder})`;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
console.log(colors.cyan(`[ ${project.name} ]`) + dir);
|
|
46
|
-
|
|
47
|
-
if (project.dependencies) {
|
|
48
|
-
let deps = projects.depList(project);
|
|
49
|
-
console.log(`Deps (${deps.length}): ${colorizeDeps(project.path, deps).join(', ')}`);
|
|
50
|
-
|
|
51
|
-
if (dep) {
|
|
52
|
-
for (let match of projects.findDeps(project, dep)) {
|
|
53
|
-
console.log(colors.yellow.bold(match) + ': ' + colors.green(`https://www.npmjs.com/package/${match}`));
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
// check for linked npm projects
|
|
59
|
-
let modulesPath = path.join(project.path, 'node_modules');
|
|
60
|
-
if (util.isDirectory(modulesPath)) {
|
|
61
|
-
fs.readdir(modulesPath, function(err, dirs) {
|
|
62
|
-
for (let dir of dirs) {
|
|
63
|
-
fs.lstat(`${modulesPath}/${dir}`, function(err, stats) {
|
|
64
|
-
//fs.statSync can't read isSymbolicLink()
|
|
65
|
-
if (err) throw err;
|
|
66
|
-
if (stats.isSymbolicLink()) {
|
|
67
|
-
console.log(colors.red(`<${project.name}> linked package: ${dir}`));
|
|
68
|
-
}
|
|
69
|
-
});
|
|
70
|
-
}
|
|
71
|
-
});
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
if (project.bin) {
|
|
75
|
-
console.log();
|
|
76
|
-
let bin = project.bin;
|
|
77
|
-
for (let key in bin) {
|
|
78
|
-
if (bin.hasOwnProperty(key)) {
|
|
79
|
-
console.log('%s -> %s', colors.green(`bin/${key}`), bin[key]);
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
console.log();
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
let cwd = process.cwd();
|
|
89
|
-
let projecPath = program.path || cwd;
|
|
90
|
-
|
|
91
|
-
// ELM
|
|
92
|
-
if (elmProjects.valid(projecPath)) {
|
|
93
|
-
let info = elmProjects.info(projecPath);
|
|
94
|
-
elmProjects
|
|
95
|
-
.exactDepsFullInfo(projecPath)
|
|
96
|
-
.then(deps => {
|
|
97
|
-
deps.forEach(dep => {
|
|
98
|
-
let depName = dep.original ? colors.yellow(dep.name) : dep.name;
|
|
99
|
-
console.log(`${depName}: ${colors.green(dep.version)}`);
|
|
100
|
-
console.log(colors.green(dep.summary));
|
|
101
|
-
console.log();
|
|
102
|
-
});
|
|
103
|
-
})
|
|
104
|
-
.catch(e => console.log(colors.red(e)));
|
|
105
|
-
} else {
|
|
106
|
-
// NPM
|
|
107
|
-
let project = projects.info(projecPath);
|
|
108
|
-
|
|
109
|
-
if (project) {
|
|
110
|
-
showProject(project, dep);
|
|
111
|
-
projects.showDep(projects.projectDepInfoFormat(project.path));
|
|
112
|
-
} else {
|
|
113
|
-
for (let project of projects.scan(projecPath)) {
|
|
114
|
-
showProject(project, dep);
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
}
|
package/libm.js
DELETED
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
var colors = require('colors');
|
|
3
|
-
var fs = require('fs');
|
|
4
|
-
var util = require('./utilities');
|
|
5
|
-
var path = require('path');
|
|
6
|
-
|
|
7
|
-
var npmjs = require('./providers/npmjs');
|
|
8
|
-
|
|
9
|
-
var Projects = require('./projects');
|
|
10
|
-
var projects = new Projects();
|
|
11
|
-
|
|
12
|
-
// Parse command line options
|
|
13
|
-
var program = require('commander');
|
|
14
|
-
|
|
15
|
-
var pkg = require(path.join(__dirname, 'package.json'));
|
|
16
|
-
|
|
17
|
-
program
|
|
18
|
-
.version(pkg.version)
|
|
19
|
-
.description('Awesomest npm dependencies analysis tool')
|
|
20
|
-
.option('-p, --path <path>', 'Project(s) on which to run the command')
|
|
21
|
-
.parse(process.argv);
|
|
22
|
-
|
|
23
|
-
function nameEmail(name, email) {
|
|
24
|
-
return email ? `${name} <${email}>` : name;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
let filter = program.args[0];
|
|
28
|
-
|
|
29
|
-
let projecPath = program.path || process.cwd();
|
|
30
|
-
let project = projects.info(projecPath);
|
|
31
|
-
|
|
32
|
-
let deps = project ? projects.depsWithInfo(project) : projects.depsWithInfoPath(projecPath);
|
|
33
|
-
deps = util.arraySortByKey(deps, 'name');
|
|
34
|
-
|
|
35
|
-
util
|
|
36
|
-
.asyncMap(deps, function(dep, callback) {
|
|
37
|
-
if (dep.missing) {
|
|
38
|
-
npmjs.info(dep.name, info => callback(Object.assign(info, { projects: dep.projects })));
|
|
39
|
-
} else {
|
|
40
|
-
callback(dep);
|
|
41
|
-
}
|
|
42
|
-
})
|
|
43
|
-
.then(deps => {
|
|
44
|
-
for (let dep of deps) {
|
|
45
|
-
if (!filter || (filter && util.cointainsStringInsensitive(dep.name, filter))) {
|
|
46
|
-
projects.showDep(dep);
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
})
|
|
50
|
-
.catch(error => {
|
|
51
|
-
console.log(error);
|
|
52
|
-
});
|
package/projects.js
DELETED
|
@@ -1,145 +0,0 @@
|
|
|
1
|
-
var fs = require('fs');
|
|
2
|
-
var pth = require('path');
|
|
3
|
-
var colors = require('colors');
|
|
4
|
-
|
|
5
|
-
var util = require('./utilities');
|
|
6
|
-
|
|
7
|
-
var GitHub = require('./providers/github');
|
|
8
|
-
let github = new GitHub();
|
|
9
|
-
|
|
10
|
-
class Projects {
|
|
11
|
-
scan(path) {
|
|
12
|
-
return util
|
|
13
|
-
.scanDirSync(path)
|
|
14
|
-
.filter(dir => this.valid(dir))
|
|
15
|
-
.map(dir => this.info(dir));
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
valid(path) {
|
|
19
|
-
return util.fileExists(`${path}/package.json`);
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
// returns the info for one project
|
|
23
|
-
info(path) {
|
|
24
|
-
if (this.valid(path)) {
|
|
25
|
-
let pkg = JSON.parse(fs.readFileSync(`${path}/package.json`));
|
|
26
|
-
|
|
27
|
-
return {
|
|
28
|
-
name: pkg.name,
|
|
29
|
-
folder: pth.basename(path),
|
|
30
|
-
version: pkg.version,
|
|
31
|
-
path: path,
|
|
32
|
-
dependencies: pkg.dependencies,
|
|
33
|
-
bin: pkg.bin
|
|
34
|
-
};
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
depList(project) {
|
|
39
|
-
return project.dependencies ? Object.keys(project.dependencies) : [];
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
hasDep(project, term) {
|
|
43
|
-
return project.dependencies && this.findDeps(project, term).length > 0;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
findDeps(project, term) {
|
|
47
|
-
return util.listSearch(this.depList(project), term);
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
projectDepInfoFormat(projectPath, dep) {
|
|
51
|
-
let pkgFile = `${projectPath}/package.json`;
|
|
52
|
-
if (util.fileExists(pkgFile)) {
|
|
53
|
-
let pkg = JSON.parse(fs.readFileSync(pkgFile));
|
|
54
|
-
|
|
55
|
-
let obj = {
|
|
56
|
-
name: pkg.name,
|
|
57
|
-
version: pkg.version,
|
|
58
|
-
description: pkg.description,
|
|
59
|
-
homepage: pkg.homepage,
|
|
60
|
-
author: pkg.author, // email, name, url
|
|
61
|
-
npmuser: pkg._npmUser // email, name, url
|
|
62
|
-
};
|
|
63
|
-
|
|
64
|
-
if (pkg['repository']) {
|
|
65
|
-
if (pkg['repository']['url']) {
|
|
66
|
-
let repo = github.repoName(pkg['repository']['url']);
|
|
67
|
-
obj.github = `https://github.com/${repo}`;
|
|
68
|
-
} else {
|
|
69
|
-
// "repository": "expressjs/express"
|
|
70
|
-
obj.github = `https://github.com/${pkg['repository']}`;
|
|
71
|
-
}
|
|
72
|
-
} else {
|
|
73
|
-
obj.github = '<missing>';
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
return obj;
|
|
77
|
-
} else {
|
|
78
|
-
return {
|
|
79
|
-
missing: true,
|
|
80
|
-
name: dep,
|
|
81
|
-
description: '<missing>',
|
|
82
|
-
github: '<missing>',
|
|
83
|
-
homepage: '<missing>'
|
|
84
|
-
};
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
depInfo(projectPath, dep) {
|
|
89
|
-
return this.projectDepInfoFormat(`${projectPath}/node_modules/${dep}`, dep);
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
// scans all the dependencies for the project and reads the package.json of each one
|
|
93
|
-
depsWithInfo(project) {
|
|
94
|
-
return this.depList(project).map(function(dep) {
|
|
95
|
-
return Object.assign(this.depInfo(project.path, dep), {
|
|
96
|
-
project: project.name
|
|
97
|
-
});
|
|
98
|
-
}, this);
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
// get all unique dependencies across all projects
|
|
102
|
-
// if some project doesn't have node_modules currently but another one has, then dependency info is still gathered from where it can be
|
|
103
|
-
// each dependency has to be present only once across all scanned projects
|
|
104
|
-
depsWithInfoPath(path) {
|
|
105
|
-
let depProjects = {};
|
|
106
|
-
|
|
107
|
-
let list = this.scan(path).reduce(
|
|
108
|
-
(deps, project) =>
|
|
109
|
-
deps.concat(
|
|
110
|
-
this.depsWithInfo(project).filter(dep => {
|
|
111
|
-
if (!depProjects[dep.name]) {
|
|
112
|
-
depProjects[dep.name] = [];
|
|
113
|
-
}
|
|
114
|
-
depProjects[dep.name] = depProjects[dep.name].concat(dep.project);
|
|
115
|
-
let match = deps.find(d => d.name == dep.name);
|
|
116
|
-
return !match || match.missing;
|
|
117
|
-
})
|
|
118
|
-
),
|
|
119
|
-
[]
|
|
120
|
-
);
|
|
121
|
-
|
|
122
|
-
// remove missing but only if they are not the only occurence
|
|
123
|
-
let condition = dep => dep.missing && list.filter(d => d.name == dep.name && !d.missing).length > 0;
|
|
124
|
-
return list.filter(dep => !condition(dep)).map(dep => Object.assign(dep, { projects: depProjects[dep.name].sort() }));
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
showDep(dep) {
|
|
128
|
-
console.log(colors.yellow(`${dep.name} >>> `) + colors.green(dep.description));
|
|
129
|
-
if (dep.github) {
|
|
130
|
-
console.log('GitHub: ' + colors.cyan(dep.github));
|
|
131
|
-
}
|
|
132
|
-
if (dep.homepage) {
|
|
133
|
-
console.log('Homepage: ' + colors.cyan(dep.homepage));
|
|
134
|
-
}
|
|
135
|
-
console.log('Version: ' + colors.green(dep.version));
|
|
136
|
-
if (dep.projects) {
|
|
137
|
-
console.log('Projects: ' + colors.yellow(dep.projects.join(', ')));
|
|
138
|
-
}
|
|
139
|
-
//if(dep.author) console.log('Author: ' + nameEmail(dep.author.name, dep.author.email))
|
|
140
|
-
//console.log('Npm User: ' + nameEmail(dep.npmuser.name, dep.npmuser.email))
|
|
141
|
-
console.log();
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
module.exports = Projects;
|
package/providers/github.js
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
let Connection = require('./lib/connection');
|
|
2
|
-
|
|
3
|
-
class GitHub {
|
|
4
|
-
constructor() {
|
|
5
|
-
this.conn = new Connection('https://api.github.com');
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
repoInfo(repo, callback) {
|
|
9
|
-
this.conn.get(`repos/${repo}`, {}, callback);
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
repoName(url) {
|
|
13
|
-
url = url.trim();
|
|
14
|
-
if (url.endsWith('.git')) url = url.slice(0, url.length - 4);
|
|
15
|
-
// git@github.com:documentationjs/documentation.git
|
|
16
|
-
// https://github.com/davidhq/superlib
|
|
17
|
-
let matches = /github.com[\/\:]([\w\.\-_]+)\/([\w\.\-_]+)/i.exec(url);
|
|
18
|
-
if (matches) return `${matches[1]}/${matches[2]}`;
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
module.exports = GitHub;
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
var request = require('superagent');
|
|
2
|
-
|
|
3
|
-
class Connection {
|
|
4
|
-
constructor(api_base) {
|
|
5
|
-
this.api_base = api_base;
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
get(path, options, callback) {
|
|
9
|
-
request.get(`${this.api_base}/${path}`).send(options).set('Content-Type', 'application/json').set('Accept', 'application/json').end(function(err, res) {
|
|
10
|
-
if (res.ok) {
|
|
11
|
-
callback(res.body);
|
|
12
|
-
} else {
|
|
13
|
-
console.log('Oh no! error ' + res.text);
|
|
14
|
-
}
|
|
15
|
-
});
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
module.exports = Connection;
|
package/providers/npmjs.js
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
// --
|
|
2
|
-
var util = require('../utilities');
|
|
3
|
-
var Xray = require('x-ray');
|
|
4
|
-
var x = Xray();
|
|
5
|
-
|
|
6
|
-
module.exports = {
|
|
7
|
-
info: (pkg, callback) => {
|
|
8
|
-
let url = `https://www.npmjs.com/package/${pkg}`;
|
|
9
|
-
x(url, {
|
|
10
|
-
description: '.package-description',
|
|
11
|
-
links: x('.sidebar .box', ['a@href'])
|
|
12
|
-
})((err, obj) => {
|
|
13
|
-
let github_url = obj.links.filter(link => link.startsWith('https://github.com') && util.countOccurences(link, '/') == 4)[0];
|
|
14
|
-
callback({
|
|
15
|
-
name: pkg,
|
|
16
|
-
description: obj.description,
|
|
17
|
-
github: github_url,
|
|
18
|
-
github_repo: github_url && github_url.replace('https://github.com/', '')
|
|
19
|
-
});
|
|
20
|
-
});
|
|
21
|
-
}
|
|
22
|
-
};
|
package/tests/providers.js
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
var test = require('tape');
|
|
2
|
-
|
|
3
|
-
test('github parsing repo from url', function(t) {
|
|
4
|
-
t.plan(4);
|
|
5
|
-
|
|
6
|
-
var GitHub = require('../providers/github');
|
|
7
|
-
let github = new GitHub();
|
|
8
|
-
|
|
9
|
-
t.equal(github.repoName('https://github.com/davidhq/cryptonite'), 'davidhq/cryptonite');
|
|
10
|
-
t.equal(github.repoName('https://GitHub.com/davidhq/cryptonite'), 'davidhq/cryptonite');
|
|
11
|
-
t.equal(github.repoName('https://github.com/visionmedia/superagent#readme'), 'visionmedia/superagent');
|
|
12
|
-
t.equal(github.repoName('git+ssh://git@github.com/Marak/colors.js.git'), 'Marak/colors.js');
|
|
13
|
-
});
|
package/tests/utilities.js
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
var test = require('tape');
|
|
2
|
-
var util = require('../utilities');
|
|
3
|
-
|
|
4
|
-
test('utilities', function (t) {
|
|
5
|
-
t.plan(5)
|
|
6
|
-
|
|
7
|
-
t.true(util.listSearch(['aaa', 'bbb', 'ccc'], 'BB').length == 1)
|
|
8
|
-
|
|
9
|
-
t.deepEqual(util.arraySortByKey([ { name: 'b' }, { name: 'z' }, { name: 'a' } ], 'name'), [ { name: 'a' }, { name: 'b' }, { name: 'z' } ])
|
|
10
|
-
t.deepEqual(util.arraySortByKey([ { name: 'b' }, { }, { name: 'a' } ], 'name'), [ { name: 'a' }, { name: 'b' }, { } ])
|
|
11
|
-
t.deepEqual(util.arraySortByKey([ { name: 2 }, { name: 1000 }, { name: 1 } ], 'name', true), [ { name: 1 }, { name: 2 }, { name: 1000 } ])
|
|
12
|
-
t.deepEqual(util.arraySortByKey([ { name: 2 }, { }, { name: 1 } ], 'name', true), [ { name: 1 }, { name: 2 }, { } ])
|
|
13
|
-
})
|