datagrok-tools 4.14.12 → 4.14.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +7 -0
- package/bin/commands/help.js +7 -4
- package/bin/commands/link.js +66 -25
- package/package-template/tsconfig.json +0 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
package/bin/commands/help.js
CHANGED
|
@@ -175,13 +175,13 @@ Options:
|
|
|
175
175
|
--link-package Link the packages to local utils
|
|
176
176
|
--record Records the test execution process in mp4 format
|
|
177
177
|
--verbose Prints detailed information about passed and skipped tests in the console
|
|
178
|
-
--core Runs packages & core tests (applicable
|
|
178
|
+
--core Runs packages & core tests (applicable for DevTools packages only)
|
|
179
179
|
--benchmark Runs tests in benchmark mode
|
|
180
180
|
--stress-test Runs shuffled stress-test only
|
|
181
181
|
--order Specify order for tests invocation
|
|
182
182
|
--tags Filter tests by tag name for run
|
|
183
183
|
--testRepeat Set amount of tests repeats
|
|
184
|
-
--browsers-count
|
|
184
|
+
--browsers-count Set amount of browsers for tests run
|
|
185
185
|
|
|
186
186
|
Run tests of all or specified packages
|
|
187
187
|
|
|
@@ -191,11 +191,14 @@ https://datagrok.ai/help/develop/how-to/test-packages#local-testing
|
|
|
191
191
|
const HELP_LINK = `
|
|
192
192
|
Usage: grok link
|
|
193
193
|
|
|
194
|
-
|
|
194
|
+
Links \`datagrok-api\`, all necessary libraries and packages for local development.
|
|
195
|
+
Uses \`npm link\` unless the --path option specified.
|
|
196
|
+
By default, it links packages from the parent directory of the repository's root.
|
|
195
197
|
|
|
196
198
|
Options:
|
|
197
199
|
--dev Links also dev dependencies
|
|
198
|
-
--path Instead of npm
|
|
200
|
+
--path Instead of npm link, sets dependencies in package.json to local
|
|
201
|
+
--repo-only Links packages only from the current repository
|
|
199
202
|
--unlink Unlinks packages and sets last versions instead of local path in package.json dependencies
|
|
200
203
|
--verbose Prints detailed information about linked packages
|
|
201
204
|
`;
|
package/bin/commands/link.js
CHANGED
|
@@ -8,37 +8,42 @@ exports.link = link;
|
|
|
8
8
|
var _fs = _interopRequireDefault(require("fs"));
|
|
9
9
|
var _path = _interopRequireDefault(require("path"));
|
|
10
10
|
var _utils = require("../utils/utils");
|
|
11
|
+
var _glob = require("glob");
|
|
11
12
|
/* eslint-disable valid-jsdoc */
|
|
12
13
|
|
|
13
|
-
const
|
|
14
|
-
const
|
|
14
|
+
const excludedPackages = ['@datagrok-misc/eslint-plugin-config', 'wiki-merge', 'datagrok-tools', ''];
|
|
15
|
+
const versionDependencyRegex = /(?:\^)?\d+\.\d+\.\d+/;
|
|
16
|
+
let packagesInRepo;
|
|
17
|
+
let packagesOutOfRepo;
|
|
15
18
|
const curDir = process.cwd();
|
|
16
19
|
let repositoryDir = curDir;
|
|
20
|
+
let containerDir = curDir;
|
|
21
|
+
let dirStep = _path.default.dirname(curDir);
|
|
17
22
|
let currentPackage;
|
|
18
23
|
let localPackageDependencies;
|
|
19
24
|
let packagesToLink;
|
|
20
|
-
while (_path.default.dirname(
|
|
21
|
-
if (
|
|
22
|
-
|
|
25
|
+
while (_path.default.dirname(dirStep) !== dirStep) {
|
|
26
|
+
if (_fs.default.existsSync(_path.default.join(dirStep, '.git')) && repositoryDir === curDir) repositoryDir = dirStep;
|
|
27
|
+
if (!_fs.default.existsSync(_path.default.join(dirStep, '.git')) && repositoryDir !== curDir && containerDir === curDir) {
|
|
28
|
+
containerDir = dirStep;
|
|
29
|
+
break;
|
|
30
|
+
}
|
|
31
|
+
dirStep = _path.default.dirname(dirStep);
|
|
23
32
|
}
|
|
24
33
|
let verbose = false;
|
|
25
34
|
let pathMode = false;
|
|
26
35
|
let devMode = false;
|
|
27
36
|
let unlink = false;
|
|
28
|
-
const apiDir = _path.default.join(repositoryDir, 'js-api');
|
|
29
|
-
const libDir = _path.default.join(repositoryDir, 'libraries');
|
|
30
|
-
const packageDir = _path.default.join(repositoryDir, 'packages');
|
|
31
|
-
const apiPackageName = 'datagrok-api';
|
|
32
|
-
const libName = '@datagrok-libraries/';
|
|
33
|
-
const packageName = '@datagrok/';
|
|
34
37
|
async function link(args) {
|
|
35
38
|
verbose = args.verbose ?? false;
|
|
36
39
|
devMode = args.dev ?? false;
|
|
37
40
|
pathMode = args.path ?? false;
|
|
38
41
|
unlink = args.unlink ?? false;
|
|
42
|
+
let collectedPackages = collectAvaliablePackages(args['repo-only']);
|
|
43
|
+
packagesInRepo = collectedPackages.packagesInRepo;
|
|
44
|
+
packagesOutOfRepo = collectedPackages.packagesOutOfRepo;
|
|
39
45
|
localPackageDependencies = [];
|
|
40
46
|
packagesToLink = new Set();
|
|
41
|
-
collectPackagesData(curDir);
|
|
42
47
|
currentPackage = new PackageData(curDir);
|
|
43
48
|
if (unlink) {
|
|
44
49
|
await unlinkPackages();
|
|
@@ -68,9 +73,8 @@ function collectPackagesData(packagePath = curDir) {
|
|
|
68
73
|
}
|
|
69
74
|
function collectPacakgeDataFromJsonObject(object) {
|
|
70
75
|
let result = [];
|
|
71
|
-
for (let dependencyName of Object.keys(object)) {
|
|
72
|
-
|
|
73
|
-
if (dependencyName === apiPackageName) result = result.concat(parsePackageDependencies(dependencyName, apiDir));else if (dependencyName.includes(libName)) result = result.concat(parsePackageDependencies(dependencyName, _path.default.join(libDir, nameSplitted[nameSplitted.length - 1])));else if (dependencyName.includes(packageName)) result = result.concat(parsePackageDependencies(dependencyName, _path.default.join(packageDir, toCamelCase(nameSplitted[nameSplitted.length - 1]))));
|
|
76
|
+
for (let dependencyName of Object.keys(object ?? {})) {
|
|
77
|
+
if (packagesInRepo[dependencyName]) result = result.concat(parsePackageDependencies(dependencyName, _path.default.dirname(packagesInRepo[dependencyName].path)));else if (packagesOutOfRepo[dependencyName]) result = result.concat(parsePackageDependencies(dependencyName, _path.default.dirname(packagesOutOfRepo[dependencyName].path)));
|
|
74
78
|
}
|
|
75
79
|
return result;
|
|
76
80
|
}
|
|
@@ -86,10 +90,49 @@ function parsePackageDependencies(dependencyName, pathToLink) {
|
|
|
86
90
|
result.push(dependencyName);
|
|
87
91
|
return result;
|
|
88
92
|
}
|
|
93
|
+
function collectAvaliablePackages(noOutLink = false) {
|
|
94
|
+
let repositoryPackages = collectAvaliablePackagesPathesFromDir(repositoryDir);
|
|
95
|
+
let commonPakcages = collectAvaliablePackagesPathesFromDir(containerDir, repositoryDir);
|
|
96
|
+
const packagesInRepoBaseInfo = parsePackages(repositoryPackages);
|
|
97
|
+
const packagesOutOfRepoBaseInfo = noOutLink ? [] : parsePackages(commonPakcages);
|
|
98
|
+
const packagesInRepo = Object.fromEntries(packagesInRepoBaseInfo.map(({
|
|
99
|
+
name,
|
|
100
|
+
...rest
|
|
101
|
+
}) => [name, rest]));
|
|
102
|
+
const packagesOutOfRepo = Object.fromEntries(packagesOutOfRepoBaseInfo.map(({
|
|
103
|
+
name,
|
|
104
|
+
...rest
|
|
105
|
+
}) => [name, rest]));
|
|
106
|
+
return {
|
|
107
|
+
packagesInRepo: packagesInRepo,
|
|
108
|
+
packagesOutOfRepo: packagesOutOfRepo
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
function collectAvaliablePackagesPathesFromDir(dir, dirToExclude = '') {
|
|
112
|
+
let res = _glob.glob.sync('./**/package.json', {
|
|
113
|
+
cwd: dir,
|
|
114
|
+
ignore: ['**/node_modules/**']
|
|
115
|
+
}).map(e => _path.default.join(dir, e));
|
|
116
|
+
if (dirToExclude.length > 0) res = res.filter(e => !e.includes(dirToExclude));
|
|
117
|
+
return res;
|
|
118
|
+
}
|
|
119
|
+
function parsePackages(packagPathes) {
|
|
120
|
+
let res = packagPathes.map(e => {
|
|
121
|
+
let packageData = {};
|
|
122
|
+
if (_fs.default.existsSync(e)) {
|
|
123
|
+
packageData.path = e;
|
|
124
|
+
const packageJson = JSON.parse(_fs.default.readFileSync(e, 'utf8'));
|
|
125
|
+
packageData.name = packageJson.name;
|
|
126
|
+
packageData.version = packageJson.version;
|
|
127
|
+
}
|
|
128
|
+
return packageData;
|
|
129
|
+
});
|
|
130
|
+
return res;
|
|
131
|
+
}
|
|
89
132
|
async function unlinkPackages() {
|
|
90
|
-
const
|
|
91
|
-
if (currentPackage)
|
|
92
|
-
for (let packageData of
|
|
133
|
+
const packages = [...localPackageDependencies];
|
|
134
|
+
if (currentPackage) packages.push(currentPackage);
|
|
135
|
+
for (let packageData of packages) {
|
|
93
136
|
if (excludedPackages.includes(packageData.name)) continue;
|
|
94
137
|
if (verbose) console.log(`Package ${packageData.name} is unlinking`);
|
|
95
138
|
const packageJsonPath = _path.default.join(packageData.packagePath, 'package.json');
|
|
@@ -103,11 +146,10 @@ async function unlinkPackages() {
|
|
|
103
146
|
function updateDependenciesToVersion(packageData, dependecyNode) {
|
|
104
147
|
for (let dependency of packageData.dependencies) {
|
|
105
148
|
if (excludedPackages.includes(dependency)) continue;
|
|
106
|
-
if (dependecyNode[dependency]) {
|
|
149
|
+
if (dependecyNode[dependency] && !versionDependencyRegex.test(dependecyNode[dependency])) {
|
|
107
150
|
const packageToLink = (localPackageDependencies.filter(e => e.name === dependency) ?? [])[0];
|
|
108
151
|
if (packageToLink) {
|
|
109
|
-
|
|
110
|
-
if (startIndex !== -1) dependecyNode[dependency] = `^${packageToLink.version}`;
|
|
152
|
+
dependecyNode[dependency] = `^${packagesInRepo[dependency]?.version ?? packagesOutOfRepo[dependency]?.version}`;
|
|
111
153
|
}
|
|
112
154
|
}
|
|
113
155
|
}
|
|
@@ -154,15 +196,14 @@ async function linkPathMode(packageData) {
|
|
|
154
196
|
_fs.default.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2));
|
|
155
197
|
}
|
|
156
198
|
function updateDependenciesToLocal(packageData, dependecyNode) {
|
|
157
|
-
const
|
|
158
|
-
const
|
|
199
|
+
const backRouteForCont = `../`.repeat(packageData.packagePath.replace(containerDir, '').split(_path.default.sep).length - 1);
|
|
200
|
+
const backRouteForRepo = `../`.repeat(packageData.packagePath.replace(repositoryDir, '').split(_path.default.sep).length - 1);
|
|
159
201
|
for (let dependency of packageData.dependencies) {
|
|
160
202
|
if (excludedPackages.includes(dependency)) continue;
|
|
161
203
|
if (dependecyNode[dependency]) {
|
|
162
204
|
const packageToLink = (localPackageDependencies.filter(e => e.name === dependency) ?? [])[0];
|
|
163
205
|
if (packageToLink) {
|
|
164
|
-
|
|
165
|
-
if (startIndex !== -1) dependecyNode[dependency] = `${backRoute}${packageToLink.packagePath.substring(startIndex).replaceAll(_path.default.sep, '/')}`;
|
|
206
|
+
if (packageToLink.packagePath.includes(repositoryDir) && packageData.packagePath.includes(repositoryDir)) dependecyNode[dependency] = `${backRouteForRepo}${packageToLink.packagePath.replace(repositoryDir, '').replaceAll(_path.default.sep, '/').replace('/', '')}`;else dependecyNode[dependency] = `${backRouteForCont}${packageToLink.packagePath.replace(containerDir, '').replaceAll(_path.default.sep, '/').replace('/', '')}`;
|
|
166
207
|
}
|
|
167
208
|
}
|
|
168
209
|
}
|
package/package.json
CHANGED