From add0cd1062af1b1aa63d7edb7f52d93fa579aff3 Mon Sep 17 00:00:00 2001 From: Ib Green Date: Thu, 1 Aug 2024 12:51:30 -0400 Subject: [PATCH] chore: bump to ocular-dev-tools@2.0.0-alpha.34 --- .eslintrc.cjs | 2 + modules/core/src/classes/euler.ts | 3 +- modules/core/src/classes/matrix3.ts | 1 + modules/core/src/classes/matrix4.ts | 1 + .../core/src/classes/spherical-coordinates.ts | 3 +- modules/core/src/gl-matrix/vec2.ts | 18 +- modules/core/src/index.ts | 17 +- modules/core/src/lib/common.ts | 4 +- modules/culling/package.json | 3 +- .../bounding-volumes/oriented-bounding-box.ts | 3 +- .../culling/src/lib/perspective-frustum.ts | 3 +- modules/geospatial/package.json | 3 +- .../ellipsoid/helpers/ellipsoid-transform.ts | 3 +- .../web-mercator/src/web-mercator-utils.ts | 1 + package.json | 7 +- yarn.lock | 421 +++++++++++++----- 16 files changed, 349 insertions(+), 144 deletions(-) diff --git a/.eslintrc.cjs b/.eslintrc.cjs index a3025020..be35dfde 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -25,7 +25,9 @@ module.exports = getESLintConfig({ { files: ['modules/**/*.ts', 'modules/**/*.js'], rules: { + 'no-use-before-define': 0, 'import/no-unresolved': 0, + 'import/named': 0, '@typescript-eslint/ban-ts-comment': 0 // We do need our ts-ignores } }, diff --git a/modules/core/src/classes/euler.ts b/modules/core/src/classes/euler.ts index a564d660..80a30d59 100644 --- a/modules/core/src/classes/euler.ts +++ b/modules/core/src/classes/euler.ts @@ -14,6 +14,7 @@ import {checkNumber} from '../lib/validators'; const ERR_UNKNOWN_ORDER = 'Unknown Euler angle order'; const ALMOST_ONE = 0.99999; +// eslint-disable-next-line no-shadow enum RotationOrder { ZYX = 0, YXZ = 1, @@ -71,8 +72,8 @@ export class Euler extends MathArray { super(-0, -0, -0, -0); // eslint-disable-next-line prefer-rest-params if (arguments.length > 0 && Array.isArray(arguments[0])) { - // eslint-disable-next-line prefer-rest-params // @ts-expect-error + // eslint-disable-next-line prefer-rest-params this.fromVector3(...arguments); } else { this.set(x, y, z, order); diff --git a/modules/core/src/classes/matrix3.ts b/modules/core/src/classes/matrix3.ts index 8d8b9476..7218cbfb 100644 --- a/modules/core/src/classes/matrix3.ts +++ b/modules/core/src/classes/matrix3.ts @@ -22,6 +22,7 @@ import { import {transformMat3 as vec2_transformMat3} from '../gl-matrix/vec2'; import {transformMat3 as vec3_transformMat3} from '../gl-matrix/vec3'; +// eslint-disable-next-line no-shadow enum INDICES { COL0ROW0 = 0, COL0ROW1 = 1, diff --git a/modules/core/src/classes/matrix4.ts b/modules/core/src/classes/matrix4.ts index 234e3286..8bb06805 100644 --- a/modules/core/src/classes/matrix4.ts +++ b/modules/core/src/classes/matrix4.ts @@ -31,6 +31,7 @@ import {transformMat4 as vec2_transformMat4} from '../gl-matrix/vec2'; import {transformMat4 as vec3_transformMat4} from '../gl-matrix/vec3'; import {transformMat4 as vec4_transformMat4} from '../gl-matrix/vec4'; +// eslint-disable-next-line no-shadow enum INDICES { COL0ROW0 = 0, COL0ROW1 = 1, diff --git a/modules/core/src/classes/spherical-coordinates.ts b/modules/core/src/classes/spherical-coordinates.ts index d862317d..1b179301 100644 --- a/modules/core/src/classes/spherical-coordinates.ts +++ b/modules/core/src/classes/spherical-coordinates.ts @@ -6,8 +6,7 @@ // Adaptation of THREE.js Spherical class, under MIT license import {NumericArray} from '@math.gl/types'; import {Vector3} from './vector3'; -import {formatValue, equals, config} from '../lib/common'; -import {degrees, radians, clamp} from '../lib/common'; +import {formatValue, equals, config, degrees, radians, clamp} from '../lib/common'; // @ts-ignore gl-matrix types... import * as vec3 from '../gl-matrix/vec3'; diff --git a/modules/core/src/gl-matrix/vec2.ts b/modules/core/src/gl-matrix/vec2.ts index bb45aa21..072f7da1 100644 --- a/modules/core/src/gl-matrix/vec2.ts +++ b/modules/core/src/gl-matrix/vec2.ts @@ -12,9 +12,9 @@ import * as glMatrix from './common.js'; /** * Creates a new, empty vec2 * - * @returns {NumericArray} a new 2D vector + * @returns a new 2D vector */ -export function create() { +export function create(): NumericArray { const out = new glMatrix.ARRAY_TYPE(2); if (glMatrix.ARRAY_TYPE != Float32Array) { out[0] = 0; @@ -26,10 +26,10 @@ export function create() { /** * Creates a new vec2 initialized with values from an existing vector * - * @param {Readonly} a vector to clone - * @returns {NumericArray} a new 2D vector + * @param a vector to clone + * @returns a new 2D vector */ -export function clone(a) { +export function clone(a: Readonly): NumericArray { const out = new glMatrix.ARRAY_TYPE(2); out[0] = a[0]; out[1] = a[1]; @@ -39,11 +39,11 @@ export function clone(a) { /** * Creates a new vec2 initialized with the given values * - * @param {Number} x X component - * @param {Number} y Y component - * @returns {NumericArray} a new 2D vector + * @param x X component + * @param y Y component + * @returns a new 2D vector */ -export function fromValues(x, y) { +export function fromValues(x: number, y: number): NumericArray { const out = new glMatrix.ARRAY_TYPE(2); out[0] = x; out[1] = y; diff --git a/modules/core/src/index.ts b/modules/core/src/index.ts index 8b5be8eb..373c167c 100644 --- a/modules/core/src/index.ts +++ b/modules/core/src/index.ts @@ -3,9 +3,22 @@ // Copyright (c) vis.gl contributors // types -export type {TypedArray, TypedArrayConstructor, NumberArray, NumericArray} from '@math.gl/types'; +export type { + TypedArray, + TypedArrayConstructor, + NumericArray, + NumberArray, + NumberArray2, + NumberArray3, + NumberArray4, + NumberArray6, + NumberArray8, + NumberArray9, + NumberArray12, + NumberArray16 +} from '@math.gl/types'; -export type {isTypedArray, isNumericArray} from '@math.gl/types'; +export type {isTypedArray, isNumberArray, isNumericArray} from '@math.gl/types'; // classes export {Vector2} from './classes/vector2'; diff --git a/modules/core/src/lib/common.ts b/modules/core/src/lib/common.ts index 104d9517..c571f93f 100644 --- a/modules/core/src/lib/common.ts +++ b/modules/core/src/lib/common.ts @@ -2,6 +2,8 @@ // SPDX-License-Identifier: MIT // Copyright (c) vis.gl contributors +/* eslint-disable no-shadow */ // radians and degrees are common variable names + import type {NumericArray} from '@math.gl/types'; import type {MathArray} from '../classes/base/math-array'; @@ -301,7 +303,7 @@ function duplicateArray(array: NumericArray): NumericArray { // otherwise applies func to the argument value function map( value: number | NumericArray, - func: (x: number, index?: number, result?: NumericArray) => number, + func: (x: number, index?: number, resultArray?: NumericArray) => number, result?: NumericArray ): number | NumericArray { if (isArray(value)) { diff --git a/modules/culling/package.json b/modules/culling/package.json index 06d2cdd3..2df48e51 100644 --- a/modules/culling/package.json +++ b/modules/culling/package.json @@ -42,7 +42,8 @@ "src" ], "dependencies": { - "@math.gl/core": "4.1.0-alpha.1" + "@math.gl/core": "4.1.0-alpha.1", + "@math.gl/types": "4.1.0-alpha.1" }, "gitHead": "e1a95300cb225a90da6e90333d4adf290f7ba501" } diff --git a/modules/culling/src/lib/bounding-volumes/oriented-bounding-box.ts b/modules/culling/src/lib/bounding-volumes/oriented-bounding-box.ts index 3aef2f68..d5fa7c91 100644 --- a/modules/culling/src/lib/bounding-volumes/oriented-bounding-box.ts +++ b/modules/culling/src/lib/bounding-volumes/oriented-bounding-box.ts @@ -5,7 +5,8 @@ // This file is derived from the Cesium math library under Apache 2 license // See LICENSE.md and https://github.com/AnalyticalGraphicsInc/cesium/blob/master/LICENSE.md -import {Vector3, Matrix3, Matrix4, Quaternion, NumericArray} from '@math.gl/core'; +import {NumericArray} from '@math.gl/types'; +import {Vector3, Matrix3, Matrix4, Quaternion} from '@math.gl/core'; import type {BoundingVolume} from './bounding-volume'; import {BoundingSphere} from './bounding-sphere'; import type {Plane} from '../plane'; diff --git a/modules/culling/src/lib/perspective-frustum.ts b/modules/culling/src/lib/perspective-frustum.ts index addb245b..7c227dd2 100644 --- a/modules/culling/src/lib/perspective-frustum.ts +++ b/modules/culling/src/lib/perspective-frustum.ts @@ -9,7 +9,8 @@ // - It has not been fully adapted to math.gl conventions // - Documentation has not been ported -import {assert, Matrix4, NumericArray, Vector2} from '@math.gl/core'; +import {NumericArray} from '@math.gl/types'; +import {assert, Matrix4, Vector2} from '@math.gl/core'; import {PerspectiveOffCenterFrustum} from './perspective-off-center-frustum'; import {CullingVolume} from './culling-volume'; diff --git a/modules/geospatial/package.json b/modules/geospatial/package.json index 8604b939..7b90c0b0 100644 --- a/modules/geospatial/package.json +++ b/modules/geospatial/package.json @@ -39,7 +39,8 @@ "src" ], "dependencies": { - "@math.gl/core": "4.1.0-alpha.1" + "@math.gl/core": "4.1.0-alpha.1", + "@math.gl/types": "4.1.0-alpha.1" }, "gitHead": "e1a95300cb225a90da6e90333d4adf290f7ba501" } diff --git a/modules/geospatial/src/ellipsoid/helpers/ellipsoid-transform.ts b/modules/geospatial/src/ellipsoid/helpers/ellipsoid-transform.ts index 80608ffa..a6a3046e 100644 --- a/modules/geospatial/src/ellipsoid/helpers/ellipsoid-transform.ts +++ b/modules/geospatial/src/ellipsoid/helpers/ellipsoid-transform.ts @@ -2,7 +2,8 @@ // SPDX-License-Identifier: MIT and Apache-2.0 // Copyright (c) vis.gl contributors -import {NumericArray, Vector3, assert, equals as equalsEpsilon} from '@math.gl/core'; +import {NumericArray} from '@math.gl/types'; +import {Vector3, assert, equals as equalsEpsilon} from '@math.gl/core'; import type {Ellipsoid} from '../ellipsoid'; diff --git a/modules/web-mercator/src/web-mercator-utils.ts b/modules/web-mercator/src/web-mercator-utils.ts index a15bedf5..034a3bcc 100644 --- a/modules/web-mercator/src/web-mercator-utils.ts +++ b/modules/web-mercator/src/web-mercator-utils.ts @@ -190,6 +190,7 @@ export function addMetersToLngLat(lngLatZ: number[], xyz: number[]): number[] { const [longitude, latitude, z0] = lngLatZ; const [x, y, z] = xyz; + // eslint-disable-next-line no-shadow const {unitsPerMeter, unitsPerMeter2} = getDistanceScales({ longitude, latitude, diff --git a/package.json b/package.json index 62d72835..b385fbaa 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "examples/*" ], "scripts": { - "bootstrap": "yarn && ocular-bootstrap", + "bootstrap": "ocular-bootstrap", "clean": "ocular-clean", "build": "npm run clean && time ocular-build", "cover": "ocular-test cover", @@ -26,9 +26,10 @@ "@probe.gl/bench": "^4.0.0", "@turf/destination": "^6.0.1", "@types/tape-promise": "^4.0.1", - "ocular-dev-tools": "2.0.0-alpha.33", + "ocular-dev-tools": "2.0.0-alpha.34", "pre-commit": "^1.2.2", - "puppeteer": "^22.0.0" + "puppeteer": "^22.0.0", + "tap-spec": "^5.0.0" }, "resolutions": { "typescript": "5.4.3" diff --git a/yarn.lock b/yarn.lock index 4c3eca1b..cf54648b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2176,7 +2176,14 @@ __metadata: languageName: node linkType: hard -"@eslint-community/regexpp@npm:^4.5.1, @eslint-community/regexpp@npm:^4.6.1": +"@eslint-community/regexpp@npm:^4.10.0": + version: 4.11.0 + resolution: "@eslint-community/regexpp@npm:4.11.0" + checksum: 10c0/0f6328869b2741e2794da4ad80beac55cba7de2d3b44f796a60955b0586212ec75e6b0253291fd4aad2100ad471d1480d8895f2b54f1605439ba4c875e05e523 + languageName: node + linkType: hard + +"@eslint-community/regexpp@npm:^4.6.1": version: 4.10.0 resolution: "@eslint-community/regexpp@npm:4.10.0" checksum: 10c0/c5f60ef1f1ea7649fa7af0e80a5a79f64b55a8a8fa5086de4727eb4c86c652aedee407a9c143b8995d2c0b2d75c1222bec9ba5d73dbfc1f314550554f0979ef4 @@ -2401,6 +2408,7 @@ __metadata: resolution: "@math.gl/culling@workspace:modules/culling" dependencies: "@math.gl/core": "npm:4.1.0-alpha.1" + "@math.gl/types": "npm:4.1.0-alpha.1" languageName: unknown linkType: soft @@ -2437,6 +2445,7 @@ __metadata: resolution: "@math.gl/geospatial@workspace:modules/geospatial" dependencies: "@math.gl/core": "npm:4.1.0-alpha.1" + "@math.gl/types": "npm:4.1.0-alpha.1" languageName: unknown linkType: soft @@ -3284,13 +3293,6 @@ __metadata: languageName: node linkType: hard -"@types/json-schema@npm:^7.0.12": - version: 7.0.15 - resolution: "@types/json-schema@npm:7.0.15" - checksum: 10c0/a996a745e6c5d60292f36731dd41341339d4eeed8180bb09226e5c8d23759067692b1d88e5d91d72ee83dfc00d3aca8e7bd43ea120516c17922cbcb7c3e252db - languageName: node - linkType: hard - "@types/json-schema@npm:^7.0.5": version: 7.0.7 resolution: "@types/json-schema@npm:7.0.7" @@ -3399,13 +3401,6 @@ __metadata: languageName: node linkType: hard -"@types/semver@npm:^7.5.0": - version: 7.5.8 - resolution: "@types/semver@npm:7.5.8" - checksum: 10c0/8663ff927234d1c5fcc04b33062cb2b9fcfbe0f5f351ed26c4d1e1581657deebd506b41ff7fdf89e787e3d33ce05854bc01686379b89e9c49b564c4cfa988efa - languageName: node - linkType: hard - "@types/tape-promise@npm:^4.0.1": version: 4.0.1 resolution: "@types/tape-promise@npm:4.0.1" @@ -3440,126 +3435,121 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/eslint-plugin@npm:^6.14.0": - version: 6.21.0 - resolution: "@typescript-eslint/eslint-plugin@npm:6.21.0" +"@typescript-eslint/eslint-plugin@npm:7.18.0": + version: 7.18.0 + resolution: "@typescript-eslint/eslint-plugin@npm:7.18.0" dependencies: - "@eslint-community/regexpp": "npm:^4.5.1" - "@typescript-eslint/scope-manager": "npm:6.21.0" - "@typescript-eslint/type-utils": "npm:6.21.0" - "@typescript-eslint/utils": "npm:6.21.0" - "@typescript-eslint/visitor-keys": "npm:6.21.0" - debug: "npm:^4.3.4" + "@eslint-community/regexpp": "npm:^4.10.0" + "@typescript-eslint/scope-manager": "npm:7.18.0" + "@typescript-eslint/type-utils": "npm:7.18.0" + "@typescript-eslint/utils": "npm:7.18.0" + "@typescript-eslint/visitor-keys": "npm:7.18.0" graphemer: "npm:^1.4.0" - ignore: "npm:^5.2.4" + ignore: "npm:^5.3.1" natural-compare: "npm:^1.4.0" - semver: "npm:^7.5.4" - ts-api-utils: "npm:^1.0.1" + ts-api-utils: "npm:^1.3.0" peerDependencies: - "@typescript-eslint/parser": ^6.0.0 || ^6.0.0-alpha - eslint: ^7.0.0 || ^8.0.0 + "@typescript-eslint/parser": ^7.0.0 + eslint: ^8.56.0 peerDependenciesMeta: typescript: optional: true - checksum: 10c0/f911a79ee64d642f814a3b6cdb0d324b5f45d9ef955c5033e78903f626b7239b4aa773e464a38c3e667519066169d983538f2bf8e5d00228af587c9d438fb344 + checksum: 10c0/2b37948fa1b0dab77138909dabef242a4d49ab93e4019d4ef930626f0a7d96b03e696cd027fa0087881c20e73be7be77c942606b4a76fa599e6b37f6985304c3 languageName: node linkType: hard -"@typescript-eslint/parser@npm:^6.14.0": - version: 6.21.0 - resolution: "@typescript-eslint/parser@npm:6.21.0" +"@typescript-eslint/parser@npm:7.18.0": + version: 7.18.0 + resolution: "@typescript-eslint/parser@npm:7.18.0" dependencies: - "@typescript-eslint/scope-manager": "npm:6.21.0" - "@typescript-eslint/types": "npm:6.21.0" - "@typescript-eslint/typescript-estree": "npm:6.21.0" - "@typescript-eslint/visitor-keys": "npm:6.21.0" + "@typescript-eslint/scope-manager": "npm:7.18.0" + "@typescript-eslint/types": "npm:7.18.0" + "@typescript-eslint/typescript-estree": "npm:7.18.0" + "@typescript-eslint/visitor-keys": "npm:7.18.0" debug: "npm:^4.3.4" peerDependencies: - eslint: ^7.0.0 || ^8.0.0 + eslint: ^8.56.0 peerDependenciesMeta: typescript: optional: true - checksum: 10c0/a8f99820679decd0d115c0af61903fb1de3b1b5bec412dc72b67670bf636de77ab07f2a68ee65d6da7976039bbf636907f9d5ca546db3f0b98a31ffbc225bc7d + checksum: 10c0/370e73fca4278091bc1b657f85e7d74cd52b24257ea20c927a8e17546107ce04fbf313fec99aed0cc2a145ddbae1d3b12e9cc2c1320117636dc1281bcfd08059 languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:6.21.0": - version: 6.21.0 - resolution: "@typescript-eslint/scope-manager@npm:6.21.0" +"@typescript-eslint/scope-manager@npm:7.18.0": + version: 7.18.0 + resolution: "@typescript-eslint/scope-manager@npm:7.18.0" dependencies: - "@typescript-eslint/types": "npm:6.21.0" - "@typescript-eslint/visitor-keys": "npm:6.21.0" - checksum: 10c0/eaf868938d811cbbea33e97e44ba7050d2b6892202cea6a9622c486b85ab1cf801979edf78036179a8ba4ac26f1dfdf7fcc83a68c1ff66be0b3a8e9a9989b526 + "@typescript-eslint/types": "npm:7.18.0" + "@typescript-eslint/visitor-keys": "npm:7.18.0" + checksum: 10c0/038cd58c2271de146b3a594afe2c99290034033326d57ff1f902976022c8b0138ffd3cb893ae439ae41003b5e4bcc00cabf6b244ce40e8668f9412cc96d97b8e languageName: node linkType: hard -"@typescript-eslint/type-utils@npm:6.21.0": - version: 6.21.0 - resolution: "@typescript-eslint/type-utils@npm:6.21.0" +"@typescript-eslint/type-utils@npm:7.18.0": + version: 7.18.0 + resolution: "@typescript-eslint/type-utils@npm:7.18.0" dependencies: - "@typescript-eslint/typescript-estree": "npm:6.21.0" - "@typescript-eslint/utils": "npm:6.21.0" + "@typescript-eslint/typescript-estree": "npm:7.18.0" + "@typescript-eslint/utils": "npm:7.18.0" debug: "npm:^4.3.4" - ts-api-utils: "npm:^1.0.1" + ts-api-utils: "npm:^1.3.0" peerDependencies: - eslint: ^7.0.0 || ^8.0.0 + eslint: ^8.56.0 peerDependenciesMeta: typescript: optional: true - checksum: 10c0/7409c97d1c4a4386b488962739c4f1b5b04dc60cf51f8cd88e6b12541f84d84c6b8b67e491a147a2c95f9ec486539bf4519fb9d418411aef6537b9c156468117 + checksum: 10c0/ad92a38007be620f3f7036f10e234abdc2fdc518787b5a7227e55fd12896dacf56e8b34578723fbf9bea8128df2510ba8eb6739439a3879eda9519476d5783fd languageName: node linkType: hard -"@typescript-eslint/types@npm:6.21.0": - version: 6.21.0 - resolution: "@typescript-eslint/types@npm:6.21.0" - checksum: 10c0/020631d3223bbcff8a0da3efbdf058220a8f48a3de221563996ad1dcc30d6c08dadc3f7608cc08830d21c0d565efd2db19b557b9528921c78aabb605eef2d74d +"@typescript-eslint/types@npm:7.18.0": + version: 7.18.0 + resolution: "@typescript-eslint/types@npm:7.18.0" + checksum: 10c0/eb7371ac55ca77db8e59ba0310b41a74523f17e06f485a0ef819491bc3dd8909bb930120ff7d30aaf54e888167e0005aa1337011f3663dc90fb19203ce478054 languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:6.21.0": - version: 6.21.0 - resolution: "@typescript-eslint/typescript-estree@npm:6.21.0" +"@typescript-eslint/typescript-estree@npm:7.18.0": + version: 7.18.0 + resolution: "@typescript-eslint/typescript-estree@npm:7.18.0" dependencies: - "@typescript-eslint/types": "npm:6.21.0" - "@typescript-eslint/visitor-keys": "npm:6.21.0" + "@typescript-eslint/types": "npm:7.18.0" + "@typescript-eslint/visitor-keys": "npm:7.18.0" debug: "npm:^4.3.4" globby: "npm:^11.1.0" is-glob: "npm:^4.0.3" - minimatch: "npm:9.0.3" - semver: "npm:^7.5.4" - ts-api-utils: "npm:^1.0.1" + minimatch: "npm:^9.0.4" + semver: "npm:^7.6.0" + ts-api-utils: "npm:^1.3.0" peerDependenciesMeta: typescript: optional: true - checksum: 10c0/af1438c60f080045ebb330155a8c9bb90db345d5069cdd5d01b67de502abb7449d6c75500519df829f913a6b3f490ade3e8215279b6bdc63d0fb0ae61034df5f + checksum: 10c0/0c7f109a2e460ec8a1524339479cf78ff17814d23c83aa5112c77fb345e87b3642616291908dcddea1e671da63686403dfb712e4a4435104f92abdfddf9aba81 languageName: node linkType: hard -"@typescript-eslint/utils@npm:6.21.0": - version: 6.21.0 - resolution: "@typescript-eslint/utils@npm:6.21.0" +"@typescript-eslint/utils@npm:7.18.0": + version: 7.18.0 + resolution: "@typescript-eslint/utils@npm:7.18.0" dependencies: "@eslint-community/eslint-utils": "npm:^4.4.0" - "@types/json-schema": "npm:^7.0.12" - "@types/semver": "npm:^7.5.0" - "@typescript-eslint/scope-manager": "npm:6.21.0" - "@typescript-eslint/types": "npm:6.21.0" - "@typescript-eslint/typescript-estree": "npm:6.21.0" - semver: "npm:^7.5.4" + "@typescript-eslint/scope-manager": "npm:7.18.0" + "@typescript-eslint/types": "npm:7.18.0" + "@typescript-eslint/typescript-estree": "npm:7.18.0" peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - checksum: 10c0/ab2df3833b2582d4e5467a484d08942b4f2f7208f8e09d67de510008eb8001a9b7460f2f9ba11c12086fd3cdcac0c626761c7995c2c6b5657d5fa6b82030a32d + eslint: ^8.56.0 + checksum: 10c0/a25a6d50eb45c514469a01ff01f215115a4725fb18401055a847ddf20d1b681409c4027f349033a95c4ff7138d28c3b0a70253dfe8262eb732df4b87c547bd1e languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:6.21.0": - version: 6.21.0 - resolution: "@typescript-eslint/visitor-keys@npm:6.21.0" +"@typescript-eslint/visitor-keys@npm:7.18.0": + version: 7.18.0 + resolution: "@typescript-eslint/visitor-keys@npm:7.18.0" dependencies: - "@typescript-eslint/types": "npm:6.21.0" - eslint-visitor-keys: "npm:^3.4.1" - checksum: 10c0/7395f69739cfa1cb83c1fb2fad30afa2a814756367302fb4facd5893eff66abc807e8d8f63eba94ed3b0fe0c1c996ac9a1680bcbf0f83717acedc3f2bb724fbf + "@typescript-eslint/types": "npm:7.18.0" + eslint-visitor-keys: "npm:^3.4.3" + checksum: 10c0/538b645f8ff1d9debf264865c69a317074eaff0255e63d7407046176b0f6a6beba34a6c51d511f12444bae12a98c69891eb6f403c9f54c6c2e2849d1c1cb73c0 languageName: node linkType: hard @@ -4022,6 +4012,13 @@ __metadata: languageName: node linkType: hard +"ansi-styles@npm:^2.2.1": + version: 2.2.1 + resolution: "ansi-styles@npm:2.2.1" + checksum: 10c0/7c68aed4f1857389e7a12f85537ea5b40d832656babbf511cc7ecd9efc52889b9c3e5653a71a6aade783c3c5e0aa223ad4ff8e83c27ac8a666514e6c79068cab + languageName: node + linkType: hard + "ansi-styles@npm:^3.2.0, ansi-styles@npm:^3.2.1": version: 3.2.1 resolution: "ansi-styles@npm:3.2.1" @@ -4935,6 +4932,13 @@ __metadata: languageName: node linkType: hard +"buffer-shims@npm:~1.0.0": + version: 1.0.0 + resolution: "buffer-shims@npm:1.0.0" + checksum: 10c0/f93dfc71dd29877ed10ae19dfa2436665bcf385bb2053b9804a4a9e5ae5274578ee02c79aad32de9c93034e57ae724917dc975a37ba73fddd0137eabe2d7dd33 + languageName: node + linkType: hard + "buffer-xor@npm:^1.0.3": version: 1.0.3 resolution: "buffer-xor@npm:1.0.3" @@ -5145,6 +5149,19 @@ __metadata: languageName: node linkType: hard +"chalk@npm:^1.0.0": + version: 1.1.3 + resolution: "chalk@npm:1.1.3" + dependencies: + ansi-styles: "npm:^2.2.1" + escape-string-regexp: "npm:^1.0.2" + has-ansi: "npm:^2.0.0" + strip-ansi: "npm:^3.0.0" + supports-color: "npm:^2.0.0" + checksum: 10c0/28c3e399ec286bb3a7111fd4225ebedb0d7b813aef38a37bca7c498d032459c265ef43404201d5fbb8d888d29090899c95335b4c0cda13e8b126ff15c541cef8 + languageName: node + linkType: hard + "chalk@npm:^2.0.0, chalk@npm:^2.4.2": version: 2.4.2 resolution: "chalk@npm:2.4.2" @@ -7012,7 +7029,7 @@ __metadata: languageName: node linkType: hard -"escape-string-regexp@npm:^1.0.5": +"escape-string-regexp@npm:^1.0.2, escape-string-regexp@npm:^1.0.5": version: 1.0.5 resolution: "escape-string-regexp@npm:1.0.5" checksum: 10c0/a968ad453dd0c2724e14a4f20e177aaf32bb384ab41b674a8454afe9a41c5e6fe8903323e0a1052f56289d04bd600f81278edf140b0fcc02f5cac98d0f5b5371 @@ -7063,16 +7080,14 @@ __metadata: languageName: node linkType: hard -"eslint-config-prettier@npm:^6.7.0": - version: 6.15.0 - resolution: "eslint-config-prettier@npm:6.15.0" - dependencies: - get-stdin: "npm:^6.0.0" +"eslint-config-prettier@npm:^8.0.0": + version: 8.10.0 + resolution: "eslint-config-prettier@npm:8.10.0" peerDependencies: - eslint: ">=3.14.1" + eslint: ">=7.0.0" bin: - eslint-config-prettier-check: bin/cli.js - checksum: 10c0/28fff0bd0cda1af62645955f916f4d5bc6922d6ec6a7c8c9dd207d3aab7a241ca1feb1ec787acea09a95956c7e5080a6310ed391b0ff218055378e1af24e2ff9 + eslint-config-prettier: bin/cli.js + checksum: 10c0/19f8c497d9bdc111a17a61b25ded97217be3755bbc4714477dfe535ed539dddcaf42ef5cf8bb97908b058260cf89a3d7c565cb0be31096cbcd39f4c2fa5fe43c languageName: node linkType: hard @@ -7692,6 +7707,16 @@ __metadata: languageName: node linkType: hard +"figures@npm:^1.4.0": + version: 1.7.0 + resolution: "figures@npm:1.7.0" + dependencies: + escape-string-regexp: "npm:^1.0.5" + object-assign: "npm:^4.1.0" + checksum: 10c0/a10942b0eec3372bf61822ab130d2bbecdf527d551b0b013fbe7175b7a0238ead644ee8930a1a3cb872fb9ab2ec27df30e303765a3b70b97852e2e9ee43bdff3 + languageName: node + linkType: hard + "file-entry-cache@npm:^6.0.1": version: 6.0.1 resolution: "file-entry-cache@npm:6.0.1" @@ -8216,13 +8241,6 @@ __metadata: languageName: node linkType: hard -"get-stdin@npm:^6.0.0": - version: 6.0.0 - resolution: "get-stdin@npm:6.0.0" - checksum: 10c0/c8971d27ffb72e4aae0f18ba792d2bfec872f662e98e13b182d8611a36f38396b79f43563884f597e667c7bb9ab98f337ee958ae278af5fa7c310ca62845e56b - languageName: node - linkType: hard - "get-stream@npm:6.0.0": version: 6.0.0 resolution: "get-stream@npm:6.0.0" @@ -8619,6 +8637,15 @@ __metadata: languageName: node linkType: hard +"has-ansi@npm:^2.0.0": + version: 2.0.0 + resolution: "has-ansi@npm:2.0.0" + dependencies: + ansi-regex: "npm:^2.0.0" + checksum: 10c0/f54e4887b9f8f3c4bfefd649c48825b3c093987c92c27880ee9898539e6f01aed261e82e73153c3f920fde0db5bf6ebd58deb498ed1debabcb4bc40113ccdf05 + languageName: node + linkType: hard + "has-bigints@npm:^1.0.2": version: 1.0.2 resolution: "has-bigints@npm:1.0.2" @@ -9068,7 +9095,7 @@ __metadata: languageName: node linkType: hard -"ignore@npm:^5.0.4, ignore@npm:^5.2.0, ignore@npm:^5.2.4": +"ignore@npm:^5.0.4, ignore@npm:^5.2.0, ignore@npm:^5.3.1": version: 5.3.1 resolution: "ignore@npm:5.3.1" checksum: 10c0/703f7f45ffb2a27fb2c5a8db0c32e7dee66b33a225d28e8db4e1be6474795f606686a6e3bcc50e1aa12f2042db4c9d4a7d60af3250511de74620fbed052ea4cd @@ -9552,6 +9579,13 @@ __metadata: languageName: node linkType: hard +"is-finite@npm:^1.0.1": + version: 1.1.0 + resolution: "is-finite@npm:1.1.0" + checksum: 10c0/ca6bc7a0321b339f098e657bd4cbf4bb2410f5a11f1b9adb1a1a9ab72288b64368e8251326cb1f74e985f2779299cec3e1f1e558b68ce7e1e2c9be17b7cfd626 + languageName: node + linkType: hard + "is-fullwidth-code-point@npm:^2.0.0": version: 2.0.0 resolution: "is-fullwidth-code-point@npm:2.0.0" @@ -10614,7 +10648,7 @@ __metadata: languageName: node linkType: hard -"lodash@npm:^4.17.11, lodash@npm:^4.17.14, lodash@npm:^4.17.21, lodash@npm:^4.5": +"lodash@npm:^4.17.10, lodash@npm:^4.17.11, lodash@npm:^4.17.14, lodash@npm:^4.17.21, lodash@npm:^4.5": version: 4.17.21 resolution: "lodash@npm:4.17.21" checksum: 10c0/d8cbea072bb08655bb4c989da418994b073a608dffa608b09ac04b43a791b12aeae7cd7ad919aa4c925f33b48490b5cfe6c1f71d827956071dae2e7bb3a6b74c @@ -10826,9 +10860,10 @@ __metadata: "@probe.gl/bench": "npm:^4.0.0" "@turf/destination": "npm:^6.0.1" "@types/tape-promise": "npm:^4.0.1" - ocular-dev-tools: "npm:2.0.0-alpha.33" + ocular-dev-tools: "npm:2.0.0-alpha.34" pre-commit: "npm:^1.2.2" puppeteer: "npm:^22.0.0" + tap-spec: "npm:^5.0.0" languageName: unknown linkType: soft @@ -11856,7 +11891,7 @@ __metadata: languageName: node linkType: hard -"object-assign@npm:^4.0.1, object-assign@npm:^4.1.1": +"object-assign@npm:^4.0.1, object-assign@npm:^4.1.0, object-assign@npm:^4.1.1": version: 4.1.1 resolution: "object-assign@npm:4.1.1" checksum: 10c0/1f4df9945120325d041ccf7b86f31e8bcc14e73d29171e37a7903050e96b81323784ec59f93f102ec635bcf6fa8034ba3ea0a8c7e69fa202b87ae3b6cec5a414 @@ -12049,9 +12084,9 @@ __metadata: languageName: node linkType: hard -"ocular-dev-tools@npm:2.0.0-alpha.33": - version: 2.0.0-alpha.33 - resolution: "ocular-dev-tools@npm:2.0.0-alpha.33" +"ocular-dev-tools@npm:2.0.0-alpha.34": + version: 2.0.0-alpha.34 + resolution: "ocular-dev-tools@npm:2.0.0-alpha.34" dependencies: "@babel/cli": "npm:^7.14.5" "@babel/core": "npm:^7.14.5" @@ -12064,8 +12099,6 @@ __metadata: "@esbuild-plugins/node-globals-polyfill": "npm:^0.2.0" "@esbuild-plugins/node-modules-polyfill": "npm:^0.2.0" "@probe.gl/test-utils": "npm:^4.0.6" - "@typescript-eslint/eslint-plugin": "npm:^6.14.0" - "@typescript-eslint/parser": "npm:^6.14.0" babel-plugin-version-inline: "npm:^1.0.0" c8: "npm:^7.12.0" coveralls: "npm:^3.0.3" @@ -12073,7 +12106,7 @@ __metadata: esbuild: "npm:^0.16.7" esbuild-plugin-external-global: "npm:^1.0.1" eslint: "npm:^8.52.0" - eslint-config-prettier: "npm:^6.7.0" + eslint-config-prettier: "npm:^8.0.0" eslint-plugin-babel: "npm:^5.3.1" eslint-plugin-import: "npm:^2.28.0" eslint-plugin-jsx-a11y: "npm:^6.1.2" @@ -12083,14 +12116,16 @@ __metadata: glob: "npm:^7.1.4" lerna: "npm:^8.1.0" minimatch: "npm:^3.0.0" - prettier: "npm:3.0.3" + prettier: "npm:^3.2.0" prettier-check: "npm:2.0.0" + tap-spec: "npm:^5.0.0" tape: "npm:^4.11.0" tape-promise: "npm:^4.0.0" ts-node: "npm:~10.9.0" ts-patch: "npm:^3.1.2" tsconfig-paths: "npm:^4.1.1" typescript: "npm:^5.2.2" + typescript-eslint: "npm:^7.7.0" vite: "npm:^4.5.0" bin: ocular-bootstrap: scripts/bootstrap.js @@ -12102,7 +12137,7 @@ __metadata: ocular-metrics: scripts/metrics.js ocular-publish: scripts/publish.js ocular-test: scripts/test.js - checksum: 10c0/bc0164eb1adb3442dcdf71e902bf054678184fd94b64d1e7da7c2bc249880ba900bda3d3680f134a1b00c09ccd017b6e45c3daaaa123f3522aa02ef06cbd85d0 + checksum: 10c0/95f4fa97d0365044f1ff252f6a4222e755caf0bcccbf0e35a66d542de64824423e1bbb5d4adf6bf4693729e805f52201d33ce082334c10576920b1f27a2c7bc7 languageName: node linkType: hard @@ -12565,6 +12600,13 @@ __metadata: languageName: node linkType: hard +"parse-ms@npm:^1.0.0": + version: 1.0.1 + resolution: "parse-ms@npm:1.0.1" + checksum: 10c0/b663547cca2a19c08ca92f6051a44f49a5aa46e9394aefe8815e33d13c9e56fc32a8f8c2817425909dd4e4de3b2fe78e7a9350c83c3c1dd7ae3309cf9c72d0fb + languageName: node + linkType: hard + "parse-passwd@npm:^1.0.0": version: 1.0.0 resolution: "parse-passwd@npm:1.0.0" @@ -12828,6 +12870,13 @@ __metadata: languageName: node linkType: hard +"plur@npm:^1.0.0": + version: 1.0.0 + resolution: "plur@npm:1.0.0" + checksum: 10c0/d561395a88a88050f28b36cb46186efa8de12c62158c25ff535990aa580802c8f2b7d4ac1e925e4f215229c6b04f65f41baa12d0fa5673287043ab27b0f30cec + languageName: node + linkType: hard + "pngjs@npm:^3.0.0": version: 3.4.0 resolution: "pngjs@npm:3.4.0" @@ -12987,12 +13036,12 @@ __metadata: languageName: node linkType: hard -"prettier@npm:3.0.3": - version: 3.0.3 - resolution: "prettier@npm:3.0.3" +"prettier@npm:^3.2.0": + version: 3.3.3 + resolution: "prettier@npm:3.3.3" bin: prettier: bin/prettier.cjs - checksum: 10c0/f950887bc03c5b970d8c6dd129364acfbbc61e7b46aec5d5ce17f4adf6404e2ef43072c98b51c4786e0eaca949b307d362a773fd47502862d754b5a328fa2b26 + checksum: 10c0/b85828b08e7505716324e4245549b9205c0cacb25342a030ba8885aba2039a115dbcf75a0b7ca3b37bc9d101ee61fab8113fc69ca3359f2a226f1ecc07ad2e26 languageName: node linkType: hard @@ -13007,6 +13056,17 @@ __metadata: languageName: node linkType: hard +"pretty-ms@npm:^2.1.0": + version: 2.1.0 + resolution: "pretty-ms@npm:2.1.0" + dependencies: + is-finite: "npm:^1.0.1" + parse-ms: "npm:^1.0.0" + plur: "npm:^1.0.0" + checksum: 10c0/039c5ae944e779d8e1cb5e2d21df00c40a9f873713f32d26fe2f8cf994beee9e2beec0d9872e344a2385eb2c541bde91a7ea5ef6697b9a80c5e03b06232b3520 + languageName: node + linkType: hard + "proc-log@npm:^4.0.0, proc-log@npm:^4.1.0, proc-log@npm:^4.2.0": version: 4.2.0 resolution: "proc-log@npm:4.2.0" @@ -13014,6 +13074,13 @@ __metadata: languageName: node linkType: hard +"process-nextick-args@npm:~1.0.6": + version: 1.0.7 + resolution: "process-nextick-args@npm:1.0.7" + checksum: 10c0/941bb79700261e44c535e234f751a924df564d4d8ff250dd06c3e213f639060c190364879722c096e777cae32116c6a88d97bee50d0b5704ab2899813818f4c8 + languageName: node + linkType: hard + "process-nextick-args@npm:~2.0.0": version: 2.0.1 resolution: "process-nextick-args@npm:2.0.1" @@ -13353,6 +13420,13 @@ __metadata: languageName: node linkType: hard +"re-emitter@npm:1.1.3": + version: 1.1.3 + resolution: "re-emitter@npm:1.1.3" + checksum: 10c0/33f53b21e0c2366c047a9e9b950d48fba2aba90ba135dc1c7bab01116f4bb5b6a2dfdd0b5386dc359ac1ca3187011b1e70f80eeaa8f072850633c104055d9dd6 + languageName: node + linkType: hard + "react-dom@npm:^16.3.0": version: 16.14.0 resolution: "react-dom@npm:16.14.0" @@ -13492,6 +13566,21 @@ __metadata: languageName: node linkType: hard +"readable-stream@npm:2.2.9": + version: 2.2.9 + resolution: "readable-stream@npm:2.2.9" + dependencies: + buffer-shims: "npm:~1.0.0" + core-util-is: "npm:~1.0.0" + inherits: "npm:~2.0.1" + isarray: "npm:~1.0.0" + process-nextick-args: "npm:~1.0.6" + string_decoder: "npm:~1.0.0" + util-deprecate: "npm:~1.0.1" + checksum: 10c0/757d86257f1c0e26b0d17c719a9eec107c06af36f126c547bd9fa9a1efee731dc990796015d6fced4d57878634ce42f29a311f0f814c6d4f36db342b9a74597d + languageName: node + linkType: hard + "readable-stream@npm:^3.0.0, readable-stream@npm:^3.0.2, readable-stream@npm:^3.0.6, readable-stream@npm:^3.6.0": version: 3.6.0 resolution: "readable-stream@npm:3.6.0" @@ -13665,7 +13754,7 @@ __metadata: languageName: node linkType: hard -"repeat-string@npm:^1.6.1": +"repeat-string@npm:^1.5.2, repeat-string@npm:^1.6.1": version: 1.6.1 resolution: "repeat-string@npm:1.6.1" checksum: 10c0/87fa21bfdb2fbdedc44b9a5b118b7c1239bdd2c2c1e42742ef9119b7d412a5137a1d23f1a83dc6bb686f4f27429ac6f542e3d923090b44181bafa41e8ac0174d @@ -14216,6 +14305,15 @@ __metadata: languageName: node linkType: hard +"semver@npm:^7.6.0": + version: 7.6.3 + resolution: "semver@npm:7.6.3" + bin: + semver: bin/semver.js + checksum: 10c0/88f33e148b210c153873cb08cfe1e281d518aaa9a666d4d148add6560db5cd3c582f3a08ccb91f38d5f379ead256da9931234ed122057f40bb5766e65e58adaf + languageName: node + linkType: hard + "send@npm:0.18.0": version: 0.18.0 resolution: "send@npm:0.18.0" @@ -14725,6 +14823,15 @@ __metadata: languageName: node linkType: hard +"split@npm:1.0.0": + version: 1.0.0 + resolution: "split@npm:1.0.0" + dependencies: + through: "npm:2" + checksum: 10c0/db72ad27f212c00e9325f2cc2e47458dad62a30b4c9822f7dd04c97d494727a53322d4c3a7ac29efc158c2051685365a6eda52efdb14f6afc980340f198586f3 + languageName: node + linkType: hard + "split@npm:^1.0.1": version: 1.0.1 resolution: "split@npm:1.0.1" @@ -15000,6 +15107,15 @@ __metadata: languageName: node linkType: hard +"string_decoder@npm:~1.0.0": + version: 1.0.3 + resolution: "string_decoder@npm:1.0.3" + dependencies: + safe-buffer: "npm:~5.1.0" + checksum: 10c0/3f9047d0555adb7efdb948ef7fd536c5cac4f79f4a6d6647ede1d7bb0496432f19f712c1244f14e0ce1142a259e70dbb0eb7c8021f391ff1d8f3658cc3df5ad5 + languageName: node + linkType: hard + "string_decoder@npm:~1.1.1": version: 1.1.1 resolution: "string_decoder@npm:1.1.1" @@ -15018,7 +15134,7 @@ __metadata: languageName: node linkType: hard -"strip-ansi@npm:^3.0.1": +"strip-ansi@npm:^3.0.0, strip-ansi@npm:^3.0.1": version: 3.0.1 resolution: "strip-ansi@npm:3.0.1" dependencies: @@ -15133,6 +15249,13 @@ __metadata: languageName: node linkType: hard +"supports-color@npm:^2.0.0": + version: 2.0.0 + resolution: "supports-color@npm:2.0.0" + checksum: 10c0/570e0b63be36cccdd25186350a6cb2eaad332a95ff162fa06d9499982315f2fe4217e69dd98e862fbcd9c81eaff300a825a1fe7bf5cc752e5b84dfed042b0dda + languageName: node + linkType: hard + "supports-color@npm:^5.3.0": version: 5.5.0 resolution: "supports-color@npm:5.5.0" @@ -15174,6 +15297,39 @@ __metadata: languageName: node linkType: hard +"tap-out@npm:^2.1.0": + version: 2.1.0 + resolution: "tap-out@npm:2.1.0" + dependencies: + re-emitter: "npm:1.1.3" + readable-stream: "npm:2.2.9" + split: "npm:1.0.0" + trim: "npm:0.0.1" + bin: + tap-out: bin/cmd.js + checksum: 10c0/392b830bec7c8c084c89cd70f6409f654430b13c3c53ee6aa21459bdc9ed1f32877254152cb4c5ba9b2f51835c38845c2e334207bb9ad2e20d29f1a776089cdf + languageName: node + linkType: hard + +"tap-spec@npm:^5.0.0": + version: 5.0.0 + resolution: "tap-spec@npm:5.0.0" + dependencies: + chalk: "npm:^1.0.0" + duplexer: "npm:^0.1.1" + figures: "npm:^1.4.0" + lodash: "npm:^4.17.10" + pretty-ms: "npm:^2.1.0" + repeat-string: "npm:^1.5.2" + tap-out: "npm:^2.1.0" + through2: "npm:^2.0.0" + bin: + tap-spec: bin/cmd.js + tspec: bin/cmd.js + checksum: 10c0/70a096437d2cfead0710d3a2f71ccaa7aaf1438e5e735d3a91cc12965de557dc6e7efa41190248c268afabfa065347c1737b26bd02aa9e0aa2c7dc182acc2e14 + languageName: node + linkType: hard + "tapable@npm:^1.0.0, tapable@npm:^1.1.3": version: 1.1.3 resolution: "tapable@npm:1.1.3" @@ -15474,12 +15630,19 @@ __metadata: languageName: node linkType: hard -"ts-api-utils@npm:^1.0.1": - version: 1.2.1 - resolution: "ts-api-utils@npm:1.2.1" +"trim@npm:0.0.1": + version: 0.0.1 + resolution: "trim@npm:0.0.1" + checksum: 10c0/d974971fc8b8629d13286f20ec6ccc48f480494ca9df358d452beb1fd7eea1b802be41cc7ee157be4abbdf1b3ca79cc6d04c34b14a7026037d437e8de9dacecb + languageName: node + linkType: hard + +"ts-api-utils@npm:^1.3.0": + version: 1.3.0 + resolution: "ts-api-utils@npm:1.3.0" peerDependencies: typescript: ">=4.2.0" - checksum: 10c0/8ddb493e7ae581d3f57a2e469142feb60b420d4ad8366ab969fe8e36531f8f301f370676b47e8d97f28b5f5fd10d6f2d55f656943a8546ef95e35ce5cf117754 + checksum: 10c0/f54a0ba9ed56ce66baea90a3fa087a484002e807f28a8ccb2d070c75e76bde64bd0f6dce98b3802834156306050871b67eec325cb4e918015a360a3f0868c77c languageName: node linkType: hard @@ -15760,6 +15923,22 @@ __metadata: languageName: node linkType: hard +"typescript-eslint@npm:^7.7.0": + version: 7.18.0 + resolution: "typescript-eslint@npm:7.18.0" + dependencies: + "@typescript-eslint/eslint-plugin": "npm:7.18.0" + "@typescript-eslint/parser": "npm:7.18.0" + "@typescript-eslint/utils": "npm:7.18.0" + peerDependencies: + eslint: ^8.56.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/610c0faa70b9be89255086378c7ef69e979115c89be69851fb4d69e76907b3520450b162a8adee56b32dbf368f8c14c1fac88065539012140c1319851f2676da + languageName: node + linkType: hard + "typescript@npm:5.4.3": version: 5.4.3 resolution: "typescript@npm:5.4.3"