@cubejs-backend/native 0.28.53 → 0.28.60

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 CHANGED
@@ -3,6 +3,54 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [0.28.60](https://github.com/cube-js/cube.js/compare/v0.28.59...v0.28.60) (2021-11-25)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+ * **cubesql:** MySQL CLI connection error with COM_FIELD_LIST ([#3728](https://github.com/cube-js/cube.js/issues/3728)) ([aef1401](https://github.com/cube-js/cube.js/commit/aef14014fce87b8b47dc41ead066a7647f6fe225))
12
+ * **native:** Return promise for registerInterface ([be97a84](https://github.com/cube-js/cube.js/commit/be97a8433dd0d2e400734c6ab3d3110d59ad4d1a))
13
+
14
+
15
+ ### Features
16
+
17
+ * **cubesql:** Enable unicode_expression (required for LEFT) ([4059a17](https://github.com/cube-js/cube.js/commit/4059a1785fece8293461323ac1de5940a8b9876d))
18
+ * **native:** Support Node.js 17 ([91f5d51](https://github.com/cube-js/cube.js/commit/91f5d517d59067fc5e643219c2f4f83ec915259c))
19
+
20
+
21
+
22
+
23
+
24
+ ## [0.28.58](https://github.com/cube-js/cube.js/compare/v0.28.57...v0.28.58) (2021-11-18)
25
+
26
+ **Note:** Version bump only for package @cubejs-backend/native
27
+
28
+
29
+
30
+
31
+
32
+ ## [0.28.57](https://github.com/cube-js/cube.js/compare/v0.28.56...v0.28.57) (2021-11-16)
33
+
34
+
35
+ ### Features
36
+
37
+ * **cubesql:** Initial support for INFORMATION_SCHEMA ([d1fac9e](https://github.com/cube-js/cube.js/commit/d1fac9e75cb01cbf6a1207b6e69a999e9d755d1e))
38
+
39
+
40
+
41
+
42
+
43
+ ## [0.28.55](https://github.com/cube-js/cube.js/compare/v0.28.54...v0.28.55) (2021-11-12)
44
+
45
+
46
+ ### Features
47
+
48
+ * Introduce checkSqlAuth (auth hook for SQL API) ([3191b73](https://github.com/cube-js/cube.js/commit/3191b73816cd63d242349041c54a7037e9027c1a))
49
+
50
+
51
+
52
+
53
+
6
54
  ## [0.28.53](https://github.com/cube-js/cube.js/compare/v0.28.52...v0.28.53) (2021-11-04)
7
55
 
8
56
 
@@ -1,16 +1,22 @@
1
+ export interface Request {
2
+ id: string;
3
+ }
1
4
  export interface CheckAuthPayload {
2
- authorization: string;
5
+ request: Request;
6
+ user: string | null;
3
7
  }
4
8
  export interface LoadPayload {
5
- authorization: string;
6
- request_id: string;
9
+ request: Request;
10
+ user: string;
7
11
  query: any;
8
12
  }
9
13
  export interface MetaPayload {
10
- authorization: string;
14
+ request: Request;
15
+ user: string | null;
11
16
  }
12
17
  export declare type SQLInterfaceOptions = {
13
18
  port?: number;
19
+ nonce?: string;
14
20
  checkAuth: (payload: CheckAuthPayload) => unknown | Promise<unknown>;
15
21
  load: (payload: LoadPayload) => unknown | Promise<unknown>;
16
22
  meta: (payload: MetaPayload) => unknown | Promise<unknown>;
@@ -18,6 +24,10 @@ export declare type SQLInterfaceOptions = {
18
24
  export declare function isSupported(): boolean;
19
25
  declare type LogLevel = 'error' | 'warn' | 'info' | 'debug' | 'trace';
20
26
  export declare const setLogLevel: (level: LogLevel) => void;
21
- export declare const registerInterface: (options: SQLInterfaceOptions) => Promise<any>;
27
+ export declare type SqlInterfaceInstance = {
28
+ __typename: 'sqlinterfaceinstance';
29
+ };
30
+ export declare const registerInterface: (options: SQLInterfaceOptions) => Promise<SqlInterfaceInstance>;
31
+ export declare const shutdownInterface: (instance: SqlInterfaceInstance) => Promise<void>;
22
32
  export {};
23
33
  //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../js/index.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,OAAO;IACpB,EAAE,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,gBAAgB;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,GAAC,IAAI,CAAA;CACpB;AAED,MAAM,WAAW,WAAW;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,GAAG,CAAA;CACb;AAED,MAAM,WAAW,WAAW;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,GAAC,IAAI,CAAA;CACpB;AAED,oBAAY,mBAAmB,GAAG;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACrE,IAAI,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3D,IAAI,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC9D,CAAC;AAiBF,wBAAgB,WAAW,IAAI,OAAO,CAErC;AA8BD,aAAK,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;AAE9D,eAAO,MAAM,WAAW,UAAW,QAAQ,KAAG,IAG7C,CAAC;AAEF,oBAAY,oBAAoB,GAAG;IAAE,UAAU,EAAE,sBAAsB,CAAA;CAAE,CAAC;AAE1E,eAAO,MAAM,iBAAiB,YAAmB,mBAAmB,KAAG,QAAQ,oBAAoB,CAwBlG,CAAC;AAEF,eAAO,MAAM,iBAAiB,aAAoB,oBAAoB,KAAG,QAAQ,IAAI,CAMpF,CAAA"}
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.registerInterface = exports.setLogLevel = exports.isSupported = void 0;
6
+ exports.shutdownInterface = exports.registerInterface = exports.setLogLevel = exports.isSupported = void 0;
7
7
  const fs_1 = __importDefault(require("fs"));
8
8
  const path_1 = __importDefault(require("path"));
9
9
  function loadNative() {
@@ -14,7 +14,7 @@ function loadNative() {
14
14
  if (fs_1.default.existsSync(path_1.default.join(__dirname, '/../../native/index.node'))) {
15
15
  return require(path_1.default.join(__dirname, '/../../native/index.node'));
16
16
  }
17
- throw new Error('Unable to load @cubejs-backend/native, probably your system is not supported.');
17
+ throw new Error(`Unable to load @cubejs-backend/native, probably your system (${process.arch}-${process.platform}) with Node.js ${process.version} is not supported.`);
18
18
  }
19
19
  function isSupported() {
20
20
  return fs_1.default.existsSync(path_1.default.join(__dirname, '/../../index.node')) || fs_1.default.existsSync(path_1.default.join(__dirname, '/../../native/index.node'));
@@ -25,11 +25,19 @@ function wrapNativeFunctionWithChannelCallback(fn) {
25
25
  return async (extra, channel) => {
26
26
  try {
27
27
  const result = await fn(JSON.parse(extra));
28
- native.channel_resolve(channel, JSON.stringify(result));
28
+ if (process.env.CUBEJS_NATIVE_INTERNAL_DEBUG) {
29
+ console.debug("[js] channel.resolve", {
30
+ result
31
+ });
32
+ }
33
+ channel.resolve(JSON.stringify(result));
29
34
  }
30
35
  catch (e) {
31
- native.channel_reject(channel);
32
- throw e;
36
+ channel.reject(e.message || 'Unknown JS exception');
37
+ // throw e;
38
+ console.debug("[js] channel.reject", {
39
+ e
40
+ });
33
41
  }
34
42
  };
35
43
  }
@@ -61,4 +69,10 @@ const registerInterface = async (options) => {
61
69
  });
62
70
  };
63
71
  exports.registerInterface = registerInterface;
72
+ const shutdownInterface = async (instance) => {
73
+ const native = loadNative();
74
+ await native.shutdownInterface(instance);
75
+ await new Promise((resolve) => setTimeout(resolve, 2000));
76
+ };
77
+ exports.shutdownInterface = shutdownInterface;
64
78
  //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../js/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "@cubejs-backend/native",
3
- "version": "0.28.53",
3
+ "version": "0.28.60",
4
4
  "author": "Cube Dev, Inc.",
5
5
  "description": "Native module for Cube.js (binding to Rust codebase)",
6
- "main": "dist/lib/index.js",
7
- "typings": "dist/lib/index.d.ts",
6
+ "main": "dist/js/index.js",
7
+ "typings": "dist/js/index.d.ts",
8
8
  "repository": {
9
9
  "type": "git",
10
10
  "url": "git+https://github.com/cube-js/cube.js.git"
@@ -16,31 +16,30 @@
16
16
  "native:build-debug": "npm run native:build --",
17
17
  "native:build-release": "npm run native:build -- --release",
18
18
  "install": "node-pre-gyp install || echo 'Your system is not supported by @cubejs-backend/native, some feature will be unavailable.'",
19
- "upload-binary": "npm run native:build-release && mkdir -p native && cp index.node native/index.node && node-pre-gyp package && node-pre-gyp-github publish",
20
- "test:unit": "jest --verbose --forceExit test",
19
+ "upload-binary": "mkdir -p native && cp index.node native/index.node && node-pre-gyp package && node-pre-gyp-github publish",
20
+ "test:unit": "jest --forceExit test",
21
21
  "test:cargo": "cargo test"
22
22
  },
23
23
  "engines": {
24
24
  "node": ">=10.8.0"
25
25
  },
26
26
  "files": [
27
- "dist/lib"
27
+ "dist/js"
28
28
  ],
29
29
  "bundledDependencies": [
30
30
  "@mapbox/node-pre-gyp"
31
31
  ],
32
32
  "devDependencies": {
33
+ "@cubejs-infra/node-pre-gyp-github": "^1",
33
34
  "@types/jest": "^26",
34
- "@types/mysql": "^2.15.19",
35
35
  "@types/node": "^10",
36
36
  "cargo-cp-artifact": "^0.1",
37
37
  "jest": "^26",
38
- "mysql": "^2.18.1",
38
+ "mysql2": "^2.3.3",
39
39
  "typescript": "~4.1.5"
40
40
  },
41
41
  "dependencies": {
42
- "@mapbox/node-pre-gyp": "^1",
43
- "@mathquis/node-pre-gyp-github": "^1"
42
+ "@mapbox/node-pre-gyp": "^1"
44
43
  },
45
44
  "binary": {
46
45
  "module_name": "index",
@@ -51,11 +50,12 @@
51
50
  "pkg_path": "."
52
51
  },
53
52
  "jest": {
54
- "testEnvironment": "node"
53
+ "testEnvironment": "node",
54
+ "verbose": true
55
55
  },
56
56
  "license": "Apache-2.0",
57
57
  "publishConfig": {
58
58
  "access": "public"
59
59
  },
60
- "gitHead": "6ac6b5b1b8dfaa9b15888cb0dd2183cdd2bc3123"
60
+ "gitHead": "7281057fa9b7043592fbe3677371c4a5ef5c4265"
61
61
  }
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../lib/index.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,gBAAgB;IAC7B,aAAa,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,WAAW;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,GAAG,CAAA;CACb;AAED,MAAM,WAAW,WAAW;IACxB,aAAa,EAAE,MAAM,CAAA;CACxB;AAED,oBAAY,mBAAmB,GAAG;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACrE,IAAI,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3D,IAAI,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC9D,CAAC;AAeF,wBAAgB,WAAW,IAAI,OAAO,CAErC;AAmBD,aAAK,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;AAE9D,eAAO,MAAM,WAAW,UAAW,QAAQ,KAAG,IAG7C,CAAC;AAEF,eAAO,MAAM,iBAAiB,YAAmB,mBAAmB,iBAwBnE,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../lib/index.ts"],"names":[],"mappings":";;;;;;AAAA,4CAAoB;AACpB,gDAAwB;AAuBxB,SAAS,UAAU;IACf,sBAAsB;IACtB,IAAI,YAAE,CAAC,UAAU,CAAC,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC,EAAE;QAC1D,OAAO,OAAO,CAAC,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC,CAAA;KAC5D;IAED,IAAI,YAAE,CAAC,UAAU,CAAC,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,0BAA0B,CAAC,CAAC,EAAE;QACjE,OAAO,OAAO,CAAC,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,0BAA0B,CAAC,CAAC,CAAA;KACnE;IAED,MAAM,IAAI,KAAK,CAAC,+EAA+E,CAAC,CAAC;AACrG,CAAC;AAED,SAAgB,WAAW;IACvB,OAAO,YAAE,CAAC,UAAU,CAAC,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC,IAAI,YAAE,CAAC,UAAU,CAAC,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,0BAA0B,CAAC,CAAC,CAAC;AACvI,CAAC;AAFD,kCAEC;AAED,SAAS,qCAAqC,CAC1C,EAA8C;IAE9C,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAE5B,OAAO,KAAK,EAAE,KAAU,EAAE,OAAY,EAAE,EAAE;QACtC,IAAI;YACA,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;YAC3C,MAAM,CAAC,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;SACzD;QAAC,OAAO,CAAC,EAAE;YACV,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;YAE/B,MAAM,CAAC,CAAC;SACT;IACP,CAAC,CAAC;AACN,CAAC;AAAA,CAAC;AAIK,MAAM,WAAW,GAAG,CAAC,KAAe,EAAQ,EAAE;IACjD,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AAC9B,CAAC,CAAC;AAHW,QAAA,WAAW,eAGtB;AAEK,MAAM,iBAAiB,GAAG,KAAK,EAAE,OAA4B,EAAE,EAAE;IACpE,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,IAAI,IAAI,EAAE;QAChD,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;KACzD;IAED,IAAI,OAAO,OAAO,CAAC,SAAS,IAAI,UAAU,EAAE;QACxC,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;KAC3D;IAED,IAAI,OAAO,OAAO,CAAC,IAAI,IAAI,UAAU,EAAE;QACnC,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;KACtD;IAED,IAAI,OAAO,OAAO,CAAC,IAAI,IAAI,UAAU,EAAE;QACnC,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;KACtD;IAED,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,OAAO,MAAM,CAAC,iBAAiB,CAAC;QAC5B,GAAG,OAAO;QACV,SAAS,EAAE,qCAAqC,CAAC,OAAO,CAAC,SAAS,CAAC;QACnE,IAAI,EAAE,qCAAqC,CAAC,OAAO,CAAC,IAAI,CAAC;QACzD,IAAI,EAAE,qCAAqC,CAAC,OAAO,CAAC,IAAI,CAAC;KAC5D,CAAC,CAAC;AACP,CAAC,CAAC;AAxBW,QAAA,iBAAiB,qBAwB5B"}