From: Jukka Kurkela Date: Thu, 2 Sep 2021 00:27:26 +0000 (+0300) Subject: Add missing typings of helpers, add automatic test (#9570) X-Git-Tag: v3.6.0~46 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3ed94559ddede4abd4190afbb0e790d9a1fbe3ca;p=thirdparty%2FChart.js.git Add missing typings of helpers, add automatic test (#9570) * Add missing typings of helpers, add automatic test * Add error handling to autogen.js --- diff --git a/.gitignore b/.gitignore index 3ba0279f2..112570e74 100644 --- a/.gitignore +++ b/.gitignore @@ -27,3 +27,6 @@ docs/api *.log *.swp *.stackdump + +# Generated +/types/tests/autogen*.ts diff --git a/package-lock.json b/package-lock.json index 4fbb8aa4a..43a27e58f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -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", @@ -7840,6 +7841,15 @@ "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", @@ -20863,7 +20873,6 @@ "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", @@ -20876,7 +20885,6 @@ "@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" }, @@ -25335,6 +25343,12 @@ "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", diff --git a/package.json b/package.json index 474186e10..2ce25fbc5 100644 --- a/package.json +++ b/package.json @@ -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", diff --git a/types/geometric.d.ts b/types/geometric.d.ts index 3677668a6..0e1affdae 100644 --- a/types/geometric.d.ts +++ b/types/geometric.d.ts @@ -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; + +export type RoundedRect = { + x: number; + y: number; + w: number; + h: number; + radius?: CornerRadius +} diff --git a/types/helpers/helpers.canvas.d.ts b/types/helpers/helpers.canvas.d.ts index 2d889df9f..4018f2e99 100644 --- a/types/helpers/helpers.canvas.d.ts +++ b/types/helpers/helpers.canvas.d.ts @@ -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; diff --git a/types/helpers/helpers.core.d.ts b/types/helpers/helpers.core.d.ts index f09280906..a973b362c 100644 --- a/types/helpers/helpers.core.d.ts +++ b/types/helpers/helpers.core.d.ts @@ -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(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(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, b: Set): boolean; diff --git a/types/helpers/helpers.dom.d.ts b/types/helpers/helpers.dom.d.ts index ba438d608..ac6f0cd89 100644 --- a/types/helpers/helpers.dom.d.ts +++ b/types/helpers/helpers.dom.d.ts @@ -15,3 +15,4 @@ export function retinaScale( forceRatio: number, forceStyle?: boolean ): void; +export function readUsedSize(element: HTMLElement, property: 'width' | 'height'): number | undefined; diff --git a/types/helpers/helpers.math.d.ts b/types/helpers/helpers.math.d.ts index 906087024..3e0e9b8da 100644 --- a/types/helpers/helpers.math.d.ts +++ b/types/helpers/helpers.math.d.ts @@ -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; /** diff --git a/types/helpers/helpers.options.d.ts b/types/helpers/helpers.options.d.ts index c98404d1c..28ad773d3 100644 --- a/types/helpers/helpers.options.d.ts +++ b/types/helpers/helpers.options.d.ts @@ -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): CanvasFontSpec; */ export function toLineHeight(value: string, size: number): number; +export function toTRBL(value: number | Partial): TRBL; +export function toTRBLCorners(value: number | Partial): 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 index 000000000..6b3770444 --- /dev/null +++ b/types/tests/autogen.js @@ -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); + } +}