]> git.ipfire.org Git - thirdparty/Chart.js.git/commitdiff
Add missing typings of helpers, add automatic test (#9570)
authorJukka Kurkela <jukka.kurkela@gmail.com>
Thu, 2 Sep 2021 00:27:26 +0000 (03:27 +0300)
committerGitHub <noreply@github.com>
Thu, 2 Sep 2021 00:27:26 +0000 (20:27 -0400)
* Add missing typings of helpers, add automatic test

* Add error handling to autogen.js

.gitignore
package-lock.json
package.json
types/geometric.d.ts
types/helpers/helpers.canvas.d.ts
types/helpers/helpers.core.d.ts
types/helpers/helpers.dom.d.ts
types/helpers/helpers.math.d.ts
types/helpers/helpers.options.d.ts
types/tests/autogen.js [new file with mode: 0644]

index 3ba0279f2be9e5d2ac67e09e350cf6e3a021d15e..112570e74f43a1db6dd10d0a8d54a94a8e02ad68 100644 (file)
@@ -27,3 +27,6 @@ docs/api
 *.log
 *.swp
 *.stackdump
+
+# Generated
+/types/tests/autogen*.ts
index 4fbb8aa4a2834e7d17f1908c4c6d5baa32d0c225..43a27e58f092170acdb4eb2d03f8b8a7ecfba0e1 100644 (file)
@@ -30,6 +30,7 @@
         "eslint-plugin-es": "^4.1.0",
         "eslint-plugin-html": "^6.1.2",
         "eslint-plugin-markdown": "^2.1.0",
+        "esm": "^3.2.25",
         "glob": "^7.1.6",
         "jasmine": "^3.7.0",
         "jasmine-core": "^3.7.1",
         "node": ">=4"
       }
     },
+    "node_modules/esm": {
+      "version": "3.2.25",
+      "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz",
+      "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==",
+      "dev": true,
+      "engines": {
+        "node": ">=6"
+      }
+    },
     "node_modules/espree": {
       "version": "7.3.1",
       "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz",
       "integrity": "sha512-pM7CR3yXB6L8Gfn6EmX7FLNE3+V/15I3o33GkSNsWvgsMp6HVGXKkXgojrcfUUauyL1LZOdvTmu4enU2RePGHw==",
       "dev": true,
       "requires": {
-        "@babel/core": "^7.11.0",
         "@babel/helper-compilation-targets": "^7.9.6",
         "@babel/helper-module-imports": "^7.8.3",
         "@babel/plugin-proposal-class-properties": "^7.8.3",
         "@vue/babel-plugin-jsx": "^1.0.3",
         "@vue/babel-preset-jsx": "^1.2.4",
         "babel-plugin-dynamic-import-node": "^2.3.3",
-        "core-js": "^3.6.5",
         "core-js-compat": "^3.6.5",
         "semver": "^6.1.0"
       },
       "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
       "dev": true
     },
+    "esm": {
+      "version": "3.2.25",
+      "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz",
+      "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==",
+      "dev": true
+    },
     "espree": {
       "version": "7.3.1",
       "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz",
index 474186e10c85fb3a3fe47720d9ffc5d4d1e44f6d..2ce25fbc54b02f8da8074fa172a35e95c1a8e0de 100644 (file)
@@ -44,7 +44,7 @@
     "lint-js": "eslint \"src/**/*.js\" \"test/**/*.js\" \"docs/**/*.js\"",
     "lint-md": "eslint \"**/*.md\"",
     "lint-tsc": "tsc",
-    "lint-types": "eslint \"types/**/*.ts\" && tsc -p types/tests/",
+    "lint-types": "eslint \"types/**/*.ts\" && node -r esm types/tests/autogen.js && tsc -p types/tests/",
     "lint": "concurrently \"npm:lint-*\"",
     "test": "npm run lint && cross-env NODE_ENV=test karma start --auto-watch --single-run --coverage --grep"
   },
@@ -70,6 +70,7 @@
     "eslint-plugin-es": "^4.1.0",
     "eslint-plugin-html": "^6.1.2",
     "eslint-plugin-markdown": "^2.1.0",
+    "esm": "^3.2.25",
     "glob": "^7.1.6",
     "jasmine": "^3.7.0",
     "jasmine-core": "^3.7.1",
index 3677668a67a34c368a38f07a52c6a30a0a6092f2..0e1affdae1ee96fbd301feb9713de9013e0980bf 100644 (file)
@@ -11,3 +11,27 @@ export interface Point {
   x: number;
   y: number;
 }
+
+export type TRBL = {
+  top: number;
+  right: number;
+  bottom: number;
+  left: number;
+}
+
+export type TRBLCorners = {
+  topLeft: number;
+  topRight: number;
+  bottomLeft: number;
+  bottomRight: number;
+};
+
+export type CornerRadius = number | Partial<TRBLCorners>;
+
+export type RoundedRect = {
+  x: number;
+  y: number;
+  w: number;
+  h: number;
+  radius?: CornerRadius
+}
index 2d889df9f71f3e2aabe91faa57bce14ffce09ef3..4018f2e996f4de66153ffdd9ea3cab646d55ee20 100644 (file)
@@ -1,6 +1,6 @@
 import { PointStyle } from '../index.esm';
 import { Color } from '../color';
