datagrok-tools 4.4.0 → 4.4.3

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.
@@ -113,12 +113,12 @@ function createDirectoryContents(name, config, templateDir, packageDir) {
113
113
 
114
114
  if (jest) {
115
115
  Object.assign(_package.devDependencies, {
116
- 'jest': 'latest',
117
- 'jest-html-reporter': 'latest',
118
- '@types/jest': 'latest',
119
- 'puppeteer': 'latest'
116
+ 'jest-html-reporter': '^3.5.0',
117
+ 'jest': '^27.0.0',
118
+ '@types/jest': '^27.0.0'
120
119
  }, ts ? {
121
- 'ts-jest': 'latest'
120
+ 'ts-jest': '^27.0.0',
121
+ 'puppeteer': 'latest'
122
122
  } : {});
123
123
  Object.assign(_package.scripts, {
124
124
  'test': 'jest'
@@ -201,6 +201,7 @@ function create(args) {
201
201
 
202
202
  if (validName) {
203
203
  var packageDir = curDir;
204
+ var repositoryInfo = null;
204
205
 
205
206
  if (curFolder !== name) {
206
207
  packageDir = _path["default"].join(packageDir, name);
@@ -216,6 +217,40 @@ function create(args) {
216
217
  return false;
217
218
  }
218
219
 
220
+ (0, _child_process.exec)('git rev-parse --is-inside-work-tree', {
221
+ cwd: packageDir
222
+ }, function (err) {
223
+ if (err) return;
224
+ var repository = {
225
+ type: 'git'
226
+ };
227
+ (0, _child_process.exec)('git config --get remote.origin.url', {
228
+ cwd: packageDir
229
+ }, function (err, stdout) {
230
+ if (err) return;
231
+ repository.url = stdout.trim();
232
+ (0, _child_process.exec)('git rev-parse --show-prefix', {
233
+ cwd: packageDir
234
+ }, function (err, stdout) {
235
+ if (err) return;
236
+ var prefix = stdout.trim();
237
+ repository.directory = prefix.endsWith('/') ? prefix.slice(0, -1) : prefix;
238
+ if (repository.type && repository.url && repository.directory) repositoryInfo = repository;
239
+ });
240
+ });
241
+ });
242
+ process.on('beforeExit', function () {
243
+ if (repositoryInfo) {
244
+ var packagePath = _path["default"].join(packageDir, 'package.json');
245
+
246
+ var p = JSON.parse(_fs["default"].readFileSync(packagePath, 'utf-8'));
247
+ p.repository = repositoryInfo;
248
+
249
+ _fs["default"].writeFileSync(packagePath, JSON.stringify(p, null, '\t'), 'utf-8');
250
+ }
251
+
252
+ process.exit();
253
+ });
219
254
  createDirectoryContents(name, config, templateDir, packageDir, args.ide, args.ts, args.eslint, args.jest);
220
255
  console.log(_entHelpers.help["package"](name, args.ts));
221
256
  console.log("\nThe package has the following dependencies:\n".concat(dependencies.join(' '), "\n"));
@@ -0,0 +1,33 @@
1
+ module.exports = {
2
+ "roots": [
3
+ "<rootDir>/src"
4
+ ],
5
+ "testMatch": [
6
+ "**/__jest__/**/*.test.+(ts|tsx)"
7
+ ],
8
+ moduleFileExtensions: [
9
+ 'ts',
10
+ 'js',
11
+ ],
12
+ "transform": {
13
+ "^.+\\.(ts|tsx)$": "ts-jest"
14
+ },
15
+ transformIgnorePatterns: ['^.+\\.js$'],
16
+ globals: {
17
+ 'ts-jest': {
18
+ 'tsconfig': {
19
+ "target": "es6",
20
+ "module": "es2020",
21
+ }
22
+ }
23
+ },
24
+ reporters: [
25
+ "default",
26
+ [
27
+ "./node_modules/jest-html-reporter",
28
+ {
29
+ "includeConsoleLog": true
30
+ }
31
+ ]
32
+ ]
33
+ }
@@ -7,7 +7,8 @@
7
7
  "dependencies": {
8
8
  "datagrok-api": "latest",
9
9
  "cash-dom": "latest",
10
- "dayjs": "latest"
10
+ "dayjs": "latest",
11
+ "@datagrok-libraries/utils": "latest"
11
12
  },
12
13
  "devDependencies": {
13
14
  "webpack": "latest",
@@ -0,0 +1,49 @@
1
+ /**
2
+ * @jest-environment jsdom
3
+ */
4
+
5
+ import * as utils from './test-node';
6
+ import puppeteer from 'puppeteer';
7
+
8
+ const P_START_TIMEOUT: number = 100000;
9
+ let browser: puppeteer.Browser;
10
+ let page: puppeteer.Page;
11
+
12
+ beforeAll(async () => {
13
+ let out = await utils.getBrowserPage(puppeteer);
14
+ browser = out.browser;
15
+ page = out.page;
16
+ }, P_START_TIMEOUT);
17
+
18
+ afterAll(async () => {
19
+ await browser.close();
20
+ });
21
+
22
+ it('TEST', async () => {
23
+ const target_package:string = process.env.TARGET_PACKAGE;
24
+ console.log(`Testing ${target_package} package`);
25
+
26
+ //console.log(require('root-require')('package.json').version);
27
+ let r = await page.evaluate((target_package):Promise<object> => {
28
+ return new Promise<object>((resolve, reject) => {
29
+ (<any>window).grok.functions.eval(target_package + ':test()').then((df: any) => {
30
+ let cStatus = df.columns.byName('success');
31
+ let cMessage = df.columns.byName('result');
32
+ let cCat = df.columns.byName('category');
33
+ let cName = df.columns.byName('name');
34
+ let failed = false;
35
+ let report = '';
36
+ for (let i = 0; i < df.rowCount; i++)
37
+ if (!cStatus.get(i)) {
38
+ report += `${cCat.get(i)}.${cName.get(i)}: ${cMessage.get(i)}\n`;
39
+ failed = true;
40
+ }
41
+ resolve({report, failed});
42
+ }).catch((e: any) => reject(e));
43
+ });
44
+ }, target_package);
45
+ // @ts-ignore
46
+ console.log(r.report);
47
+ // @ts-ignore
48
+ expect(r.failed).toBe(false);
49
+ }, 100000);
@@ -0,0 +1,96 @@
1
+ import * as path from "path";
2
+ import * as os from "os";
3
+ import * as fs from "fs";
4
+ // @ts-ignore
5
+ import * as yaml from 'js-yaml';
6
+ const fetch = require('node-fetch');
7
+
8
+ export async function getToken(url: string, key: string) {
9
+ let response = await fetch(`${url}/users/login/dev/${key}`, {method: 'POST'});
10
+ let json = await response.json();
11
+ if (json.isSuccess == true)
12
+ return json.token;
13
+ else
14
+ throw 'Unable to login to server. Check your dev key';
15
+ }
16
+
17
+ export async function getWebUrl(url: string, token: string) {
18
+ let response = await fetch(`${url}/admin/plugins/admin/settings`, {headers: {Authorization: token}});
19
+ let json = await response.json();
20
+ return json.settings.webRoot;
21
+ }
22
+
23
+ const grokDir = path.join(os.homedir(), '.grok');
24
+ const confPath = path.join(grokDir, 'config.yaml');
25
+
26
+ function mapURL(conf: Config): Indexable {
27
+ let urls: Indexable = {};
28
+ for (let server in conf.servers) {
29
+ urls[conf['servers'][server]['url']] = conf['servers'][server];
30
+ }
31
+ return urls;
32
+ }
33
+
34
+ export function getDevKey(hostKey: string): {url: string, key: string} {
35
+ let config = yaml.load(fs.readFileSync(confPath, 'utf8')) as any;
36
+ let host = hostKey == '' ? config.default : hostKey;
37
+ host = host.trim();
38
+ let urls = mapURL(config);
39
+ let key = '';
40
+ let url = '';
41
+ try {
42
+ let url = new URL(host).href;
43
+ if (url.endsWith('/')) url = url.slice(0, -1);
44
+ if (url in urls) key = config['servers'][urls[url]]['key'];
45
+ } catch (error) {
46
+ if (config['servers'][host] == null)
47
+ throw `Unknown server alias. Please add it to ${confPath}`;
48
+ url = config['servers'][host]['url'];
49
+ key = config['servers'][host]['key'];
50
+ }
51
+ return {url, key};
52
+ }
53
+
54
+ export async function getBrowserPage(puppeteer: any): Promise<{browser: any, page: any}> {
55
+ let url:string = process.env.HOST ?? '';
56
+ let cfg = getDevKey(url);
57
+ url = cfg.url;
58
+
59
+ let key = cfg.key;
60
+ let token = await getToken(url, key);
61
+ url = await getWebUrl(url, token);
62
+ console.log(`Using web root: ${url}`);
63
+
64
+ let browser = await puppeteer.launch({
65
+ args: ['--disable-dev-shm-usage', '--disable-features=site-per-process'],
66
+ ignoreHTTPSErrors: true,
67
+ });
68
+
69
+ let page = await browser.newPage();
70
+ await page.goto(`${url}/oauth/`);
71
+ await page.setCookie({name: 'auth', value: token});
72
+ await page.evaluate((token: any) => {
73
+ window.localStorage.setItem('auth', token);
74
+ }, token);
75
+ await page.goto(url);
76
+ try {
77
+ await page.waitForSelector('.grok-preloader');
78
+ await page.waitForFunction(() => document.querySelector('.grok-preloader') == null, {timeout: 100000});
79
+ } catch (error) {
80
+ throw error;
81
+ }
82
+ return {browser, page};
83
+ }
84
+
85
+
86
+ interface Config {
87
+ servers: {
88
+ [alias: string]: {
89
+ url: string,
90
+ key: string
91
+ }
92
+ },
93
+ default: string,
94
+ }
95
+
96
+ interface Indexable { [key: string]: any }
@@ -1,7 +1,6 @@
1
1
  import * as DG from "datagrok-api/dg";
2
2
  import * as grok from "datagrok-api/grok";
3
3
  import {runTests} from "@datagrok-libraries/utils/src/test";
4
- import "./tests/chem-tests";
5
4
 
6
5
  export let _package = new DG.Package();
7
6
 
@@ -1,7 +1,6 @@
1
1
  import * as DG from "datagrok-api/dg";
2
2
  import * as grok from "datagrok-api/grok";
3
3
  import {runTests, tests} from '@datagrok-libraries/utils/src/test';
4
- import "./tests/chem-tests";
5
4
 
6
5
  export let _package = new DG.Package();
7
6
  export {tests}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "datagrok-tools",
3
- "version": "4.4.0",
3
+ "version": "4.4.3",
4
4
  "description": "Utility to upload and publish packages to Datagrok",
5
5
  "homepage": "https://github.com/datagrok-ai/public/tree/master/tools#readme",
6
6
  "dependencies": {