datagrok-tools 4.14.0 → 4.14.2
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 +2 -0
- package/bin/commands/link.js +96 -18
- package/bin/utils/func-generation.js +2 -1
- package/package.json +1 -1
- package/plugins/func-gen-plugin.js +4 -3
package/CHANGELOG.md
CHANGED
package/bin/commands/help.js
CHANGED
|
@@ -195,6 +195,8 @@ Link \`datagrok-api\` and libraries for local development
|
|
|
195
195
|
|
|
196
196
|
Options:
|
|
197
197
|
--dev Links also dev dependencies
|
|
198
|
+
--path Instead of npm linking sets dependecies in package.json to local
|
|
199
|
+
--unlink Unlinks packages and sets last versions instead of local path in package.json dependecies
|
|
198
200
|
--verbose Prints detailed information about linked packages
|
|
199
201
|
`;
|
|
200
202
|
|
package/bin/commands/link.js
CHANGED
|
@@ -11,10 +11,10 @@ var _utils = require("../utils/utils");
|
|
|
11
11
|
/* eslint-disable valid-jsdoc */
|
|
12
12
|
|
|
13
13
|
const repositoryDirNameRegex = new RegExp(_path.default.join('1', '2')[1] + 'public$');
|
|
14
|
-
const excludedPackages = ['@datagrok/diff-grok'];
|
|
14
|
+
const excludedPackages = ['@datagrok/diff-grok', ''];
|
|
15
15
|
const curDir = process.cwd();
|
|
16
|
-
let devMode = false;
|
|
17
16
|
let repositoryDir = curDir;
|
|
17
|
+
let currentPackage;
|
|
18
18
|
let localPackageDependencies;
|
|
19
19
|
let packagesToLink;
|
|
20
20
|
while (_path.default.dirname(repositoryDir) !== repositoryDir) {
|
|
@@ -22,6 +22,9 @@ while (_path.default.dirname(repositoryDir) !== repositoryDir) {
|
|
|
22
22
|
repositoryDir = _path.default.dirname(repositoryDir);
|
|
23
23
|
}
|
|
24
24
|
let verbose = false;
|
|
25
|
+
let pathMode = false;
|
|
26
|
+
let devMode = false;
|
|
27
|
+
let unlink = false;
|
|
25
28
|
const apiDir = _path.default.join(repositoryDir, 'js-api');
|
|
26
29
|
const libDir = _path.default.join(repositoryDir, 'libraries');
|
|
27
30
|
const packageDir = _path.default.join(repositoryDir, 'packages');
|
|
@@ -30,22 +33,38 @@ const libName = '@datagrok-libraries/';
|
|
|
30
33
|
const packageName = '@datagrok/';
|
|
31
34
|
async function link(args) {
|
|
32
35
|
verbose = args.verbose ?? false;
|
|
36
|
+
devMode = args.dev ?? false;
|
|
37
|
+
pathMode = args.path ?? false;
|
|
38
|
+
unlink = args.unlink ?? false;
|
|
33
39
|
localPackageDependencies = [];
|
|
34
40
|
packagesToLink = new Set();
|
|
35
|
-
if (args.dev !== undefined) devMode = args.dev;
|
|
36
41
|
collectPackagesData(curDir);
|
|
37
|
-
|
|
38
|
-
|
|
42
|
+
currentPackage = new PackageData(curDir);
|
|
43
|
+
if (unlink) {
|
|
44
|
+
await unlinkPackages();
|
|
45
|
+
console.log('Package unlinked');
|
|
46
|
+
} else {
|
|
47
|
+
await linkPackages();
|
|
48
|
+
if (pathMode) console.log('Updated dependencies to local in package.json');else console.log('All packages/libraries linked to your package by nmp link command');
|
|
49
|
+
}
|
|
39
50
|
return true;
|
|
40
51
|
}
|
|
41
52
|
function collectPackagesData(packagePath = curDir) {
|
|
42
53
|
const packageJsonPath = _path.default.join(packagePath, 'package.json');
|
|
43
|
-
if (!_fs.default.existsSync(packageJsonPath)) return
|
|
54
|
+
if (!_fs.default.existsSync(packageJsonPath)) return {
|
|
55
|
+
dependencies: [],
|
|
56
|
+
version: '0.0.1',
|
|
57
|
+
name: ''
|
|
58
|
+
};
|
|
44
59
|
const json = JSON.parse(_fs.default.readFileSync(packageJsonPath, 'utf-8'));
|
|
45
|
-
let
|
|
46
|
-
|
|
47
|
-
if (devMode)
|
|
48
|
-
return
|
|
60
|
+
let dependencies = [];
|
|
61
|
+
dependencies = dependencies.concat(collectPacakgeDataFromJsonObject(json.dependencies));
|
|
62
|
+
if (devMode) dependencies = dependencies.concat(collectPacakgeDataFromJsonObject(json.devDependencies));
|
|
63
|
+
return {
|
|
64
|
+
dependencies: dependencies,
|
|
65
|
+
version: json.version,
|
|
66
|
+
name: json.name
|
|
67
|
+
};
|
|
49
68
|
}
|
|
50
69
|
function collectPacakgeDataFromJsonObject(object) {
|
|
51
70
|
let result = [];
|
|
@@ -62,11 +81,38 @@ function parsePackageDependencies(dependencyName, pathToLink) {
|
|
|
62
81
|
let result = [];
|
|
63
82
|
if (!packagesToLink.has(dependencyName)) {
|
|
64
83
|
packagesToLink.add(dependencyName);
|
|
65
|
-
localPackageDependencies.push(new PackageData(
|
|
84
|
+
localPackageDependencies.push(new PackageData(pathToLink));
|
|
66
85
|
}
|
|
67
86
|
result.push(dependencyName);
|
|
68
87
|
return result;
|
|
69
88
|
}
|
|
89
|
+
async function unlinkPackages() {
|
|
90
|
+
const packaegs = [...localPackageDependencies];
|
|
91
|
+
if (currentPackage) packaegs.push(currentPackage);
|
|
92
|
+
for (let packageData of packaegs) {
|
|
93
|
+
if (excludedPackages.includes(packageData.name)) continue;
|
|
94
|
+
if (verbose) console.log(`Package ${packageData.name} is unlinking`);
|
|
95
|
+
const packageJsonPath = _path.default.join(packageData.packagePath, 'package.json');
|
|
96
|
+
const packageJson = JSON.parse(_fs.default.readFileSync(packageJsonPath, 'utf8'));
|
|
97
|
+
packageJson.dependencies = updateDependenciesToVersion(packageData, packageJson.dependencies);
|
|
98
|
+
if (devMode) packageJson.devDependencies = updateDependenciesToVersion(packageData, packageJson.devDependencies);
|
|
99
|
+
_fs.default.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2));
|
|
100
|
+
await (0, _utils.runScript)(`npm unlink ${packageData.name}`, packageData.packagePath);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
function updateDependenciesToVersion(packageData, dependecyNode) {
|
|
104
|
+
for (let dependency of packageData.dependencies) {
|
|
105
|
+
if (excludedPackages.includes(dependency)) continue;
|
|
106
|
+
if (dependecyNode[dependency]) {
|
|
107
|
+
const packageToLink = (localPackageDependencies.filter(e => e.name === dependency) ?? [])[0];
|
|
108
|
+
if (packageToLink) {
|
|
109
|
+
const startIndex = packageToLink.packagePath.indexOf(`public${_path.default.sep}`) + `public${_path.default.sep}`.length;
|
|
110
|
+
if (startIndex !== -1) dependecyNode[dependency] = `^${packageToLink.version}`;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
return dependecyNode;
|
|
115
|
+
}
|
|
70
116
|
async function linkPackages() {
|
|
71
117
|
let anyChanges = true;
|
|
72
118
|
for (let element of excludedPackages) packagesToLink.delete(element);
|
|
@@ -79,24 +125,56 @@ async function linkPackages() {
|
|
|
79
125
|
let mapElements = localPackageDependencies.filter(x => x.dependencies.every(i => !packagesToLink.has(i)) && packagesToLink.has(x.name) && !excludedPackages.includes(x.name));
|
|
80
126
|
if (mapElements.length === 0) break;
|
|
81
127
|
for (let element of mapElements) {
|
|
82
|
-
if (verbose) console.log(`Package ${element.name}
|
|
128
|
+
if (verbose) console.log(`Package ${element.name} is linking`);
|
|
129
|
+
if (pathMode) await linkPathMode(element);
|
|
83
130
|
await (0, _utils.runScript)(`npm install`, element.packagePath);
|
|
84
|
-
await (0, _utils.runScript)(`npm
|
|
85
|
-
|
|
131
|
+
if (pathMode) await (0, _utils.runScript)(`npm run build`, element.packagePath);
|
|
132
|
+
if (!pathMode) await linkNpmMode(element);
|
|
86
133
|
packagesToLink.delete(element.name);
|
|
87
134
|
anyChanges = true;
|
|
88
135
|
}
|
|
89
136
|
if (anyChanges === false) throw new Error(`There is loop with next packages: ${JSON.stringify(Array.from(packagesToLink)).toString()}`);
|
|
90
137
|
}
|
|
91
138
|
let names = localPackageDependencies.map(x => x.name);
|
|
139
|
+
if (currentPackage && pathMode) await linkPathMode(currentPackage);
|
|
92
140
|
await (0, _utils.runScript)(`npm install`, curDir);
|
|
93
|
-
await (0, _utils.runScript)(`npm link ${names.join(' ')}`, curDir);
|
|
141
|
+
if (pathMode === false) await (0, _utils.runScript)(`npm link ${names.join(' ')}`, curDir);
|
|
142
|
+
}
|
|
143
|
+
async function linkNpmMode(packageData) {
|
|
144
|
+
await (0, _utils.runScript)(`npm link ${packageData.dependencies.join(' ')}`, packageData.packagePath);
|
|
145
|
+
await (0, _utils.runScript)(`npm link`, packageData.packagePath);
|
|
146
|
+
}
|
|
147
|
+
async function linkPathMode(packageData) {
|
|
148
|
+
const packageJsonPath = _path.default.join(packageData.packagePath, 'package.json');
|
|
149
|
+
const packageJson = JSON.parse(_fs.default.readFileSync(packageJsonPath, 'utf8'));
|
|
150
|
+
packageJson.dependencies = packageJson.dependencies || {};
|
|
151
|
+
packageJson.devDependencies = packageJson.devDependencies || {};
|
|
152
|
+
packageJson.dependencies = updateDependenciesToLocal(packageData, packageJson.dependencies);
|
|
153
|
+
if (devMode) packageJson.devDependencies = updateDependenciesToLocal(packageData, packageJson.devDependencies);
|
|
154
|
+
_fs.default.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2));
|
|
155
|
+
}
|
|
156
|
+
function updateDependenciesToLocal(packageData, dependecyNode) {
|
|
157
|
+
const dirNames = packageData.packagePath.split(_path.default.sep);
|
|
158
|
+
const backRoute = `../`.repeat(dirNames.length - dirNames.indexOf('public') - 1);
|
|
159
|
+
for (let dependency of packageData.dependencies) {
|
|
160
|
+
if (excludedPackages.includes(dependency)) continue;
|
|
161
|
+
if (dependecyNode[dependency]) {
|
|
162
|
+
const packageToLink = (localPackageDependencies.filter(e => e.name === dependency) ?? [])[0];
|
|
163
|
+
if (packageToLink) {
|
|
164
|
+
const startIndex = packageToLink.packagePath.indexOf(`public${_path.default.sep}`) + `public${_path.default.sep}`.length;
|
|
165
|
+
if (startIndex !== -1) dependecyNode[dependency] = `${backRoute}${packageToLink.packagePath.substring(startIndex).replaceAll(_path.default.sep, '/')}`;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
return dependecyNode;
|
|
94
170
|
}
|
|
95
171
|
class PackageData {
|
|
96
172
|
dependencies = [];
|
|
97
|
-
constructor(
|
|
98
|
-
|
|
173
|
+
constructor(packagePath) {
|
|
174
|
+
let packageJsonData = collectPackagesData(packagePath);
|
|
175
|
+
this.name = packageJsonData.name;
|
|
99
176
|
this.packagePath = packagePath;
|
|
100
|
-
this.dependencies =
|
|
177
|
+
this.dependencies = packageJsonData.dependencies;
|
|
178
|
+
this.version = packageJsonData.version;
|
|
101
179
|
}
|
|
102
180
|
}
|
|
@@ -375,10 +375,11 @@ const reservedDecorators = exports.reservedDecorators = {
|
|
|
375
375
|
function generateClassFunc(annotation, className, sep = '\n') {
|
|
376
376
|
return annotation + `export function _${className}() {${sep} return new ${className}();${sep}}${sep.repeat(2)}`;
|
|
377
377
|
}
|
|
378
|
+
const primitives = new Set(['string', 'string[]', 'number', 'number[]', 'boolean', 'boolean[]']);
|
|
378
379
|
|
|
379
380
|
/** Generates a DG function. */
|
|
380
381
|
function generateFunc(annotation, funcName, sep = '\n', className = '', inputs = [], isAsync = false) {
|
|
381
|
-
let funcSigNature = inputs.map(e => `${e.name}: ${e.type}`).join(', ');
|
|
382
|
+
let funcSigNature = inputs.map(e => `${e.name}: ${primitives.has(e.type ?? '') ? e.type : 'any'}`).join(', ');
|
|
382
383
|
let funcArguments = inputs.map(e => e.name).join(', ');
|
|
383
384
|
return annotation + `export ${isAsync ? 'async ' : ''}function ${funcName}(${funcSigNature}) {${sep} return ${className.length > 0 ? `${className}.` : ''}${funcName}(${funcArguments});${sep}}${sep.repeat(2)}`;
|
|
384
385
|
}
|
package/package.json
CHANGED
|
@@ -179,10 +179,11 @@ class FuncGeneratorPlugin {
|
|
|
179
179
|
name += ': ' + generate(baseParam.argument.typeAnnotation.typeAnnotation).code;
|
|
180
180
|
|
|
181
181
|
let type = '';
|
|
182
|
-
if (baseParam?.typeAnnotation?.typeAnnotation
|
|
183
|
-
type = 'any';
|
|
184
|
-
else if (baseParam?.typeAnnotation?.typeAnnotation)
|
|
182
|
+
if (baseParam?.typeAnnotation?.typeAnnotation)
|
|
185
183
|
type = generate(baseParam.typeAnnotation.typeAnnotation).code;
|
|
184
|
+
else
|
|
185
|
+
type = 'any';
|
|
186
|
+
|
|
186
187
|
let params = baseParam.typeAnnotation.typeAnnotation.typeArguments?.params;
|
|
187
188
|
if(type !== 'any' && params && params.length > 0)
|
|
188
189
|
type += `<${params.map((e)=>e.typeName.name).join(',')}>`;
|