-import { ChartArea } from '../geometric';
+import { ChartArea, RoundedRect } from '../geometric';
 import { CanvasFontSpec } from './helpers.options';
 
 export function clearCanvas(canvas: HTMLCanvasElement, ctx?: CanvasRenderingContext2D): void;
@@ -97,3 +97,5 @@ export function renderText(
        font: CanvasFontSpec,
        opts?: RenderTextOpts
 ): void;
+
+export function addRoundedRectPath(ctx: CanvasRenderingContext2D, rect: RoundedRect): void;
index f092809060a074de438a3e86684f4dfa00d4ace8..a973b362c995fee488573f72ba3e88f16d7e6838 100644 (file)
@@ -38,6 +38,15 @@ export function isObject(value: unknown): value is AnyObject;
  * @returns {boolean}
  */
 export function isFinite(value: unknown): value is number;
+
+/**
+ * Returns `value` if finite, else returns `defaultValue`.
+ * @param {*} value - The value to return if defined.
+ * @param {*} defaultValue - The value to return if `value` is not finite.
+ * @returns {*}
+ */
+export function finiteOrDefault(value: unknown, defaultValue: number): number;
+
 /**
  * Returns `value` if defined, else returns `defaultValue`.
  * @param {*} value - The value to return if defined.
@@ -45,6 +54,10 @@ export function isFinite(value: unknown): value is number;
  * @returns {*}
  */
 export function valueOrDefault<T>(value: T | undefined, defaultValue: T): T;
+
+export function toPercentage(value: number | string, dimesion: number): number;
+export function toDimension(value: number | string, dimension: number): number;
+
 /**
  * Calls `fn` with the given `args` in the scope defined by `thisArg` and returns the
  * value returned by `fn`. If `fn` is not a function, this method returns undefined.
@@ -137,4 +150,8 @@ export function mergeIf<T>(target: T, source: AnyObject[]): AnyObject;
 
 export function resolveObjectKey(obj: AnyObject, key: string): AnyObject;
 
+export function defined(value: unknown): boolean;
+
+export function isFunction(value: unknown): boolean;
+
 export function setsEqual(a: Set<unknown>, b: Set<unknown>): boolean;
index ba438d608922a4af099638859ba35e8b18f80b14..ac6f0cd89fdacf1665def81d7028044dd7f9e71c 100644 (file)
@@ -15,3 +15,4 @@ export function retinaScale(
   forceRatio: number,
   forceStyle?: boolean
 ): void;
+export function readUsedSize(element: HTMLElement, property: 'width' | 'height'): number | undefined;
index 906087024495d4135793df75f4215e3fd6bdcd6c..3e0e9b8da0cae55a735ad8d7483495f2f14a6239 100644 (file)
@@ -3,6 +3,7 @@ export function isNumber(v: unknown): boolean;
 export function almostEquals(x: number, y: number, epsilon: number): boolean;
 export function almostWhole(x: number, epsilon: number): number;
 export function sign(x: number): number;
+export function niceNum(range: number): number;
 export function toRadians(degrees: number): number;
 export function toDegrees(radians: number): number;
 /**
index c98404d1c76f212d34bd1ac6fb3799f358b3c213..28ad773d3ae7b66b6c44899b4eb3e356d6c538da 100644 (file)
@@ -1,3 +1,4 @@
+import { TRBL, TRBLCorners } from '../geometric';
 import { FontSpec } from '../index.esm';
 
 export interface CanvasFontSpec extends FontSpec {
@@ -20,6 +21,9 @@ export function toFont(options: Partial<FontSpec>): CanvasFontSpec;
  */
 export function toLineHeight(value: string, size: number): number;
 
+export function toTRBL(value: number | Partial<TRBL>): TRBL;
+export function toTRBLCorners(value: number | Partial<TRBLCorners>): TRBLCorners;
+
 /**
  * Converts the given value into a padding object with pre-computed width/height.
  * @param {number|object} value - If a number, set the value to all TRBL component;
diff --git a/types/tests/autogen.js b/types/tests/autogen.js
new file mode 100644 (file)
index 0000000..6b37704
--- /dev/null
@@ -0,0 +1,22 @@
+import * as fs from 'fs';
+import * as path from 'path';
+import * as helpers from '../../src/helpers/index.js';
+
+let fd;
+
+try {
+  const fn = path.resolve(__dirname, 'autogen_helpers.ts');
+  fd = fs.openSync(fn, 'w+');
+  fs.writeSync(fd, 'import * as helpers from \'../helpers\';\n\n');
+
+  fs.writeSync(fd, 'const testKeys = [];\n');
+  for (const key of Object.keys(helpers)) {
+    if (key[0] !== '_' && typeof helpers[key] === 'function') {
+      fs.writeSync(fd, `testKeys.push(helpers.${key});\n`);
+    }
+  }
+} finally {
+  if (fd !== undefined) {
+    fs.closeSync(fd);
+  }
+}