fix: fixing all builds that broke with the new viewer (#788)

builds fix + viewer logic fixes
This commit is contained in:
Kristaps Fabians Geikins
2022-06-02 18:13:32 +03:00
committed by GitHub
parent d0c1178a03
commit 437e1558ec
15 changed files with 221 additions and 271 deletions
@@ -33,6 +33,10 @@ const config = {
loader: 'babel-loader'
},
exclude: /(node_modules|bower_components)/
},
{
test: /\.(png|svg|jpg|jpeg|gif)$/i,
type: 'asset/resource'
}
]
},
+6
View File
@@ -21,6 +21,12 @@ const config = {
'prettier'
],
parser: '@typescript-eslint/parser'
},
{
files: '*.d.ts',
rules: {
'@typescript-eslint/no-unused-vars': 'off'
}
}
]
}
+8 -7
View File
@@ -1,10 +1,11 @@
import { Viewer, IViewer } from '@speckle/viewer'
import SpeckleLineMaterial from '@speckle/viewer/dist/modules/materials/SpeckleLineMaterial'
import { Object3D } from '@speckle/viewer/node_modules/@types/three'
import { Viewer, SpeckleLineMaterial } from '@speckle/viewer'
import { Object3D, LinearToneMapping } from 'three'
import { Line2 } from 'three/examples/jsm/lines/Line2'
import { Pane } from 'tweakpane'
import UrlHelper from './UrlHelper'
export default class Sandbox {
private viewer: IViewer
private viewer: Viewer
private pane: Pane
private tabs
@@ -19,7 +20,7 @@ export default class Sandbox {
thickLines: true,
pixelThreshold: 0.5,
exposure: 0.4,
tonemapping: 'Linear'
tonemapping: LinearToneMapping
}
public constructor(viewer: Viewer) {
@@ -142,7 +143,7 @@ export default class Sandbox {
.on('change', () => {
this.viewer.scene.traverse((object: Object3D) => {
if (object.type === 'Line2') {
;(object.material as SpeckleLineMaterial).pixelThreshold =
;((object as Line2).material as SpeckleLineMaterial).pixelThreshold =
Sandbox.sceneParams.pixelThreshold
}
})
@@ -179,7 +180,7 @@ export default class Sandbox {
const objUrls = await UrlHelper.getResourceUrls(url)
for (const url of objUrls) {
console.log(`Loading ${url}`)
await this.viewer.loadObject(url)
await this.viewer.loadObject(url, undefined)
}
localStorage.setItem('last-load-url', url)
}
+3
View File
@@ -5,6 +5,9 @@ const config = {
server: {
host: '0.0.0.0',
port: '3033'
},
build: {
target: 'esnext'
}
}
+15
View File
@@ -0,0 +1,15 @@
{
"presets": [
[
"@babel/preset-env",
{
"useBuiltIns": "entry",
"corejs": "3",
"targets": {
"node": "12"
}
}
]
],
"ignore": ["node_modules/**/*"]
}
-98
View File
@@ -1,98 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Speckle Viewer</title>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="preconnect" href="https://fonts.gstatic.com" />
<link
href="https://fonts.googleapis.com/css2?family=Space+Mono:ital,wght@0,400;0,700;1,700&display=swap"
rel="stylesheet"
/>
<link
href="https://unpkg.com/tailwindcss@^2/dist/tailwind.min.css"
rel="stylesheet"
/>
<link
rel="stylesheet"
href="https://cdnjs.cloudflare.com/ajax/libs/skeleton/2.0.4/skeleton.min.css"
integrity="sha512-EZLkOqwILORob+p0BXZc+Vm3RgJBOe1Iq/0fiI7r/wJgzOFZMlsqTa29UEl6v6U6gsV4uIpsNZoV32YZqrCRCQ=="
crossorigin="anonymous"
/>
<style type="text/css">
#renderer {
height: 700px;
width: 100%;
}
</style>
<script src="./speckleviewer.web.js" type="module"></script>
</head>
<body style="background: #e4e4e4">
<div class="container">
<div class="row" style="padding-top: 20px">
<div class="twelve columns">
<h3>Viewer</h3>
<h5>Controls summary:</h5>
<p class="text-sm">
Click an object to select it. Double click it to focus on it. Press `esc` to
clear the selection. Press `shift-s` to toggle a section plane. Press `s`
while the section plane is active to toggle its control mode. Double click
anywhere outside an object to zoom extents to the entire scene.
</p>
</div>
<div class="twelve columns">
<button onclick="v.postprocessing = !v.postprocessing">
Postprocessing Toggle
</button>
<button onclick="v.interactions.zoomExtents()">Zoom Extents</button>
<button onclick="v.toggleSectionBox()">Toggle Section Box</button>
<button onclick="v.interactions.rotateCamera(undefined, undefined, false)">
Rotate
</button>
<button onclick="viewerScreenshot()">Screenshot</button>
</div>
<div class="twelve columns">
<input
id="objectUrlInput"
type="text"
name="objectId"
placeholder="Object Url"
style="width: 49%"
value="https://latest.speckle.dev/streams/010b3af4c3/objects/a401baf38fe5809d0eb9d3c902a36e8f"
/>
<button class="" onclick="loadData()" style="width: 49%">
Load Object URL
</button>
</div>
<div class="twelve columns">
<button onclick="v.unloadAll()">Dispose Everything</button>
View:
<button onclick="v.toggleCameraProjection()">Ortho/Perspective</button>
<button onclick="v.interactions.rotateTo()">3D</button>
<button onclick="v.interactions.rotateTo('top')">Top</button>
<button onclick="v.interactions.rotateTo('front')">Front</button>
<button onclick="v.interactions.rotateTo('back')">Back</button>
<button onclick="v.interactions.rotateTo('left')">Left</button>
<button onclick="v.interactions.rotateTo('right')">Right</button>
</div>
<div class="twelve columns">
Used Memory (MB):
<span id="info-mem">-</span>
/ LoadProgress:
<span id="info-progress">-</span>
/ ViewerBusy:
<span id="info-busy">idle</span>
/ Draw Calls:
<span id="info-draws">-</span>
</div>
</div>
</div>
<div class="row">
<div class="twelve columns">
<div id="renderer"></div>
</div>
</div>
</body>
</html>
+5 -6
View File
@@ -27,7 +27,6 @@
"build": "NODE_ENV=production rollup --config",
"build:dev": "rollup --config",
"dev": "rollup --config --watch",
"example": "EXAMPLE_BUILD=1 rollup --config && http-server ./example -p 3032 -o",
"prepack": "yarn build",
"lint": "eslint . --ext .js,.ts"
},
@@ -49,20 +48,20 @@
"three": "^0.140.0"
},
"devDependencies": {
"@rollup/plugin-commonjs": "^21.0.3",
"@rollup/plugin-node-resolve": "^13.1.3",
"@rollup/plugin-typescript": "^8.3.2",
"@babel/core": "^7.18.2",
"@rollup/plugin-babel": "^5.3.1",
"@types/three": "^0.136.0",
"@typescript-eslint/eslint-plugin": "^5.21.0",
"@typescript-eslint/parser": "^5.21.0",
"core-js": "^3.21.1",
"eslint": "^8.11.0",
"eslint-config-prettier": "^8.5.0",
"http-server": "^14.1.0",
"prettier": "^2.5.1",
"regenerator-runtime": "^0.13.7",
"rollup": "^2.70.1",
"rollup-plugin-copy": "^3.4.0",
"rollup-plugin-delete": "^2.0.0",
"rollup-plugin-rebase": "^4.1.1",
"rollup-plugin-copy": "^3.4.0",
"rollup-plugin-terser": "^7.0.2",
"rollup-plugin-typescript2": "^0.31.2",
"typescript": "^4.5.4"
+36 -59
View File
@@ -1,72 +1,49 @@
import commonjs from '@rollup/plugin-commonjs'
import nodeResolve from '@rollup/plugin-node-resolve'
import { terser } from 'rollup-plugin-terser'
import clean from 'rollup-plugin-delete'
import pkg from './package.json'
import typescript2 from 'rollup-plugin-typescript2'
import rebasePlugin from 'rollup-plugin-rebase'
import copyPlugin from 'rollup-plugin-copy'
import { babel } from '@rollup/plugin-babel'
import { DEFAULT_EXTENSIONS } from '@babel/core'
const isProd = process.env.NODE_ENV === 'production'
const isExample = !!process.env.EXAMPLE_BUILD
const sourcemap = isProd ? false : 'inline'
/**
* Build config
* @param {boolean} isWebBuild If set to true will generate a web-ready config with everything bundled into a single file
* @returns {import('rollup').RollupOptions}
*/
function buildConfig(isWebBuild = false) {
/** @type {import('rollup').RollupOptions} */
const config = {
input: isWebBuild ? 'src/example.js' : 'src/index.js',
output: [
{
file: isWebBuild ? 'example/speckleviewer.web.js' : 'dist/speckleviewer.esm.js',
format: 'esm',
sourcemap
},
...(isWebBuild
? []
: [
{
file: 'dist/speckleviewer.js',
format: 'cjs',
sourcemap
}
])
],
plugins: [
rebasePlugin({ keepName: true }),
copyPlugin({
targets: [{ src: './always-bundled-assets/**/*', dest: 'dist/assets' }]
}),
typescript2({
tsconfigOverride: {
sourceMap: sourcemap
}
}),
...(isWebBuild
? [
// Bundling in all deps in web build
commonjs(),
nodeResolve()
]
: [
// Cleaning dir only inside dist
clean({ targets: 'dist/*' })
]),
...(isProd ? [terser()] : [])
],
external: isWebBuild
? undefined
: // In non web build we don't want to bundle in any deps
Object.keys(pkg.dependencies || {}).map((d) => new RegExp(`^${d}(\\/.*)?$`))
}
return config
/** @type {import('rollup').RollupOptions} */
const config = {
input: 'src/index.ts',
output: [
{
file: 'dist/speckleviewer.esm.js',
format: 'esm',
sourcemap
},
{
file: 'dist/speckleviewer.js',
format: 'cjs',
sourcemap
}
],
plugins: [
clean({ targets: 'dist/*' }),
rebasePlugin({ keepName: true }),
copyPlugin({
targets: [{ src: './always-bundled-assets/**/*', dest: 'dist/assets' }]
}),
typescript2({
tsconfigOverride: {
sourceMap: sourcemap
}
}),
babel({
extensions: [...DEFAULT_EXTENSIONS, '.ts', '.tsx'],
babelHelpers: 'bundled'
}),
...(isProd ? [terser()] : [])
],
// Externalizing all deps, we don't want to bundle them in cause this is a library
external: Object.keys(pkg.dependencies || {}).map((d) => new RegExp(`^${d}(\\/.*)?$`))
}
const config = isExample ? buildConfig(true) : buildConfig()
export default config
+1 -1
View File
@@ -45,7 +45,7 @@ export interface IViewer {
toggleSectionBox(): void
sectionBoxOff(): void
sectionBoxOn(): void
zoomExtents(fit: number, transition: boolean): void
zoomExtents(fit?: number, transition?: boolean): void
toggleCameraProjection(): void
loadObject(url: string, token?: string, enableCaching?: boolean): Promise<void>
-68
View File
@@ -1,68 +0,0 @@
/* eslint-disable */
/**
* NOT PART OF THE ACTUAL LIBRARY, ONLY USED TO GENERATE THE EXAMPLE WEB BUILD
*/
import Viewer from './modules/Viewer'
setInterval(() => {
document.getElementById('info-mem').innerText =
'' + Math.round(performance.memory.usedJSHeapSize / 1024 / 1024)
}, 100)
let v = new Viewer({ container: document.getElementById('renderer'), showStats: true })
v.on('load-progress', (args) => {
document.getElementById('info-progress').innerText = `${
Math.round(1000 * args.progress) / 1000
}`
})
v.on('busy', (isBusy) => {
document.getElementById('info-busy').innerText = isBusy ? 'BUSY' : 'idle'
document.body.style.cursor = isBusy ? 'progress' : 'default'
})
window.v = v
window.addEventListener('load', () => {
v.onWindowResize()
const prevLoadUrl = localStorage.getItem('prevLoadUrl')
console.log(prevLoadUrl)
if (prevLoadUrl) document.getElementById('objectUrlInput').value = prevLoadUrl
})
window.loadData = async function LoadData(url) {
url = url || document.getElementById('objectUrlInput').value
localStorage.setItem('prevLoadUrl', url)
let t0 = Date.now()
await v.loadObject(url)
console.log(`Finished loading in: ${(Date.now() - t0) / 1000}`)
}
v.on('select', (info) => {
console.info(`Selection event.`)
})
v.on('object-doubleclicked', (info) => {
console.info(`Object double click event.`)
})
v.on('section-box', (status) => {
console.info(`Section box is now ${status ? 'on' : 'off'}.`)
})
window.viewerScreenshot = function () {
let data = v.interactions.screenshot() // transparent png.
let pop = window.open()
pop.document.title = 'super screenshot'
pop.document.body.style.backgroundColor = 'grey'
let img = new Image()
img.src = data
pop.document.body.appendChild(img)
}
window.zoomFast = function () {
v.interactions.zoomExtents(0.95, false)
}
-5
View File
@@ -1,5 +0,0 @@
import { Viewer } from './modules/Viewer'
import Converter from './modules/converter/Converter'
import { DefaultViewerParams } from './IViewer'
export { Viewer, Converter, DefaultViewerParams }
+7
View File
@@ -0,0 +1,7 @@
import { Viewer } from './modules/Viewer'
import Converter from './modules/converter/Converter'
import { DefaultViewerParams, IViewer } from './IViewer'
import SpeckleLineMaterial from './modules/materials/SpeckleLineMaterial'
export { Viewer, Converter, DefaultViewerParams, SpeckleLineMaterial }
export type { IViewer }
+1 -1
View File
@@ -31,7 +31,7 @@ export class Viewer extends EventEmitter implements IViewer {
public sectionBox: SectionBox
public sceneManager: ObjectManager
public interactions: InteractionHandler
private renderer: WebGLRenderer
public renderer: WebGLRenderer
public cameraHandler: CameraHandler
private sceneURL = '' // Temporary
private startupParams: ViewerParams
+1 -1
View File
@@ -1,7 +1,7 @@
{
"compilerOptions": {
"target": "es2019",
"module": "ESNext",
"module": "es2020",
"lib": ["DOM"],
"moduleResolution": "Node",
"strict": false,
+134 -25
View File
@@ -217,6 +217,29 @@ __metadata:
languageName: node
linkType: hard
"@babel/core@npm:^7.18.2":
version: 7.18.2
resolution: "@babel/core@npm:7.18.2"
dependencies:
"@ampproject/remapping": ^2.1.0
"@babel/code-frame": ^7.16.7
"@babel/generator": ^7.18.2
"@babel/helper-compilation-targets": ^7.18.2
"@babel/helper-module-transforms": ^7.18.0
"@babel/helpers": ^7.18.2
"@babel/parser": ^7.18.0
"@babel/template": ^7.16.7
"@babel/traverse": ^7.18.2
"@babel/types": ^7.18.2
convert-source-map: ^1.7.0
debug: ^4.1.0
gensync: ^1.0.0-beta.2
json5: ^2.2.1
semver: ^6.3.0
checksum: 14a4142c12e004cd2477b7610408d5788ee5dd821ee9e4de204cbb72d9c399d858d9deabc3d49914d5d7c2927548160c19bdc7524b1a9f6acc1ec96a8d9848dd
languageName: node
linkType: hard
"@babel/generator@npm:7.17.10, @babel/generator@npm:^7.17.10":
version: 7.17.10
resolution: "@babel/generator@npm:7.17.10"
@@ -228,6 +251,17 @@ __metadata:
languageName: node
linkType: hard
"@babel/generator@npm:^7.18.2":
version: 7.18.2
resolution: "@babel/generator@npm:7.18.2"
dependencies:
"@babel/types": ^7.18.2
"@jridgewell/gen-mapping": ^0.3.0
jsesc: ^2.5.1
checksum: d0661e95532ddd97566d41fec26355a7b28d1cbc4df95fe80cc084c413342935911b48db20910708db39714844ddd614f61c2ec4cca3fb10181418bdcaa2e7a3
languageName: node
linkType: hard
"@babel/helper-annotate-as-pure@npm:^7.16.7":
version: 7.16.7
resolution: "@babel/helper-annotate-as-pure@npm:7.16.7"
@@ -261,6 +295,20 @@ __metadata:
languageName: node
linkType: hard
"@babel/helper-compilation-targets@npm:^7.18.2":
version: 7.18.2
resolution: "@babel/helper-compilation-targets@npm:7.18.2"
dependencies:
"@babel/compat-data": ^7.17.10
"@babel/helper-validator-option": ^7.16.7
browserslist: ^4.20.2
semver: ^6.3.0
peerDependencies:
"@babel/core": ^7.0.0
checksum: 4f02e79f20c0b3f8db5049ba8c35027c41ccb3fc7884835d04e49886538e0f55702959db1bb75213c94a5708fec2dc81a443047559a4f184abb884c72c0059b4
languageName: node
linkType: hard
"@babel/helper-create-class-features-plugin@npm:^7.16.10, @babel/helper-create-class-features-plugin@npm:^7.16.7, @babel/helper-create-class-features-plugin@npm:^7.17.6, @babel/helper-create-class-features-plugin@npm:^7.17.9":
version: 7.17.9
resolution: "@babel/helper-create-class-features-plugin@npm:7.17.9"
@@ -317,6 +365,13 @@ __metadata:
languageName: node
linkType: hard
"@babel/helper-environment-visitor@npm:^7.18.2":
version: 7.18.2
resolution: "@babel/helper-environment-visitor@npm:7.18.2"
checksum: 1a9c8726fad454a082d077952a90f17188e92eabb3de236cb4782c49b39e3f69c327e272b965e9a20ff8abf37d30d03ffa6fd7974625a6c23946f70f7527f5e9
languageName: node
linkType: hard
"@babel/helper-explode-assignable-expression@npm:^7.16.7":
version: 7.16.7
resolution: "@babel/helper-explode-assignable-expression@npm:7.16.7"
@@ -379,6 +434,22 @@ __metadata:
languageName: node
linkType: hard
"@babel/helper-module-transforms@npm:^7.18.0":
version: 7.18.0
resolution: "@babel/helper-module-transforms@npm:7.18.0"
dependencies:
"@babel/helper-environment-visitor": ^7.16.7
"@babel/helper-module-imports": ^7.16.7
"@babel/helper-simple-access": ^7.17.7
"@babel/helper-split-export-declaration": ^7.16.7
"@babel/helper-validator-identifier": ^7.16.7
"@babel/template": ^7.16.7
"@babel/traverse": ^7.18.0
"@babel/types": ^7.18.0
checksum: 824c3967c08d75bb36adc18c31dcafebcd495b75b723e2e17c6185e88daf5c6db62a6a75d9f791b5f38618a349e7cb32503e715a1b9a4e8bad4d0f43e3e6b523
languageName: node
linkType: hard
"@babel/helper-optimise-call-expression@npm:^7.16.7":
version: 7.16.7
resolution: "@babel/helper-optimise-call-expression@npm:7.16.7"
@@ -483,6 +554,17 @@ __metadata:
languageName: node
linkType: hard
"@babel/helpers@npm:^7.18.2":
version: 7.18.2
resolution: "@babel/helpers@npm:7.18.2"
dependencies:
"@babel/template": ^7.16.7
"@babel/traverse": ^7.18.2
"@babel/types": ^7.18.2
checksum: 94620242f23f6d5f9b83a02b1aa1632ffb05b0815e1bb53d3b46d64aa8e771066bba1db8bd267d9091fb00134cfaeda6a8d69d1d4cc2c89658631adfa077ae70
languageName: node
linkType: hard
"@babel/highlight@npm:^7.16.7":
version: 7.17.9
resolution: "@babel/highlight@npm:7.17.9"
@@ -503,6 +585,15 @@ __metadata:
languageName: node
linkType: hard
"@babel/parser@npm:^7.18.0":
version: 7.18.4
resolution: "@babel/parser@npm:7.18.4"
bin:
parser: ./bin/babel-parser.js
checksum: e05b2dc720c4b200e088258f3c2a2de5041c140444edc38181d1217b10074e881a7133162c5b62356061f26279f08df5a06ec14c5842996ee8601ad03c57a44f
languageName: node
linkType: hard
"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.16.7":
version: 7.16.7
resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.16.7"
@@ -1438,6 +1529,24 @@ __metadata:
languageName: node
linkType: hard
"@babel/traverse@npm:^7.18.0, @babel/traverse@npm:^7.18.2":
version: 7.18.2
resolution: "@babel/traverse@npm:7.18.2"
dependencies:
"@babel/code-frame": ^7.16.7
"@babel/generator": ^7.18.2
"@babel/helper-environment-visitor": ^7.18.2
"@babel/helper-function-name": ^7.17.9
"@babel/helper-hoist-variables": ^7.16.7
"@babel/helper-split-export-declaration": ^7.16.7
"@babel/parser": ^7.18.0
"@babel/types": ^7.18.2
debug: ^4.1.0
globals: ^11.1.0
checksum: e21c2d550bf610406cf21ef6fbec525cb1d80b9d6d71af67552478a24ee371203cb4025b23b110ae7288a62a874ad5898daad19ad23daa95dfc8ab47a47a092f
languageName: node
linkType: hard
"@babel/types@npm:7.17.10, @babel/types@npm:^7.0.0, @babel/types@npm:^7.0.0-beta.49, @babel/types@npm:^7.16.0, @babel/types@npm:^7.16.7, @babel/types@npm:^7.16.8, @babel/types@npm:^7.17.0, @babel/types@npm:^7.17.10, @babel/types@npm:^7.4.4, @babel/types@npm:^7.7.0, @babel/types@npm:^7.8.3":
version: 7.17.10
resolution: "@babel/types@npm:7.17.10"
@@ -1448,6 +1557,16 @@ __metadata:
languageName: node
linkType: hard
"@babel/types@npm:^7.18.0, @babel/types@npm:^7.18.2":
version: 7.18.4
resolution: "@babel/types@npm:7.18.4"
dependencies:
"@babel/helper-validator-identifier": ^7.16.7
to-fast-properties: ^2.0.0
checksum: 85df59beb99c1b95e9e41590442f2ffa1e5b1b558d025489db40c9f7c906bd03a17da26c3ec486e5800e80af27c42ca7eee9506d9212ab17766d2d68d30fbf52
languageName: node
linkType: hard
"@colors/colors@npm:1.5.0":
version: 1.5.0
resolution: "@colors/colors@npm:1.5.0"
@@ -1694,6 +1813,17 @@ __metadata:
languageName: node
linkType: hard
"@jridgewell/gen-mapping@npm:^0.3.0":
version: 0.3.1
resolution: "@jridgewell/gen-mapping@npm:0.3.1"
dependencies:
"@jridgewell/set-array": ^1.0.0
"@jridgewell/sourcemap-codec": ^1.4.10
"@jridgewell/trace-mapping": ^0.3.9
checksum: e9e7bb3335dea9e60872089761d4e8e089597360cdb1af90370e9d53b7d67232c1e0a3ab65fbfef4fc785745193fbc56bff9f3a6cab6c6ce3f15e12b4191f86b
languageName: node
linkType: hard
"@jridgewell/resolve-uri@npm:^3.0.3":
version: 3.0.6
resolution: "@jridgewell/resolve-uri@npm:3.0.6"
@@ -2201,20 +2331,6 @@ __metadata:
languageName: node
linkType: hard
"@rollup/plugin-typescript@npm:^8.3.2":
version: 8.3.2
resolution: "@rollup/plugin-typescript@npm:8.3.2"
dependencies:
"@rollup/pluginutils": ^3.1.0
resolve: ^1.17.0
peerDependencies:
rollup: ^2.14.0
tslib: "*"
typescript: ">=3.7.0"
checksum: bdbf3c11d26b04244228cbe2bd48dbac66044c16df4ee3658276480b1e050c33f9bc72ef7b6e05a88c4a48db3d5359ab6a3acf7ff288482af29863478d014881
languageName: node
linkType: hard
"@rollup/pluginutils@npm:^3.1.0":
version: 3.1.0
resolution: "@rollup/pluginutils@npm:3.1.0"
@@ -2607,21 +2723,21 @@ __metadata:
version: 0.0.0-use.local
resolution: "@speckle/viewer@workspace:packages/viewer"
dependencies:
"@rollup/plugin-commonjs": ^21.0.3
"@rollup/plugin-node-resolve": ^13.1.3
"@rollup/plugin-typescript": ^8.3.2
"@babel/core": ^7.18.2
"@rollup/plugin-babel": ^5.3.1
"@speckle/objectloader": "workspace:^"
"@types/three": ^0.136.0
"@typescript-eslint/eslint-plugin": ^5.21.0
"@typescript-eslint/parser": ^5.21.0
camera-controls: ^1.33.1
core-js: ^3.21.1
eslint: ^8.11.0
eslint-config-prettier: ^8.5.0
hold-event: ^0.1.0
http-server: ^14.1.0
lodash.debounce: ^4.0.8
prettier: ^2.5.1
rainbowvis.js: ^1.0.1
regenerator-runtime: ^0.13.7
rollup: ^2.70.1
rollup-plugin-copy: ^3.4.0
rollup-plugin-delete: ^2.0.0
@@ -13719,13 +13835,6 @@ __metadata:
languageName: node
linkType: hard
"kleur@npm:^3.0.3":
version: 3.0.3
resolution: "kleur@npm:3.0.3"
checksum: df82cd1e172f957bae9c536286265a5cdbd5eeca487cb0a3b2a7b41ef959fc61f8e7c0e9aeea9c114ccf2c166b6a8dd45a46fd619c1c569d210ecd2765ad5169
languageName: node
linkType: hard
"knex@npm:^2.0.0":
version: 2.0.0
resolution: "knex@npm:2.0.0"