From d17fac8258296c8a6d89e53840886500b595efc5 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Mon, 8 Aug 2022 03:20:13 -0400 Subject: [PATCH 001/125] Bump totum --- packages/totum | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/totum b/packages/totum index 3b1f9bc7dd..7b2d1a4176 160000 --- a/packages/totum +++ b/packages/totum @@ -1 +1 @@ -Subproject commit 3b1f9bc7dd367fcad2547efddfb7f9f07bfdb6e5 +Subproject commit 7b2d1a41761cac3ca4fa835a7d45ee338bfb3893 From f960f7058eb8942250589a0c3bc3ae58a1a06825 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Sun, 10 Apr 2022 19:21:59 -0400 Subject: [PATCH 002/125] Add avatar-optimizer.js --- avatar-optimizer.js | 490 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 490 insertions(+) create mode 100644 avatar-optimizer.js diff --git a/avatar-optimizer.js b/avatar-optimizer.js new file mode 100644 index 0000000000..903f76dfeb --- /dev/null +++ b/avatar-optimizer.js @@ -0,0 +1,490 @@ +import * as THREE from 'three'; +import {MaxRectsPacker} from 'maxrects-packer'; +import {getRenderer} from './renderer.js'; + +const defaultTextureSize = 4096; +const startAtlasSize = 512; + +const localVector2D = new THREE.Vector2(); +const localVector2D2 = new THREE.Vector2(); +// const localVector4D = new THREE.Vector4(); +// const localVector4D2 = new THREE.Vector4(); + +const _getMergeableObjects = model => { + const renderer = getRenderer(); + + const mergeables = new Map(); + model.traverse(o => { + if (o.isMesh) { + let type; + if (o.isSkinnedMesh) { + type = 'skinnedMesh'; + } else { + type = 'mesh'; + } + + const objectGeometry = o.geometry; + const objectMaterials = Array.isArray(o.material) ? o.material : [o.material]; + for (const objectMaterial of objectMaterials) { + const { + map = null, + emissiveMap = null, + normalMap = null, + shadeTexture = null, + } = objectMaterial; + // console.log('got material', objectMaterial); + + const key = [ + type, + renderer.getProgramCacheKey(o, objectMaterial), + ].join(','); + + let m = mergeables.get(key); + if (!m) { + m = { + type, + material: objectMaterial, + geometries: [], + maps: [], + emissiveMaps: [], + normalMaps: [], + shadeTextures: [], + }; + mergeables.set(key, m); + } + + m.geometries.push(objectGeometry); + m.maps.push(map); + m.emissiveMaps.push(emissiveMap); + m.normalMaps.push(normalMap); + m.shadeTextures.push(shadeTexture); + } + } + }); + return Array.from(mergeables.values()); +}; + +class AttributeLayout { + constructor(name, TypedArrayConstructor, itemSize) { + this.name = name; + this.TypedArrayConstructor = TypedArrayConstructor; + this.itemSize = itemSize; + this.index = 0; + this.count = 0; + this.depth = 0; + } +} +const optimizeAvatarModel = (model, options = {}) => { + const mergeables = _getMergeableObjects(model); + console.log('got mergeables', mergeables); + return mergeables; + + const atlasTextures = !!(options.textures ?? true); + const textureSize = options.textureSize ?? defaultTextureSize; + + const textureTypes = [ + 'map', + 'emissiveMap', + 'normalMap', + ]; + + const _collectObjects = () => { + const meshes = []; + const geometries = []; + const materials = []; + const textures = {}; + for (const textureType of textureTypes) { + textures[textureType] = []; + } + let textureGroupsMap = new WeakMap(); + const skeletons = []; + { + let indexIndex = 0; + model.traverse(node => { + if (node.isMesh && !node.parent?.isBone) { + meshes.push(node); + + const geometry = node.geometry; + geometries.push(geometry); + + const startIndex = indexIndex; + const count = geometry.index.count; + const _pushMaterial = material => { + materials.push(material); + for (const k of textureTypes) { + const texture = material[k]; + if (texture) { + const texturesOfType = textures[k]; + if (!texturesOfType.includes(texture)) { + texturesOfType.push(texture); + } + let textureGroups = textureGroupsMap.get(texture); + if (!textureGroups) { + textureGroups = []; + textureGroupsMap.set(texture, textureGroups); + } + textureGroups.push({ + startIndex, + count, + }); + } + } + }; + + let material = node.material; + if (Array.isArray(material)) { + for (let i = 0; i < material.length; i++) { + _pushMaterial(material[i]); + } + } else { + _pushMaterial(material); + } + + if (node.skeleton) { + if (!skeletons.includes(node.skeleton)) { + skeletons.push(node.skeleton); + } + } + + indexIndex += geometry.index.count; + } + }); + } + return { + meshes, + geometries, + materials, + textures, + textureGroupsMap, + skeletons, + }; + }; + + // collect objects + const { + meshes, + geometries, + materials, + textures, + textureGroupsMap, + skeletons, + } = _collectObjects(); + + // generate atlas layouts + const _packAtlases = () => { + const _attempt = (k, atlasSize) => { + const maxRectsPacker = new MaxRectsPacker(atlasSize, atlasSize, 1); + const rects = textures[k].map(t => { + const w = t.image.width; + const h = t.image.height; + const image = t.image; + const groups = textureGroupsMap.get(t); + return { + width: w, + height: h, + data: { + image, + groups, + }, + }; + }); + maxRectsPacker.addArray(rects); + let oversized = maxRectsPacker.bins.length > 1; + maxRectsPacker.bins.forEach(bin => { + bin.rects.forEach(rect => { + if (rect.oversized) { + oversized = true; + } + }); + }); + if (!oversized) { + return maxRectsPacker; + } else { + return null; + } + }; + + const atlases = {}; + for (const k of textureTypes) { + let atlas; + let atlasSize = startAtlasSize; + while (!(atlas = _attempt(k, atlasSize))) { + atlasSize *= 2; + } + atlases[k] = atlas; + } + return atlases; + }; + const atlases = atlasTextures ? _packAtlases() : null; + + // build attribute layouts + const _makeAttributeLayoutsFromGeometries = geometries => { + // collect attribut layout + const geometry = geometries[0]; + const attributes = geometry.attributes; + const attributeLayouts = []; + for (const attributeName in attributes) { + const attribute = attributes[attributeName]; + const layout = new AttributeLayout(attributeName, attribute.array.constructor, attribute.itemSize); + attributeLayouts.push(layout); + } + + return attributeLayouts; + }; + const _forceGeomtryiesAttributeLayouts = (attributeLayouts, geometries) => { + for (const layout of attributeLayouts) { + for (const g of geometries) { + let gAttribute = g.attributes[layout.name]; + if (!gAttribute) { + if (layout.name === 'skinIndex' || layout.name === 'skinWeight') { + gAttribute = new THREE.BufferAttribute(new Float32Array(g.attributes.position.count * layout.itemSize), layout.itemSize); + g.setAttribute(layout.name, gAttribute); + } else { + throw new Error('unknown layout'); + } + } + layout.count += gAttribute.count * gAttribute.itemSize; + } + } + }; + const _makeMorphAttributeLayoutsFromGeometries = geometries => { + // create morph layouts + const morphAttributeLayouts = []; + for (const geometry of geometries) { + const morphAttributes = geometry.morphAttributes; + for (const morphAttributeName in morphAttributes) { + const morphAttribute = morphAttributes[morphAttributeName]; + let morphLayout = morphAttributeLayouts.find(l => l.name === morphAttributeName); + if (!morphLayout) { + morphLayout = new AttributeLayout(morphAttributeName, morphAttribute[0].array.constructor, morphAttribute[0].itemSize); + morphLayout.depth = morphAttribute.length; + morphAttributeLayouts.push(morphLayout); + } + } + } + + // compute morph layouts sizes + for (const morphLayout of morphAttributeLayouts) { + for (const g of geometries) { + const morphAttribute = g.morphAttributes[morphLayout.name]; + if (morphAttribute) { + morphLayout.count += morphAttribute[0].count * morphAttribute[0].itemSize; + // console.log('morph layout add 1', morphLayout.count, morphAttribute[0].count, morphAttribute[0].itemSize); + } else { + const matchingGeometryAttribute = g.attributes[morphLayout.name]; + if (matchingGeometryAttribute) { + morphLayout.count += matchingGeometryAttribute.count * matchingGeometryAttribute.itemSize; + // console.log('morph layout add 2', morphLayout.count, matchingGeometryAttribute.count, matchingGeometryAttribute.itemSize); + } else { + console.warn('geometry attributes desynced with morph attributes', g.attributes, morphAttribute); + } + } + } + } + return morphAttributeLayouts; + }; + const attributeLayouts = _makeAttributeLayoutsFromGeometries(geometries); + const morphAttributeLayouts = _makeMorphAttributeLayoutsFromGeometries(geometries); + + // validate attribute layouts + for (let i = 0; i < meshes.length; i++) { + const mesh = meshes[i]; + const geometry = mesh.geometry; + if (!geometry.index) { + console.log('no index', mesh); + } + } + if (skeletons.length !== 1) { + console.log('did not have single skeleton', skeletons); + } + + // build geometry + const geometry = new THREE.BufferGeometry(); + // attributes + _forceGeomtryiesAttributeLayouts(attributeLayouts, geometries); + for (const layout of attributeLayouts) { + const attributeData = new layout.TypedArrayConstructor(layout.count); + const attribute = new THREE.BufferAttribute(attributeData, layout.itemSize); + for (const g of geometries) { + const gAttribute = g.attributes[layout.name]; + attributeData.set(gAttribute.array, layout.index); + layout.index += gAttribute.count * gAttribute.itemSize; + } + geometry.setAttribute(layout.name, attribute); + } + // morph attributes + for (const morphLayout of morphAttributeLayouts) { + const morphsArray = Array(morphLayout.depth); + for (let i = 0; i < morphLayout.depth; i++) { + const morphData = new morphLayout.TypedArrayConstructor(morphLayout.count); + let morphDataIndex = 0; + const morphAttribute = new THREE.BufferAttribute(morphData, morphLayout.itemSize); + morphsArray[i] = morphAttribute; + for (const g of geometries) { + let gMorphAttribute = g.morphAttributes[morphLayout.name]; + gMorphAttribute = gMorphAttribute && gMorphAttribute[i]; + if (gMorphAttribute) { + morphData.set(gMorphAttribute.array, morphDataIndex); + morphDataIndex += gMorphAttribute.count * gMorphAttribute.itemSize; + // console.log('new index 1', morphLayout.name, gMorphAttribute.array.some(n => n !== 0), morphDataIndex, gMorphAttribute.count, gMorphAttribute.itemSize); + } else { + const matchingAttribute = g.attributes[morphLayout.name]; + morphDataIndex += matchingAttribute.count * matchingAttribute.itemSize; + // console.log('new index 2', g, morphDataIndex, matchingAttribute.count, matchingAttribute.itemSize); + } + } + if (morphDataIndex !== morphLayout.count) { + console.warn('desynced morph data', morphLayout.name, morphDataIndex, morphLayout.count); + } + } + geometry.morphAttributes[morphLayout.name] = morphsArray; + } + // index + let indexCount = 0; + for (const g of geometries) { + indexCount += g.index.count; + } + const indexData = new Uint32Array(indexCount); + let positionOffset = 0; + let indexOffset = 0; + for (const g of geometries) { + const srcIndexData = g.index.array; + for (let i = 0; i < srcIndexData.length; i++) { + indexData[indexOffset++] = srcIndexData[i] + positionOffset; + } + positionOffset += g.attributes.position.count; + } + geometry.setIndex(new THREE.BufferAttribute(indexData, 1)); + geometry.morphTargetsRelative = true; + + /* const uv3Data = new Float32Array(geometry.attributes.uv.count * 4); + const uv3 = new THREE.BufferAttribute(uv3Data, 4); + geometry.setAttribute('uv3', uv3); */ + + /* // these uvs can be used to color code the mesh by material or texture + const uv4Data = new Float32Array(geometry.attributes.uv.count * 4); + const uv4 = new THREE.BufferAttribute(uv4Data, 4); + geometry.setAttribute('uv4', uv4); */ + + // verify + for (const layout of attributeLayouts) { + if (layout.index !== layout.count) { + console.log('bad layout count', layout.index, layout.count); + } + } + if (indexOffset !== indexCount) { + console.log('bad final index', indexOffset, indexCount); + } + + // draw the atlas + const _drawAtlases = () => { + const seenUvIndexes = new Map(); + const _drawAtlas = atlas => { + const canvas = document.createElement('canvas'); + const canvasSize = Math.min(atlas.width, textureSize); + const canvasScale = canvasSize / atlas.width; + canvas.width = canvasSize; + canvas.height = canvasSize; + const ctx = canvas.getContext('2d'); + + atlas.bins.forEach(bin => { + bin.rects.forEach(rect => { + const {x, y, width: w, height: h, data: {image, groups}} = rect; + // draw the image in the correct box on the canvas + const tx = x * canvasScale; + const ty = y * canvasScale; + const tw = w * canvasScale; + const th = h * canvasScale; + ctx.drawImage(image, 0, 0, image.width, image.height, tx, ty, tw, th); + + // const testUv = new THREE.Vector2(Math.random(), Math.random()); + for (const group of groups) { + const {startIndex, count} = group; + for (let i = 0; i < count; i++) { + const uvIndex = geometry.index.array[startIndex + i]; + + // XXX NOTE: this code is slightly wrong. it will generate a unified uv map (first come first served to the uv index) + // that means that the different maps might get the wrong uv. + // the diffuse map takes priority so it looks ok. + // the right way to do this is to have a separate uv map for each map. + if (!seenUvIndexes.get(uvIndex)) { + seenUvIndexes.set(uvIndex, true); + + localVector2D.fromArray(geometry.attributes.uv.array, uvIndex * 2); + localVector2D.multiply( + localVector2D2.set(tw/canvasSize, th/canvasSize) + ).add( + localVector2D2.set(tx/canvasSize, ty/canvasSize) + ); + localVector2D.toArray(geometry.attributes.uv.array, uvIndex * 2); + + /* localVector4D.set(x/atlas.width, y/atlas.height, w/atlas.width, h/atlas.height); + localVector4D.toArray(geometry.attributes.uv3.array, uvIndex * 4); */ + /* localVector4D.set(testUv.x, testUv.y, testUv.x, testUv.y); + localVector4D.toArray(geometry.attributes.uv4.array, uvIndex * 4); */ + } + } + } + }); + }); + atlas.image = canvas; + + return atlas; + }; + + // generate atlas for each map; they are all separate + const result = {}; + { + let canvasIndex = 0; + for (const k of textureTypes) { + const atlas = atlases[k]; + const atlas2 = _drawAtlas(atlas); + + /* const displaySize = 256; + atlas2.image.style.cssText = `\ + position: fixed; + top: 0; + left: ${canvasIndex * displaySize}px; + width: ${displaySize}px; + height: ${displaySize}px; + z-index: 10; + `; + document.body.appendChild(atlas2.image); */ + + result[k] = atlas2; + + canvasIndex++; + } + } + return result; + }; + const textureAtlases = atlasTextures ? _drawAtlases() : null; + + // create material + // const material = new THREE.MeshStandardMaterial(); + const material = new THREE.MeshBasicMaterial(); + if (atlasTextures) { + for (const k of textureTypes) { + const t = new THREE.Texture(textureAtlases[k].image); + t.flipY = false; + t.needsUpdate = true; + material[k] = t; + } + } + material.roughness = 1; + material.alphaTest = 0.1; + material.transparent = true; + + // create mesh + const crunchedModel = new THREE.SkinnedMesh(geometry, material); + crunchedModel.skeleton = skeletons[0]; + const deepestMorphMesh = meshes.find(m => (m.morphTargetInfluences ? m.morphTargetInfluences.length : 0) === morphAttributeLayouts[0].depth); + crunchedModel.morphTargetDictionary = deepestMorphMesh.morphTargetDictionary; + crunchedModel.morphTargetInfluences = deepestMorphMesh.morphTargetInfluences; + + return crunchedModel; +}; + +export { + optimizeAvatarModel, +}; \ No newline at end of file From d9b8cad733c7a79e59d7a59c26e7cb417c8130d9 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Sun, 10 Apr 2022 19:22:46 -0400 Subject: [PATCH 003/125] Hook in optimized model test in avatars.js high quality mode --- avatars/avatars.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/avatars/avatars.js b/avatars/avatars.js index f9343e1fac..d52c2f4288 100644 --- a/avatars/avatars.js +++ b/avatars/avatars.js @@ -24,6 +24,7 @@ import { // avatarInterpolationNumFrames, } from '../constants.js'; // import {FixedTimeStep} from '../interpolants.js'; +import * as avatarOptimizer from '../avatar-optimizer.js'; import * as avatarCruncher from '../avatar-cruncher.js'; import * as avatarSpriter from '../avatar-spriter.js'; // import * as sceneCruncher from '../scene-cruncher.js'; @@ -1429,7 +1430,9 @@ class Avatar { break; } case 3: { - console.log('not implemented'); // XXX + const optimizedModel = avatarOptimizer.optimizeAvatarModel(this.model); + console.log('optimized model', optimizedModel); // XXX + this.model.visible = true; break; } From 018d815bd19cf7f17166ed147eeac80cd991d191 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Sun, 10 Apr 2022 19:24:08 -0400 Subject: [PATCH 004/125] Exports cleanup --- avatar-cruncher.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/avatar-cruncher.js b/avatar-cruncher.js index ab6c485d59..9dae03432f 100644 --- a/avatar-cruncher.js +++ b/avatar-cruncher.js @@ -457,4 +457,6 @@ const crunchAvatarModel = (model, options = {}) => { return crunchedModel; }; -export {crunchAvatarModel}; \ No newline at end of file +export { + crunchAvatarModel, +}; \ No newline at end of file From ef0e6e28c80276fc0c146285b32fd73f8cf6dd3b Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Sun, 10 Apr 2022 19:30:22 -0400 Subject: [PATCH 005/125] Hook in avatarOptimizer to metaversefile --- metaversefile-api.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/metaversefile-api.js b/metaversefile-api.js index 76d8b762a5..168c216d23 100644 --- a/metaversefile-api.js +++ b/metaversefile-api.js @@ -26,6 +26,7 @@ import JSON6 from 'json-6'; import * as geometries from './geometries.js'; import * as materials from './materials.js'; import meshLodManager from './mesh-lodder.js'; +import * as avatarOptimizer from './avatar-optimizer.js'; import * as avatarCruncher from './avatar-cruncher.js'; import * as avatarSpriter from './avatar-spriter.js'; import {chatManager} from './chat-manager.js'; @@ -449,6 +450,9 @@ metaversefile.setApi({ useVoices() { return voices; }, + useAvatarOptimizer() { + return avatarOptimizer; + }, useAvatarCruncher() { return avatarCruncher; }, From 94449fac163fa5d8e0ef70a08c8a0a5c2c909838 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Sun, 10 Apr 2022 19:30:39 -0400 Subject: [PATCH 006/125] Spacing cleanup --- metaversefile-api.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/metaversefile-api.js b/metaversefile-api.js index 168c216d23..a259475dc5 100644 --- a/metaversefile-api.js +++ b/metaversefile-api.js @@ -919,7 +919,7 @@ metaversefile.setApi({ onWaitPromise(p); } } - + return app; }, createApp(spec) { From 921ffe08c1211bfef94ab9f47c3fa685f49c8d4d Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Tue, 12 Apr 2022 13:18:51 -0400 Subject: [PATCH 007/125] Major avatar optimizer work --- avatar-optimizer.js | 366 ++++++++++++++++++++++++++------------------ 1 file changed, 215 insertions(+), 151 deletions(-) diff --git a/avatar-optimizer.js b/avatar-optimizer.js index 903f76dfeb..45a0c47bab 100644 --- a/avatar-optimizer.js +++ b/avatar-optimizer.js @@ -10,6 +10,12 @@ const localVector2D2 = new THREE.Vector2(); // const localVector4D = new THREE.Vector4(); // const localVector4D2 = new THREE.Vector4(); +const textureTypes = [ + 'map', + 'emissiveMap', + 'normalMap', +]; + const _getMergeableObjects = model => { const renderer = getRenderer(); @@ -30,7 +36,7 @@ const _getMergeableObjects = model => { map = null, emissiveMap = null, normalMap = null, - shadeTexture = null, + // shadeTexture = null, } = objectMaterial; // console.log('got material', objectMaterial); @@ -48,7 +54,7 @@ const _getMergeableObjects = model => { maps: [], emissiveMaps: [], normalMaps: [], - shadeTextures: [], + // shadeTextures: [], }; mergeables.set(key, m); } @@ -57,7 +63,7 @@ const _getMergeableObjects = model => { m.maps.push(map); m.emissiveMaps.push(emissiveMap); m.normalMaps.push(normalMap); - m.shadeTextures.push(shadeTexture); + // m.shadeTextures.push(shadeTexture); } } }); @@ -75,18 +81,216 @@ class AttributeLayout { } } const optimizeAvatarModel = (model, options = {}) => { + const atlasTextures = !!(options.textures ?? true); + const textureSize = options.textureSize ?? defaultTextureSize; + const mergeables = _getMergeableObjects(model); console.log('got mergeables', mergeables); - return mergeables; - const atlasTextures = !!(options.textures ?? true); - const textureSize = options.textureSize ?? defaultTextureSize; + const _mergeMesh = (mergeable, mergeableIndex) => { + const { + type, + geometries, + maps, + emissiveMaps, + normalMaps, + } = mergeable; + + // compute texture sizes + const textureSizes = maps.map((map, i) => { + const emissiveMap = emissiveMaps[i]; + const normalMap = normalMaps[i]; + + const maxSize = new THREE.Vector2(0, 0); + if (map) { + maxSize.x = Math.max(maxSize.x, map.image.width); + maxSize.y = Math.max(maxSize.y, map.image.height); + } + if (emissiveMap) { + maxSize.x = Math.max(maxSize.x, emissiveMap.image.width); + maxSize.y = Math.max(maxSize.y, emissiveMap.image.height); + } + if (normalMap) { + maxSize.x = Math.max(maxSize.x, normalMap.image.width); + maxSize.y = Math.max(maxSize.y, normalMap.image.height); + } + return maxSize; + }); + + // generate atlas layouts + const _packAtlases = () => { + const _attemptPack = (textureSizes, atlasSize) => { + const maxRectsPacker = new MaxRectsPacker(atlasSize, atlasSize, 1); + const rects = textureSizes.map((textureSize, index) => { + // const w = t.image.width; + // const h = t.image.height; + // const image = t.image; + const {x: width, y: height} = textureSize; + return { + width, + height, + data: { + index, + }, + }; + }); + maxRectsPacker.addArray(rects); + let oversized = maxRectsPacker.bins.length > 1; + maxRectsPacker.bins.forEach(bin => { + bin.rects.forEach(rect => { + if (rect.oversized) { + oversized = true; + } + }); + }); + if (!oversized) { + return maxRectsPacker; + } else { + return null; + } + }; + const _makeEmptyAtlas = () => new MaxRectsPacker(0, 0, 1); + + const hasTextures = textureSizes.some(textureSize => textureSize.x > 0 || textureSize.y > 0); + if (hasTextures) { + let atlas; + let atlasSize = startAtlasSize; + while (!(atlas = _attemptPack(textureSizes, atlasSize))) { + atlasSize *= 2; + } + return atlas; + } else { + return _makeEmptyAtlas(); + } + }; + const atlas = atlasTextures ? _packAtlases() : null; + + // draw atlas images + const _drawAtlasImages = atlas => { + const _drawAtlasImage = textureType => { + const canvas = document.createElement('canvas'); + const canvasSize = Math.min(atlas.width, textureSize); + const canvasScale = canvasSize / atlas.width; + canvas.width = canvasSize; + canvas.height = canvasSize; + const ctx = canvas.getContext('2d'); + + atlas.bins.forEach(bin => { + bin.rects.forEach(rect => { + const {x, y, width: w, height: h, data: {index}} = rect; + const textures = mergeable[`${textureType}s`]; + const texture = textures[index]; + if (texture) { + const image = texture.image; + + // draw the image in the correct box on the canvas + const tx = x * canvasScale; + const ty = y * canvasScale; + const tw = w * canvasScale; + const th = h * canvasScale; + ctx.drawImage(image, 0, 0, image.width, image.height, tx, ty, tw, th); + } + }); + }); + + return canvas; + }; + + const atlasImages = {}; + for (const textureType of textureTypes) { + const atlasImage = _drawAtlasImage(textureType); + atlasImages[textureType] = atlasImage; + } + return atlasImages; + }; + const atlasImages = atlasTextures ? _drawAtlasImages(atlas) : null; + + // XXX debug + { + const debugWidth = 300; + let textureTypeIndex = 0; + for (const textureType of textureTypes) { + const atlasImage = atlasImages[textureType]; + atlasImage.style.cssText = `\ + position: fixed; + top: ${mergeableIndex * debugWidth}px; + left: ${textureTypeIndex * debugWidth}px; + min-width: ${debugWidth}px; + max-width: ${debugWidth}px; + min-height: ${debugWidth}px; + z-index: 100; + `; + document.body.appendChild(atlasImage); + textureTypeIndex++; + } + } + + return new THREE.Mesh(); + }; + const mergedMeshes = mergeables.map((mergeable, i) => _mergeMesh(mergeable, i)); + + /* // draw atlas textures + const _drawAtlases = atlases => { + const seenUvIndexes = new Map(); + const _drawAtlas = atlas => { + const canvas = document.createElement('canvas'); + const canvasSize = Math.min(atlas.width, textureSize); + const canvasScale = canvasSize / atlas.width; + canvas.width = canvasSize; + canvas.height = canvasSize; + const ctx = canvas.getContext('2d'); + + atlas.bins.forEach(bin => { + bin.rects.forEach(rect => { + const {x, y, width: w, height: h, data: {image, groups}} = rect; + // draw the image in the correct box on the canvas + const tx = x * canvasScale; + const ty = y * canvasScale; + const tw = w * canvasScale; + const th = h * canvasScale; + ctx.drawImage(image, 0, 0, image.width, image.height, tx, ty, tw, th); + + // const testUv = new THREE.Vector2(Math.random(), Math.random()); + for (const group of groups) { + const {startIndex, count} = group; + for (let i = 0; i < count; i++) { + const uvIndex = geometry.index.array[startIndex + i]; + + // XXX NOTE: this code is slightly wrong. it will generate a unified uv map (first come first served to the uv index) + // that means that the different maps might get the wrong uv. + // the diffuse map takes priority so it looks ok. + // the right way to do this is to have a separate uv map for each map. + if (!seenUvIndexes.get(uvIndex)) { + seenUvIndexes.set(uvIndex, true); + + localVector2D.fromArray(geometry.attributes.uv.array, uvIndex * 2); + localVector2D.multiply( + localVector2D2.set(tw/canvasSize, th/canvasSize) + ).add( + localVector2D2.set(tx/canvasSize, ty/canvasSize) + ); + localVector2D.toArray(geometry.attributes.uv.array, uvIndex * 2); + } + } + } + }); + }); + atlas.image = canvas; + + return atlas; + }; - const textureTypes = [ - 'map', - 'emissiveMap', - 'normalMap', - ]; + const atlasImages = {}; + for (const textureType of textureTypes) { + const atlas = atlases[textureType]; + const atlasImage = _drawAtlas(atlas); + atlasImages[textureType] = atlasImage; + } + return atlasImages; + }; + _remapGeometryUvs(); */ + + return mergedMeshes; const _collectObjects = () => { const meshes = []; @@ -170,53 +374,6 @@ const optimizeAvatarModel = (model, options = {}) => { skeletons, } = _collectObjects(); - // generate atlas layouts - const _packAtlases = () => { - const _attempt = (k, atlasSize) => { - const maxRectsPacker = new MaxRectsPacker(atlasSize, atlasSize, 1); - const rects = textures[k].map(t => { - const w = t.image.width; - const h = t.image.height; - const image = t.image; - const groups = textureGroupsMap.get(t); - return { - width: w, - height: h, - data: { - image, - groups, - }, - }; - }); - maxRectsPacker.addArray(rects); - let oversized = maxRectsPacker.bins.length > 1; - maxRectsPacker.bins.forEach(bin => { - bin.rects.forEach(rect => { - if (rect.oversized) { - oversized = true; - } - }); - }); - if (!oversized) { - return maxRectsPacker; - } else { - return null; - } - }; - - const atlases = {}; - for (const k of textureTypes) { - let atlas; - let atlasSize = startAtlasSize; - while (!(atlas = _attempt(k, atlasSize))) { - atlasSize *= 2; - } - atlases[k] = atlas; - } - return atlases; - }; - const atlases = atlasTextures ? _packAtlases() : null; - // build attribute layouts const _makeAttributeLayoutsFromGeometries = geometries => { // collect attribut layout @@ -357,15 +514,6 @@ const optimizeAvatarModel = (model, options = {}) => { geometry.setIndex(new THREE.BufferAttribute(indexData, 1)); geometry.morphTargetsRelative = true; - /* const uv3Data = new Float32Array(geometry.attributes.uv.count * 4); - const uv3 = new THREE.BufferAttribute(uv3Data, 4); - geometry.setAttribute('uv3', uv3); */ - - /* // these uvs can be used to color code the mesh by material or texture - const uv4Data = new Float32Array(geometry.attributes.uv.count * 4); - const uv4 = new THREE.BufferAttribute(uv4Data, 4); - geometry.setAttribute('uv4', uv4); */ - // verify for (const layout of attributeLayouts) { if (layout.index !== layout.count) { @@ -376,90 +524,6 @@ const optimizeAvatarModel = (model, options = {}) => { console.log('bad final index', indexOffset, indexCount); } - // draw the atlas - const _drawAtlases = () => { - const seenUvIndexes = new Map(); - const _drawAtlas = atlas => { - const canvas = document.createElement('canvas'); - const canvasSize = Math.min(atlas.width, textureSize); - const canvasScale = canvasSize / atlas.width; - canvas.width = canvasSize; - canvas.height = canvasSize; - const ctx = canvas.getContext('2d'); - - atlas.bins.forEach(bin => { - bin.rects.forEach(rect => { - const {x, y, width: w, height: h, data: {image, groups}} = rect; - // draw the image in the correct box on the canvas - const tx = x * canvasScale; - const ty = y * canvasScale; - const tw = w * canvasScale; - const th = h * canvasScale; - ctx.drawImage(image, 0, 0, image.width, image.height, tx, ty, tw, th); - - // const testUv = new THREE.Vector2(Math.random(), Math.random()); - for (const group of groups) { - const {startIndex, count} = group; - for (let i = 0; i < count; i++) { - const uvIndex = geometry.index.array[startIndex + i]; - - // XXX NOTE: this code is slightly wrong. it will generate a unified uv map (first come first served to the uv index) - // that means that the different maps might get the wrong uv. - // the diffuse map takes priority so it looks ok. - // the right way to do this is to have a separate uv map for each map. - if (!seenUvIndexes.get(uvIndex)) { - seenUvIndexes.set(uvIndex, true); - - localVector2D.fromArray(geometry.attributes.uv.array, uvIndex * 2); - localVector2D.multiply( - localVector2D2.set(tw/canvasSize, th/canvasSize) - ).add( - localVector2D2.set(tx/canvasSize, ty/canvasSize) - ); - localVector2D.toArray(geometry.attributes.uv.array, uvIndex * 2); - - /* localVector4D.set(x/atlas.width, y/atlas.height, w/atlas.width, h/atlas.height); - localVector4D.toArray(geometry.attributes.uv3.array, uvIndex * 4); */ - /* localVector4D.set(testUv.x, testUv.y, testUv.x, testUv.y); - localVector4D.toArray(geometry.attributes.uv4.array, uvIndex * 4); */ - } - } - } - }); - }); - atlas.image = canvas; - - return atlas; - }; - - // generate atlas for each map; they are all separate - const result = {}; - { - let canvasIndex = 0; - for (const k of textureTypes) { - const atlas = atlases[k]; - const atlas2 = _drawAtlas(atlas); - - /* const displaySize = 256; - atlas2.image.style.cssText = `\ - position: fixed; - top: 0; - left: ${canvasIndex * displaySize}px; - width: ${displaySize}px; - height: ${displaySize}px; - z-index: 10; - `; - document.body.appendChild(atlas2.image); */ - - result[k] = atlas2; - - canvasIndex++; - } - } - return result; - }; - const textureAtlases = atlasTextures ? _drawAtlases() : null; - // create material // const material = new THREE.MeshStandardMaterial(); const material = new THREE.MeshBasicMaterial(); From 0b57a2c986c9cb47e9cdd7c0d53f9a485e47c31a Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Tue, 12 Apr 2022 14:25:57 -0400 Subject: [PATCH 008/125] More major avatar optimizer work --- avatar-optimizer.js | 139 ++++++++++++++++++++++++-------------------- 1 file changed, 75 insertions(+), 64 deletions(-) diff --git a/avatar-optimizer.js b/avatar-optimizer.js index 45a0c47bab..371a1de228 100644 --- a/avatar-optimizer.js +++ b/avatar-optimizer.js @@ -16,6 +16,23 @@ const textureTypes = [ 'normalMap', ]; +class AttributeLayout { + constructor(name, TypedArrayConstructor, itemSize) { + this.name = name; + this.TypedArrayConstructor = TypedArrayConstructor; + this.itemSize = itemSize; + this.index = 0; + this.count = 0; + this.depth = 0; + } +} +class MorphAttributeLayout extends AttributeLayout { + constructor(name, TypedArrayConstructor, itemSize, depth) { + super(name, TypedArrayConstructor, itemSize); + this.depth = depth; + } +} + const _getMergeableObjects = model => { const renderer = getRenderer(); @@ -70,16 +87,6 @@ const _getMergeableObjects = model => { return Array.from(mergeables.values()); }; -class AttributeLayout { - constructor(name, TypedArrayConstructor, itemSize) { - this.name = name; - this.TypedArrayConstructor = TypedArrayConstructor; - this.itemSize = itemSize; - this.index = 0; - this.count = 0; - this.depth = 0; - } -} const optimizeAvatarModel = (model, options = {}) => { const atlasTextures = !!(options.textures ?? true); const textureSize = options.textureSize ?? defaultTextureSize; @@ -225,12 +232,67 @@ const optimizeAvatarModel = (model, options = {}) => { } } + // build attribute layouts + const _makeAttributeLayoutsFromGeometries = geometries => { + const attributeLayouts = []; + for (const geometry of geometries) { + const attributes = geometry.attributes; + for (const attributeName in attributes) { + const attribute = attributes[attributeName]; + let layout = attributeLayouts.find(layout => layout.name === attributeName); + if (layout) { + // sanity check that item size is the same + if (layout.itemSize !== attribute.itemSize) { + throw new Error(`attribute ${attributeName} has different itemSize: ${layout.itemSize}, ${attribute.itemSize}`); + } + } else { + layout = new AttributeLayout( + attributeName, + attribute.array.constructor, + attribute.itemSize + ); + attributeLayouts.push(layout); + } + + layout.count += attribute.count * attribute.itemSize; + } + } + return attributeLayouts; + }; + const attributeLayouts = _makeAttributeLayoutsFromGeometries(geometries); + + const _makeMorphAttributeLayoutsFromGeometries = geometries => { + // create morph layouts + const morphAttributeLayouts = []; + for (const geometry of geometries) { + const morphAttributes = geometry.morphAttributes; + for (const morphAttributeName in morphAttributes) { + const morphAttribute = morphAttributes[morphAttributeName]; + let morphLayout = morphAttributeLayouts.find(l => l.name === morphAttributeName); + if (!morphLayout) { + morphLayout = new MorphAttributeLayout( + morphAttributeName, + morphAttribute[0].array.constructor, + morphAttribute[0].itemSize, + morphAttribute.length + ); + morphAttributeLayouts.push(morphLayout); + } + + morphLayout.count += morphAttribute[0].count * morphAttribute[0].itemSize; + } + } + return morphAttributeLayouts; + }; + const morphAttributeLayouts = _makeMorphAttributeLayoutsFromGeometries(geometries); + console.log('got attribute layouts', attributeLayouts, morphAttributeLayouts); + return new THREE.Mesh(); }; const mergedMeshes = mergeables.map((mergeable, i) => _mergeMesh(mergeable, i)); /* // draw atlas textures - const _drawAtlases = atlases => { + const _remapGeometryUvs = atlases => { const seenUvIndexes = new Map(); const _drawAtlas = atlas => { const canvas = document.createElement('canvas'); @@ -374,21 +436,7 @@ const optimizeAvatarModel = (model, options = {}) => { skeletons, } = _collectObjects(); - // build attribute layouts - const _makeAttributeLayoutsFromGeometries = geometries => { - // collect attribut layout - const geometry = geometries[0]; - const attributes = geometry.attributes; - const attributeLayouts = []; - for (const attributeName in attributes) { - const attribute = attributes[attributeName]; - const layout = new AttributeLayout(attributeName, attribute.array.constructor, attribute.itemSize); - attributeLayouts.push(layout); - } - - return attributeLayouts; - }; - const _forceGeomtryiesAttributeLayouts = (attributeLayouts, geometries) => { + const _forceGeometriesAttributeLayouts = (attributeLayouts, geometries) => { for (const layout of attributeLayouts) { for (const g of geometries) { let gAttribute = g.attributes[layout.name]; @@ -400,45 +448,8 @@ const optimizeAvatarModel = (model, options = {}) => { throw new Error('unknown layout'); } } - layout.count += gAttribute.count * gAttribute.itemSize; - } - } - }; - const _makeMorphAttributeLayoutsFromGeometries = geometries => { - // create morph layouts - const morphAttributeLayouts = []; - for (const geometry of geometries) { - const morphAttributes = geometry.morphAttributes; - for (const morphAttributeName in morphAttributes) { - const morphAttribute = morphAttributes[morphAttributeName]; - let morphLayout = morphAttributeLayouts.find(l => l.name === morphAttributeName); - if (!morphLayout) { - morphLayout = new AttributeLayout(morphAttributeName, morphAttribute[0].array.constructor, morphAttribute[0].itemSize); - morphLayout.depth = morphAttribute.length; - morphAttributeLayouts.push(morphLayout); - } - } - } - - // compute morph layouts sizes - for (const morphLayout of morphAttributeLayouts) { - for (const g of geometries) { - const morphAttribute = g.morphAttributes[morphLayout.name]; - if (morphAttribute) { - morphLayout.count += morphAttribute[0].count * morphAttribute[0].itemSize; - // console.log('morph layout add 1', morphLayout.count, morphAttribute[0].count, morphAttribute[0].itemSize); - } else { - const matchingGeometryAttribute = g.attributes[morphLayout.name]; - if (matchingGeometryAttribute) { - morphLayout.count += matchingGeometryAttribute.count * matchingGeometryAttribute.itemSize; - // console.log('morph layout add 2', morphLayout.count, matchingGeometryAttribute.count, matchingGeometryAttribute.itemSize); - } else { - console.warn('geometry attributes desynced with morph attributes', g.attributes, morphAttribute); - } - } } } - return morphAttributeLayouts; }; const attributeLayouts = _makeAttributeLayoutsFromGeometries(geometries); const morphAttributeLayouts = _makeMorphAttributeLayoutsFromGeometries(geometries); @@ -458,7 +469,7 @@ const optimizeAvatarModel = (model, options = {}) => { // build geometry const geometry = new THREE.BufferGeometry(); // attributes - _forceGeomtryiesAttributeLayouts(attributeLayouts, geometries); + _forceGeometriesAttributeLayouts(attributeLayouts, geometries); for (const layout of attributeLayouts) { const attributeData = new layout.TypedArrayConstructor(layout.count); const attribute = new THREE.BufferAttribute(attributeData, layout.itemSize); From 72fc5dbfbbb26510b8adcc0c0d2f4ae7a20b0aeb Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Tue, 12 Apr 2022 14:52:27 -0400 Subject: [PATCH 009/125] More major avatar optimizer work --- avatar-optimizer.js | 208 +++++++++++++++++++++++++++----------------- 1 file changed, 130 insertions(+), 78 deletions(-) diff --git a/avatar-optimizer.js b/avatar-optimizer.js index 371a1de228..9e226fb8a7 100644 --- a/avatar-optimizer.js +++ b/avatar-optimizer.js @@ -21,21 +21,22 @@ class AttributeLayout { this.name = name; this.TypedArrayConstructor = TypedArrayConstructor; this.itemSize = itemSize; - this.index = 0; + this.count = 0; - this.depth = 0; } } class MorphAttributeLayout extends AttributeLayout { - constructor(name, TypedArrayConstructor, itemSize, depth) { + constructor(name, TypedArrayConstructor, itemSize, arraySize) { super(name, TypedArrayConstructor, itemSize); - this.depth = depth; + this.arraySize = arraySize; } } const _getMergeableObjects = model => { const renderer = getRenderer(); + console.log('got model', model); + const mergeables = new Map(); model.traverse(o => { if (o.isMesh) { @@ -56,6 +57,7 @@ const _getMergeableObjects = model => { // shadeTexture = null, } = objectMaterial; // console.log('got material', objectMaterial); + const skeleton = o.skeleton ?? null; const key = [ type, @@ -72,6 +74,7 @@ const _getMergeableObjects = model => { emissiveMaps: [], normalMaps: [], // shadeTextures: [], + skeletons: [], }; mergeables.set(key, m); } @@ -81,6 +84,7 @@ const _getMergeableObjects = model => { m.emissiveMaps.push(emissiveMap); m.normalMaps.push(normalMap); // m.shadeTextures.push(shadeTexture); + m.skeletons.push(skeleton); } } }); @@ -101,6 +105,7 @@ const optimizeAvatarModel = (model, options = {}) => { maps, emissiveMaps, normalMaps, + skeletons, } = mergeable; // compute texture sizes @@ -287,7 +292,126 @@ const optimizeAvatarModel = (model, options = {}) => { const morphAttributeLayouts = _makeMorphAttributeLayoutsFromGeometries(geometries); console.log('got attribute layouts', attributeLayouts, morphAttributeLayouts); - return new THREE.Mesh(); + const _forceGeometriesAttributeLayouts = (attributeLayouts, geometries) => { + for (const layout of attributeLayouts) { + for (const g of geometries) { + let gAttribute = g.attributes[layout.name]; + if (!gAttribute) { + if (layout.name === 'skinIndex' || layout.name === 'skinWeight') { + gAttribute = new THREE.BufferAttribute(new Float32Array(g.attributes.position.count * layout.itemSize), layout.itemSize); + g.setAttribute(layout.name, gAttribute); + } else { + throw new Error(`unknown layout ${layout.name}`); + } + } + } + } + }; + const _mergeGeometryies = geometries => { + const geometry = new THREE.BufferGeometry(); + + // attributes + _forceGeometriesAttributeLayouts(attributeLayouts, geometries); + for (const layout of attributeLayouts) { + const attributeData = new layout.TypedArrayConstructor(layout.count); + const attribute = new THREE.BufferAttribute(attributeData, layout.itemSize); + let attributeDataIndex = 0; + for (const g of geometries) { + const gAttribute = g.attributes[layout.name]; + attributeData.set(gAttribute.array, layout.index); + attributeDataIndex += gAttribute.count * gAttribute.itemSize; + } + geometry.setAttribute(layout.name, attribute); + } + + // morph attributes + for (const morphLayout of morphAttributeLayouts) { + const morphsArray = Array(morphLayout.arraySize); + for (let i = 0; i < morphLayout.arraySize; i++) { + const morphData = new morphLayout.TypedArrayConstructor(morphLayout.count); + const morphAttribute = new THREE.BufferAttribute(morphData, morphLayout.itemSize); + morphsArray[i] = morphAttribute; + let morphDataIndex = 0; + for (const g of geometries) { + let gMorphAttribute = g.morphAttributes[morphLayout.name]; + gMorphAttribute = gMorphAttribute?.[i]; + if (gMorphAttribute) { + morphData.set(gMorphAttribute.array, morphDataIndex); + morphDataIndex += gMorphAttribute.count * gMorphAttribute.itemSize; + } else { + const matchingAttribute = g.attributes[morphLayout.name]; + morphDataIndex += matchingAttribute.count * matchingAttribute.itemSize; + } + } + if (morphDataIndex !== morphLayout.count) { + console.warn('desynced morph data', morphLayout.name, morphDataIndex, morphLayout.count); + } + } + geometry.morphAttributes[morphLayout.name] = morphsArray; + } + + // index + let indexCount = 0; + for (const g of geometries) { + indexCount += g.index.count; + } + const indexData = new Uint32Array(indexCount); + + let positionOffset = 0; + let indexOffset = 0; + for (const g of geometries) { + const srcIndexData = g.index.array; + for (let i = 0; i < srcIndexData.length; i++) { + indexData[indexOffset++] = srcIndexData[i] + positionOffset; + } + positionOffset += g.attributes.position.count; + } + geometry.setIndex(new THREE.BufferAttribute(indexData, 1)); + geometry.morphTargetsRelative = true; + + return geometry; + }; + const geometry = _mergeGeometryies(geometries); + console.log('got geometry', geometry); + + const _makeMaterial = () => { + // XXX use the original material, but set the new textures + const material = new THREE.MeshBasicMaterial(); + if (atlasTextures) { + for (const textureType of textureTypes) { + const t = new THREE.Texture(atlasImages[textureType].image); + t.flipY = false; + t.needsUpdate = true; + material[textureType] = t; + } + } + material.roughness = 1; + material.alphaTest = 0.1; + material.transparent = true; + }; + const material = _makeMaterial(); + console.log('got material', material); + + const _makeMesh = () => { + if (type === 'mesh') { + const mesh = new THREE.Mesh(geometry, material); + return mesh; + } else if (type === 'skinnedMesh') { + const skinnedMesh = new THREE.SkinnedMesh(geometry, material); + skinnedMesh.skeleton = skeletons[0]; + // XXX get this from the list accumulated during the initial scan + const deepestMorphMesh = meshes.find(m => (m.morphTargetInfluences ? m.morphTargetInfluences.length : 0) === morphAttributeLayouts[0].depth); + skinnedMesh.morphTargetDictionary = deepestMorphMesh.morphTargetDictionary; + skinnedMesh.morphTargetInfluences = deepestMorphMesh.morphTargetInfluences; + return skinnedMesh; + } else { + throw new Error(`unknown type ${type}`); + } + }; + const mesh = _makeMesh(); + console.log('got mesh', mesh); + + return mesh; }; const mergedMeshes = mergeables.map((mergeable, i) => _mergeMesh(mergeable, i)); @@ -436,21 +560,6 @@ const optimizeAvatarModel = (model, options = {}) => { skeletons, } = _collectObjects(); - const _forceGeometriesAttributeLayouts = (attributeLayouts, geometries) => { - for (const layout of attributeLayouts) { - for (const g of geometries) { - let gAttribute = g.attributes[layout.name]; - if (!gAttribute) { - if (layout.name === 'skinIndex' || layout.name === 'skinWeight') { - gAttribute = new THREE.BufferAttribute(new Float32Array(g.attributes.position.count * layout.itemSize), layout.itemSize); - g.setAttribute(layout.name, gAttribute); - } else { - throw new Error('unknown layout'); - } - } - } - } - }; const attributeLayouts = _makeAttributeLayoutsFromGeometries(geometries); const morphAttributeLayouts = _makeMorphAttributeLayoutsFromGeometries(geometries); @@ -466,64 +575,7 @@ const optimizeAvatarModel = (model, options = {}) => { console.log('did not have single skeleton', skeletons); } - // build geometry - const geometry = new THREE.BufferGeometry(); - // attributes - _forceGeometriesAttributeLayouts(attributeLayouts, geometries); - for (const layout of attributeLayouts) { - const attributeData = new layout.TypedArrayConstructor(layout.count); - const attribute = new THREE.BufferAttribute(attributeData, layout.itemSize); - for (const g of geometries) { - const gAttribute = g.attributes[layout.name]; - attributeData.set(gAttribute.array, layout.index); - layout.index += gAttribute.count * gAttribute.itemSize; - } - geometry.setAttribute(layout.name, attribute); - } - // morph attributes - for (const morphLayout of morphAttributeLayouts) { - const morphsArray = Array(morphLayout.depth); - for (let i = 0; i < morphLayout.depth; i++) { - const morphData = new morphLayout.TypedArrayConstructor(morphLayout.count); - let morphDataIndex = 0; - const morphAttribute = new THREE.BufferAttribute(morphData, morphLayout.itemSize); - morphsArray[i] = morphAttribute; - for (const g of geometries) { - let gMorphAttribute = g.morphAttributes[morphLayout.name]; - gMorphAttribute = gMorphAttribute && gMorphAttribute[i]; - if (gMorphAttribute) { - morphData.set(gMorphAttribute.array, morphDataIndex); - morphDataIndex += gMorphAttribute.count * gMorphAttribute.itemSize; - // console.log('new index 1', morphLayout.name, gMorphAttribute.array.some(n => n !== 0), morphDataIndex, gMorphAttribute.count, gMorphAttribute.itemSize); - } else { - const matchingAttribute = g.attributes[morphLayout.name]; - morphDataIndex += matchingAttribute.count * matchingAttribute.itemSize; - // console.log('new index 2', g, morphDataIndex, matchingAttribute.count, matchingAttribute.itemSize); - } - } - if (morphDataIndex !== morphLayout.count) { - console.warn('desynced morph data', morphLayout.name, morphDataIndex, morphLayout.count); - } - } - geometry.morphAttributes[morphLayout.name] = morphsArray; - } - // index - let indexCount = 0; - for (const g of geometries) { - indexCount += g.index.count; - } - const indexData = new Uint32Array(indexCount); - let positionOffset = 0; - let indexOffset = 0; - for (const g of geometries) { - const srcIndexData = g.index.array; - for (let i = 0; i < srcIndexData.length; i++) { - indexData[indexOffset++] = srcIndexData[i] + positionOffset; - } - positionOffset += g.attributes.position.count; - } - geometry.setIndex(new THREE.BufferAttribute(indexData, 1)); - geometry.morphTargetsRelative = true; + // verify for (const layout of attributeLayouts) { From 16ee09d7609c7480bc17242aa3cfd8fb40e0897d Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Tue, 12 Apr 2022 14:53:04 -0400 Subject: [PATCH 010/125] Dead locals cleanup --- avatar-optimizer.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/avatar-optimizer.js b/avatar-optimizer.js index 9e226fb8a7..59f65dabef 100644 --- a/avatar-optimizer.js +++ b/avatar-optimizer.js @@ -5,8 +5,8 @@ import {getRenderer} from './renderer.js'; const defaultTextureSize = 4096; const startAtlasSize = 512; -const localVector2D = new THREE.Vector2(); -const localVector2D2 = new THREE.Vector2(); +// const localVector2D = new THREE.Vector2(); +// const localVector2D2 = new THREE.Vector2(); // const localVector4D = new THREE.Vector4(); // const localVector4D2 = new THREE.Vector4(); From 32225afe407d797e62a71b696aa740057ad9cbb0 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Tue, 12 Apr 2022 18:02:29 -0400 Subject: [PATCH 011/125] Avatars spacing debugging --- avatars/avatars.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/avatars/avatars.js b/avatars/avatars.js index d52c2f4288..350daa6b96 100644 --- a/avatars/avatars.js +++ b/avatars/avatars.js @@ -1411,21 +1411,21 @@ class Avatar { async setQuality(quality) { this.model.visible = false; - if ( this.crunchedModel ) this.crunchedModel.visible = false; - if ( this.spriteMegaAvatarMesh ) this.spriteMegaAvatarMesh.visible = false; + if (this.crunchedModel) this.crunchedModel.visible = false; + if (this.spriteMegaAvatarMesh) this.spriteMegaAvatarMesh.visible = false; switch (quality) { case 1: { const skinnedMesh = await this.object.cloneVrm(); - this.spriteMegaAvatarMesh = this.spriteMegaAvatarMesh ?? avatarSpriter.createSpriteMegaMesh( skinnedMesh ); - scene.add( this.spriteMegaAvatarMesh ); + this.spriteMegaAvatarMesh = this.spriteMegaAvatarMesh ?? avatarSpriter.createSpriteMegaMesh(skinnedMesh); + scene.add(this.spriteMegaAvatarMesh); this.spriteMegaAvatarMesh.visible = true; break; } case 2: { - this.crunchedModel = this.crunchedModel ?? avatarCruncher.crunchAvatarModel( this.model ); + this.crunchedModel = this.crunchedModel ?? avatarCruncher.crunchAvatarModel(this.model); this.crunchedModel.frustumCulled = false; - scene.add( this.crunchedModel ); + scene.add(this.crunchedModel); this.crunchedModel.visible = true; break; } From 681fe32c730ec43dc2e2dc8649e452793d0dc70f Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Tue, 12 Apr 2022 18:04:05 -0400 Subject: [PATCH 012/125] Avatars.js hook in optimized model --- avatars/avatars.js | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/avatars/avatars.js b/avatars/avatars.js index 350daa6b96..73476672a4 100644 --- a/avatars/avatars.js +++ b/avatars/avatars.js @@ -1430,10 +1430,14 @@ class Avatar { break; } case 3: { - const optimizedModel = avatarOptimizer.optimizeAvatarModel(this.model); - console.log('optimized model', optimizedModel); // XXX - - this.model.visible = true; + this.optimizedModel = avatarOptimizer.optimizeAvatarModel(this.model); + this.optimizedModel.traverse(o => { + if (o.isMesh) { + o.frustumCulled = false; + } + }); + scene.add(this.optimizedModel); + this.optimizedModel.visible = true; break; } case 4: { From f00ec0f43c8ed93a3653dbcea9882b50970a1252 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Tue, 12 Apr 2022 18:11:15 -0400 Subject: [PATCH 013/125] Avatar optimizer morph targets latching --- avatar-optimizer.js | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/avatar-optimizer.js b/avatar-optimizer.js index 59f65dabef..b57688ff37 100644 --- a/avatar-optimizer.js +++ b/avatar-optimizer.js @@ -48,6 +48,8 @@ const _getMergeableObjects = model => { } const objectGeometry = o.geometry; + const morphTargetDictionary = o.morphTargetDictionary; + const morphTargetInfluences = o.morphTargetInfluences; const objectMaterials = Array.isArray(o.material) ? o.material : [o.material]; for (const objectMaterial of objectMaterials) { const { @@ -75,6 +77,8 @@ const _getMergeableObjects = model => { normalMaps: [], // shadeTextures: [], skeletons: [], + morphTargetDictionaryArray: [], + morphTargetInfluencesArray: [], }; mergeables.set(key, m); } @@ -85,6 +89,8 @@ const _getMergeableObjects = model => { m.normalMaps.push(normalMap); // m.shadeTextures.push(shadeTexture); m.skeletons.push(skeleton); + m.morphTargetDictionaryArray.push(morphTargetDictionary); + m.morphTargetInfluencesArray.push(morphTargetInfluences); } } }); @@ -106,6 +112,8 @@ const optimizeAvatarModel = (model, options = {}) => { emissiveMaps, normalMaps, skeletons, + morphTargetDictionaryArray, + morphTargetInfluencesArray, } = mergeable; // compute texture sizes @@ -399,10 +407,8 @@ const optimizeAvatarModel = (model, options = {}) => { } else if (type === 'skinnedMesh') { const skinnedMesh = new THREE.SkinnedMesh(geometry, material); skinnedMesh.skeleton = skeletons[0]; - // XXX get this from the list accumulated during the initial scan - const deepestMorphMesh = meshes.find(m => (m.morphTargetInfluences ? m.morphTargetInfluences.length : 0) === morphAttributeLayouts[0].depth); - skinnedMesh.morphTargetDictionary = deepestMorphMesh.morphTargetDictionary; - skinnedMesh.morphTargetInfluences = deepestMorphMesh.morphTargetInfluences; + skinnedMesh.morphTargetDictionary = morphTargetDictionaryArray[0]; + skinnedMesh.morphTargetInfluences = morphTargetInfluencesArray[0]; return skinnedMesh; } else { throw new Error(`unknown type ${type}`); From 88fd0942181b929652fff9845ab797596be91e45 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Tue, 12 Apr 2022 18:11:32 -0400 Subject: [PATCH 014/125] Avatar optimizer material rewriting --- avatar-optimizer.js | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/avatar-optimizer.js b/avatar-optimizer.js index b57688ff37..7d1432dace 100644 --- a/avatar-optimizer.js +++ b/avatar-optimizer.js @@ -107,6 +107,7 @@ const optimizeAvatarModel = (model, options = {}) => { const _mergeMesh = (mergeable, mergeableIndex) => { const { type, + material, geometries, maps, emissiveMaps, @@ -382,22 +383,22 @@ const optimizeAvatarModel = (model, options = {}) => { const geometry = _mergeGeometryies(geometries); console.log('got geometry', geometry); - const _makeMaterial = () => { - // XXX use the original material, but set the new textures - const material = new THREE.MeshBasicMaterial(); + const _updateMaterial = () => { if (atlasTextures) { for (const textureType of textureTypes) { - const t = new THREE.Texture(atlasImages[textureType].image); + const image = atlasImages[textureType]; + const t = new THREE.Texture(image); t.flipY = false; t.needsUpdate = true; material[textureType] = t; } } - material.roughness = 1; + /* material.roughness = 1; material.alphaTest = 0.1; - material.transparent = true; + material.transparent = true; */ }; - const material = _makeMaterial(); + _updateMaterial(); + // const material = _makeMaterial(); console.log('got material', material); const _makeMesh = () => { From 76dc695a2953a53be2d51b40794f397134b11f10 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Tue, 12 Apr 2022 18:11:46 -0400 Subject: [PATCH 015/125] Avatar optimizer return object with child meshes --- avatar-optimizer.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/avatar-optimizer.js b/avatar-optimizer.js index 7d1432dace..a078d10b3c 100644 --- a/avatar-optimizer.js +++ b/avatar-optimizer.js @@ -483,7 +483,11 @@ const optimizeAvatarModel = (model, options = {}) => { }; _remapGeometryUvs(); */ - return mergedMeshes; + const object = new THREE.Object3D(); + for (const mesh of mergedMeshes) { + object.add(mesh); + } + return object; const _collectObjects = () => { const meshes = []; From 091a50e2353546de34fe3615536005729e81e297 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Tue, 12 Apr 2022 23:56:01 -0400 Subject: [PATCH 016/125] More major avatar optimizer work --- avatar-optimizer.js | 230 +++++++++++++++++++++++++++----------------- 1 file changed, 144 insertions(+), 86 deletions(-) diff --git a/avatar-optimizer.js b/avatar-optimizer.js index a078d10b3c..bee5b9c36c 100644 --- a/avatar-optimizer.js +++ b/avatar-optimizer.js @@ -5,10 +5,8 @@ import {getRenderer} from './renderer.js'; const defaultTextureSize = 4096; const startAtlasSize = 512; -// const localVector2D = new THREE.Vector2(); -// const localVector2D2 = new THREE.Vector2(); -// const localVector4D = new THREE.Vector4(); -// const localVector4D2 = new THREE.Vector4(); +const localVector2D = new THREE.Vector2(); +const localVector2D2 = new THREE.Vector2(); const textureTypes = [ 'map', @@ -175,10 +173,11 @@ const optimizeAvatarModel = (model, options = {}) => { const hasTextures = textureSizes.some(textureSize => textureSize.x > 0 || textureSize.y > 0); if (hasTextures) { let atlas; - let atlasSize = startAtlasSize; - while (!(atlas = _attemptPack(textureSizes, atlasSize))) { - atlasSize *= 2; + let atlasScale = 1; + while (!(atlas = _attemptPack(textureSizes, startAtlasSize * atlasScale))) { + atlasScale *= 2; } + // atlas.scale = atlasScale; return atlas; } else { return _makeEmptyAtlas(); @@ -249,8 +248,8 @@ const optimizeAvatarModel = (model, options = {}) => { // build attribute layouts const _makeAttributeLayoutsFromGeometries = geometries => { const attributeLayouts = []; - for (const geometry of geometries) { - const attributes = geometry.attributes; + for (const g of geometries) { + const attributes = g.attributes; for (const attributeName in attributes) { const attribute = attributes[attributeName]; let layout = attributeLayouts.find(layout => layout.name === attributeName); @@ -278,8 +277,8 @@ const optimizeAvatarModel = (model, options = {}) => { const _makeMorphAttributeLayoutsFromGeometries = geometries => { // create morph layouts const morphAttributeLayouts = []; - for (const geometry of geometries) { - const morphAttributes = geometry.morphAttributes; + for (const g of geometries) { + const morphAttributes = g.morphAttributes; for (const morphAttributeName in morphAttributes) { const morphAttribute = morphAttributes[morphAttributeName]; let morphLayout = morphAttributeLayouts.find(l => l.name === morphAttributeName); @@ -316,24 +315,24 @@ const optimizeAvatarModel = (model, options = {}) => { } } }; - const _mergeGeometryies = geometries => { - const geometry = new THREE.BufferGeometry(); - - // attributes - _forceGeometriesAttributeLayouts(attributeLayouts, geometries); + const _mergeAttributes = (geometry, geometries, attributeLayouts) => { for (const layout of attributeLayouts) { const attributeData = new layout.TypedArrayConstructor(layout.count); const attribute = new THREE.BufferAttribute(attributeData, layout.itemSize); let attributeDataIndex = 0; for (const g of geometries) { const gAttribute = g.attributes[layout.name]; - attributeData.set(gAttribute.array, layout.index); + attributeData.set(gAttribute.array, attributeDataIndex); attributeDataIndex += gAttribute.count * gAttribute.itemSize; } + // sanity check + if (attributeDataIndex !== layout.count) { + console.warn('desynced morph data', layout.name, attributeDataIndex, layout.count); + } geometry.setAttribute(layout.name, attribute); } - - // morph attributes + }; + const _mergeMorphAttributes = (geometry, geometries, morphAttributeLayouts) => { for (const morphLayout of morphAttributeLayouts) { const morphsArray = Array(morphLayout.arraySize); for (let i = 0; i < morphLayout.arraySize; i++) { @@ -352,14 +351,15 @@ const optimizeAvatarModel = (model, options = {}) => { morphDataIndex += matchingAttribute.count * matchingAttribute.itemSize; } } + // sanity check if (morphDataIndex !== morphLayout.count) { console.warn('desynced morph data', morphLayout.name, morphDataIndex, morphLayout.count); } } geometry.morphAttributes[morphLayout.name] = morphsArray; } - - // index + }; + const _mergeIndices = (geometry, geometries) => { let indexCount = 0; for (const g of geometries) { indexCount += g.index.count; @@ -376,11 +376,126 @@ const optimizeAvatarModel = (model, options = {}) => { positionOffset += g.attributes.position.count; } geometry.setIndex(new THREE.BufferAttribute(indexData, 1)); + }; + /* const _drawAtlases = () => { + const seenUvIndexes = new Map(); + const _drawAtlas = atlas => { + const canvas = document.createElement('canvas'); + const canvasSize = Math.min(atlas.width, textureSize); + const canvasScale = canvasSize / atlas.width; + canvas.width = canvasSize; + canvas.height = canvasSize; + const ctx = canvas.getContext('2d'); + + atlas.bins.forEach(bin => { + bin.rects.forEach(rect => { + const {x, y, width: w, height: h, data: {image, groups}} = rect; + // draw the image in the correct box on the canvas + const tx = x * canvasScale; + const ty = y * canvasScale; + const tw = w * canvasScale; + const th = h * canvasScale; + ctx.drawImage(image, 0, 0, image.width, image.height, tx, ty, tw, th); + + // const testUv = new THREE.Vector2(Math.random(), Math.random()); + for (const group of groups) { + const {startIndex, count} = group; + for (let i = 0; i < count; i++) { + const uvIndex = geometry.index.array[startIndex + i]; + + // XXX NOTE: this code is slightly wrong. it will generate a unified uv map (first come first served to the uv index) + // that means that the different maps might get the wrong uv. + // the diffuse map takes priority so it looks ok. + // the right way to do this is to have a separate uv map for each map. + if (!seenUvIndexes.get(uvIndex)) { + seenUvIndexes.set(uvIndex, true); + + localVector2D.fromArray(geometry.attributes.uv.array, uvIndex * 2); + localVector2D.multiply( + localVector2D2.set(tw/canvasSize, th/canvasSize) + ).add( + localVector2D2.set(tx/canvasSize, ty/canvasSize) + ); + localVector2D.toArray(geometry.attributes.uv.array, uvIndex * 2); + } + } + } + }); + }); + atlas.image = canvas; + + return atlas; + }; + + // generate atlas for each map; they are all separate + const result = {}; + { + let canvasIndex = 0; + for (const k of textureTypes) { + const atlas = atlases[k]; + const atlas2 = _drawAtlas(atlas); + + result[k] = atlas2; + + canvasIndex++; + } + } + return result; + }; */ + const _remapGeometryUvs = (geometry, geometries) => { + let indexIndex = 0; + const geometryOffsets = geometries.map(g => { + const start = indexIndex; + const count = g.index.count; + indexIndex += count; + return { + start, + count, + }; + }); + + const canvasSize = Math.min(atlas.width, textureSize); + const canvasScale = canvasSize / atlas.width; + atlas.bins.forEach(bin => { + bin.rects.forEach(rect => { + const {x, y, width: w, height: h, data: {index}} = rect; + + if (w > 0 && h > 0) { + const {start, count} = geometryOffsets[index]; + + const tx = x * canvasScale; + const ty = y * canvasScale; + const tw = w * canvasScale; + const th = h * canvasScale; + + for (let i = 0; i < count; i++) { + const uvIndex = geometry.index.array[start + i]; + + localVector2D.fromArray(geometry.attributes.uv.array, uvIndex * 2); + localVector2D.multiply( + localVector2D2.set(tw/canvasSize, th/canvasSize) + ).add( + localVector2D2.set(tx/canvasSize, ty/canvasSize) + ); + localVector2D.toArray(geometry.attributes.uv.array, uvIndex * 2); + } + } + }); + }); + }; + const _mergeGeometries = geometries => { + const geometry = new THREE.BufferGeometry(); geometry.morphTargetsRelative = true; + _forceGeometriesAttributeLayouts(attributeLayouts, geometries); + _mergeAttributes(geometry, geometries, attributeLayouts); + _mergeMorphAttributes(geometry, geometries, morphAttributeLayouts); + _mergeIndices(geometry, geometries); + _remapGeometryUvs(geometry, geometries); + return geometry; }; - const geometry = _mergeGeometryies(geometries); + const geometry = _mergeGeometries(geometries); console.log('got geometry', geometry); const _updateMaterial = () => { @@ -398,15 +513,19 @@ const optimizeAvatarModel = (model, options = {}) => { material.transparent = true; */ }; _updateMaterial(); - // const material = _makeMaterial(); console.log('got material', material); const _makeMesh = () => { + const m = new THREE.MeshPhongMaterial({ + color: 0xFF0000, + }); + /* const mesh = new THREE.Mesh(geometry, m); + return mesh; */ if (type === 'mesh') { - const mesh = new THREE.Mesh(geometry, material); + const mesh = new THREE.Mesh(geometry, m); return mesh; } else if (type === 'skinnedMesh') { - const skinnedMesh = new THREE.SkinnedMesh(geometry, material); + const skinnedMesh = new THREE.SkinnedMesh(geometry, m); skinnedMesh.skeleton = skeletons[0]; skinnedMesh.morphTargetDictionary = morphTargetDictionaryArray[0]; skinnedMesh.morphTargetInfluences = morphTargetInfluencesArray[0]; @@ -422,67 +541,6 @@ const optimizeAvatarModel = (model, options = {}) => { }; const mergedMeshes = mergeables.map((mergeable, i) => _mergeMesh(mergeable, i)); - /* // draw atlas textures - const _remapGeometryUvs = atlases => { - const seenUvIndexes = new Map(); - const _drawAtlas = atlas => { - const canvas = document.createElement('canvas'); - const canvasSize = Math.min(atlas.width, textureSize); - const canvasScale = canvasSize / atlas.width; - canvas.width = canvasSize; - canvas.height = canvasSize; - const ctx = canvas.getContext('2d'); - - atlas.bins.forEach(bin => { - bin.rects.forEach(rect => { - const {x, y, width: w, height: h, data: {image, groups}} = rect; - // draw the image in the correct box on the canvas - const tx = x * canvasScale; - const ty = y * canvasScale; - const tw = w * canvasScale; - const th = h * canvasScale; - ctx.drawImage(image, 0, 0, image.width, image.height, tx, ty, tw, th); - - // const testUv = new THREE.Vector2(Math.random(), Math.random()); - for (const group of groups) { - const {startIndex, count} = group; - for (let i = 0; i < count; i++) { - const uvIndex = geometry.index.array[startIndex + i]; - - // XXX NOTE: this code is slightly wrong. it will generate a unified uv map (first come first served to the uv index) - // that means that the different maps might get the wrong uv. - // the diffuse map takes priority so it looks ok. - // the right way to do this is to have a separate uv map for each map. - if (!seenUvIndexes.get(uvIndex)) { - seenUvIndexes.set(uvIndex, true); - - localVector2D.fromArray(geometry.attributes.uv.array, uvIndex * 2); - localVector2D.multiply( - localVector2D2.set(tw/canvasSize, th/canvasSize) - ).add( - localVector2D2.set(tx/canvasSize, ty/canvasSize) - ); - localVector2D.toArray(geometry.attributes.uv.array, uvIndex * 2); - } - } - } - }); - }); - atlas.image = canvas; - - return atlas; - }; - - const atlasImages = {}; - for (const textureType of textureTypes) { - const atlas = atlases[textureType]; - const atlasImage = _drawAtlas(atlas); - atlasImages[textureType] = atlasImage; - } - return atlasImages; - }; - _remapGeometryUvs(); */ - const object = new THREE.Object3D(); for (const mesh of mergedMeshes) { object.add(mesh); From b62b0fe14cfbe244da0ea2046e1d3d825e660b9f Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Wed, 13 Apr 2022 11:17:04 -0400 Subject: [PATCH 017/125] Avatar optimizer cleanup --- avatar-optimizer.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/avatar-optimizer.js b/avatar-optimizer.js index bee5b9c36c..c99d762e74 100644 --- a/avatar-optimizer.js +++ b/avatar-optimizer.js @@ -173,11 +173,10 @@ const optimizeAvatarModel = (model, options = {}) => { const hasTextures = textureSizes.some(textureSize => textureSize.x > 0 || textureSize.y > 0); if (hasTextures) { let atlas; - let atlasScale = 1; - while (!(atlas = _attemptPack(textureSizes, startAtlasSize * atlasScale))) { - atlasScale *= 2; + let atlasSize = startAtlasSize; + while (!(atlas = _attemptPack(textureSizes, atlasSize))) { + atlasSize *= 2; } - // atlas.scale = atlasScale; return atlas; } else { return _makeEmptyAtlas(); From 66e3edaa863064fb4b9302b0ba3ad7c432ab28ce Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Wed, 13 Apr 2022 11:17:30 -0400 Subject: [PATCH 018/125] UV remap debugging --- avatar-optimizer.js | 53 +++++++++++++++++++++++++++------------------ 1 file changed, 32 insertions(+), 21 deletions(-) diff --git a/avatar-optimizer.js b/avatar-optimizer.js index c99d762e74..a5621e8790 100644 --- a/avatar-optimizer.js +++ b/avatar-optimizer.js @@ -454,33 +454,44 @@ const optimizeAvatarModel = (model, options = {}) => { }); const canvasSize = Math.min(atlas.width, textureSize); - const canvasScale = canvasSize / atlas.width; - atlas.bins.forEach(bin => { - bin.rects.forEach(rect => { - const {x, y, width: w, height: h, data: {index}} = rect; + if (canvasSize > 0) { + const canvasScale = canvasSize / atlas.width; + const seenUvIndexes = new Int32Array(geometry.attributes.uv.count).fill(-1); + atlas.bins.forEach(bin => { + bin.rects.forEach(rect => { + const {x, y, width: w, height: h, data: {index}} = rect; - if (w > 0 && h > 0) { - const {start, count} = geometryOffsets[index]; + if (w > 0 && h > 0) { + const {start, count} = geometryOffsets[index]; - const tx = x * canvasScale; - const ty = y * canvasScale; - const tw = w * canvasScale; - const th = h * canvasScale; + const tx = x * canvasScale; + const ty = y * canvasScale; + const tw = w * canvasScale; + const th = h * canvasScale; - for (let i = 0; i < count; i++) { - const uvIndex = geometry.index.array[start + i]; + for (let i = 0; i < count; i++) { + const indexIndex = start + i; + const uvIndex = geometry.index.array[indexIndex]; + if (seenUvIndexes[uvIndex] === -1) { + seenUvIndexes[uvIndex] = index; - localVector2D.fromArray(geometry.attributes.uv.array, uvIndex * 2); - localVector2D.multiply( - localVector2D2.set(tw/canvasSize, th/canvasSize) - ).add( - localVector2D2.set(tx/canvasSize, ty/canvasSize) - ); - localVector2D.toArray(geometry.attributes.uv.array, uvIndex * 2); + localVector2D.fromArray(geometry.attributes.uv.array, uvIndex * 2); + localVector2D.multiply( + localVector2D2.set(tw/canvasSize, th/canvasSize) + ).add( + localVector2D2.set(tx/canvasSize, ty/canvasSize) + ); + localVector2D.toArray(geometry.attributes.uv.array, uvIndex * 2); + } else { + if (seenUvIndexes[uvIndex] !== index) { + debugger; + } + } + } } - } + }); }); - }); + } }; const _mergeGeometries = geometries => { const geometry = new THREE.BufferGeometry(); From 2805b591258753da42873be6cc2522939ffd9ca7 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Wed, 13 Apr 2022 11:31:31 -0400 Subject: [PATCH 019/125] New UV rewrite --- avatar-optimizer.js | 40 ++++++++++++++++------------------------ 1 file changed, 16 insertions(+), 24 deletions(-) diff --git a/avatar-optimizer.js b/avatar-optimizer.js index a5621e8790..dba093fe6a 100644 --- a/avatar-optimizer.js +++ b/avatar-optimizer.js @@ -442,11 +442,11 @@ const optimizeAvatarModel = (model, options = {}) => { return result; }; */ const _remapGeometryUvs = (geometry, geometries) => { - let indexIndex = 0; - const geometryOffsets = geometries.map(g => { - const start = indexIndex; - const count = g.index.count; - indexIndex += count; + let uvIndex = 0; + const geometryUvOffsets = geometries.map(g => { + const start = uvIndex; + const count = g.attributes.uv.count; + uvIndex += count; return { start, count, @@ -456,13 +456,13 @@ const optimizeAvatarModel = (model, options = {}) => { const canvasSize = Math.min(atlas.width, textureSize); if (canvasSize > 0) { const canvasScale = canvasSize / atlas.width; - const seenUvIndexes = new Int32Array(geometry.attributes.uv.count).fill(-1); + // const seenUvIndexes = new Int32Array(geometry.attributes.uv.count).fill(-1); atlas.bins.forEach(bin => { bin.rects.forEach(rect => { const {x, y, width: w, height: h, data: {index}} = rect; if (w > 0 && h > 0) { - const {start, count} = geometryOffsets[index]; + const {start, count} = geometryUvOffsets[index]; const tx = x * canvasScale; const ty = y * canvasScale; @@ -470,23 +470,15 @@ const optimizeAvatarModel = (model, options = {}) => { const th = h * canvasScale; for (let i = 0; i < count; i++) { - const indexIndex = start + i; - const uvIndex = geometry.index.array[indexIndex]; - if (seenUvIndexes[uvIndex] === -1) { - seenUvIndexes[uvIndex] = index; - - localVector2D.fromArray(geometry.attributes.uv.array, uvIndex * 2); - localVector2D.multiply( - localVector2D2.set(tw/canvasSize, th/canvasSize) - ).add( - localVector2D2.set(tx/canvasSize, ty/canvasSize) - ); - localVector2D.toArray(geometry.attributes.uv.array, uvIndex * 2); - } else { - if (seenUvIndexes[uvIndex] !== index) { - debugger; - } - } + const uvIndex = start + i; + + localVector2D.fromArray(geometry.attributes.uv.array, uvIndex * 2); + localVector2D.multiply( + localVector2D2.set(tw/canvasSize, th/canvasSize) + ).add( + localVector2D2.set(tx/canvasSize, ty/canvasSize) + ); + localVector2D.toArray(geometry.attributes.uv.array, uvIndex * 2); } } }); From 926d0844ae8f5e168752e51ac190acbd0f44a49c Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Wed, 13 Apr 2022 11:32:53 -0400 Subject: [PATCH 020/125] Hook in phong debug material to avatar optimizer --- avatar-optimizer.js | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/avatar-optimizer.js b/avatar-optimizer.js index dba093fe6a..ccc9f9242e 100644 --- a/avatar-optimizer.js +++ b/avatar-optimizer.js @@ -500,6 +500,9 @@ const optimizeAvatarModel = (model, options = {}) => { const geometry = _mergeGeometries(geometries); console.log('got geometry', geometry); + const m = new THREE.MeshPhongMaterial({ + color: 0xFF0000, + }); const _updateMaterial = () => { if (atlasTextures) { for (const textureType of textureTypes) { @@ -507,22 +510,18 @@ const optimizeAvatarModel = (model, options = {}) => { const t = new THREE.Texture(image); t.flipY = false; t.needsUpdate = true; - material[textureType] = t; + m[textureType] = t; } } - /* material.roughness = 1; - material.alphaTest = 0.1; - material.transparent = true; */ + // m.roughness = 1; + m.alphaTest = 0.1; + m.transparent = true; + m.needsUpdate = true; }; _updateMaterial(); - console.log('got material', material); + console.log('got material', m); const _makeMesh = () => { - const m = new THREE.MeshPhongMaterial({ - color: 0xFF0000, - }); - /* const mesh = new THREE.Mesh(geometry, m); - return mesh; */ if (type === 'mesh') { const mesh = new THREE.Mesh(geometry, m); return mesh; From c9cc753036bda3a25cd3f3cf127327da6820129b Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Wed, 13 Apr 2022 11:51:36 -0400 Subject: [PATCH 021/125] Avatar optimizer shader debugging --- avatar-optimizer.js | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/avatar-optimizer.js b/avatar-optimizer.js index ccc9f9242e..db77c8de56 100644 --- a/avatar-optimizer.js +++ b/avatar-optimizer.js @@ -500,9 +500,10 @@ const optimizeAvatarModel = (model, options = {}) => { const geometry = _mergeGeometries(geometries); console.log('got geometry', geometry); - const m = new THREE.MeshPhongMaterial({ + /* const m = new THREE.MeshPhongMaterial({ color: 0xFF0000, - }); + }); */ + const m = material; const _updateMaterial = () => { if (atlasTextures) { for (const textureType of textureTypes) { @@ -511,11 +512,18 @@ const optimizeAvatarModel = (model, options = {}) => { t.flipY = false; t.needsUpdate = true; m[textureType] = t; + /* if (m[textureType] !== t) { + throw new Error('texture update failed'); + } */ + if (m.uniforms) { + m.uniforms[textureType].value = t; + m.uniforms[textureType].needsUpdate = true; + } } } // m.roughness = 1; - m.alphaTest = 0.1; - m.transparent = true; + // m.alphaTest = 0.1; + // m.transparent = true; m.needsUpdate = true; }; _updateMaterial(); From f6bc594f5f01464e3656dfcb05792d2ae7d33c86 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Wed, 13 Apr 2022 14:11:05 -0400 Subject: [PATCH 022/125] Port shade textures in avatar optimizer --- avatar-optimizer.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/avatar-optimizer.js b/avatar-optimizer.js index db77c8de56..abcb833793 100644 --- a/avatar-optimizer.js +++ b/avatar-optimizer.js @@ -12,6 +12,7 @@ const textureTypes = [ 'map', 'emissiveMap', 'normalMap', + 'shadeTexture', ]; class AttributeLayout { @@ -54,9 +55,8 @@ const _getMergeableObjects = model => { map = null, emissiveMap = null, normalMap = null, - // shadeTexture = null, + shadeTexture = null, } = objectMaterial; - // console.log('got material', objectMaterial); const skeleton = o.skeleton ?? null; const key = [ @@ -73,7 +73,7 @@ const _getMergeableObjects = model => { maps: [], emissiveMaps: [], normalMaps: [], - // shadeTextures: [], + shadeTextures: [], skeletons: [], morphTargetDictionaryArray: [], morphTargetInfluencesArray: [], @@ -85,7 +85,7 @@ const _getMergeableObjects = model => { m.maps.push(map); m.emissiveMaps.push(emissiveMap); m.normalMaps.push(normalMap); - // m.shadeTextures.push(shadeTexture); + m.shadeTextures.push(shadeTexture); m.skeletons.push(skeleton); m.morphTargetDictionaryArray.push(morphTargetDictionary); m.morphTargetInfluencesArray.push(morphTargetInfluences); From 44e2710749f6bb3fb7a300d43b087e40a6f02cac Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Wed, 13 Apr 2022 14:12:11 -0400 Subject: [PATCH 023/125] Remove avatar optimizer dead addendum --- avatar-optimizer.js | 133 -------------------------------------------- 1 file changed, 133 deletions(-) diff --git a/avatar-optimizer.js b/avatar-optimizer.js index abcb833793..7de0459793 100644 --- a/avatar-optimizer.js +++ b/avatar-optimizer.js @@ -555,139 +555,6 @@ const optimizeAvatarModel = (model, options = {}) => { object.add(mesh); } return object; - - const _collectObjects = () => { - const meshes = []; - const geometries = []; - const materials = []; - const textures = {}; - for (const textureType of textureTypes) { - textures[textureType] = []; - } - let textureGroupsMap = new WeakMap(); - const skeletons = []; - { - let indexIndex = 0; - model.traverse(node => { - if (node.isMesh && !node.parent?.isBone) { - meshes.push(node); - - const geometry = node.geometry; - geometries.push(geometry); - - const startIndex = indexIndex; - const count = geometry.index.count; - const _pushMaterial = material => { - materials.push(material); - for (const k of textureTypes) { - const texture = material[k]; - if (texture) { - const texturesOfType = textures[k]; - if (!texturesOfType.includes(texture)) { - texturesOfType.push(texture); - } - let textureGroups = textureGroupsMap.get(texture); - if (!textureGroups) { - textureGroups = []; - textureGroupsMap.set(texture, textureGroups); - } - textureGroups.push({ - startIndex, - count, - }); - } - } - }; - - let material = node.material; - if (Array.isArray(material)) { - for (let i = 0; i < material.length; i++) { - _pushMaterial(material[i]); - } - } else { - _pushMaterial(material); - } - - if (node.skeleton) { - if (!skeletons.includes(node.skeleton)) { - skeletons.push(node.skeleton); - } - } - - indexIndex += geometry.index.count; - } - }); - } - return { - meshes, - geometries, - materials, - textures, - textureGroupsMap, - skeletons, - }; - }; - - // collect objects - const { - meshes, - geometries, - materials, - textures, - textureGroupsMap, - skeletons, - } = _collectObjects(); - - const attributeLayouts = _makeAttributeLayoutsFromGeometries(geometries); - const morphAttributeLayouts = _makeMorphAttributeLayoutsFromGeometries(geometries); - - // validate attribute layouts - for (let i = 0; i < meshes.length; i++) { - const mesh = meshes[i]; - const geometry = mesh.geometry; - if (!geometry.index) { - console.log('no index', mesh); - } - } - if (skeletons.length !== 1) { - console.log('did not have single skeleton', skeletons); - } - - - - // verify - for (const layout of attributeLayouts) { - if (layout.index !== layout.count) { - console.log('bad layout count', layout.index, layout.count); - } - } - if (indexOffset !== indexCount) { - console.log('bad final index', indexOffset, indexCount); - } - - // create material - // const material = new THREE.MeshStandardMaterial(); - const material = new THREE.MeshBasicMaterial(); - if (atlasTextures) { - for (const k of textureTypes) { - const t = new THREE.Texture(textureAtlases[k].image); - t.flipY = false; - t.needsUpdate = true; - material[k] = t; - } - } - material.roughness = 1; - material.alphaTest = 0.1; - material.transparent = true; - - // create mesh - const crunchedModel = new THREE.SkinnedMesh(geometry, material); - crunchedModel.skeleton = skeletons[0]; - const deepestMorphMesh = meshes.find(m => (m.morphTargetInfluences ? m.morphTargetInfluences.length : 0) === morphAttributeLayouts[0].depth); - crunchedModel.morphTargetDictionary = deepestMorphMesh.morphTargetDictionary; - crunchedModel.morphTargetInfluences = deepestMorphMesh.morphTargetInfluences; - - return crunchedModel; }; export { From 4f5c5858e7e3ac3529c60e384c227d86f0971e7c Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Wed, 13 Apr 2022 14:15:20 -0400 Subject: [PATCH 024/125] Avatar optimizer commenting cleanup --- avatar-optimizer.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/avatar-optimizer.js b/avatar-optimizer.js index 7de0459793..ddea856eb9 100644 --- a/avatar-optimizer.js +++ b/avatar-optimizer.js @@ -141,8 +141,6 @@ const optimizeAvatarModel = (model, options = {}) => { const _attemptPack = (textureSizes, atlasSize) => { const maxRectsPacker = new MaxRectsPacker(atlasSize, atlasSize, 1); const rects = textureSizes.map((textureSize, index) => { - // const w = t.image.width; - // const h = t.image.height; // const image = t.image; const {x: width, y: height} = textureSize; return { From 4c86ecd1faba7d76c6d805853669945a5448ac5b Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Wed, 13 Apr 2022 14:16:11 -0400 Subject: [PATCH 025/125] Major avatar optimizer work --- avatar-optimizer.js | 196 +++++++++++++++++--------------------------- 1 file changed, 76 insertions(+), 120 deletions(-) diff --git a/avatar-optimizer.js b/avatar-optimizer.js index ddea856eb9..a6895ddba9 100644 --- a/avatar-optimizer.js +++ b/avatar-optimizer.js @@ -100,7 +100,7 @@ const optimizeAvatarModel = (model, options = {}) => { const textureSize = options.textureSize ?? defaultTextureSize; const mergeables = _getMergeableObjects(model); - console.log('got mergeables', mergeables); + // console.log('got mergeables', mergeables); const _mergeMesh = (mergeable, mergeableIndex) => { const { @@ -166,7 +166,6 @@ const optimizeAvatarModel = (model, options = {}) => { return null; } }; - const _makeEmptyAtlas = () => new MaxRectsPacker(0, 0, 1); const hasTextures = textureSizes.some(textureSize => textureSize.x > 0 || textureSize.y > 0); if (hasTextures) { @@ -177,40 +176,51 @@ const optimizeAvatarModel = (model, options = {}) => { } return atlas; } else { - return _makeEmptyAtlas(); + return null; } }; const atlas = atlasTextures ? _packAtlases() : null; // draw atlas images + const originalTextures = new WeakMap(); // map of canvas to the texture that generated it const _drawAtlasImages = atlas => { const _drawAtlasImage = textureType => { - const canvas = document.createElement('canvas'); - const canvasSize = Math.min(atlas.width, textureSize); - const canvasScale = canvasSize / atlas.width; - canvas.width = canvasSize; - canvas.height = canvasSize; - const ctx = canvas.getContext('2d'); - - atlas.bins.forEach(bin => { - bin.rects.forEach(rect => { - const {x, y, width: w, height: h, data: {index}} = rect; - const textures = mergeable[`${textureType}s`]; - const texture = textures[index]; - if (texture) { - const image = texture.image; - - // draw the image in the correct box on the canvas - const tx = x * canvasScale; - const ty = y * canvasScale; - const tw = w * canvasScale; - const th = h * canvasScale; - ctx.drawImage(image, 0, 0, image.width, image.height, tx, ty, tw, th); - } + const textures = mergeable[`${textureType}s`]; + + if (atlas && textures.some(t => t !== null)) { + const canvasSize = Math.min(atlas.width, textureSize); + const canvasScale = canvasSize / atlas.width; + + const canvas = document.createElement('canvas'); + canvas.width = canvasSize; + canvas.height = canvasSize; + const ctx = canvas.getContext('2d'); + + atlas.bins.forEach(bin => { + bin.rects.forEach(rect => { + const {x, y, width: w, height: h, data: {index}} = rect; + const texture = textures[index]; + if (texture) { + const image = texture.image; + + // draw the image in the correct box on the canvas + const tx = x * canvasScale; + const ty = y * canvasScale; + const tw = w * canvasScale; + const th = h * canvasScale; + ctx.drawImage(image, 0, 0, image.width, image.height, tx, ty, tw, th); + + if (!originalTextures.has(canvas)) { + originalTextures.set(canvas, texture); + } + } + }); }); - }); - return canvas; + return canvas; + } else { + return null; + } }; const atlasImages = {}; @@ -222,7 +232,7 @@ const optimizeAvatarModel = (model, options = {}) => { }; const atlasImages = atlasTextures ? _drawAtlasImages(atlas) : null; - // XXX debug + /* // XXX debug { const debugWidth = 300; let textureTypeIndex = 0; @@ -240,7 +250,7 @@ const optimizeAvatarModel = (model, options = {}) => { document.body.appendChild(atlasImage); textureTypeIndex++; } - } + } */ // build attribute layouts const _makeAttributeLayoutsFromGeometries = geometries => { @@ -295,7 +305,7 @@ const optimizeAvatarModel = (model, options = {}) => { return morphAttributeLayouts; }; const morphAttributeLayouts = _makeMorphAttributeLayoutsFromGeometries(geometries); - console.log('got attribute layouts', attributeLayouts, morphAttributeLayouts); + // console.log('got attribute layouts', attributeLayouts, morphAttributeLayouts); const _forceGeometriesAttributeLayouts = (attributeLayouts, geometries) => { for (const layout of attributeLayouts) { @@ -374,87 +384,21 @@ const optimizeAvatarModel = (model, options = {}) => { } geometry.setIndex(new THREE.BufferAttribute(indexData, 1)); }; - /* const _drawAtlases = () => { - const seenUvIndexes = new Map(); - const _drawAtlas = atlas => { - const canvas = document.createElement('canvas'); - const canvasSize = Math.min(atlas.width, textureSize); - const canvasScale = canvasSize / atlas.width; - canvas.width = canvasSize; - canvas.height = canvasSize; - const ctx = canvas.getContext('2d'); - - atlas.bins.forEach(bin => { - bin.rects.forEach(rect => { - const {x, y, width: w, height: h, data: {image, groups}} = rect; - // draw the image in the correct box on the canvas - const tx = x * canvasScale; - const ty = y * canvasScale; - const tw = w * canvasScale; - const th = h * canvasScale; - ctx.drawImage(image, 0, 0, image.width, image.height, tx, ty, tw, th); - - // const testUv = new THREE.Vector2(Math.random(), Math.random()); - for (const group of groups) { - const {startIndex, count} = group; - for (let i = 0; i < count; i++) { - const uvIndex = geometry.index.array[startIndex + i]; - - // XXX NOTE: this code is slightly wrong. it will generate a unified uv map (first come first served to the uv index) - // that means that the different maps might get the wrong uv. - // the diffuse map takes priority so it looks ok. - // the right way to do this is to have a separate uv map for each map. - if (!seenUvIndexes.get(uvIndex)) { - seenUvIndexes.set(uvIndex, true); - - localVector2D.fromArray(geometry.attributes.uv.array, uvIndex * 2); - localVector2D.multiply( - localVector2D2.set(tw/canvasSize, th/canvasSize) - ).add( - localVector2D2.set(tx/canvasSize, ty/canvasSize) - ); - localVector2D.toArray(geometry.attributes.uv.array, uvIndex * 2); - } - } - } - }); + const _remapGeometryUvs = (geometry, geometries) => { + if (atlas) { + let uvIndex = 0; + const geometryUvOffsets = geometries.map(g => { + const start = uvIndex; + const count = g.attributes.uv.count; + uvIndex += count; + return { + start, + count, + }; }); - atlas.image = canvas; - - return atlas; - }; - - // generate atlas for each map; they are all separate - const result = {}; - { - let canvasIndex = 0; - for (const k of textureTypes) { - const atlas = atlases[k]; - const atlas2 = _drawAtlas(atlas); - result[k] = atlas2; - - canvasIndex++; - } - } - return result; - }; */ - const _remapGeometryUvs = (geometry, geometries) => { - let uvIndex = 0; - const geometryUvOffsets = geometries.map(g => { - const start = uvIndex; - const count = g.attributes.uv.count; - uvIndex += count; - return { - start, - count, - }; - }); - - const canvasSize = Math.min(atlas.width, textureSize); - if (canvasSize > 0) { + const canvasSize = Math.min(atlas.width, textureSize); const canvasScale = canvasSize / atlas.width; - // const seenUvIndexes = new Int32Array(geometry.attributes.uv.count).fill(-1); atlas.bins.forEach(bin => { bin.rects.forEach(rect => { const {x, y, width: w, height: h, data: {index}} = rect; @@ -496,7 +440,7 @@ const optimizeAvatarModel = (model, options = {}) => { return geometry; }; const geometry = _mergeGeometries(geometries); - console.log('got geometry', geometry); + // console.log('got geometry', geometry); /* const m = new THREE.MeshPhongMaterial({ color: 0xFF0000, @@ -506,16 +450,28 @@ const optimizeAvatarModel = (model, options = {}) => { if (atlasTextures) { for (const textureType of textureTypes) { const image = atlasImages[textureType]; - const t = new THREE.Texture(image); - t.flipY = false; - t.needsUpdate = true; - m[textureType] = t; - /* if (m[textureType] !== t) { - throw new Error('texture update failed'); - } */ - if (m.uniforms) { - m.uniforms[textureType].value = t; - m.uniforms[textureType].needsUpdate = true; + + if (image) { + const originalTexture = originalTextures.get(image); + + const t = new THREE.Texture(image); + t.minFilter = originalTexture.minFilter; + t.magFilter = originalTexture.magFilter; + t.wrapS = originalTexture.wrapS; + t.wrapT = originalTexture.wrapT; + t.mapping = originalTexture.mapping; + // t.encoding = originalTexture.encoding; + + t.flipY = false; + t.needsUpdate = true; + m[textureType] = t; + /* if (m[textureType] !== t) { + throw new Error('texture update failed'); + } */ + if (m.uniforms) { + m.uniforms[textureType].value = t; + m.uniforms[textureType].needsUpdate = true; + } } } } @@ -542,7 +498,7 @@ const optimizeAvatarModel = (model, options = {}) => { } }; const mesh = _makeMesh(); - console.log('got mesh', mesh); + // console.log('got mesh', mesh); return mesh; }; From 1f1bdd936ccaa64a2735c04eec447817f1419e32 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Wed, 13 Apr 2022 14:30:09 -0400 Subject: [PATCH 026/125] Update package-lock.json --- package-lock.json | 41842 +++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 39601 insertions(+), 2241 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6e3c9168fb..264db8bc46 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,36 +1,82 @@ { "name": "webaverse-app", "version": "0.0.1", - "lockfileVersion": 1, + "lockfileVersion": 2, "requires": true, - "dependencies": { - "@ampproject/remapping": { + "packages": { + "": { + "name": "webaverse-app", + "version": "0.0.1", + "license": "ISC", + "dependencies": { + "@babel/preset-react": "^7.17.12", + "@pixiv/three-vrm": "./packages/three-vrm", + "@react-three/fiber": "^7.0.29", + "@shaderfrog/glsl-parser": "^0.1.23", + "classnames": "^2.3.1", + "encoding-japanese": "^1.0.30", + "ethers": "^5.6.8", + "express": "^4.18.1", + "gpt-3-encoder": "^1.1.3", + "json-6": "^1.1.4", + "maxrects-packer": "^2.7.3", + "metaversefile": "./packages/totum", + "openai-api": "^1.3.1", + "react": "17.0.2", + "react-dom": "17.0.2", + "smile2emoji": "^1.1.6", + "stats.js": "^0.17.0", + "three": "./packages/three", + "troika-three-text": "^0.43.1-alpha.0", + "webm-writer": "^1.0.0", + "wsrtc": "./packages/wsrtc", + "xhr2": "^0.2.1", + "zjs": "./packages/zjs" + }, + "devDependencies": { + "@vitejs/plugin-react-refresh": "^1.3.6", + "eslint": "^7.32.0", + "eslint-config-semistandard": "^15.0.1", + "eslint-config-standard": "^14.1.1", + "eslint-plugin-import": "^2.26.0", + "eslint-plugin-node": "^11.1.0", + "eslint-plugin-promise": "^4.3.1", + "eslint-plugin-standard": "^4.1.0", + "vite": "^2.9.12" + } + }, + "node_modules/@ampproject/remapping": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "requires": { + "license": "Apache-2.0", + "dependencies": { "@jridgewell/gen-mapping": "^0.1.0", "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" } }, - "@babel/code-frame": { + "node_modules/@babel/code-frame": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "requires": { + "license": "MIT", + "dependencies": { "@babel/highlight": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/compat-data": { + "node_modules/@babel/compat-data": { "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.8.tgz", - "integrity": "sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ==" + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } }, - "@babel/core": { + "node_modules/@babel/core": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.6.tgz", - "integrity": "sha512-cQbWBpxcbbs/IUredIPkHiAGULLV8iwgNRMFzvbhEXISp4f3rUUXE5+TIw6KwUWUR3DwyI6gmBRnmAtYaWehwQ==", - "requires": { + "license": "MIT", + "dependencies": { "@ampproject/remapping": "^2.1.0", "@babel/code-frame": "^7.18.6", "@babel/generator": "^7.18.6", @@ -47,305 +93,413 @@ "json5": "^2.2.1", "semver": "^6.3.0" }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/debug": { + "version": "4.3.4", + "license": "MIT", "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true } } }, - "@babel/generator": { - "version": "7.18.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.7.tgz", - "integrity": "sha512-shck+7VLlY72a2w9c3zYWuE1pwOKEiQHV7GTUbSnhyl5eu3i04t30tBY82ZRWrDfo3gkakCFtevExnxbkf2a3A==", - "requires": { - "@babel/types": "^7.18.7", + "node_modules/@babel/core/node_modules/ms": { + "version": "2.1.2", + "license": "MIT" + }, + "node_modules/@babel/generator": { + "version": "7.18.12", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.18.10", "@jridgewell/gen-mapping": "^0.3.2", "jsesc": "^2.5.1" }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "license": "MIT", "dependencies": { - "@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - } + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" } }, - "@babel/helper-annotate-as-pure": { + "node_modules/@babel/helper-annotate-as-pure": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", - "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", - "requires": { + "license": "MIT", + "dependencies": { "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-compilation-targets": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.6.tgz", - "integrity": "sha512-vFjbfhNCzqdeAtZflUFrG5YIFqGTqsctrtkZ1D/NB0mDW9TwW3GmmUepYY4G9wCET5rY5ugz4OGTcLd614IzQg==", - "requires": { - "@babel/compat-data": "^7.18.6", + "node_modules/@babel/helper-compilation-targets": { + "version": "7.18.9", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.18.8", "@babel/helper-validator-option": "^7.18.6", "browserslist": "^4.20.2", "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "@babel/helper-environment-visitor": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.6.tgz", - "integrity": "sha512-8n6gSfn2baOY+qlp+VSzsosjCVGFqWKmDF0cCWOybh52Dw3SEyoWR1KrhMJASjLwIEkkAufZ0xvr+SxLHSpy2Q==" + "node_modules/@babel/helper-environment-visitor": { + "version": "7.18.9", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } }, - "@babel/helper-function-name": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.6.tgz", - "integrity": "sha512-0mWMxV1aC97dhjCah5U5Ua7668r5ZmSC2DLfH2EZnf9c3/dHZKiFa5pRLMH5tjSl471tY6496ZWk/kjNONBxhw==", - "requires": { + "node_modules/@babel/helper-function-name": { + "version": "7.18.9", + "license": "MIT", + "dependencies": { "@babel/template": "^7.18.6", - "@babel/types": "^7.18.6" + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-hoist-variables": { + "node_modules/@babel/helper-hoist-variables": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", - "requires": { + "license": "MIT", + "dependencies": { "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-module-imports": { + "node_modules/@babel/helper-module-imports": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", - "requires": { + "license": "MIT", + "dependencies": { "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-module-transforms": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.8.tgz", - "integrity": "sha512-che3jvZwIcZxrwh63VfnFTUzcAM9v/lznYkkRxIBGMPt1SudOKHAEec0SIRCfiuIzTcF7VGj/CaTT6gY4eWxvA==", - "requires": { - "@babel/helper-environment-visitor": "^7.18.6", + "node_modules/@babel/helper-module-transforms": { + "version": "7.18.9", + "license": "MIT", + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-module-imports": "^7.18.6", "@babel/helper-simple-access": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", "@babel/helper-validator-identifier": "^7.18.6", "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.8", - "@babel/types": "^7.18.8" + "@babel/traverse": "^7.18.9", + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-plugin-utils": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.6.tgz", - "integrity": "sha512-gvZnm1YAAxh13eJdkb9EWHBnF3eAub3XTLCZEehHT2kWxiKVRL64+ae5Y6Ivne0mVHmMYKT+xWgZO+gQhuLUBg==" + "node_modules/@babel/helper-plugin-utils": { + "version": "7.18.9", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } }, - "@babel/helper-simple-access": { + "node_modules/@babel/helper-simple-access": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz", - "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==", - "requires": { + "license": "MIT", + "dependencies": { "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-split-export-declaration": { + "node_modules/@babel/helper-split-export-declaration": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", - "requires": { + "license": "MIT", + "dependencies": { "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-validator-identifier": { + "node_modules/@babel/helper-string-parser": { + "version": "7.18.10", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", - "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==" + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } }, - "@babel/helper-validator-option": { + "node_modules/@babel/helper-validator-option": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==" + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } }, - "@babel/helpers": { + "node_modules/@babel/helpers": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.6.tgz", - "integrity": "sha512-vzSiiqbQOghPngUYt/zWGvK3LAsPhz55vc9XNN0xAl2gV4ieShI2OQli5duxWHD+72PZPTKAcfcZDE1Cwc5zsQ==", - "requires": { + "license": "MIT", + "dependencies": { "@babel/template": "^7.18.6", "@babel/traverse": "^7.18.6", "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/highlight": { + "node_modules/@babel/highlight": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "requires": { + "license": "MIT", + "dependencies": { "@babel/helper-validator-identifier": "^7.18.6", "chalk": "^2.0.0", "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/parser": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.8.tgz", - "integrity": "sha512-RSKRfYX20dyH+elbJK2uqAkVyucL+xXzhqlMD5/ZXx+dAAwpyB7HsvnHe/ZUGOF+xLr5Wx9/JoXVTj6BQE2/oA==" + "node_modules/@babel/parser": { + "version": "7.18.11", + "license": "MIT", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } }, - "@babel/plugin-syntax-jsx": { + "node_modules/@babel/plugin-syntax-jsx": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", - "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", - "requires": { + "license": "MIT", + "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-react-display-name": { + "node_modules/@babel/plugin-transform-react-display-name": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz", - "integrity": "sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==", - "requires": { + "license": "MIT", + "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-react-jsx": { + "node_modules/@babel/plugin-transform-react-jsx": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.18.6.tgz", - "integrity": "sha512-Mz7xMPxoy9kPS/JScj6fJs03TZ/fZ1dJPlMjRAgTaxaS0fUBk8FV/A2rRgfPsVCZqALNwMexD+0Uaf5zlcKPpw==", - "requires": { + "license": "MIT", + "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-module-imports": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-jsx": "^7.18.6", "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-react-jsx-development": { + "node_modules/@babel/plugin-transform-react-jsx-development": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", - "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==", - "requires": { + "license": "MIT", + "dependencies": { "@babel/plugin-transform-react-jsx": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-react-jsx-self": { + "node_modules/@babel/plugin-transform-react-jsx-self": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.18.6.tgz", - "integrity": "sha512-A0LQGx4+4Jv7u/tWzoJF7alZwnBDQd6cGLh9P+Ttk4dpiL+J5p7NSNv/9tlEFFJDq3kjxOavWmbm6t0Gk+A3Ig==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-react-jsx-source": { + "node_modules/@babel/plugin-transform-react-jsx-source": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.18.6.tgz", - "integrity": "sha512-utZmlASneDfdaMh0m/WausbjUjEdGrQJz0vFK93d7wD3xf5wBtX219+q6IlCNZeguIcxS2f/CvLZrlLSvSHQXw==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-react-pure-annotations": { + "node_modules/@babel/plugin-transform-react-pure-annotations": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz", - "integrity": "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==", - "requires": { + "license": "MIT", + "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/preset-react": { + "node_modules/@babel/preset-react": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.18.6.tgz", - "integrity": "sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==", - "requires": { + "license": "MIT", + "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/helper-validator-option": "^7.18.6", "@babel/plugin-transform-react-display-name": "^7.18.6", "@babel/plugin-transform-react-jsx": "^7.18.6", "@babel/plugin-transform-react-jsx-development": "^7.18.6", "@babel/plugin-transform-react-pure-annotations": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/runtime": { + "node_modules/@babel/runtime": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.6.tgz", - "integrity": "sha512-t9wi7/AW6XtKahAe20Yw0/mMljKq0B1r2fPdvaAdV/KPDZewFXdaaa6K7lxmZBZ8FBNpCiAT6iHPmd6QO9bKfQ==", - "requires": { + "license": "MIT", + "dependencies": { "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/template": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.6.tgz", - "integrity": "sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw==", - "requires": { + "node_modules/@babel/template": { + "version": "7.18.10", + "license": "MIT", + "dependencies": { "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.6", - "@babel/types": "^7.18.6" + "@babel/parser": "^7.18.10", + "@babel/types": "^7.18.10" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/traverse": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.8.tgz", - "integrity": "sha512-UNg/AcSySJYR/+mIcJQDCv00T+AqRO7j/ZEJLzpaYtgM48rMg5MnkJgyNqkzo88+p4tfRvZJCEiwwfG6h4jkRg==", - "requires": { + "node_modules/@babel/traverse": { + "version": "7.18.11", + "license": "MIT", + "dependencies": { "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.18.7", - "@babel/helper-environment-visitor": "^7.18.6", - "@babel/helper-function-name": "^7.18.6", + "@babel/generator": "^7.18.10", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.18.8", - "@babel/types": "^7.18.8", + "@babel/parser": "^7.18.11", + "@babel/types": "^7.18.10", "debug": "^4.1.0", "globals": "^11.1.0" }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/debug": { + "version": "4.3.4", + "license": "MIT", "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true } } }, - "@babel/types": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.8.tgz", - "integrity": "sha512-qwpdsmraq0aJ3osLJRApsc2ouSJCdnMeZwB0DhbtHAtRpZNZCdlbRnHIgcRKzdE1g0iOGg644fzjOBcdOz9cPw==", - "requires": { + "node_modules/@babel/traverse/node_modules/ms": { + "version": "2.1.2", + "license": "MIT" + }, + "node_modules/@babel/types": { + "version": "7.18.10", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.18.10", "@babel/helper-validator-identifier": "^7.18.6", "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" } }, - "@eslint/eslintrc": { + "node_modules/@eslint/eslintrc": { "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", - "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "ajv": "^6.12.4", "debug": "^4.1.1", "espree": "^7.3.0", @@ -356,82 +510,115 @@ "minimatch": "^3.0.4", "strip-json-comments": "^3.1.1" }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/@eslint/eslintrc/node_modules/argparse": { + "version": "1.0.10", + "dev": true, + "license": "MIT", "dependencies": { - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "globals": { - "version": "13.16.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.16.0.tgz", - "integrity": "sha512-A1lrQfpNF+McdPOnnFqY3kSN0AFTy485bTi1bkLk4mVPODIUEcSfhHgRqA+QdXPksrSTTztYXx37NFV+GpGk3Q==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } + "sprintf-js": "~1.0.2" } }, - "@ethersproject/abi": { - "version": "5.6.4", - "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.6.4.tgz", - "integrity": "sha512-TTeZUlCeIHG6527/2goZA6gW5F8Emoc7MrZDC7hhP84aRGvW3TEdTnZR08Ls88YXM1m2SuK42Osw/jSi3uO8gg==", - "requires": { - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/hash": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/strings": "^5.6.1" + "node_modules/@eslint/eslintrc/node_modules/debug": { + "version": "4.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "@ethersproject/abstract-provider": { + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.16.0", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/js-yaml": { + "version": "3.14.1", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ms": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/@ethersproject/abi": { + "version": "5.6.4", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/hash": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/strings": "^5.6.1" + } + }, + "node_modules/@ethersproject/abstract-provider": { "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.6.1.tgz", - "integrity": "sha512-BxlIgogYJtp1FS8Muvj8YfdClk3unZH0vRMVX791Z9INBNT/kuACZ9GzaY1Y4yFq+YSy6/w4gzj3HCRKrK9hsQ==", - "requires": { + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { "@ethersproject/bignumber": "^5.6.2", "@ethersproject/bytes": "^5.6.1", "@ethersproject/logger": "^5.6.0", @@ -441,11 +628,20 @@ "@ethersproject/web": "^5.6.1" } }, - "@ethersproject/abstract-signer": { + "node_modules/@ethersproject/abstract-signer": { "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.6.2.tgz", - "integrity": "sha512-n1r6lttFBG0t2vNiI3HoWaS/KdOt8xyDjzlP2cuevlWLG6EX0OwcKLyG/Kp/cuwNxdy/ous+R/DEMdTUwWQIjQ==", - "requires": { + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { "@ethersproject/abstract-provider": "^5.6.1", "@ethersproject/bignumber": "^5.6.2", "@ethersproject/bytes": "^5.6.1", @@ -453,11 +649,20 @@ "@ethersproject/properties": "^5.6.0" } }, - "@ethersproject/address": { + "node_modules/@ethersproject/address": { "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.6.1.tgz", - "integrity": "sha512-uOgF0kS5MJv9ZvCz7x6T2EXJSzotiybApn4XlOgoTX0xdtyVIJ7pF+6cGPxiEq/dpBiTfMiw7Yc81JcwhSYA0Q==", - "requires": { + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { "@ethersproject/bignumber": "^5.6.2", "@ethersproject/bytes": "^5.6.1", "@ethersproject/keccak256": "^5.6.1", @@ -465,54 +670,108 @@ "@ethersproject/rlp": "^5.6.1" } }, - "@ethersproject/base64": { + "node_modules/@ethersproject/base64": { "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.6.1.tgz", - "integrity": "sha512-qB76rjop6a0RIYYMiB4Eh/8n+Hxu2NIZm8S/Q7kNo5pmZfXhHGHmS4MinUainiBC54SCyRnwzL+KZjj8zbsSsw==", - "requires": { + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { "@ethersproject/bytes": "^5.6.1" } }, - "@ethersproject/basex": { + "node_modules/@ethersproject/basex": { "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.6.1.tgz", - "integrity": "sha512-a52MkVz4vuBXR06nvflPMotld1FJWSj2QT0985v7P/emPZO00PucFAkbcmq2vpVU7Ts7umKiSI6SppiLykVWsA==", - "requires": { + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { "@ethersproject/bytes": "^5.6.1", "@ethersproject/properties": "^5.6.0" } }, - "@ethersproject/bignumber": { + "node_modules/@ethersproject/bignumber": { "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.6.2.tgz", - "integrity": "sha512-v7+EEUbhGqT3XJ9LMPsKvXYHFc8eHxTowFCG/HgJErmq4XHJ2WR7aeyICg3uTOAQ7Icn0GFHAohXEhxQHq4Ubw==", - "requires": { + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { "@ethersproject/bytes": "^5.6.1", "@ethersproject/logger": "^5.6.0", "bn.js": "^5.2.1" } }, - "@ethersproject/bytes": { + "node_modules/@ethersproject/bytes": { "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.6.1.tgz", - "integrity": "sha512-NwQt7cKn5+ZE4uDn+X5RAXLp46E1chXoaMmrxAyA0rblpxz8t58lVkrHXoRIn0lz1joQElQ8410GqhTqMOwc6g==", - "requires": { + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { "@ethersproject/logger": "^5.6.0" } }, - "@ethersproject/constants": { + "node_modules/@ethersproject/constants": { "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.6.1.tgz", - "integrity": "sha512-QSq9WVnZbxXYFftrjSjZDUshp6/eKp6qrtdBtUCm0QxCV5z1fG/w3kdlcsjMCQuQHUnAclKoK7XpXMezhRDOLg==", - "requires": { + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { "@ethersproject/bignumber": "^5.6.2" } }, - "@ethersproject/contracts": { + "node_modules/@ethersproject/contracts": { "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.6.2.tgz", - "integrity": "sha512-hguUA57BIKi6WY0kHvZp6PwPlWF87MCeB4B7Z7AbUpTxfFXFdn/3b0GmjZPagIHS+3yhcBJDnuEfU4Xz+Ks/8g==", - "requires": { + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { "@ethersproject/abi": "^5.6.3", "@ethersproject/abstract-provider": "^5.6.1", "@ethersproject/abstract-signer": "^5.6.2", @@ -525,11 +784,20 @@ "@ethersproject/transactions": "^5.6.2" } }, - "@ethersproject/hash": { + "node_modules/@ethersproject/hash": { "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.6.1.tgz", - "integrity": "sha512-L1xAHurbaxG8VVul4ankNX5HgQ8PNCTrnVXEiFnE9xoRnaUcgfD12tZINtDinSllxPLCtGwguQxJ5E6keE84pA==", - "requires": { + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { "@ethersproject/abstract-signer": "^5.6.2", "@ethersproject/address": "^5.6.1", "@ethersproject/bignumber": "^5.6.2", @@ -540,11 +808,20 @@ "@ethersproject/strings": "^5.6.1" } }, - "@ethersproject/hdnode": { + "node_modules/@ethersproject/hdnode": { "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.6.2.tgz", - "integrity": "sha512-tERxW8Ccf9CxW2db3WsN01Qao3wFeRsfYY9TCuhmG0xNpl2IO8wgXU3HtWIZ49gUWPggRy4Yg5axU0ACaEKf1Q==", - "requires": { + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { "@ethersproject/abstract-signer": "^5.6.2", "@ethersproject/basex": "^5.6.1", "@ethersproject/bignumber": "^5.6.2", @@ -559,11 +836,20 @@ "@ethersproject/wordlists": "^5.6.1" } }, - "@ethersproject/json-wallets": { + "node_modules/@ethersproject/json-wallets": { "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.6.1.tgz", - "integrity": "sha512-KfyJ6Zwz3kGeX25nLihPwZYlDqamO6pfGKNnVMWWfEVVp42lTfCZVXXy5Ie8IZTN0HKwAngpIPi7gk4IJzgmqQ==", - "requires": { + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { "@ethersproject/abstract-signer": "^5.6.2", "@ethersproject/address": "^5.6.1", "@ethersproject/bytes": "^5.6.1", @@ -579,50 +865,104 @@ "scrypt-js": "3.0.1" } }, - "@ethersproject/keccak256": { + "node_modules/@ethersproject/keccak256": { "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.6.1.tgz", - "integrity": "sha512-bB7DQHCTRDooZZdL3lk9wpL0+XuG3XLGHLh3cePnybsO3V0rdCAOQGpn/0R3aODmnTOOkCATJiD2hnL+5bwthA==", - "requires": { + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { "@ethersproject/bytes": "^5.6.1", "js-sha3": "0.8.0" } }, - "@ethersproject/logger": { + "node_modules/@ethersproject/logger": { "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.6.0.tgz", - "integrity": "sha512-BiBWllUROH9w+P21RzoxJKzqoqpkyM1pRnEKG69bulE9TSQD8SAIvTQqIMZmmCO8pUNkgLP1wndX1gKghSpBmg==" + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT" }, - "@ethersproject/networks": { + "node_modules/@ethersproject/networks": { "version": "5.6.4", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.6.4.tgz", - "integrity": "sha512-KShHeHPahHI2UlWdtDMn2lJETcbtaJge4k7XSjDR9h79QTd6yQJmv6Cp2ZA4JdqWnhszAOLSuJEd9C0PRw7hSQ==", - "requires": { + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { "@ethersproject/logger": "^5.6.0" } }, - "@ethersproject/pbkdf2": { + "node_modules/@ethersproject/pbkdf2": { "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.6.1.tgz", - "integrity": "sha512-k4gRQ+D93zDRPNUfmduNKq065uadC2YjMP/CqwwX5qG6R05f47boq6pLZtV/RnC4NZAYOPH1Cyo54q0c9sshRQ==", - "requires": { + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { "@ethersproject/bytes": "^5.6.1", "@ethersproject/sha2": "^5.6.1" } }, - "@ethersproject/properties": { + "node_modules/@ethersproject/properties": { "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.6.0.tgz", - "integrity": "sha512-szoOkHskajKePTJSZ46uHUWWkbv7TzP2ypdEK6jGMqJaEt2sb0jCgfBo0gH0m2HBpRixMuJ6TBRaQCF7a9DoCg==", - "requires": { + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { "@ethersproject/logger": "^5.6.0" } }, - "@ethersproject/providers": { + "node_modules/@ethersproject/providers": { "version": "5.6.8", - "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.6.8.tgz", - "integrity": "sha512-Wf+CseT/iOJjrGtAOf3ck9zS7AgPmr2fZ3N97r4+YXN3mBePTG2/bJ8DApl9mVwYL+RpYbNxMEkEp4mPGdwG/w==", - "requires": { + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { "@ethersproject/abstract-provider": "^5.6.1", "@ethersproject/abstract-signer": "^5.6.2", "@ethersproject/address": "^5.6.1", @@ -645,39 +985,75 @@ "ws": "7.4.6" } }, - "@ethersproject/random": { + "node_modules/@ethersproject/random": { "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.6.1.tgz", - "integrity": "sha512-/wtPNHwbmng+5yi3fkipA8YBT59DdkGRoC2vWk09Dci/q5DlgnMkhIycjHlavrvrjJBkFjO/ueLyT+aUDfc4lA==", - "requires": { + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { "@ethersproject/bytes": "^5.6.1", "@ethersproject/logger": "^5.6.0" } }, - "@ethersproject/rlp": { + "node_modules/@ethersproject/rlp": { "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.6.1.tgz", - "integrity": "sha512-uYjmcZx+DKlFUk7a5/W9aQVaoEC7+1MOBgNtvNg13+RnuUwT4F0zTovC0tmay5SmRslb29V1B7Y5KCri46WhuQ==", - "requires": { + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { "@ethersproject/bytes": "^5.6.1", "@ethersproject/logger": "^5.6.0" } }, - "@ethersproject/sha2": { + "node_modules/@ethersproject/sha2": { "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.6.1.tgz", - "integrity": "sha512-5K2GyqcW7G4Yo3uenHegbXRPDgARpWUiXc6RiF7b6i/HXUoWlb7uCARh7BAHg7/qT/Q5ydofNwiZcim9qpjB6g==", - "requires": { + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { "@ethersproject/bytes": "^5.6.1", "@ethersproject/logger": "^5.6.0", "hash.js": "1.1.7" } }, - "@ethersproject/signing-key": { + "node_modules/@ethersproject/signing-key": { "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.6.2.tgz", - "integrity": "sha512-jVbu0RuP7EFpw82vHcL+GP35+KaNruVAZM90GxgQnGqB6crhBqW/ozBfFvdeImtmb4qPko0uxXjn8l9jpn0cwQ==", - "requires": { + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { "@ethersproject/bytes": "^5.6.1", "@ethersproject/logger": "^5.6.0", "@ethersproject/properties": "^5.6.0", @@ -686,11 +1062,20 @@ "hash.js": "1.1.7" } }, - "@ethersproject/solidity": { + "node_modules/@ethersproject/solidity": { "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.6.1.tgz", - "integrity": "sha512-KWqVLkUUoLBfL1iwdzUVlkNqAUIFMpbbeH0rgCfKmJp0vFtY4AsaN91gHKo9ZZLkC4UOm3cI3BmMV4N53BOq4g==", - "requires": { + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { "@ethersproject/bignumber": "^5.6.2", "@ethersproject/bytes": "^5.6.1", "@ethersproject/keccak256": "^5.6.1", @@ -699,21 +1084,39 @@ "@ethersproject/strings": "^5.6.1" } }, - "@ethersproject/strings": { + "node_modules/@ethersproject/strings": { "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.6.1.tgz", - "integrity": "sha512-2X1Lgk6Jyfg26MUnsHiT456U9ijxKUybz8IM1Vih+NJxYtXhmvKBcHOmvGqpFSVJ0nQ4ZCoIViR8XlRw1v/+Cw==", - "requires": { + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { "@ethersproject/bytes": "^5.6.1", "@ethersproject/constants": "^5.6.1", "@ethersproject/logger": "^5.6.0" } }, - "@ethersproject/transactions": { + "node_modules/@ethersproject/transactions": { "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.6.2.tgz", - "integrity": "sha512-BuV63IRPHmJvthNkkt9G70Ullx6AcM+SDc+a8Aw/8Yew6YwT51TcBKEp1P4oOQ/bP25I18JJr7rcFRgFtU9B2Q==", - "requires": { + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { "@ethersproject/address": "^5.6.1", "@ethersproject/bignumber": "^5.6.2", "@ethersproject/bytes": "^5.6.1", @@ -725,21 +1128,39 @@ "@ethersproject/signing-key": "^5.6.2" } }, - "@ethersproject/units": { + "node_modules/@ethersproject/units": { "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.6.1.tgz", - "integrity": "sha512-rEfSEvMQ7obcx3KWD5EWWx77gqv54K6BKiZzKxkQJqtpriVsICrktIQmKl8ReNToPeIYPnFHpXvKpi068YFZXw==", - "requires": { + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { "@ethersproject/bignumber": "^5.6.2", "@ethersproject/constants": "^5.6.1", "@ethersproject/logger": "^5.6.0" } }, - "@ethersproject/wallet": { + "node_modules/@ethersproject/wallet": { "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.6.2.tgz", - "integrity": "sha512-lrgh0FDQPuOnHcF80Q3gHYsSUODp6aJLAdDmDV0xKCN/T7D99ta1jGVhulg3PY8wiXEngD0DfM0I2XKXlrqJfg==", - "requires": { + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { "@ethersproject/abstract-provider": "^5.6.1", "@ethersproject/abstract-signer": "^5.6.2", "@ethersproject/address": "^5.6.1", @@ -757,11 +1178,20 @@ "@ethersproject/wordlists": "^5.6.1" } }, - "@ethersproject/web": { + "node_modules/@ethersproject/web": { "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.6.1.tgz", - "integrity": "sha512-/vSyzaQlNXkO1WV+RneYKqCJwualcUdx/Z3gseVovZP0wIlOFcCE1hkRhKBH8ImKbGQbMl9EAAyJFrJu7V0aqA==", - "requires": { + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { "@ethersproject/base64": "^5.6.1", "@ethersproject/bytes": "^5.6.1", "@ethersproject/logger": "^5.6.0", @@ -769,11 +1199,20 @@ "@ethersproject/strings": "^5.6.1" } }, - "@ethersproject/wordlists": { + "node_modules/@ethersproject/wordlists": { "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.6.1.tgz", - "integrity": "sha512-wiPRgBpNbNwCQFoCr8bcWO8o5I810cqO6mkdtKfLKFlLxeCWcnzDi4Alu8iyNzlhYuS9npCwivMbRWF19dyblw==", - "requires": { + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { "@ethersproject/bytes": "^5.6.1", "@ethersproject/hash": "^5.6.1", "@ethersproject/logger": "^5.6.0", @@ -781,90 +1220,101 @@ "@ethersproject/strings": "^5.6.1" } }, - "@humanwhocodes/config-array": { + "node_modules/@humanwhocodes/config-array": { "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", - "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", "dev": true, - "requires": { + "license": "Apache-2.0", + "dependencies": { "@humanwhocodes/object-schema": "^1.2.0", "debug": "^4.1.1", "minimatch": "^3.0.4" }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/debug": { + "version": "4.3.4", + "dev": true, + "license": "MIT", "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true } } }, - "@humanwhocodes/object-schema": { + "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { + "version": "3.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/ms": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/@humanwhocodes/object-schema": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, - "@jridgewell/gen-mapping": { + "node_modules/@jridgewell/gen-mapping": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "requires": { + "license": "MIT", + "dependencies": { "@jridgewell/set-array": "^1.0.0", "@jridgewell/sourcemap-codec": "^1.4.10" + }, + "engines": { + "node": ">=6.0.0" } }, - "@jridgewell/resolve-uri": { + "node_modules/@jridgewell/resolve-uri": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } }, - "@jridgewell/set-array": { + "node_modules/@jridgewell/set-array": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } }, - "@jridgewell/sourcemap-codec": { + "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" + "license": "MIT" }, - "@jridgewell/trace-mapping": { + "node_modules/@jridgewell/trace-mapping": { "version": "0.3.14", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", - "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", - "requires": { + "license": "MIT", + "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" } }, - "@pixiv/three-vrm": { - "version": "file:packages/three-vrm" + "node_modules/@pixiv/three-vrm": { + "resolved": "packages/three-vrm", + "link": true }, - "@react-three/fiber": { + "node_modules/@react-three/fiber": { "version": "7.0.29", - "resolved": "https://registry.npmjs.org/@react-three/fiber/-/fiber-7.0.29.tgz", - "integrity": "sha512-TE+/iaGrjluGsPwN2RkLXxKD4ak+unsh0YKIFKGcuAOW9jYcAyMGKAtgFO8MS7/HNCrZZQQSg23sJ8IPgtdkDg==", - "requires": { + "license": "MIT", + "dependencies": { "@babel/runtime": "^7.13.10", "@types/react-reconciler": "^0.26.2", "react-merge-refs": "^1.1.0", @@ -876,232 +1326,265 @@ "use-asset": "^1.0.4", "utility-types": "^3.10.0", "zustand": "^3.5.1" + }, + "peerDependencies": { + "react": ">=17.0", + "react-dom": ">=17.0", + "three": ">=0.133" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + } } }, - "@rollup/pluginutils": { + "node_modules/@rollup/pluginutils": { "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", - "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "estree-walker": "^2.0.1", "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" } }, - "@shaderfrog/glsl-parser": { + "node_modules/@shaderfrog/glsl-parser": { "version": "0.1.23", - "resolved": "https://registry.npmjs.org/@shaderfrog/glsl-parser/-/glsl-parser-0.1.23.tgz", - "integrity": "sha512-VPXA4Wm1FYtwq+Nu3yCpyFTuI40Vy3rAulLBXfVxpHH6ads4NGd9OCwufSEY6nasfCV2jZjguLWRN9zA2J1dqQ==" + "license": "ISC", + "engines": { + "node": ">=16" + } }, - "@types/json5": { + "node_modules/@types/json5": { "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true + "dev": true, + "license": "MIT" }, - "@types/prop-types": { + "node_modules/@types/prop-types": { "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" + "license": "MIT" }, - "@types/react": { + "node_modules/@types/react": { "version": "18.0.15", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.15.tgz", - "integrity": "sha512-iz3BtLuIYH1uWdsv6wXYdhozhqj20oD4/Hk2DNXIn1kFsmp9x8d9QB6FnPhfkbhd2PgEONt9Q1x/ebkwjfFLow==", - "requires": { + "license": "MIT", + "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", "csstype": "^3.0.2" } }, - "@types/react-reconciler": { + "node_modules/@types/react-reconciler": { "version": "0.26.7", - "resolved": "https://registry.npmjs.org/@types/react-reconciler/-/react-reconciler-0.26.7.tgz", - "integrity": "sha512-mBDYl8x+oyPX/VBb3E638N0B7xG+SPk/EAMcVPeexqus/5aTpTphQi0curhhshOqRrc9t6OPoJfEUkbymse/lQ==", - "requires": { + "license": "MIT", + "dependencies": { "@types/react": "*" } }, - "@types/scheduler": { + "node_modules/@types/scheduler": { "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" + "license": "MIT" }, - "@ungap/promise-all-settled": { + "node_modules/@ungap/promise-all-settled": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==" + "license": "ISC" }, - "@vitejs/plugin-react-refresh": { + "node_modules/@vitejs/plugin-react-refresh": { "version": "1.3.6", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react-refresh/-/plugin-react-refresh-1.3.6.tgz", - "integrity": "sha512-iNR/UqhUOmFFxiezt0em9CgmiJBdWR+5jGxB2FihaoJfqGt76kiwaKoVOJVU5NYcDWMdN06LbyN2VIGIoYdsEA==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "@babel/core": "^7.14.8", "@babel/plugin-transform-react-jsx-self": "^7.14.5", "@babel/plugin-transform-react-jsx-source": "^7.14.5", "@rollup/pluginutils": "^4.1.1", "react-refresh": "^0.10.0" + }, + "engines": { + "node": ">=12.0.0" } }, - "abab": { + "node_modules/abab": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==" + "license": "BSD-3-Clause" }, - "accepts": { + "node_modules/accepts": { "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "requires": { + "license": "MIT", + "dependencies": { "mime-types": "~2.1.34", "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" } }, - "acorn": { + "node_modules/acorn": { "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } }, - "acorn-jsx": { + "node_modules/acorn-jsx": { "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } }, - "aes-js": { + "node_modules/aes-js": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", - "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==" + "license": "MIT" }, - "ajv": { + "node_modules/ajv": { "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "alea": { + "node_modules/alea": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/alea/-/alea-1.0.1.tgz", - "integrity": "sha512-QU+wv+ziDXaMxRdsQg/aH7sVfWdhKps5YP97IIwFkHCsbDZA3k87JXoZ5/iuemf4ntytzIWeScrRpae8+lDrXA==" + "license": "MIT" }, - "ansi-colors": { + "node_modules/ansi-colors": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==" + "license": "MIT", + "engines": { + "node": ">=6" + } }, - "ansi-regex": { + "node_modules/ansi-regex": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "ansi-styles": { + "node_modules/ansi-styles": { "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { + "license": "MIT", + "dependencies": { "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" } }, - "anymatch": { + "node_modules/anymatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "requires": { + "license": "ISC", + "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" } }, - "argparse": { + "node_modules/argparse": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + "license": "Python-2.0" }, - "array-flatten": { + "node_modules/array-flatten": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + "license": "MIT" }, - "array-includes": { + "node_modules/array-includes": { "version": "3.1.5", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.5.tgz", - "integrity": "sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", "es-abstract": "^1.19.5", "get-intrinsic": "^1.1.1", "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "array.prototype.flat": { + "node_modules/array.prototype.flat": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz", - "integrity": "sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", "es-abstract": "^1.19.2", "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "astral-regex": { + "node_modules/astral-regex": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "axios": { + "node_modules/axios": { "version": "0.21.4", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", - "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", - "requires": { + "license": "MIT", + "dependencies": { "follow-redirects": "^1.14.0" } }, - "balanced-match": { + "node_modules/balanced-match": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "license": "MIT" }, - "bech32": { + "node_modules/bech32": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", - "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" + "license": "MIT" }, - "bidi-js": { + "node_modules/bidi-js": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bidi-js/-/bidi-js-1.0.2.tgz", - "integrity": "sha512-rzSy/k7WdX5zOyeHHCOixGXbCHkyogkxPKL2r8QtzHmVQDiWCXUWa18bLdMWT9CYMLOYTjWpTHawuev2ouYJVw==", - "requires": { + "license": "MIT", + "dependencies": { "require-from-string": "^2.0.2" } }, - "binary-extensions": { + "node_modules/binary-extensions": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "bn.js": { + "node_modules/bn.js": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + "license": "MIT" }, - "body-parser": { + "node_modules/body-parser": { "version": "1.20.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", - "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", - "requires": { + "license": "MIT", + "dependencies": { "bytes": "3.1.2", "content-type": "~1.0.4", "debug": "2.6.9", @@ -1114,276 +1597,340 @@ "raw-body": "2.5.1", "type-is": "~1.6.18", "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, - "brace-expansion": { + "node_modules/brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { + "license": "MIT", + "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, - "braces": { + "node_modules/braces": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "requires": { + "license": "MIT", + "dependencies": { "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" } }, - "brorand": { + "node_modules/brorand": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" + "license": "MIT" }, - "browser-stdout": { + "node_modules/browser-stdout": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==" - }, - "browserslist": { - "version": "4.21.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.1.tgz", - "integrity": "sha512-Nq8MFCSrnJXSc88yliwlzQe3qNe3VntIjhsArW9IJOEPSHNx23FalwApUVbzAWABLhYJJ7y8AynWI/XM8OdfjQ==", - "requires": { - "caniuse-lite": "^1.0.30001359", - "electron-to-chromium": "^1.4.172", - "node-releases": "^2.0.5", - "update-browserslist-db": "^1.0.4" + "license": "ISC" + }, + "node_modules/browserslist": { + "version": "4.21.3", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001370", + "electron-to-chromium": "^1.4.202", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.5" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "bytes": { + "node_modules/bytes": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" + "license": "MIT", + "engines": { + "node": ">= 0.8" + } }, - "call-bind": { + "node_modules/call-bind": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "requires": { + "license": "MIT", + "dependencies": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "callsites": { + "node_modules/callsites": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } }, - "camelcase": { + "node_modules/camelcase": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==" + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "caniuse-lite": { - "version": "1.0.30001365", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001365.tgz", - "integrity": "sha512-VDQZ8OtpuIPMBA4YYvZXECtXbddMCUFJk1qu8Mqxfm/SZJNSr1cy4IuLCOL7RJ/YASrvJcYg1Zh+UEUQ5m6z8Q==" + "node_modules/caniuse-lite": { + "version": "1.0.30001374", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + } + ], + "license": "CC-BY-4.0" }, - "chalk": { + "node_modules/chalk": { "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { + "license": "MIT", + "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" } }, - "chokidar": { + "node_modules/chokidar": { "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "requires": { + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT", + "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", - "fsevents": "~2.3.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "classnames": { + "node_modules/classnames": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.1.tgz", - "integrity": "sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA==" + "license": "MIT" }, - "cliui": { + "node_modules/cliui": { "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "requires": { + "license": "ISC", + "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", "wrap-ansi": "^7.0.0" } }, - "color-convert": { + "node_modules/color-convert": { "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { + "license": "MIT", + "dependencies": { "color-name": "1.1.3" } }, - "color-name": { + "node_modules/color-name": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + "license": "MIT" }, - "concat-map": { + "node_modules/concat-map": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + "license": "MIT" }, - "content-disposition": { + "node_modules/content-disposition": { "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "requires": { + "license": "MIT", + "dependencies": { "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" } }, - "content-type": { + "node_modules/content-type": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + "license": "MIT", + "engines": { + "node": ">= 0.6" + } }, - "convert-source-map": { + "node_modules/convert-source-map": { "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "requires": { - "safe-buffer": "~5.1.1" - }, + "license": "MIT", "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - } + "safe-buffer": "~5.1.1" } }, - "cookie": { + "node_modules/convert-source-map/node_modules/safe-buffer": { + "version": "5.1.2", + "license": "MIT" + }, + "node_modules/cookie": { "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" + "license": "MIT", + "engines": { + "node": ">= 0.6" + } }, - "cookie-signature": { + "node_modules/cookie-signature": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + "license": "MIT" }, - "cross-spawn": { + "node_modules/cross-spawn": { "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" } }, - "csstype": { + "node_modules/csstype": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz", - "integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==" + "license": "MIT" }, - "data-urls": { + "node_modules/data-urls": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", - "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", - "requires": { + "license": "MIT", + "dependencies": { "abab": "^2.0.6", "whatwg-mimetype": "^3.0.0", "whatwg-url": "^11.0.0" + }, + "engines": { + "node": ">=12" } }, - "debounce": { + "node_modules/debounce": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", - "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==" + "license": "MIT" }, - "debug": { + "node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { + "license": "MIT", + "dependencies": { "ms": "2.0.0" } }, - "decamelize": { + "node_modules/decamelize": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==" + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "deep-is": { + "node_modules/deep-is": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true + "dev": true, + "license": "MIT" }, - "define-properties": { + "node_modules/define-properties": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "depd": { + "node_modules/depd": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + "license": "MIT", + "engines": { + "node": ">= 0.8" + } }, - "destroy": { + "node_modules/destroy": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } }, - "diff": { + "node_modules/diff": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==" + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } }, - "doctrine": { + "node_modules/doctrine": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, - "requires": { + "license": "Apache-2.0", + "dependencies": { "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" } }, - "dotenv": { + "node_modules/dotenv": { "version": "8.6.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", - "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==" + "license": "BSD-2-Clause", + "engines": { + "node": ">=10" + } }, - "ee-first": { + "node_modules/ee-first": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + "license": "MIT" }, - "electron-to-chromium": { - "version": "1.4.187", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.187.tgz", - "integrity": "sha512-t3iFLHVIMhB8jGZ+8ui951nz6Bna5qKfhxezG3wzXdBJ79qFKPsE2chjjVFNqC1ewhfrPQrw9pmVeo4FFpZeQA==" + "node_modules/electron-to-chromium": { + "version": "1.4.211", + "license": "ISC" }, - "elliptic": { + "node_modules/elliptic": { "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "requires": { + "license": "MIT", + "dependencies": { "bn.js": "^4.11.9", "brorand": "^1.1.0", "hash.js": "^1.0.0", @@ -1391,45 +1938,64 @@ "inherits": "^2.0.4", "minimalistic-assert": "^1.0.1", "minimalistic-crypto-utils": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } } }, - "emoji-regex": { + "node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.0", + "license": "MIT" + }, + "node_modules/emoji-regex": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "license": "MIT" }, - "encodeurl": { + "node_modules/encodeurl": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" + "license": "MIT", + "engines": { + "node": ">= 0.8" + } }, - "encoding-japanese": { + "node_modules/encoding": { + "version": "0.1.13", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/encoding-japanese": { "version": "1.0.30", - "resolved": "https://registry.npmjs.org/encoding-japanese/-/encoding-japanese-1.0.30.tgz", - "integrity": "sha512-bd/DFLAoJetvv7ar/KIpE3CNO8wEuyrt9Xuw6nSMiZ+Vrz/Q21BPsMHvARL2Wz6IKHKXgb+DWZqtRg1vql9cBg==" + "license": "MIT" }, - "enquirer": { + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/enquirer": { "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "ansi-colors": "^4.1.1" + }, + "engines": { + "node": ">=8.6" } }, - "es-abstract": { + "node_modules/es-abstract": { "version": "1.20.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", - "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", @@ -1453,34 +2019,50 @@ "string.prototype.trimend": "^1.0.5", "string.prototype.trimstart": "^1.0.5", "unbox-primitive": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "es-shim-unscopables": { + "node_modules/es-shim-unscopables": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", - "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "has": "^1.0.3" } }, - "es-to-primitive": { + "node_modules/es-to-primitive": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "esbuild": { + "node_modules/esbuild": { "version": "0.14.49", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.49.tgz", - "integrity": "sha512-/TlVHhOaq7Yz8N1OJrjqM3Auzo5wjvHFLk+T8pIue+fhnhIMpfAzsG6PLVMbFveVxqD2WOp3QHei+52IMUNmCw==", "dev": true, - "requires": { + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { "esbuild-android-64": "0.14.49", "esbuild-android-arm64": "0.14.49", "esbuild-darwin-64": "0.14.49", @@ -1503,167 +2085,44 @@ "esbuild-windows-arm64": "0.14.49" } }, - "esbuild-android-64": { - "version": "0.14.49", - "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.49.tgz", - "integrity": "sha512-vYsdOTD+yi+kquhBiFWl3tyxnj2qZJsl4tAqwhT90ktUdnyTizgle7TjNx6Ar1bN7wcwWqZ9QInfdk2WVagSww==", - "dev": true, - "optional": true - }, - "esbuild-android-arm64": { + "node_modules/esbuild-linux-64": { "version": "0.14.49", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.49.tgz", - "integrity": "sha512-g2HGr/hjOXCgSsvQZ1nK4nW/ei8JUx04Li74qub9qWrStlysaVmadRyTVuW32FGIpLQyc5sUjjZopj49eGGM2g==", + "cpu": [ + "x64" + ], "dev": true, - "optional": true - }, - "esbuild-darwin-64": { - "version": "0.14.49", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.49.tgz", - "integrity": "sha512-3rvqnBCtX9ywso5fCHixt2GBCUsogNp9DjGmvbBohh31Ces34BVzFltMSxJpacNki96+WIcX5s/vum+ckXiLYg==", - "dev": true, - "optional": true - }, - "esbuild-darwin-arm64": { - "version": "0.14.49", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.49.tgz", - "integrity": "sha512-XMaqDxO846srnGlUSJnwbijV29MTKUATmOLyQSfswbK/2X5Uv28M9tTLUJcKKxzoo9lnkYPsx2o8EJcTYwCs/A==", - "dev": true, - "optional": true - }, - "esbuild-freebsd-64": { - "version": "0.14.49", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.49.tgz", - "integrity": "sha512-NJ5Q6AjV879mOHFri+5lZLTp5XsO2hQ+KSJYLbfY9DgCu8s6/Zl2prWXVANYTeCDLlrIlNNYw8y34xqyLDKOmQ==", - "dev": true, - "optional": true + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } }, - "esbuild-freebsd-arm64": { - "version": "0.14.49", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.49.tgz", - "integrity": "sha512-lFLtgXnAc3eXYqj5koPlBZvEbBSOSUbWO3gyY/0+4lBdRqELyz4bAuamHvmvHW5swJYL7kngzIZw6kdu25KGOA==", - "dev": true, - "optional": true + "node_modules/escalade": { + "version": "3.1.1", + "license": "MIT", + "engines": { + "node": ">=6" + } }, - "esbuild-linux-32": { - "version": "0.14.49", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.49.tgz", - "integrity": "sha512-zTTH4gr2Kb8u4QcOpTDVn7Z8q7QEIvFl/+vHrI3cF6XOJS7iEI1FWslTo3uofB2+mn6sIJEQD9PrNZKoAAMDiA==", - "dev": true, - "optional": true + "node_modules/escape-html": { + "version": "1.0.3", + "license": "MIT" }, - "esbuild-linux-64": { - "version": "0.14.49", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.49.tgz", - "integrity": "sha512-hYmzRIDzFfLrB5c1SknkxzM8LdEUOusp6M2TnuQZJLRtxTgyPnZZVtyMeCLki0wKgYPXkFsAVhi8vzo2mBNeTg==", - "dev": true, - "optional": true + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } }, - "esbuild-linux-arm": { - "version": "0.14.49", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.49.tgz", - "integrity": "sha512-iE3e+ZVv1Qz1Sy0gifIsarJMQ89Rpm9mtLSRtG3AH0FPgAzQ5Z5oU6vYzhc/3gSPi2UxdCOfRhw2onXuFw/0lg==", + "node_modules/eslint": { + "version": "7.32.0", "dev": true, - "optional": true - }, - "esbuild-linux-arm64": { - "version": "0.14.49", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.49.tgz", - "integrity": "sha512-KLQ+WpeuY+7bxukxLz5VgkAAVQxUv67Ft4DmHIPIW+2w3ObBPQhqNoeQUHxopoW/aiOn3m99NSmSV+bs4BSsdA==", - "dev": true, - "optional": true - }, - "esbuild-linux-mips64le": { - "version": "0.14.49", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.49.tgz", - "integrity": "sha512-n+rGODfm8RSum5pFIqFQVQpYBw+AztL8s6o9kfx7tjfK0yIGF6tm5HlG6aRjodiiKkH2xAiIM+U4xtQVZYU4rA==", - "dev": true, - "optional": true - }, - "esbuild-linux-ppc64le": { - "version": "0.14.49", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.49.tgz", - "integrity": "sha512-WP9zR4HX6iCBmMFH+XHHng2LmdoIeUmBpL4aL2TR8ruzXyT4dWrJ5BSbT8iNo6THN8lod6GOmYDLq/dgZLalGw==", - "dev": true, - "optional": true - }, - "esbuild-linux-riscv64": { - "version": "0.14.49", - "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.49.tgz", - "integrity": "sha512-h66ORBz+Dg+1KgLvzTVQEA1LX4XBd1SK0Fgbhhw4akpG/YkN8pS6OzYI/7SGENiN6ao5hETRDSkVcvU9NRtkMQ==", - "dev": true, - "optional": true - }, - "esbuild-linux-s390x": { - "version": "0.14.49", - "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.49.tgz", - "integrity": "sha512-DhrUoFVWD+XmKO1y7e4kNCqQHPs6twz6VV6Uezl/XHYGzM60rBewBF5jlZjG0nCk5W/Xy6y1xWeopkrhFFM0sQ==", - "dev": true, - "optional": true - }, - "esbuild-netbsd-64": { - "version": "0.14.49", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.49.tgz", - "integrity": "sha512-BXaUwFOfCy2T+hABtiPUIpWjAeWK9P8O41gR4Pg73hpzoygVGnj0nI3YK4SJhe52ELgtdgWP/ckIkbn2XaTxjQ==", - "dev": true, - "optional": true - }, - "esbuild-openbsd-64": { - "version": "0.14.49", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.49.tgz", - "integrity": "sha512-lP06UQeLDGmVPw9Rg437Btu6J9/BmyhdoefnQ4gDEJTtJvKtQaUcOQrhjTq455ouZN4EHFH1h28WOJVANK41kA==", - "dev": true, - "optional": true - }, - "esbuild-sunos-64": { - "version": "0.14.49", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.49.tgz", - "integrity": "sha512-4c8Zowp+V3zIWje329BeLbGh6XI9c/rqARNaj5yPHdC61pHI9UNdDxT3rePPJeWcEZVKjkiAS6AP6kiITp7FSw==", - "dev": true, - "optional": true - }, - "esbuild-windows-32": { - "version": "0.14.49", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.49.tgz", - "integrity": "sha512-q7Rb+J9yHTeKr9QTPDYkqfkEj8/kcKz9lOabDuvEXpXuIcosWCJgo5Z7h/L4r7rbtTH4a8U2FGKb6s1eeOHmJA==", - "dev": true, - "optional": true - }, - "esbuild-windows-64": { - "version": "0.14.49", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.49.tgz", - "integrity": "sha512-+Cme7Ongv0UIUTniPqfTX6mJ8Deo7VXw9xN0yJEN1lQMHDppTNmKwAM3oGbD/Vqff+07K2gN0WfNkMohmG+dVw==", - "dev": true, - "optional": true - }, - "esbuild-windows-arm64": { - "version": "0.14.49", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.49.tgz", - "integrity": "sha512-v+HYNAXzuANrCbbLFJ5nmO3m5y2PGZWLe3uloAkLt87aXiO2mZr3BTmacZdjwNkNEHuH3bNtN8cak+mzVjVPfA==", - "dev": true, - "optional": true - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" - }, - "eslint": { - "version": "7.32.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", - "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", - "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "@babel/code-frame": "7.12.11", "@eslint/eslintrc": "^0.4.3", "@humanwhocodes/config-array": "^0.5.0", @@ -1705,300 +2164,212 @@ "text-table": "^0.2.0", "v8-compile-cache": "^2.0.3" }, - "dependencies": { - "@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "globals": { - "version": "13.16.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.16.0.tgz", - "integrity": "sha512-A1lrQfpNF+McdPOnnFqY3kSN0AFTy485bTi1bkLk4mVPODIUEcSfhHgRqA+QdXPksrSTTztYXx37NFV+GpGk3Q==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "eslint-config-semistandard": { + "node_modules/eslint-config-semistandard": { "version": "15.0.1", - "resolved": "https://registry.npmjs.org/eslint-config-semistandard/-/eslint-config-semistandard-15.0.1.tgz", - "integrity": "sha512-sfV+qNBWKOmF0kZJll1VH5XqOAdTmLlhbOl9WKI11d2eMEe+Kicxnpm24PQWHOqAfk5pAWU2An0LjNCXKa4Usg==", - "dev": true + "dev": true, + "license": "ISC", + "peerDependencies": { + "eslint": ">=6.0.1", + "eslint-config-standard": ">=14.1.0", + "eslint-plugin-import": ">=2.18.0", + "eslint-plugin-node": ">=9.1.0", + "eslint-plugin-promise": ">=4.2.1", + "eslint-plugin-standard": ">=4.0.0" + } }, - "eslint-config-standard": { + "node_modules/eslint-config-standard": { "version": "14.1.1", - "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-14.1.1.tgz", - "integrity": "sha512-Z9B+VR+JIXRxz21udPTL9HpFMyoMUEeX1G251EQ6e05WD9aPVtVBn09XUmZ259wCMlCDmYDSZG62Hhm+ZTJcUg==", - "dev": true + "dev": true, + "license": "MIT", + "peerDependencies": { + "eslint": ">=6.2.2", + "eslint-plugin-import": ">=2.18.0", + "eslint-plugin-node": ">=9.1.0", + "eslint-plugin-promise": ">=4.2.1", + "eslint-plugin-standard": ">=4.0.0" + } }, - "eslint-import-resolver-node": { + "node_modules/eslint-import-resolver-node": { "version": "0.3.6", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", - "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "debug": "^3.2.7", "resolve": "^1.20.0" - }, + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "dev": true, + "license": "MIT", "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - } + "ms": "^2.1.1" } }, - "eslint-module-utils": { + "node_modules/eslint-import-resolver-node/node_modules/ms": { + "version": "2.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint-module-utils": { "version": "2.7.3", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz", - "integrity": "sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "debug": "^3.2.7", "find-up": "^2.1.0" }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "dev": true, + "license": "MIT", "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true - } + "ms": "^2.1.1" } }, - "eslint-plugin-es": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", - "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", + "node_modules/eslint-module-utils/node_modules/find-up": { + "version": "2.1.0", "dev": true, - "requires": { - "eslint-utils": "^2.0.0", - "regexpp": "^3.0.0" + "license": "MIT", + "dependencies": { + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" } }, - "eslint-plugin-import": { - "version": "2.26.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz", - "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==", + "node_modules/eslint-module-utils/node_modules/locate-path": { + "version": "2.0.0", "dev": true, - "requires": { - "array-includes": "^3.1.4", - "array.prototype.flat": "^1.2.5", - "debug": "^2.6.9", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.3", - "has": "^1.0.3", - "is-core-module": "^2.8.1", - "is-glob": "^4.0.3", + "license": "MIT", + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-module-utils/node_modules/ms": { + "version": "2.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint-module-utils/node_modules/p-limit": { + "version": "1.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-module-utils/node_modules/p-locate": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-module-utils/node_modules/path-exists": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-plugin-es": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-utils": "^2.0.0", + "regexpp": "^3.0.0" + }, + "engines": { + "node": ">=8.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=4.19.1" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.26.0", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.4", + "array.prototype.flat": "^1.2.5", + "debug": "^2.6.9", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-module-utils": "^2.7.3", + "has": "^1.0.3", + "is-core-module": "^2.8.1", + "is-glob": "^4.0.3", "minimatch": "^3.1.2", "object.values": "^1.1.5", "resolve": "^1.22.0", "tsconfig-paths": "^3.14.1" }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" } }, - "eslint-plugin-node": { + "node_modules/eslint-plugin-import/node_modules/minimatch": { + "version": "3.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eslint-plugin-node": { "version": "11.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", - "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "eslint-plugin-es": "^3.0.0", "eslint-utils": "^2.0.0", "ignore": "^5.1.1", @@ -2006,156 +2377,380 @@ "resolve": "^1.10.1", "semver": "^6.1.0" }, + "engines": { + "node": ">=8.10.0" + }, + "peerDependencies": { + "eslint": ">=5.16.0" + } + }, + "node_modules/eslint-plugin-node/node_modules/ignore": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/eslint-plugin-node/node_modules/minimatch": { + "version": "3.1.2", + "dev": true, + "license": "ISC", "dependencies": { - "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, - "eslint-plugin-promise": { + "node_modules/eslint-plugin-promise": { "version": "4.3.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-4.3.1.tgz", - "integrity": "sha512-bY2sGqyptzFBDLh/GMbAxfdJC+b0f23ME63FOE4+Jao0oZ3E1LEwFtWJX/1pGMJLiTtrSSern2CRM/g+dfc0eQ==", - "dev": true + "dev": true, + "license": "ISC", + "engines": { + "node": ">=6" + } }, - "eslint-plugin-standard": { + "node_modules/eslint-plugin-standard": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-4.1.0.tgz", - "integrity": "sha512-ZL7+QRixjTR6/528YNGyDotyffm5OQst/sGxKDwGb9Uqs4In5Egi4+jbobhqJoyoCM6/7v/1A5fhQ7ScMtDjaQ==", - "dev": true + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "peerDependencies": { + "eslint": ">=5.0.0" + } }, - "eslint-scope": { + "node_modules/eslint-scope": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, - "requires": { + "license": "BSD-2-Clause", + "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" } }, - "eslint-utils": { + "node_modules/eslint-utils": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "eslint-visitor-keys": "^1.1.0" }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint/node_modules/@babel/code-frame": { + "version": "7.12.11", + "dev": true, + "license": "MIT", "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true + "@babel/highlight": "^7.10.4" + } + }, + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/eslint/node_modules/argparse": { + "version": "1.0.10", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint/node_modules/debug": { + "version": "4.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true } } }, - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "espree": { + "node_modules/eslint/node_modules/globals": { + "version": "13.16.0", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/js-yaml": { + "version": "3.14.1", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eslint/node_modules/ms": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint/node_modules/semver": { + "version": "7.3.7", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/espree": { "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", "dev": true, - "requires": { + "license": "BSD-2-Clause", + "dependencies": { "acorn": "^7.4.0", "acorn-jsx": "^5.3.1", "eslint-visitor-keys": "^1.3.0" }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - } + "engines": { + "node": "^10.12.0 || >=12.0.0" } }, - "esprima": { + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=4" + } + }, + "node_modules/esprima": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true + "dev": true, + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } }, - "esquery": { + "node_modules/esquery": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", "dev": true, - "requires": { + "license": "BSD-3-Clause", + "dependencies": { "estraverse": "^5.1.0" }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } + "engines": { + "node": ">=0.10" } }, - "esrecurse": { + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, - "requires": { + "license": "BSD-2-Clause", + "dependencies": { "estraverse": "^5.2.0" }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } + "engines": { + "node": ">=4.0" } }, - "estraverse": { + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } }, - "estree-walker": { + "node_modules/estree-walker": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true + "dev": true, + "license": "MIT" }, - "esutils": { + "node_modules/esutils": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } }, - "etag": { + "node_modules/etag": { "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" + "license": "MIT", + "engines": { + "node": ">= 0.6" + } }, - "ethers": { + "node_modules/ethers": { "version": "5.6.9", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.6.9.tgz", - "integrity": "sha512-lMGC2zv9HC5EC+8r429WaWu3uWJUCgUCt8xxKCFqkrFuBDZXDYIdzDUECxzjf2BMF8IVBByY1EBoGSL3RTm8RA==", - "requires": { + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { "@ethersproject/abi": "5.6.4", "@ethersproject/abstract-provider": "5.6.1", "@ethersproject/abstract-signer": "5.6.2", @@ -2188,11 +2783,10 @@ "@ethersproject/wordlists": "5.6.1" } }, - "express": { + "node_modules/express": { "version": "4.18.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", - "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", - "requires": { + "license": "MIT", + "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", "body-parser": "1.20.0", @@ -2224,47 +2818,50 @@ "type-is": "~1.6.18", "utils-merge": "1.0.1", "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" } }, - "fast-deep-equal": { + "node_modules/fast-deep-equal": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + "license": "MIT" }, - "fast-json-stable-stringify": { + "node_modules/fast-json-stable-stringify": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true + "dev": true, + "license": "MIT" }, - "fast-levenshtein": { + "node_modules/fast-levenshtein": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true + "dev": true, + "license": "MIT" }, - "file-entry-cache": { + "node_modules/file-entry-cache": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" } }, - "fill-range": { + "node_modules/fill-range": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "requires": { + "license": "MIT", + "dependencies": { "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "finalhandler": { + "node_modules/finalhandler": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "requires": { + "license": "MIT", + "dependencies": { "debug": "2.6.9", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", @@ -2272,128 +2869,164 @@ "parseurl": "~1.3.3", "statuses": "2.0.1", "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" } }, - "find-up": { + "node_modules/find-up": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "requires": { + "license": "MIT", + "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "flat": { + "node_modules/flat": { "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==" + "license": "BSD-3-Clause", + "bin": { + "flat": "cli.js" + } }, - "flat-cache": { + "node_modules/flat-cache": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "flatted": "^3.1.0", "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" } }, - "flatted": { + "node_modules/flatted": { "version": "3.2.6", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz", - "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==", - "dev": true + "dev": true, + "license": "ISC" }, - "follow-redirects": { + "node_modules/follow-redirects": { "version": "1.15.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", - "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==" + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } }, - "forwarded": { + "node_modules/forwarded": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" + "license": "MIT", + "engines": { + "node": ">= 0.6" + } }, - "fresh": { + "node_modules/fresh": { "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" + "license": "MIT", + "engines": { + "node": ">= 0.6" + } }, - "fs.realpath": { + "node_modules/fs.realpath": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "optional": true + "license": "ISC" }, - "function-bind": { + "node_modules/function-bind": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "license": "MIT" }, - "function.prototype.name": { + "node_modules/function.prototype.name": { "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", "es-abstract": "^1.19.0", "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "functional-red-black-tree": { + "node_modules/functional-red-black-tree": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true + "dev": true, + "license": "MIT" }, - "functions-have-names": { + "node_modules/functions-have-names": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "gensync": { + "node_modules/gensync": { "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } }, - "get-caller-file": { + "node_modules/get-caller-file": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } }, - "get-intrinsic": { + "node_modules/get-intrinsic": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", - "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", - "requires": { + "license": "MIT", + "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "get-symbol-description": { + "node_modules/get-symbol-description": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "glob": { + "node_modules/glob": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "requires": { + "license": "ISC", + "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", @@ -2401,585 +3034,702 @@ "once": "^1.3.0", "path-is-absolute": "^1.0.0" }, - "dependencies": { - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "requires": { - "brace-expansion": "^1.1.7" - } - } + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "glob-parent": { + "node_modules/glob-parent": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "requires": { + "license": "ISC", + "dependencies": { "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" } }, - "globals": { + "node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/globals": { "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" + "license": "MIT", + "engines": { + "node": ">=4" + } }, - "gpt-3-encoder": { + "node_modules/gpt-3-encoder": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/gpt-3-encoder/-/gpt-3-encoder-1.1.3.tgz", - "integrity": "sha512-Ep1+I5hQ5VcLF5qKc2FyqvSj2T0Al9LNC0uXNq6Cx0Twl6Gq2RWG7Q5Mo/9Of30xcAegsgemNtuulPEiwanUww==" + "license": "MIT" }, - "growl": { + "node_modules/growl": { "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==" + "license": "MIT", + "engines": { + "node": ">=4.x" + } }, - "has": { + "node_modules/has": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { + "license": "MIT", + "dependencies": { "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" } }, - "has-bigints": { + "node_modules/has-bigints": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "has-flag": { + "node_modules/has-flag": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" + "license": "MIT", + "engines": { + "node": ">=4" + } }, - "has-property-descriptors": { + "node_modules/has-property-descriptors": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "has-symbols": { + "node_modules/has-symbols": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "has-tostringtag": { + "node_modules/has-tostringtag": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "hash.js": { + "node_modules/hash.js": { "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "requires": { + "license": "MIT", + "dependencies": { "inherits": "^2.0.3", "minimalistic-assert": "^1.0.1" } }, - "he": { + "node_modules/he": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" + "license": "MIT", + "bin": { + "he": "bin/he" + } }, - "hmac-drbg": { + "node_modules/hmac-drbg": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", - "requires": { + "license": "MIT", + "dependencies": { "hash.js": "^1.0.3", "minimalistic-assert": "^1.0.0", "minimalistic-crypto-utils": "^1.0.1" } }, - "http-errors": { + "node_modules/http-errors": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "requires": { + "license": "MIT", + "dependencies": { "depd": "2.0.0", "inherits": "2.0.4", "setprototypeof": "1.2.0", "statuses": "2.0.1", "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" } }, - "iconv-lite": { + "node_modules/iconv-lite": { "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { + "license": "MIT", + "dependencies": { "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" } }, - "ignore": { + "node_modules/ignore": { "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } }, - "import-fresh": { + "node_modules/import-fresh": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "imurmurhash": { + "node_modules/imurmurhash": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } }, - "inflight": { + "node_modules/inflight": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "requires": { + "license": "ISC", + "dependencies": { "once": "^1.3.0", "wrappy": "1" } }, - "inherits": { + "node_modules/inherits": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "license": "ISC" }, - "internal-slot": { + "node_modules/internal-slot": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "get-intrinsic": "^1.1.0", "has": "^1.0.3", "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" } }, - "ipaddr.js": { + "node_modules/ipaddr.js": { "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" + "license": "MIT", + "engines": { + "node": ">= 0.10" + } }, - "is-bigint": { + "node_modules/is-bigint": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-binary-path": { + "node_modules/is-binary-path": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "requires": { + "license": "MIT", + "dependencies": { "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" } }, - "is-boolean-object": { + "node_modules/is-boolean-object": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-callable": { + "node_modules/is-callable": { "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", - "dev": true + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "is-core-module": { + "node_modules/is-core-module": { "version": "2.9.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", - "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-date-object": { + "node_modules/is-date-object": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-extglob": { + "node_modules/is-extglob": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } }, - "is-fullwidth-code-point": { + "node_modules/is-fullwidth-code-point": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "is-glob": { + "node_modules/is-glob": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "requires": { + "license": "MIT", + "dependencies": { "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "is-negative-zero": { + "node_modules/is-negative-zero": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "dev": true + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "is-number": { + "node_modules/is-number": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } }, - "is-number-object": { + "node_modules/is-number-object": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-plain-obj": { + "node_modules/is-plain-obj": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==" + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "is-regex": { + "node_modules/is-regex": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-shared-array-buffer": { + "node_modules/is-shared-array-buffer": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-string": { + "node_modules/is-string": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-symbol": { + "node_modules/is-symbol": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-unicode-supported": { + "node_modules/is-unicode-supported": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==" + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "is-weakref": { + "node_modules/is-weakref": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "isexe": { + "node_modules/isexe": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + "license": "ISC" }, - "js-sha3": { + "node_modules/js-sha3": { "version": "0.8.0", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", - "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" + "license": "MIT" }, - "js-tokens": { + "node_modules/js-tokens": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + "license": "MIT" }, - "js-yaml": { + "node_modules/js-yaml": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "requires": { + "license": "MIT", + "dependencies": { "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "jsesc": { + "node_modules/jsesc": { "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } }, - "json-6": { + "node_modules/json-6": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/json-6/-/json-6-1.1.4.tgz", - "integrity": "sha512-ljsNv5ARPvSDpWmjFwja8NjzzEFkOis2OMRtvO5GRtr217DXaQseFYZO6fgVPThPPuaWpOI5/cs/fUCfqQlWiA==" + "license": "MIT", + "bin": { + "json-6": "lib/cli.js" + }, + "engines": { + "node": ">=10.0.0" + } }, - "json-schema-traverse": { + "node_modules/json-schema-traverse": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "dev": true, + "license": "MIT" }, - "json-stable-stringify-without-jsonify": { + "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true + "dev": true, + "license": "MIT" }, - "json5": { + "node_modules/json5": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==" + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } }, - "levn": { + "node_modules/levn": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" } }, - "locate-path": { + "node_modules/locate-path": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "requires": { + "license": "MIT", + "dependencies": { "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "lodash.merge": { + "node_modules/lodash.merge": { "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true + "dev": true, + "license": "MIT" }, - "lodash.truncate": { + "node_modules/lodash.truncate": { "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", - "dev": true + "dev": true, + "license": "MIT" }, - "log-symbols": { + "node_modules/log-symbols": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "requires": { + "license": "MIT", + "dependencies": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "4.3.0", + "license": "MIT", "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "loose-envify": { + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.2", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/color-convert": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/log-symbols/node_modules/color-name": { + "version": "1.1.4", + "license": "MIT" + }, + "node_modules/log-symbols/node_modules/has-flag": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "7.2.0", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/loose-envify": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "requires": { + "license": "MIT", + "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" } }, - "lru-cache": { + "node_modules/lru-cache": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, - "requires": { + "license": "ISC", + "dependencies": { "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" } }, - "maxrects-packer": { + "node_modules/maxrects-packer": { "version": "2.7.3", - "resolved": "https://registry.npmjs.org/maxrects-packer/-/maxrects-packer-2.7.3.tgz", - "integrity": "sha512-bG6qXujJ1QgttZVIH4WDanhoJtvbud/xP/XPyf6A69C9RdA61BM4TomFALCq2nrTa+tARRIBB4LuIFsnUQU2wA==" + "license": "MIT" }, - "media-typer": { + "node_modules/media-typer": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" + "license": "MIT", + "engines": { + "node": ">= 0.6" + } }, - "merge-descriptors": { + "node_modules/merge-descriptors": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + "license": "MIT" }, - "metaversefile": { - "version": "file:packages/totum", - "requires": { - "@babel/core": "^7.15.0", - "@babel/preset-react": "^7.14.5", - "data-urls": "^3.0.1", - "mime-types": "^2.1.32", - "node-fetch": "^2.6.1", - "pako": "^2.0.4", - "unix-path": "^0.2.0" - }, - "dependencies": { - "node-fetch": { - "version": "2.6.6", - "requires": { - "whatwg-url": "^5.0.0" - } - }, - "pako": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pako/-/pako-2.0.4.tgz", - "integrity": "sha512-v8tweI900AUkZN6heMU/4Uy4cXRc2AYNRggVmTR+dEncawDJgCdLMximOVA2p4qO57WMynangsfGRb5WD6L1Bg==" - }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - } - } + "node_modules/metaversefile": { + "resolved": "packages/totum", + "link": true }, - "methods": { + "node_modules/methods": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" + "license": "MIT", + "engines": { + "node": ">= 0.6" + } }, - "mime": { + "node_modules/mime": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } }, - "mime-db": { + "node_modules/mime-db": { "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + "license": "MIT", + "engines": { + "node": ">= 0.6" + } }, - "mime-types": { + "node_modules/mime-types": { "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "requires": { + "license": "MIT", + "dependencies": { "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" } }, - "minimalistic-assert": { + "node_modules/minimalistic-assert": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + "license": "ISC" }, - "minimalistic-crypto-utils": { + "node_modules/minimalistic-crypto-utils": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" + "license": "MIT" }, - "minimatch": { + "node_modules/minimatch": { "version": "4.2.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz", - "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==", - "requires": { + "license": "ISC", + "dependencies": { "brace-expansion": "^1.1.7" + }, + "engines": { + "node": ">=10" } }, - "minimist": { + "node_modules/minimist": { "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true + "dev": true, + "license": "MIT" }, - "mocha": { + "node_modules/mocha": { "version": "9.2.2", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz", - "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==", - "requires": { + "license": "MIT", + "dependencies": { "@ungap/promise-all-settled": "1.1.2", "ansi-colors": "4.1.1", "browser-stdout": "1.3.1", @@ -3005,473 +3755,668 @@ "yargs-parser": "20.2.4", "yargs-unparser": "2.0.0" }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mochajs" + } + }, + "node_modules/mocha/node_modules/debug": { + "version": "4.3.3", + "license": "MIT", "dependencies": { - "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "requires": { - "ms": "2.1.2" - }, - "dependencies": { - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "requires": { - "has-flag": "^4.0.0" - } + "optional": true } } }, - "ms": { + "node_modules/mocha/node_modules/debug/node_modules/ms": { + "version": "2.1.2", + "license": "MIT" + }, + "node_modules/mocha/node_modules/escape-string-regexp": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/has-flag": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/mocha/node_modules/ms": { + "version": "2.1.3", + "license": "MIT" + }, + "node_modules/mocha/node_modules/supports-color": { + "version": "8.1.1", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "license": "MIT" }, - "nanoid": { + "node_modules/nanoid": { "version": "3.3.1", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", - "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==" + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } }, - "natural-compare": { + "node_modules/natural-compare": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true + "dev": true, + "license": "MIT" }, - "negotiator": { + "node_modules/negotiator": { "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" + "license": "MIT", + "engines": { + "node": ">= 0.6" + } }, - "node-releases": { + "node_modules/node-fetch": { + "version": "2.6.7", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-fetch/node_modules/tr46": { + "version": "0.0.3", + "license": "MIT" + }, + "node_modules/node-fetch/node_modules/webidl-conversions": { + "version": "3.0.1", + "license": "BSD-2-Clause" + }, + "node_modules/node-fetch/node_modules/whatwg-url": { + "version": "5.0.0", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/node-releases": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==" + "license": "MIT" }, - "normalize-path": { + "node_modules/normalize-path": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } }, - "object-assign": { + "node_modules/object-assign": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } }, - "object-inspect": { + "node_modules/object-inspect": { "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "object-keys": { + "node_modules/object-keys": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } }, - "object.assign": { + "node_modules/object.assign": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "call-bind": "^1.0.0", "define-properties": "^1.1.3", "has-symbols": "^1.0.1", "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "object.values": { + "node_modules/object.values": { "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", - "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", "es-abstract": "^1.19.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "on-finished": { + "node_modules/on-finished": { "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "requires": { + "license": "MIT", + "dependencies": { "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" } }, - "once": { + "node_modules/once": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "requires": { + "license": "ISC", + "dependencies": { "wrappy": "1" } }, - "openai-api": { + "node_modules/openai-api": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/openai-api/-/openai-api-1.3.1.tgz", - "integrity": "sha512-wKhm/BZS/PyzQRJTdl6kciwL4LpqqyertLYEbbPYDg7ySk1tEywPSBnMio0xdSQaRmdSYVS8VHzJvnwKb9tqkw==", - "requires": { + "license": "ISC", + "dependencies": { "axios": "^0.21.1", "dotenv": "^8.2.0" } }, - "optionator": { + "node_modules/optionator": { "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", "type-check": "^0.4.0", "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" } }, - "p-limit": { + "node_modules/p-limit": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "requires": { + "license": "MIT", + "dependencies": { "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "p-locate": { + "node_modules/p-locate": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "requires": { + "license": "MIT", + "dependencies": { "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "p-try": { + "node_modules/p-try": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", - "dev": true + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } }, - "parent-module": { + "node_modules/parent-module": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, - "parseurl": { + "node_modules/parseurl": { "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + "license": "MIT", + "engines": { + "node": ">= 0.8" + } }, - "path-exists": { + "node_modules/path-exists": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "path-is-absolute": { + "node_modules/path-is-absolute": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } }, - "path-key": { + "node_modules/path-key": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "path-parse": { + "node_modules/path-parse": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true + "dev": true, + "license": "MIT" }, - "path-to-regexp": { + "node_modules/path-to-regexp": { "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + "license": "MIT" }, - "picocolors": { + "node_modules/picocolors": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + "license": "ISC" }, - "picomatch": { + "node_modules/picomatch": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } }, - "postcss": { + "node_modules/postcss": { "version": "8.4.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", - "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", "dev": true, - "requires": { + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + } + ], + "license": "MIT", + "dependencies": { "nanoid": "^3.3.4", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" }, - "dependencies": { - "nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", - "dev": true - } + "engines": { + "node": "^10 || ^12 || >=14" } }, - "prelude-ls": { + "node_modules/postcss/node_modules/nanoid": { + "version": "3.3.4", + "dev": true, + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/prelude-ls": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } }, - "progress": { + "node_modules/progress": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } }, - "proxy-addr": { + "node_modules/proxy-addr": { "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "requires": { + "license": "MIT", + "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" } }, - "punycode": { + "node_modules/punycode": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + "license": "MIT", + "engines": { + "node": ">=6" + } }, - "qs": { + "node_modules/qs": { "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", - "requires": { + "license": "BSD-3-Clause", + "dependencies": { "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "randombytes": { + "node_modules/randombytes": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "requires": { + "license": "MIT", + "dependencies": { "safe-buffer": "^5.1.0" } }, - "range-parser": { + "node_modules/range-parser": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + "license": "MIT", + "engines": { + "node": ">= 0.6" + } }, - "raw-body": { + "node_modules/raw-body": { "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "requires": { + "license": "MIT", + "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", "iconv-lite": "0.4.24", "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" } }, - "react": { + "node_modules/react": { "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", - "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", - "requires": { + "license": "MIT", + "dependencies": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "react-dom": { + "node_modules/react-dom": { "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", - "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", - "requires": { + "license": "MIT", + "dependencies": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", "scheduler": "^0.20.2" + }, + "peerDependencies": { + "react": "17.0.2" } }, - "react-merge-refs": { + "node_modules/react-merge-refs": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/react-merge-refs/-/react-merge-refs-1.1.0.tgz", - "integrity": "sha512-alTKsjEL0dKH/ru1Iyn7vliS2QRcBp9zZPGoWxUOvRGWPUYgjo+V01is7p04It6KhgrzhJGnIj9GgX8W4bZoCQ==" + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } }, - "react-reconciler": { + "node_modules/react-reconciler": { "version": "0.26.2", - "resolved": "https://registry.npmjs.org/react-reconciler/-/react-reconciler-0.26.2.tgz", - "integrity": "sha512-nK6kgY28HwrMNwDnMui3dvm3rCFjZrcGiuwLc5COUipBK5hWHLOxMJhSnSomirqWwjPBJKV1QcbkI0VJr7Gl1Q==", - "requires": { + "license": "MIT", + "dependencies": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", "scheduler": "^0.20.2" + }, + "engines": { + "node": ">=0.10.0" + }, + "peerDependencies": { + "react": "^17.0.2" } }, - "react-refresh": { + "node_modules/react-refresh": { "version": "0.10.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.10.0.tgz", - "integrity": "sha512-PgidR3wST3dDYKr6b4pJoqQFpPGNKDSCDx4cZoshjXipw3LzO7mG1My2pwEzz2JVkF+inx3xRpDeQLFQGH/hsQ==", - "dev": true + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } }, - "react-three-fiber": { + "node_modules/react-three-fiber": { "version": "0.0.0-deprecated", - "resolved": "https://registry.npmjs.org/react-three-fiber/-/react-three-fiber-0.0.0-deprecated.tgz", - "integrity": "sha512-EblIqTAsIpkYeM8bZtC4lcpTE0A2zCEGipFB52RgcQq/q+0oryrk7Sxt+sqhIjUu6xMNEVywV8dr74lz5yWO6A==" + "license": "MIT" }, - "react-use-measure": { + "node_modules/react-use-measure": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/react-use-measure/-/react-use-measure-2.1.1.tgz", - "integrity": "sha512-nocZhN26cproIiIduswYpV5y5lQpSQS1y/4KuvUCjSKmw7ZWIS/+g3aFnX3WdBkyuGUtTLif3UTqnLLhbDoQig==", - "requires": { + "license": "MIT", + "dependencies": { "debounce": "^1.2.1" + }, + "peerDependencies": { + "react": ">=16.13", + "react-dom": ">=16.13" } }, - "readdirp": { + "node_modules/readdirp": { "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "requires": { + "license": "MIT", + "dependencies": { "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" } }, - "regenerator-runtime": { + "node_modules/regenerator-runtime": { "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" + "license": "MIT" }, - "regexp.prototype.flags": { + "node_modules/regexp.prototype.flags": { "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "regexpp": { + "node_modules/regexpp": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } }, - "require-directory": { + "node_modules/require-directory": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } }, - "require-from-string": { + "node_modules/require-from-string": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } }, - "resize-observer-polyfill": { + "node_modules/resize-observer-polyfill": { "version": "1.5.1", - "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", - "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" + "license": "MIT" }, - "resolve": { + "node_modules/resolve": { "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "is-core-module": "^2.9.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "resolve-from": { + "node_modules/resolve-from": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } }, - "rimraf": { + "node_modules/rimraf": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, - "requires": { + "license": "ISC", + "dependencies": { "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "rollup": { + "node_modules/rollup": { "version": "2.76.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.76.0.tgz", - "integrity": "sha512-9jwRIEY1jOzKLj3nsY/yot41r19ITdQrhs+q3ggNWhr9TQgduHqANvPpS32RNpzGklJu3G1AJfvlZLi/6wFgWA==", "dev": true, - "requires": { + "license": "MIT", + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { "fsevents": "~2.3.2" } }, - "safe-buffer": { + "node_modules/safe-buffer": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" }, - "safer-buffer": { + "node_modules/safer-buffer": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "license": "MIT" }, - "scheduler": { + "node_modules/scheduler": { "version": "0.20.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", - "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", - "requires": { + "license": "MIT", + "dependencies": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1" } }, - "scrypt-js": { + "node_modules/scrypt-js": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", - "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" + "license": "MIT" }, - "semver": { + "node_modules/semver": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } }, - "send": { + "node_modules/send": { "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "requires": { + "license": "MIT", + "dependencies": { "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", @@ -3486,308 +4431,36803 @@ "range-parser": "~1.2.1", "statuses": "2.0.1" }, - "dependencies": { - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - } + "engines": { + "node": ">= 0.8.0" } }, - "serialize-javascript": { + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "license": "MIT" + }, + "node_modules/serialize-javascript": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "requires": { + "license": "BSD-3-Clause", + "dependencies": { "randombytes": "^2.1.0" } }, - "serve-static": { + "node_modules/serve-static": { "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "requires": { + "license": "MIT", + "dependencies": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "parseurl": "~1.3.3", "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" } }, - "setprototypeof": { + "node_modules/setprototypeof": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + "license": "ISC" }, - "shebang-command": { + "node_modules/shebang-command": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "shebang-regex": { + "node_modules/shebang-regex": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "side-channel": { + "node_modules/side-channel": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "requires": { + "license": "MIT", + "dependencies": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "slice-ansi": { + "node_modules/slice-ansi": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", "is-fullwidth-code-point": "^3.0.0" }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/slice-ansi/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/smile2emoji": { + "version": "1.1.6", + "license": "MIT" + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/stats.js": { + "version": "0.17.0", + "license": "MIT" + }, + "node_modules/statuses": { + "version": "2.0.1", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/table": { + "version": "6.8.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/table/node_modules/ajv": { + "version": "8.11.0", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/table/node_modules/json-schema-traverse": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/text-table": { + "version": "0.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/three": { + "resolved": "packages/three", + "link": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tr46": { + "version": "3.0.0", + "license": "MIT", + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/troika-three-text": { + "version": "0.43.1-alpha.0", + "license": "MIT", + "dependencies": { + "bidi-js": "^1.0.2", + "troika-three-utils": "^0.43.0", + "troika-worker-utils": "^0.43.0" + }, + "peerDependencies": { + "three": ">=0.103.0" + } + }, + "node_modules/troika-three-utils": { + "version": "0.43.0", + "license": "MIT", + "peerDependencies": { + "three": ">=0.103.0" + } + }, + "node_modules/troika-worker-utils": { + "version": "0.43.0", + "license": "MIT" + }, + "node_modules/tsconfig-paths": { + "version": "3.14.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/unix-path": { + "version": "0.2.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.5", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist-lint": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/use-asset": { + "version": "1.0.4", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "react": ">=17.0" + } + }, + "node_modules/utility-types": { + "version": "3.10.0", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "dev": true, + "license": "MIT" + }, + "node_modules/vary": { + "version": "1.1.2", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vite": { + "version": "2.9.14", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.14.27", + "postcss": "^8.4.13", + "resolve": "^1.22.0", + "rollup": "^2.59.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": ">=12.2.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "less": "*", + "sass": "*", + "stylus": "*" + }, + "peerDependenciesMeta": { + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + } + } + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/webm-writer": { + "version": "1.0.0", + "license": "WTFPL" + }, + "node_modules/whatwg-mimetype": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-url": { + "version": "11.0.0", + "license": "MIT", + "dependencies": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/which": { + "version": "2.0.2", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/workerpool": { + "version": "6.2.0", + "license": "Apache-2.0" + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "license": "MIT" + }, + "node_modules/wrappy": { + "version": "1.0.2", + "license": "ISC" + }, + "node_modules/ws": { + "version": "7.4.6", + "license": "MIT", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/wsrtc": { + "resolved": "packages/wsrtc", + "link": true + }, + "node_modules/xhr2": { + "version": "0.2.1", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/yargs": { + "version": "16.2.0", + "license": "MIT", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.4", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser": { + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zjs": { + "resolved": "packages/zjs", + "link": true + }, + "node_modules/zustand": { + "version": "3.7.2", + "license": "MIT", + "engines": { + "node": ">=12.7.0" + }, + "peerDependencies": { + "react": ">=16.8" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + } + } + }, + "packages/three": { + "version": "0.143.0", + "license": "MIT", + "devDependencies": { + "@babel/core": "^7.18.6", + "@babel/eslint-parser": "^7.18.2", + "@babel/plugin-proposal-class-properties": "^7.18.6", + "@babel/preset-env": "^7.18.6", + "@rollup/plugin-babel": "^5.3.1", + "@rollup/plugin-node-resolve": "^13.3.0", + "chalk": "^5.0.1", + "concurrently": "^7.2.2", + "eslint": "^8.18.0", + "eslint-config-mdcs": "^5.0.0", + "eslint-plugin-compat": "^4.0.2", + "eslint-plugin-html": "^6.2.0", + "eslint-plugin-import": "^2.26.0", + "rollup": "^2.75.7", + "rollup-plugin-filesize": "^9.1.2", + "rollup-plugin-terser": "^7.0.2", + "rollup-plugin-visualizer": "^5.6.0", + "servez": "^1.14.1" + } + }, + "packages/three-vrm": { + "name": "@pixiv/three-vrm", + "version": "0.6.11", + "license": "MIT", + "devDependencies": { + "@rollup/plugin-typescript": "^8.1.1", + "@types/offscreencanvas": "^2019.7.0", + "@types/three": "^0.143.0", + "@typescript-eslint/eslint-plugin": "^4.6.1", + "@typescript-eslint/parser": "^4.6.1", + "cross-env": "^7.0.2", + "downlevel-dts": "^0.7.0", + "eslint": "^7.12.1", + "eslint-config-prettier": "^7.1.0", + "lerna": "^3.22.1", + "lint-staged": "10.5.4", + "prettier": "^2.1.2", + "quicktype": "^15.0.258", + "rimraf": "^3.0.2", + "rollup": "^2.33.1", + "rollup-plugin-serve": "^1.1.0", + "rollup-plugin-string": "^3.0.0", + "rollup-plugin-terser": "^7.0.2", + "tslib": "^2.0.3", + "typedoc": "^0.20.36", + "typescript": "^4.0.5" + } + }, + "packages/three-vrm/node_modules/@babel/code-frame": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/highlight": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "packages/three-vrm/node_modules/@babel/helper-validator-identifier": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "packages/three-vrm/node_modules/@babel/highlight": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "packages/three-vrm/node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "packages/three-vrm/node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/@eslint/eslintrc": { + "version": "0.4.3", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "packages/three-vrm/node_modules/@eslint/eslintrc/node_modules/ignore": { + "version": "4.0.6", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "packages/three-vrm/node_modules/@evocateur/libnpmaccess": { + "version": "3.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "@evocateur/npm-registry-fetch": "^4.0.0", + "aproba": "^2.0.0", + "figgy-pudding": "^3.5.1", + "get-stream": "^4.0.0", + "npm-package-arg": "^6.1.0" + } + }, + "packages/three-vrm/node_modules/@evocateur/libnpmaccess/node_modules/get-stream": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "packages/three-vrm/node_modules/@evocateur/libnpmpublish": { + "version": "1.2.2", + "dev": true, + "license": "ISC", + "dependencies": { + "@evocateur/npm-registry-fetch": "^4.0.0", + "aproba": "^2.0.0", + "figgy-pudding": "^3.5.1", + "get-stream": "^4.0.0", + "lodash.clonedeep": "^4.5.0", + "normalize-package-data": "^2.4.0", + "npm-package-arg": "^6.1.0", + "semver": "^5.5.1", + "ssri": "^6.0.1" + } + }, + "packages/three-vrm/node_modules/@evocateur/libnpmpublish/node_modules/get-stream": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "packages/three-vrm/node_modules/@evocateur/npm-registry-fetch": { + "version": "4.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "bluebird": "^3.5.1", + "figgy-pudding": "^3.4.1", + "JSONStream": "^1.3.4", + "lru-cache": "^5.1.1", + "make-fetch-happen": "^5.0.0", + "npm-package-arg": "^6.1.0", + "safe-buffer": "^5.1.2" + } + }, + "packages/three-vrm/node_modules/@evocateur/pacote": { + "version": "9.6.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@evocateur/npm-registry-fetch": "^4.0.0", + "bluebird": "^3.5.3", + "cacache": "^12.0.3", + "chownr": "^1.1.2", + "figgy-pudding": "^3.5.1", + "get-stream": "^4.1.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^5.1.1", + "make-fetch-happen": "^5.0.0", + "minimatch": "^3.0.4", + "minipass": "^2.3.5", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "normalize-package-data": "^2.5.0", + "npm-package-arg": "^6.1.0", + "npm-packlist": "^1.4.4", + "npm-pick-manifest": "^3.0.0", + "osenv": "^0.1.5", + "promise-inflight": "^1.0.1", + "promise-retry": "^1.1.1", + "protoduck": "^5.0.1", + "rimraf": "^2.6.3", + "safe-buffer": "^5.2.0", + "semver": "^5.7.0", + "ssri": "^6.0.1", + "tar": "^4.4.10", + "unique-filename": "^1.1.1", + "which": "^1.3.1" + } + }, + "packages/three-vrm/node_modules/@evocateur/pacote/node_modules/get-stream": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "packages/three-vrm/node_modules/@evocateur/pacote/node_modules/rimraf": { + "version": "2.7.1", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "packages/three-vrm/node_modules/@evocateur/pacote/node_modules/safe-buffer": { + "version": "5.2.1", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "packages/three-vrm/node_modules/@evocateur/pacote/node_modules/which": { + "version": "1.3.1", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "packages/three-vrm/node_modules/@humanwhocodes/config-array": { + "version": "0.5.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "packages/three-vrm/node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "dev": true, + "license": "BSD-3-Clause" + }, + "packages/three-vrm/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "packages/three-vrm/node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "packages/three-vrm/node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "packages/three-vrm/node_modules/@jridgewell/source-map": { + "version": "0.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "packages/three-vrm/node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.14", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "packages/three-vrm/node_modules/@lerna/add": { + "version": "3.21.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@evocateur/pacote": "^9.6.3", + "@lerna/bootstrap": "3.21.0", + "@lerna/command": "3.21.0", + "@lerna/filter-options": "3.20.0", + "@lerna/npm-conf": "3.16.0", + "@lerna/validation-error": "3.13.0", + "dedent": "^0.7.0", + "npm-package-arg": "^6.1.0", + "p-map": "^2.1.0", + "semver": "^6.2.0" + }, + "engines": { + "node": ">= 6.9.0" + } + }, + "packages/three-vrm/node_modules/@lerna/add/node_modules/p-map": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "packages/three-vrm/node_modules/@lerna/add/node_modules/semver": { + "version": "6.3.0", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "packages/three-vrm/node_modules/@lerna/bootstrap": { + "version": "3.21.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/command": "3.21.0", + "@lerna/filter-options": "3.20.0", + "@lerna/has-npm-version": "3.16.5", + "@lerna/npm-install": "3.16.5", + "@lerna/package-graph": "3.18.5", + "@lerna/pulse-till-done": "3.13.0", + "@lerna/rimraf-dir": "3.16.5", + "@lerna/run-lifecycle": "3.16.2", + "@lerna/run-topologically": "3.18.5", + "@lerna/symlink-binary": "3.17.0", + "@lerna/symlink-dependencies": "3.17.0", + "@lerna/validation-error": "3.13.0", + "dedent": "^0.7.0", + "get-port": "^4.2.0", + "multimatch": "^3.0.0", + "npm-package-arg": "^6.1.0", + "npmlog": "^4.1.2", + "p-finally": "^1.0.0", + "p-map": "^2.1.0", + "p-map-series": "^1.0.0", + "p-waterfall": "^1.0.0", + "read-package-tree": "^5.1.6", + "semver": "^6.2.0" + }, + "engines": { + "node": ">= 6.9.0" + } + }, + "packages/three-vrm/node_modules/@lerna/bootstrap/node_modules/p-map": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "packages/three-vrm/node_modules/@lerna/bootstrap/node_modules/semver": { + "version": "6.3.0", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "packages/three-vrm/node_modules/@lerna/changed": { + "version": "3.21.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/collect-updates": "3.20.0", + "@lerna/command": "3.21.0", + "@lerna/listable": "3.18.5", + "@lerna/output": "3.13.0" + }, + "engines": { + "node": ">= 6.9.0" + } + }, + "packages/three-vrm/node_modules/@lerna/check-working-tree": { + "version": "3.16.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/collect-uncommitted": "3.16.5", + "@lerna/describe-ref": "3.16.5", + "@lerna/validation-error": "3.13.0" + }, + "engines": { + "node": ">= 6.9.0" + } + }, + "packages/three-vrm/node_modules/@lerna/child-process": { + "version": "3.16.5", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^2.3.1", + "execa": "^1.0.0", + "strong-log-transformer": "^2.0.0" + }, + "engines": { + "node": ">= 6.9.0" + } + }, + "packages/three-vrm/node_modules/@lerna/child-process/node_modules/ansi-styles": { + "version": "3.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/@lerna/child-process/node_modules/chalk": { + "version": "2.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/@lerna/child-process/node_modules/color-convert": { + "version": "1.9.3", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "packages/three-vrm/node_modules/@lerna/child-process/node_modules/color-name": { + "version": "1.1.3", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/@lerna/child-process/node_modules/cross-spawn": { + "version": "6.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "packages/three-vrm/node_modules/@lerna/child-process/node_modules/execa": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "packages/three-vrm/node_modules/@lerna/child-process/node_modules/get-stream": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "packages/three-vrm/node_modules/@lerna/child-process/node_modules/has-flag": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/@lerna/child-process/node_modules/is-stream": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/@lerna/child-process/node_modules/npm-run-path": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/@lerna/child-process/node_modules/path-key": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/@lerna/child-process/node_modules/shebang-command": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/@lerna/child-process/node_modules/shebang-regex": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/@lerna/child-process/node_modules/supports-color": { + "version": "5.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/@lerna/child-process/node_modules/which": { + "version": "1.3.1", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "packages/three-vrm/node_modules/@lerna/clean": { + "version": "3.21.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/command": "3.21.0", + "@lerna/filter-options": "3.20.0", + "@lerna/prompt": "3.18.5", + "@lerna/pulse-till-done": "3.13.0", + "@lerna/rimraf-dir": "3.16.5", + "p-map": "^2.1.0", + "p-map-series": "^1.0.0", + "p-waterfall": "^1.0.0" + }, + "engines": { + "node": ">= 6.9.0" + } + }, + "packages/three-vrm/node_modules/@lerna/clean/node_modules/p-map": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "packages/three-vrm/node_modules/@lerna/cli": { + "version": "3.18.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/global-options": "3.13.0", + "dedent": "^0.7.0", + "npmlog": "^4.1.2", + "yargs": "^14.2.2" + }, + "engines": { + "node": ">= 6.9.0" + } + }, + "packages/three-vrm/node_modules/@lerna/cli/node_modules/ansi-regex": { + "version": "4.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "packages/three-vrm/node_modules/@lerna/cli/node_modules/ansi-styles": { + "version": "3.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/@lerna/cli/node_modules/cliui": { + "version": "5.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "packages/three-vrm/node_modules/@lerna/cli/node_modules/color-convert": { + "version": "1.9.3", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "packages/three-vrm/node_modules/@lerna/cli/node_modules/color-name": { + "version": "1.1.3", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/@lerna/cli/node_modules/emoji-regex": { + "version": "7.0.3", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/@lerna/cli/node_modules/get-caller-file": { + "version": "2.0.5", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "packages/three-vrm/node_modules/@lerna/cli/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/@lerna/cli/node_modules/require-main-filename": { + "version": "2.0.0", + "dev": true, + "license": "ISC" + }, + "packages/three-vrm/node_modules/@lerna/cli/node_modules/string-width": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "packages/three-vrm/node_modules/@lerna/cli/node_modules/strip-ansi": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "packages/three-vrm/node_modules/@lerna/cli/node_modules/wrap-ansi": { + "version": "5.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "packages/three-vrm/node_modules/@lerna/cli/node_modules/yargs": { + "version": "14.2.3", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^5.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^15.0.1" + } + }, + "packages/three-vrm/node_modules/@lerna/cli/node_modules/yargs-parser": { + "version": "15.0.3", + "dev": true, + "license": "ISC", + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "packages/three-vrm/node_modules/@lerna/collect-uncommitted": { + "version": "3.16.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/child-process": "3.16.5", + "chalk": "^2.3.1", + "figgy-pudding": "^3.5.1", + "npmlog": "^4.1.2" + }, + "engines": { + "node": ">= 6.9.0" + } + }, + "packages/three-vrm/node_modules/@lerna/collect-uncommitted/node_modules/ansi-styles": { + "version": "3.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/@lerna/collect-uncommitted/node_modules/chalk": { + "version": "2.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/@lerna/collect-uncommitted/node_modules/color-convert": { + "version": "1.9.3", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "packages/three-vrm/node_modules/@lerna/collect-uncommitted/node_modules/color-name": { + "version": "1.1.3", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/@lerna/collect-uncommitted/node_modules/has-flag": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/@lerna/collect-uncommitted/node_modules/supports-color": { + "version": "5.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/@lerna/collect-updates": { + "version": "3.20.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/child-process": "3.16.5", + "@lerna/describe-ref": "3.16.5", + "minimatch": "^3.0.4", + "npmlog": "^4.1.2", + "slash": "^2.0.0" + }, + "engines": { + "node": ">= 6.9.0" + } + }, + "packages/three-vrm/node_modules/@lerna/collect-updates/node_modules/slash": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "packages/three-vrm/node_modules/@lerna/command": { + "version": "3.21.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/child-process": "3.16.5", + "@lerna/package-graph": "3.18.5", + "@lerna/project": "3.21.0", + "@lerna/validation-error": "3.13.0", + "@lerna/write-log-file": "3.13.0", + "clone-deep": "^4.0.1", + "dedent": "^0.7.0", + "execa": "^1.0.0", + "is-ci": "^2.0.0", + "npmlog": "^4.1.2" + }, + "engines": { + "node": ">= 6.9.0" + } + }, + "packages/three-vrm/node_modules/@lerna/command/node_modules/cross-spawn": { + "version": "6.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "packages/three-vrm/node_modules/@lerna/command/node_modules/execa": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "packages/three-vrm/node_modules/@lerna/command/node_modules/get-stream": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "packages/three-vrm/node_modules/@lerna/command/node_modules/is-stream": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/@lerna/command/node_modules/npm-run-path": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/@lerna/command/node_modules/path-key": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/@lerna/command/node_modules/shebang-command": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/@lerna/command/node_modules/shebang-regex": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/@lerna/command/node_modules/which": { + "version": "1.3.1", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "packages/three-vrm/node_modules/@lerna/conventional-commits": { + "version": "3.22.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/validation-error": "3.13.0", + "conventional-changelog-angular": "^5.0.3", + "conventional-changelog-core": "^3.1.6", + "conventional-recommended-bump": "^5.0.0", + "fs-extra": "^8.1.0", + "get-stream": "^4.0.0", + "lodash.template": "^4.5.0", + "npm-package-arg": "^6.1.0", + "npmlog": "^4.1.2", + "pify": "^4.0.1", + "semver": "^6.2.0" + }, + "engines": { + "node": ">= 6.9.0" + } + }, + "packages/three-vrm/node_modules/@lerna/conventional-commits/node_modules/get-stream": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "packages/three-vrm/node_modules/@lerna/conventional-commits/node_modules/semver": { + "version": "6.3.0", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "packages/three-vrm/node_modules/@lerna/create": { + "version": "3.22.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@evocateur/pacote": "^9.6.3", + "@lerna/child-process": "3.16.5", + "@lerna/command": "3.21.0", + "@lerna/npm-conf": "3.16.0", + "@lerna/validation-error": "3.13.0", + "camelcase": "^5.0.0", + "dedent": "^0.7.0", + "fs-extra": "^8.1.0", + "globby": "^9.2.0", + "init-package-json": "^1.10.3", + "npm-package-arg": "^6.1.0", + "p-reduce": "^1.0.0", + "pify": "^4.0.1", + "semver": "^6.2.0", + "slash": "^2.0.0", + "validate-npm-package-license": "^3.0.3", + "validate-npm-package-name": "^3.0.0", + "whatwg-url": "^7.0.0" + }, + "engines": { + "node": ">= 6.9.0" + } + }, + "packages/three-vrm/node_modules/@lerna/create-symlink": { + "version": "3.16.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@zkochan/cmd-shim": "^3.1.0", + "fs-extra": "^8.1.0", + "npmlog": "^4.1.2" + }, + "engines": { + "node": ">= 6.9.0" + } + }, + "packages/three-vrm/node_modules/@lerna/create/node_modules/@nodelib/fs.stat": { + "version": "1.1.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "packages/three-vrm/node_modules/@lerna/create/node_modules/array-union": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "array-uniq": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/@lerna/create/node_modules/braces": { + "version": "2.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/@lerna/create/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/@lerna/create/node_modules/dir-glob": { + "version": "2.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "path-type": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/@lerna/create/node_modules/fast-glob": { + "version": "2.2.7", + "dev": true, + "license": "MIT", + "dependencies": { + "@mrmlnc/readdir-enhanced": "^2.2.1", + "@nodelib/fs.stat": "^1.1.2", + "glob-parent": "^3.1.0", + "is-glob": "^4.0.0", + "merge2": "^1.2.3", + "micromatch": "^3.1.10" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "packages/three-vrm/node_modules/@lerna/create/node_modules/fill-range": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/@lerna/create/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/@lerna/create/node_modules/glob-parent": { + "version": "3.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "packages/three-vrm/node_modules/@lerna/create/node_modules/glob-parent/node_modules/is-glob": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/@lerna/create/node_modules/globby": { + "version": "9.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/glob": "^7.1.1", + "array-union": "^1.0.2", + "dir-glob": "^2.2.2", + "fast-glob": "^2.2.6", + "glob": "^7.1.3", + "ignore": "^4.0.3", + "pify": "^4.0.1", + "slash": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "packages/three-vrm/node_modules/@lerna/create/node_modules/ignore": { + "version": "4.0.6", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "packages/three-vrm/node_modules/@lerna/create/node_modules/is-extendable": { + "version": "0.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/@lerna/create/node_modules/is-number": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/@lerna/create/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/@lerna/create/node_modules/micromatch": { + "version": "3.1.10", + "dev": true, + "license": "MIT", + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/@lerna/create/node_modules/path-type": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/@lerna/create/node_modules/path-type/node_modules/pify": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/@lerna/create/node_modules/semver": { + "version": "6.3.0", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "packages/three-vrm/node_modules/@lerna/create/node_modules/slash": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "packages/three-vrm/node_modules/@lerna/create/node_modules/to-regex-range": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/@lerna/create/node_modules/tr46": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "packages/three-vrm/node_modules/@lerna/create/node_modules/webidl-conversions": { + "version": "4.0.2", + "dev": true, + "license": "BSD-2-Clause" + }, + "packages/three-vrm/node_modules/@lerna/create/node_modules/whatwg-url": { + "version": "7.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "packages/three-vrm/node_modules/@lerna/describe-ref": { + "version": "3.16.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/child-process": "3.16.5", + "npmlog": "^4.1.2" + }, + "engines": { + "node": ">= 6.9.0" + } + }, + "packages/three-vrm/node_modules/@lerna/diff": { + "version": "3.21.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/child-process": "3.16.5", + "@lerna/command": "3.21.0", + "@lerna/validation-error": "3.13.0", + "npmlog": "^4.1.2" + }, + "engines": { + "node": ">= 6.9.0" + } + }, + "packages/three-vrm/node_modules/@lerna/exec": { + "version": "3.21.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/child-process": "3.16.5", + "@lerna/command": "3.21.0", + "@lerna/filter-options": "3.20.0", + "@lerna/profiler": "3.20.0", + "@lerna/run-topologically": "3.18.5", + "@lerna/validation-error": "3.13.0", + "p-map": "^2.1.0" + }, + "engines": { + "node": ">= 6.9.0" + } + }, + "packages/three-vrm/node_modules/@lerna/exec/node_modules/p-map": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "packages/three-vrm/node_modules/@lerna/filter-options": { + "version": "3.20.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/collect-updates": "3.20.0", + "@lerna/filter-packages": "3.18.0", + "dedent": "^0.7.0", + "figgy-pudding": "^3.5.1", + "npmlog": "^4.1.2" + }, + "engines": { + "node": ">= 6.9.0" + } + }, + "packages/three-vrm/node_modules/@lerna/filter-packages": { + "version": "3.18.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/validation-error": "3.13.0", + "multimatch": "^3.0.0", + "npmlog": "^4.1.2" + }, + "engines": { + "node": ">= 6.9.0" + } + }, + "packages/three-vrm/node_modules/@lerna/get-npm-exec-opts": { + "version": "3.13.0", + "dev": true, + "license": "MIT", + "dependencies": { + "npmlog": "^4.1.2" + }, + "engines": { + "node": ">= 6.9.0" + } + }, + "packages/three-vrm/node_modules/@lerna/get-packed": { + "version": "3.16.0", + "dev": true, + "license": "MIT", + "dependencies": { + "fs-extra": "^8.1.0", + "ssri": "^6.0.1", + "tar": "^4.4.8" + } + }, + "packages/three-vrm/node_modules/@lerna/github-client": { + "version": "3.22.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/child-process": "3.16.5", + "@octokit/plugin-enterprise-rest": "^6.0.1", + "@octokit/rest": "^16.28.4", + "git-url-parse": "^11.1.2", + "npmlog": "^4.1.2" + }, + "engines": { + "node": ">= 6.9.0" + } + }, + "packages/three-vrm/node_modules/@lerna/gitlab-client": { + "version": "3.15.0", + "dev": true, + "license": "MIT", + "dependencies": { + "node-fetch": "^2.5.0", + "npmlog": "^4.1.2", + "whatwg-url": "^7.0.0" + }, + "engines": { + "node": ">= 6.9.0" + } + }, + "packages/three-vrm/node_modules/@lerna/gitlab-client/node_modules/tr46": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "packages/three-vrm/node_modules/@lerna/gitlab-client/node_modules/webidl-conversions": { + "version": "4.0.2", + "dev": true, + "license": "BSD-2-Clause" + }, + "packages/three-vrm/node_modules/@lerna/gitlab-client/node_modules/whatwg-url": { + "version": "7.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "packages/three-vrm/node_modules/@lerna/global-options": { + "version": "3.13.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6.9.0" + } + }, + "packages/three-vrm/node_modules/@lerna/has-npm-version": { + "version": "3.16.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/child-process": "3.16.5", + "semver": "^6.2.0" + }, + "engines": { + "node": ">= 6.9.0" + } + }, + "packages/three-vrm/node_modules/@lerna/has-npm-version/node_modules/semver": { + "version": "6.3.0", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "packages/three-vrm/node_modules/@lerna/import": { + "version": "3.22.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/child-process": "3.16.5", + "@lerna/command": "3.21.0", + "@lerna/prompt": "3.18.5", + "@lerna/pulse-till-done": "3.13.0", + "@lerna/validation-error": "3.13.0", + "dedent": "^0.7.0", + "fs-extra": "^8.1.0", + "p-map-series": "^1.0.0" + }, + "engines": { + "node": ">= 6.9.0" + } + }, + "packages/three-vrm/node_modules/@lerna/info": { + "version": "3.21.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/command": "3.21.0", + "@lerna/output": "3.13.0", + "envinfo": "^7.3.1" + }, + "engines": { + "node": ">= 6.9.0" + } + }, + "packages/three-vrm/node_modules/@lerna/init": { + "version": "3.21.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/child-process": "3.16.5", + "@lerna/command": "3.21.0", + "fs-extra": "^8.1.0", + "p-map": "^2.1.0", + "write-json-file": "^3.2.0" + }, + "engines": { + "node": ">= 6.9.0" + } + }, + "packages/three-vrm/node_modules/@lerna/init/node_modules/p-map": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "packages/three-vrm/node_modules/@lerna/link": { + "version": "3.21.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/command": "3.21.0", + "@lerna/package-graph": "3.18.5", + "@lerna/symlink-dependencies": "3.17.0", + "p-map": "^2.1.0", + "slash": "^2.0.0" + }, + "engines": { + "node": ">= 6.9.0" + } + }, + "packages/three-vrm/node_modules/@lerna/link/node_modules/p-map": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "packages/three-vrm/node_modules/@lerna/link/node_modules/slash": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "packages/three-vrm/node_modules/@lerna/list": { + "version": "3.21.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/command": "3.21.0", + "@lerna/filter-options": "3.20.0", + "@lerna/listable": "3.18.5", + "@lerna/output": "3.13.0" + }, + "engines": { + "node": ">= 6.9.0" + } + }, + "packages/three-vrm/node_modules/@lerna/listable": { + "version": "3.18.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/query-graph": "3.18.5", + "chalk": "^2.3.1", + "columnify": "^1.5.4" + }, + "engines": { + "node": ">= 6.9.0" + } + }, + "packages/three-vrm/node_modules/@lerna/listable/node_modules/ansi-styles": { + "version": "3.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/@lerna/listable/node_modules/chalk": { + "version": "2.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/@lerna/listable/node_modules/color-convert": { + "version": "1.9.3", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "packages/three-vrm/node_modules/@lerna/listable/node_modules/color-name": { + "version": "1.1.3", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/@lerna/listable/node_modules/has-flag": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/@lerna/listable/node_modules/supports-color": { + "version": "5.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/@lerna/log-packed": { + "version": "3.16.0", + "dev": true, + "license": "MIT", + "dependencies": { + "byte-size": "^5.0.1", + "columnify": "^1.5.4", + "has-unicode": "^2.0.1", + "npmlog": "^4.1.2" + }, + "engines": { + "node": ">= 6.9.0" + } + }, + "packages/three-vrm/node_modules/@lerna/npm-conf": { + "version": "3.16.0", + "dev": true, + "license": "MIT", + "dependencies": { + "config-chain": "^1.1.11", + "pify": "^4.0.1" + }, + "engines": { + "node": ">= 6.9.0" + } + }, + "packages/three-vrm/node_modules/@lerna/npm-dist-tag": { + "version": "3.18.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@evocateur/npm-registry-fetch": "^4.0.0", + "@lerna/otplease": "3.18.5", + "figgy-pudding": "^3.5.1", + "npm-package-arg": "^6.1.0", + "npmlog": "^4.1.2" + }, + "engines": { + "node": ">= 6.9.0" + } + }, + "packages/three-vrm/node_modules/@lerna/npm-install": { + "version": "3.16.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/child-process": "3.16.5", + "@lerna/get-npm-exec-opts": "3.13.0", + "fs-extra": "^8.1.0", + "npm-package-arg": "^6.1.0", + "npmlog": "^4.1.2", + "signal-exit": "^3.0.2", + "write-pkg": "^3.1.0" + }, + "engines": { + "node": ">= 6.9.0" + } + }, + "packages/three-vrm/node_modules/@lerna/npm-publish": { + "version": "3.18.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@evocateur/libnpmpublish": "^1.2.2", + "@lerna/otplease": "3.18.5", + "@lerna/run-lifecycle": "3.16.2", + "figgy-pudding": "^3.5.1", + "fs-extra": "^8.1.0", + "npm-package-arg": "^6.1.0", + "npmlog": "^4.1.2", + "pify": "^4.0.1", + "read-package-json": "^2.0.13" + }, + "engines": { + "node": ">= 6.9.0" + } + }, + "packages/three-vrm/node_modules/@lerna/npm-run-script": { + "version": "3.16.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/child-process": "3.16.5", + "@lerna/get-npm-exec-opts": "3.13.0", + "npmlog": "^4.1.2" + }, + "engines": { + "node": ">= 6.9.0" + } + }, + "packages/three-vrm/node_modules/@lerna/otplease": { + "version": "3.18.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/prompt": "3.18.5", + "figgy-pudding": "^3.5.1" + }, + "engines": { + "node": ">= 6.9.0" + } + }, + "packages/three-vrm/node_modules/@lerna/output": { + "version": "3.13.0", + "dev": true, + "license": "MIT", + "dependencies": { + "npmlog": "^4.1.2" + }, + "engines": { + "node": ">= 6.9.0" + } + }, + "packages/three-vrm/node_modules/@lerna/pack-directory": { + "version": "3.16.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/get-packed": "3.16.0", + "@lerna/package": "3.16.0", + "@lerna/run-lifecycle": "3.16.2", + "figgy-pudding": "^3.5.1", + "npm-packlist": "^1.4.4", + "npmlog": "^4.1.2", + "tar": "^4.4.10", + "temp-write": "^3.4.0" + } + }, + "packages/three-vrm/node_modules/@lerna/package": { + "version": "3.16.0", + "dev": true, + "license": "MIT", + "dependencies": { + "load-json-file": "^5.3.0", + "npm-package-arg": "^6.1.0", + "write-pkg": "^3.1.0" + }, + "engines": { + "node": ">= 6.9.0" + } + }, + "packages/three-vrm/node_modules/@lerna/package-graph": { + "version": "3.18.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/prerelease-id-from-version": "3.16.0", + "@lerna/validation-error": "3.13.0", + "npm-package-arg": "^6.1.0", + "npmlog": "^4.1.2", + "semver": "^6.2.0" + }, + "engines": { + "node": ">= 6.9.0" + } + }, + "packages/three-vrm/node_modules/@lerna/package-graph/node_modules/semver": { + "version": "6.3.0", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "packages/three-vrm/node_modules/@lerna/prerelease-id-from-version": { + "version": "3.16.0", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^6.2.0" + }, + "engines": { + "node": ">= 6.9.0" + } + }, + "packages/three-vrm/node_modules/@lerna/prerelease-id-from-version/node_modules/semver": { + "version": "6.3.0", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "packages/three-vrm/node_modules/@lerna/profiler": { + "version": "3.20.0", + "dev": true, + "license": "MIT", + "dependencies": { + "figgy-pudding": "^3.5.1", + "fs-extra": "^8.1.0", + "npmlog": "^4.1.2", + "upath": "^1.2.0" + }, + "engines": { + "node": ">= 6.9.0" + } + }, + "packages/three-vrm/node_modules/@lerna/project": { + "version": "3.21.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/package": "3.16.0", + "@lerna/validation-error": "3.13.0", + "cosmiconfig": "^5.1.0", + "dedent": "^0.7.0", + "dot-prop": "^4.2.0", + "glob-parent": "^5.0.0", + "globby": "^9.2.0", + "load-json-file": "^5.3.0", + "npmlog": "^4.1.2", + "p-map": "^2.1.0", + "resolve-from": "^4.0.0", + "write-json-file": "^3.2.0" + }, + "engines": { + "node": ">= 6.9.0" + } + }, + "packages/three-vrm/node_modules/@lerna/project/node_modules/@nodelib/fs.stat": { + "version": "1.1.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "packages/three-vrm/node_modules/@lerna/project/node_modules/array-union": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "array-uniq": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/@lerna/project/node_modules/braces": { + "version": "2.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/@lerna/project/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/@lerna/project/node_modules/cosmiconfig": { + "version": "5.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/@lerna/project/node_modules/dir-glob": { + "version": "2.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "path-type": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/@lerna/project/node_modules/fast-glob": { + "version": "2.2.7", + "dev": true, + "license": "MIT", + "dependencies": { + "@mrmlnc/readdir-enhanced": "^2.2.1", + "@nodelib/fs.stat": "^1.1.2", + "glob-parent": "^3.1.0", + "is-glob": "^4.0.0", + "merge2": "^1.2.3", + "micromatch": "^3.1.10" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "packages/three-vrm/node_modules/@lerna/project/node_modules/fast-glob/node_modules/glob-parent": { + "version": "3.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "packages/three-vrm/node_modules/@lerna/project/node_modules/fast-glob/node_modules/glob-parent/node_modules/is-glob": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/@lerna/project/node_modules/fill-range": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/@lerna/project/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/@lerna/project/node_modules/globby": { + "version": "9.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/glob": "^7.1.1", + "array-union": "^1.0.2", + "dir-glob": "^2.2.2", + "fast-glob": "^2.2.6", + "glob": "^7.1.3", + "ignore": "^4.0.3", + "pify": "^4.0.1", + "slash": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "packages/three-vrm/node_modules/@lerna/project/node_modules/ignore": { + "version": "4.0.6", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "packages/three-vrm/node_modules/@lerna/project/node_modules/import-fresh": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/@lerna/project/node_modules/import-fresh/node_modules/resolve-from": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/@lerna/project/node_modules/is-extendable": { + "version": "0.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/@lerna/project/node_modules/is-number": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/@lerna/project/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/@lerna/project/node_modules/micromatch": { + "version": "3.1.10", + "dev": true, + "license": "MIT", + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/@lerna/project/node_modules/p-map": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "packages/three-vrm/node_modules/@lerna/project/node_modules/parse-json": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/@lerna/project/node_modules/path-type": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/@lerna/project/node_modules/path-type/node_modules/pify": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/@lerna/project/node_modules/slash": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "packages/three-vrm/node_modules/@lerna/project/node_modules/to-regex-range": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/@lerna/prompt": { + "version": "3.18.5", + "dev": true, + "license": "MIT", + "dependencies": { + "inquirer": "^6.2.0", + "npmlog": "^4.1.2" + }, + "engines": { + "node": ">= 6.9.0" + } + }, + "packages/three-vrm/node_modules/@lerna/publish": { + "version": "3.22.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@evocateur/libnpmaccess": "^3.1.2", + "@evocateur/npm-registry-fetch": "^4.0.0", + "@evocateur/pacote": "^9.6.3", + "@lerna/check-working-tree": "3.16.5", + "@lerna/child-process": "3.16.5", + "@lerna/collect-updates": "3.20.0", + "@lerna/command": "3.21.0", + "@lerna/describe-ref": "3.16.5", + "@lerna/log-packed": "3.16.0", + "@lerna/npm-conf": "3.16.0", + "@lerna/npm-dist-tag": "3.18.5", + "@lerna/npm-publish": "3.18.5", + "@lerna/otplease": "3.18.5", + "@lerna/output": "3.13.0", + "@lerna/pack-directory": "3.16.4", + "@lerna/prerelease-id-from-version": "3.16.0", + "@lerna/prompt": "3.18.5", + "@lerna/pulse-till-done": "3.13.0", + "@lerna/run-lifecycle": "3.16.2", + "@lerna/run-topologically": "3.18.5", + "@lerna/validation-error": "3.13.0", + "@lerna/version": "3.22.1", + "figgy-pudding": "^3.5.1", + "fs-extra": "^8.1.0", + "npm-package-arg": "^6.1.0", + "npmlog": "^4.1.2", + "p-finally": "^1.0.0", + "p-map": "^2.1.0", + "p-pipe": "^1.2.0", + "semver": "^6.2.0" + }, + "engines": { + "node": ">= 6.9.0" + } + }, + "packages/three-vrm/node_modules/@lerna/publish/node_modules/p-map": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "packages/three-vrm/node_modules/@lerna/publish/node_modules/semver": { + "version": "6.3.0", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "packages/three-vrm/node_modules/@lerna/pulse-till-done": { + "version": "3.13.0", + "dev": true, + "license": "MIT", + "dependencies": { + "npmlog": "^4.1.2" + }, + "engines": { + "node": ">= 6.9.0" + } + }, + "packages/three-vrm/node_modules/@lerna/query-graph": { + "version": "3.18.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/package-graph": "3.18.5", + "figgy-pudding": "^3.5.1" + }, + "engines": { + "node": ">= 6.9.0" + } + }, + "packages/three-vrm/node_modules/@lerna/resolve-symlink": { + "version": "3.16.0", + "dev": true, + "license": "MIT", + "dependencies": { + "fs-extra": "^8.1.0", + "npmlog": "^4.1.2", + "read-cmd-shim": "^1.0.1" + }, + "engines": { + "node": ">= 6.9.0" + } + }, + "packages/three-vrm/node_modules/@lerna/rimraf-dir": { + "version": "3.16.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/child-process": "3.16.5", + "npmlog": "^4.1.2", + "path-exists": "^3.0.0", + "rimraf": "^2.6.2" + }, + "engines": { + "node": ">= 6.9.0" + } + }, + "packages/three-vrm/node_modules/@lerna/rimraf-dir/node_modules/rimraf": { + "version": "2.7.1", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "packages/three-vrm/node_modules/@lerna/run": { + "version": "3.21.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/command": "3.21.0", + "@lerna/filter-options": "3.20.0", + "@lerna/npm-run-script": "3.16.5", + "@lerna/output": "3.13.0", + "@lerna/profiler": "3.20.0", + "@lerna/run-topologically": "3.18.5", + "@lerna/timer": "3.13.0", + "@lerna/validation-error": "3.13.0", + "p-map": "^2.1.0" + }, + "engines": { + "node": ">= 6.9.0" + } + }, + "packages/three-vrm/node_modules/@lerna/run-lifecycle": { + "version": "3.16.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/npm-conf": "3.16.0", + "figgy-pudding": "^3.5.1", + "npm-lifecycle": "^3.1.2", + "npmlog": "^4.1.2" + }, + "engines": { + "node": ">= 6.9.0" + } + }, + "packages/three-vrm/node_modules/@lerna/run-topologically": { + "version": "3.18.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/query-graph": "3.18.5", + "figgy-pudding": "^3.5.1", + "p-queue": "^4.0.0" + }, + "engines": { + "node": ">= 6.9.0" + } + }, + "packages/three-vrm/node_modules/@lerna/run/node_modules/p-map": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "packages/three-vrm/node_modules/@lerna/symlink-binary": { + "version": "3.17.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/create-symlink": "3.16.2", + "@lerna/package": "3.16.0", + "fs-extra": "^8.1.0", + "p-map": "^2.1.0" + }, + "engines": { + "node": ">= 6.9.0" + } + }, + "packages/three-vrm/node_modules/@lerna/symlink-binary/node_modules/p-map": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "packages/three-vrm/node_modules/@lerna/symlink-dependencies": { + "version": "3.17.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/create-symlink": "3.16.2", + "@lerna/resolve-symlink": "3.16.0", + "@lerna/symlink-binary": "3.17.0", + "fs-extra": "^8.1.0", + "p-finally": "^1.0.0", + "p-map": "^2.1.0", + "p-map-series": "^1.0.0" + }, + "engines": { + "node": ">= 6.9.0" + } + }, + "packages/three-vrm/node_modules/@lerna/symlink-dependencies/node_modules/p-map": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "packages/three-vrm/node_modules/@lerna/timer": { + "version": "3.13.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6.9.0" + } + }, + "packages/three-vrm/node_modules/@lerna/validation-error": { + "version": "3.13.0", + "dev": true, + "license": "MIT", + "dependencies": { + "npmlog": "^4.1.2" + }, + "engines": { + "node": ">= 6.9.0" + } + }, + "packages/three-vrm/node_modules/@lerna/version": { + "version": "3.22.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/check-working-tree": "3.16.5", + "@lerna/child-process": "3.16.5", + "@lerna/collect-updates": "3.20.0", + "@lerna/command": "3.21.0", + "@lerna/conventional-commits": "3.22.0", + "@lerna/github-client": "3.22.0", + "@lerna/gitlab-client": "3.15.0", + "@lerna/output": "3.13.0", + "@lerna/prerelease-id-from-version": "3.16.0", + "@lerna/prompt": "3.18.5", + "@lerna/run-lifecycle": "3.16.2", + "@lerna/run-topologically": "3.18.5", + "@lerna/validation-error": "3.13.0", + "chalk": "^2.3.1", + "dedent": "^0.7.0", + "load-json-file": "^5.3.0", + "minimatch": "^3.0.4", + "npmlog": "^4.1.2", + "p-map": "^2.1.0", + "p-pipe": "^1.2.0", + "p-reduce": "^1.0.0", + "p-waterfall": "^1.0.0", + "semver": "^6.2.0", + "slash": "^2.0.0", + "temp-write": "^3.4.0", + "write-json-file": "^3.2.0" + }, + "engines": { + "node": ">= 6.9.0" + } + }, + "packages/three-vrm/node_modules/@lerna/version/node_modules/ansi-styles": { + "version": "3.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/@lerna/version/node_modules/chalk": { + "version": "2.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/@lerna/version/node_modules/color-convert": { + "version": "1.9.3", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "packages/three-vrm/node_modules/@lerna/version/node_modules/color-name": { + "version": "1.1.3", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/@lerna/version/node_modules/has-flag": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/@lerna/version/node_modules/p-map": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "packages/three-vrm/node_modules/@lerna/version/node_modules/semver": { + "version": "6.3.0", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "packages/three-vrm/node_modules/@lerna/version/node_modules/slash": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "packages/three-vrm/node_modules/@lerna/version/node_modules/supports-color": { + "version": "5.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/@lerna/write-log-file": { + "version": "3.13.0", + "dev": true, + "license": "MIT", + "dependencies": { + "npmlog": "^4.1.2", + "write-file-atomic": "^2.3.0" + }, + "engines": { + "node": ">= 6.9.0" + } + }, + "packages/three-vrm/node_modules/@mark.probst/typescript-json-schema": { + "version": "0.32.0", + "dev": true, + "dependencies": { + "glob": "~7.1.3", + "json-stable-stringify": "^1.0.1", + "typescript": "~3.2.1", + "yargs": "^12.0.5" + }, + "bin": { + "typescript-json-schema": "bin/typescript-json-schema" + } + }, + "packages/three-vrm/node_modules/@mark.probst/typescript-json-schema/node_modules/typescript": { + "version": "3.2.4", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "packages/three-vrm/node_modules/@mark.probst/unicode-properties": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "brfs": "^1.4.0", + "unicode-trie": "^0.3.0" + } + }, + "packages/three-vrm/node_modules/@mrmlnc/readdir-enhanced": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "call-me-maybe": "^1.0.1", + "glob-to-regexp": "^0.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "packages/three-vrm/node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "packages/three-vrm/node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "packages/three-vrm/node_modules/@octokit/auth-token": { + "version": "2.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/types": "^6.0.3" + } + }, + "packages/three-vrm/node_modules/@octokit/core": { + "version": "4.0.4", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@octokit/auth-token": "^3.0.0", + "@octokit/graphql": "^5.0.0", + "@octokit/request": "^6.0.0", + "@octokit/request-error": "^3.0.0", + "@octokit/types": "^6.0.3", + "before-after-hook": "^2.2.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "packages/three-vrm/node_modules/@octokit/core/node_modules/@octokit/auth-token": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@octokit/types": "^6.0.3" + }, + "engines": { + "node": ">= 14" + } + }, + "packages/three-vrm/node_modules/@octokit/core/node_modules/@octokit/endpoint": { + "version": "7.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@octokit/types": "^6.0.3", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "packages/three-vrm/node_modules/@octokit/core/node_modules/@octokit/request": { + "version": "6.2.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@octokit/endpoint": "^7.0.0", + "@octokit/request-error": "^3.0.0", + "@octokit/types": "^6.16.1", + "is-plain-object": "^5.0.0", + "node-fetch": "^2.6.7", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "packages/three-vrm/node_modules/@octokit/core/node_modules/@octokit/request-error": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@octokit/types": "^6.0.3", + "deprecation": "^2.0.0", + "once": "^1.4.0" + }, + "engines": { + "node": ">= 14" + } + }, + "packages/three-vrm/node_modules/@octokit/core/node_modules/universal-user-agent": { + "version": "6.0.0", + "dev": true, + "license": "ISC", + "peer": true + }, + "packages/three-vrm/node_modules/@octokit/endpoint": { + "version": "6.0.12", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/types": "^6.0.3", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" + } + }, + "packages/three-vrm/node_modules/@octokit/endpoint/node_modules/universal-user-agent": { + "version": "6.0.0", + "dev": true, + "license": "ISC" + }, + "packages/three-vrm/node_modules/@octokit/graphql": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@octokit/request": "^6.0.0", + "@octokit/types": "^6.0.3", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "packages/three-vrm/node_modules/@octokit/graphql/node_modules/@octokit/endpoint": { + "version": "7.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@octokit/types": "^6.0.3", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "packages/three-vrm/node_modules/@octokit/graphql/node_modules/@octokit/request": { + "version": "6.2.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@octokit/endpoint": "^7.0.0", + "@octokit/request-error": "^3.0.0", + "@octokit/types": "^6.16.1", + "is-plain-object": "^5.0.0", + "node-fetch": "^2.6.7", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "packages/three-vrm/node_modules/@octokit/graphql/node_modules/@octokit/request-error": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@octokit/types": "^6.0.3", + "deprecation": "^2.0.0", + "once": "^1.4.0" + }, + "engines": { + "node": ">= 14" + } + }, + "packages/three-vrm/node_modules/@octokit/graphql/node_modules/universal-user-agent": { + "version": "6.0.0", + "dev": true, + "license": "ISC", + "peer": true + }, + "packages/three-vrm/node_modules/@octokit/openapi-types": { + "version": "12.11.0", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/@octokit/plugin-enterprise-rest": { + "version": "6.0.1", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/@octokit/plugin-paginate-rest": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/types": "^2.0.1" + } + }, + "packages/three-vrm/node_modules/@octokit/plugin-paginate-rest/node_modules/@octokit/types": { + "version": "2.16.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": ">= 8" + } + }, + "packages/three-vrm/node_modules/@octokit/plugin-request-log": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@octokit/core": ">=3" + } + }, + "packages/three-vrm/node_modules/@octokit/plugin-rest-endpoint-methods": { + "version": "2.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/types": "^2.0.1", + "deprecation": "^2.3.1" + } + }, + "packages/three-vrm/node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/types": { + "version": "2.16.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": ">= 8" + } + }, + "packages/three-vrm/node_modules/@octokit/request": { + "version": "5.6.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/endpoint": "^6.0.1", + "@octokit/request-error": "^2.1.0", + "@octokit/types": "^6.16.1", + "is-plain-object": "^5.0.0", + "node-fetch": "^2.6.7", + "universal-user-agent": "^6.0.0" + } + }, + "packages/three-vrm/node_modules/@octokit/request-error": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/types": "^2.0.0", + "deprecation": "^2.0.0", + "once": "^1.4.0" + } + }, + "packages/three-vrm/node_modules/@octokit/request-error/node_modules/@octokit/types": { + "version": "2.16.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": ">= 8" + } + }, + "packages/three-vrm/node_modules/@octokit/request/node_modules/@octokit/request-error": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/types": "^6.0.3", + "deprecation": "^2.0.0", + "once": "^1.4.0" + } + }, + "packages/three-vrm/node_modules/@octokit/request/node_modules/universal-user-agent": { + "version": "6.0.0", + "dev": true, + "license": "ISC" + }, + "packages/three-vrm/node_modules/@octokit/rest": { + "version": "16.43.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/auth-token": "^2.4.0", + "@octokit/plugin-paginate-rest": "^1.1.1", + "@octokit/plugin-request-log": "^1.0.0", + "@octokit/plugin-rest-endpoint-methods": "2.4.0", + "@octokit/request": "^5.2.0", + "@octokit/request-error": "^1.0.2", + "atob-lite": "^2.0.0", + "before-after-hook": "^2.0.0", + "btoa-lite": "^1.0.0", + "deprecation": "^2.0.0", + "lodash.get": "^4.4.2", + "lodash.set": "^4.3.2", + "lodash.uniq": "^4.5.0", + "octokit-pagination-methods": "^1.1.0", + "once": "^1.4.0", + "universal-user-agent": "^4.0.0" + } + }, + "packages/three-vrm/node_modules/@octokit/types": { + "version": "6.41.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/openapi-types": "^12.11.0" + } + }, + "packages/three-vrm/node_modules/@rollup/plugin-typescript": { + "version": "8.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "resolve": "^1.17.0" + }, + "engines": { + "node": ">=8.0.0" + }, + "peerDependencies": { + "rollup": "^2.14.0", + "tslib": "*", + "typescript": ">=3.7.0" + }, + "peerDependenciesMeta": { + "tslib": { + "optional": true + } + } + }, + "packages/three-vrm/node_modules/@rollup/pluginutils": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "packages/three-vrm/node_modules/@types/estree": { + "version": "0.0.39", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/@types/glob": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "packages/three-vrm/node_modules/@types/json-schema": { + "version": "7.0.11", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/@types/minimatch": { + "version": "3.0.5", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/@types/minimist": { + "version": "1.2.2", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/@types/node": { + "version": "18.6.3", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/@types/normalize-package-data": { + "version": "2.4.1", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/@types/offscreencanvas": { + "version": "2019.7.0", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/@types/parse-json": { + "version": "4.0.0", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/@types/three": { + "version": "0.143.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/webxr": "*" + } + }, + "packages/three-vrm/node_modules/@types/webxr": { + "version": "0.5.0", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/@typescript-eslint/eslint-plugin": { + "version": "4.33.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/experimental-utils": "4.33.0", + "@typescript-eslint/scope-manager": "4.33.0", + "debug": "^4.3.1", + "functional-red-black-tree": "^1.0.1", + "ignore": "^5.1.8", + "regexpp": "^3.1.0", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^4.0.0", + "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "packages/three-vrm/node_modules/@typescript-eslint/eslint-plugin/node_modules/lru-cache": { + "version": "6.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "packages/three-vrm/node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { + "version": "7.3.7", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "packages/three-vrm/node_modules/@typescript-eslint/eslint-plugin/node_modules/yallist": { + "version": "4.0.0", + "dev": true, + "license": "ISC" + }, + "packages/three-vrm/node_modules/@typescript-eslint/experimental-utils": { + "version": "4.33.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.7", + "@typescript-eslint/scope-manager": "4.33.0", + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/typescript-estree": "4.33.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + } + }, + "packages/three-vrm/node_modules/@typescript-eslint/parser": { + "version": "4.33.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "4.33.0", + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/typescript-estree": "4.33.0", + "debug": "^4.3.1" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "packages/three-vrm/node_modules/@typescript-eslint/scope-manager": { + "version": "4.33.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/visitor-keys": "4.33.0" + }, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "packages/three-vrm/node_modules/@typescript-eslint/types": { + "version": "4.33.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "packages/three-vrm/node_modules/@typescript-eslint/typescript-estree": { + "version": "4.33.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/visitor-keys": "4.33.0", + "debug": "^4.3.1", + "globby": "^11.0.3", + "is-glob": "^4.0.1", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "packages/three-vrm/node_modules/@typescript-eslint/typescript-estree/node_modules/lru-cache": { + "version": "6.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "packages/three-vrm/node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.3.7", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "packages/three-vrm/node_modules/@typescript-eslint/typescript-estree/node_modules/yallist": { + "version": "4.0.0", + "dev": true, + "license": "ISC" + }, + "packages/three-vrm/node_modules/@typescript-eslint/visitor-keys": { + "version": "4.33.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "4.33.0", + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "packages/three-vrm/node_modules/@zkochan/cmd-shim": { + "version": "3.1.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "is-windows": "^1.0.0", + "mkdirp-promise": "^5.0.1", + "mz": "^2.5.0" + }, + "engines": { + "node": ">=6" + } + }, + "packages/three-vrm/node_modules/abbrev": { + "version": "1.1.1", + "dev": true, + "license": "ISC" + }, + "packages/three-vrm/node_modules/acorn": { + "version": "7.4.1", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "packages/three-vrm/node_modules/acorn-jsx": { + "version": "5.3.2", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "packages/three-vrm/node_modules/agent-base": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "es6-promisify": "^5.0.0" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "packages/three-vrm/node_modules/agentkeepalive": { + "version": "3.5.2", + "dev": true, + "license": "MIT", + "dependencies": { + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "packages/three-vrm/node_modules/aggregate-error": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "packages/three-vrm/node_modules/ajv": { + "version": "6.12.6", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "packages/three-vrm/node_modules/ansi-colors": { + "version": "4.1.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "packages/three-vrm/node_modules/ansi-escapes": { + "version": "4.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/three-vrm/node_modules/ansi-regex": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "packages/three-vrm/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "packages/three-vrm/node_modules/any-promise": { + "version": "1.3.0", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/aproba": { + "version": "2.0.0", + "dev": true, + "license": "ISC" + }, + "packages/three-vrm/node_modules/are-we-there-yet": { + "version": "1.1.7", + "dev": true, + "license": "ISC", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "packages/three-vrm/node_modules/argparse": { + "version": "1.0.10", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "packages/three-vrm/node_modules/arr-diff": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/arr-flatten": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/arr-union": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/array-back": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "typical": "^2.6.1" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/array-differ": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "packages/three-vrm/node_modules/array-find-index": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/array-ify": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/array-union": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "packages/three-vrm/node_modules/array-uniq": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/array-unique": { + "version": "0.3.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/array.prototype.reduce": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.2", + "es-array-method-boxes-properly": "^1.0.0", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/three-vrm/node_modules/arrify": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/asap": { + "version": "2.0.6", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/asn1": { + "version": "0.2.6", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "packages/three-vrm/node_modules/assert-plus": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "packages/three-vrm/node_modules/assign-symbols": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/astral-regex": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "packages/three-vrm/node_modules/asynckit": { + "version": "0.4.0", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/at-least-node": { + "version": "1.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 4.0.0" + } + }, + "packages/three-vrm/node_modules/atob": { + "version": "2.1.2", + "dev": true, + "license": "(MIT OR Apache-2.0)", + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.0" + } + }, + "packages/three-vrm/node_modules/atob-lite": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/aws-sign2": { + "version": "0.7.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "packages/three-vrm/node_modules/aws4": { + "version": "1.11.0", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/balanced-match": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/base": { + "version": "0.11.2", + "dev": true, + "license": "MIT", + "dependencies": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/base/node_modules/define-property": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "packages/three-vrm/node_modules/before-after-hook": { + "version": "2.2.2", + "dev": true, + "license": "Apache-2.0" + }, + "packages/three-vrm/node_modules/bluebird": { + "version": "3.7.2", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/brace-expansion": { + "version": "1.1.11", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "packages/three-vrm/node_modules/braces": { + "version": "3.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "packages/three-vrm/node_modules/brfs": { + "version": "1.6.1", + "dev": true, + "license": "MIT", + "dependencies": { + "quote-stream": "^1.0.1", + "resolve": "^1.1.5", + "static-module": "^2.2.0", + "through2": "^2.0.0" + }, + "bin": { + "brfs": "bin/cmd.js" + } + }, + "packages/three-vrm/node_modules/browser-or-node": { + "version": "1.3.0", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/btoa-lite": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/buffer-equal": { + "version": "0.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "packages/three-vrm/node_modules/buffer-from": { + "version": "1.1.2", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/builtins": { + "version": "1.0.3", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/byline": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/byte-size": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "packages/three-vrm/node_modules/cacache": { + "version": "12.0.4", + "dev": true, + "license": "ISC", + "dependencies": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + } + }, + "packages/three-vrm/node_modules/cacache/node_modules/rimraf": { + "version": "2.7.1", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "packages/three-vrm/node_modules/cache-base": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/call-bind": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/three-vrm/node_modules/call-me-maybe": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/caller-callsite": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/caller-callsite/node_modules/callsites": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/caller-path": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "caller-callsite": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/callsites": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "packages/three-vrm/node_modules/camelcase": { + "version": "5.3.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "packages/three-vrm/node_modules/camelcase-keys": { + "version": "6.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/three-vrm/node_modules/caseless": { + "version": "0.12.0", + "dev": true, + "license": "Apache-2.0" + }, + "packages/three-vrm/node_modules/chalk": { + "version": "4.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "packages/three-vrm/node_modules/chardet": { + "version": "0.7.0", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/chownr": { + "version": "1.1.4", + "dev": true, + "license": "ISC" + }, + "packages/three-vrm/node_modules/ci-info": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/class-utils": { + "version": "0.3.6", + "dev": true, + "license": "MIT", + "dependencies": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/class-utils/node_modules/define-property": { + "version": "0.2.5", + "dev": true, + "license": "MIT", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/class-utils/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/class-utils/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/class-utils/node_modules/is-data-descriptor": { + "version": "0.1.4", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/class-utils/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/class-utils/node_modules/is-descriptor": { + "version": "0.1.6", + "dev": true, + "license": "MIT", + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/class-utils/node_modules/kind-of": { + "version": "5.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/clean-stack": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "packages/three-vrm/node_modules/cli-cursor": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "packages/three-vrm/node_modules/cli-truncate": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/three-vrm/node_modules/cli-width": { + "version": "2.2.1", + "dev": true, + "license": "ISC" + }, + "packages/three-vrm/node_modules/cliui": { + "version": "4.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + } + }, + "packages/three-vrm/node_modules/cliui/node_modules/ansi-regex": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/cliui/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/cliui/node_modules/string-width": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/cliui/node_modules/strip-ansi": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/cliui/node_modules/wrap-ansi": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/cliui/node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/cliui/node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/cliui/node_modules/wrap-ansi/node_modules/string-width": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/cliui/node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/clone": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "packages/three-vrm/node_modules/clone-deep": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "packages/three-vrm/node_modules/clone-deep/node_modules/is-plain-object": { + "version": "2.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/code-point-at": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/collection-utils": { + "version": "1.0.1", + "dev": true, + "license": "Apache-2.0" + }, + "packages/three-vrm/node_modules/collection-visit": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "packages/three-vrm/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/colorette": { + "version": "2.0.19", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/colors": { + "version": "1.4.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.1.90" + } + }, + "packages/three-vrm/node_modules/columnify": { + "version": "1.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "strip-ansi": "^6.0.1", + "wcwidth": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "packages/three-vrm/node_modules/combined-stream": { + "version": "1.0.8", + "dev": true, + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "packages/three-vrm/node_modules/command-line-args": { + "version": "4.0.7", + "dev": true, + "license": "MIT", + "dependencies": { + "array-back": "^2.0.0", + "find-replace": "^1.0.3", + "typical": "^2.6.1" + }, + "bin": { + "command-line-args": "bin/cli.js" + } + }, + "packages/three-vrm/node_modules/command-line-usage": { + "version": "5.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "array-back": "^2.0.0", + "chalk": "^2.4.1", + "table-layout": "^0.4.3", + "typical": "^2.6.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "packages/three-vrm/node_modules/command-line-usage/node_modules/ansi-styles": { + "version": "3.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/command-line-usage/node_modules/chalk": { + "version": "2.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/command-line-usage/node_modules/color-convert": { + "version": "1.9.3", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "packages/three-vrm/node_modules/command-line-usage/node_modules/color-name": { + "version": "1.1.3", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/command-line-usage/node_modules/has-flag": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/command-line-usage/node_modules/supports-color": { + "version": "5.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/commander": { + "version": "6.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "packages/three-vrm/node_modules/compare-func": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "array-ify": "^1.0.0", + "dot-prop": "^5.1.0" + } + }, + "packages/three-vrm/node_modules/compare-func/node_modules/dot-prop": { + "version": "5.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "packages/three-vrm/node_modules/compare-func/node_modules/is-obj": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "packages/three-vrm/node_modules/component-emitter": { + "version": "1.3.0", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/concat-map": { + "version": "0.0.1", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/concat-stream": { + "version": "1.6.2", + "dev": true, + "engines": [ + "node >= 0.8" + ], + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "packages/three-vrm/node_modules/config-chain": { + "version": "1.1.13", + "dev": true, + "license": "MIT", + "dependencies": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "packages/three-vrm/node_modules/console-control-strings": { + "version": "1.1.0", + "dev": true, + "license": "ISC" + }, + "packages/three-vrm/node_modules/conventional-changelog-angular": { + "version": "5.0.13", + "dev": true, + "license": "ISC", + "dependencies": { + "compare-func": "^2.0.0", + "q": "^1.5.1" + }, + "engines": { + "node": ">=10" + } + }, + "packages/three-vrm/node_modules/conventional-changelog-core": { + "version": "3.2.3", + "dev": true, + "license": "MIT", + "dependencies": { + "conventional-changelog-writer": "^4.0.6", + "conventional-commits-parser": "^3.0.3", + "dateformat": "^3.0.0", + "get-pkg-repo": "^1.0.0", + "git-raw-commits": "2.0.0", + "git-remote-origin-url": "^2.0.0", + "git-semver-tags": "^2.0.3", + "lodash": "^4.2.1", + "normalize-package-data": "^2.3.5", + "q": "^1.5.1", + "read-pkg": "^3.0.0", + "read-pkg-up": "^3.0.0", + "through2": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "packages/three-vrm/node_modules/conventional-changelog-core/node_modules/through2": { + "version": "3.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "2 || 3" + } + }, + "packages/three-vrm/node_modules/conventional-changelog-preset-loader": { + "version": "2.3.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "packages/three-vrm/node_modules/conventional-changelog-writer": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "compare-func": "^2.0.0", + "conventional-commits-filter": "^2.0.7", + "dateformat": "^3.0.0", + "handlebars": "^4.7.6", + "json-stringify-safe": "^5.0.1", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "semver": "^6.0.0", + "split": "^1.0.0", + "through2": "^4.0.0" + }, + "bin": { + "conventional-changelog-writer": "cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "packages/three-vrm/node_modules/conventional-changelog-writer/node_modules/readable-stream": { + "version": "3.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "packages/three-vrm/node_modules/conventional-changelog-writer/node_modules/safe-buffer": { + "version": "5.2.1", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "packages/three-vrm/node_modules/conventional-changelog-writer/node_modules/semver": { + "version": "6.3.0", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "packages/three-vrm/node_modules/conventional-changelog-writer/node_modules/string_decoder": { + "version": "1.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "packages/three-vrm/node_modules/conventional-changelog-writer/node_modules/through2": { + "version": "4.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "readable-stream": "3" + } + }, + "packages/three-vrm/node_modules/conventional-commits-filter": { + "version": "2.0.7", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash.ismatch": "^4.4.0", + "modify-values": "^1.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "packages/three-vrm/node_modules/conventional-commits-parser": { + "version": "3.2.4", + "dev": true, + "license": "MIT", + "dependencies": { + "is-text-path": "^1.0.1", + "JSONStream": "^1.0.4", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0" + }, + "bin": { + "conventional-commits-parser": "cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "packages/three-vrm/node_modules/conventional-commits-parser/node_modules/readable-stream": { + "version": "3.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "packages/three-vrm/node_modules/conventional-commits-parser/node_modules/safe-buffer": { + "version": "5.2.1", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "packages/three-vrm/node_modules/conventional-commits-parser/node_modules/string_decoder": { + "version": "1.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "packages/three-vrm/node_modules/conventional-commits-parser/node_modules/through2": { + "version": "4.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "readable-stream": "3" + } + }, + "packages/three-vrm/node_modules/conventional-recommended-bump": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "concat-stream": "^2.0.0", + "conventional-changelog-preset-loader": "^2.1.1", + "conventional-commits-filter": "^2.0.2", + "conventional-commits-parser": "^3.0.3", + "git-raw-commits": "2.0.0", + "git-semver-tags": "^2.0.3", + "meow": "^4.0.0", + "q": "^1.5.1" + }, + "bin": { + "conventional-recommended-bump": "cli.js" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "packages/three-vrm/node_modules/conventional-recommended-bump/node_modules/camelcase": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/conventional-recommended-bump/node_modules/camelcase-keys": { + "version": "4.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "camelcase": "^4.1.0", + "map-obj": "^2.0.0", + "quick-lru": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/conventional-recommended-bump/node_modules/concat-stream": { + "version": "2.0.0", + "dev": true, + "engines": [ + "node >= 6.0" + ], + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" + } + }, + "packages/three-vrm/node_modules/conventional-recommended-bump/node_modules/indent-string": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/conventional-recommended-bump/node_modules/map-obj": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/conventional-recommended-bump/node_modules/meow": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "camelcase-keys": "^4.0.0", + "decamelize-keys": "^1.0.0", + "loud-rejection": "^1.0.0", + "minimist": "^1.1.3", + "minimist-options": "^3.0.1", + "normalize-package-data": "^2.3.4", + "read-pkg-up": "^3.0.0", + "redent": "^2.0.0", + "trim-newlines": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/conventional-recommended-bump/node_modules/minimist-options": { + "version": "3.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0" + }, + "engines": { + "node": ">= 4" + } + }, + "packages/three-vrm/node_modules/conventional-recommended-bump/node_modules/quick-lru": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/conventional-recommended-bump/node_modules/readable-stream": { + "version": "3.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "packages/three-vrm/node_modules/conventional-recommended-bump/node_modules/redent": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "indent-string": "^3.0.0", + "strip-indent": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/conventional-recommended-bump/node_modules/safe-buffer": { + "version": "5.2.1", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "packages/three-vrm/node_modules/conventional-recommended-bump/node_modules/string_decoder": { + "version": "1.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "packages/three-vrm/node_modules/conventional-recommended-bump/node_modules/strip-indent": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/conventional-recommended-bump/node_modules/trim-newlines": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/convert-source-map": { + "version": "1.8.0", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "packages/three-vrm/node_modules/copy-concurrently": { + "version": "1.0.5", + "dev": true, + "license": "ISC", + "dependencies": { + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" + } + }, + "packages/three-vrm/node_modules/copy-concurrently/node_modules/aproba": { + "version": "1.2.0", + "dev": true, + "license": "ISC" + }, + "packages/three-vrm/node_modules/copy-concurrently/node_modules/rimraf": { + "version": "2.7.1", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "packages/three-vrm/node_modules/copy-descriptor": { + "version": "0.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/core-util-is": { + "version": "1.0.3", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/cosmiconfig": { + "version": "7.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "packages/three-vrm/node_modules/cross-env": { + "version": "7.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.1" + }, + "bin": { + "cross-env": "src/bin/cross-env.js", + "cross-env-shell": "src/bin/cross-env-shell.js" + }, + "engines": { + "node": ">=10.14", + "npm": ">=6", + "yarn": ">=1" + } + }, + "packages/three-vrm/node_modules/cross-spawn": { + "version": "7.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "packages/three-vrm/node_modules/currently-unhandled": { + "version": "0.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "array-find-index": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/cyclist": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/dargs": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/dashdash": { + "version": "1.14.1", + "dev": true, + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "packages/three-vrm/node_modules/dateformat": { + "version": "3.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "packages/three-vrm/node_modules/debug": { + "version": "4.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "packages/three-vrm/node_modules/debuglog": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "packages/three-vrm/node_modules/decamelize": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/decamelize-keys": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/decamelize-keys/node_modules/map-obj": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/decode-uri-component": { + "version": "0.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "packages/three-vrm/node_modules/dedent": { + "version": "0.7.0", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/deep-extend": { + "version": "0.6.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "packages/three-vrm/node_modules/deep-is": { + "version": "0.1.4", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/defaults": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "clone": "^1.0.2" + } + }, + "packages/three-vrm/node_modules/define-properties": { + "version": "1.1.4", + "dev": true, + "license": "MIT", + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/three-vrm/node_modules/define-property": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/delayed-stream": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "packages/three-vrm/node_modules/delegates": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/deprecation": { + "version": "2.3.1", + "dev": true, + "license": "ISC" + }, + "packages/three-vrm/node_modules/detect-indent": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/dezalgo": { + "version": "1.0.4", + "dev": true, + "license": "ISC", + "dependencies": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, + "packages/three-vrm/node_modules/dir-glob": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "packages/three-vrm/node_modules/doctrine": { + "version": "3.0.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "packages/three-vrm/node_modules/dot-prop": { + "version": "4.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-obj": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/downlevel-dts": { + "version": "0.7.0", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.3.2", + "shelljs": "^0.8.3", + "typescript": "^4.1.0-dev.20201026" + }, + "bin": { + "downlevel-dts": "index.js" + } + }, + "packages/three-vrm/node_modules/downlevel-dts/node_modules/lru-cache": { + "version": "6.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "packages/three-vrm/node_modules/downlevel-dts/node_modules/semver": { + "version": "7.3.7", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "packages/three-vrm/node_modules/downlevel-dts/node_modules/yallist": { + "version": "4.0.0", + "dev": true, + "license": "ISC" + }, + "packages/three-vrm/node_modules/duplexer": { + "version": "0.1.2", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/duplexer2": { + "version": "0.1.4", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "readable-stream": "^2.0.2" + } + }, + "packages/three-vrm/node_modules/duplexify": { + "version": "3.7.1", + "dev": true, + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "packages/three-vrm/node_modules/ecc-jsbn": { + "version": "0.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "packages/three-vrm/node_modules/emoji-regex": { + "version": "8.0.0", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/encoding": { + "version": "0.1.13", + "dev": true, + "license": "MIT", + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "packages/three-vrm/node_modules/end-of-stream": { + "version": "1.4.4", + "dev": true, + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "packages/three-vrm/node_modules/enquirer": { + "version": "2.3.6", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-colors": "^4.1.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "packages/three-vrm/node_modules/env-paths": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "packages/three-vrm/node_modules/envinfo": { + "version": "7.8.1", + "dev": true, + "license": "MIT", + "bin": { + "envinfo": "dist/cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/err-code": { + "version": "1.1.2", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/error-ex": { + "version": "1.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "packages/three-vrm/node_modules/es-abstract": { + "version": "1.20.1", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "regexp.prototype.flags": "^1.4.3", + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/three-vrm/node_modules/es-abstract/node_modules/object-inspect": { + "version": "1.12.2", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/three-vrm/node_modules/es-array-method-boxes-properly": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/es-to-primitive": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/three-vrm/node_modules/es6-promise": { + "version": "4.2.8", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/es6-promisify": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "es6-promise": "^4.0.3" + } + }, + "packages/three-vrm/node_modules/escape-string-regexp": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "packages/three-vrm/node_modules/escodegen": { + "version": "1.9.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esprima": "^3.1.3", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=4.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "packages/three-vrm/node_modules/eslint": { + "version": "7.32.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.3", + "@humanwhocodes/config-array": "^0.5.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.1.2", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.9", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "packages/three-vrm/node_modules/eslint-config-prettier": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "packages/three-vrm/node_modules/eslint-scope": { + "version": "5.1.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "packages/three-vrm/node_modules/eslint-utils": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "packages/three-vrm/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10" + } + }, + "packages/three-vrm/node_modules/eslint/node_modules/@babel/code-frame": { + "version": "7.12.11", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/highlight": "^7.10.4" + } + }, + "packages/three-vrm/node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/three-vrm/node_modules/eslint/node_modules/eslint-utils": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "packages/three-vrm/node_modules/eslint/node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/eslint/node_modules/ignore": { + "version": "4.0.6", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "packages/three-vrm/node_modules/eslint/node_modules/levn": { + "version": "0.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "packages/three-vrm/node_modules/eslint/node_modules/lru-cache": { + "version": "6.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "packages/three-vrm/node_modules/eslint/node_modules/optionator": { + "version": "0.9.1", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "packages/three-vrm/node_modules/eslint/node_modules/prelude-ls": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "packages/three-vrm/node_modules/eslint/node_modules/semver": { + "version": "7.3.7", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "packages/three-vrm/node_modules/eslint/node_modules/type-check": { + "version": "0.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "packages/three-vrm/node_modules/eslint/node_modules/yallist": { + "version": "4.0.0", + "dev": true, + "license": "ISC" + }, + "packages/three-vrm/node_modules/espree": { + "version": "7.3.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "packages/three-vrm/node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/esprima": { + "version": "3.1.3", + "dev": true, + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/esquery": { + "version": "1.4.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "packages/three-vrm/node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "packages/three-vrm/node_modules/esrecurse": { + "version": "4.3.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "packages/three-vrm/node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "packages/three-vrm/node_modules/estraverse": { + "version": "4.3.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "packages/three-vrm/node_modules/estree-walker": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/esutils": { + "version": "2.0.3", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/eventemitter3": { + "version": "3.1.2", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/execa": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "packages/three-vrm/node_modules/expand-brackets": { + "version": "2.1.4", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/expand-brackets/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "packages/three-vrm/node_modules/expand-brackets/node_modules/define-property": { + "version": "0.2.5", + "dev": true, + "license": "MIT", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/expand-brackets/node_modules/extend-shallow": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/expand-brackets/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/expand-brackets/node_modules/is-data-descriptor": { + "version": "0.1.4", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/expand-brackets/node_modules/is-descriptor": { + "version": "0.1.6", + "dev": true, + "license": "MIT", + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/expand-brackets/node_modules/is-extendable": { + "version": "0.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/expand-brackets/node_modules/kind-of": { + "version": "5.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/expand-brackets/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/extend": { + "version": "3.0.2", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/extend-shallow": { + "version": "3.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/external-editor": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/external-editor/node_modules/iconv-lite": { + "version": "0.4.24", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/extglob": { + "version": "2.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/extglob/node_modules/define-property": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/extglob/node_modules/extend-shallow": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/extglob/node_modules/is-extendable": { + "version": "0.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/extsprintf": { + "version": "1.3.0", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "license": "MIT" + }, + "packages/three-vrm/node_modules/falafel": { + "version": "2.2.5", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^7.1.1", + "isarray": "^2.0.1" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "packages/three-vrm/node_modules/falafel/node_modules/isarray": { + "version": "2.0.5", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/fast-deep-equal": { + "version": "3.1.3", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/fast-glob": { + "version": "3.2.11", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "packages/three-vrm/node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/fast-levenshtein": { + "version": "2.0.6", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/fastq": { + "version": "1.13.0", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "packages/three-vrm/node_modules/figgy-pudding": { + "version": "3.5.2", + "dev": true, + "license": "ISC" + }, + "packages/three-vrm/node_modules/figures": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/file-entry-cache": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "packages/three-vrm/node_modules/fill-range": { + "version": "7.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "packages/three-vrm/node_modules/filter-obj": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/find-replace": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "array-back": "^1.0.4", + "test-value": "^2.1.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "packages/three-vrm/node_modules/find-replace/node_modules/array-back": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "typical": "^2.6.0" + }, + "engines": { + "node": ">=0.12.0" + } + }, + "packages/three-vrm/node_modules/find-up": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "packages/three-vrm/node_modules/flat-cache": { + "version": "3.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "packages/three-vrm/node_modules/flatted": { + "version": "3.2.6", + "dev": true, + "license": "ISC" + }, + "packages/three-vrm/node_modules/flush-write-stream": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + } + }, + "packages/three-vrm/node_modules/flush-write-stream/node_modules/process-nextick-args": { + "version": "2.0.1", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/flush-write-stream/node_modules/readable-stream": { + "version": "2.3.7", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "packages/three-vrm/node_modules/flush-write-stream/node_modules/string_decoder": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "packages/three-vrm/node_modules/for-in": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/forever-agent": { + "version": "0.6.1", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "packages/three-vrm/node_modules/form-data": { + "version": "2.3.3", + "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "packages/three-vrm/node_modules/fragment-cache": { + "version": "0.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "map-cache": "^0.2.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/from2": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "packages/three-vrm/node_modules/fs-extra": { + "version": "8.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "packages/three-vrm/node_modules/fs-minipass": { + "version": "1.2.7", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^2.6.0" + } + }, + "packages/three-vrm/node_modules/fs-write-stream-atomic": { + "version": "1.0.10", + "dev": true, + "license": "ISC", + "dependencies": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" + } + }, + "packages/three-vrm/node_modules/fs.realpath": { + "version": "1.0.0", + "dev": true, + "license": "ISC" + }, + "packages/three-vrm/node_modules/function-bind": { + "version": "1.1.1", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/function.prototype.name": { + "version": "1.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/three-vrm/node_modules/functional-red-black-tree": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/functions-have-names": { + "version": "1.2.3", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/three-vrm/node_modules/gauge": { + "version": "2.7.4", + "dev": true, + "license": "ISC", + "dependencies": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "packages/three-vrm/node_modules/gauge/node_modules/ansi-regex": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/gauge/node_modules/aproba": { + "version": "1.2.0", + "dev": true, + "license": "ISC" + }, + "packages/three-vrm/node_modules/gauge/node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/gauge/node_modules/string-width": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/gauge/node_modules/strip-ansi": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/genfun": { + "version": "5.0.0", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/get-caller-file": { + "version": "1.0.3", + "dev": true, + "license": "ISC" + }, + "packages/three-vrm/node_modules/get-intrinsic": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/three-vrm/node_modules/get-own-enumerable-property-symbols": { + "version": "3.0.2", + "dev": true, + "license": "ISC" + }, + "packages/three-vrm/node_modules/get-pkg-repo": { + "version": "1.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "hosted-git-info": "^2.1.4", + "meow": "^3.3.0", + "normalize-package-data": "^2.3.0", + "parse-github-repo-url": "^1.3.0", + "through2": "^2.0.0" + }, + "bin": { + "get-pkg-repo": "cli.js" + } + }, + "packages/three-vrm/node_modules/get-pkg-repo/node_modules/camelcase": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/get-pkg-repo/node_modules/camelcase-keys": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "camelcase": "^2.0.0", + "map-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/get-pkg-repo/node_modules/find-up": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/get-pkg-repo/node_modules/indent-string": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "repeating": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/get-pkg-repo/node_modules/load-json-file": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/get-pkg-repo/node_modules/map-obj": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/get-pkg-repo/node_modules/meow": { + "version": "3.7.0", + "dev": true, + "license": "MIT", + "dependencies": { + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", + "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/get-pkg-repo/node_modules/parse-json": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "error-ex": "^1.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/get-pkg-repo/node_modules/path-exists": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/get-pkg-repo/node_modules/path-type": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/get-pkg-repo/node_modules/pify": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/get-pkg-repo/node_modules/read-pkg": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/get-pkg-repo/node_modules/read-pkg-up": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/get-pkg-repo/node_modules/redent": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "indent-string": "^2.1.0", + "strip-indent": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/get-pkg-repo/node_modules/strip-bom": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "is-utf8": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/get-pkg-repo/node_modules/strip-indent": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "get-stdin": "^4.0.1" + }, + "bin": { + "strip-indent": "cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/get-pkg-repo/node_modules/trim-newlines": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/get-port": { + "version": "4.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "packages/three-vrm/node_modules/get-stdin": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/get-stream": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/three-vrm/node_modules/get-symbol-description": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/three-vrm/node_modules/get-value": { + "version": "2.0.6", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/getpass": { + "version": "0.1.7", + "dev": true, + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "packages/three-vrm/node_modules/git-raw-commits": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "dargs": "^4.0.1", + "lodash.template": "^4.0.2", + "meow": "^4.0.0", + "split2": "^2.0.0", + "through2": "^2.0.0" + }, + "bin": { + "git-raw-commits": "cli.js" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "packages/three-vrm/node_modules/git-raw-commits/node_modules/camelcase": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/git-raw-commits/node_modules/camelcase-keys": { + "version": "4.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "camelcase": "^4.1.0", + "map-obj": "^2.0.0", + "quick-lru": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/git-raw-commits/node_modules/indent-string": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/git-raw-commits/node_modules/map-obj": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/git-raw-commits/node_modules/meow": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "camelcase-keys": "^4.0.0", + "decamelize-keys": "^1.0.0", + "loud-rejection": "^1.0.0", + "minimist": "^1.1.3", + "minimist-options": "^3.0.1", + "normalize-package-data": "^2.3.4", + "read-pkg-up": "^3.0.0", + "redent": "^2.0.0", + "trim-newlines": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/git-raw-commits/node_modules/minimist-options": { + "version": "3.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0" + }, + "engines": { + "node": ">= 4" + } + }, + "packages/three-vrm/node_modules/git-raw-commits/node_modules/quick-lru": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/git-raw-commits/node_modules/redent": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "indent-string": "^3.0.0", + "strip-indent": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/git-raw-commits/node_modules/split2": { + "version": "2.2.0", + "dev": true, + "license": "ISC", + "dependencies": { + "through2": "^2.0.2" + } + }, + "packages/three-vrm/node_modules/git-raw-commits/node_modules/strip-indent": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/git-raw-commits/node_modules/trim-newlines": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/git-remote-origin-url": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "gitconfiglocal": "^1.0.0", + "pify": "^2.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/git-remote-origin-url/node_modules/pify": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/git-semver-tags": { + "version": "2.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "meow": "^4.0.0", + "semver": "^6.0.0" + }, + "bin": { + "git-semver-tags": "cli.js" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "packages/three-vrm/node_modules/git-semver-tags/node_modules/camelcase": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/git-semver-tags/node_modules/camelcase-keys": { + "version": "4.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "camelcase": "^4.1.0", + "map-obj": "^2.0.0", + "quick-lru": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/git-semver-tags/node_modules/indent-string": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/git-semver-tags/node_modules/map-obj": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/git-semver-tags/node_modules/meow": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "camelcase-keys": "^4.0.0", + "decamelize-keys": "^1.0.0", + "loud-rejection": "^1.0.0", + "minimist": "^1.1.3", + "minimist-options": "^3.0.1", + "normalize-package-data": "^2.3.4", + "read-pkg-up": "^3.0.0", + "redent": "^2.0.0", + "trim-newlines": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/git-semver-tags/node_modules/minimist-options": { + "version": "3.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0" + }, + "engines": { + "node": ">= 4" + } + }, + "packages/three-vrm/node_modules/git-semver-tags/node_modules/quick-lru": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/git-semver-tags/node_modules/redent": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "indent-string": "^3.0.0", + "strip-indent": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/git-semver-tags/node_modules/semver": { + "version": "6.3.0", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "packages/three-vrm/node_modules/git-semver-tags/node_modules/strip-indent": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/git-semver-tags/node_modules/trim-newlines": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/git-up": { + "version": "4.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "is-ssh": "^1.3.0", + "parse-url": "^6.0.0" + } + }, + "packages/three-vrm/node_modules/git-url-parse": { + "version": "11.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "git-up": "^4.0.0" + } + }, + "packages/three-vrm/node_modules/gitconfiglocal": { + "version": "1.0.0", + "dev": true, + "license": "BSD", + "dependencies": { + "ini": "^1.3.2" + } + }, + "packages/three-vrm/node_modules/glob": { + "version": "7.1.7", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "packages/three-vrm/node_modules/glob-parent": { + "version": "5.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "packages/three-vrm/node_modules/glob-to-regexp": { + "version": "0.3.0", + "dev": true, + "license": "BSD" + }, + "packages/three-vrm/node_modules/globals": { + "version": "13.17.0", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/three-vrm/node_modules/globals/node_modules/type-fest": { + "version": "0.20.2", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/three-vrm/node_modules/globby": { + "version": "11.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/three-vrm/node_modules/graceful-fs": { + "version": "4.2.10", + "dev": true, + "license": "ISC" + }, + "packages/three-vrm/node_modules/graphql": { + "version": "0.11.7", + "dev": true, + "license": "MIT", + "dependencies": { + "iterall": "1.1.3" + } + }, + "packages/three-vrm/node_modules/handlebars": { + "version": "4.7.7", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "packages/three-vrm/node_modules/har-schema": { + "version": "2.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/har-validator": { + "version": "5.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "packages/three-vrm/node_modules/hard-rejection": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "packages/three-vrm/node_modules/has": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "packages/three-vrm/node_modules/has-bigints": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/three-vrm/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "packages/three-vrm/node_modules/has-property-descriptors": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/three-vrm/node_modules/has-symbols": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/three-vrm/node_modules/has-tostringtag": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/three-vrm/node_modules/has-unicode": { + "version": "2.0.1", + "dev": true, + "license": "ISC" + }, + "packages/three-vrm/node_modules/has-value": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/has-values": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/has-values/node_modules/is-number": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/has-values/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/has-values/node_modules/kind-of": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/hosted-git-info": { + "version": "2.8.9", + "dev": true, + "license": "ISC" + }, + "packages/three-vrm/node_modules/http-cache-semantics": { + "version": "3.8.1", + "dev": true, + "license": "BSD-2-Clause" + }, + "packages/three-vrm/node_modules/http-proxy-agent": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "4", + "debug": "3.1.0" + }, + "engines": { + "node": ">= 4.5.0" + } + }, + "packages/three-vrm/node_modules/http-proxy-agent/node_modules/debug": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "packages/three-vrm/node_modules/http-proxy-agent/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/http-signature": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "packages/three-vrm/node_modules/https-proxy-agent": { + "version": "2.2.4", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^4.3.0", + "debug": "^3.1.0" + }, + "engines": { + "node": ">= 4.5.0" + } + }, + "packages/three-vrm/node_modules/https-proxy-agent/node_modules/debug": { + "version": "3.2.7", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "packages/three-vrm/node_modules/human-signals": { + "version": "1.1.1", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8.12.0" + } + }, + "packages/three-vrm/node_modules/humanize-ms": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.0.0" + } + }, + "packages/three-vrm/node_modules/iconv-lite": { + "version": "0.6.3", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/iferr": { + "version": "0.1.5", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/ignore": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "packages/three-vrm/node_modules/ignore-walk": { + "version": "3.0.4", + "dev": true, + "license": "ISC", + "dependencies": { + "minimatch": "^3.0.4" + } + }, + "packages/three-vrm/node_modules/import-fresh": { + "version": "3.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/three-vrm/node_modules/import-local": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "packages/three-vrm/node_modules/imurmurhash": { + "version": "0.1.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "packages/three-vrm/node_modules/indent-string": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "packages/three-vrm/node_modules/infer-owner": { + "version": "1.0.4", + "dev": true, + "license": "ISC" + }, + "packages/three-vrm/node_modules/inflight": { + "version": "1.0.6", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "packages/three-vrm/node_modules/inherits": { + "version": "2.0.4", + "dev": true, + "license": "ISC" + }, + "packages/three-vrm/node_modules/ini": { + "version": "1.3.8", + "dev": true, + "license": "ISC" + }, + "packages/three-vrm/node_modules/init-package-json": { + "version": "1.10.3", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.1", + "npm-package-arg": "^4.0.0 || ^5.0.0 || ^6.0.0", + "promzard": "^0.3.0", + "read": "~1.0.1", + "read-package-json": "1 || 2", + "semver": "2.x || 3.x || 4 || 5", + "validate-npm-package-license": "^3.0.1", + "validate-npm-package-name": "^3.0.0" + } + }, + "packages/three-vrm/node_modules/inquirer": { + "version": "6.5.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^3.2.0", + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.3", + "figures": "^2.0.0", + "lodash": "^4.17.12", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rxjs": "^6.4.0", + "string-width": "^2.1.0", + "strip-ansi": "^5.1.0", + "through": "^2.3.6" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "packages/three-vrm/node_modules/inquirer/node_modules/ansi-escapes": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/inquirer/node_modules/ansi-regex": { + "version": "4.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "packages/three-vrm/node_modules/inquirer/node_modules/ansi-styles": { + "version": "3.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/inquirer/node_modules/chalk": { + "version": "2.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/inquirer/node_modules/cli-cursor": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/inquirer/node_modules/color-convert": { + "version": "1.9.3", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "packages/three-vrm/node_modules/inquirer/node_modules/color-name": { + "version": "1.1.3", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/inquirer/node_modules/has-flag": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/inquirer/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/inquirer/node_modules/mimic-fn": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/inquirer/node_modules/onetime": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/inquirer/node_modules/restore-cursor": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/inquirer/node_modules/rxjs": { + "version": "6.6.7", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "packages/three-vrm/node_modules/inquirer/node_modules/string-width": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/inquirer/node_modules/string-width/node_modules/ansi-regex": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/inquirer/node_modules/string-width/node_modules/strip-ansi": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/inquirer/node_modules/strip-ansi": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "packages/three-vrm/node_modules/inquirer/node_modules/supports-color": { + "version": "5.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/inquirer/node_modules/tslib": { + "version": "1.14.1", + "dev": true, + "license": "0BSD" + }, + "packages/three-vrm/node_modules/internal-slot": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "packages/three-vrm/node_modules/interpret": { + "version": "1.4.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "packages/three-vrm/node_modules/invert-kv": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/ip": { + "version": "1.1.5", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/is-arrayish": { + "version": "0.2.1", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/is-bigint": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/three-vrm/node_modules/is-boolean-object": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/three-vrm/node_modules/is-buffer": { + "version": "1.1.6", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/is-callable": { + "version": "1.2.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/three-vrm/node_modules/is-ci": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ci-info": "^2.0.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "packages/three-vrm/node_modules/is-core-module": { + "version": "2.9.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/three-vrm/node_modules/is-data-descriptor": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/is-date-object": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/three-vrm/node_modules/is-descriptor": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/is-directory": { + "version": "0.3.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/is-extendable": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/is-extendable/node_modules/is-plain-object": { + "version": "2.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/is-extglob": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/is-finite": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/three-vrm/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "packages/three-vrm/node_modules/is-glob": { + "version": "4.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/is-negative-zero": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/three-vrm/node_modules/is-number": { + "version": "7.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "packages/three-vrm/node_modules/is-number-object": { + "version": "1.0.7", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/three-vrm/node_modules/is-obj": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/is-plain-obj": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/is-plain-object": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/is-regex": { + "version": "1.1.4", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/three-vrm/node_modules/is-regexp": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/three-vrm/node_modules/is-ssh": { + "version": "1.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "protocols": "^2.0.1" + } + }, + "packages/three-vrm/node_modules/is-stream": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/three-vrm/node_modules/is-string": { + "version": "1.0.7", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/three-vrm/node_modules/is-symbol": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/three-vrm/node_modules/is-text-path": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "text-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/is-typedarray": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/is-unicode-supported": { + "version": "0.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/three-vrm/node_modules/is-url": { + "version": "1.2.4", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/is-utf8": { + "version": "0.2.1", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/is-weakref": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/three-vrm/node_modules/is-windows": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/isarray": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/isexe": { + "version": "2.0.0", + "dev": true, + "license": "ISC" + }, + "packages/three-vrm/node_modules/isobject": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/isomorphic-fetch": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "node-fetch": "^1.0.1", + "whatwg-fetch": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/isomorphic-fetch/node_modules/is-stream": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/isomorphic-fetch/node_modules/node-fetch": { + "version": "1.7.3", + "dev": true, + "license": "MIT", + "dependencies": { + "encoding": "^0.1.11", + "is-stream": "^1.0.1" + } + }, + "packages/three-vrm/node_modules/isstream": { + "version": "0.1.2", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/iterall": { + "version": "1.1.3", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/jest-worker": { + "version": "26.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "packages/three-vrm/node_modules/js-base64": { + "version": "2.6.4", + "dev": true, + "license": "BSD-3-Clause" + }, + "packages/three-vrm/node_modules/js-tokens": { + "version": "4.0.0", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/js-yaml": { + "version": "3.14.1", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "packages/three-vrm/node_modules/js-yaml/node_modules/esprima": { + "version": "4.0.1", + "dev": true, + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/jsbn": { + "version": "0.1.1", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/json-parse-better-errors": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/json-schema": { + "version": "0.4.0", + "dev": true, + "license": "(AFL-2.1 OR BSD-3-Clause)" + }, + "packages/three-vrm/node_modules/json-schema-traverse": { + "version": "0.4.1", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/json-stable-stringify": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "jsonify": "~0.0.0" + } + }, + "packages/three-vrm/node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/json-stringify-safe": { + "version": "5.0.1", + "dev": true, + "license": "ISC" + }, + "packages/three-vrm/node_modules/jsonc-parser": { + "version": "3.1.0", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/jsonfile": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "packages/three-vrm/node_modules/jsonify": { + "version": "0.0.0", + "dev": true, + "license": "Public Domain" + }, + "packages/three-vrm/node_modules/jsonparse": { + "version": "1.3.1", + "dev": true, + "engines": [ + "node >= 0.2.0" + ], + "license": "MIT" + }, + "packages/three-vrm/node_modules/JSONStream": { + "version": "1.3.5", + "dev": true, + "license": "(MIT OR Apache-2.0)", + "dependencies": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + }, + "bin": { + "JSONStream": "bin.js" + }, + "engines": { + "node": "*" + } + }, + "packages/three-vrm/node_modules/jsprim": { + "version": "1.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "packages/three-vrm/node_modules/kind-of": { + "version": "6.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/lcid": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "invert-kv": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "packages/three-vrm/node_modules/lerna": { + "version": "3.22.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/add": "3.21.0", + "@lerna/bootstrap": "3.21.0", + "@lerna/changed": "3.21.0", + "@lerna/clean": "3.21.0", + "@lerna/cli": "3.18.5", + "@lerna/create": "3.22.0", + "@lerna/diff": "3.21.0", + "@lerna/exec": "3.21.0", + "@lerna/import": "3.22.0", + "@lerna/info": "3.21.0", + "@lerna/init": "3.21.0", + "@lerna/link": "3.21.0", + "@lerna/list": "3.21.0", + "@lerna/publish": "3.22.1", + "@lerna/run": "3.21.0", + "@lerna/version": "3.22.1", + "import-local": "^2.0.0", + "npmlog": "^4.1.2" + }, + "bin": { + "lerna": "cli.js" + }, + "engines": { + "node": ">= 6.9.0" + } + }, + "packages/three-vrm/node_modules/levn": { + "version": "0.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "packages/three-vrm/node_modules/lines-and-columns": { + "version": "1.2.4", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/lint-staged": { + "version": "10.5.4", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "cli-truncate": "^2.1.0", + "commander": "^6.2.0", + "cosmiconfig": "^7.0.0", + "debug": "^4.2.0", + "dedent": "^0.7.0", + "enquirer": "^2.3.6", + "execa": "^4.1.0", + "listr2": "^3.2.2", + "log-symbols": "^4.0.0", + "micromatch": "^4.0.2", + "normalize-path": "^3.0.0", + "please-upgrade-node": "^3.2.0", + "string-argv": "0.3.1", + "stringify-object": "^3.3.0" + }, + "bin": { + "lint-staged": "bin/lint-staged.js" + }, + "funding": { + "url": "https://opencollective.com/lint-staged" + } + }, + "packages/three-vrm/node_modules/listr2": { + "version": "3.14.0", + "dev": true, + "license": "MIT", + "dependencies": { + "cli-truncate": "^2.1.0", + "colorette": "^2.0.16", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rfdc": "^1.3.0", + "rxjs": "^7.5.1", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "enquirer": ">= 2.3.0 < 3" + }, + "peerDependenciesMeta": { + "enquirer": { + "optional": true + } + } + }, + "packages/three-vrm/node_modules/load-json-file": { + "version": "5.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.15", + "parse-json": "^4.0.0", + "pify": "^4.0.1", + "strip-bom": "^3.0.0", + "type-fest": "^0.3.0" + }, + "engines": { + "node": ">=6" + } + }, + "packages/three-vrm/node_modules/load-json-file/node_modules/parse-json": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/load-json-file/node_modules/type-fest": { + "version": "0.3.1", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=6" + } + }, + "packages/three-vrm/node_modules/locate-path": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "packages/three-vrm/node_modules/lodash": { + "version": "4.17.21", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/lodash._reinterpolate": { + "version": "3.0.0", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/lodash.clonedeep": { + "version": "4.5.0", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/lodash.get": { + "version": "4.4.2", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/lodash.ismatch": { + "version": "4.4.0", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/lodash.merge": { + "version": "4.6.2", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/lodash.padend": { + "version": "4.6.1", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/lodash.set": { + "version": "4.3.2", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/lodash.sortby": { + "version": "4.7.0", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/lodash.template": { + "version": "4.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash._reinterpolate": "^3.0.0", + "lodash.templatesettings": "^4.0.0" + } + }, + "packages/three-vrm/node_modules/lodash.templatesettings": { + "version": "4.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash._reinterpolate": "^3.0.0" + } + }, + "packages/three-vrm/node_modules/lodash.truncate": { + "version": "4.4.2", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/lodash.uniq": { + "version": "4.5.0", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/log-symbols": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/three-vrm/node_modules/log-update": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/three-vrm/node_modules/log-update/node_modules/slice-ansi": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "packages/three-vrm/node_modules/log-update/node_modules/wrap-ansi": { + "version": "6.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "packages/three-vrm/node_modules/loud-rejection": { + "version": "1.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/lru-cache": { + "version": "5.1.1", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "packages/three-vrm/node_modules/lunr": { + "version": "2.3.9", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/macos-release": { + "version": "2.5.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/three-vrm/node_modules/magic-string": { + "version": "0.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "vlq": "^0.2.2" + } + }, + "packages/three-vrm/node_modules/make-dir": { + "version": "1.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/make-dir/node_modules/pify": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/make-fetch-happen": { + "version": "5.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "agentkeepalive": "^3.4.1", + "cacache": "^12.0.0", + "http-cache-semantics": "^3.8.1", + "http-proxy-agent": "^2.1.0", + "https-proxy-agent": "^2.2.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "node-fetch-npm": "^2.0.2", + "promise-retry": "^1.1.1", + "socks-proxy-agent": "^4.0.0", + "ssri": "^6.0.0" + } + }, + "packages/three-vrm/node_modules/map-age-cleaner": { + "version": "0.1.3", + "dev": true, + "license": "MIT", + "dependencies": { + "p-defer": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "packages/three-vrm/node_modules/map-cache": { + "version": "0.2.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/map-obj": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/three-vrm/node_modules/map-visit": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/marked": { + "version": "2.0.7", + "dev": true, + "license": "MIT", + "bin": { + "marked": "bin/marked" + }, + "engines": { + "node": ">= 8.16.2" + } + }, + "packages/three-vrm/node_modules/mem": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^2.0.0", + "p-is-promise": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "packages/three-vrm/node_modules/meow": { + "version": "8.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/three-vrm/node_modules/meow/node_modules/find-up": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "packages/three-vrm/node_modules/meow/node_modules/hosted-git-info": { + "version": "4.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "packages/three-vrm/node_modules/meow/node_modules/locate-path": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "packages/three-vrm/node_modules/meow/node_modules/lru-cache": { + "version": "6.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "packages/three-vrm/node_modules/meow/node_modules/normalize-package-data": { + "version": "3.0.3", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "packages/three-vrm/node_modules/meow/node_modules/p-locate": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "packages/three-vrm/node_modules/meow/node_modules/path-exists": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "packages/three-vrm/node_modules/meow/node_modules/read-pkg": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "packages/three-vrm/node_modules/meow/node_modules/read-pkg-up": { + "version": "7.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/three-vrm/node_modules/meow/node_modules/read-pkg-up/node_modules/type-fest": { + "version": "0.8.1", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=8" + } + }, + "packages/three-vrm/node_modules/meow/node_modules/read-pkg/node_modules/hosted-git-info": { + "version": "2.8.9", + "dev": true, + "license": "ISC" + }, + "packages/three-vrm/node_modules/meow/node_modules/read-pkg/node_modules/normalize-package-data": { + "version": "2.5.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "packages/three-vrm/node_modules/meow/node_modules/read-pkg/node_modules/semver": { + "version": "5.7.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "packages/three-vrm/node_modules/meow/node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=8" + } + }, + "packages/three-vrm/node_modules/meow/node_modules/semver": { + "version": "7.3.7", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "packages/three-vrm/node_modules/meow/node_modules/type-fest": { + "version": "0.18.1", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/three-vrm/node_modules/meow/node_modules/yallist": { + "version": "4.0.0", + "dev": true, + "license": "ISC" + }, + "packages/three-vrm/node_modules/meow/node_modules/yargs-parser": { + "version": "20.2.9", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "packages/three-vrm/node_modules/merge-source-map": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "source-map": "^0.5.6" + } + }, + "packages/three-vrm/node_modules/merge-source-map/node_modules/source-map": { + "version": "0.5.7", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/merge-stream": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/merge2": { + "version": "1.4.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "packages/three-vrm/node_modules/micromatch": { + "version": "4.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "packages/three-vrm/node_modules/mime": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "packages/three-vrm/node_modules/mime-db": { + "version": "1.52.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "packages/three-vrm/node_modules/mime-types": { + "version": "2.1.35", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "packages/three-vrm/node_modules/mimic-fn": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "packages/three-vrm/node_modules/min-indent": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/minimatch": { + "version": "3.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "packages/three-vrm/node_modules/minimist": { + "version": "1.2.6", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/minimist-options": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + }, + "engines": { + "node": ">= 6" + } + }, + "packages/three-vrm/node_modules/minipass": { + "version": "2.9.0", + "dev": true, + "license": "ISC", + "dependencies": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "packages/three-vrm/node_modules/minizlib": { + "version": "1.3.3", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^2.9.0" + } + }, + "packages/three-vrm/node_modules/mississippi": { + "version": "3.0.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^3.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "packages/three-vrm/node_modules/mixin-deep": { + "version": "1.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/mkdirp": { + "version": "0.5.6", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "packages/three-vrm/node_modules/mkdirp-promise": { + "version": "5.0.1", + "dev": true, + "license": "ISC", + "dependencies": { + "mkdirp": "*" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/modify-values": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/moment": { + "version": "2.29.4", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "packages/three-vrm/node_modules/move-concurrently": { + "version": "1.0.1", + "dev": true, + "license": "ISC", + "dependencies": { + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" + } + }, + "packages/three-vrm/node_modules/move-concurrently/node_modules/aproba": { + "version": "1.2.0", + "dev": true, + "license": "ISC" + }, + "packages/three-vrm/node_modules/move-concurrently/node_modules/rimraf": { + "version": "2.7.1", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "packages/three-vrm/node_modules/ms": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/multimatch": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "array-differ": "^2.0.3", + "array-union": "^1.0.2", + "arrify": "^1.0.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=6" + } + }, + "packages/three-vrm/node_modules/multimatch/node_modules/array-union": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "array-uniq": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/mute-stream": { + "version": "0.0.7", + "dev": true, + "license": "ISC" + }, + "packages/three-vrm/node_modules/mz": { + "version": "2.7.0", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "packages/three-vrm/node_modules/nanomatch": { + "version": "1.2.13", + "dev": true, + "license": "MIT", + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/natural-compare": { + "version": "1.4.0", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/neo-async": { + "version": "2.6.2", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/nice-try": { + "version": "1.0.5", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/node-fetch": { + "version": "2.6.7", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "packages/three-vrm/node_modules/node-fetch-npm": { + "version": "2.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "encoding": "^0.1.11", + "json-parse-better-errors": "^1.0.0", + "safe-buffer": "^5.1.1" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/node-gyp": { + "version": "5.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.2", + "mkdirp": "^0.5.1", + "nopt": "^4.0.1", + "npmlog": "^4.1.2", + "request": "^2.88.0", + "rimraf": "^2.6.3", + "semver": "^5.7.1", + "tar": "^4.4.12", + "which": "^1.3.1" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "packages/three-vrm/node_modules/node-gyp/node_modules/rimraf": { + "version": "2.7.1", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "packages/three-vrm/node_modules/node-gyp/node_modules/which": { + "version": "1.3.1", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "packages/three-vrm/node_modules/nopt": { + "version": "4.0.3", + "dev": true, + "license": "ISC", + "dependencies": { + "abbrev": "1", + "osenv": "^0.1.4" + }, + "bin": { + "nopt": "bin/nopt.js" + } + }, + "packages/three-vrm/node_modules/normalize-package-data": { + "version": "2.5.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "packages/three-vrm/node_modules/normalize-path": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/normalize-url": { + "version": "6.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/three-vrm/node_modules/npm-bundled": { + "version": "1.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "packages/three-vrm/node_modules/npm-lifecycle": { + "version": "3.1.5", + "dev": true, + "license": "Artistic-2.0", + "dependencies": { + "byline": "^5.0.0", + "graceful-fs": "^4.1.15", + "node-gyp": "^5.0.2", + "resolve-from": "^4.0.0", + "slide": "^1.1.6", + "uid-number": "0.0.6", + "umask": "^1.1.0", + "which": "^1.3.1" + } + }, + "packages/three-vrm/node_modules/npm-lifecycle/node_modules/which": { + "version": "1.3.1", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "packages/three-vrm/node_modules/npm-normalize-package-bin": { + "version": "1.0.1", + "dev": true, + "license": "ISC" + }, + "packages/three-vrm/node_modules/npm-package-arg": { + "version": "6.1.1", + "dev": true, + "license": "ISC", + "dependencies": { + "hosted-git-info": "^2.7.1", + "osenv": "^0.1.5", + "semver": "^5.6.0", + "validate-npm-package-name": "^3.0.0" + } + }, + "packages/three-vrm/node_modules/npm-packlist": { + "version": "1.4.8", + "dev": true, + "license": "ISC", + "dependencies": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "packages/three-vrm/node_modules/npm-pick-manifest": { + "version": "3.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "figgy-pudding": "^3.5.1", + "npm-package-arg": "^6.0.0", + "semver": "^5.4.1" + } + }, + "packages/three-vrm/node_modules/npm-run-path": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "packages/three-vrm/node_modules/npmlog": { + "version": "4.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "packages/three-vrm/node_modules/number-is-nan": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/oauth-sign": { + "version": "0.9.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "packages/three-vrm/node_modules/object-assign": { + "version": "4.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/object-copy": { + "version": "0.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/object-copy/node_modules/define-property": { + "version": "0.2.5", + "dev": true, + "license": "MIT", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/object-copy/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/object-copy/node_modules/is-data-descriptor": { + "version": "0.1.4", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/object-copy/node_modules/is-descriptor": { + "version": "0.1.6", + "dev": true, + "license": "MIT", + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of": { + "version": "5.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/object-copy/node_modules/kind-of": { + "version": "3.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/object-inspect": { + "version": "1.4.1", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/object-keys": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "packages/three-vrm/node_modules/object-visit": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/object.assign": { + "version": "4.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/three-vrm/node_modules/object.getownpropertydescriptors": { + "version": "2.1.4", + "dev": true, + "license": "MIT", + "dependencies": { + "array.prototype.reduce": "^1.0.4", + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/three-vrm/node_modules/object.pick": { + "version": "1.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/octokit-pagination-methods": { + "version": "1.1.0", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/once": { + "version": "1.4.0", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "packages/three-vrm/node_modules/onetime": { + "version": "5.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/three-vrm/node_modules/opener": { + "version": "1.5.2", + "dev": true, + "license": "(WTFPL OR MIT)", + "bin": { + "opener": "bin/opener-bin.js" + } + }, + "packages/three-vrm/node_modules/optionator": { + "version": "0.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "packages/three-vrm/node_modules/os-homedir": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/os-locale": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "execa": "^1.0.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "packages/three-vrm/node_modules/os-locale/node_modules/cross-spawn": { + "version": "6.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "packages/three-vrm/node_modules/os-locale/node_modules/execa": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "packages/three-vrm/node_modules/os-locale/node_modules/get-stream": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "packages/three-vrm/node_modules/os-locale/node_modules/is-stream": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/os-locale/node_modules/npm-run-path": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/os-locale/node_modules/path-key": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/os-locale/node_modules/shebang-command": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/os-locale/node_modules/shebang-regex": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/os-locale/node_modules/which": { + "version": "1.3.1", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "packages/three-vrm/node_modules/os-name": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "macos-release": "^2.2.0", + "windows-release": "^3.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "packages/three-vrm/node_modules/os-tmpdir": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/osenv": { + "version": "0.1.5", + "dev": true, + "license": "ISC", + "dependencies": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "packages/three-vrm/node_modules/p-defer": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/p-finally": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/p-is-promise": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "packages/three-vrm/node_modules/p-limit": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/three-vrm/node_modules/p-locate": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "packages/three-vrm/node_modules/p-map": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/three-vrm/node_modules/p-map-series": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-reduce": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/p-pipe": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/p-queue": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "eventemitter3": "^3.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "packages/three-vrm/node_modules/p-reduce": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/p-try": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "packages/three-vrm/node_modules/p-waterfall": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-reduce": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/pako": { + "version": "1.0.11", + "dev": true, + "license": "(MIT AND Zlib)" + }, + "packages/three-vrm/node_modules/parallel-transform": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "cyclist": "^1.0.1", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + } + }, + "packages/three-vrm/node_modules/parent-module": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "packages/three-vrm/node_modules/parse-github-repo-url": { + "version": "1.4.1", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/parse-json": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/three-vrm/node_modules/parse-path": { + "version": "4.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "is-ssh": "^1.3.0", + "protocols": "^1.4.0", + "qs": "^6.9.4", + "query-string": "^6.13.8" + } + }, + "packages/three-vrm/node_modules/parse-path/node_modules/protocols": { + "version": "1.4.8", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/parse-url": { + "version": "6.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "is-ssh": "^1.3.0", + "normalize-url": "^6.1.0", + "parse-path": "^4.0.0", + "protocols": "^1.4.0" + } + }, + "packages/three-vrm/node_modules/parse-url/node_modules/protocols": { + "version": "1.4.8", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/pascalcase": { + "version": "0.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/path-dirname": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/path-exists": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/path-is-absolute": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/path-key": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "packages/three-vrm/node_modules/path-parse": { + "version": "1.0.7", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/path-type": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "packages/three-vrm/node_modules/performance-now": { + "version": "2.1.0", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/picomatch": { + "version": "2.3.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "packages/three-vrm/node_modules/pify": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "packages/three-vrm/node_modules/pinkie": { + "version": "2.0.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/pinkie-promise": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/pkg-dir": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "packages/three-vrm/node_modules/please-upgrade-node": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "semver-compare": "^1.0.0" + } + }, + "packages/three-vrm/node_modules/pluralize": { + "version": "7.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/posix-character-classes": { + "version": "0.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/prelude-ls": { + "version": "1.1.2", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "packages/three-vrm/node_modules/prettier": { + "version": "2.7.1", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "packages/three-vrm/node_modules/process-nextick-args": { + "version": "1.0.7", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/progress": { + "version": "2.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "packages/three-vrm/node_modules/promise-inflight": { + "version": "1.0.1", + "dev": true, + "license": "ISC" + }, + "packages/three-vrm/node_modules/promise-retry": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "err-code": "^1.0.0", + "retry": "^0.10.0" + }, + "engines": { + "node": ">=0.12" + } + }, + "packages/three-vrm/node_modules/promzard": { + "version": "0.3.0", + "dev": true, + "license": "ISC", + "dependencies": { + "read": "1" + } + }, + "packages/three-vrm/node_modules/proto-list": { + "version": "1.2.4", + "dev": true, + "license": "ISC" + }, + "packages/three-vrm/node_modules/protocols": { + "version": "2.0.1", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/protoduck": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "genfun": "^5.0.0" + } + }, + "packages/three-vrm/node_modules/psl": { + "version": "1.9.0", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/pump": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "packages/three-vrm/node_modules/pumpify": { + "version": "1.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + } + }, + "packages/three-vrm/node_modules/pumpify/node_modules/pump": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "packages/three-vrm/node_modules/punycode": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "packages/three-vrm/node_modules/q": { + "version": "1.5.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6.0", + "teleport": ">=0.2.0" + } + }, + "packages/three-vrm/node_modules/qs": { + "version": "6.11.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/three-vrm/node_modules/query-string": { + "version": "6.14.1", + "dev": true, + "license": "MIT", + "dependencies": { + "decode-uri-component": "^0.2.0", + "filter-obj": "^1.1.0", + "split-on-first": "^1.0.0", + "strict-uri-encode": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/three-vrm/node_modules/queue-microtask": { + "version": "1.2.3", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "packages/three-vrm/node_modules/quick-lru": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "packages/three-vrm/node_modules/quicktype": { + "version": "15.0.261", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@mark.probst/typescript-json-schema": "~0.32.0", + "@mark.probst/unicode-properties": "~1.1.0", + "browser-or-node": "^1.2.1", + "chalk": "^2.4.1", + "collection-utils": "^1.0.1", + "command-line-args": "^4.0.6", + "command-line-usage": "^5.0.5", + "graphql": "^0.11.7", + "is-url": "^1.2.4", + "isomorphic-fetch": "^2.2.1", + "js-base64": "^2.4.3", + "lodash": "^4.17.21", + "moment": "^2.22.1", + "node-fetch": "^2.6.1", + "pako": "^1.0.6", + "pluralize": "^7.0.0", + "readable-stream": "2.3.0", + "stream-json": "1.1.3", + "string-to-stream": "^1.1.0", + "typescript": "~3.2.1", + "urijs": "^1.19.6", + "uuid": "^3.2.1", + "wordwrap": "^1.0.0", + "yaml": "^1.5.0" + }, + "bin": { + "quicktype": "dist/cli/index.js" + } + }, + "packages/three-vrm/node_modules/quicktype/node_modules/ansi-styles": { + "version": "3.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/quicktype/node_modules/chalk": { + "version": "2.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/quicktype/node_modules/color-convert": { + "version": "1.9.3", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "packages/three-vrm/node_modules/quicktype/node_modules/color-name": { + "version": "1.1.3", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/quicktype/node_modules/has-flag": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/quicktype/node_modules/supports-color": { + "version": "5.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/quicktype/node_modules/typescript": { + "version": "3.2.4", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "packages/three-vrm/node_modules/quote-stream": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-equal": "0.0.1", + "minimist": "^1.1.3", + "through2": "^2.0.0" + }, + "bin": { + "quote-stream": "bin/cmd.js" + } + }, + "packages/three-vrm/node_modules/randombytes": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "packages/three-vrm/node_modules/read": { + "version": "1.0.7", + "dev": true, + "license": "ISC", + "dependencies": { + "mute-stream": "~0.0.4" + }, + "engines": { + "node": ">=0.8" + } + }, + "packages/three-vrm/node_modules/read-cmd-shim": { + "version": "1.0.5", + "dev": true, + "license": "ISC", + "dependencies": { + "graceful-fs": "^4.1.2" + } + }, + "packages/three-vrm/node_modules/read-package-json": { + "version": "2.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.1", + "json-parse-even-better-errors": "^2.3.0", + "normalize-package-data": "^2.0.0", + "npm-normalize-package-bin": "^1.0.0" + } + }, + "packages/three-vrm/node_modules/read-package-tree": { + "version": "5.3.1", + "dev": true, + "license": "ISC", + "dependencies": { + "read-package-json": "^2.0.0", + "readdir-scoped-modules": "^1.0.0", + "util-promisify": "^2.1.0" + } + }, + "packages/three-vrm/node_modules/read-pkg": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/read-pkg-up": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^2.0.0", + "read-pkg": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/read-pkg-up/node_modules/find-up": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/read-pkg-up/node_modules/locate-path": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/read-pkg-up/node_modules/p-limit": { + "version": "1.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/read-pkg-up/node_modules/p-locate": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/read-pkg-up/node_modules/p-try": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/read-pkg/node_modules/load-json-file": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/read-pkg/node_modules/parse-json": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/read-pkg/node_modules/path-type": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/read-pkg/node_modules/pify": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/readable-stream": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "safe-buffer": "~5.1.0", + "string_decoder": "~1.0.0", + "util-deprecate": "~1.0.1" + } + }, + "packages/three-vrm/node_modules/readdir-scoped-modules": { + "version": "1.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "debuglog": "^1.0.1", + "dezalgo": "^1.0.0", + "graceful-fs": "^4.1.2", + "once": "^1.3.0" + } + }, + "packages/three-vrm/node_modules/rechoir": { + "version": "0.6.2", + "dev": true, + "dependencies": { + "resolve": "^1.1.6" + }, + "engines": { + "node": ">= 0.10" + } + }, + "packages/three-vrm/node_modules/redent": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "packages/three-vrm/node_modules/reduce-flatten": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/regex-not": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/regexp.prototype.flags": { + "version": "1.4.3", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/three-vrm/node_modules/regexpp": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "packages/three-vrm/node_modules/repeat-element": { + "version": "1.1.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/repeat-string": { + "version": "1.6.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "packages/three-vrm/node_modules/repeating": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-finite": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/request": { + "version": "2.88.2", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "packages/three-vrm/node_modules/request/node_modules/qs": { + "version": "6.5.3", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.6" + } + }, + "packages/three-vrm/node_modules/require-directory": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/require-from-string": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/require-main-filename": { + "version": "1.0.1", + "dev": true, + "license": "ISC" + }, + "packages/three-vrm/node_modules/resolve": { + "version": "1.22.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/three-vrm/node_modules/resolve-cwd": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-from": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/resolve-cwd/node_modules/resolve-from": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/resolve-from": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/resolve-url": { + "version": "0.2.1", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/restore-cursor": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "packages/three-vrm/node_modules/ret": { + "version": "0.1.15", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12" + } + }, + "packages/three-vrm/node_modules/retry": { + "version": "0.10.1", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "packages/three-vrm/node_modules/reusify": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/rfdc": { + "version": "1.3.0", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/rimraf": { + "version": "3.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "packages/three-vrm/node_modules/rollup": { + "version": "2.77.2", + "dev": true, + "license": "MIT", + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "packages/three-vrm/node_modules/rollup-plugin-serve": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "mime": ">=2.4.6", + "opener": "1" + } + }, + "packages/three-vrm/node_modules/rollup-plugin-string": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "rollup-pluginutils": "^2.4.1" + } + }, + "packages/three-vrm/node_modules/rollup-plugin-terser": { + "version": "7.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "jest-worker": "^26.2.1", + "serialize-javascript": "^4.0.0", + "terser": "^5.0.0" + }, + "peerDependencies": { + "rollup": "^2.0.0" + } + }, + "packages/three-vrm/node_modules/rollup-pluginutils": { + "version": "2.8.2", + "dev": true, + "license": "MIT", + "dependencies": { + "estree-walker": "^0.6.1" + } + }, + "packages/three-vrm/node_modules/rollup-pluginutils/node_modules/estree-walker": { + "version": "0.6.1", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/run-async": { + "version": "2.4.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "packages/three-vrm/node_modules/run-parallel": { + "version": "1.2.0", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "packages/three-vrm/node_modules/run-queue": { + "version": "1.0.3", + "dev": true, + "license": "ISC", + "dependencies": { + "aproba": "^1.1.1" + } + }, + "packages/three-vrm/node_modules/run-queue/node_modules/aproba": { + "version": "1.2.0", + "dev": true, + "license": "ISC" + }, + "packages/three-vrm/node_modules/rxjs": { + "version": "7.5.6", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "packages/three-vrm/node_modules/safe-buffer": { + "version": "5.1.2", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/safe-regex": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ret": "~0.1.10" + } + }, + "packages/three-vrm/node_modules/safer-buffer": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/semver": { + "version": "5.7.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "packages/three-vrm/node_modules/semver-compare": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/serialize-javascript": { + "version": "4.0.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "packages/three-vrm/node_modules/set-blocking": { + "version": "2.0.0", + "dev": true, + "license": "ISC" + }, + "packages/three-vrm/node_modules/set-value": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/set-value/node_modules/extend-shallow": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/set-value/node_modules/is-extendable": { + "version": "0.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/set-value/node_modules/is-plain-object": { + "version": "2.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/shallow-clone": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "packages/three-vrm/node_modules/shallow-copy": { + "version": "0.0.1", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/shebang-command": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "packages/three-vrm/node_modules/shebang-regex": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "packages/three-vrm/node_modules/shelljs": { + "version": "0.8.5", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + }, + "bin": { + "shjs": "bin/shjs" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/shiki": { + "version": "0.9.15", + "dev": true, + "license": "MIT", + "dependencies": { + "jsonc-parser": "^3.0.0", + "vscode-oniguruma": "^1.6.1", + "vscode-textmate": "5.2.0" + } + }, + "packages/three-vrm/node_modules/side-channel": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/three-vrm/node_modules/side-channel/node_modules/object-inspect": { + "version": "1.12.2", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/three-vrm/node_modules/signal-exit": { + "version": "3.0.7", + "dev": true, + "license": "ISC" + }, + "packages/three-vrm/node_modules/slash": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "packages/three-vrm/node_modules/slice-ansi": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "packages/three-vrm/node_modules/slide": { + "version": "1.1.6", + "dev": true, + "license": "ISC", + "engines": { + "node": "*" + } + }, + "packages/three-vrm/node_modules/smart-buffer": { + "version": "4.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "packages/three-vrm/node_modules/snapdragon": { + "version": "0.8.2", + "dev": true, + "license": "MIT", + "dependencies": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/snapdragon-node": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/snapdragon-node/node_modules/define-property": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/snapdragon-util": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^3.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/snapdragon-util/node_modules/kind-of": { + "version": "3.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/snapdragon/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "packages/three-vrm/node_modules/snapdragon/node_modules/define-property": { + "version": "0.2.5", + "dev": true, + "license": "MIT", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/snapdragon/node_modules/extend-shallow": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/snapdragon/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/snapdragon/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/snapdragon/node_modules/is-data-descriptor": { + "version": "0.1.4", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/snapdragon/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/snapdragon/node_modules/is-descriptor": { + "version": "0.1.6", + "dev": true, + "license": "MIT", + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/snapdragon/node_modules/is-extendable": { + "version": "0.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/snapdragon/node_modules/kind-of": { + "version": "5.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/snapdragon/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/snapdragon/node_modules/source-map": { + "version": "0.5.7", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/socks": { + "version": "2.3.3", + "dev": true, + "license": "MIT", + "dependencies": { + "ip": "1.1.5", + "smart-buffer": "^4.1.0" + }, + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "packages/three-vrm/node_modules/socks-proxy-agent": { + "version": "4.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "~4.2.1", + "socks": "~2.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "packages/three-vrm/node_modules/socks-proxy-agent/node_modules/agent-base": { + "version": "4.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "es6-promisify": "^5.0.0" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "packages/three-vrm/node_modules/sort-keys": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-obj": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/source-map": { + "version": "0.6.1", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/source-map-resolve": { + "version": "0.5.3", + "dev": true, + "license": "MIT", + "dependencies": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "packages/three-vrm/node_modules/source-map-support": { + "version": "0.5.21", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "packages/three-vrm/node_modules/source-map-url": { + "version": "0.4.1", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/spdx-correct": { + "version": "3.1.1", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "packages/three-vrm/node_modules/spdx-exceptions": { + "version": "2.3.0", + "dev": true, + "license": "CC-BY-3.0" + }, + "packages/three-vrm/node_modules/spdx-expression-parse": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "packages/three-vrm/node_modules/spdx-license-ids": { + "version": "3.0.11", + "dev": true, + "license": "CC0-1.0" + }, + "packages/three-vrm/node_modules/split": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "through": "2" + }, + "engines": { + "node": "*" + } + }, + "packages/three-vrm/node_modules/split-on-first": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "packages/three-vrm/node_modules/split-string": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "extend-shallow": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/split2": { + "version": "3.2.2", + "dev": true, + "license": "ISC", + "dependencies": { + "readable-stream": "^3.0.0" + } + }, + "packages/three-vrm/node_modules/split2/node_modules/readable-stream": { + "version": "3.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "packages/three-vrm/node_modules/split2/node_modules/safe-buffer": { + "version": "5.2.1", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "packages/three-vrm/node_modules/split2/node_modules/string_decoder": { + "version": "1.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "packages/three-vrm/node_modules/sprintf-js": { + "version": "1.0.3", + "dev": true, + "license": "BSD-3-Clause" + }, + "packages/three-vrm/node_modules/sshpk": { + "version": "1.17.0", + "dev": true, + "license": "MIT", + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/ssri": { + "version": "6.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "figgy-pudding": "^3.5.1" + } + }, + "packages/three-vrm/node_modules/static-eval": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "escodegen": "^1.11.1" + } + }, + "packages/three-vrm/node_modules/static-eval/node_modules/escodegen": { + "version": "1.14.3", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=4.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "packages/three-vrm/node_modules/static-eval/node_modules/esprima": { + "version": "4.0.1", + "dev": true, + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/static-extend": { + "version": "0.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/static-extend/node_modules/define-property": { + "version": "0.2.5", + "dev": true, + "license": "MIT", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/static-extend/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/static-extend/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/static-extend/node_modules/is-data-descriptor": { + "version": "0.1.4", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/static-extend/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/static-extend/node_modules/is-descriptor": { + "version": "0.1.6", + "dev": true, + "license": "MIT", + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/static-extend/node_modules/kind-of": { + "version": "5.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/static-module": { + "version": "2.2.5", + "dev": true, + "license": "MIT", + "dependencies": { + "concat-stream": "~1.6.0", + "convert-source-map": "^1.5.1", + "duplexer2": "~0.1.4", + "escodegen": "~1.9.0", + "falafel": "^2.1.0", + "has": "^1.0.1", + "magic-string": "^0.22.4", + "merge-source-map": "1.0.4", + "object-inspect": "~1.4.0", + "quote-stream": "~1.0.2", + "readable-stream": "~2.3.3", + "shallow-copy": "~0.0.1", + "static-eval": "^2.0.0", + "through2": "~2.0.3" + } + }, + "packages/three-vrm/node_modules/static-module/node_modules/process-nextick-args": { + "version": "2.0.1", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/static-module/node_modules/readable-stream": { + "version": "2.3.7", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "packages/three-vrm/node_modules/static-module/node_modules/string_decoder": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "packages/three-vrm/node_modules/stream-chain": { + "version": "2.2.5", + "dev": true, + "license": "BSD-3-Clause" + }, + "packages/three-vrm/node_modules/stream-each": { + "version": "1.2.3", + "dev": true, + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" + } + }, + "packages/three-vrm/node_modules/stream-json": { + "version": "1.1.3", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "stream-chain": "^2.0.3" + } + }, + "packages/three-vrm/node_modules/stream-shift": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/strict-uri-encode": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/string_decoder": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "packages/three-vrm/node_modules/string-argv": { + "version": "0.3.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6.19" + } + }, + "packages/three-vrm/node_modules/string-to-stream": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "readable-stream": "^2.1.0" + } + }, + "packages/three-vrm/node_modules/string-width": { + "version": "4.2.3", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "packages/three-vrm/node_modules/string.prototype.trimend": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/three-vrm/node_modules/string.prototype.trimstart": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/three-vrm/node_modules/stringify-object": { + "version": "3.3.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/strip-ansi": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "packages/three-vrm/node_modules/strip-bom": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/strip-eof": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/strip-final-newline": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "packages/three-vrm/node_modules/strip-indent": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "packages/three-vrm/node_modules/strip-json-comments": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/three-vrm/node_modules/strong-log-transformer": { + "version": "2.1.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "duplexer": "^0.1.1", + "minimist": "^1.2.0", + "through": "^2.3.4" + }, + "bin": { + "sl-log-transformer": "bin/sl-log-transformer.js" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "packages/three-vrm/node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/three-vrm/node_modules/table": { + "version": "6.8.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "packages/three-vrm/node_modules/table-layout": { + "version": "0.4.5", + "dev": true, + "license": "MIT", + "dependencies": { + "array-back": "^2.0.0", + "deep-extend": "~0.6.0", + "lodash.padend": "^4.6.1", + "typical": "^2.6.1", + "wordwrapjs": "^3.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "packages/three-vrm/node_modules/table/node_modules/ajv": { + "version": "8.11.0", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "packages/three-vrm/node_modules/table/node_modules/json-schema-traverse": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/table/node_modules/slice-ansi": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "packages/three-vrm/node_modules/tar": { + "version": "4.4.19", + "dev": true, + "license": "ISC", + "dependencies": { + "chownr": "^1.1.4", + "fs-minipass": "^1.2.7", + "minipass": "^2.9.0", + "minizlib": "^1.3.3", + "mkdirp": "^0.5.5", + "safe-buffer": "^5.2.1", + "yallist": "^3.1.1" + }, + "engines": { + "node": ">=4.5" + } + }, + "packages/three-vrm/node_modules/tar/node_modules/safe-buffer": { + "version": "5.2.1", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "packages/three-vrm/node_modules/temp-dir": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/temp-write": { + "version": "3.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "is-stream": "^1.1.0", + "make-dir": "^1.0.0", + "pify": "^3.0.0", + "temp-dir": "^1.0.0", + "uuid": "^3.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/temp-write/node_modules/is-stream": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/temp-write/node_modules/pify": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/terser": { + "version": "5.14.2", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "packages/three-vrm/node_modules/terser/node_modules/acorn": { + "version": "8.8.0", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "packages/three-vrm/node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/test-value": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "array-back": "^1.0.3", + "typical": "^2.6.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/test-value/node_modules/array-back": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "typical": "^2.6.0" + }, + "engines": { + "node": ">=0.12.0" + } + }, + "packages/three-vrm/node_modules/text-extensions": { + "version": "1.9.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "packages/three-vrm/node_modules/text-table": { + "version": "0.2.0", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/thenify": { + "version": "3.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "packages/three-vrm/node_modules/thenify-all": { + "version": "1.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "packages/three-vrm/node_modules/through": { + "version": "2.3.8", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/through2": { + "version": "2.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "packages/three-vrm/node_modules/through2/node_modules/process-nextick-args": { + "version": "2.0.1", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/through2/node_modules/readable-stream": { + "version": "2.3.7", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "packages/three-vrm/node_modules/through2/node_modules/string_decoder": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "packages/three-vrm/node_modules/tiny-inflate": { + "version": "1.0.3", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/tmp": { + "version": "0.0.33", + "dev": true, + "license": "MIT", + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "packages/three-vrm/node_modules/to-object-path": { + "version": "0.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/to-object-path/node_modules/kind-of": { + "version": "3.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/to-regex": { + "version": "3.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/to-regex-range": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "packages/three-vrm/node_modules/tough-cookie": { + "version": "2.5.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "packages/three-vrm/node_modules/tr46": { + "version": "0.0.3", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/trim-newlines": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "packages/three-vrm/node_modules/tslib": { + "version": "2.4.0", + "dev": true, + "license": "0BSD" + }, + "packages/three-vrm/node_modules/tsutils": { + "version": "3.21.0", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "packages/three-vrm/node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "dev": true, + "license": "0BSD" + }, + "packages/three-vrm/node_modules/tunnel-agent": { + "version": "0.6.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "packages/three-vrm/node_modules/tweetnacl": { + "version": "0.14.5", + "dev": true, + "license": "Unlicense" + }, + "packages/three-vrm/node_modules/type-check": { + "version": "0.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "packages/three-vrm/node_modules/type-fest": { + "version": "0.21.3", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/three-vrm/node_modules/typedarray": { + "version": "0.0.6", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/typedoc": { + "version": "0.20.37", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "colors": "^1.4.0", + "fs-extra": "^9.1.0", + "handlebars": "^4.7.7", + "lodash": "^4.17.21", + "lunr": "^2.3.9", + "marked": "~2.0.3", + "minimatch": "^3.0.0", + "progress": "^2.0.3", + "shelljs": "^0.8.4", + "shiki": "^0.9.3", + "typedoc-default-themes": "^0.12.10" + }, + "bin": { + "typedoc": "bin/typedoc" + }, + "engines": { + "node": ">= 10.8.0" + }, + "peerDependencies": { + "typescript": "3.9.x || 4.0.x || 4.1.x || 4.2.x" + } + }, + "packages/three-vrm/node_modules/typedoc-default-themes": { + "version": "0.12.10", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">= 8" + } + }, + "packages/three-vrm/node_modules/typedoc/node_modules/fs-extra": { + "version": "9.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "packages/three-vrm/node_modules/typedoc/node_modules/jsonfile": { + "version": "6.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "packages/three-vrm/node_modules/typedoc/node_modules/universalify": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "packages/three-vrm/node_modules/typescript": { + "version": "4.2.4", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "packages/three-vrm/node_modules/typical": { + "version": "2.6.1", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/uglify-js": { + "version": "3.16.3", + "dev": true, + "license": "BSD-2-Clause", + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "packages/three-vrm/node_modules/uid-number": { + "version": "0.0.6", + "dev": true, + "license": "ISC", + "engines": { + "node": "*" + } + }, + "packages/three-vrm/node_modules/umask": { + "version": "1.1.0", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/unbox-primitive": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/three-vrm/node_modules/unicode-trie": { + "version": "0.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "pako": "^0.2.5", + "tiny-inflate": "^1.0.0" + } + }, + "packages/three-vrm/node_modules/unicode-trie/node_modules/pako": { + "version": "0.2.9", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/union-value": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/union-value/node_modules/is-extendable": { + "version": "0.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/unique-filename": { + "version": "1.1.1", + "dev": true, + "license": "ISC", + "dependencies": { + "unique-slug": "^2.0.0" + } + }, + "packages/three-vrm/node_modules/unique-slug": { + "version": "2.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + } + }, + "packages/three-vrm/node_modules/universal-user-agent": { + "version": "4.0.1", + "dev": true, + "license": "ISC", + "dependencies": { + "os-name": "^3.1.0" + } + }, + "packages/three-vrm/node_modules/universalify": { + "version": "0.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "packages/three-vrm/node_modules/unset-value": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/unset-value/node_modules/has-value": { + "version": "0.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/unset-value/node_modules/has-value/node_modules/isobject": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/unset-value/node_modules/has-values": { + "version": "0.1.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/upath": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "packages/three-vrm/node_modules/uri-js": { + "version": "4.4.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "packages/three-vrm/node_modules/urijs": { + "version": "1.19.11", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/urix": { + "version": "0.1.0", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/use": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/util-deprecate": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/util-promisify": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "object.getownpropertydescriptors": "^2.0.3" + } + }, + "packages/three-vrm/node_modules/uuid": { + "version": "3.4.0", + "dev": true, + "license": "MIT", + "bin": { + "uuid": "bin/uuid" + } + }, + "packages/three-vrm/node_modules/v8-compile-cache": { + "version": "2.3.0", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/validate-npm-package-license": { + "version": "3.0.4", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "packages/three-vrm/node_modules/validate-npm-package-name": { + "version": "3.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "builtins": "^1.0.3" + } + }, + "packages/three-vrm/node_modules/verror": { + "version": "1.10.0", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "packages/three-vrm/node_modules/verror/node_modules/core-util-is": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/vlq": { + "version": "0.2.3", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/vscode-oniguruma": { + "version": "1.6.2", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/vscode-textmate": { + "version": "5.2.0", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/wcwidth": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "defaults": "^1.0.3" + } + }, + "packages/three-vrm/node_modules/webidl-conversions": { + "version": "3.0.1", + "dev": true, + "license": "BSD-2-Clause" + }, + "packages/three-vrm/node_modules/whatwg-fetch": { + "version": "3.6.2", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/whatwg-url": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "packages/three-vrm/node_modules/which": { + "version": "2.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "packages/three-vrm/node_modules/which-boxed-primitive": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/three-vrm/node_modules/which-module": { + "version": "2.0.0", + "dev": true, + "license": "ISC" + }, + "packages/three-vrm/node_modules/wide-align": { + "version": "1.1.5", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "packages/three-vrm/node_modules/windows-release": { + "version": "3.3.3", + "dev": true, + "license": "MIT", + "dependencies": { + "execa": "^1.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/three-vrm/node_modules/windows-release/node_modules/cross-spawn": { + "version": "6.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "packages/three-vrm/node_modules/windows-release/node_modules/execa": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "packages/three-vrm/node_modules/windows-release/node_modules/get-stream": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "packages/three-vrm/node_modules/windows-release/node_modules/is-stream": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/windows-release/node_modules/npm-run-path": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/windows-release/node_modules/path-key": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/windows-release/node_modules/shebang-command": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/windows-release/node_modules/shebang-regex": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/windows-release/node_modules/which": { + "version": "1.3.1", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "packages/three-vrm/node_modules/word-wrap": { + "version": "1.2.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three-vrm/node_modules/wordwrap": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "packages/three-vrm/node_modules/wordwrapjs": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "reduce-flatten": "^1.0.1", + "typical": "^2.6.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "packages/three-vrm/node_modules/wrap-ansi": { + "version": "7.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "packages/three-vrm/node_modules/wrappy": { + "version": "1.0.2", + "dev": true, + "license": "ISC" + }, + "packages/three-vrm/node_modules/write-file-atomic": { + "version": "2.4.3", + "dev": true, + "license": "ISC", + "dependencies": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, + "packages/three-vrm/node_modules/write-json-file": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "detect-indent": "^5.0.0", + "graceful-fs": "^4.1.15", + "make-dir": "^2.1.0", + "pify": "^4.0.1", + "sort-keys": "^2.0.0", + "write-file-atomic": "^2.4.2" + }, + "engines": { + "node": ">=6" + } + }, + "packages/three-vrm/node_modules/write-json-file/node_modules/make-dir": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "packages/three-vrm/node_modules/write-pkg": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "sort-keys": "^2.0.0", + "write-json-file": "^2.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/write-pkg/node_modules/pify": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/write-pkg/node_modules/write-json-file": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "detect-indent": "^5.0.0", + "graceful-fs": "^4.1.2", + "make-dir": "^1.0.0", + "pify": "^3.0.0", + "sort-keys": "^2.0.0", + "write-file-atomic": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/xtend": { + "version": "4.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4" + } + }, + "packages/three-vrm/node_modules/y18n": { + "version": "4.0.3", + "dev": true, + "license": "ISC" + }, + "packages/three-vrm/node_modules/yallist": { + "version": "3.1.1", + "dev": true, + "license": "ISC" + }, + "packages/three-vrm/node_modules/yaml": { + "version": "1.10.2", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 6" + } + }, + "packages/three-vrm/node_modules/yargs": { + "version": "12.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^4.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", + "get-caller-file": "^1.0.1", + "os-locale": "^3.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1 || ^4.0.0", + "yargs-parser": "^11.1.1" + } + }, + "packages/three-vrm/node_modules/yargs-parser": { + "version": "11.1.1", + "dev": true, + "license": "ISC", + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "packages/three-vrm/node_modules/yargs/node_modules/ansi-regex": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/yargs/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/yargs/node_modules/string-width": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three-vrm/node_modules/yargs/node_modules/strip-ansi": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three/node_modules/@ampproject/remapping": { + "version": "2.2.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "packages/three/node_modules/@babel/code-frame": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/highlight": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "packages/three/node_modules/@babel/compat-data": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "packages/three/node_modules/@babel/core": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.18.6", + "@babel/helper-compilation-targets": "^7.18.6", + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helpers": "^7.18.6", + "@babel/parser": "^7.18.6", + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.6", + "@babel/types": "^7.18.6", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "packages/three/node_modules/@babel/eslint-parser": { + "version": "7.18.2", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-scope": "^5.1.1", + "eslint-visitor-keys": "^2.1.0", + "semver": "^6.3.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || >=14.0.0" + }, + "peerDependencies": { + "@babel/core": ">=7.11.0", + "eslint": "^7.5.0 || ^8.0.0" + } + }, + "packages/three/node_modules/@babel/generator": { + "version": "7.18.7", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.18.7", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "packages/three/node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "packages/three/node_modules/@babel/helper-annotate-as-pure": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "packages/three/node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-explode-assignable-expression": "^7.18.6", + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "packages/three/node_modules/@babel/helper-compilation-targets": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.18.6", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.20.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "packages/three/node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.6", + "@babel/helper-function-name": "^7.18.6", + "@babel/helper-member-expression-to-functions": "^7.18.6", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "packages/three/node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "regexpu-core": "^5.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "packages/three/node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.13.0", + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/traverse": "^7.13.0", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0-0" + } + }, + "packages/three/node_modules/@babel/helper-environment-visitor": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "packages/three/node_modules/@babel/helper-explode-assignable-expression": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "packages/three/node_modules/@babel/helper-function-name": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.18.6", + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "packages/three/node_modules/@babel/helper-hoist-variables": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "packages/three/node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "packages/three/node_modules/@babel/helper-module-imports": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "packages/three/node_modules/@babel/helper-module-transforms": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.6", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.18.6", + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.6", + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "packages/three/node_modules/@babel/helper-optimise-call-expression": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "packages/three/node_modules/@babel/helper-plugin-utils": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "packages/three/node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.6", + "@babel/helper-wrap-function": "^7.18.6", + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "packages/three/node_modules/@babel/helper-replace-supers": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.6", + "@babel/helper-member-expression-to-functions": "^7.18.6", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/traverse": "^7.18.6", + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "packages/three/node_modules/@babel/helper-simple-access": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "packages/three/node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "packages/three/node_modules/@babel/helper-split-export-declaration": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "packages/three/node_modules/@babel/helper-validator-identifier": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "packages/three/node_modules/@babel/helper-validator-option": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "packages/three/node_modules/@babel/helper-wrap-function": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-function-name": "^7.18.6", + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.6", + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "packages/three/node_modules/@babel/helpers": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.6", + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "packages/three/node_modules/@babel/highlight": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "packages/three/node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three/node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three/node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "packages/three/node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "dev": true, + "license": "MIT" + }, + "packages/three/node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "packages/three/node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "packages/three/node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three/node_modules/@babel/parser": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "packages/three/node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "packages/three/node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.6", + "@babel/plugin-proposal-optional-chaining": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "packages/three/node_modules/@babel/plugin-proposal-async-generator-functions": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-remap-async-to-generator": "^7.18.6", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "packages/three/node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "packages/three/node_modules/@babel/plugin-proposal-class-static-block": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "packages/three/node_modules/@babel/plugin-proposal-dynamic-import": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "packages/three/node_modules/@babel/plugin-proposal-export-namespace-from": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "packages/three/node_modules/@babel/plugin-proposal-json-strings": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "packages/three/node_modules/@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "packages/three/node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "packages/three/node_modules/@babel/plugin-proposal-numeric-separator": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "packages/three/node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.18.6", + "@babel/helper-compilation-targets": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "packages/three/node_modules/@babel/plugin-proposal-optional-catch-binding": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "packages/three/node_modules/@babel/plugin-proposal-optional-chaining": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.6", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "packages/three/node_modules/@babel/plugin-proposal-private-methods": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "packages/three/node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "packages/three/node_modules/@babel/plugin-proposal-unicode-property-regex": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "packages/three/node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "packages/three/node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "packages/three/node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "packages/three/node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "packages/three/node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "packages/three/node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "packages/three/node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "packages/three/node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "packages/three/node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "packages/three/node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "packages/three/node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "packages/three/node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "packages/three/node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "packages/three/node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "packages/three/node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "packages/three/node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "packages/three/node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-remap-async-to-generator": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "packages/three/node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "packages/three/node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "packages/three/node_modules/@babel/plugin-transform-classes": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.6", + "@babel/helper-function-name": "^7.18.6", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "packages/three/node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "packages/three/node_modules/@babel/plugin-transform-destructuring": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "packages/three/node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "packages/three/node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "packages/three/node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "packages/three/node_modules/@babel/plugin-transform-for-of": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "packages/three/node_modules/@babel/plugin-transform-function-name": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.18.6", + "@babel/helper-function-name": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "packages/three/node_modules/@babel/plugin-transform-literals": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "packages/three/node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "packages/three/node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "packages/three/node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-simple-access": "^7.18.6", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "packages/three/node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-validator-identifier": "^7.18.6", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "packages/three/node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "packages/three/node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "packages/three/node_modules/@babel/plugin-transform-new-target": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "packages/three/node_modules/@babel/plugin-transform-object-super": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "packages/three/node_modules/@babel/plugin-transform-parameters": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "packages/three/node_modules/@babel/plugin-transform-property-literals": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "packages/three/node_modules/@babel/plugin-transform-regenerator": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "regenerator-transform": "^0.15.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "packages/three/node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "packages/three/node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "packages/three/node_modules/@babel/plugin-transform-spread": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "packages/three/node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "packages/three/node_modules/@babel/plugin-transform-template-literals": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "packages/three/node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "packages/three/node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "packages/three/node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "packages/three/node_modules/@babel/preset-env": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.18.6", + "@babel/helper-compilation-targets": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.6", + "@babel/plugin-proposal-async-generator-functions": "^7.18.6", + "@babel/plugin-proposal-class-properties": "^7.18.6", + "@babel/plugin-proposal-class-static-block": "^7.18.6", + "@babel/plugin-proposal-dynamic-import": "^7.18.6", + "@babel/plugin-proposal-export-namespace-from": "^7.18.6", + "@babel/plugin-proposal-json-strings": "^7.18.6", + "@babel/plugin-proposal-logical-assignment-operators": "^7.18.6", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", + "@babel/plugin-proposal-numeric-separator": "^7.18.6", + "@babel/plugin-proposal-object-rest-spread": "^7.18.6", + "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", + "@babel/plugin-proposal-optional-chaining": "^7.18.6", + "@babel/plugin-proposal-private-methods": "^7.18.6", + "@babel/plugin-proposal-private-property-in-object": "^7.18.6", + "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.18.6", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.18.6", + "@babel/plugin-transform-async-to-generator": "^7.18.6", + "@babel/plugin-transform-block-scoped-functions": "^7.18.6", + "@babel/plugin-transform-block-scoping": "^7.18.6", + "@babel/plugin-transform-classes": "^7.18.6", + "@babel/plugin-transform-computed-properties": "^7.18.6", + "@babel/plugin-transform-destructuring": "^7.18.6", + "@babel/plugin-transform-dotall-regex": "^7.18.6", + "@babel/plugin-transform-duplicate-keys": "^7.18.6", + "@babel/plugin-transform-exponentiation-operator": "^7.18.6", + "@babel/plugin-transform-for-of": "^7.18.6", + "@babel/plugin-transform-function-name": "^7.18.6", + "@babel/plugin-transform-literals": "^7.18.6", + "@babel/plugin-transform-member-expression-literals": "^7.18.6", + "@babel/plugin-transform-modules-amd": "^7.18.6", + "@babel/plugin-transform-modules-commonjs": "^7.18.6", + "@babel/plugin-transform-modules-systemjs": "^7.18.6", + "@babel/plugin-transform-modules-umd": "^7.18.6", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.18.6", + "@babel/plugin-transform-new-target": "^7.18.6", + "@babel/plugin-transform-object-super": "^7.18.6", + "@babel/plugin-transform-parameters": "^7.18.6", + "@babel/plugin-transform-property-literals": "^7.18.6", + "@babel/plugin-transform-regenerator": "^7.18.6", + "@babel/plugin-transform-reserved-words": "^7.18.6", + "@babel/plugin-transform-shorthand-properties": "^7.18.6", + "@babel/plugin-transform-spread": "^7.18.6", + "@babel/plugin-transform-sticky-regex": "^7.18.6", + "@babel/plugin-transform-template-literals": "^7.18.6", + "@babel/plugin-transform-typeof-symbol": "^7.18.6", + "@babel/plugin-transform-unicode-escapes": "^7.18.6", + "@babel/plugin-transform-unicode-regex": "^7.18.6", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.18.6", + "babel-plugin-polyfill-corejs2": "^0.3.1", + "babel-plugin-polyfill-corejs3": "^0.5.2", + "babel-plugin-polyfill-regenerator": "^0.3.1", + "core-js-compat": "^3.22.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "packages/three/node_modules/@babel/preset-modules": { + "version": "0.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "packages/three/node_modules/@babel/runtime": { + "version": "7.18.3", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "packages/three/node_modules/@babel/template": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.6", + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "packages/three/node_modules/@babel/traverse": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.6", + "@babel/helper-function-name": "^7.18.6", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.18.6", + "@babel/types": "^7.18.6", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "packages/three/node_modules/@babel/types": { + "version": "7.18.7", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.18.6", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "packages/three/node_modules/@eslint/eslintrc": { + "version": "1.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.3.2", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "packages/three/node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.15.0", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/three/node_modules/@gar/promisify": { + "version": "1.1.3", + "dev": true, + "license": "MIT" + }, + "packages/three/node_modules/@humanwhocodes/config-array": { + "version": "0.9.5", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "packages/three/node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "dev": true, + "license": "BSD-3-Clause" + }, + "packages/three/node_modules/@jridgewell/gen-mapping": { + "version": "0.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "packages/three/node_modules/@jridgewell/resolve-uri": { + "version": "3.0.7", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "packages/three/node_modules/@jridgewell/set-array": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "packages/three/node_modules/@jridgewell/source-map": { + "version": "0.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "packages/three/node_modules/@jridgewell/source-map/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "packages/three/node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.13", + "dev": true, + "license": "MIT" + }, + "packages/three/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.13", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "packages/three/node_modules/@mdn/browser-compat-data": { + "version": "4.2.1", + "dev": true, + "license": "CC0-1.0" + }, + "packages/three/node_modules/@npmcli/fs": { + "version": "1.1.1", + "dev": true, + "license": "ISC", + "dependencies": { + "@gar/promisify": "^1.0.1", + "semver": "^7.3.5" + } + }, + "packages/three/node_modules/@npmcli/fs/node_modules/semver": { + "version": "7.3.7", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "packages/three/node_modules/@npmcli/git": { + "version": "2.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/promise-spawn": "^1.3.2", + "lru-cache": "^6.0.0", + "mkdirp": "^1.0.4", + "npm-pick-manifest": "^6.1.1", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^2.0.2" + } + }, + "packages/three/node_modules/@npmcli/git/node_modules/semver": { + "version": "7.3.7", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "packages/three/node_modules/@npmcli/installed-package-contents": { + "version": "1.0.7", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-bundled": "^1.1.1", + "npm-normalize-package-bin": "^1.0.1" + }, + "bin": { + "installed-package-contents": "index.js" + }, + "engines": { + "node": ">= 10" + } + }, + "packages/three/node_modules/@npmcli/move-file": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "engines": { + "node": ">=10" + } + }, + "packages/three/node_modules/@npmcli/node-gyp": { + "version": "1.0.3", + "dev": true, + "license": "ISC" + }, + "packages/three/node_modules/@npmcli/promise-spawn": { + "version": "1.3.2", + "dev": true, + "license": "ISC", + "dependencies": { + "infer-owner": "^1.0.4" + } + }, + "packages/three/node_modules/@npmcli/run-script": { + "version": "1.8.6", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/node-gyp": "^1.0.2", + "@npmcli/promise-spawn": "^1.3.2", + "node-gyp": "^7.1.0", + "read-package-json-fast": "^2.0.1" + } + }, + "packages/three/node_modules/@rollup/plugin-babel": { + "version": "5.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.10.4", + "@rollup/pluginutils": "^3.1.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "@types/babel__core": "^7.1.9", + "rollup": "^1.20.0||^2.0.0" + }, + "peerDependenciesMeta": { + "@types/babel__core": { + "optional": true + } + } + }, + "packages/three/node_modules/@rollup/plugin-node-resolve": { + "version": "13.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "deepmerge": "^4.2.2", + "is-builtin-module": "^3.1.0", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "rollup": "^2.42.0" + } + }, + "packages/three/node_modules/@rollup/pluginutils": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "packages/three/node_modules/@tootallnate/once": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "packages/three/node_modules/@types/estree": { + "version": "0.0.39", + "dev": true, + "license": "MIT" + }, + "packages/three/node_modules/@types/json5": { + "version": "0.0.29", + "dev": true, + "license": "MIT" + }, + "packages/three/node_modules/@types/node": { + "version": "18.0.0", + "dev": true, + "license": "MIT" + }, + "packages/three/node_modules/@types/resolve": { + "version": "1.17.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "packages/three/node_modules/abbrev": { + "version": "1.1.1", + "dev": true, + "license": "ISC" + }, + "packages/three/node_modules/accepts": { + "version": "1.3.8", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "packages/three/node_modules/acorn": { + "version": "8.7.1", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "packages/three/node_modules/acorn-jsx": { + "version": "5.3.2", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "packages/three/node_modules/agent-base": { + "version": "6.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "packages/three/node_modules/agentkeepalive": { + "version": "4.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "depd": "^1.1.2", + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "packages/three/node_modules/aggregate-error": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "packages/three/node_modules/ajv": { + "version": "6.12.6", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "packages/three/node_modules/ansi-align": { + "version": "3.0.1", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.1.0" + } + }, + "packages/three/node_modules/ansi-colors": { + "version": "4.1.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "packages/three/node_modules/ansi-regex": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "packages/three/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "packages/three/node_modules/aproba": { + "version": "1.2.0", + "dev": true, + "license": "ISC" + }, + "packages/three/node_modules/are-we-there-yet": { + "version": "1.1.7", + "dev": true, + "license": "ISC", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "packages/three/node_modules/argparse": { + "version": "2.0.1", + "dev": true, + "license": "Python-2.0" + }, + "packages/three/node_modules/array-flatten": { + "version": "1.1.1", + "dev": true, + "license": "MIT" + }, + "packages/three/node_modules/array-includes": { + "version": "3.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5", + "get-intrinsic": "^1.1.1", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/three/node_modules/array.prototype.flat": { + "version": "1.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.2", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/three/node_modules/asn1": { + "version": "0.2.6", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "packages/three/node_modules/assert-plus": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "packages/three/node_modules/ast-metadata-inferer": { + "version": "0.7.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@mdn/browser-compat-data": "^3.3.14" + } + }, + "packages/three/node_modules/ast-metadata-inferer/node_modules/@mdn/browser-compat-data": { + "version": "3.3.14", + "dev": true, + "license": "CC0-1.0" + }, + "packages/three/node_modules/asynckit": { + "version": "0.4.0", + "dev": true, + "license": "MIT" + }, + "packages/three/node_modules/aws-sign2": { + "version": "0.7.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "packages/three/node_modules/aws4": { + "version": "1.11.0", + "dev": true, + "license": "MIT" + }, + "packages/three/node_modules/babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "dev": true, + "license": "MIT", + "dependencies": { + "object.assign": "^4.1.0" + } + }, + "packages/three/node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.13.11", + "@babel/helper-define-polyfill-provider": "^0.3.1", + "semver": "^6.1.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "packages/three/node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.5.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.3.1", + "core-js-compat": "^3.21.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "packages/three/node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "packages/three/node_modules/balanced-match": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "packages/three/node_modules/basic-auth": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "5.1.2" + }, + "engines": { + "node": ">= 0.8" + } + }, + "packages/three/node_modules/batch": { + "version": "0.6.1", + "dev": true, + "license": "MIT" + }, + "packages/three/node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "packages/three/node_modules/body-parser": { + "version": "1.20.0", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.10.3", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "packages/three/node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "packages/three/node_modules/body-parser/node_modules/depd": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "packages/three/node_modules/body-parser/node_modules/iconv-lite": { + "version": "0.4.24", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three/node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "packages/three/node_modules/body-parser/node_modules/qs": { + "version": "6.10.3", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/three/node_modules/boxen": { + "version": "5.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.2", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/three/node_modules/boxen/node_modules/chalk": { + "version": "4.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "packages/three/node_modules/boxen/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "packages/three/node_modules/brace-expansion": { + "version": "1.1.11", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "packages/three/node_modules/brotli-size": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "duplexer": "0.1.1" + }, + "engines": { + "node": ">= 10.16.0" + } + }, + "packages/three/node_modules/browserslist": { + "version": "4.20.4", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001349", + "electron-to-chromium": "^1.4.147", + "escalade": "^3.1.1", + "node-releases": "^2.0.5", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "packages/three/node_modules/buffer-from": { + "version": "1.1.2", + "dev": true, + "license": "MIT" + }, + "packages/three/node_modules/builtin-modules": { + "version": "3.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/three/node_modules/builtins": { + "version": "1.0.3", + "dev": true, + "license": "MIT" + }, + "packages/three/node_modules/bytes": { + "version": "3.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "packages/three/node_modules/cacache": { + "version": "15.3.0", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^1.0.0", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + }, + "engines": { + "node": ">= 10" + } + }, + "packages/three/node_modules/call-bind": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/three/node_modules/callsites": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "packages/three/node_modules/camelcase": { + "version": "6.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/three/node_modules/caniuse-lite": { + "version": "1.0.30001357", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + } + ], + "license": "CC-BY-4.0" + }, + "packages/three/node_modules/caseless": { + "version": "0.12.0", + "dev": true, + "license": "Apache-2.0" + }, + "packages/three/node_modules/chalk": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "packages/three/node_modules/chownr": { + "version": "2.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "packages/three/node_modules/clean-stack": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "packages/three/node_modules/cli-boxes": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/three/node_modules/cliui": { + "version": "7.0.4", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "packages/three/node_modules/code-point-at": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "packages/three/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "packages/three/node_modules/color-support": { + "version": "1.1.3", + "dev": true, + "license": "ISC", + "bin": { + "color-support": "bin.js" + } + }, + "packages/three/node_modules/colors": { + "version": "1.4.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.1.90" + } + }, + "packages/three/node_modules/combined-stream": { + "version": "1.0.8", + "dev": true, + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "packages/three/node_modules/commander": { + "version": "2.20.3", + "dev": true, + "license": "MIT" + }, + "packages/three/node_modules/concat-map": { + "version": "0.0.1", + "dev": true, + "license": "MIT" + }, + "packages/three/node_modules/concurrently": { + "version": "7.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "date-fns": "^2.16.1", + "lodash": "^4.17.21", + "rxjs": "^7.0.0", + "shell-quote": "^1.7.3", + "spawn-command": "^0.0.2-1", + "supports-color": "^8.1.0", + "tree-kill": "^1.2.2", + "yargs": "^17.3.1" + }, + "bin": { + "concurrently": "dist/bin/concurrently.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.0 || >=16.0.0" + } + }, + "packages/three/node_modules/concurrently/node_modules/chalk": { + "version": "4.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "packages/three/node_modules/concurrently/node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "packages/three/node_modules/console-control-strings": { + "version": "1.1.0", + "dev": true, + "license": "ISC" + }, + "packages/three/node_modules/content-disposition": { + "version": "0.5.4", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "packages/three/node_modules/content-disposition/node_modules/safe-buffer": { + "version": "5.2.1", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "packages/three/node_modules/content-type": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "packages/three/node_modules/convert-source-map": { + "version": "1.8.0", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "packages/three/node_modules/cookie": { + "version": "0.5.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "packages/three/node_modules/cookie-signature": { + "version": "1.0.6", + "dev": true, + "license": "MIT" + }, + "packages/three/node_modules/core-js": { + "version": "3.23.2", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "packages/three/node_modules/core-js-compat": { + "version": "3.23.2", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.20.4", + "semver": "7.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "packages/three/node_modules/core-js-compat/node_modules/semver": { + "version": "7.0.0", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "packages/three/node_modules/core-util-is": { + "version": "1.0.3", + "dev": true, + "license": "MIT" + }, + "packages/three/node_modules/cors": { + "version": "2.8.5", + "dev": true, + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "packages/three/node_modules/cross-spawn": { + "version": "7.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "packages/three/node_modules/dashdash": { + "version": "1.14.1", + "dev": true, + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "packages/three/node_modules/date-fns": { + "version": "2.28.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/date-fns" + } + }, + "packages/three/node_modules/debug": { + "version": "4.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "packages/three/node_modules/deep-is": { + "version": "0.1.4", + "dev": true, + "license": "MIT" + }, + "packages/three/node_modules/deepmerge": { + "version": "4.2.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three/node_modules/define-lazy-prop": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "packages/three/node_modules/define-properties": { + "version": "1.1.4", + "dev": true, + "license": "MIT", + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/three/node_modules/delayed-stream": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "packages/three/node_modules/delegates": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "packages/three/node_modules/depd": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "packages/three/node_modules/destroy": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "packages/three/node_modules/doctrine": { + "version": "3.0.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "packages/three/node_modules/dom-serializer": { + "version": "1.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "packages/three/node_modules/dom-serializer/node_modules/entities": { + "version": "2.2.0", + "dev": true, + "license": "BSD-2-Clause", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "packages/three/node_modules/domelementtype": { + "version": "2.3.0", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "packages/three/node_modules/domhandler": { + "version": "4.3.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "packages/three/node_modules/domutils": { + "version": "2.8.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "packages/three/node_modules/duplexer": { + "version": "0.1.1", + "dev": true + }, + "packages/three/node_modules/ecc-jsbn": { + "version": "0.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "packages/three/node_modules/ee-first": { + "version": "1.1.1", + "dev": true, + "license": "MIT" + }, + "packages/three/node_modules/electron-to-chromium": { + "version": "1.4.163", + "dev": true, + "license": "ISC" + }, + "packages/three/node_modules/emoji-regex": { + "version": "8.0.0", + "dev": true, + "license": "MIT" + }, + "packages/three/node_modules/encodeurl": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "packages/three/node_modules/encoding": { + "version": "0.1.13", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "packages/three/node_modules/entities": { + "version": "3.0.1", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "packages/three/node_modules/env-paths": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "packages/three/node_modules/err-code": { + "version": "2.0.3", + "dev": true, + "license": "MIT" + }, + "packages/three/node_modules/es-abstract": { + "version": "1.20.1", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "regexp.prototype.flags": "^1.4.3", + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/three/node_modules/es-shim-unscopables": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has": "^1.0.3" + } + }, + "packages/three/node_modules/es-to-primitive": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/three/node_modules/escalade": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "packages/three/node_modules/escape-html": { + "version": "1.0.3", + "dev": true, + "license": "MIT" + }, + "packages/three/node_modules/escape-string-regexp": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/three/node_modules/eslint": { + "version": "8.18.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint/eslintrc": "^1.3.0", + "@humanwhocodes/config-array": "^0.9.2", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.2", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "packages/three/node_modules/eslint-config-mdcs": { + "version": "5.0.0", + "dev": true, + "license": "MIT" + }, + "packages/three/node_modules/eslint-import-resolver-node": { + "version": "0.3.6", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7", + "resolve": "^1.20.0" + } + }, + "packages/three/node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "packages/three/node_modules/eslint-module-utils": { + "version": "2.7.3", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7", + "find-up": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three/node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "packages/three/node_modules/eslint-module-utils/node_modules/find-up": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three/node_modules/eslint-module-utils/node_modules/locate-path": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three/node_modules/eslint-module-utils/node_modules/p-limit": { + "version": "1.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three/node_modules/eslint-module-utils/node_modules/p-locate": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three/node_modules/eslint-module-utils/node_modules/path-exists": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "packages/three/node_modules/eslint-plugin-compat": { + "version": "4.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@mdn/browser-compat-data": "^4.1.5", + "ast-metadata-inferer": "^0.7.0", + "browserslist": "^4.16.8", + "caniuse-lite": "^1.0.30001304", + "core-js": "^3.16.2", + "find-up": "^5.0.0", + "lodash.memoize": "4.1.2", + "semver": "7.3.5" + }, + "engines": { + "node": ">=9.x" + }, + "peerDependencies": { + "eslint": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "packages/three/node_modules/eslint-plugin-compat/node_modules/semver": { + "version": "7.3.5", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "packages/three/node_modules/eslint-plugin-html": { + "version": "6.2.0", + "dev": true, + "license": "ISC", + "dependencies": { + "htmlparser2": "^7.1.2" + } + }, + "packages/three/node_modules/eslint-plugin-import": { + "version": "2.26.0", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.4", + "array.prototype.flat": "^1.2.5", + "debug": "^2.6.9", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-module-utils": "^2.7.3", + "has": "^1.0.3", + "is-core-module": "^2.8.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.values": "^1.1.5", + "resolve": "^1.22.0", + "tsconfig-paths": "^3.14.1" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "packages/three/node_modules/eslint-plugin-import/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "packages/three/node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three/node_modules/eslint-plugin-import/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "packages/three/node_modules/eslint-scope": { + "version": "5.1.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "packages/three/node_modules/eslint-utils": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "packages/three/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10" + } + }, + "packages/three/node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "packages/three/node_modules/eslint/node_modules/eslint-scope": { + "version": "7.1.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "packages/three/node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "3.3.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "packages/three/node_modules/eslint/node_modules/estraverse": { + "version": "5.3.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "packages/three/node_modules/eslint/node_modules/globals": { + "version": "13.15.0", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/three/node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "packages/three/node_modules/espree": { + "version": "9.3.2", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.7.1", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "packages/three/node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "3.3.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "packages/three/node_modules/esquery": { + "version": "1.4.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "packages/three/node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "packages/three/node_modules/esrecurse": { + "version": "4.3.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "packages/three/node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "packages/three/node_modules/estraverse": { + "version": "4.3.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "packages/three/node_modules/estree-walker": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "packages/three/node_modules/esutils": { + "version": "2.0.3", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three/node_modules/etag": { + "version": "1.8.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "packages/three/node_modules/express": { + "version": "4.18.1", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.0", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.10.3", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "packages/three/node_modules/express/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "packages/three/node_modules/express/node_modules/depd": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "packages/three/node_modules/express/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "packages/three/node_modules/express/node_modules/qs": { + "version": "6.10.3", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/three/node_modules/express/node_modules/safe-buffer": { + "version": "5.2.1", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "packages/three/node_modules/extend": { + "version": "3.0.2", + "dev": true, + "license": "MIT" + }, + "packages/three/node_modules/extsprintf": { + "version": "1.3.0", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "license": "MIT" + }, + "packages/three/node_modules/fast-deep-equal": { + "version": "3.1.3", + "dev": true, + "license": "MIT" + }, + "packages/three/node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "dev": true, + "license": "MIT" + }, + "packages/three/node_modules/fast-levenshtein": { + "version": "2.0.6", + "dev": true, + "license": "MIT" + }, + "packages/three/node_modules/file-entry-cache": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "packages/three/node_modules/filesize": { + "version": "6.4.0", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">= 0.4.0" + } + }, + "packages/three/node_modules/finalhandler": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "packages/three/node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "packages/three/node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "packages/three/node_modules/find-up": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/three/node_modules/flat-cache": { + "version": "3.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "packages/three/node_modules/flatted": { + "version": "3.2.5", + "dev": true, + "license": "ISC" + }, + "packages/three/node_modules/forever-agent": { + "version": "0.6.1", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "packages/three/node_modules/form-data": { + "version": "2.3.3", + "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "packages/three/node_modules/forwarded": { + "version": "0.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "packages/three/node_modules/fresh": { + "version": "0.5.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "packages/three/node_modules/fs-minipass": { + "version": "2.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "packages/three/node_modules/fs.realpath": { + "version": "1.0.0", + "dev": true, + "license": "ISC" + }, + "packages/three/node_modules/function-bind": { + "version": "1.1.1", + "dev": true, + "license": "MIT" + }, + "packages/three/node_modules/function.prototype.name": { + "version": "1.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/three/node_modules/functional-red-black-tree": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "packages/three/node_modules/functions-have-names": { + "version": "1.2.3", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/three/node_modules/gauge": { + "version": "2.7.4", + "dev": true, + "license": "ISC", + "dependencies": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "packages/three/node_modules/gauge/node_modules/ansi-regex": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three/node_modules/gauge/node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three/node_modules/gauge/node_modules/string-width": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three/node_modules/gauge/node_modules/strip-ansi": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three/node_modules/gensync": { + "version": "1.0.0-beta.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "packages/three/node_modules/get-caller-file": { + "version": "2.0.5", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "packages/three/node_modules/get-intrinsic": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/three/node_modules/get-symbol-description": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/three/node_modules/getpass": { + "version": "0.1.7", + "dev": true, + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "packages/three/node_modules/glob": { + "version": "7.2.3", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "packages/three/node_modules/glob-parent": { + "version": "6.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "packages/three/node_modules/globals": { + "version": "11.12.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "packages/three/node_modules/graceful-fs": { + "version": "4.2.10", + "dev": true, + "license": "ISC" + }, + "packages/three/node_modules/gzip-size": { + "version": "6.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "duplexer": "^0.1.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/three/node_modules/gzip-size/node_modules/duplexer": { + "version": "0.1.2", + "dev": true, + "license": "MIT" + }, + "packages/three/node_modules/har-schema": { + "version": "2.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=4" + } + }, + "packages/three/node_modules/har-validator": { + "version": "5.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "packages/three/node_modules/has": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "packages/three/node_modules/has-bigints": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/three/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "packages/three/node_modules/has-property-descriptors": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/three/node_modules/has-symbols": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/three/node_modules/has-tostringtag": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/three/node_modules/has-unicode": { + "version": "2.0.1", + "dev": true, + "license": "ISC" + }, + "packages/three/node_modules/hosted-git-info": { + "version": "4.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "packages/three/node_modules/htmlparser2": { + "version": "7.2.0", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.2", + "domutils": "^2.8.0", + "entities": "^3.0.1" + } + }, + "packages/three/node_modules/http-cache-semantics": { + "version": "4.1.0", + "dev": true, + "license": "BSD-2-Clause" + }, + "packages/three/node_modules/http-errors": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "packages/three/node_modules/http-errors/node_modules/depd": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "packages/three/node_modules/http-proxy-agent": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "packages/three/node_modules/http-signature": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "packages/three/node_modules/https-proxy-agent": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "packages/three/node_modules/humanize-ms": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.0.0" + } + }, + "packages/three/node_modules/iconv-lite": { + "version": "0.6.3", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three/node_modules/ignore": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "packages/three/node_modules/ignore-walk": { + "version": "3.0.4", + "dev": true, + "license": "ISC", + "dependencies": { + "minimatch": "^3.0.4" + } + }, + "packages/three/node_modules/import-fresh": { + "version": "3.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/three/node_modules/imurmurhash": { + "version": "0.1.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "packages/three/node_modules/indent-string": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "packages/three/node_modules/infer-owner": { + "version": "1.0.4", + "dev": true, + "license": "ISC" + }, + "packages/three/node_modules/inflight": { + "version": "1.0.6", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "packages/three/node_modules/inherits": { + "version": "2.0.4", + "dev": true, + "license": "ISC" + }, + "packages/three/node_modules/internal-slot": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "packages/three/node_modules/ip": { + "version": "1.1.8", + "dev": true, + "license": "MIT" + }, + "packages/three/node_modules/ipaddr.js": { + "version": "1.9.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "packages/three/node_modules/is-bigint": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/three/node_modules/is-boolean-object": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/three/node_modules/is-builtin-module": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "builtin-modules": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "packages/three/node_modules/is-callable": { + "version": "1.2.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/three/node_modules/is-core-module": { + "version": "2.9.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/three/node_modules/is-date-object": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/three/node_modules/is-docker": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/three/node_modules/is-extglob": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "packages/three/node_modules/is-glob": { + "version": "4.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three/node_modules/is-lambda": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "packages/three/node_modules/is-module": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "packages/three/node_modules/is-negative-zero": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/three/node_modules/is-number-object": { + "version": "1.0.7", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/three/node_modules/is-regex": { + "version": "1.1.4", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/three/node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/three/node_modules/is-string": { + "version": "1.0.7", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/three/node_modules/is-symbol": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/three/node_modules/is-typedarray": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "packages/three/node_modules/is-weakref": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/three/node_modules/is-wsl": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "packages/three/node_modules/isarray": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "packages/three/node_modules/isexe": { + "version": "2.0.0", + "dev": true, + "license": "ISC" + }, + "packages/three/node_modules/isstream": { + "version": "0.1.2", + "dev": true, + "license": "MIT" + }, + "packages/three/node_modules/jest-worker": { + "version": "26.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "packages/three/node_modules/jest-worker/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "packages/three/node_modules/js-tokens": { + "version": "4.0.0", + "dev": true, + "license": "MIT" + }, + "packages/three/node_modules/js-yaml": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "packages/three/node_modules/jsbn": { + "version": "0.1.1", + "dev": true, + "license": "MIT" + }, + "packages/three/node_modules/jsesc": { + "version": "2.5.2", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three/node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "dev": true, + "license": "MIT" + }, + "packages/three/node_modules/json-schema": { + "version": "0.4.0", + "dev": true, + "license": "(AFL-2.1 OR BSD-3-Clause)" + }, + "packages/three/node_modules/json-schema-traverse": { + "version": "0.4.1", + "dev": true, + "license": "MIT" + }, + "packages/three/node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "packages/three/node_modules/json-stringify-safe": { + "version": "5.0.1", + "dev": true, + "license": "ISC" + }, + "packages/three/node_modules/json5": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "packages/three/node_modules/jsonparse": { + "version": "1.3.1", + "dev": true, + "engines": [ + "node >= 0.2.0" + ], + "license": "MIT" + }, + "packages/three/node_modules/jsprim": { + "version": "1.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "packages/three/node_modules/levn": { + "version": "0.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "packages/three/node_modules/locate-path": { + "version": "6.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/three/node_modules/lodash": { + "version": "4.17.21", + "dev": true, + "license": "MIT" + }, + "packages/three/node_modules/lodash.debounce": { + "version": "4.0.8", + "dev": true, + "license": "MIT" + }, + "packages/three/node_modules/lodash.memoize": { + "version": "4.1.2", + "dev": true, + "license": "MIT" + }, + "packages/three/node_modules/lodash.merge": { + "version": "4.6.2", + "dev": true, + "license": "MIT" + }, + "packages/three/node_modules/lru-cache": { + "version": "6.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "packages/three/node_modules/make-fetch-happen": { + "version": "9.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "agentkeepalive": "^4.1.3", + "cacache": "^15.2.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.2", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^6.0.0", + "ssri": "^8.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "packages/three/node_modules/media-typer": { + "version": "0.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "packages/three/node_modules/merge-descriptors": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "packages/three/node_modules/merge-stream": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "packages/three/node_modules/methods": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "packages/three/node_modules/mime": { + "version": "1.6.0", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three/node_modules/mime-db": { + "version": "1.52.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "packages/three/node_modules/mime-types": { + "version": "2.1.35", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "packages/three/node_modules/minimatch": { + "version": "3.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "packages/three/node_modules/minimist": { + "version": "1.2.6", + "dev": true, + "license": "MIT" + }, + "packages/three/node_modules/minipass": { + "version": "3.3.3", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "packages/three/node_modules/minipass-collect": { + "version": "1.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "packages/three/node_modules/minipass-fetch": { + "version": "1.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^3.1.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "optionalDependencies": { + "encoding": "^0.1.12" + } + }, + "packages/three/node_modules/minipass-flush": { + "version": "1.0.5", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "packages/three/node_modules/minipass-json-stream": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + } + }, + "packages/three/node_modules/minipass-pipeline": { + "version": "1.2.4", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "packages/three/node_modules/minipass-sized": { + "version": "1.0.3", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "packages/three/node_modules/minizlib": { + "version": "2.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "packages/three/node_modules/mkdirp": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "packages/three/node_modules/ms": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "packages/three/node_modules/nanoid": { + "version": "3.3.4", + "dev": true, + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "packages/three/node_modules/natural-compare": { + "version": "1.4.0", + "dev": true, + "license": "MIT" + }, + "packages/three/node_modules/negotiator": { + "version": "0.6.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "packages/three/node_modules/node-forge": { + "version": "1.3.1", + "dev": true, + "license": "(BSD-3-Clause OR GPL-2.0)", + "engines": { + "node": ">= 6.13.0" + } + }, + "packages/three/node_modules/node-gyp": { + "version": "7.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.3", + "nopt": "^5.0.0", + "npmlog": "^4.1.2", + "request": "^2.88.2", + "rimraf": "^3.0.2", + "semver": "^7.3.2", + "tar": "^6.0.2", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": ">= 10.12.0" + } + }, + "packages/three/node_modules/node-gyp/node_modules/semver": { + "version": "7.3.7", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "packages/three/node_modules/node-releases": { + "version": "2.0.5", + "dev": true, + "license": "MIT" + }, + "packages/three/node_modules/nopt": { + "version": "5.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, + "packages/three/node_modules/npm-bundled": { + "version": "1.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "packages/three/node_modules/npm-install-checks": { + "version": "4.0.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "semver": "^7.1.1" + }, + "engines": { + "node": ">=10" + } + }, + "packages/three/node_modules/npm-install-checks/node_modules/semver": { + "version": "7.3.7", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "packages/three/node_modules/npm-normalize-package-bin": { + "version": "1.0.1", + "dev": true, + "license": "ISC" + }, + "packages/three/node_modules/npm-package-arg": { + "version": "8.1.5", + "dev": true, + "license": "ISC", + "dependencies": { + "hosted-git-info": "^4.0.1", + "semver": "^7.3.4", + "validate-npm-package-name": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "packages/three/node_modules/npm-package-arg/node_modules/semver": { + "version": "7.3.7", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "packages/three/node_modules/npm-packlist": { + "version": "2.2.2", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.6", + "ignore-walk": "^3.0.3", + "npm-bundled": "^1.1.1", + "npm-normalize-package-bin": "^1.0.1" + }, + "bin": { + "npm-packlist": "bin/index.js" + }, + "engines": { + "node": ">=10" + } + }, + "packages/three/node_modules/npm-pick-manifest": { + "version": "6.1.1", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-install-checks": "^4.0.0", + "npm-normalize-package-bin": "^1.0.1", + "npm-package-arg": "^8.1.2", + "semver": "^7.3.4" + } + }, + "packages/three/node_modules/npm-pick-manifest/node_modules/semver": { + "version": "7.3.7", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "packages/three/node_modules/npm-registry-fetch": { + "version": "11.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "make-fetch-happen": "^9.0.1", + "minipass": "^3.1.3", + "minipass-fetch": "^1.3.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.0.0", + "npm-package-arg": "^8.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "packages/three/node_modules/npmlog": { + "version": "4.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "packages/three/node_modules/number-is-nan": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three/node_modules/oauth-sign": { + "version": "0.9.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "packages/three/node_modules/object-assign": { + "version": "4.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three/node_modules/object-inspect": { + "version": "1.12.2", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/three/node_modules/object-keys": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "packages/three/node_modules/object.assign": { + "version": "4.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/three/node_modules/object.values": { + "version": "1.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/three/node_modules/on-finished": { + "version": "2.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "packages/three/node_modules/once": { + "version": "1.4.0", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "packages/three/node_modules/open": { + "version": "8.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/three/node_modules/optionator": { + "version": "0.9.1", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "packages/three/node_modules/p-limit": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/three/node_modules/p-locate": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/three/node_modules/p-map": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/three/node_modules/p-try": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "packages/three/node_modules/pacote": { + "version": "11.3.5", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^2.1.0", + "@npmcli/installed-package-contents": "^1.0.6", + "@npmcli/promise-spawn": "^1.2.0", + "@npmcli/run-script": "^1.8.2", + "cacache": "^15.0.5", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "infer-owner": "^1.0.4", + "minipass": "^3.1.3", + "mkdirp": "^1.0.3", + "npm-package-arg": "^8.0.1", + "npm-packlist": "^2.1.4", + "npm-pick-manifest": "^6.0.0", + "npm-registry-fetch": "^11.0.0", + "promise-retry": "^2.0.1", + "read-package-json-fast": "^2.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.1.0" + }, + "bin": { + "pacote": "lib/bin.js" + }, + "engines": { + "node": ">=10" + } + }, + "packages/three/node_modules/parent-module": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "packages/three/node_modules/parseurl": { + "version": "1.3.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "packages/three/node_modules/path-exists": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "packages/three/node_modules/path-is-absolute": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three/node_modules/path-key": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "packages/three/node_modules/path-parse": { + "version": "1.0.7", + "dev": true, + "license": "MIT" + }, + "packages/three/node_modules/path-to-regexp": { + "version": "0.1.7", + "dev": true, + "license": "MIT" + }, + "packages/three/node_modules/performance-now": { + "version": "2.1.0", + "dev": true, + "license": "MIT" + }, + "packages/three/node_modules/picocolors": { + "version": "1.0.0", + "dev": true, + "license": "ISC" + }, + "packages/three/node_modules/picomatch": { + "version": "2.3.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "packages/three/node_modules/prelude-ls": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "packages/three/node_modules/process-nextick-args": { + "version": "2.0.1", + "dev": true, + "license": "MIT" + }, + "packages/three/node_modules/promise-inflight": { + "version": "1.0.1", + "dev": true, + "license": "ISC" + }, + "packages/three/node_modules/promise-retry": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "packages/three/node_modules/proxy-addr": { + "version": "2.0.7", + "dev": true, + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "packages/three/node_modules/psl": { + "version": "1.8.0", + "dev": true, + "license": "MIT" + }, + "packages/three/node_modules/punycode": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "packages/three/node_modules/qs": { + "version": "6.5.3", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.6" + } + }, + "packages/three/node_modules/randombytes": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "packages/three/node_modules/range-parser": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "packages/three/node_modules/raw-body": { + "version": "2.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "packages/three/node_modules/raw-body/node_modules/iconv-lite": { + "version": "0.4.24", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three/node_modules/read-package-json-fast": { + "version": "2.0.3", + "dev": true, + "license": "ISC", + "dependencies": { + "json-parse-even-better-errors": "^2.3.0", + "npm-normalize-package-bin": "^1.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "packages/three/node_modules/readable-stream": { + "version": "2.3.7", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "packages/three/node_modules/regenerate": { + "version": "1.4.2", + "dev": true, + "license": "MIT" + }, + "packages/three/node_modules/regenerate-unicode-properties": { + "version": "10.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three/node_modules/regenerator-runtime": { + "version": "0.13.9", + "dev": true, + "license": "MIT" + }, + "packages/three/node_modules/regenerator-transform": { + "version": "0.15.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "packages/three/node_modules/regexp.prototype.flags": { + "version": "1.4.3", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/three/node_modules/regexpp": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "packages/three/node_modules/regexpu-core": { + "version": "5.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.0.1", + "regjsgen": "^0.6.0", + "regjsparser": "^0.8.2", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three/node_modules/regjsgen": { + "version": "0.6.0", + "dev": true, + "license": "MIT" + }, + "packages/three/node_modules/regjsparser": { + "version": "0.8.4", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "packages/three/node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "packages/three/node_modules/request": { + "version": "2.88.2", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "packages/three/node_modules/require-directory": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three/node_modules/resolve": { + "version": "1.22.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/three/node_modules/resolve-from": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "packages/three/node_modules/retry": { + "version": "0.12.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "packages/three/node_modules/rimraf": { + "version": "3.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "packages/three/node_modules/rollup": { + "version": "2.75.7", + "dev": true, + "license": "MIT", + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "packages/three/node_modules/rollup-plugin-filesize": { + "version": "9.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.8", + "boxen": "^5.0.0", + "brotli-size": "4.0.0", + "colors": "1.4.0", + "filesize": "^6.1.0", + "gzip-size": "^6.0.0", + "pacote": "^11.2.7", + "terser": "^5.6.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "packages/three/node_modules/rollup-plugin-terser": { + "version": "7.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "jest-worker": "^26.2.1", + "serialize-javascript": "^4.0.0", + "terser": "^5.0.0" + }, + "peerDependencies": { + "rollup": "^2.0.0" + } + }, + "packages/three/node_modules/rollup-plugin-visualizer": { + "version": "5.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "nanoid": "^3.1.32", + "open": "^8.4.0", + "source-map": "^0.7.3", + "yargs": "^17.3.1" + }, + "bin": { + "rollup-plugin-visualizer": "dist/bin/cli.js" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "rollup": "^2.0.0" + } + }, + "packages/three/node_modules/rxjs": { + "version": "7.5.5", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "packages/three/node_modules/safe-buffer": { + "version": "5.1.2", + "dev": true, + "license": "MIT" + }, + "packages/three/node_modules/safer-buffer": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "packages/three/node_modules/secure-compare": { + "version": "3.0.1", + "dev": true, + "license": "MIT" + }, + "packages/three/node_modules/selfsigned": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "node-forge": "^1" + }, + "engines": { + "node": ">=10" + } + }, + "packages/three/node_modules/semver": { + "version": "6.3.0", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "packages/three/node_modules/send": { + "version": "0.18.0", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "packages/three/node_modules/send/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "packages/three/node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "packages/three/node_modules/send/node_modules/depd": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "packages/three/node_modules/send/node_modules/ms": { + "version": "2.1.3", + "dev": true, + "license": "MIT" + }, + "packages/three/node_modules/serialize-javascript": { + "version": "4.0.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "packages/three/node_modules/serve-index": { + "version": "1.9.1", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "packages/three/node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "packages/three/node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "packages/three/node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "dev": true, + "license": "ISC" + }, + "packages/three/node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "packages/three/node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "dev": true, + "license": "ISC" + }, + "packages/three/node_modules/serve-index/node_modules/statuses": { + "version": "1.5.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "packages/three/node_modules/serve-static": { + "version": "1.15.0", + "dev": true, + "license": "MIT", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "packages/three/node_modules/server-destroy": { + "version": "1.0.1", + "dev": true, + "license": "ISC" + }, + "packages/three/node_modules/servez": { + "version": "1.14.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-colors": "^4.1.1", + "color-support": "^1.1.3", + "optionator": "^0.8.2", + "servez-lib": "^2.6.0" + }, + "bin": { + "servez": "bin/servez" + } + }, + "packages/three/node_modules/servez-lib": { + "version": "2.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "basic-auth": "^2.0.1", + "cors": "^2.8.5", + "debug": "^4.3.4", + "express": "^4.17.3", + "secure-compare": "^3.0.1", + "selfsigned": "^2.0.1", + "serve-index": "^1.9.1", + "server-destroy": "^1.0.1" + } + }, + "packages/three/node_modules/servez/node_modules/levn": { + "version": "0.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "packages/three/node_modules/servez/node_modules/optionator": { + "version": "0.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "packages/three/node_modules/servez/node_modules/prelude-ls": { + "version": "1.1.2", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "packages/three/node_modules/servez/node_modules/type-check": { + "version": "0.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "packages/three/node_modules/set-blocking": { + "version": "2.0.0", + "dev": true, + "license": "ISC" + }, + "packages/three/node_modules/setprototypeof": { + "version": "1.2.0", + "dev": true, + "license": "ISC" + }, + "packages/three/node_modules/shebang-command": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "packages/three/node_modules/shebang-regex": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "packages/three/node_modules/shell-quote": { + "version": "1.7.3", + "dev": true, + "license": "MIT" + }, + "packages/three/node_modules/side-channel": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/three/node_modules/signal-exit": { + "version": "3.0.7", + "dev": true, + "license": "ISC" + }, + "packages/three/node_modules/smart-buffer": { + "version": "4.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "packages/three/node_modules/socks": { + "version": "2.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ip": "^1.1.5", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 3.0.0" + } + }, + "packages/three/node_modules/socks-proxy-agent": { + "version": "6.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + }, + "engines": { + "node": ">= 10" + } + }, + "packages/three/node_modules/source-map": { + "version": "0.7.4", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">= 8" + } + }, + "packages/three/node_modules/source-map-support": { + "version": "0.5.21", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "packages/three/node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three/node_modules/spawn-command": { + "version": "0.0.2-1", + "dev": true, + "license": "MIT" + }, + "packages/three/node_modules/sshpk": { + "version": "1.17.0", + "dev": true, + "license": "MIT", + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three/node_modules/ssri": { + "version": "8.0.1", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": ">= 8" + } + }, + "packages/three/node_modules/statuses": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "packages/three/node_modules/string_decoder": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "packages/three/node_modules/string-width": { + "version": "4.2.3", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "packages/three/node_modules/string.prototype.trimend": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/three/node_modules/string.prototype.trimstart": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/three/node_modules/strip-ansi": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "packages/three/node_modules/strip-bom": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "packages/three/node_modules/strip-json-comments": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/three/node_modules/supports-color": { + "version": "8.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "packages/three/node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/three/node_modules/tar": { + "version": "6.1.11", + "dev": true, + "license": "ISC", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "packages/three/node_modules/terser": { + "version": "5.14.2", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "packages/three/node_modules/text-table": { + "version": "0.2.0", + "dev": true, + "license": "MIT" + }, + "packages/three/node_modules/to-fast-properties": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "packages/three/node_modules/toidentifier": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "packages/three/node_modules/tough-cookie": { + "version": "2.5.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "packages/three/node_modules/tree-kill": { + "version": "1.2.2", + "dev": true, + "license": "MIT", + "bin": { + "tree-kill": "cli.js" + } + }, + "packages/three/node_modules/tsconfig-paths": { + "version": "3.14.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "packages/three/node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "packages/three/node_modules/tslib": { + "version": "2.4.0", + "dev": true, + "license": "0BSD" + }, + "packages/three/node_modules/tunnel-agent": { + "version": "0.6.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "packages/three/node_modules/tweetnacl": { + "version": "0.14.5", + "dev": true, + "license": "Unlicense" + }, + "packages/three/node_modules/type-check": { + "version": "0.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "packages/three/node_modules/type-fest": { + "version": "0.20.2", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/three/node_modules/type-is": { + "version": "1.6.18", + "dev": true, + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "packages/three/node_modules/unbox-primitive": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/three/node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "packages/three/node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/three/node_modules/unicode-match-property-value-ecmascript": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "packages/three/node_modules/unicode-property-aliases-ecmascript": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "packages/three/node_modules/unique-filename": { + "version": "1.1.1", + "dev": true, + "license": "ISC", + "dependencies": { + "unique-slug": "^2.0.0" + } + }, + "packages/three/node_modules/unique-slug": { + "version": "2.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + } + }, + "packages/three/node_modules/unpipe": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "packages/three/node_modules/uri-js": { + "version": "4.4.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "packages/three/node_modules/util-deprecate": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "packages/three/node_modules/utils-merge": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "packages/three/node_modules/uuid": { + "version": "3.4.0", + "dev": true, + "license": "MIT", + "bin": { + "uuid": "bin/uuid" + } + }, + "packages/three/node_modules/v8-compile-cache": { + "version": "2.3.0", + "dev": true, + "license": "MIT" + }, + "packages/three/node_modules/validate-npm-package-name": { + "version": "3.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "builtins": "^1.0.3" + } + }, + "packages/three/node_modules/vary": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "packages/three/node_modules/verror": { + "version": "1.10.0", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "packages/three/node_modules/verror/node_modules/core-util-is": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "packages/three/node_modules/which": { + "version": "2.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "packages/three/node_modules/which-boxed-primitive": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/three/node_modules/wide-align": { + "version": "1.1.5", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "packages/three/node_modules/widest-line": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "string-width": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "packages/three/node_modules/word-wrap": { + "version": "1.2.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/three/node_modules/wrap-ansi": { + "version": "7.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "packages/three/node_modules/wrappy": { + "version": "1.0.2", + "dev": true, + "license": "ISC" + }, + "packages/three/node_modules/y18n": { + "version": "5.0.8", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "packages/three/node_modules/yallist": { + "version": "4.0.0", + "dev": true, + "license": "ISC" + }, + "packages/three/node_modules/yargs": { + "version": "17.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "packages/three/node_modules/yargs-parser": { + "version": "21.0.1", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "packages/three/node_modules/yocto-queue": { + "version": "0.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/totum": { + "name": "metaversefile", + "version": "0.0.32", + "license": "ISC", + "dependencies": { + "@babel/core": "^7.15.0", + "@babel/preset-react": "^7.14.5", + "data-urls": "^3.0.1", + "mime-types": "^2.1.32", + "node-fetch": "^2.6.1", + "pako": "^2.0.4", + "unix-path": "^0.2.0" + } + }, + "packages/totum/node_modules/pako": { + "version": "2.0.4", + "license": "(MIT AND Zlib)" + }, + "packages/wsrtc": { + "version": "0.0.6", + "license": "ISC", + "dependencies": { + "dotenv": "^10.0.0", + "express": "^4.17.1", + "ws": "^8.2.0" + }, + "peerDependencies": { + "zjs": "" + } + }, + "packages/wsrtc/node_modules/dotenv": { + "version": "10.0.0", + "license": "BSD-2-Clause", + "engines": { + "node": ">=10" + } + }, + "packages/wsrtc/node_modules/ws": { + "version": "8.8.0", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "packages/zjs": { + "version": "0.0.1", + "license": "ISC", + "dependencies": { + "alea": "^1.0.1", + "mocha": "^9.1.3" + } + } + }, + "dependencies": { + "@ampproject/remapping": { + "version": "2.2.0", + "requires": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@babel/code-frame": { + "version": "7.18.6", + "requires": { + "@babel/highlight": "^7.18.6" + } + }, + "@babel/compat-data": { + "version": "7.18.8" + }, + "@babel/core": { + "version": "7.18.6", + "requires": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.18.6", + "@babel/helper-compilation-targets": "^7.18.6", + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helpers": "^7.18.6", + "@babel/parser": "^7.18.6", + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.6", + "@babel/types": "^7.18.6", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2" + } + } + }, + "@babel/generator": { + "version": "7.18.12", + "requires": { + "@babel/types": "^7.18.10", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + }, + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + } + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.18.6", + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.18.9", + "requires": { + "@babel/compat-data": "^7.18.8", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.20.2", + "semver": "^6.3.0" + } + }, + "@babel/helper-environment-visitor": { + "version": "7.18.9" + }, + "@babel/helper-function-name": { + "version": "7.18.9", + "requires": { + "@babel/template": "^7.18.6", + "@babel/types": "^7.18.9" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.18.6", + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-module-imports": { + "version": "7.18.6", + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-module-transforms": { + "version": "7.18.9", + "requires": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.18.6", + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.9", + "@babel/types": "^7.18.9" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.18.9" + }, + "@babel/helper-simple-access": { + "version": "7.18.6", + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.18.6", + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-string-parser": { + "version": "7.18.10" + }, + "@babel/helper-validator-identifier": { + "version": "7.18.6" + }, + "@babel/helper-validator-option": { + "version": "7.18.6" + }, + "@babel/helpers": { + "version": "7.18.6", + "requires": { + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.6", + "@babel/types": "^7.18.6" + } + }, + "@babel/highlight": { + "version": "7.18.6", + "requires": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.18.11" + }, + "@babel/plugin-syntax-jsx": { + "version": "7.18.6", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-react-display-name": { + "version": "7.18.6", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-react-jsx": { + "version": "7.18.6", + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-jsx": "^7.18.6", + "@babel/types": "^7.18.6" + } + }, + "@babel/plugin-transform-react-jsx-development": { + "version": "7.18.6", + "requires": { + "@babel/plugin-transform-react-jsx": "^7.18.6" + } + }, + "@babel/plugin-transform-react-jsx-self": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-react-jsx-source": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-react-pure-annotations": { + "version": "7.18.6", + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/preset-react": { + "version": "7.18.6", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-transform-react-display-name": "^7.18.6", + "@babel/plugin-transform-react-jsx": "^7.18.6", + "@babel/plugin-transform-react-jsx-development": "^7.18.6", + "@babel/plugin-transform-react-pure-annotations": "^7.18.6" + } + }, + "@babel/runtime": { + "version": "7.18.6", + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/template": { + "version": "7.18.10", + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.10", + "@babel/types": "^7.18.10" + } + }, + "@babel/traverse": { + "version": "7.18.11", + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.18.10", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.18.11", + "@babel/types": "^7.18.10", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2" + } + } + }, + "@babel/types": { + "version": "7.18.10", + "requires": { + "@babel/helper-string-parser": "^7.18.10", + "@babel/helper-validator-identifier": "^7.18.6", + "to-fast-properties": "^2.0.0" + } + }, + "@eslint/eslintrc": { + "version": "0.4.3", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "argparse": { + "version": "1.0.10", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "debug": { + "version": "4.3.4", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "globals": { + "version": "13.16.0", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "js-yaml": { + "version": "3.14.1", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "minimatch": { + "version": "3.1.2", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "ms": { + "version": "2.1.2", + "dev": true + } + } + }, + "@ethersproject/abi": { + "version": "5.6.4", + "requires": { + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/hash": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/strings": "^5.6.1" + } + }, + "@ethersproject/abstract-provider": { + "version": "5.6.1", + "requires": { + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/networks": "^5.6.3", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/transactions": "^5.6.2", + "@ethersproject/web": "^5.6.1" + } + }, + "@ethersproject/abstract-signer": { + "version": "5.6.2", + "requires": { + "@ethersproject/abstract-provider": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0" + } + }, + "@ethersproject/address": { + "version": "5.6.1", + "requires": { + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/rlp": "^5.6.1" + } + }, + "@ethersproject/base64": { + "version": "5.6.1", + "requires": { + "@ethersproject/bytes": "^5.6.1" + } + }, + "@ethersproject/basex": { + "version": "5.6.1", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/properties": "^5.6.0" + } + }, + "@ethersproject/bignumber": { + "version": "5.6.2", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "bn.js": "^5.2.1" + } + }, + "@ethersproject/bytes": { + "version": "5.6.1", + "requires": { + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/constants": { + "version": "5.6.1", + "requires": { + "@ethersproject/bignumber": "^5.6.2" + } + }, + "@ethersproject/contracts": { + "version": "5.6.2", + "requires": { + "@ethersproject/abi": "^5.6.3", + "@ethersproject/abstract-provider": "^5.6.1", + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/transactions": "^5.6.2" + } + }, + "@ethersproject/hash": { + "version": "5.6.1", + "requires": { + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/strings": "^5.6.1" + } + }, + "@ethersproject/hdnode": { + "version": "5.6.2", + "requires": { + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/basex": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/pbkdf2": "^5.6.1", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/sha2": "^5.6.1", + "@ethersproject/signing-key": "^5.6.2", + "@ethersproject/strings": "^5.6.1", + "@ethersproject/transactions": "^5.6.2", + "@ethersproject/wordlists": "^5.6.1" + } + }, + "@ethersproject/json-wallets": { + "version": "5.6.1", + "requires": { + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/address": "^5.6.1", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/hdnode": "^5.6.2", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/pbkdf2": "^5.6.1", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/random": "^5.6.1", + "@ethersproject/strings": "^5.6.1", + "@ethersproject/transactions": "^5.6.2", + "aes-js": "3.0.0", + "scrypt-js": "3.0.1" + } + }, + "@ethersproject/keccak256": { + "version": "5.6.1", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "js-sha3": "0.8.0" + } + }, + "@ethersproject/logger": { + "version": "5.6.0" + }, + "@ethersproject/networks": { + "version": "5.6.4", + "requires": { + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/pbkdf2": { + "version": "5.6.1", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/sha2": "^5.6.1" + } + }, + "@ethersproject/properties": { + "version": "5.6.0", + "requires": { + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/providers": { + "version": "5.6.8", + "requires": { + "@ethersproject/abstract-provider": "^5.6.1", + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/address": "^5.6.1", + "@ethersproject/base64": "^5.6.1", + "@ethersproject/basex": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/hash": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/networks": "^5.6.3", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/random": "^5.6.1", + "@ethersproject/rlp": "^5.6.1", + "@ethersproject/sha2": "^5.6.1", + "@ethersproject/strings": "^5.6.1", + "@ethersproject/transactions": "^5.6.2", + "@ethersproject/web": "^5.6.1", + "bech32": "1.1.4", + "ws": "7.4.6" + } + }, + "@ethersproject/random": { + "version": "5.6.1", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/rlp": { + "version": "5.6.1", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/sha2": { + "version": "5.6.1", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "hash.js": "1.1.7" + } + }, + "@ethersproject/signing-key": { + "version": "5.6.2", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "bn.js": "^5.2.1", + "elliptic": "6.5.4", + "hash.js": "1.1.7" + } + }, + "@ethersproject/solidity": { + "version": "5.6.1", + "requires": { + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/sha2": "^5.6.1", + "@ethersproject/strings": "^5.6.1" + } + }, + "@ethersproject/strings": { + "version": "5.6.1", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/transactions": { + "version": "5.6.2", + "requires": { + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/rlp": "^5.6.1", + "@ethersproject/signing-key": "^5.6.2" + } + }, + "@ethersproject/units": { + "version": "5.6.1", + "requires": { + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/wallet": { + "version": "5.6.2", + "requires": { + "@ethersproject/abstract-provider": "^5.6.1", + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/hash": "^5.6.1", + "@ethersproject/hdnode": "^5.6.2", + "@ethersproject/json-wallets": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/random": "^5.6.1", + "@ethersproject/signing-key": "^5.6.2", + "@ethersproject/transactions": "^5.6.2", + "@ethersproject/wordlists": "^5.6.1" + } + }, + "@ethersproject/web": { + "version": "5.6.1", + "requires": { + "@ethersproject/base64": "^5.6.1", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/strings": "^5.6.1" + } + }, + "@ethersproject/wordlists": { + "version": "5.6.1", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/hash": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/strings": "^5.6.1" + } + }, + "@humanwhocodes/config-array": { + "version": "0.5.0", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "minimatch": { + "version": "3.1.2", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "ms": { + "version": "2.1.2", + "dev": true + } + } + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "dev": true + }, + "@jridgewell/gen-mapping": { + "version": "0.1.1", + "requires": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0" + }, + "@jridgewell/set-array": { + "version": "1.1.2" + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.14" + }, + "@jridgewell/trace-mapping": { + "version": "0.3.14", + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@pixiv/three-vrm": { + "version": "file:packages/three-vrm", + "requires": { + "@rollup/plugin-typescript": "^8.1.1", + "@types/offscreencanvas": "^2019.7.0", + "@types/three": "^0.143.0", + "@typescript-eslint/eslint-plugin": "^4.6.1", + "@typescript-eslint/parser": "^4.6.1", + "cross-env": "^7.0.2", + "downlevel-dts": "^0.7.0", + "eslint": "^7.12.1", + "eslint-config-prettier": "^7.1.0", + "lerna": "^3.22.1", + "lint-staged": "10.5.4", + "prettier": "^2.1.2", + "quicktype": "^15.0.258", + "rimraf": "^3.0.2", + "rollup": "^2.33.1", + "rollup-plugin-serve": "^1.1.0", + "rollup-plugin-string": "^3.0.0", + "rollup-plugin-terser": "^7.0.2", + "tslib": "^2.0.3", + "typedoc": "^0.20.36", + "typescript": "^4.0.5" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/highlight": "^7.18.6" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.18.6", + "dev": true + }, + "@babel/highlight": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@eslint/eslintrc": { + "version": "0.4.3", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "ignore": { + "version": "4.0.6", + "dev": true + } + } + }, + "@evocateur/libnpmaccess": { + "version": "3.1.2", + "dev": true, + "requires": { + "@evocateur/npm-registry-fetch": "^4.0.0", + "aproba": "^2.0.0", + "figgy-pudding": "^3.5.1", + "get-stream": "^4.0.0", + "npm-package-arg": "^6.1.0" + }, + "dependencies": { + "get-stream": { + "version": "4.1.0", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + } + } + }, + "@evocateur/libnpmpublish": { + "version": "1.2.2", + "dev": true, + "requires": { + "@evocateur/npm-registry-fetch": "^4.0.0", + "aproba": "^2.0.0", + "figgy-pudding": "^3.5.1", + "get-stream": "^4.0.0", + "lodash.clonedeep": "^4.5.0", + "normalize-package-data": "^2.4.0", + "npm-package-arg": "^6.1.0", + "semver": "^5.5.1", + "ssri": "^6.0.1" + }, + "dependencies": { + "get-stream": { + "version": "4.1.0", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + } + } + }, + "@evocateur/npm-registry-fetch": { + "version": "4.0.0", + "dev": true, + "requires": { + "bluebird": "^3.5.1", + "figgy-pudding": "^3.4.1", + "JSONStream": "^1.3.4", + "lru-cache": "^5.1.1", + "make-fetch-happen": "^5.0.0", + "npm-package-arg": "^6.1.0", + "safe-buffer": "^5.1.2" + } + }, + "@evocateur/pacote": { + "version": "9.6.5", + "dev": true, + "requires": { + "@evocateur/npm-registry-fetch": "^4.0.0", + "bluebird": "^3.5.3", + "cacache": "^12.0.3", + "chownr": "^1.1.2", + "figgy-pudding": "^3.5.1", + "get-stream": "^4.1.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^5.1.1", + "make-fetch-happen": "^5.0.0", + "minimatch": "^3.0.4", + "minipass": "^2.3.5", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "normalize-package-data": "^2.5.0", + "npm-package-arg": "^6.1.0", + "npm-packlist": "^1.4.4", + "npm-pick-manifest": "^3.0.0", + "osenv": "^0.1.5", + "promise-inflight": "^1.0.1", + "promise-retry": "^1.1.1", + "protoduck": "^5.0.1", + "rimraf": "^2.6.3", + "safe-buffer": "^5.2.0", + "semver": "^5.7.0", + "ssri": "^6.0.1", + "tar": "^4.4.10", + "unique-filename": "^1.1.1", + "which": "^1.3.1" + }, + "dependencies": { + "get-stream": { + "version": "4.1.0", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "rimraf": { + "version": "2.7.1", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.2.1", + "dev": true + }, + "which": { + "version": "1.3.1", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "@humanwhocodes/config-array": { + "version": "0.5.0", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + } + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "dev": true + }, + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "dev": true + }, + "@jridgewell/source-map": { + "version": "0.3.2", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.14", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@lerna/add": { + "version": "3.21.0", + "dev": true, + "requires": { + "@evocateur/pacote": "^9.6.3", + "@lerna/bootstrap": "3.21.0", + "@lerna/command": "3.21.0", + "@lerna/filter-options": "3.20.0", + "@lerna/npm-conf": "3.16.0", + "@lerna/validation-error": "3.13.0", + "dedent": "^0.7.0", + "npm-package-arg": "^6.1.0", + "p-map": "^2.1.0", + "semver": "^6.2.0" + }, + "dependencies": { + "p-map": { + "version": "2.1.0", + "dev": true + }, + "semver": { + "version": "6.3.0", + "dev": true + } + } + }, + "@lerna/bootstrap": { + "version": "3.21.0", + "dev": true, + "requires": { + "@lerna/command": "3.21.0", + "@lerna/filter-options": "3.20.0", + "@lerna/has-npm-version": "3.16.5", + "@lerna/npm-install": "3.16.5", + "@lerna/package-graph": "3.18.5", + "@lerna/pulse-till-done": "3.13.0", + "@lerna/rimraf-dir": "3.16.5", + "@lerna/run-lifecycle": "3.16.2", + "@lerna/run-topologically": "3.18.5", + "@lerna/symlink-binary": "3.17.0", + "@lerna/symlink-dependencies": "3.17.0", + "@lerna/validation-error": "3.13.0", + "dedent": "^0.7.0", + "get-port": "^4.2.0", + "multimatch": "^3.0.0", + "npm-package-arg": "^6.1.0", + "npmlog": "^4.1.2", + "p-finally": "^1.0.0", + "p-map": "^2.1.0", + "p-map-series": "^1.0.0", + "p-waterfall": "^1.0.0", + "read-package-tree": "^5.1.6", + "semver": "^6.2.0" + }, + "dependencies": { + "p-map": { + "version": "2.1.0", + "dev": true + }, + "semver": { + "version": "6.3.0", + "dev": true + } + } + }, + "@lerna/changed": { + "version": "3.21.0", + "dev": true, + "requires": { + "@lerna/collect-updates": "3.20.0", + "@lerna/command": "3.21.0", + "@lerna/listable": "3.18.5", + "@lerna/output": "3.13.0" + } + }, + "@lerna/check-working-tree": { + "version": "3.16.5", + "dev": true, + "requires": { + "@lerna/collect-uncommitted": "3.16.5", + "@lerna/describe-ref": "3.16.5", + "@lerna/validation-error": "3.13.0" + } + }, + "@lerna/child-process": { + "version": "3.16.5", + "dev": true, + "requires": { + "chalk": "^2.3.1", + "execa": "^1.0.0", + "strong-log-transformer": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "dev": true + }, + "cross-spawn": { + "version": "6.0.5", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "1.0.0", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "get-stream": { + "version": "4.1.0", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "has-flag": { + "version": "3.0.0", + "dev": true + }, + "is-stream": { + "version": "1.1.0", + "dev": true + }, + "npm-run-path": { + "version": "2.0.2", + "dev": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "path-key": { + "version": "2.0.1", + "dev": true + }, + "shebang-command": { + "version": "1.2.0", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "which": { + "version": "1.3.1", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "@lerna/clean": { + "version": "3.21.0", + "dev": true, + "requires": { + "@lerna/command": "3.21.0", + "@lerna/filter-options": "3.20.0", + "@lerna/prompt": "3.18.5", + "@lerna/pulse-till-done": "3.13.0", + "@lerna/rimraf-dir": "3.16.5", + "p-map": "^2.1.0", + "p-map-series": "^1.0.0", + "p-waterfall": "^1.0.0" + }, + "dependencies": { + "p-map": { + "version": "2.1.0", + "dev": true + } + } + }, + "@lerna/cli": { + "version": "3.18.5", + "dev": true, + "requires": { + "@lerna/global-options": "3.13.0", + "dedent": "^0.7.0", + "npmlog": "^4.1.2", + "yargs": "^14.2.2" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.1", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "cliui": { + "version": "5.0.0", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "color-convert": { + "version": "1.9.3", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "dev": true + }, + "emoji-regex": { + "version": "7.0.3", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "dev": true + }, + "require-main-filename": { + "version": "2.0.0", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "wrap-ansi": { + "version": "5.1.0", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + }, + "yargs": { + "version": "14.2.3", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^15.0.1" + } + }, + "yargs-parser": { + "version": "15.0.3", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "@lerna/collect-uncommitted": { + "version": "3.16.5", + "dev": true, + "requires": { + "@lerna/child-process": "3.16.5", + "chalk": "^2.3.1", + "figgy-pudding": "^3.5.1", + "npmlog": "^4.1.2" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@lerna/collect-updates": { + "version": "3.20.0", + "dev": true, + "requires": { + "@lerna/child-process": "3.16.5", + "@lerna/describe-ref": "3.16.5", + "minimatch": "^3.0.4", + "npmlog": "^4.1.2", + "slash": "^2.0.0" + }, + "dependencies": { + "slash": { + "version": "2.0.0", + "dev": true + } + } + }, + "@lerna/command": { + "version": "3.21.0", + "dev": true, + "requires": { + "@lerna/child-process": "3.16.5", + "@lerna/package-graph": "3.18.5", + "@lerna/project": "3.21.0", + "@lerna/validation-error": "3.13.0", + "@lerna/write-log-file": "3.13.0", + "clone-deep": "^4.0.1", + "dedent": "^0.7.0", + "execa": "^1.0.0", + "is-ci": "^2.0.0", + "npmlog": "^4.1.2" + }, + "dependencies": { + "cross-spawn": { + "version": "6.0.5", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "1.0.0", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "get-stream": { + "version": "4.1.0", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "is-stream": { + "version": "1.1.0", + "dev": true + }, + "npm-run-path": { + "version": "2.0.2", + "dev": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "path-key": { + "version": "2.0.1", + "dev": true + }, + "shebang-command": { + "version": "1.2.0", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "dev": true + }, + "which": { + "version": "1.3.1", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "@lerna/conventional-commits": { + "version": "3.22.0", + "dev": true, + "requires": { + "@lerna/validation-error": "3.13.0", + "conventional-changelog-angular": "^5.0.3", + "conventional-changelog-core": "^3.1.6", + "conventional-recommended-bump": "^5.0.0", + "fs-extra": "^8.1.0", + "get-stream": "^4.0.0", + "lodash.template": "^4.5.0", + "npm-package-arg": "^6.1.0", + "npmlog": "^4.1.2", + "pify": "^4.0.1", + "semver": "^6.2.0" + }, + "dependencies": { + "get-stream": { + "version": "4.1.0", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "semver": { + "version": "6.3.0", + "dev": true + } + } + }, + "@lerna/create": { + "version": "3.22.0", + "dev": true, + "requires": { + "@evocateur/pacote": "^9.6.3", + "@lerna/child-process": "3.16.5", + "@lerna/command": "3.21.0", + "@lerna/npm-conf": "3.16.0", + "@lerna/validation-error": "3.13.0", + "camelcase": "^5.0.0", + "dedent": "^0.7.0", + "fs-extra": "^8.1.0", + "globby": "^9.2.0", + "init-package-json": "^1.10.3", + "npm-package-arg": "^6.1.0", + "p-reduce": "^1.0.0", + "pify": "^4.0.1", + "semver": "^6.2.0", + "slash": "^2.0.0", + "validate-npm-package-license": "^3.0.3", + "validate-npm-package-name": "^3.0.0", + "whatwg-url": "^7.0.0" + }, + "dependencies": { + "@nodelib/fs.stat": { + "version": "1.1.3", + "dev": true + }, + "array-union": { + "version": "1.0.2", + "dev": true, + "requires": { + "array-uniq": "^1.0.1" + } + }, + "braces": { + "version": "2.3.2", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "dir-glob": { + "version": "2.2.2", + "dev": true, + "requires": { + "path-type": "^3.0.0" + } + }, + "fast-glob": { + "version": "2.2.7", + "dev": true, + "requires": { + "@mrmlnc/readdir-enhanced": "^2.2.1", + "@nodelib/fs.stat": "^1.1.2", + "glob-parent": "^3.1.0", + "is-glob": "^4.0.0", + "merge2": "^1.2.3", + "micromatch": "^3.1.10" + } + }, + "fill-range": { + "version": "4.0.0", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "glob-parent": { + "version": "3.1.0", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "globby": { + "version": "9.2.0", + "dev": true, + "requires": { + "@types/glob": "^7.1.1", + "array-union": "^1.0.2", + "dir-glob": "^2.2.2", + "fast-glob": "^2.2.6", + "glob": "^7.1.3", + "ignore": "^4.0.3", + "pify": "^4.0.1", + "slash": "^2.0.0" + } + }, + "ignore": { + "version": "4.0.6", + "dev": true + }, + "is-extendable": { + "version": "0.1.1", + "dev": true + }, + "is-number": { + "version": "3.0.0", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "micromatch": { + "version": "3.1.10", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "path-type": { + "version": "3.0.0", + "dev": true, + "requires": { + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "dev": true + } + } + }, + "semver": { + "version": "6.3.0", + "dev": true + }, + "slash": { + "version": "2.0.0", + "dev": true + }, + "to-regex-range": { + "version": "2.1.1", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "tr46": { + "version": "1.0.1", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "webidl-conversions": { + "version": "4.0.2", + "dev": true + }, + "whatwg-url": { + "version": "7.1.0", + "dev": true, + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + } + } + }, + "@lerna/create-symlink": { + "version": "3.16.2", + "dev": true, + "requires": { + "@zkochan/cmd-shim": "^3.1.0", + "fs-extra": "^8.1.0", + "npmlog": "^4.1.2" + } + }, + "@lerna/describe-ref": { + "version": "3.16.5", + "dev": true, + "requires": { + "@lerna/child-process": "3.16.5", + "npmlog": "^4.1.2" + } + }, + "@lerna/diff": { + "version": "3.21.0", + "dev": true, + "requires": { + "@lerna/child-process": "3.16.5", + "@lerna/command": "3.21.0", + "@lerna/validation-error": "3.13.0", + "npmlog": "^4.1.2" + } + }, + "@lerna/exec": { + "version": "3.21.0", + "dev": true, + "requires": { + "@lerna/child-process": "3.16.5", + "@lerna/command": "3.21.0", + "@lerna/filter-options": "3.20.0", + "@lerna/profiler": "3.20.0", + "@lerna/run-topologically": "3.18.5", + "@lerna/validation-error": "3.13.0", + "p-map": "^2.1.0" + }, + "dependencies": { + "p-map": { + "version": "2.1.0", + "dev": true + } + } + }, + "@lerna/filter-options": { + "version": "3.20.0", + "dev": true, + "requires": { + "@lerna/collect-updates": "3.20.0", + "@lerna/filter-packages": "3.18.0", + "dedent": "^0.7.0", + "figgy-pudding": "^3.5.1", + "npmlog": "^4.1.2" + } + }, + "@lerna/filter-packages": { + "version": "3.18.0", + "dev": true, + "requires": { + "@lerna/validation-error": "3.13.0", + "multimatch": "^3.0.0", + "npmlog": "^4.1.2" + } + }, + "@lerna/get-npm-exec-opts": { + "version": "3.13.0", + "dev": true, + "requires": { + "npmlog": "^4.1.2" + } + }, + "@lerna/get-packed": { + "version": "3.16.0", + "dev": true, + "requires": { + "fs-extra": "^8.1.0", + "ssri": "^6.0.1", + "tar": "^4.4.8" + } + }, + "@lerna/github-client": { + "version": "3.22.0", + "dev": true, + "requires": { + "@lerna/child-process": "3.16.5", + "@octokit/plugin-enterprise-rest": "^6.0.1", + "@octokit/rest": "^16.28.4", + "git-url-parse": "^11.1.2", + "npmlog": "^4.1.2" + } + }, + "@lerna/gitlab-client": { + "version": "3.15.0", + "dev": true, + "requires": { + "node-fetch": "^2.5.0", + "npmlog": "^4.1.2", + "whatwg-url": "^7.0.0" + }, + "dependencies": { + "tr46": { + "version": "1.0.1", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "webidl-conversions": { + "version": "4.0.2", + "dev": true + }, + "whatwg-url": { + "version": "7.1.0", + "dev": true, + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + } + } + }, + "@lerna/global-options": { + "version": "3.13.0", + "dev": true + }, + "@lerna/has-npm-version": { + "version": "3.16.5", + "dev": true, + "requires": { + "@lerna/child-process": "3.16.5", + "semver": "^6.2.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "dev": true + } + } + }, + "@lerna/import": { + "version": "3.22.0", + "dev": true, + "requires": { + "@lerna/child-process": "3.16.5", + "@lerna/command": "3.21.0", + "@lerna/prompt": "3.18.5", + "@lerna/pulse-till-done": "3.13.0", + "@lerna/validation-error": "3.13.0", + "dedent": "^0.7.0", + "fs-extra": "^8.1.0", + "p-map-series": "^1.0.0" + } + }, + "@lerna/info": { + "version": "3.21.0", + "dev": true, + "requires": { + "@lerna/command": "3.21.0", + "@lerna/output": "3.13.0", + "envinfo": "^7.3.1" + } + }, + "@lerna/init": { + "version": "3.21.0", + "dev": true, + "requires": { + "@lerna/child-process": "3.16.5", + "@lerna/command": "3.21.0", + "fs-extra": "^8.1.0", + "p-map": "^2.1.0", + "write-json-file": "^3.2.0" + }, + "dependencies": { + "p-map": { + "version": "2.1.0", + "dev": true + } + } + }, + "@lerna/link": { + "version": "3.21.0", + "dev": true, + "requires": { + "@lerna/command": "3.21.0", + "@lerna/package-graph": "3.18.5", + "@lerna/symlink-dependencies": "3.17.0", + "p-map": "^2.1.0", + "slash": "^2.0.0" + }, + "dependencies": { + "p-map": { + "version": "2.1.0", + "dev": true + }, + "slash": { + "version": "2.0.0", + "dev": true + } + } + }, + "@lerna/list": { + "version": "3.21.0", + "dev": true, + "requires": { + "@lerna/command": "3.21.0", + "@lerna/filter-options": "3.20.0", + "@lerna/listable": "3.18.5", + "@lerna/output": "3.13.0" + } + }, + "@lerna/listable": { + "version": "3.18.5", + "dev": true, + "requires": { + "@lerna/query-graph": "3.18.5", + "chalk": "^2.3.1", + "columnify": "^1.5.4" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@lerna/log-packed": { + "version": "3.16.0", + "dev": true, + "requires": { + "byte-size": "^5.0.1", + "columnify": "^1.5.4", + "has-unicode": "^2.0.1", + "npmlog": "^4.1.2" + } + }, + "@lerna/npm-conf": { + "version": "3.16.0", + "dev": true, + "requires": { + "config-chain": "^1.1.11", + "pify": "^4.0.1" + } + }, + "@lerna/npm-dist-tag": { + "version": "3.18.5", + "dev": true, + "requires": { + "@evocateur/npm-registry-fetch": "^4.0.0", + "@lerna/otplease": "3.18.5", + "figgy-pudding": "^3.5.1", + "npm-package-arg": "^6.1.0", + "npmlog": "^4.1.2" + } + }, + "@lerna/npm-install": { + "version": "3.16.5", + "dev": true, + "requires": { + "@lerna/child-process": "3.16.5", + "@lerna/get-npm-exec-opts": "3.13.0", + "fs-extra": "^8.1.0", + "npm-package-arg": "^6.1.0", + "npmlog": "^4.1.2", + "signal-exit": "^3.0.2", + "write-pkg": "^3.1.0" + } + }, + "@lerna/npm-publish": { + "version": "3.18.5", + "dev": true, + "requires": { + "@evocateur/libnpmpublish": "^1.2.2", + "@lerna/otplease": "3.18.5", + "@lerna/run-lifecycle": "3.16.2", + "figgy-pudding": "^3.5.1", + "fs-extra": "^8.1.0", + "npm-package-arg": "^6.1.0", + "npmlog": "^4.1.2", + "pify": "^4.0.1", + "read-package-json": "^2.0.13" + } + }, + "@lerna/npm-run-script": { + "version": "3.16.5", + "dev": true, + "requires": { + "@lerna/child-process": "3.16.5", + "@lerna/get-npm-exec-opts": "3.13.0", + "npmlog": "^4.1.2" + } + }, + "@lerna/otplease": { + "version": "3.18.5", + "dev": true, + "requires": { + "@lerna/prompt": "3.18.5", + "figgy-pudding": "^3.5.1" + } + }, + "@lerna/output": { + "version": "3.13.0", + "dev": true, + "requires": { + "npmlog": "^4.1.2" + } + }, + "@lerna/pack-directory": { + "version": "3.16.4", + "dev": true, + "requires": { + "@lerna/get-packed": "3.16.0", + "@lerna/package": "3.16.0", + "@lerna/run-lifecycle": "3.16.2", + "figgy-pudding": "^3.5.1", + "npm-packlist": "^1.4.4", + "npmlog": "^4.1.2", + "tar": "^4.4.10", + "temp-write": "^3.4.0" + } + }, + "@lerna/package": { + "version": "3.16.0", + "dev": true, + "requires": { + "load-json-file": "^5.3.0", + "npm-package-arg": "^6.1.0", + "write-pkg": "^3.1.0" + } + }, + "@lerna/package-graph": { + "version": "3.18.5", + "dev": true, + "requires": { + "@lerna/prerelease-id-from-version": "3.16.0", + "@lerna/validation-error": "3.13.0", + "npm-package-arg": "^6.1.0", + "npmlog": "^4.1.2", + "semver": "^6.2.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "dev": true + } + } + }, + "@lerna/prerelease-id-from-version": { + "version": "3.16.0", + "dev": true, + "requires": { + "semver": "^6.2.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "dev": true + } + } + }, + "@lerna/profiler": { + "version": "3.20.0", + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1", + "fs-extra": "^8.1.0", + "npmlog": "^4.1.2", + "upath": "^1.2.0" + } + }, + "@lerna/project": { + "version": "3.21.0", + "dev": true, + "requires": { + "@lerna/package": "3.16.0", + "@lerna/validation-error": "3.13.0", + "cosmiconfig": "^5.1.0", + "dedent": "^0.7.0", + "dot-prop": "^4.2.0", + "glob-parent": "^5.0.0", + "globby": "^9.2.0", + "load-json-file": "^5.3.0", + "npmlog": "^4.1.2", + "p-map": "^2.1.0", + "resolve-from": "^4.0.0", + "write-json-file": "^3.2.0" + }, + "dependencies": { + "@nodelib/fs.stat": { + "version": "1.1.3", + "dev": true + }, + "array-union": { + "version": "1.0.2", + "dev": true, + "requires": { + "array-uniq": "^1.0.1" + } + }, + "braces": { + "version": "2.3.2", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "cosmiconfig": { + "version": "5.2.1", + "dev": true, + "requires": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" + } + }, + "dir-glob": { + "version": "2.2.2", + "dev": true, + "requires": { + "path-type": "^3.0.0" + } + }, + "fast-glob": { + "version": "2.2.7", + "dev": true, + "requires": { + "@mrmlnc/readdir-enhanced": "^2.2.1", + "@nodelib/fs.stat": "^1.1.2", + "glob-parent": "^3.1.0", + "is-glob": "^4.0.0", + "merge2": "^1.2.3", + "micromatch": "^3.1.10" + }, + "dependencies": { + "glob-parent": { + "version": "3.1.0", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "globby": { + "version": "9.2.0", + "dev": true, + "requires": { + "@types/glob": "^7.1.1", + "array-union": "^1.0.2", + "dir-glob": "^2.2.2", + "fast-glob": "^2.2.6", + "glob": "^7.1.3", + "ignore": "^4.0.3", + "pify": "^4.0.1", + "slash": "^2.0.0" + } + }, + "ignore": { + "version": "4.0.6", + "dev": true + }, + "import-fresh": { + "version": "2.0.0", + "dev": true, + "requires": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "3.0.0", + "dev": true + } + } + }, + "is-extendable": { + "version": "0.1.1", + "dev": true + }, + "is-number": { + "version": "3.0.0", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "micromatch": { + "version": "3.1.10", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "p-map": { + "version": "2.1.0", + "dev": true + }, + "parse-json": { + "version": "4.0.0", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "path-type": { + "version": "3.0.0", + "dev": true, + "requires": { + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "dev": true + } + } + }, + "slash": { + "version": "2.0.0", + "dev": true + }, + "to-regex-range": { + "version": "2.1.1", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, + "@lerna/prompt": { + "version": "3.18.5", + "dev": true, + "requires": { + "inquirer": "^6.2.0", + "npmlog": "^4.1.2" + } + }, + "@lerna/publish": { + "version": "3.22.1", + "dev": true, + "requires": { + "@evocateur/libnpmaccess": "^3.1.2", + "@evocateur/npm-registry-fetch": "^4.0.0", + "@evocateur/pacote": "^9.6.3", + "@lerna/check-working-tree": "3.16.5", + "@lerna/child-process": "3.16.5", + "@lerna/collect-updates": "3.20.0", + "@lerna/command": "3.21.0", + "@lerna/describe-ref": "3.16.5", + "@lerna/log-packed": "3.16.0", + "@lerna/npm-conf": "3.16.0", + "@lerna/npm-dist-tag": "3.18.5", + "@lerna/npm-publish": "3.18.5", + "@lerna/otplease": "3.18.5", + "@lerna/output": "3.13.0", + "@lerna/pack-directory": "3.16.4", + "@lerna/prerelease-id-from-version": "3.16.0", + "@lerna/prompt": "3.18.5", + "@lerna/pulse-till-done": "3.13.0", + "@lerna/run-lifecycle": "3.16.2", + "@lerna/run-topologically": "3.18.5", + "@lerna/validation-error": "3.13.0", + "@lerna/version": "3.22.1", + "figgy-pudding": "^3.5.1", + "fs-extra": "^8.1.0", + "npm-package-arg": "^6.1.0", + "npmlog": "^4.1.2", + "p-finally": "^1.0.0", + "p-map": "^2.1.0", + "p-pipe": "^1.2.0", + "semver": "^6.2.0" + }, + "dependencies": { + "p-map": { + "version": "2.1.0", + "dev": true + }, + "semver": { + "version": "6.3.0", + "dev": true + } + } + }, + "@lerna/pulse-till-done": { + "version": "3.13.0", + "dev": true, + "requires": { + "npmlog": "^4.1.2" + } + }, + "@lerna/query-graph": { + "version": "3.18.5", + "dev": true, + "requires": { + "@lerna/package-graph": "3.18.5", + "figgy-pudding": "^3.5.1" + } + }, + "@lerna/resolve-symlink": { + "version": "3.16.0", + "dev": true, + "requires": { + "fs-extra": "^8.1.0", + "npmlog": "^4.1.2", + "read-cmd-shim": "^1.0.1" + } + }, + "@lerna/rimraf-dir": { + "version": "3.16.5", + "dev": true, + "requires": { + "@lerna/child-process": "3.16.5", + "npmlog": "^4.1.2", + "path-exists": "^3.0.0", + "rimraf": "^2.6.2" + }, + "dependencies": { + "rimraf": { + "version": "2.7.1", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "@lerna/run": { + "version": "3.21.0", + "dev": true, + "requires": { + "@lerna/command": "3.21.0", + "@lerna/filter-options": "3.20.0", + "@lerna/npm-run-script": "3.16.5", + "@lerna/output": "3.13.0", + "@lerna/profiler": "3.20.0", + "@lerna/run-topologically": "3.18.5", + "@lerna/timer": "3.13.0", + "@lerna/validation-error": "3.13.0", + "p-map": "^2.1.0" + }, + "dependencies": { + "p-map": { + "version": "2.1.0", + "dev": true + } + } + }, + "@lerna/run-lifecycle": { + "version": "3.16.2", + "dev": true, + "requires": { + "@lerna/npm-conf": "3.16.0", + "figgy-pudding": "^3.5.1", + "npm-lifecycle": "^3.1.2", + "npmlog": "^4.1.2" + } + }, + "@lerna/run-topologically": { + "version": "3.18.5", + "dev": true, + "requires": { + "@lerna/query-graph": "3.18.5", + "figgy-pudding": "^3.5.1", + "p-queue": "^4.0.0" + } + }, + "@lerna/symlink-binary": { + "version": "3.17.0", + "dev": true, + "requires": { + "@lerna/create-symlink": "3.16.2", + "@lerna/package": "3.16.0", + "fs-extra": "^8.1.0", + "p-map": "^2.1.0" + }, + "dependencies": { + "p-map": { + "version": "2.1.0", + "dev": true + } + } + }, + "@lerna/symlink-dependencies": { + "version": "3.17.0", + "dev": true, + "requires": { + "@lerna/create-symlink": "3.16.2", + "@lerna/resolve-symlink": "3.16.0", + "@lerna/symlink-binary": "3.17.0", + "fs-extra": "^8.1.0", + "p-finally": "^1.0.0", + "p-map": "^2.1.0", + "p-map-series": "^1.0.0" + }, + "dependencies": { + "p-map": { + "version": "2.1.0", + "dev": true + } + } + }, + "@lerna/timer": { + "version": "3.13.0", + "dev": true + }, + "@lerna/validation-error": { + "version": "3.13.0", + "dev": true, + "requires": { + "npmlog": "^4.1.2" + } + }, + "@lerna/version": { + "version": "3.22.1", + "dev": true, + "requires": { + "@lerna/check-working-tree": "3.16.5", + "@lerna/child-process": "3.16.5", + "@lerna/collect-updates": "3.20.0", + "@lerna/command": "3.21.0", + "@lerna/conventional-commits": "3.22.0", + "@lerna/github-client": "3.22.0", + "@lerna/gitlab-client": "3.15.0", + "@lerna/output": "3.13.0", + "@lerna/prerelease-id-from-version": "3.16.0", + "@lerna/prompt": "3.18.5", + "@lerna/run-lifecycle": "3.16.2", + "@lerna/run-topologically": "3.18.5", + "@lerna/validation-error": "3.13.0", + "chalk": "^2.3.1", + "dedent": "^0.7.0", + "load-json-file": "^5.3.0", + "minimatch": "^3.0.4", + "npmlog": "^4.1.2", + "p-map": "^2.1.0", + "p-pipe": "^1.2.0", + "p-reduce": "^1.0.0", + "p-waterfall": "^1.0.0", + "semver": "^6.2.0", + "slash": "^2.0.0", + "temp-write": "^3.4.0", + "write-json-file": "^3.2.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "dev": true + }, + "p-map": { + "version": "2.1.0", + "dev": true + }, + "semver": { + "version": "6.3.0", + "dev": true + }, + "slash": { + "version": "2.0.0", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@lerna/write-log-file": { + "version": "3.13.0", + "dev": true, + "requires": { + "npmlog": "^4.1.2", + "write-file-atomic": "^2.3.0" + } + }, + "@mark.probst/typescript-json-schema": { + "version": "0.32.0", + "dev": true, + "requires": { + "glob": "~7.1.3", + "json-stable-stringify": "^1.0.1", + "typescript": "~3.2.1", + "yargs": "^12.0.5" + }, + "dependencies": { + "typescript": { + "version": "3.2.4", + "dev": true + } + } + }, + "@mark.probst/unicode-properties": { + "version": "1.1.0", + "dev": true, + "requires": { + "brfs": "^1.4.0", + "unicode-trie": "^0.3.0" + } + }, + "@mrmlnc/readdir-enhanced": { + "version": "2.2.1", + "dev": true, + "requires": { + "call-me-maybe": "^1.0.1", + "glob-to-regexp": "^0.3.0" + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@octokit/auth-token": { + "version": "2.5.0", + "dev": true, + "requires": { + "@octokit/types": "^6.0.3" + } + }, + "@octokit/core": { + "version": "4.0.4", + "dev": true, + "peer": true, + "requires": { + "@octokit/auth-token": "^3.0.0", + "@octokit/graphql": "^5.0.0", + "@octokit/request": "^6.0.0", + "@octokit/request-error": "^3.0.0", + "@octokit/types": "^6.0.3", + "before-after-hook": "^2.2.0", + "universal-user-agent": "^6.0.0" + }, + "dependencies": { + "@octokit/auth-token": { + "version": "3.0.0", + "dev": true, + "peer": true, + "requires": { + "@octokit/types": "^6.0.3" + } + }, + "@octokit/endpoint": { + "version": "7.0.0", + "dev": true, + "peer": true, + "requires": { + "@octokit/types": "^6.0.3", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" + } + }, + "@octokit/request": { + "version": "6.2.0", + "dev": true, + "peer": true, + "requires": { + "@octokit/endpoint": "^7.0.0", + "@octokit/request-error": "^3.0.0", + "@octokit/types": "^6.16.1", + "is-plain-object": "^5.0.0", + "node-fetch": "^2.6.7", + "universal-user-agent": "^6.0.0" + } + }, + "@octokit/request-error": { + "version": "3.0.0", + "dev": true, + "peer": true, + "requires": { + "@octokit/types": "^6.0.3", + "deprecation": "^2.0.0", + "once": "^1.4.0" + } + }, + "universal-user-agent": { + "version": "6.0.0", + "dev": true, + "peer": true + } + } + }, + "@octokit/endpoint": { + "version": "6.0.12", + "dev": true, + "requires": { + "@octokit/types": "^6.0.3", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" + }, + "dependencies": { + "universal-user-agent": { + "version": "6.0.0", + "dev": true + } + } + }, + "@octokit/graphql": { + "version": "5.0.0", + "dev": true, + "peer": true, + "requires": { + "@octokit/request": "^6.0.0", + "@octokit/types": "^6.0.3", + "universal-user-agent": "^6.0.0" + }, + "dependencies": { + "@octokit/endpoint": { + "version": "7.0.0", + "dev": true, + "peer": true, + "requires": { + "@octokit/types": "^6.0.3", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" + } + }, + "@octokit/request": { + "version": "6.2.0", + "dev": true, + "peer": true, + "requires": { + "@octokit/endpoint": "^7.0.0", + "@octokit/request-error": "^3.0.0", + "@octokit/types": "^6.16.1", + "is-plain-object": "^5.0.0", + "node-fetch": "^2.6.7", + "universal-user-agent": "^6.0.0" + } + }, + "@octokit/request-error": { + "version": "3.0.0", + "dev": true, + "peer": true, + "requires": { + "@octokit/types": "^6.0.3", + "deprecation": "^2.0.0", + "once": "^1.4.0" + } + }, + "universal-user-agent": { + "version": "6.0.0", + "dev": true, + "peer": true + } + } + }, + "@octokit/openapi-types": { + "version": "12.11.0", + "dev": true + }, + "@octokit/plugin-enterprise-rest": { + "version": "6.0.1", + "dev": true + }, + "@octokit/plugin-paginate-rest": { + "version": "1.1.2", + "dev": true, + "requires": { + "@octokit/types": "^2.0.1" + }, + "dependencies": { + "@octokit/types": { + "version": "2.16.2", + "dev": true, + "requires": { + "@types/node": ">= 8" + } + } + } + }, + "@octokit/plugin-request-log": { + "version": "1.0.4", + "dev": true, + "requires": {} + }, + "@octokit/plugin-rest-endpoint-methods": { + "version": "2.4.0", + "dev": true, + "requires": { + "@octokit/types": "^2.0.1", + "deprecation": "^2.3.1" + }, + "dependencies": { + "@octokit/types": { + "version": "2.16.2", + "dev": true, + "requires": { + "@types/node": ">= 8" + } + } + } + }, + "@octokit/request": { + "version": "5.6.3", + "dev": true, + "requires": { + "@octokit/endpoint": "^6.0.1", + "@octokit/request-error": "^2.1.0", + "@octokit/types": "^6.16.1", + "is-plain-object": "^5.0.0", + "node-fetch": "^2.6.7", + "universal-user-agent": "^6.0.0" + }, + "dependencies": { + "@octokit/request-error": { + "version": "2.1.0", + "dev": true, + "requires": { + "@octokit/types": "^6.0.3", + "deprecation": "^2.0.0", + "once": "^1.4.0" + } + }, + "universal-user-agent": { + "version": "6.0.0", + "dev": true + } + } + }, + "@octokit/request-error": { + "version": "1.2.1", + "dev": true, + "requires": { + "@octokit/types": "^2.0.0", + "deprecation": "^2.0.0", + "once": "^1.4.0" + }, + "dependencies": { + "@octokit/types": { + "version": "2.16.2", + "dev": true, + "requires": { + "@types/node": ">= 8" + } + } + } + }, + "@octokit/rest": { + "version": "16.43.2", + "dev": true, + "requires": { + "@octokit/auth-token": "^2.4.0", + "@octokit/plugin-paginate-rest": "^1.1.1", + "@octokit/plugin-request-log": "^1.0.0", + "@octokit/plugin-rest-endpoint-methods": "2.4.0", + "@octokit/request": "^5.2.0", + "@octokit/request-error": "^1.0.2", + "atob-lite": "^2.0.0", + "before-after-hook": "^2.0.0", + "btoa-lite": "^1.0.0", + "deprecation": "^2.0.0", + "lodash.get": "^4.4.2", + "lodash.set": "^4.3.2", + "lodash.uniq": "^4.5.0", + "octokit-pagination-methods": "^1.1.0", + "once": "^1.4.0", + "universal-user-agent": "^4.0.0" + } + }, + "@octokit/types": { + "version": "6.41.0", + "dev": true, + "requires": { + "@octokit/openapi-types": "^12.11.0" + } + }, + "@rollup/plugin-typescript": { + "version": "8.3.4", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.1.0", + "resolve": "^1.17.0" + } + }, + "@rollup/pluginutils": { + "version": "3.1.0", + "dev": true, + "requires": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + } + }, + "@types/estree": { + "version": "0.0.39", + "dev": true + }, + "@types/glob": { + "version": "7.2.0", + "dev": true, + "requires": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "@types/json-schema": { + "version": "7.0.11", + "dev": true + }, + "@types/minimatch": { + "version": "3.0.5", + "dev": true + }, + "@types/minimist": { + "version": "1.2.2", + "dev": true + }, + "@types/node": { + "version": "18.6.3", + "dev": true + }, + "@types/normalize-package-data": { + "version": "2.4.1", + "dev": true + }, + "@types/offscreencanvas": { + "version": "2019.7.0", + "dev": true + }, + "@types/parse-json": { + "version": "4.0.0", + "dev": true + }, + "@types/three": { + "version": "0.143.0", + "dev": true, + "requires": { + "@types/webxr": "*" + } + }, + "@types/webxr": { + "version": "0.5.0", + "dev": true + }, + "@typescript-eslint/eslint-plugin": { + "version": "4.33.0", + "dev": true, + "requires": { + "@typescript-eslint/experimental-utils": "4.33.0", + "@typescript-eslint/scope-manager": "4.33.0", + "debug": "^4.3.1", + "functional-red-black-tree": "^1.0.1", + "ignore": "^5.1.8", + "regexpp": "^3.1.0", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.3.7", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "dev": true + } + } + }, + "@typescript-eslint/experimental-utils": { + "version": "4.33.0", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.7", + "@typescript-eslint/scope-manager": "4.33.0", + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/typescript-estree": "4.33.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + } + }, + "@typescript-eslint/parser": { + "version": "4.33.0", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "4.33.0", + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/typescript-estree": "4.33.0", + "debug": "^4.3.1" + } + }, + "@typescript-eslint/scope-manager": { + "version": "4.33.0", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/visitor-keys": "4.33.0" + } + }, + "@typescript-eslint/types": { + "version": "4.33.0", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "4.33.0", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/visitor-keys": "4.33.0", + "debug": "^4.3.1", + "globby": "^11.0.3", + "is-glob": "^4.0.1", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.3.7", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "dev": true + } + } + }, + "@typescript-eslint/visitor-keys": { + "version": "4.33.0", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.33.0", + "eslint-visitor-keys": "^2.0.0" + } + }, + "@zkochan/cmd-shim": { + "version": "3.1.0", + "dev": true, + "requires": { + "is-windows": "^1.0.0", + "mkdirp-promise": "^5.0.1", + "mz": "^2.5.0" + } + }, + "abbrev": { + "version": "1.1.1", + "dev": true + }, + "acorn": { + "version": "7.4.1", + "dev": true + }, + "acorn-jsx": { + "version": "5.3.2", + "dev": true, + "requires": {} + }, + "agent-base": { + "version": "4.3.0", + "dev": true, + "requires": { + "es6-promisify": "^5.0.0" + } + }, + "agentkeepalive": { + "version": "3.5.2", + "dev": true, + "requires": { + "humanize-ms": "^1.2.1" + } + }, + "aggregate-error": { + "version": "3.1.0", + "dev": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "ajv": { + "version": "6.12.6", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-colors": { + "version": "4.1.3", + "dev": true + }, + "ansi-escapes": { + "version": "4.3.2", + "dev": true, + "requires": { + "type-fest": "^0.21.3" + } + }, + "ansi-regex": { + "version": "5.0.1", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "any-promise": { + "version": "1.3.0", + "dev": true + }, + "aproba": { + "version": "2.0.0", + "dev": true + }, + "are-we-there-yet": { + "version": "1.1.7", + "dev": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "argparse": { + "version": "1.0.10", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "arr-diff": { + "version": "4.0.0", + "dev": true + }, + "arr-flatten": { + "version": "1.1.0", + "dev": true + }, + "arr-union": { + "version": "3.1.0", + "dev": true + }, + "array-back": { + "version": "2.0.0", + "dev": true, + "requires": { + "typical": "^2.6.1" + } + }, + "array-differ": { + "version": "2.1.0", + "dev": true + }, + "array-find-index": { + "version": "1.0.2", + "dev": true + }, + "array-ify": { + "version": "1.0.0", + "dev": true + }, + "array-union": { + "version": "2.1.0", + "dev": true + }, + "array-uniq": { + "version": "1.0.3", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "dev": true + }, + "array.prototype.reduce": { + "version": "1.0.4", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.2", + "es-array-method-boxes-properly": "^1.0.0", + "is-string": "^1.0.7" + } + }, + "arrify": { + "version": "1.0.1", + "dev": true + }, + "asap": { + "version": "2.0.6", + "dev": true + }, + "asn1": { + "version": "0.2.6", + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert-plus": { + "version": "1.0.0", + "dev": true + }, + "assign-symbols": { + "version": "1.0.0", + "dev": true + }, + "astral-regex": { + "version": "2.0.0", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "dev": true + }, + "at-least-node": { + "version": "1.0.0", + "dev": true + }, + "atob": { + "version": "2.1.2", + "dev": true + }, + "atob-lite": { + "version": "2.0.0", + "dev": true + }, + "aws-sign2": { + "version": "0.7.0", + "dev": true + }, + "aws4": { + "version": "1.11.0", + "dev": true + }, + "balanced-match": { + "version": "1.0.2", + "dev": true + }, + "base": { + "version": "0.11.2", + "dev": true, + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + } + } + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "dev": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "before-after-hook": { + "version": "2.2.2", + "dev": true + }, + "bluebird": { + "version": "3.7.2", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "brfs": { + "version": "1.6.1", + "dev": true, + "requires": { + "quote-stream": "^1.0.1", + "resolve": "^1.1.5", + "static-module": "^2.2.0", + "through2": "^2.0.0" + } + }, + "browser-or-node": { + "version": "1.3.0", + "dev": true + }, + "btoa-lite": { + "version": "1.0.0", + "dev": true + }, + "buffer-equal": { + "version": "0.0.1", + "dev": true + }, + "buffer-from": { + "version": "1.1.2", + "dev": true + }, + "builtins": { + "version": "1.0.3", + "dev": true + }, + "byline": { + "version": "5.0.0", + "dev": true + }, + "byte-size": { + "version": "5.0.1", + "dev": true + }, + "cacache": { + "version": "12.0.4", + "dev": true, + "requires": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + }, + "dependencies": { + "rimraf": { + "version": "2.7.1", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "cache-base": { + "version": "1.0.1", + "dev": true, + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "call-bind": { + "version": "1.0.2", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "call-me-maybe": { + "version": "1.0.1", + "dev": true + }, + "caller-callsite": { + "version": "2.0.0", + "dev": true, + "requires": { + "callsites": "^2.0.0" + }, + "dependencies": { + "callsites": { + "version": "2.0.0", + "dev": true + } + } + }, + "caller-path": { + "version": "2.0.0", + "dev": true, + "requires": { + "caller-callsite": "^2.0.0" + } + }, + "callsites": { + "version": "3.1.0", + "dev": true + }, + "camelcase": { + "version": "5.3.1", + "dev": true + }, + "camelcase-keys": { + "version": "6.2.2", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + } + }, + "caseless": { + "version": "0.12.0", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "chardet": { + "version": "0.7.0", + "dev": true + }, + "chownr": { + "version": "1.1.4", + "dev": true + }, + "ci-info": { + "version": "2.0.0", + "dev": true + }, + "class-utils": { + "version": "0.3.6", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "dev": true + } + } + }, + "clean-stack": { + "version": "2.2.0", + "dev": true + }, + "cli-cursor": { + "version": "3.1.0", + "dev": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-truncate": { + "version": "2.1.0", + "dev": true, + "requires": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + } + }, + "cli-width": { + "version": "2.2.1", + "dev": true + }, + "cliui": { + "version": "4.1.0", + "dev": true, + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.1", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "wrap-ansi": { + "version": "2.1.0", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + } + } + }, + "clone": { + "version": "1.0.4", + "dev": true + }, + "clone-deep": { + "version": "4.0.1", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "dependencies": { + "is-plain-object": { + "version": "2.0.4", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + } + } + }, + "code-point-at": { + "version": "1.1.0", + "dev": true + }, + "collection-utils": { + "version": "1.0.1", + "dev": true + }, + "collection-visit": { + "version": "1.0.0", + "dev": true, + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + }, + "colorette": { + "version": "2.0.19", + "dev": true + }, + "colors": { + "version": "1.4.0", + "dev": true + }, + "columnify": { + "version": "1.6.0", + "dev": true, + "requires": { + "strip-ansi": "^6.0.1", + "wcwidth": "^1.0.0" + } + }, + "combined-stream": { + "version": "1.0.8", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "command-line-args": { + "version": "4.0.7", + "dev": true, + "requires": { + "array-back": "^2.0.0", + "find-replace": "^1.0.3", + "typical": "^2.6.1" + } + }, + "command-line-usage": { + "version": "5.0.5", + "dev": true, + "requires": { + "array-back": "^2.0.0", + "chalk": "^2.4.1", + "table-layout": "^0.4.3", + "typical": "^2.6.1" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "commander": { + "version": "6.2.1", + "dev": true + }, + "compare-func": { + "version": "2.0.0", + "dev": true, + "requires": { + "array-ify": "^1.0.0", + "dot-prop": "^5.1.0" + }, + "dependencies": { + "dot-prop": { + "version": "5.3.0", + "dev": true, + "requires": { + "is-obj": "^2.0.0" + } + }, + "is-obj": { + "version": "2.0.0", + "dev": true + } + } + }, + "component-emitter": { + "version": "1.3.0", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "dev": true + }, + "concat-stream": { + "version": "1.6.2", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "config-chain": { + "version": "1.1.13", + "dev": true, + "requires": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "console-control-strings": { + "version": "1.1.0", + "dev": true + }, + "conventional-changelog-angular": { + "version": "5.0.13", + "dev": true, + "requires": { + "compare-func": "^2.0.0", + "q": "^1.5.1" + } + }, + "conventional-changelog-core": { + "version": "3.2.3", + "dev": true, + "requires": { + "conventional-changelog-writer": "^4.0.6", + "conventional-commits-parser": "^3.0.3", + "dateformat": "^3.0.0", + "get-pkg-repo": "^1.0.0", + "git-raw-commits": "2.0.0", + "git-remote-origin-url": "^2.0.0", + "git-semver-tags": "^2.0.3", + "lodash": "^4.2.1", + "normalize-package-data": "^2.3.5", + "q": "^1.5.1", + "read-pkg": "^3.0.0", + "read-pkg-up": "^3.0.0", + "through2": "^3.0.0" + }, + "dependencies": { + "through2": { + "version": "3.0.2", + "dev": true, + "requires": { + "inherits": "^2.0.4", + "readable-stream": "2 || 3" + } + } + } + }, + "conventional-changelog-preset-loader": { + "version": "2.3.4", + "dev": true + }, + "conventional-changelog-writer": { + "version": "4.1.0", + "dev": true, + "requires": { + "compare-func": "^2.0.0", + "conventional-commits-filter": "^2.0.7", + "dateformat": "^3.0.0", + "handlebars": "^4.7.6", + "json-stringify-safe": "^5.0.1", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "semver": "^6.0.0", + "split": "^1.0.0", + "through2": "^4.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "dev": true + }, + "semver": { + "version": "6.3.0", + "dev": true + }, + "string_decoder": { + "version": "1.3.0", + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "through2": { + "version": "4.0.2", + "dev": true, + "requires": { + "readable-stream": "3" + } + } + } + }, + "conventional-commits-filter": { + "version": "2.0.7", + "dev": true, + "requires": { + "lodash.ismatch": "^4.4.0", + "modify-values": "^1.0.0" + } + }, + "conventional-commits-parser": { + "version": "3.2.4", + "dev": true, + "requires": { + "is-text-path": "^1.0.1", + "JSONStream": "^1.0.4", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "dev": true + }, + "string_decoder": { + "version": "1.3.0", + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "through2": { + "version": "4.0.2", + "dev": true, + "requires": { + "readable-stream": "3" + } + } + } + }, + "conventional-recommended-bump": { + "version": "5.0.1", + "dev": true, + "requires": { + "concat-stream": "^2.0.0", + "conventional-changelog-preset-loader": "^2.1.1", + "conventional-commits-filter": "^2.0.2", + "conventional-commits-parser": "^3.0.3", + "git-raw-commits": "2.0.0", + "git-semver-tags": "^2.0.3", + "meow": "^4.0.0", + "q": "^1.5.1" + }, + "dependencies": { + "camelcase": { + "version": "4.1.0", + "dev": true + }, + "camelcase-keys": { + "version": "4.2.0", + "dev": true, + "requires": { + "camelcase": "^4.1.0", + "map-obj": "^2.0.0", + "quick-lru": "^1.0.0" + } + }, + "concat-stream": { + "version": "2.0.0", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" + } + }, + "indent-string": { + "version": "3.2.0", + "dev": true + }, + "map-obj": { + "version": "2.0.0", + "dev": true + }, + "meow": { + "version": "4.0.1", + "dev": true, + "requires": { + "camelcase-keys": "^4.0.0", + "decamelize-keys": "^1.0.0", + "loud-rejection": "^1.0.0", + "minimist": "^1.1.3", + "minimist-options": "^3.0.1", + "normalize-package-data": "^2.3.4", + "read-pkg-up": "^3.0.0", + "redent": "^2.0.0", + "trim-newlines": "^2.0.0" + } + }, + "minimist-options": { + "version": "3.0.2", + "dev": true, + "requires": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0" + } + }, + "quick-lru": { + "version": "1.1.0", + "dev": true + }, + "readable-stream": { + "version": "3.6.0", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "redent": { + "version": "2.0.0", + "dev": true, + "requires": { + "indent-string": "^3.0.0", + "strip-indent": "^2.0.0" + } + }, + "safe-buffer": { + "version": "5.2.1", + "dev": true + }, + "string_decoder": { + "version": "1.3.0", + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "strip-indent": { + "version": "2.0.0", + "dev": true + }, + "trim-newlines": { + "version": "2.0.0", + "dev": true + } + } + }, + "convert-source-map": { + "version": "1.8.0", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "copy-concurrently": { + "version": "1.0.5", + "dev": true, + "requires": { + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" + }, + "dependencies": { + "aproba": { + "version": "1.2.0", + "dev": true + }, + "rimraf": { + "version": "2.7.1", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "copy-descriptor": { + "version": "0.1.1", + "dev": true + }, + "core-util-is": { + "version": "1.0.3", + "dev": true + }, + "cosmiconfig": { + "version": "7.0.1", + "dev": true, + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + } + }, + "cross-env": { + "version": "7.0.3", + "dev": true, + "requires": { + "cross-spawn": "^7.0.1" + } + }, + "cross-spawn": { + "version": "7.0.3", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "currently-unhandled": { + "version": "0.4.1", + "dev": true, + "requires": { + "array-find-index": "^1.0.1" + } + }, + "cyclist": { + "version": "1.0.1", + "dev": true + }, + "dargs": { + "version": "4.1.0", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "dashdash": { + "version": "1.14.1", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "dateformat": { + "version": "3.0.3", + "dev": true + }, + "debug": { + "version": "4.3.4", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "debuglog": { + "version": "1.0.1", + "dev": true + }, + "decamelize": { + "version": "1.2.0", + "dev": true + }, + "decamelize-keys": { + "version": "1.1.0", + "dev": true, + "requires": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "dependencies": { + "map-obj": { + "version": "1.0.1", + "dev": true + } + } + }, + "decode-uri-component": { + "version": "0.2.0", + "dev": true + }, + "dedent": { + "version": "0.7.0", + "dev": true + }, + "deep-extend": { + "version": "0.6.0", + "dev": true + }, + "deep-is": { + "version": "0.1.4", + "dev": true + }, + "defaults": { + "version": "1.0.3", + "dev": true, + "requires": { + "clone": "^1.0.2" + } + }, + "define-properties": { + "version": "1.1.4", + "dev": true, + "requires": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "define-property": { + "version": "2.0.2", + "dev": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + } + }, + "delayed-stream": { + "version": "1.0.0", + "dev": true + }, + "delegates": { + "version": "1.0.0", + "dev": true + }, + "deprecation": { + "version": "2.3.1", + "dev": true + }, + "detect-indent": { + "version": "5.0.0", + "dev": true + }, + "dezalgo": { + "version": "1.0.4", + "dev": true, + "requires": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, + "dir-glob": { + "version": "3.0.1", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "doctrine": { + "version": "3.0.0", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "dot-prop": { + "version": "4.2.1", + "dev": true, + "requires": { + "is-obj": "^1.0.0" + } + }, + "downlevel-dts": { + "version": "0.7.0", + "dev": true, + "requires": { + "semver": "^7.3.2", + "shelljs": "^0.8.3", + "typescript": "^4.1.0-dev.20201026" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.3.7", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "dev": true + } + } + }, + "duplexer": { + "version": "0.1.2", + "dev": true + }, + "duplexer2": { + "version": "0.1.4", + "dev": true, + "requires": { + "readable-stream": "^2.0.2" + } + }, + "duplexify": { + "version": "3.7.1", + "dev": true, + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "ecc-jsbn": { + "version": "0.1.2", + "dev": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "emoji-regex": { + "version": "8.0.0", + "dev": true + }, + "encoding": { + "version": "0.1.13", + "dev": true, + "requires": { + "iconv-lite": "^0.6.2" + } + }, + "end-of-stream": { + "version": "1.4.4", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "enquirer": { + "version": "2.3.6", + "dev": true, + "requires": { + "ansi-colors": "^4.1.1" + } + }, + "env-paths": { + "version": "2.2.1", + "dev": true + }, + "envinfo": { + "version": "7.8.1", + "dev": true + }, + "err-code": { + "version": "1.1.2", + "dev": true + }, + "error-ex": { + "version": "1.3.2", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.20.1", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "regexp.prototype.flags": "^1.4.3", + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" + }, + "dependencies": { + "object-inspect": { + "version": "1.12.2", + "dev": true + } + } + }, + "es-array-method-boxes-properly": { + "version": "1.0.0", + "dev": true + }, + "es-to-primitive": { + "version": "1.2.1", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "es6-promise": { + "version": "4.2.8", + "dev": true + }, + "es6-promisify": { + "version": "5.0.0", + "dev": true, + "requires": { + "es6-promise": "^4.0.3" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "dev": true + }, + "escodegen": { + "version": "1.9.1", + "dev": true, + "requires": { + "esprima": "^3.1.3", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + } + }, + "eslint": { + "version": "7.32.0", + "dev": true, + "requires": { + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.3", + "@humanwhocodes/config-array": "^0.5.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.1.2", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.9", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.11", + "dev": true, + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "escape-string-regexp": { + "version": "4.0.0", + "dev": true + }, + "eslint-utils": { + "version": "2.1.0", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "dev": true + } + } + }, + "ignore": { + "version": "4.0.6", + "dev": true + }, + "levn": { + "version": "0.4.1", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "lru-cache": { + "version": "6.0.0", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "optionator": { + "version": "0.9.1", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "prelude-ls": { + "version": "1.2.1", + "dev": true + }, + "semver": { + "version": "7.3.7", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "type-check": { + "version": "0.4.0", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "yallist": { + "version": "4.0.0", + "dev": true + } + } + }, + "eslint-config-prettier": { + "version": "7.2.0", + "dev": true, + "requires": {} + }, + "eslint-scope": { + "version": "5.1.1", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "3.0.0", + "dev": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" + } + }, + "eslint-visitor-keys": { + "version": "2.1.0", + "dev": true + }, + "espree": { + "version": "7.3.1", + "dev": true, + "requires": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "dev": true + } + } + }, + "esprima": { + "version": "3.1.3", + "dev": true + }, + "esquery": { + "version": "1.4.0", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "dev": true + }, + "estree-walker": { + "version": "1.0.1", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "dev": true + }, + "eventemitter3": { + "version": "3.1.2", + "dev": true + }, + "execa": { + "version": "4.1.0", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + } + }, + "expand-brackets": { + "version": "2.1.4", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "dev": true + }, + "kind-of": { + "version": "5.1.0", + "dev": true + }, + "ms": { + "version": "2.0.0", + "dev": true + } + } + }, + "extend": { + "version": "3.0.2", + "dev": true + }, + "extend-shallow": { + "version": "3.0.2", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "external-editor": { + "version": "3.1.0", + "dev": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.24", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + } + } + }, + "extglob": { + "version": "2.0.4", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "dev": true + } + } + }, + "extsprintf": { + "version": "1.3.0", + "dev": true + }, + "falafel": { + "version": "2.2.5", + "dev": true, + "requires": { + "acorn": "^7.1.1", + "isarray": "^2.0.1" + }, + "dependencies": { + "isarray": { + "version": "2.0.5", + "dev": true + } + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "dev": true + }, + "fast-glob": { + "version": "3.2.11", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "dev": true + }, + "fastq": { + "version": "1.13.0", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "figgy-pudding": { + "version": "3.5.2", + "dev": true + }, + "figures": { + "version": "2.0.0", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-entry-cache": { + "version": "6.0.1", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "filter-obj": { + "version": "1.1.0", + "dev": true + }, + "find-replace": { + "version": "1.0.3", + "dev": true, + "requires": { + "array-back": "^1.0.4", + "test-value": "^2.1.0" + }, + "dependencies": { + "array-back": { + "version": "1.0.4", + "dev": true, + "requires": { + "typical": "^2.6.0" + } + } + } + }, + "find-up": { + "version": "3.0.0", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "flat-cache": { + "version": "3.0.4", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.6", + "dev": true + }, + "flush-write-stream": { + "version": "1.1.1", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + }, + "dependencies": { + "process-nextick-args": { + "version": "2.0.1", + "dev": true + }, + "readable-stream": { + "version": "2.3.7", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "for-in": { + "version": "1.0.2", + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "dev": true + }, + "form-data": { + "version": "2.3.3", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "fragment-cache": { + "version": "0.2.1", + "dev": true, + "requires": { + "map-cache": "^0.2.2" + } + }, + "from2": { + "version": "2.3.0", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "fs-extra": { + "version": "8.1.0", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs-minipass": { + "version": "1.2.7", + "dev": true, + "requires": { + "minipass": "^2.6.0" + } + }, + "fs-write-stream-atomic": { + "version": "1.0.10", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" + } + }, + "fs.realpath": { + "version": "1.0.0", + "dev": true + }, + "function-bind": { + "version": "1.1.1", + "dev": true + }, + "function.prototype.name": { + "version": "1.1.5", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + } + }, + "functional-red-black-tree": { + "version": "1.0.1", + "dev": true + }, + "functions-have-names": { + "version": "1.2.3", + "dev": true + }, + "gauge": { + "version": "2.7.4", + "dev": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "dev": true + }, + "aproba": { + "version": "1.2.0", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "genfun": { + "version": "5.0.0", + "dev": true + }, + "get-caller-file": { + "version": "1.0.3", + "dev": true + }, + "get-intrinsic": { + "version": "1.1.2", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + }, + "get-own-enumerable-property-symbols": { + "version": "3.0.2", + "dev": true + }, + "get-pkg-repo": { + "version": "1.4.0", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "meow": "^3.3.0", + "normalize-package-data": "^2.3.0", + "parse-github-repo-url": "^1.3.0", + "through2": "^2.0.0" + }, + "dependencies": { + "camelcase": { + "version": "2.1.1", + "dev": true + }, + "camelcase-keys": { + "version": "2.1.0", + "dev": true, + "requires": { + "camelcase": "^2.0.0", + "map-obj": "^1.0.0" + } + }, + "find-up": { + "version": "1.1.2", + "dev": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "indent-string": { + "version": "2.1.0", + "dev": true, + "requires": { + "repeating": "^2.0.0" + } + }, + "load-json-file": { + "version": "1.1.0", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + } + }, + "map-obj": { + "version": "1.0.1", + "dev": true + }, + "meow": { + "version": "3.7.0", + "dev": true, + "requires": { + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", + "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" + } + }, + "parse-json": { + "version": "2.2.0", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + }, + "path-exists": { + "version": "2.1.0", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + }, + "path-type": { + "version": "1.1.0", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "pify": { + "version": "2.3.0", + "dev": true + }, + "read-pkg": { + "version": "1.1.0", + "dev": true, + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "dev": true, + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + } + }, + "redent": { + "version": "1.0.0", + "dev": true, + "requires": { + "indent-string": "^2.1.0", + "strip-indent": "^1.0.1" + } + }, + "strip-bom": { + "version": "2.0.0", + "dev": true, + "requires": { + "is-utf8": "^0.2.0" + } + }, + "strip-indent": { + "version": "1.0.1", + "dev": true, + "requires": { + "get-stdin": "^4.0.1" + } + }, + "trim-newlines": { + "version": "1.0.0", + "dev": true + } + } + }, + "get-port": { + "version": "4.2.0", + "dev": true + }, + "get-stdin": { + "version": "4.0.1", + "dev": true + }, + "get-stream": { + "version": "5.2.0", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "get-symbol-description": { + "version": "1.0.0", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, + "get-value": { + "version": "2.0.6", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "git-raw-commits": { + "version": "2.0.0", + "dev": true, + "requires": { + "dargs": "^4.0.1", + "lodash.template": "^4.0.2", + "meow": "^4.0.0", + "split2": "^2.0.0", + "through2": "^2.0.0" + }, + "dependencies": { + "camelcase": { + "version": "4.1.0", + "dev": true + }, + "camelcase-keys": { + "version": "4.2.0", + "dev": true, + "requires": { + "camelcase": "^4.1.0", + "map-obj": "^2.0.0", + "quick-lru": "^1.0.0" + } + }, + "indent-string": { + "version": "3.2.0", + "dev": true + }, + "map-obj": { + "version": "2.0.0", + "dev": true + }, + "meow": { + "version": "4.0.1", + "dev": true, + "requires": { + "camelcase-keys": "^4.0.0", + "decamelize-keys": "^1.0.0", + "loud-rejection": "^1.0.0", + "minimist": "^1.1.3", + "minimist-options": "^3.0.1", + "normalize-package-data": "^2.3.4", + "read-pkg-up": "^3.0.0", + "redent": "^2.0.0", + "trim-newlines": "^2.0.0" + } + }, + "minimist-options": { + "version": "3.0.2", + "dev": true, + "requires": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0" + } + }, + "quick-lru": { + "version": "1.1.0", + "dev": true + }, + "redent": { + "version": "2.0.0", + "dev": true, + "requires": { + "indent-string": "^3.0.0", + "strip-indent": "^2.0.0" + } + }, + "split2": { + "version": "2.2.0", + "dev": true, + "requires": { + "through2": "^2.0.2" + } + }, + "strip-indent": { + "version": "2.0.0", + "dev": true + }, + "trim-newlines": { + "version": "2.0.0", + "dev": true + } + } + }, + "git-remote-origin-url": { + "version": "2.0.0", + "dev": true, + "requires": { + "gitconfiglocal": "^1.0.0", + "pify": "^2.3.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "dev": true + } + } + }, + "git-semver-tags": { + "version": "2.0.3", + "dev": true, + "requires": { + "meow": "^4.0.0", + "semver": "^6.0.0" + }, + "dependencies": { + "camelcase": { + "version": "4.1.0", + "dev": true + }, + "camelcase-keys": { + "version": "4.2.0", + "dev": true, + "requires": { + "camelcase": "^4.1.0", + "map-obj": "^2.0.0", + "quick-lru": "^1.0.0" + } + }, + "indent-string": { + "version": "3.2.0", + "dev": true + }, + "map-obj": { + "version": "2.0.0", + "dev": true + }, + "meow": { + "version": "4.0.1", + "dev": true, + "requires": { + "camelcase-keys": "^4.0.0", + "decamelize-keys": "^1.0.0", + "loud-rejection": "^1.0.0", + "minimist": "^1.1.3", + "minimist-options": "^3.0.1", + "normalize-package-data": "^2.3.4", + "read-pkg-up": "^3.0.0", + "redent": "^2.0.0", + "trim-newlines": "^2.0.0" + } + }, + "minimist-options": { + "version": "3.0.2", + "dev": true, + "requires": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0" + } + }, + "quick-lru": { + "version": "1.1.0", + "dev": true + }, + "redent": { + "version": "2.0.0", + "dev": true, + "requires": { + "indent-string": "^3.0.0", + "strip-indent": "^2.0.0" + } + }, + "semver": { + "version": "6.3.0", + "dev": true + }, + "strip-indent": { + "version": "2.0.0", + "dev": true + }, + "trim-newlines": { + "version": "2.0.0", + "dev": true + } + } + }, + "git-up": { + "version": "4.0.5", + "dev": true, + "requires": { + "is-ssh": "^1.3.0", + "parse-url": "^6.0.0" + } + }, + "git-url-parse": { + "version": "11.6.0", + "dev": true, + "requires": { + "git-up": "^4.0.0" + } + }, + "gitconfiglocal": { + "version": "1.0.0", + "dev": true, + "requires": { + "ini": "^1.3.2" + } + }, + "glob": { + "version": "7.1.7", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "glob-to-regexp": { + "version": "0.3.0", + "dev": true + }, + "globals": { + "version": "13.17.0", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + }, + "dependencies": { + "type-fest": { + "version": "0.20.2", + "dev": true + } + } + }, + "globby": { + "version": "11.1.0", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, + "graceful-fs": { + "version": "4.2.10", + "dev": true + }, + "graphql": { + "version": "0.11.7", + "dev": true, + "requires": { + "iterall": "1.1.3" + } + }, + "handlebars": { + "version": "4.7.7", + "dev": true, + "requires": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4", + "wordwrap": "^1.0.0" + } + }, + "har-schema": { + "version": "2.0.0", + "dev": true + }, + "har-validator": { + "version": "5.1.5", + "dev": true, + "requires": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + } + }, + "hard-rejection": { + "version": "2.1.0", + "dev": true + }, + "has": { + "version": "1.0.3", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-bigints": { + "version": "1.0.2", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "has-property-descriptors": { + "version": "1.0.0", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.1" + } + }, + "has-symbols": { + "version": "1.0.3", + "dev": true + }, + "has-tostringtag": { + "version": "1.0.0", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "has-unicode": { + "version": "2.0.1", + "dev": true + }, + "has-value": { + "version": "1.0.0", + "dev": true, + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "hosted-git-info": { + "version": "2.8.9", + "dev": true + }, + "http-cache-semantics": { + "version": "3.8.1", + "dev": true + }, + "http-proxy-agent": { + "version": "2.1.0", + "dev": true, + "requires": { + "agent-base": "4", + "debug": "3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "dev": true + } + } + }, + "http-signature": { + "version": "1.2.0", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "https-proxy-agent": { + "version": "2.2.4", + "dev": true, + "requires": { + "agent-base": "^4.3.0", + "debug": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "human-signals": { + "version": "1.1.1", + "dev": true + }, + "humanize-ms": { + "version": "1.2.1", + "dev": true, + "requires": { + "ms": "^2.0.0" + } + }, + "iconv-lite": { + "version": "0.6.3", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + }, + "iferr": { + "version": "0.1.5", + "dev": true + }, + "ignore": { + "version": "5.2.0", + "dev": true + }, + "ignore-walk": { + "version": "3.0.4", + "dev": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "import-fresh": { + "version": "3.3.0", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "import-local": { + "version": "2.0.0", + "dev": true, + "requires": { + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "dev": true + }, + "indent-string": { + "version": "4.0.0", + "dev": true + }, + "infer-owner": { + "version": "1.0.4", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "dev": true + }, + "ini": { + "version": "1.3.8", + "dev": true + }, + "init-package-json": { + "version": "1.10.3", + "dev": true, + "requires": { + "glob": "^7.1.1", + "npm-package-arg": "^4.0.0 || ^5.0.0 || ^6.0.0", + "promzard": "^0.3.0", + "read": "~1.0.1", + "read-package-json": "1 || 2", + "semver": "2.x || 3.x || 4 || 5", + "validate-npm-package-license": "^3.0.1", + "validate-npm-package-name": "^3.0.0" + } + }, + "inquirer": { + "version": "6.5.2", + "dev": true, + "requires": { + "ansi-escapes": "^3.2.0", + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.3", + "figures": "^2.0.0", + "lodash": "^4.17.12", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rxjs": "^6.4.0", + "string-width": "^2.1.0", + "strip-ansi": "^5.1.0", + "through": "^2.3.6" + }, + "dependencies": { + "ansi-escapes": { + "version": "3.2.0", + "dev": true + }, + "ansi-regex": { + "version": "4.1.1", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "cli-cursor": { + "version": "2.1.0", + "dev": true, + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "color-convert": { + "version": "1.9.3", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "dev": true + }, + "mimic-fn": { + "version": "1.2.0", + "dev": true + }, + "onetime": { + "version": "2.0.1", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "restore-cursor": { + "version": "2.0.0", + "dev": true, + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + } + }, + "rxjs": { + "version": "6.6.7", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "string-width": { + "version": "2.1.1", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.1", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "strip-ansi": { + "version": "5.2.0", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "supports-color": { + "version": "5.5.0", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "tslib": { + "version": "1.14.1", + "dev": true + } + } + }, + "internal-slot": { + "version": "1.0.3", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } + }, + "interpret": { + "version": "1.4.0", + "dev": true + }, + "invert-kv": { + "version": "2.0.0", + "dev": true + }, + "ip": { + "version": "1.1.5", + "dev": true + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-arrayish": { + "version": "0.2.1", + "dev": true + }, + "is-bigint": { + "version": "1.0.4", + "dev": true, + "requires": { + "has-bigints": "^1.0.1" + } + }, + "is-boolean-object": { + "version": "1.1.2", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "dev": true + }, + "is-callable": { + "version": "1.2.4", + "dev": true + }, + "is-ci": { + "version": "2.0.0", + "dev": true, + "requires": { + "ci-info": "^2.0.0" + } + }, + "is-core-module": { + "version": "2.9.0", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-date-object": { + "version": "1.0.5", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "is-directory": { + "version": "0.3.1", + "dev": true + }, + "is-extendable": { + "version": "1.0.1", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + }, + "dependencies": { + "is-plain-object": { + "version": "2.0.4", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + } + } + }, + "is-extglob": { + "version": "2.1.1", + "dev": true + }, + "is-finite": { + "version": "1.1.0", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-negative-zero": { + "version": "2.0.2", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "dev": true + }, + "is-number-object": { + "version": "1.0.7", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-obj": { + "version": "1.0.1", + "dev": true + }, + "is-plain-obj": { + "version": "1.1.0", + "dev": true + }, + "is-plain-object": { + "version": "5.0.0", + "dev": true + }, + "is-regex": { + "version": "1.1.4", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-regexp": { + "version": "1.0.0", + "dev": true + }, + "is-shared-array-buffer": { + "version": "1.0.2", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-ssh": { + "version": "1.4.0", + "dev": true, + "requires": { + "protocols": "^2.0.1" + } + }, + "is-stream": { + "version": "2.0.1", + "dev": true + }, + "is-string": { + "version": "1.0.7", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-symbol": { + "version": "1.0.4", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "is-text-path": { + "version": "1.0.1", + "dev": true, + "requires": { + "text-extensions": "^1.0.0" + } + }, + "is-typedarray": { + "version": "1.0.0", + "dev": true + }, + "is-unicode-supported": { + "version": "0.1.0", + "dev": true + }, + "is-url": { + "version": "1.2.4", + "dev": true + }, + "is-utf8": { + "version": "0.2.1", + "dev": true + }, + "is-weakref": { + "version": "1.0.2", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-windows": { + "version": "1.0.2", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "dev": true + }, + "isomorphic-fetch": { + "version": "2.2.1", + "dev": true, + "requires": { + "node-fetch": "^1.0.1", + "whatwg-fetch": ">=0.10.0" + }, + "dependencies": { + "is-stream": { + "version": "1.1.0", + "dev": true + }, + "node-fetch": { + "version": "1.7.3", + "dev": true, + "requires": { + "encoding": "^0.1.11", + "is-stream": "^1.0.1" + } + } + } + }, + "isstream": { + "version": "0.1.2", + "dev": true + }, + "iterall": { + "version": "1.1.3", + "dev": true + }, + "jest-worker": { + "version": "26.6.2", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + } + }, + "js-base64": { + "version": "2.6.4", + "dev": true + }, + "js-tokens": { + "version": "4.0.0", + "dev": true + }, + "js-yaml": { + "version": "3.14.1", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "dependencies": { + "esprima": { + "version": "4.0.1", + "dev": true + } + } + }, + "jsbn": { + "version": "0.1.1", + "dev": true + }, + "json-parse-better-errors": { + "version": "1.0.2", + "dev": true + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "dev": true + }, + "json-schema": { + "version": "0.4.0", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "dev": true + }, + "json-stable-stringify": { + "version": "1.0.1", + "dev": true, + "requires": { + "jsonify": "~0.0.0" + } + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "dev": true + }, + "jsonc-parser": { + "version": "3.1.0", + "dev": true + }, + "jsonfile": { + "version": "4.0.0", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "jsonify": { + "version": "0.0.0", + "dev": true + }, + "jsonparse": { + "version": "1.3.1", + "dev": true + }, + "JSONStream": { + "version": "1.3.5", + "dev": true, + "requires": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + } + }, + "jsprim": { + "version": "1.4.2", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + } + }, + "kind-of": { + "version": "6.0.3", + "dev": true + }, + "lcid": { + "version": "2.0.0", + "dev": true, + "requires": { + "invert-kv": "^2.0.0" + } + }, + "lerna": { + "version": "3.22.1", + "dev": true, + "requires": { + "@lerna/add": "3.21.0", + "@lerna/bootstrap": "3.21.0", + "@lerna/changed": "3.21.0", + "@lerna/clean": "3.21.0", + "@lerna/cli": "3.18.5", + "@lerna/create": "3.22.0", + "@lerna/diff": "3.21.0", + "@lerna/exec": "3.21.0", + "@lerna/import": "3.22.0", + "@lerna/info": "3.21.0", + "@lerna/init": "3.21.0", + "@lerna/link": "3.21.0", + "@lerna/list": "3.21.0", + "@lerna/publish": "3.22.1", + "@lerna/run": "3.21.0", + "@lerna/version": "3.22.1", + "import-local": "^2.0.0", + "npmlog": "^4.1.2" + } + }, + "levn": { + "version": "0.3.0", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "lines-and-columns": { + "version": "1.2.4", + "dev": true + }, + "lint-staged": { + "version": "10.5.4", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "cli-truncate": "^2.1.0", + "commander": "^6.2.0", + "cosmiconfig": "^7.0.0", + "debug": "^4.2.0", + "dedent": "^0.7.0", + "enquirer": "^2.3.6", + "execa": "^4.1.0", + "listr2": "^3.2.2", + "log-symbols": "^4.0.0", + "micromatch": "^4.0.2", + "normalize-path": "^3.0.0", + "please-upgrade-node": "^3.2.0", + "string-argv": "0.3.1", + "stringify-object": "^3.3.0" + } + }, + "listr2": { + "version": "3.14.0", + "dev": true, + "requires": { + "cli-truncate": "^2.1.0", + "colorette": "^2.0.16", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rfdc": "^1.3.0", + "rxjs": "^7.5.1", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" + } + }, + "load-json-file": { + "version": "5.3.0", + "dev": true, + "requires": { + "graceful-fs": "^4.1.15", + "parse-json": "^4.0.0", + "pify": "^4.0.1", + "strip-bom": "^3.0.0", + "type-fest": "^0.3.0" + }, + "dependencies": { + "parse-json": { + "version": "4.0.0", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "type-fest": { + "version": "0.3.1", + "dev": true + } + } + }, + "locate-path": { + "version": "3.0.0", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "lodash": { + "version": "4.17.21", + "dev": true + }, + "lodash._reinterpolate": { + "version": "3.0.0", + "dev": true + }, + "lodash.clonedeep": { + "version": "4.5.0", + "dev": true + }, + "lodash.get": { + "version": "4.4.2", + "dev": true + }, + "lodash.ismatch": { + "version": "4.4.0", + "dev": true + }, + "lodash.merge": { + "version": "4.6.2", + "dev": true + }, + "lodash.padend": { + "version": "4.6.1", + "dev": true + }, + "lodash.set": { + "version": "4.3.2", + "dev": true + }, + "lodash.sortby": { + "version": "4.7.0", + "dev": true + }, + "lodash.template": { + "version": "4.5.0", + "dev": true, + "requires": { + "lodash._reinterpolate": "^3.0.0", + "lodash.templatesettings": "^4.0.0" + } + }, + "lodash.templatesettings": { + "version": "4.2.0", + "dev": true, + "requires": { + "lodash._reinterpolate": "^3.0.0" + } + }, + "lodash.truncate": { + "version": "4.4.2", + "dev": true + }, + "lodash.uniq": { + "version": "4.5.0", + "dev": true + }, + "log-symbols": { + "version": "4.1.0", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + } + }, + "log-update": { + "version": "4.0.0", + "dev": true, + "requires": { + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" + }, + "dependencies": { + "slice-ansi": { + "version": "4.0.0", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + }, + "wrap-ansi": { + "version": "6.2.0", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + } + } + }, + "loud-rejection": { + "version": "1.6.0", + "dev": true, + "requires": { + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" + } + }, + "lru-cache": { + "version": "5.1.1", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "lunr": { + "version": "2.3.9", + "dev": true + }, + "macos-release": { + "version": "2.5.0", + "dev": true + }, + "magic-string": { + "version": "0.22.5", + "dev": true, + "requires": { + "vlq": "^0.2.2" + } + }, + "make-dir": { + "version": "1.3.0", + "dev": true, + "requires": { + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "dev": true + } + } + }, + "make-fetch-happen": { + "version": "5.0.2", + "dev": true, + "requires": { + "agentkeepalive": "^3.4.1", + "cacache": "^12.0.0", + "http-cache-semantics": "^3.8.1", + "http-proxy-agent": "^2.1.0", + "https-proxy-agent": "^2.2.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "node-fetch-npm": "^2.0.2", + "promise-retry": "^1.1.1", + "socks-proxy-agent": "^4.0.0", + "ssri": "^6.0.0" + } + }, + "map-age-cleaner": { + "version": "0.1.3", + "dev": true, + "requires": { + "p-defer": "^1.0.0" + } + }, + "map-cache": { + "version": "0.2.2", + "dev": true + }, + "map-obj": { + "version": "4.3.0", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "dev": true, + "requires": { + "object-visit": "^1.0.0" + } + }, + "marked": { + "version": "2.0.7", + "dev": true + }, + "mem": { + "version": "4.3.0", + "dev": true, + "requires": { + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^2.0.0", + "p-is-promise": "^2.0.0" + } + }, + "meow": { + "version": "8.1.2", + "dev": true, + "requires": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "hosted-git-info": { + "version": "4.1.0", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "lru-cache": { + "version": "6.0.0", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "normalize-package-data": { + "version": "3.0.3", + "dev": true, + "requires": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + } + }, + "p-locate": { + "version": "4.1.0", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "path-exists": { + "version": "4.0.0", + "dev": true + }, + "read-pkg": { + "version": "5.2.0", + "dev": true, + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "hosted-git-info": { + "version": "2.8.9", + "dev": true + }, + "normalize-package-data": { + "version": "2.5.0", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "semver": { + "version": "5.7.1", + "dev": true + }, + "type-fest": { + "version": "0.6.0", + "dev": true + } + } + }, + "read-pkg-up": { + "version": "7.0.1", + "dev": true, + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "dependencies": { + "type-fest": { + "version": "0.8.1", + "dev": true + } + } + }, + "semver": { + "version": "7.3.7", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "type-fest": { + "version": "0.18.1", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "dev": true + }, + "yargs-parser": { + "version": "20.2.9", + "dev": true + } + } + }, + "merge-source-map": { + "version": "1.0.4", + "dev": true, + "requires": { + "source-map": "^0.5.6" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "dev": true + } + } + }, + "merge-stream": { + "version": "2.0.0", + "dev": true + }, + "merge2": { + "version": "1.4.1", + "dev": true + }, + "micromatch": { + "version": "4.0.5", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "mime": { + "version": "3.0.0", + "dev": true + }, + "mime-db": { + "version": "1.52.0", + "dev": true + }, + "mime-types": { + "version": "2.1.35", + "dev": true, + "requires": { + "mime-db": "1.52.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "dev": true + }, + "min-indent": { + "version": "1.0.1", + "dev": true + }, + "minimatch": { + "version": "3.1.2", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.6", + "dev": true + }, + "minimist-options": { + "version": "4.1.0", + "dev": true, + "requires": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + } + }, + "minipass": { + "version": "2.9.0", + "dev": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.3.3", + "dev": true, + "requires": { + "minipass": "^2.9.0" + } + }, + "mississippi": { + "version": "3.0.0", + "dev": true, + "requires": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^3.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + } + }, + "mixin-deep": { + "version": "1.3.2", + "dev": true, + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + } + }, + "mkdirp": { + "version": "0.5.6", + "dev": true, + "requires": { + "minimist": "^1.2.6" + } + }, + "mkdirp-promise": { + "version": "5.0.1", + "dev": true, + "requires": { + "mkdirp": "*" + } + }, + "modify-values": { + "version": "1.0.1", + "dev": true + }, + "moment": { + "version": "2.29.4", + "dev": true + }, + "move-concurrently": { + "version": "1.0.1", + "dev": true, + "requires": { + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" + }, + "dependencies": { + "aproba": { + "version": "1.2.0", + "dev": true + }, + "rimraf": { + "version": "2.7.1", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "ms": { + "version": "2.1.2", + "dev": true + }, + "multimatch": { + "version": "3.0.0", + "dev": true, + "requires": { + "array-differ": "^2.0.3", + "array-union": "^1.0.2", + "arrify": "^1.0.1", + "minimatch": "^3.0.4" + }, + "dependencies": { + "array-union": { + "version": "1.0.2", + "dev": true, + "requires": { + "array-uniq": "^1.0.1" + } + } + } + }, + "mute-stream": { + "version": "0.0.7", + "dev": true + }, + "mz": { + "version": "2.7.0", + "dev": true, + "requires": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "nanomatch": { + "version": "1.2.13", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + } + }, + "natural-compare": { + "version": "1.4.0", + "dev": true + }, + "neo-async": { + "version": "2.6.2", + "dev": true + }, + "nice-try": { + "version": "1.0.5", + "dev": true + }, + "node-fetch": { + "version": "2.6.7", + "dev": true, + "requires": { + "whatwg-url": "^5.0.0" + } + }, + "node-fetch-npm": { + "version": "2.0.4", + "dev": true, + "requires": { + "encoding": "^0.1.11", + "json-parse-better-errors": "^1.0.0", + "safe-buffer": "^5.1.1" + } + }, + "node-gyp": { + "version": "5.1.1", + "dev": true, + "requires": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.2", + "mkdirp": "^0.5.1", + "nopt": "^4.0.1", + "npmlog": "^4.1.2", + "request": "^2.88.0", + "rimraf": "^2.6.3", + "semver": "^5.7.1", + "tar": "^4.4.12", + "which": "^1.3.1" + }, + "dependencies": { + "rimraf": { + "version": "2.7.1", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "which": { + "version": "1.3.1", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "nopt": { + "version": "4.0.3", + "dev": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "normalize-package-data": { + "version": "2.5.0", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "normalize-path": { + "version": "3.0.0", + "dev": true + }, + "normalize-url": { + "version": "6.1.0", + "dev": true + }, + "npm-bundled": { + "version": "1.1.2", + "dev": true, + "requires": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-lifecycle": { + "version": "3.1.5", + "dev": true, + "requires": { + "byline": "^5.0.0", + "graceful-fs": "^4.1.15", + "node-gyp": "^5.0.2", + "resolve-from": "^4.0.0", + "slide": "^1.1.6", + "uid-number": "0.0.6", + "umask": "^1.1.0", + "which": "^1.3.1" + }, + "dependencies": { + "which": { + "version": "1.3.1", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "npm-normalize-package-bin": { + "version": "1.0.1", + "dev": true + }, + "npm-package-arg": { + "version": "6.1.1", + "dev": true, + "requires": { + "hosted-git-info": "^2.7.1", + "osenv": "^0.1.5", + "semver": "^5.6.0", + "validate-npm-package-name": "^3.0.0" + } + }, + "npm-packlist": { + "version": "1.4.8", + "dev": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-pick-manifest": { + "version": "3.0.2", + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1", + "npm-package-arg": "^6.0.0", + "semver": "^5.4.1" + } + }, + "npm-run-path": { + "version": "4.0.1", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "npmlog": { + "version": "4.1.2", + "dev": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "dev": true + }, + "oauth-sign": { + "version": "0.9.0", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "dev": true + }, + "object-copy": { + "version": "0.1.0", + "dev": true, + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-descriptor": { + "version": "0.1.6", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "dev": true + } + } + }, + "kind-of": { + "version": "3.2.2", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "object-inspect": { + "version": "1.4.1", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "dev": true + }, + "object-visit": { + "version": "1.0.1", + "dev": true, + "requires": { + "isobject": "^3.0.0" + } + }, + "object.assign": { + "version": "4.1.2", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + }, + "object.getownpropertydescriptors": { + "version": "2.1.4", + "dev": true, + "requires": { + "array.prototype.reduce": "^1.0.4", + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.1" + } + }, + "object.pick": { + "version": "1.3.0", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "octokit-pagination-methods": { + "version": "1.1.0", + "dev": true + }, + "once": { + "version": "1.4.0", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "opener": { + "version": "1.5.2", + "dev": true + }, + "optionator": { + "version": "0.8.3", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "os-homedir": { + "version": "1.0.2", + "dev": true + }, + "os-locale": { + "version": "3.1.0", + "dev": true, + "requires": { + "execa": "^1.0.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "6.0.5", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "1.0.0", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "get-stream": { + "version": "4.1.0", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "is-stream": { + "version": "1.1.0", + "dev": true + }, + "npm-run-path": { + "version": "2.0.2", + "dev": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "path-key": { + "version": "2.0.1", + "dev": true + }, + "shebang-command": { + "version": "1.2.0", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "dev": true + }, + "which": { + "version": "1.3.1", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "os-name": { + "version": "3.1.0", + "dev": true, + "requires": { + "macos-release": "^2.2.0", + "windows-release": "^3.1.0" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "dev": true + }, + "osenv": { + "version": "0.1.5", + "dev": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "p-defer": { + "version": "1.0.0", + "dev": true + }, + "p-finally": { + "version": "1.0.0", + "dev": true + }, + "p-is-promise": { + "version": "2.1.0", + "dev": true + }, + "p-limit": { + "version": "2.3.0", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-map": { + "version": "4.0.0", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "p-map-series": { + "version": "1.0.0", + "dev": true, + "requires": { + "p-reduce": "^1.0.0" + } + }, + "p-pipe": { + "version": "1.2.0", + "dev": true + }, + "p-queue": { + "version": "4.0.0", + "dev": true, + "requires": { + "eventemitter3": "^3.1.0" + } + }, + "p-reduce": { + "version": "1.0.0", + "dev": true + }, + "p-try": { + "version": "2.2.0", + "dev": true + }, + "p-waterfall": { + "version": "1.0.0", + "dev": true, + "requires": { + "p-reduce": "^1.0.0" + } + }, + "pako": { + "version": "1.0.11", + "dev": true + }, + "parallel-transform": { + "version": "1.2.0", + "dev": true, + "requires": { + "cyclist": "^1.0.1", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + } + }, + "parent-module": { + "version": "1.0.1", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-github-repo-url": { + "version": "1.4.1", + "dev": true + }, + "parse-json": { + "version": "5.2.0", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "parse-path": { + "version": "4.0.4", + "dev": true, + "requires": { + "is-ssh": "^1.3.0", + "protocols": "^1.4.0", + "qs": "^6.9.4", + "query-string": "^6.13.8" + }, + "dependencies": { + "protocols": { + "version": "1.4.8", + "dev": true + } + } + }, + "parse-url": { + "version": "6.0.5", + "dev": true, + "requires": { + "is-ssh": "^1.3.0", + "normalize-url": "^6.1.0", + "parse-path": "^4.0.0", + "protocols": "^1.4.0" + }, + "dependencies": { + "protocols": { + "version": "1.4.8", + "dev": true + } + } + }, + "pascalcase": { + "version": "0.1.1", + "dev": true + }, + "path-dirname": { + "version": "1.0.2", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "dev": true + }, + "performance-now": { + "version": "2.1.0", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "dev": true + }, + "pify": { + "version": "4.0.1", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "dev": true, + "requires": { + "pinkie": "^2.0.0" + } + }, + "pkg-dir": { + "version": "3.0.0", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + }, + "please-upgrade-node": { + "version": "3.2.0", + "dev": true, + "requires": { + "semver-compare": "^1.0.0" + } + }, + "pluralize": { + "version": "7.0.0", + "dev": true + }, + "posix-character-classes": { + "version": "0.1.1", + "dev": true + }, + "prelude-ls": { + "version": "1.1.2", + "dev": true + }, + "prettier": { + "version": "2.7.1", + "dev": true + }, + "process-nextick-args": { + "version": "1.0.7", + "dev": true + }, + "progress": { + "version": "2.0.3", + "dev": true + }, + "promise-inflight": { + "version": "1.0.1", + "dev": true + }, + "promise-retry": { + "version": "1.1.1", + "dev": true, + "requires": { + "err-code": "^1.0.0", + "retry": "^0.10.0" + } + }, + "promzard": { + "version": "0.3.0", + "dev": true, + "requires": { + "read": "1" + } + }, + "proto-list": { + "version": "1.2.4", + "dev": true + }, + "protocols": { + "version": "2.0.1", + "dev": true + }, + "protoduck": { + "version": "5.0.1", + "dev": true, + "requires": { + "genfun": "^5.0.0" + } + }, + "psl": { + "version": "1.9.0", + "dev": true + }, + "pump": { + "version": "3.0.0", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pumpify": { + "version": "1.5.1", + "dev": true, + "requires": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + }, + "dependencies": { + "pump": { + "version": "2.0.1", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } + } + }, + "punycode": { + "version": "2.1.1", + "dev": true + }, + "q": { + "version": "1.5.1", + "dev": true + }, + "qs": { + "version": "6.11.0", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + }, + "query-string": { + "version": "6.14.1", + "dev": true, + "requires": { + "decode-uri-component": "^0.2.0", + "filter-obj": "^1.1.0", + "split-on-first": "^1.0.0", + "strict-uri-encode": "^2.0.0" + } + }, + "queue-microtask": { + "version": "1.2.3", + "dev": true + }, + "quick-lru": { + "version": "4.0.1", + "dev": true + }, + "quicktype": { + "version": "15.0.261", + "dev": true, + "requires": { + "@mark.probst/typescript-json-schema": "~0.32.0", + "@mark.probst/unicode-properties": "~1.1.0", + "browser-or-node": "^1.2.1", + "chalk": "^2.4.1", + "collection-utils": "^1.0.1", + "command-line-args": "^4.0.6", + "command-line-usage": "^5.0.5", + "graphql": "^0.11.7", + "is-url": "^1.2.4", + "isomorphic-fetch": "^2.2.1", + "js-base64": "^2.4.3", + "lodash": "^4.17.21", + "moment": "^2.22.1", + "node-fetch": "^2.6.1", + "pako": "^1.0.6", + "pluralize": "^7.0.0", + "readable-stream": "2.3.0", + "stream-json": "1.1.3", + "string-to-stream": "^1.1.0", + "typescript": "~3.2.1", + "urijs": "^1.19.6", + "uuid": "^3.2.1", + "wordwrap": "^1.0.0", + "yaml": "^1.5.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "typescript": { + "version": "3.2.4", + "dev": true + } + } + }, + "quote-stream": { + "version": "1.0.2", + "dev": true, + "requires": { + "buffer-equal": "0.0.1", + "minimist": "^1.1.3", + "through2": "^2.0.0" + } + }, + "randombytes": { + "version": "2.1.0", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "read": { + "version": "1.0.7", + "dev": true, + "requires": { + "mute-stream": "~0.0.4" + } + }, + "read-cmd-shim": { + "version": "1.0.5", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2" + } + }, + "read-package-json": { + "version": "2.1.2", + "dev": true, + "requires": { + "glob": "^7.1.1", + "json-parse-even-better-errors": "^2.3.0", + "normalize-package-data": "^2.0.0", + "npm-normalize-package-bin": "^1.0.0" + } + }, + "read-package-tree": { + "version": "5.3.1", + "dev": true, + "requires": { + "read-package-json": "^2.0.0", + "readdir-scoped-modules": "^1.0.0", + "util-promisify": "^2.1.0" + } + }, + "read-pkg": { + "version": "3.0.0", + "dev": true, + "requires": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + }, + "dependencies": { + "load-json-file": { + "version": "4.0.0", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + } + }, + "parse-json": { + "version": "4.0.0", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "path-type": { + "version": "3.0.0", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "pify": { + "version": "3.0.0", + "dev": true + } + } + }, + "read-pkg-up": { + "version": "3.0.0", + "dev": true, + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^3.0.0" + }, + "dependencies": { + "find-up": { + "version": "2.1.0", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "dev": true + } + } + }, + "readable-stream": { + "version": "2.3.0", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "safe-buffer": "~5.1.0", + "string_decoder": "~1.0.0", + "util-deprecate": "~1.0.1" + } + }, + "readdir-scoped-modules": { + "version": "1.1.0", + "dev": true, + "requires": { + "debuglog": "^1.0.1", + "dezalgo": "^1.0.0", + "graceful-fs": "^4.1.2", + "once": "^1.3.0" + } + }, + "rechoir": { + "version": "0.6.2", + "dev": true, + "requires": { + "resolve": "^1.1.6" + } + }, + "redent": { + "version": "3.0.0", + "dev": true, + "requires": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + } + }, + "reduce-flatten": { + "version": "1.0.1", + "dev": true + }, + "regex-not": { + "version": "1.0.2", + "dev": true, + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "regexp.prototype.flags": { + "version": "1.4.3", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + } + }, + "regexpp": { + "version": "3.2.0", + "dev": true + }, + "repeat-element": { + "version": "1.1.4", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "dev": true + }, + "repeating": { + "version": "2.0.1", + "dev": true, + "requires": { + "is-finite": "^1.0.0" + } + }, + "request": { + "version": "2.88.2", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "qs": { + "version": "6.5.3", + "dev": true + } + } + }, + "require-directory": { + "version": "2.1.1", + "dev": true + }, + "require-from-string": { + "version": "2.0.2", + "dev": true + }, + "require-main-filename": { + "version": "1.0.1", + "dev": true + }, + "resolve": { + "version": "1.22.1", + "dev": true, + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-cwd": { + "version": "2.0.0", + "dev": true, + "requires": { + "resolve-from": "^3.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "3.0.0", + "dev": true + } + } + }, + "resolve-from": { + "version": "4.0.0", + "dev": true + }, + "resolve-url": { + "version": "0.2.1", + "dev": true + }, + "restore-cursor": { + "version": "3.1.0", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "ret": { + "version": "0.1.15", + "dev": true + }, + "retry": { + "version": "0.10.1", + "dev": true + }, + "reusify": { + "version": "1.0.4", + "dev": true + }, + "rfdc": { + "version": "1.3.0", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "rollup": { + "version": "2.77.2", + "dev": true, + "requires": { + "fsevents": "~2.3.2" + } + }, + "rollup-plugin-serve": { + "version": "1.1.0", + "dev": true, + "requires": { + "mime": ">=2.4.6", + "opener": "1" + } + }, + "rollup-plugin-string": { + "version": "3.0.0", + "dev": true, + "requires": { + "rollup-pluginutils": "^2.4.1" + } + }, + "rollup-plugin-terser": { + "version": "7.0.2", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "jest-worker": "^26.2.1", + "serialize-javascript": "^4.0.0", + "terser": "^5.0.0" + } + }, + "rollup-pluginutils": { + "version": "2.8.2", + "dev": true, + "requires": { + "estree-walker": "^0.6.1" + }, + "dependencies": { + "estree-walker": { + "version": "0.6.1", + "dev": true + } + } + }, + "run-async": { + "version": "2.4.1", + "dev": true + }, + "run-parallel": { + "version": "1.2.0", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "run-queue": { + "version": "1.0.3", + "dev": true, + "requires": { + "aproba": "^1.1.1" + }, + "dependencies": { + "aproba": { + "version": "1.2.0", + "dev": true + } + } + }, + "rxjs": { + "version": "7.5.6", + "dev": true, + "requires": { + "tslib": "^2.1.0" + } + }, + "safe-buffer": { + "version": "5.1.2", + "dev": true + }, + "safe-regex": { + "version": "1.1.0", + "dev": true, + "requires": { + "ret": "~0.1.10" + } + }, + "safer-buffer": { + "version": "2.1.2", + "dev": true + }, + "semver": { + "version": "5.7.1", + "dev": true + }, + "semver-compare": { + "version": "1.0.0", + "dev": true + }, + "serialize-javascript": { + "version": "4.0.0", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "set-blocking": { + "version": "2.0.0", + "dev": true + }, + "set-value": { + "version": "2.0.1", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "dev": true + }, + "is-plain-object": { + "version": "2.0.4", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + } + } + }, + "shallow-clone": { + "version": "3.0.1", + "dev": true, + "requires": { + "kind-of": "^6.0.2" + } + }, + "shallow-copy": { + "version": "0.0.1", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "dev": true + }, + "shelljs": { + "version": "0.8.5", + "dev": true, + "requires": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + } + }, + "shiki": { + "version": "0.9.15", + "dev": true, + "requires": { + "jsonc-parser": "^3.0.0", + "vscode-oniguruma": "^1.6.1", + "vscode-textmate": "5.2.0" + } + }, + "side-channel": { + "version": "1.0.4", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "dependencies": { + "object-inspect": { + "version": "1.12.2", + "dev": true + } + } + }, + "signal-exit": { + "version": "3.0.7", + "dev": true + }, + "slash": { + "version": "3.0.0", + "dev": true + }, + "slice-ansi": { + "version": "3.0.0", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + }, + "slide": { + "version": "1.1.6", + "dev": true + }, + "smart-buffer": { + "version": "4.2.0", + "dev": true + }, + "snapdragon": { + "version": "0.8.2", + "dev": true, + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "dev": true + }, + "kind-of": { + "version": "5.1.0", + "dev": true + }, + "ms": { + "version": "2.0.0", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "dev": true + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "dev": true, + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "dev": true, + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "socks": { + "version": "2.3.3", + "dev": true, + "requires": { + "ip": "1.1.5", + "smart-buffer": "^4.1.0" + } + }, + "socks-proxy-agent": { + "version": "4.0.2", + "dev": true, + "requires": { + "agent-base": "~4.2.1", + "socks": "~2.3.2" + }, + "dependencies": { + "agent-base": { + "version": "4.2.1", + "dev": true, + "requires": { + "es6-promisify": "^5.0.0" + } + } + } + }, + "sort-keys": { + "version": "2.0.0", + "dev": true, + "requires": { + "is-plain-obj": "^1.0.0" + } + }, + "source-map": { + "version": "0.6.1", + "dev": true + }, + "source-map-resolve": { + "version": "0.5.3", + "dev": true, + "requires": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-support": { + "version": "0.5.21", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "source-map-url": { + "version": "0.4.1", + "dev": true + }, + "spdx-correct": { + "version": "3.1.1", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.11", + "dev": true + }, + "split": { + "version": "1.0.1", + "dev": true, + "requires": { + "through": "2" + } + }, + "split-on-first": { + "version": "1.1.0", + "dev": true + }, + "split-string": { + "version": "3.1.0", + "dev": true, + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "split2": { + "version": "3.2.2", + "dev": true, + "requires": { + "readable-stream": "^3.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "dev": true + }, + "string_decoder": { + "version": "1.3.0", + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + } + } + } + }, + "sprintf-js": { + "version": "1.0.3", + "dev": true + }, + "sshpk": { + "version": "1.17.0", + "dev": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "ssri": { + "version": "6.0.2", + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1" + } + }, + "static-eval": { + "version": "2.1.0", + "dev": true, + "requires": { + "escodegen": "^1.11.1" + }, + "dependencies": { + "escodegen": { + "version": "1.14.3", + "dev": true, + "requires": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + } + }, + "esprima": { + "version": "4.0.1", + "dev": true + } + } + }, + "static-extend": { + "version": "0.1.2", + "dev": true, + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "dev": true + } + } + }, + "static-module": { + "version": "2.2.5", + "dev": true, + "requires": { + "concat-stream": "~1.6.0", + "convert-source-map": "^1.5.1", + "duplexer2": "~0.1.4", + "escodegen": "~1.9.0", + "falafel": "^2.1.0", + "has": "^1.0.1", + "magic-string": "^0.22.4", + "merge-source-map": "1.0.4", + "object-inspect": "~1.4.0", + "quote-stream": "~1.0.2", + "readable-stream": "~2.3.3", + "shallow-copy": "~0.0.1", + "static-eval": "^2.0.0", + "through2": "~2.0.3" + }, + "dependencies": { + "process-nextick-args": { + "version": "2.0.1", + "dev": true + }, + "readable-stream": { + "version": "2.3.7", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "stream-chain": { + "version": "2.2.5", + "dev": true + }, + "stream-each": { + "version": "1.2.3", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" + } + }, + "stream-json": { + "version": "1.1.3", + "dev": true, + "requires": { + "stream-chain": "^2.0.3" + } + }, + "stream-shift": { + "version": "1.0.1", + "dev": true + }, + "strict-uri-encode": { + "version": "2.0.0", + "dev": true + }, + "string_decoder": { + "version": "1.0.3", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "string-argv": { + "version": "0.3.1", + "dev": true + }, + "string-to-stream": { + "version": "1.1.1", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.1.0" + } + }, + "string-width": { + "version": "4.2.3", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "string.prototype.trimend": { + "version": "1.0.5", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + } + }, + "string.prototype.trimstart": { + "version": "1.0.5", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + } + }, + "stringify-object": { + "version": "3.3.0", + "dev": true, + "requires": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + } + }, + "strip-ansi": { + "version": "6.0.1", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-bom": { + "version": "3.0.0", + "dev": true + }, + "strip-eof": { + "version": "1.0.0", + "dev": true + }, + "strip-final-newline": { + "version": "2.0.0", + "dev": true + }, + "strip-indent": { + "version": "3.0.0", + "dev": true, + "requires": { + "min-indent": "^1.0.0" + } + }, + "strip-json-comments": { + "version": "3.1.1", + "dev": true + }, + "strong-log-transformer": { + "version": "2.1.0", + "dev": true, + "requires": { + "duplexer": "^0.1.1", + "minimist": "^1.2.0", + "through": "^2.3.4" + } + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "dev": true + }, + "table": { + "version": "6.8.0", + "dev": true, + "requires": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "dependencies": { + "ajv": { + "version": "8.11.0", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "dev": true + }, + "slice-ansi": { + "version": "4.0.0", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + } + } + }, + "table-layout": { + "version": "0.4.5", + "dev": true, + "requires": { + "array-back": "^2.0.0", + "deep-extend": "~0.6.0", + "lodash.padend": "^4.6.1", + "typical": "^2.6.1", + "wordwrapjs": "^3.0.0" + } + }, + "tar": { + "version": "4.4.19", + "dev": true, + "requires": { + "chownr": "^1.1.4", + "fs-minipass": "^1.2.7", + "minipass": "^2.9.0", + "minizlib": "^1.3.3", + "mkdirp": "^0.5.5", + "safe-buffer": "^5.2.1", + "yallist": "^3.1.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "dev": true + } + } + }, + "temp-dir": { + "version": "1.0.0", + "dev": true + }, + "temp-write": { + "version": "3.4.0", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "is-stream": "^1.1.0", + "make-dir": "^1.0.0", + "pify": "^3.0.0", + "temp-dir": "^1.0.0", + "uuid": "^3.0.1" + }, + "dependencies": { + "is-stream": { + "version": "1.1.0", + "dev": true + }, + "pify": { + "version": "3.0.0", + "dev": true + } + } + }, + "terser": { + "version": "5.14.2", + "dev": true, + "requires": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "dependencies": { + "acorn": { + "version": "8.8.0", + "dev": true + }, + "commander": { + "version": "2.20.3", + "dev": true + } + } + }, + "test-value": { + "version": "2.1.0", + "dev": true, + "requires": { + "array-back": "^1.0.3", + "typical": "^2.6.0" + }, + "dependencies": { + "array-back": { + "version": "1.0.4", + "dev": true, + "requires": { + "typical": "^2.6.0" + } + } + } + }, + "text-extensions": { + "version": "1.9.0", + "dev": true + }, + "text-table": { + "version": "0.2.0", + "dev": true + }, + "thenify": { + "version": "3.3.1", + "dev": true, + "requires": { + "any-promise": "^1.0.0" + } + }, + "thenify-all": { + "version": "1.6.0", + "dev": true, + "requires": { + "thenify": ">= 3.1.0 < 4" + } + }, + "through": { + "version": "2.3.8", + "dev": true + }, + "through2": { + "version": "2.0.5", + "dev": true, + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + }, + "dependencies": { + "process-nextick-args": { + "version": "2.0.1", + "dev": true + }, + "readable-stream": { + "version": "2.3.7", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "tiny-inflate": { + "version": "1.0.3", + "dev": true + }, + "tmp": { + "version": "0.0.33", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "to-object-path": { + "version": "0.3.0", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-regex": { + "version": "3.0.2", + "dev": true, + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "to-regex-range": { + "version": "5.0.1", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "tough-cookie": { + "version": "2.5.0", + "dev": true, + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, + "tr46": { + "version": "0.0.3", + "dev": true + }, + "trim-newlines": { + "version": "3.0.1", + "dev": true + }, + "tslib": { + "version": "2.4.0", + "dev": true + }, + "tsutils": { + "version": "3.21.0", + "dev": true, + "requires": { + "tslib": "^1.8.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "dev": true + } + } + }, + "tunnel-agent": { + "version": "0.6.0", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "dev": true + }, + "type-check": { + "version": "0.3.2", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + }, + "type-fest": { + "version": "0.21.3", + "dev": true + }, + "typedarray": { + "version": "0.0.6", + "dev": true + }, + "typedoc": { + "version": "0.20.37", + "dev": true, + "requires": { + "colors": "^1.4.0", + "fs-extra": "^9.1.0", + "handlebars": "^4.7.7", + "lodash": "^4.17.21", + "lunr": "^2.3.9", + "marked": "~2.0.3", + "minimatch": "^3.0.0", + "progress": "^2.0.3", + "shelljs": "^0.8.4", + "shiki": "^0.9.3", + "typedoc-default-themes": "^0.12.10" + }, + "dependencies": { + "fs-extra": { + "version": "9.1.0", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "dev": true + } + } + }, + "typedoc-default-themes": { + "version": "0.12.10", + "dev": true + }, + "typescript": { + "version": "4.2.4", + "dev": true + }, + "typical": { + "version": "2.6.1", + "dev": true + }, + "uglify-js": { + "version": "3.16.3", + "dev": true, + "optional": true + }, + "uid-number": { + "version": "0.0.6", + "dev": true + }, + "umask": { + "version": "1.1.0", + "dev": true + }, + "unbox-primitive": { + "version": "1.0.2", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + } + }, + "unicode-trie": { + "version": "0.3.1", + "dev": true, + "requires": { + "pako": "^0.2.5", + "tiny-inflate": "^1.0.0" + }, + "dependencies": { + "pako": { + "version": "0.2.9", + "dev": true + } + } + }, + "union-value": { + "version": "1.0.1", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "0.1.1", + "dev": true + } + } + }, + "unique-filename": { + "version": "1.1.1", + "dev": true, + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.2", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "universal-user-agent": { + "version": "4.0.1", + "dev": true, + "requires": { + "os-name": "^3.1.0" + } + }, + "universalify": { + "version": "0.1.2", + "dev": true + }, + "unset-value": { + "version": "1.0.0", + "dev": true, + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "dev": true, + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "dev": true + } + } + }, + "upath": { + "version": "1.2.0", + "dev": true + }, + "uri-js": { + "version": "4.4.1", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "urijs": { + "version": "1.19.11", + "dev": true + }, + "urix": { + "version": "0.1.0", + "dev": true + }, + "use": { + "version": "3.1.1", + "dev": true + }, + "util-deprecate": { + "version": "1.0.2", + "dev": true + }, + "util-promisify": { + "version": "2.1.0", + "dev": true, + "requires": { + "object.getownpropertydescriptors": "^2.0.3" + } + }, + "uuid": { + "version": "3.4.0", + "dev": true + }, + "v8-compile-cache": { + "version": "2.3.0", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "validate-npm-package-name": { + "version": "3.0.0", + "dev": true, + "requires": { + "builtins": "^1.0.3" + } + }, + "verror": { + "version": "1.10.0", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + }, + "dependencies": { + "core-util-is": { + "version": "1.0.2", + "dev": true + } + } + }, + "vlq": { + "version": "0.2.3", + "dev": true + }, + "vscode-oniguruma": { + "version": "1.6.2", + "dev": true + }, + "vscode-textmate": { + "version": "5.2.0", + "dev": true + }, + "wcwidth": { + "version": "1.0.1", + "dev": true, + "requires": { + "defaults": "^1.0.3" + } + }, + "webidl-conversions": { + "version": "3.0.1", + "dev": true + }, + "whatwg-fetch": { + "version": "3.6.2", + "dev": true + }, + "whatwg-url": { + "version": "5.0.0", + "dev": true, + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "which": { + "version": "2.0.2", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-boxed-primitive": { + "version": "1.0.2", + "dev": true, + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, + "which-module": { + "version": "2.0.0", + "dev": true + }, + "wide-align": { + "version": "1.1.5", + "dev": true, + "requires": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "windows-release": { + "version": "3.3.3", + "dev": true, + "requires": { + "execa": "^1.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "6.0.5", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "1.0.0", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "get-stream": { + "version": "4.1.0", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "is-stream": { + "version": "1.1.0", + "dev": true + }, + "npm-run-path": { + "version": "2.0.2", + "dev": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "path-key": { + "version": "2.0.1", + "dev": true + }, + "shebang-command": { + "version": "1.2.0", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "dev": true + }, + "which": { + "version": "1.3.1", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "word-wrap": { + "version": "1.2.3", + "dev": true + }, + "wordwrap": { + "version": "1.0.0", + "dev": true + }, + "wordwrapjs": { + "version": "3.0.0", + "dev": true, + "requires": { + "reduce-flatten": "^1.0.1", + "typical": "^2.6.1" + } + }, + "wrap-ansi": { + "version": "7.0.0", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "dev": true + }, + "write-file-atomic": { + "version": "2.4.3", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, + "write-json-file": { + "version": "3.2.0", + "dev": true, + "requires": { + "detect-indent": "^5.0.0", + "graceful-fs": "^4.1.15", + "make-dir": "^2.1.0", + "pify": "^4.0.1", + "sort-keys": "^2.0.0", + "write-file-atomic": "^2.4.2" + }, + "dependencies": { + "make-dir": { + "version": "2.1.0", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + } + } + }, + "write-pkg": { + "version": "3.2.0", + "dev": true, + "requires": { + "sort-keys": "^2.0.0", + "write-json-file": "^2.2.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "dev": true + }, + "write-json-file": { + "version": "2.3.0", + "dev": true, + "requires": { + "detect-indent": "^5.0.0", + "graceful-fs": "^4.1.2", + "make-dir": "^1.0.0", + "pify": "^3.0.0", + "sort-keys": "^2.0.0", + "write-file-atomic": "^2.0.0" + } + } + } + }, + "xtend": { + "version": "4.0.2", + "dev": true + }, + "y18n": { + "version": "4.0.3", + "dev": true + }, + "yallist": { + "version": "3.1.1", + "dev": true + }, + "yaml": { + "version": "1.10.2", + "dev": true + }, + "yargs": { + "version": "12.0.5", + "dev": true, + "requires": { + "cliui": "^4.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", + "get-caller-file": "^1.0.1", + "os-locale": "^3.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1 || ^4.0.0", + "yargs-parser": "^11.1.1" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.1", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "yargs-parser": { + "version": "11.1.1", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "@react-three/fiber": { + "version": "7.0.29", + "requires": { + "@babel/runtime": "^7.13.10", + "@types/react-reconciler": "^0.26.2", + "react-merge-refs": "^1.1.0", + "react-reconciler": "^0.26.2", + "react-three-fiber": "0.0.0-deprecated", + "react-use-measure": "^2.1.1", + "resize-observer-polyfill": "^1.5.1", + "scheduler": "^0.20.2", + "use-asset": "^1.0.4", + "utility-types": "^3.10.0", + "zustand": "^3.5.1" + } + }, + "@rollup/pluginutils": { + "version": "4.2.1", + "dev": true, + "requires": { + "estree-walker": "^2.0.1", + "picomatch": "^2.2.2" + } + }, + "@shaderfrog/glsl-parser": { + "version": "0.1.23" + }, + "@types/json5": { + "version": "0.0.29", + "dev": true + }, + "@types/prop-types": { + "version": "15.7.5" + }, + "@types/react": { + "version": "18.0.15", + "requires": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "@types/react-reconciler": { + "version": "0.26.7", + "requires": { + "@types/react": "*" + } + }, + "@types/scheduler": { + "version": "0.16.2" + }, + "@ungap/promise-all-settled": { + "version": "1.1.2" + }, + "@vitejs/plugin-react-refresh": { + "version": "1.3.6", + "dev": true, + "requires": { + "@babel/core": "^7.14.8", + "@babel/plugin-transform-react-jsx-self": "^7.14.5", + "@babel/plugin-transform-react-jsx-source": "^7.14.5", + "@rollup/pluginutils": "^4.1.1", + "react-refresh": "^0.10.0" + } + }, + "abab": { + "version": "2.0.6" + }, + "accepts": { + "version": "1.3.8", + "requires": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + } + }, + "acorn": { + "version": "7.4.1", + "dev": true + }, + "acorn-jsx": { + "version": "5.3.2", + "dev": true, + "requires": {} + }, + "aes-js": { + "version": "3.0.0" + }, + "ajv": { + "version": "6.12.6", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "alea": { + "version": "1.0.1" + }, + "ansi-colors": { + "version": "4.1.1" + }, + "ansi-regex": { + "version": "5.0.1" + }, + "ansi-styles": { + "version": "3.2.1", + "requires": { + "color-convert": "^1.9.0" + } + }, + "anymatch": { + "version": "3.1.2", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "argparse": { + "version": "2.0.1" + }, + "array-flatten": { + "version": "1.1.1" + }, + "array-includes": { + "version": "3.1.5", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5", + "get-intrinsic": "^1.1.1", + "is-string": "^1.0.7" + } + }, + "array.prototype.flat": { + "version": "1.3.0", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.2", + "es-shim-unscopables": "^1.0.0" + } + }, + "astral-regex": { + "version": "2.0.0", + "dev": true + }, + "axios": { + "version": "0.21.4", + "requires": { + "follow-redirects": "^1.14.0" + } + }, + "balanced-match": { + "version": "1.0.2" + }, + "bech32": { + "version": "1.1.4" + }, + "bidi-js": { + "version": "1.0.2", + "requires": { + "require-from-string": "^2.0.2" + } + }, + "binary-extensions": { + "version": "2.2.0" + }, + "bn.js": { + "version": "5.2.1" + }, + "body-parser": { + "version": "1.20.0", + "requires": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.10.3", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + } + }, + "brace-expansion": { + "version": "1.1.11", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "requires": { + "fill-range": "^7.0.1" + } + }, + "brorand": { + "version": "1.1.0" + }, + "browser-stdout": { + "version": "1.3.1" + }, + "browserslist": { + "version": "4.21.3", + "requires": { + "caniuse-lite": "^1.0.30001370", + "electron-to-chromium": "^1.4.202", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.5" + } + }, + "bytes": { + "version": "3.1.2" + }, + "call-bind": { + "version": "1.0.2", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "callsites": { + "version": "3.1.0", + "dev": true + }, + "camelcase": { + "version": "6.3.0" + }, + "caniuse-lite": { + "version": "1.0.30001374" + }, + "chalk": { + "version": "2.4.2", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chokidar": { + "version": "3.5.3", + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "classnames": { + "version": "2.3.1" + }, + "cliui": { + "version": "7.0.4", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "color-convert": { + "version": "1.9.3", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3" + }, + "concat-map": { + "version": "0.0.1" + }, + "content-disposition": { + "version": "0.5.4", + "requires": { + "safe-buffer": "5.2.1" + } + }, + "content-type": { + "version": "1.0.4" + }, + "convert-source-map": { + "version": "1.8.0", + "requires": { + "safe-buffer": "~5.1.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2" + } + } + }, + "cookie": { + "version": "0.5.0" + }, + "cookie-signature": { + "version": "1.0.6" + }, + "cross-spawn": { + "version": "7.0.3", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "csstype": { + "version": "3.1.0" + }, + "data-urls": { + "version": "3.0.2", + "requires": { + "abab": "^2.0.6", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0" + } + }, + "debounce": { + "version": "1.2.1" + }, + "debug": { + "version": "2.6.9", + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "4.0.0" + }, + "deep-is": { + "version": "0.1.4", + "dev": true + }, + "define-properties": { + "version": "1.1.4", + "dev": true, + "requires": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "depd": { + "version": "2.0.0" + }, + "destroy": { + "version": "1.2.0" + }, + "diff": { + "version": "5.0.0" + }, + "doctrine": { + "version": "3.0.0", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "dotenv": { + "version": "8.6.0" + }, + "ee-first": { + "version": "1.1.1" + }, + "electron-to-chromium": { + "version": "1.4.211" + }, + "elliptic": { + "version": "6.5.4", + "requires": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0" + } + } + }, + "emoji-regex": { + "version": "8.0.0" + }, + "encodeurl": { + "version": "1.0.2" + }, + "encoding": { + "version": "0.1.13", + "optional": true, + "peer": true, + "requires": { + "iconv-lite": "^0.6.2" + }, + "dependencies": { + "iconv-lite": { + "version": "0.6.3", + "optional": true, + "peer": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } + }, + "encoding-japanese": { + "version": "1.0.30" + }, + "enquirer": { + "version": "2.3.6", + "dev": true, + "requires": { + "ansi-colors": "^4.1.1" + } + }, + "es-abstract": { + "version": "1.20.1", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "regexp.prototype.flags": "^1.4.3", + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" + } + }, + "es-shim-unscopables": { + "version": "1.0.0", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "esbuild": { + "version": "0.14.49", + "dev": true, + "requires": { + "esbuild-android-64": "0.14.49", + "esbuild-android-arm64": "0.14.49", + "esbuild-darwin-64": "0.14.49", + "esbuild-darwin-arm64": "0.14.49", + "esbuild-freebsd-64": "0.14.49", + "esbuild-freebsd-arm64": "0.14.49", + "esbuild-linux-32": "0.14.49", + "esbuild-linux-64": "0.14.49", + "esbuild-linux-arm": "0.14.49", + "esbuild-linux-arm64": "0.14.49", + "esbuild-linux-mips64le": "0.14.49", + "esbuild-linux-ppc64le": "0.14.49", + "esbuild-linux-riscv64": "0.14.49", + "esbuild-linux-s390x": "0.14.49", + "esbuild-netbsd-64": "0.14.49", + "esbuild-openbsd-64": "0.14.49", + "esbuild-sunos-64": "0.14.49", + "esbuild-windows-32": "0.14.49", + "esbuild-windows-64": "0.14.49", + "esbuild-windows-arm64": "0.14.49" + } + }, + "esbuild-linux-64": { + "version": "0.14.49", + "dev": true, + "optional": true + }, + "escalade": { + "version": "3.1.1" + }, + "escape-html": { + "version": "1.0.3" + }, + "escape-string-regexp": { + "version": "1.0.5" + }, + "eslint": { + "version": "7.32.0", + "dev": true, + "requires": { + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.3", + "@humanwhocodes/config-array": "^0.5.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.1.2", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.9", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.11", + "dev": true, + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "argparse": { + "version": "1.0.10", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + }, + "debug": { + "version": "4.3.4", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "escape-string-regexp": { + "version": "4.0.0", + "dev": true + }, + "globals": { + "version": "13.16.0", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "js-yaml": { + "version": "3.14.1", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "minimatch": { + "version": "3.1.2", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "ms": { + "version": "2.1.2", + "dev": true + }, + "semver": { + "version": "7.3.7", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "eslint-config-semistandard": { + "version": "15.0.1", + "dev": true, + "requires": {} + }, + "eslint-config-standard": { + "version": "14.1.1", + "dev": true, + "requires": {} + }, + "eslint-import-resolver-node": { + "version": "0.3.6", + "dev": true, + "requires": { + "debug": "^3.2.7", + "resolve": "^1.20.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.3", + "dev": true + } + } + }, + "eslint-module-utils": { + "version": "2.7.3", + "dev": true, + "requires": { + "debug": "^3.2.7", + "find-up": "^2.1.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "find-up": { + "version": "2.1.0", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "ms": { + "version": "2.1.3", + "dev": true + }, + "p-limit": { + "version": "1.3.0", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "path-exists": { + "version": "3.0.0", + "dev": true + } + } + }, + "eslint-plugin-es": { + "version": "3.0.1", + "dev": true, + "requires": { + "eslint-utils": "^2.0.0", + "regexpp": "^3.0.0" + } + }, + "eslint-plugin-import": { + "version": "2.26.0", + "dev": true, + "requires": { + "array-includes": "^3.1.4", + "array.prototype.flat": "^1.2.5", + "debug": "^2.6.9", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-module-utils": "^2.7.3", + "has": "^1.0.3", + "is-core-module": "^2.8.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.values": "^1.1.5", + "resolve": "^1.22.0", + "tsconfig-paths": "^3.14.1" + }, + "dependencies": { + "doctrine": { + "version": "2.1.0", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "minimatch": { + "version": "3.1.2", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "eslint-plugin-node": { + "version": "11.1.0", + "dev": true, + "requires": { + "eslint-plugin-es": "^3.0.0", + "eslint-utils": "^2.0.0", + "ignore": "^5.1.1", + "minimatch": "^3.0.4", + "resolve": "^1.10.1", + "semver": "^6.1.0" + }, + "dependencies": { + "ignore": { + "version": "5.2.0", + "dev": true + }, + "minimatch": { + "version": "3.1.2", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "eslint-plugin-promise": { + "version": "4.3.1", + "dev": true + }, + "eslint-plugin-standard": { + "version": "4.1.0", + "dev": true, + "requires": {} + }, + "eslint-scope": { + "version": "5.1.1", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "2.1.0", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "dev": true + } + } + }, + "eslint-visitor-keys": { + "version": "2.1.0", + "dev": true + }, + "espree": { + "version": "7.3.1", + "dev": true, + "requires": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "dev": true + } + } + }, + "esprima": { + "version": "4.0.1", + "dev": true + }, + "esquery": { + "version": "1.4.0", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "dev": true + }, + "estree-walker": { + "version": "2.0.2", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "dev": true + }, + "etag": { + "version": "1.8.1" + }, + "ethers": { + "version": "5.6.9", + "requires": { + "@ethersproject/abi": "5.6.4", + "@ethersproject/abstract-provider": "5.6.1", + "@ethersproject/abstract-signer": "5.6.2", + "@ethersproject/address": "5.6.1", + "@ethersproject/base64": "5.6.1", + "@ethersproject/basex": "5.6.1", + "@ethersproject/bignumber": "5.6.2", + "@ethersproject/bytes": "5.6.1", + "@ethersproject/constants": "5.6.1", + "@ethersproject/contracts": "5.6.2", + "@ethersproject/hash": "5.6.1", + "@ethersproject/hdnode": "5.6.2", + "@ethersproject/json-wallets": "5.6.1", + "@ethersproject/keccak256": "5.6.1", + "@ethersproject/logger": "5.6.0", + "@ethersproject/networks": "5.6.4", + "@ethersproject/pbkdf2": "5.6.1", + "@ethersproject/properties": "5.6.0", + "@ethersproject/providers": "5.6.8", + "@ethersproject/random": "5.6.1", + "@ethersproject/rlp": "5.6.1", + "@ethersproject/sha2": "5.6.1", + "@ethersproject/signing-key": "5.6.2", + "@ethersproject/solidity": "5.6.1", + "@ethersproject/strings": "5.6.1", + "@ethersproject/transactions": "5.6.2", + "@ethersproject/units": "5.6.1", + "@ethersproject/wallet": "5.6.2", + "@ethersproject/web": "5.6.1", + "@ethersproject/wordlists": "5.6.1" + } + }, + "express": { + "version": "4.18.1", + "requires": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.0", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.10.3", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + } + }, + "fast-deep-equal": { + "version": "3.1.3" + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "dev": true + }, + "file-entry-cache": { + "version": "6.0.1", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "finalhandler": { + "version": "1.2.0", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + } + }, + "find-up": { + "version": "5.0.0", + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "flat": { + "version": "5.0.2" + }, + "flat-cache": { + "version": "3.0.4", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.6", + "dev": true + }, + "follow-redirects": { + "version": "1.15.1" + }, + "forwarded": { + "version": "0.2.0" + }, + "fresh": { + "version": "0.5.2" + }, + "fs.realpath": { + "version": "1.0.0" + }, + "function-bind": { + "version": "1.1.1" + }, + "function.prototype.name": { + "version": "1.1.5", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + } + }, + "functional-red-black-tree": { + "version": "1.0.1", + "dev": true + }, + "functions-have-names": { + "version": "1.2.3", + "dev": true + }, + "gensync": { + "version": "1.0.0-beta.2" + }, + "get-caller-file": { + "version": "2.0.5" + }, + "get-intrinsic": { + "version": "1.1.2", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + }, + "get-symbol-description": { + "version": "1.0.0", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, + "glob": { + "version": "7.2.0", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "dependencies": { + "minimatch": { + "version": "3.1.2", + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "glob-parent": { + "version": "5.1.2", + "requires": { + "is-glob": "^4.0.1" + } + }, + "globals": { + "version": "11.12.0" + }, + "gpt-3-encoder": { + "version": "1.1.3" + }, + "growl": { + "version": "1.10.5" + }, + "has": { + "version": "1.0.3", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-bigints": { + "version": "1.0.2", + "dev": true + }, + "has-flag": { + "version": "3.0.0" + }, + "has-property-descriptors": { + "version": "1.0.0", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.1" + } + }, + "has-symbols": { + "version": "1.0.3" + }, + "has-tostringtag": { + "version": "1.0.0", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "hash.js": { + "version": "1.1.7", + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "he": { + "version": "1.2.0" + }, + "hmac-drbg": { + "version": "1.0.1", + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "http-errors": { + "version": "2.0.0", + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + } + }, + "iconv-lite": { + "version": "0.4.24", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore": { + "version": "4.0.6", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4" + }, + "internal-slot": { + "version": "1.0.3", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } + }, + "ipaddr.js": { + "version": "1.9.1" + }, + "is-bigint": { + "version": "1.0.4", + "dev": true, + "requires": { + "has-bigints": "^1.0.1" + } + }, + "is-binary-path": { + "version": "2.1.0", + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-boolean-object": { + "version": "1.1.2", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-callable": { + "version": "1.2.4", + "dev": true + }, + "is-core-module": { + "version": "2.9.0", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-date-object": { + "version": "1.0.5", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-extglob": { + "version": "2.1.1" + }, + "is-fullwidth-code-point": { + "version": "3.0.0" + }, + "is-glob": { + "version": "4.0.3", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-negative-zero": { + "version": "2.0.2", + "dev": true + }, + "is-number": { + "version": "7.0.0" + }, + "is-number-object": { + "version": "1.0.7", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-plain-obj": { + "version": "2.1.0" + }, + "is-regex": { + "version": "1.1.4", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-shared-array-buffer": { + "version": "1.0.2", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-string": { + "version": "1.0.7", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-symbol": { + "version": "1.0.4", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "is-unicode-supported": { + "version": "0.1.0" + }, + "is-weakref": { + "version": "1.0.2", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "isexe": { + "version": "2.0.0" + }, + "js-sha3": { + "version": "0.8.0" + }, + "js-tokens": { + "version": "4.0.0" + }, + "js-yaml": { + "version": "4.1.0", + "requires": { + "argparse": "^2.0.1" + } + }, + "jsesc": { + "version": "2.5.2" + }, + "json-6": { + "version": "1.1.4" + }, + "json-schema-traverse": { + "version": "0.4.1", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "dev": true + }, + "json5": { + "version": "2.2.1" + }, + "levn": { + "version": "0.4.1", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "locate-path": { + "version": "6.0.0", + "requires": { + "p-locate": "^5.0.0" + } + }, + "lodash.merge": { + "version": "4.6.2", + "dev": true + }, + "lodash.truncate": { + "version": "4.4.2", + "dev": true + }, + "log-symbols": { + "version": "4.1.0", + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4" + }, + "has-flag": { + "version": "4.0.0" + }, + "supports-color": { + "version": "7.2.0", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "loose-envify": { + "version": "1.4.0", + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "lru-cache": { + "version": "6.0.0", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "maxrects-packer": { + "version": "2.7.3" + }, + "media-typer": { + "version": "0.3.0" + }, + "merge-descriptors": { + "version": "1.0.1" + }, + "metaversefile": { + "version": "file:packages/totum", + "requires": { + "@babel/core": "^7.15.0", + "@babel/preset-react": "^7.14.5", + "data-urls": "^3.0.1", + "mime-types": "^2.1.32", + "node-fetch": "^2.6.1", + "pako": "^2.0.4", + "unix-path": "^0.2.0" + }, + "dependencies": { + "pako": { + "version": "2.0.4" + } + } + }, + "methods": { + "version": "1.1.2" + }, + "mime": { + "version": "1.6.0" + }, + "mime-db": { + "version": "1.52.0" + }, + "mime-types": { + "version": "2.1.35", + "requires": { + "mime-db": "1.52.0" + } + }, + "minimalistic-assert": { + "version": "1.0.1" + }, + "minimalistic-crypto-utils": { + "version": "1.0.1" + }, + "minimatch": { + "version": "4.2.1", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.6", + "dev": true + }, + "mocha": { + "version": "9.2.2", + "requires": { + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.3", + "debug": "4.3.3", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.2.0", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "4.2.1", + "ms": "2.1.3", + "nanoid": "3.3.1", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "which": "2.0.2", + "workerpool": "6.2.0", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "dependencies": { + "debug": { + "version": "4.3.3", + "requires": { + "ms": "2.1.2" + }, + "dependencies": { + "ms": { + "version": "2.1.2" + } + } + }, + "escape-string-regexp": { + "version": "4.0.0" + }, + "has-flag": { + "version": "4.0.0" + }, + "ms": { + "version": "2.1.3" + }, + "supports-color": { + "version": "8.1.1", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "ms": { + "version": "2.0.0" + }, + "nanoid": { + "version": "3.3.1" + }, + "natural-compare": { + "version": "1.4.0", + "dev": true + }, + "negotiator": { + "version": "0.6.3" + }, + "node-fetch": { + "version": "2.6.7", + "requires": { + "whatwg-url": "^5.0.0" + }, + "dependencies": { + "tr46": { + "version": "0.0.3" + }, + "webidl-conversions": { + "version": "3.0.1" + }, + "whatwg-url": { + "version": "5.0.0", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + } + } + }, + "node-releases": { + "version": "2.0.6" + }, + "normalize-path": { + "version": "3.0.0" + }, + "object-assign": { + "version": "4.1.1" + }, + "object-inspect": { + "version": "1.12.2" + }, + "object-keys": { + "version": "1.1.1", + "dev": true + }, + "object.assign": { + "version": "4.1.2", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + }, + "object.values": { + "version": "1.1.5", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + } + }, + "on-finished": { + "version": "2.4.1", + "requires": { + "ee-first": "1.1.1" + } + }, + "once": { + "version": "1.4.0", + "requires": { + "wrappy": "1" + } + }, + "openai-api": { + "version": "1.3.1", + "requires": { + "axios": "^0.21.1", + "dotenv": "^8.2.0" + } + }, + "optionator": { + "version": "0.9.1", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "p-limit": { + "version": "3.1.0", + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "requires": { + "p-limit": "^3.0.2" + } + }, + "p-try": { + "version": "1.0.0", + "dev": true + }, + "parent-module": { + "version": "1.0.1", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "parseurl": { + "version": "1.3.3" + }, + "path-exists": { + "version": "4.0.0" + }, + "path-is-absolute": { + "version": "1.0.1" + }, + "path-key": { + "version": "3.1.1", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.7" + }, + "picocolors": { + "version": "1.0.0" + }, + "picomatch": { + "version": "2.3.1" + }, + "postcss": { + "version": "8.4.14", + "dev": true, + "requires": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "dependencies": { + "nanoid": { + "version": "3.3.4", + "dev": true + } + } + }, + "prelude-ls": { + "version": "1.2.1", + "dev": true + }, + "progress": { + "version": "2.0.3", + "dev": true + }, + "proxy-addr": { + "version": "2.0.7", + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + } + }, + "punycode": { + "version": "2.1.1" + }, + "qs": { + "version": "6.10.3", + "requires": { + "side-channel": "^1.0.4" + } + }, + "randombytes": { + "version": "2.1.0", + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "range-parser": { + "version": "1.2.1" + }, + "raw-body": { + "version": "2.5.1", + "requires": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "react": { + "version": "17.0.2", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "react-dom": { + "version": "17.0.2", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "scheduler": "^0.20.2" + } + }, + "react-merge-refs": { + "version": "1.1.0" + }, + "react-reconciler": { + "version": "0.26.2", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "scheduler": "^0.20.2" + } + }, + "react-refresh": { + "version": "0.10.0", + "dev": true + }, + "react-three-fiber": { + "version": "0.0.0-deprecated" + }, + "react-use-measure": { + "version": "2.1.1", + "requires": { + "debounce": "^1.2.1" + } + }, + "readdirp": { + "version": "3.6.0", + "requires": { + "picomatch": "^2.2.1" + } + }, + "regenerator-runtime": { + "version": "0.13.9" + }, + "regexp.prototype.flags": { + "version": "1.4.3", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + } + }, + "regexpp": { + "version": "3.2.0", + "dev": true + }, + "require-directory": { + "version": "2.1.1" + }, + "require-from-string": { + "version": "2.0.2" + }, + "resize-observer-polyfill": { + "version": "1.5.1" + }, + "resolve": { + "version": "1.22.1", + "dev": true, + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-from": { + "version": "4.0.0", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "rollup": { + "version": "2.76.0", + "dev": true, + "requires": { + "fsevents": "~2.3.2" + } + }, + "safe-buffer": { + "version": "5.2.1" + }, + "safer-buffer": { + "version": "2.1.2" + }, + "scheduler": { + "version": "0.20.2", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "scrypt-js": { + "version": "3.0.1" + }, + "semver": { + "version": "6.3.0" + }, + "send": { + "version": "0.18.0", + "requires": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "dependencies": { + "ms": { + "version": "2.1.3" + } + } + }, + "serialize-javascript": { + "version": "6.0.0", + "requires": { + "randombytes": "^2.1.0" + } + }, + "serve-static": { + "version": "1.15.0", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + } + }, + "setprototypeof": { + "version": "1.2.0" + }, + "shebang-command": { + "version": "2.0.0", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "dev": true + }, + "side-channel": { + "version": "1.0.4", + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "slice-ansi": { + "version": "4.0.0", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + } + } + }, + "smile2emoji": { + "version": "1.1.6" + }, + "source-map-js": { + "version": "1.0.2", + "dev": true + }, + "sprintf-js": { + "version": "1.0.3", + "dev": true + }, + "stats.js": { + "version": "0.17.0" + }, + "statuses": { + "version": "2.0.1" + }, + "string-width": { + "version": "4.2.3", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "string.prototype.trimend": { + "version": "1.0.5", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + } + }, + "string.prototype.trimstart": { + "version": "1.0.5", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + } + }, + "strip-ansi": { + "version": "6.0.1", + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-bom": { + "version": "3.0.0", + "dev": true + }, + "strip-json-comments": { + "version": "3.1.1" + }, + "supports-color": { + "version": "5.5.0", + "requires": { + "has-flag": "^3.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "dev": true + }, + "table": { + "version": "6.8.0", + "dev": true, + "requires": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "dependencies": { + "ajv": { + "version": "8.11.0", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "dev": true + } + } + }, + "text-table": { + "version": "0.2.0", + "dev": true + }, + "three": { + "version": "file:packages/three", + "requires": { + "@babel/core": "^7.18.6", + "@babel/eslint-parser": "^7.18.2", + "@babel/plugin-proposal-class-properties": "^7.18.6", + "@babel/preset-env": "^7.18.6", + "@rollup/plugin-babel": "^5.3.1", + "@rollup/plugin-node-resolve": "^13.3.0", + "chalk": "^5.0.1", + "concurrently": "^7.2.2", + "eslint": "^8.18.0", + "eslint-config-mdcs": "^5.0.0", + "eslint-plugin-compat": "^4.0.2", + "eslint-plugin-html": "^6.2.0", + "eslint-plugin-import": "^2.26.0", + "rollup": "^2.75.7", + "rollup-plugin-filesize": "^9.1.2", + "rollup-plugin-terser": "^7.0.2", + "rollup-plugin-visualizer": "^5.6.0", + "servez": "^1.14.1" + }, + "dependencies": { + "@ampproject/remapping": { + "version": "2.2.0", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@babel/code-frame": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/highlight": "^7.18.6" + } + }, + "@babel/compat-data": { + "version": "7.18.6", + "dev": true + }, + "@babel/core": { + "version": "7.18.6", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.18.6", + "@babel/helper-compilation-targets": "^7.18.6", + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helpers": "^7.18.6", + "@babel/parser": "^7.18.6", + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.6", + "@babel/types": "^7.18.6", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" + } + }, + "@babel/eslint-parser": { + "version": "7.18.2", + "dev": true, + "requires": { + "eslint-scope": "^5.1.1", + "eslint-visitor-keys": "^2.1.0", + "semver": "^6.3.0" + } + }, + "@babel/generator": { + "version": "7.18.7", + "dev": true, + "requires": { + "@babel/types": "^7.18.7", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + }, + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + } + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-explode-assignable-expression": "^7.18.6", + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/compat-data": "^7.18.6", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.20.2", + "semver": "^6.3.0" + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.6", + "@babel/helper-function-name": "^7.18.6", + "@babel/helper-member-expression-to-functions": "^7.18.6", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6" + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "regexpu-core": "^5.1.0" + } + }, + "@babel/helper-define-polyfill-provider": { + "version": "0.3.1", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.13.0", + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/traverse": "^7.13.0", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + } + }, + "@babel/helper-environment-visitor": { + "version": "7.18.6", + "dev": true + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-function-name": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/template": "^7.18.6", + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-module-imports": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-module-transforms": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.18.6", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.18.6", + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.6", + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.18.6", + "dev": true + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.6", + "@babel/helper-wrap-function": "^7.18.6", + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-replace-supers": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.18.6", + "@babel/helper-member-expression-to-functions": "^7.18.6", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/traverse": "^7.18.6", + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-simple-access": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.18.6", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.18.6", + "dev": true + }, + "@babel/helper-wrap-function": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.18.6", + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.6", + "@babel/types": "^7.18.6" + } + }, + "@babel/helpers": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.6", + "@babel/types": "^7.18.6" + } + }, + "@babel/highlight": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@babel/parser": { + "version": "7.18.6", + "dev": true + }, + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.6", + "@babel/plugin-proposal-optional-chaining": "^7.18.6" + } + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-remap-async-to-generator": "^7.18.6", + "@babel/plugin-syntax-async-generators": "^7.8.4" + } + }, + "@babel/plugin-proposal-class-properties": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-proposal-class-static-block": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + } + }, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + } + }, + "@babel/plugin-proposal-export-namespace-from": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + } + }, + "@babel/plugin-proposal-json-strings": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-json-strings": "^7.8.3" + } + }, + "@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + } + }, + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + } + }, + "@babel/plugin-proposal-numeric-separator": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/compat-data": "^7.18.6", + "@babel/helper-compilation-targets": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.18.6" + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + } + }, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.6", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + } + }, + "@babel/plugin-proposal-private-methods": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-syntax-import-assertions": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-remap-async-to-generator": "^7.18.6" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.6", + "@babel/helper-function-name": "^7.18.6", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.18.6", + "@babel/helper-function-name": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-simple-access": "^7.18.6", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-validator-identifier": "^7.18.6", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.6" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "regenerator-transform": "^0.15.0" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.6" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/preset-env": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/compat-data": "^7.18.6", + "@babel/helper-compilation-targets": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.6", + "@babel/plugin-proposal-async-generator-functions": "^7.18.6", + "@babel/plugin-proposal-class-properties": "^7.18.6", + "@babel/plugin-proposal-class-static-block": "^7.18.6", + "@babel/plugin-proposal-dynamic-import": "^7.18.6", + "@babel/plugin-proposal-export-namespace-from": "^7.18.6", + "@babel/plugin-proposal-json-strings": "^7.18.6", + "@babel/plugin-proposal-logical-assignment-operators": "^7.18.6", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", + "@babel/plugin-proposal-numeric-separator": "^7.18.6", + "@babel/plugin-proposal-object-rest-spread": "^7.18.6", + "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", + "@babel/plugin-proposal-optional-chaining": "^7.18.6", + "@babel/plugin-proposal-private-methods": "^7.18.6", + "@babel/plugin-proposal-private-property-in-object": "^7.18.6", + "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.18.6", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.18.6", + "@babel/plugin-transform-async-to-generator": "^7.18.6", + "@babel/plugin-transform-block-scoped-functions": "^7.18.6", + "@babel/plugin-transform-block-scoping": "^7.18.6", + "@babel/plugin-transform-classes": "^7.18.6", + "@babel/plugin-transform-computed-properties": "^7.18.6", + "@babel/plugin-transform-destructuring": "^7.18.6", + "@babel/plugin-transform-dotall-regex": "^7.18.6", + "@babel/plugin-transform-duplicate-keys": "^7.18.6", + "@babel/plugin-transform-exponentiation-operator": "^7.18.6", + "@babel/plugin-transform-for-of": "^7.18.6", + "@babel/plugin-transform-function-name": "^7.18.6", + "@babel/plugin-transform-literals": "^7.18.6", + "@babel/plugin-transform-member-expression-literals": "^7.18.6", + "@babel/plugin-transform-modules-amd": "^7.18.6", + "@babel/plugin-transform-modules-commonjs": "^7.18.6", + "@babel/plugin-transform-modules-systemjs": "^7.18.6", + "@babel/plugin-transform-modules-umd": "^7.18.6", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.18.6", + "@babel/plugin-transform-new-target": "^7.18.6", + "@babel/plugin-transform-object-super": "^7.18.6", + "@babel/plugin-transform-parameters": "^7.18.6", + "@babel/plugin-transform-property-literals": "^7.18.6", + "@babel/plugin-transform-regenerator": "^7.18.6", + "@babel/plugin-transform-reserved-words": "^7.18.6", + "@babel/plugin-transform-shorthand-properties": "^7.18.6", + "@babel/plugin-transform-spread": "^7.18.6", + "@babel/plugin-transform-sticky-regex": "^7.18.6", + "@babel/plugin-transform-template-literals": "^7.18.6", + "@babel/plugin-transform-typeof-symbol": "^7.18.6", + "@babel/plugin-transform-unicode-escapes": "^7.18.6", + "@babel/plugin-transform-unicode-regex": "^7.18.6", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.18.6", + "babel-plugin-polyfill-corejs2": "^0.3.1", + "babel-plugin-polyfill-corejs3": "^0.5.2", + "babel-plugin-polyfill-regenerator": "^0.3.1", + "core-js-compat": "^3.22.1", + "semver": "^6.3.0" + } + }, + "@babel/preset-modules": { + "version": "0.1.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, + "@babel/runtime": { + "version": "7.18.3", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/template": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.6", + "@babel/types": "^7.18.6" + } + }, + "@babel/traverse": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.6", + "@babel/helper-function-name": "^7.18.6", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.18.6", + "@babel/types": "^7.18.6", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.18.7", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.18.6", + "to-fast-properties": "^2.0.0" + } + }, + "@eslint/eslintrc": { + "version": "1.3.0", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.3.2", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "globals": { + "version": "13.15.0", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + } + } + }, + "@gar/promisify": { + "version": "1.1.3", + "dev": true + }, + "@humanwhocodes/config-array": { + "version": "0.9.5", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + } + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "dev": true + }, + "@jridgewell/gen-mapping": { + "version": "0.1.1", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.0.7", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.1.1", + "dev": true + }, + "@jridgewell/source-map": { + "version": "0.3.2", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.3.1", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + } + } + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.13", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.13", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@mdn/browser-compat-data": { + "version": "4.2.1", + "dev": true + }, + "@npmcli/fs": { + "version": "1.1.1", + "dev": true, + "requires": { + "@gar/promisify": "^1.0.1", + "semver": "^7.3.5" + }, + "dependencies": { + "semver": { + "version": "7.3.7", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@npmcli/git": { + "version": "2.1.0", + "dev": true, + "requires": { + "@npmcli/promise-spawn": "^1.3.2", + "lru-cache": "^6.0.0", + "mkdirp": "^1.0.4", + "npm-pick-manifest": "^6.1.1", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^2.0.2" + }, + "dependencies": { + "semver": { + "version": "7.3.7", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@npmcli/installed-package-contents": { + "version": "1.0.7", + "dev": true, + "requires": { + "npm-bundled": "^1.1.1", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "@npmcli/move-file": { + "version": "1.1.2", + "dev": true, + "requires": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + } + }, + "@npmcli/node-gyp": { + "version": "1.0.3", + "dev": true + }, + "@npmcli/promise-spawn": { + "version": "1.3.2", + "dev": true, + "requires": { + "infer-owner": "^1.0.4" + } + }, + "@npmcli/run-script": { + "version": "1.8.6", + "dev": true, + "requires": { + "@npmcli/node-gyp": "^1.0.2", + "@npmcli/promise-spawn": "^1.3.2", + "node-gyp": "^7.1.0", + "read-package-json-fast": "^2.0.1" + } + }, + "@rollup/plugin-babel": { + "version": "5.3.1", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.10.4", + "@rollup/pluginutils": "^3.1.0" + } + }, + "@rollup/plugin-node-resolve": { + "version": "13.3.0", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "deepmerge": "^4.2.2", + "is-builtin-module": "^3.1.0", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + } + }, + "@rollup/pluginutils": { + "version": "3.1.0", + "dev": true, + "requires": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + } + }, + "@tootallnate/once": { + "version": "1.1.2", + "dev": true + }, + "@types/estree": { + "version": "0.0.39", + "dev": true + }, + "@types/json5": { + "version": "0.0.29", + "dev": true + }, + "@types/node": { + "version": "18.0.0", + "dev": true + }, + "@types/resolve": { + "version": "1.17.1", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "abbrev": { + "version": "1.1.1", + "dev": true + }, + "accepts": { + "version": "1.3.8", + "dev": true, + "requires": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + } + }, + "acorn": { + "version": "8.7.1", + "dev": true + }, + "acorn-jsx": { + "version": "5.3.2", + "dev": true, + "requires": {} + }, + "agent-base": { + "version": "6.0.2", + "dev": true, + "requires": { + "debug": "4" + } + }, + "agentkeepalive": { + "version": "4.2.1", + "dev": true, + "requires": { + "debug": "^4.1.0", + "depd": "^1.1.2", + "humanize-ms": "^1.2.1" + } + }, + "aggregate-error": { + "version": "3.1.0", + "dev": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "ajv": { + "version": "6.12.6", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-align": { + "version": "3.0.1", + "dev": true, + "requires": { + "string-width": "^4.1.0" + } + }, + "ansi-colors": { + "version": "4.1.3", + "dev": true + }, + "ansi-regex": { + "version": "5.0.1", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "aproba": { + "version": "1.2.0", + "dev": true + }, + "are-we-there-yet": { + "version": "1.1.7", + "dev": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "argparse": { + "version": "2.0.1", + "dev": true + }, + "array-flatten": { + "version": "1.1.1", + "dev": true + }, + "array-includes": { + "version": "3.1.5", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5", + "get-intrinsic": "^1.1.1", + "is-string": "^1.0.7" + } + }, + "array.prototype.flat": { + "version": "1.3.0", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.2", + "es-shim-unscopables": "^1.0.0" + } + }, + "asn1": { + "version": "0.2.6", + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert-plus": { + "version": "1.0.0", + "dev": true + }, + "ast-metadata-inferer": { + "version": "0.7.0", + "dev": true, + "requires": { + "@mdn/browser-compat-data": "^3.3.14" + }, + "dependencies": { + "@mdn/browser-compat-data": { + "version": "3.3.14", + "dev": true + } + } + }, + "asynckit": { + "version": "0.4.0", + "dev": true + }, + "aws-sign2": { + "version": "0.7.0", + "dev": true + }, + "aws4": { + "version": "1.11.0", + "dev": true + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "dev": true, + "requires": { + "object.assign": "^4.1.0" + } + }, + "babel-plugin-polyfill-corejs2": { + "version": "0.3.1", + "dev": true, + "requires": { + "@babel/compat-data": "^7.13.11", + "@babel/helper-define-polyfill-provider": "^0.3.1", + "semver": "^6.1.1" + } + }, + "babel-plugin-polyfill-corejs3": { + "version": "0.5.2", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.3.1", + "core-js-compat": "^3.21.0" + } + }, + "babel-plugin-polyfill-regenerator": { + "version": "0.3.1", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.3.1" + } + }, + "balanced-match": { + "version": "1.0.2", + "dev": true + }, + "basic-auth": { + "version": "2.0.1", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } + }, + "batch": { + "version": "0.6.1", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "dev": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "body-parser": { + "version": "1.20.0", + "dev": true, + "requires": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.10.3", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "depd": { + "version": "2.0.0", + "dev": true + }, + "iconv-lite": { + "version": "0.4.24", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ms": { + "version": "2.0.0", + "dev": true + }, + "qs": { + "version": "6.10.3", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + } + } + }, + "boxen": { + "version": "5.1.2", + "dev": true, + "requires": { + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.2", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "brace-expansion": { + "version": "1.1.11", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "brotli-size": { + "version": "4.0.0", + "dev": true, + "requires": { + "duplexer": "0.1.1" + } + }, + "browserslist": { + "version": "4.20.4", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001349", + "electron-to-chromium": "^1.4.147", + "escalade": "^3.1.1", + "node-releases": "^2.0.5", + "picocolors": "^1.0.0" + } + }, + "buffer-from": { + "version": "1.1.2", + "dev": true + }, + "builtin-modules": { + "version": "3.3.0", + "dev": true + }, + "builtins": { + "version": "1.0.3", + "dev": true + }, + "bytes": { + "version": "3.1.2", + "dev": true + }, + "cacache": { + "version": "15.3.0", + "dev": true, + "requires": { + "@npmcli/fs": "^1.0.0", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + } + }, + "call-bind": { + "version": "1.0.2", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "callsites": { + "version": "3.1.0", + "dev": true + }, + "camelcase": { + "version": "6.3.0", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30001357", + "dev": true + }, + "caseless": { + "version": "0.12.0", + "dev": true + }, + "chalk": { + "version": "5.0.1", + "dev": true + }, + "chownr": { + "version": "2.0.0", + "dev": true + }, + "clean-stack": { + "version": "2.2.0", + "dev": true + }, + "cli-boxes": { + "version": "2.2.1", + "dev": true + }, + "cliui": { + "version": "7.0.4", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "code-point-at": { + "version": "1.1.0", + "dev": true + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + }, + "color-support": { + "version": "1.1.3", + "dev": true + }, + "colors": { + "version": "1.4.0", + "dev": true + }, + "combined-stream": { + "version": "1.0.8", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "2.20.3", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "dev": true + }, + "concurrently": { + "version": "7.2.2", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "date-fns": "^2.16.1", + "lodash": "^4.17.21", + "rxjs": "^7.0.0", + "shell-quote": "^1.7.3", + "spawn-command": "^0.0.2-1", + "supports-color": "^8.1.0", + "tree-kill": "^1.2.2", + "yargs": "^17.3.1" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + } + } + }, + "console-control-strings": { + "version": "1.1.0", + "dev": true + }, + "content-disposition": { + "version": "0.5.4", + "dev": true, + "requires": { + "safe-buffer": "5.2.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "dev": true + } + } + }, + "content-type": { + "version": "1.0.4", + "dev": true + }, + "convert-source-map": { + "version": "1.8.0", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "cookie": { + "version": "0.5.0", + "dev": true + }, + "cookie-signature": { + "version": "1.0.6", + "dev": true + }, + "core-js": { + "version": "3.23.2", + "dev": true + }, + "core-js-compat": { + "version": "3.23.2", + "dev": true, + "requires": { + "browserslist": "^4.20.4", + "semver": "7.0.0" + }, + "dependencies": { + "semver": { + "version": "7.0.0", + "dev": true + } + } + }, + "core-util-is": { + "version": "1.0.3", + "dev": true + }, + "cors": { + "version": "2.8.5", + "dev": true, + "requires": { + "object-assign": "^4", + "vary": "^1" + } + }, + "cross-spawn": { + "version": "7.0.3", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "dashdash": { + "version": "1.14.1", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "date-fns": { + "version": "2.28.0", + "dev": true + }, + "debug": { + "version": "4.3.4", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "deep-is": { + "version": "0.1.4", + "dev": true + }, + "deepmerge": { + "version": "4.2.2", + "dev": true + }, + "define-lazy-prop": { + "version": "2.0.0", + "dev": true + }, + "define-properties": { + "version": "1.1.4", + "dev": true, + "requires": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "delayed-stream": { + "version": "1.0.0", + "dev": true + }, + "delegates": { + "version": "1.0.0", + "dev": true + }, + "depd": { + "version": "1.1.2", + "dev": true + }, + "destroy": { + "version": "1.2.0", + "dev": true + }, + "doctrine": { + "version": "3.0.0", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "dom-serializer": { + "version": "1.4.1", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "dependencies": { + "entities": { + "version": "2.2.0", + "dev": true + } + } + }, + "domelementtype": { + "version": "2.3.0", + "dev": true + }, + "domhandler": { + "version": "4.3.1", + "dev": true, + "requires": { + "domelementtype": "^2.2.0" + } + }, + "domutils": { + "version": "2.8.0", + "dev": true, + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, + "duplexer": { + "version": "0.1.1", + "dev": true + }, + "ecc-jsbn": { + "version": "0.1.2", + "dev": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "ee-first": { + "version": "1.1.1", + "dev": true + }, + "electron-to-chromium": { + "version": "1.4.163", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "dev": true + }, + "encoding": { + "version": "0.1.13", + "dev": true, + "optional": true, + "requires": { + "iconv-lite": "^0.6.2" + } + }, + "entities": { + "version": "3.0.1", + "dev": true + }, + "env-paths": { + "version": "2.2.1", + "dev": true + }, + "err-code": { + "version": "2.0.3", + "dev": true + }, + "es-abstract": { + "version": "1.20.1", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "regexp.prototype.flags": "^1.4.3", + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" + } + }, + "es-shim-unscopables": { + "version": "1.0.0", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "escalade": { + "version": "3.1.1", + "dev": true + }, + "escape-html": { + "version": "1.0.3", + "dev": true + }, + "escape-string-regexp": { + "version": "4.0.0", + "dev": true + }, + "eslint": { + "version": "8.18.0", + "dev": true, + "requires": { + "@eslint/eslintrc": "^1.3.0", + "@humanwhocodes/config-array": "^0.9.2", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.2", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "eslint-scope": { + "version": "7.1.1", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "eslint-visitor-keys": { + "version": "3.3.0", + "dev": true + }, + "estraverse": { + "version": "5.3.0", + "dev": true + }, + "globals": { + "version": "13.15.0", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "eslint-config-mdcs": { + "version": "5.0.0", + "dev": true + }, + "eslint-import-resolver-node": { + "version": "0.3.6", + "dev": true, + "requires": { + "debug": "^3.2.7", + "resolve": "^1.20.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "eslint-module-utils": { + "version": "2.7.3", + "dev": true, + "requires": { + "debug": "^3.2.7", + "find-up": "^2.1.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "find-up": { + "version": "2.1.0", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "path-exists": { + "version": "3.0.0", + "dev": true + } + } + }, + "eslint-plugin-compat": { + "version": "4.0.2", + "dev": true, + "requires": { + "@mdn/browser-compat-data": "^4.1.5", + "ast-metadata-inferer": "^0.7.0", + "browserslist": "^4.16.8", + "caniuse-lite": "^1.0.30001304", + "core-js": "^3.16.2", + "find-up": "^5.0.0", + "lodash.memoize": "4.1.2", + "semver": "7.3.5" + }, + "dependencies": { + "semver": { + "version": "7.3.5", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "eslint-plugin-html": { + "version": "6.2.0", + "dev": true, + "requires": { + "htmlparser2": "^7.1.2" + } + }, + "eslint-plugin-import": { + "version": "2.26.0", + "dev": true, + "requires": { + "array-includes": "^3.1.4", + "array.prototype.flat": "^1.2.5", + "debug": "^2.6.9", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-module-utils": "^2.7.3", + "has": "^1.0.3", + "is-core-module": "^2.8.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.values": "^1.1.5", + "resolve": "^1.22.0", + "tsconfig-paths": "^3.14.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "doctrine": { + "version": "2.1.0", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "ms": { + "version": "2.0.0", + "dev": true + } + } + }, + "eslint-scope": { + "version": "5.1.1", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "3.0.0", + "dev": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" + } + }, + "eslint-visitor-keys": { + "version": "2.1.0", + "dev": true + }, + "espree": { + "version": "9.3.2", + "dev": true, + "requires": { + "acorn": "^8.7.1", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "3.3.0", + "dev": true + } + } + }, + "esquery": { + "version": "1.4.0", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "dev": true + }, + "estree-walker": { + "version": "1.0.1", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "dev": true + }, + "etag": { + "version": "1.8.1", + "dev": true + }, + "express": { + "version": "4.18.1", + "dev": true, + "requires": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.0", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.10.3", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "depd": { + "version": "2.0.0", + "dev": true + }, + "ms": { + "version": "2.0.0", + "dev": true + }, + "qs": { + "version": "6.10.3", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + }, + "safe-buffer": { + "version": "5.2.1", + "dev": true + } + } + }, + "extend": { + "version": "3.0.2", + "dev": true + }, + "extsprintf": { + "version": "1.3.0", + "dev": true + }, + "fast-deep-equal": { + "version": "3.1.3", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "dev": true + }, + "file-entry-cache": { + "version": "6.0.1", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "filesize": { + "version": "6.4.0", + "dev": true + }, + "finalhandler": { + "version": "1.2.0", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "dev": true + } + } + }, + "find-up": { + "version": "5.0.0", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "flat-cache": { + "version": "3.0.4", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.5", + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "dev": true + }, + "form-data": { + "version": "2.3.3", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "forwarded": { + "version": "0.2.0", + "dev": true + }, + "fresh": { + "version": "0.5.2", + "dev": true + }, + "fs-minipass": { + "version": "2.1.0", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "dev": true + }, + "function-bind": { + "version": "1.1.1", + "dev": true + }, + "function.prototype.name": { + "version": "1.1.5", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + } + }, + "functional-red-black-tree": { + "version": "1.0.1", + "dev": true + }, + "functions-have-names": { + "version": "1.2.3", + "dev": true + }, + "gauge": { + "version": "2.7.4", + "dev": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "gensync": { + "version": "1.0.0-beta.2", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "dev": true + }, + "get-intrinsic": { + "version": "1.1.2", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + }, + "get-symbol-description": { + "version": "1.0.0", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, + "getpass": { + "version": "0.1.7", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.2.3", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "6.0.2", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "globals": { + "version": "11.12.0", + "dev": true + }, + "graceful-fs": { + "version": "4.2.10", + "dev": true + }, + "gzip-size": { + "version": "6.0.0", + "dev": true, + "requires": { + "duplexer": "^0.1.2" + }, + "dependencies": { + "duplexer": { + "version": "0.1.2", + "dev": true + } + } + }, + "har-schema": { + "version": "2.0.0", + "dev": true + }, + "har-validator": { + "version": "5.1.5", + "dev": true, + "requires": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + } + }, + "has": { + "version": "1.0.3", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-bigints": { + "version": "1.0.2", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "has-property-descriptors": { + "version": "1.0.0", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.1" + } + }, + "has-symbols": { + "version": "1.0.3", + "dev": true + }, + "has-tostringtag": { + "version": "1.0.0", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "has-unicode": { + "version": "2.0.1", + "dev": true + }, + "hosted-git-info": { + "version": "4.1.0", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "htmlparser2": { + "version": "7.2.0", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.2", + "domutils": "^2.8.0", + "entities": "^3.0.1" + } + }, + "http-cache-semantics": { + "version": "4.1.0", + "dev": true + }, + "http-errors": { + "version": "2.0.0", + "dev": true, + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "dependencies": { + "depd": { + "version": "2.0.0", + "dev": true + } + } + }, + "http-proxy-agent": { + "version": "4.0.1", + "dev": true, + "requires": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + } + }, + "http-signature": { + "version": "1.2.0", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "https-proxy-agent": { + "version": "5.0.1", + "dev": true, + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "humanize-ms": { + "version": "1.2.1", + "dev": true, + "requires": { + "ms": "^2.0.0" + } + }, + "iconv-lite": { + "version": "0.6.3", + "dev": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + }, + "ignore": { + "version": "5.2.0", + "dev": true + }, + "ignore-walk": { + "version": "3.0.4", + "dev": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "import-fresh": { + "version": "3.3.0", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "dev": true + }, + "indent-string": { + "version": "4.0.0", + "dev": true + }, + "infer-owner": { + "version": "1.0.4", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "dev": true + }, + "internal-slot": { + "version": "1.0.3", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } + }, + "ip": { + "version": "1.1.8", + "dev": true + }, + "ipaddr.js": { + "version": "1.9.1", + "dev": true + }, + "is-bigint": { + "version": "1.0.4", + "dev": true, + "requires": { + "has-bigints": "^1.0.1" + } + }, + "is-boolean-object": { + "version": "1.1.2", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-builtin-module": { + "version": "3.1.0", + "dev": true, + "requires": { + "builtin-modules": "^3.0.0" + } + }, + "is-callable": { + "version": "1.2.4", + "dev": true + }, + "is-core-module": { + "version": "2.9.0", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-date-object": { + "version": "1.0.5", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-docker": { + "version": "2.2.1", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-lambda": { + "version": "1.0.1", + "dev": true + }, + "is-module": { + "version": "1.0.0", + "dev": true + }, + "is-negative-zero": { + "version": "2.0.2", + "dev": true + }, + "is-number-object": { + "version": "1.0.7", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-regex": { + "version": "1.1.4", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-shared-array-buffer": { + "version": "1.0.2", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-string": { + "version": "1.0.7", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-symbol": { + "version": "1.0.4", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "is-typedarray": { + "version": "1.0.0", + "dev": true + }, + "is-weakref": { + "version": "1.0.2", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-wsl": { + "version": "2.2.0", + "dev": true, + "requires": { + "is-docker": "^2.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "dev": true + }, + "jest-worker": { + "version": "26.6.2", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "dependencies": { + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "js-tokens": { + "version": "4.0.0", + "dev": true + }, + "js-yaml": { + "version": "4.1.0", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "jsbn": { + "version": "0.1.1", + "dev": true + }, + "jsesc": { + "version": "2.5.2", + "dev": true + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "dev": true + }, + "json-schema": { + "version": "0.4.0", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "dev": true + }, + "json5": { + "version": "2.2.1", + "dev": true + }, + "jsonparse": { + "version": "1.3.1", + "dev": true + }, + "jsprim": { + "version": "1.4.2", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + } + }, + "levn": { + "version": "0.4.1", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "locate-path": { + "version": "6.0.0", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "lodash": { + "version": "4.17.21", + "dev": true + }, + "lodash.debounce": { + "version": "4.0.8", + "dev": true + }, + "lodash.memoize": { + "version": "4.1.2", + "dev": true + }, + "lodash.merge": { + "version": "4.6.2", + "dev": true + }, + "lru-cache": { + "version": "6.0.0", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "make-fetch-happen": { + "version": "9.1.0", + "dev": true, + "requires": { + "agentkeepalive": "^4.1.3", + "cacache": "^15.2.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.2", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^6.0.0", + "ssri": "^8.0.0" + } + }, + "media-typer": { + "version": "0.3.0", + "dev": true + }, + "merge-descriptors": { + "version": "1.0.1", + "dev": true + }, + "merge-stream": { + "version": "2.0.0", + "dev": true + }, + "methods": { + "version": "1.1.2", + "dev": true + }, + "mime": { + "version": "1.6.0", + "dev": true + }, + "mime-db": { + "version": "1.52.0", + "dev": true + }, + "mime-types": { + "version": "2.1.35", + "dev": true, + "requires": { + "mime-db": "1.52.0" + } + }, + "minimatch": { + "version": "3.1.2", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.6", + "dev": true + }, + "minipass": { + "version": "3.3.3", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "minipass-collect": { + "version": "1.0.2", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-fetch": { + "version": "1.4.1", + "dev": true, + "requires": { + "encoding": "^0.1.12", + "minipass": "^3.1.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.0.0" + } + }, + "minipass-flush": { + "version": "1.0.5", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-json-stream": { + "version": "1.0.1", + "dev": true, + "requires": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + } + }, + "minipass-pipeline": { + "version": "1.2.4", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-sized": { + "version": "1.0.3", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minizlib": { + "version": "2.1.2", + "dev": true, + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + } + }, + "mkdirp": { + "version": "1.0.4", + "dev": true + }, + "ms": { + "version": "2.1.2", + "dev": true + }, + "nanoid": { + "version": "3.3.4", + "dev": true + }, + "natural-compare": { + "version": "1.4.0", + "dev": true + }, + "negotiator": { + "version": "0.6.3", + "dev": true + }, + "node-forge": { + "version": "1.3.1", + "dev": true + }, + "node-gyp": { + "version": "7.1.2", + "dev": true, + "requires": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.3", + "nopt": "^5.0.0", + "npmlog": "^4.1.2", + "request": "^2.88.2", + "rimraf": "^3.0.2", + "semver": "^7.3.2", + "tar": "^6.0.2", + "which": "^2.0.2" + }, + "dependencies": { + "semver": { + "version": "7.3.7", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "node-releases": { + "version": "2.0.5", + "dev": true + }, + "nopt": { + "version": "5.0.0", + "dev": true, + "requires": { + "abbrev": "1" + } + }, + "npm-bundled": { + "version": "1.1.2", + "dev": true, + "requires": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-install-checks": { + "version": "4.0.0", + "dev": true, + "requires": { + "semver": "^7.1.1" + }, + "dependencies": { + "semver": { + "version": "7.3.7", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "npm-normalize-package-bin": { + "version": "1.0.1", + "dev": true + }, + "npm-package-arg": { + "version": "8.1.5", + "dev": true, + "requires": { + "hosted-git-info": "^4.0.1", + "semver": "^7.3.4", + "validate-npm-package-name": "^3.0.0" + }, + "dependencies": { + "semver": { + "version": "7.3.7", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "npm-packlist": { + "version": "2.2.2", + "dev": true, + "requires": { + "glob": "^7.1.6", + "ignore-walk": "^3.0.3", + "npm-bundled": "^1.1.1", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-pick-manifest": { + "version": "6.1.1", + "dev": true, + "requires": { + "npm-install-checks": "^4.0.0", + "npm-normalize-package-bin": "^1.0.1", + "npm-package-arg": "^8.1.2", + "semver": "^7.3.4" + }, + "dependencies": { + "semver": { + "version": "7.3.7", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "npm-registry-fetch": { + "version": "11.0.0", + "dev": true, + "requires": { + "make-fetch-happen": "^9.0.1", + "minipass": "^3.1.3", + "minipass-fetch": "^1.3.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.0.0", + "npm-package-arg": "^8.0.0" + } + }, + "npmlog": { + "version": "4.1.2", + "dev": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "dev": true + }, + "oauth-sign": { + "version": "0.9.0", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "dev": true + }, + "object-inspect": { + "version": "1.12.2", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "dev": true + }, + "object.assign": { + "version": "4.1.2", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + }, + "object.values": { + "version": "1.1.5", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + } + }, + "on-finished": { + "version": "2.4.1", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "once": { + "version": "1.4.0", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "open": { + "version": "8.4.0", + "dev": true, + "requires": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + } + }, + "optionator": { + "version": "0.9.1", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "p-limit": { + "version": "3.1.0", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "p-map": { + "version": "4.0.0", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "p-try": { + "version": "1.0.0", + "dev": true + }, + "pacote": { + "version": "11.3.5", + "dev": true, + "requires": { + "@npmcli/git": "^2.1.0", + "@npmcli/installed-package-contents": "^1.0.6", + "@npmcli/promise-spawn": "^1.2.0", + "@npmcli/run-script": "^1.8.2", + "cacache": "^15.0.5", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "infer-owner": "^1.0.4", + "minipass": "^3.1.3", + "mkdirp": "^1.0.3", + "npm-package-arg": "^8.0.1", + "npm-packlist": "^2.1.4", + "npm-pick-manifest": "^6.0.0", + "npm-registry-fetch": "^11.0.0", + "promise-retry": "^2.0.1", + "read-package-json-fast": "^2.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.1.0" + } + }, + "parent-module": { + "version": "1.0.1", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "parseurl": { + "version": "1.3.3", + "dev": true + }, + "path-exists": { + "version": "4.0.0", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.7", + "dev": true + }, + "performance-now": { + "version": "2.1.0", + "dev": true + }, + "picocolors": { + "version": "1.0.0", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "dev": true + }, + "prelude-ls": { + "version": "1.2.1", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.1", + "dev": true + }, + "promise-inflight": { + "version": "1.0.1", + "dev": true + }, + "promise-retry": { + "version": "2.0.1", + "dev": true, + "requires": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + } + }, + "proxy-addr": { + "version": "2.0.7", + "dev": true, + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + } + }, + "psl": { + "version": "1.8.0", + "dev": true + }, + "punycode": { + "version": "2.1.1", + "dev": true + }, + "qs": { + "version": "6.5.3", + "dev": true + }, + "randombytes": { + "version": "2.1.0", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "range-parser": { + "version": "1.2.1", + "dev": true + }, + "raw-body": { + "version": "2.5.1", + "dev": true, + "requires": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.24", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + } + } + }, + "read-package-json-fast": { + "version": "2.0.3", + "dev": true, + "requires": { + "json-parse-even-better-errors": "^2.3.0", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "readable-stream": { + "version": "2.3.7", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "regenerate": { + "version": "1.4.2", + "dev": true + }, + "regenerate-unicode-properties": { + "version": "10.0.1", + "dev": true, + "requires": { + "regenerate": "^1.4.2" + } + }, + "regenerator-runtime": { + "version": "0.13.9", + "dev": true + }, + "regenerator-transform": { + "version": "0.15.0", + "dev": true, + "requires": { + "@babel/runtime": "^7.8.4" + } + }, + "regexp.prototype.flags": { + "version": "1.4.3", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + } + }, + "regexpp": { + "version": "3.2.0", + "dev": true + }, + "regexpu-core": { + "version": "5.1.0", + "dev": true, + "requires": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.0.1", + "regjsgen": "^0.6.0", + "regjsparser": "^0.8.2", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.0.0" + } + }, + "regjsgen": { + "version": "0.6.0", + "dev": true + }, + "regjsparser": { + "version": "0.8.4", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "dev": true + } + } + }, + "request": { + "version": "2.88.2", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + } + }, + "require-directory": { + "version": "2.1.1", + "dev": true + }, + "resolve": { + "version": "1.22.1", + "dev": true, + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-from": { + "version": "4.0.0", + "dev": true + }, + "retry": { + "version": "0.12.0", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "rollup": { + "version": "2.75.7", + "dev": true, + "requires": { + "fsevents": "~2.3.2" + } + }, + "rollup-plugin-filesize": { + "version": "9.1.2", + "dev": true, + "requires": { + "@babel/runtime": "^7.13.8", + "boxen": "^5.0.0", + "brotli-size": "4.0.0", + "colors": "1.4.0", + "filesize": "^6.1.0", + "gzip-size": "^6.0.0", + "pacote": "^11.2.7", + "terser": "^5.6.0" + } + }, + "rollup-plugin-terser": { + "version": "7.0.2", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "jest-worker": "^26.2.1", + "serialize-javascript": "^4.0.0", + "terser": "^5.0.0" + } + }, + "rollup-plugin-visualizer": { + "version": "5.6.0", + "dev": true, + "requires": { + "nanoid": "^3.1.32", + "open": "^8.4.0", + "source-map": "^0.7.3", + "yargs": "^17.3.1" + } + }, + "rxjs": { + "version": "7.5.5", + "dev": true, + "requires": { + "tslib": "^2.1.0" + } + }, + "safe-buffer": { + "version": "5.1.2", + "dev": true + }, + "safer-buffer": { + "version": "2.1.2", + "dev": true + }, + "secure-compare": { + "version": "3.0.1", + "dev": true + }, + "selfsigned": { + "version": "2.0.1", + "dev": true, + "requires": { + "node-forge": "^1" + } + }, + "semver": { + "version": "6.3.0", + "dev": true + }, + "send": { + "version": "0.18.0", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "dev": true, + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "dev": true + } + } + }, + "depd": { + "version": "2.0.0", + "dev": true + }, + "ms": { + "version": "2.1.3", + "dev": true + } + } + }, + "serialize-javascript": { + "version": "4.0.0", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "serve-index": { + "version": "1.9.1", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "http-errors": { + "version": "1.6.3", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "inherits": { + "version": "2.0.3", + "dev": true + }, + "ms": { + "version": "2.0.0", + "dev": true + }, + "setprototypeof": { + "version": "1.1.0", + "dev": true + }, + "statuses": { + "version": "1.5.0", + "dev": true + } + } + }, + "serve-static": { + "version": "1.15.0", + "dev": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + } + }, + "server-destroy": { + "version": "1.0.1", + "dev": true + }, + "servez": { + "version": "1.14.1", + "dev": true, + "requires": { + "ansi-colors": "^4.1.1", + "color-support": "^1.1.3", + "optionator": "^0.8.2", + "servez-lib": "^2.6.0" + }, + "dependencies": { + "levn": { + "version": "0.3.0", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "optionator": { + "version": "0.8.3", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "prelude-ls": { + "version": "1.1.2", + "dev": true + }, + "type-check": { + "version": "0.3.2", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + } + } + }, + "servez-lib": { + "version": "2.6.0", + "dev": true, + "requires": { + "basic-auth": "^2.0.1", + "cors": "^2.8.5", + "debug": "^4.3.4", + "express": "^4.17.3", + "secure-compare": "^3.0.1", + "selfsigned": "^2.0.1", + "serve-index": "^1.9.1", + "server-destroy": "^1.0.1" + } + }, + "set-blocking": { + "version": "2.0.0", + "dev": true + }, + "setprototypeof": { + "version": "1.2.0", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "dev": true + }, + "shell-quote": { + "version": "1.7.3", + "dev": true + }, + "side-channel": { + "version": "1.0.4", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "signal-exit": { + "version": "3.0.7", + "dev": true + }, + "smart-buffer": { + "version": "4.2.0", + "dev": true + }, + "socks": { + "version": "2.6.2", + "dev": true, + "requires": { + "ip": "^1.1.5", + "smart-buffer": "^4.2.0" + } + }, + "socks-proxy-agent": { + "version": "6.2.1", + "dev": true, + "requires": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + } + }, + "source-map": { + "version": "0.7.4", + "dev": true + }, + "source-map-support": { + "version": "0.5.21", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "dev": true + } + } + }, + "spawn-command": { + "version": "0.0.2-1", + "dev": true + }, + "sshpk": { + "version": "1.17.0", + "dev": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "ssri": { + "version": "8.0.1", + "dev": true, + "requires": { + "minipass": "^3.1.1" + } + }, + "statuses": { + "version": "2.0.1", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "string-width": { + "version": "4.2.3", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "string.prototype.trimend": { + "version": "1.0.5", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + } + }, + "string.prototype.trimstart": { + "version": "1.0.5", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + } + }, + "strip-ansi": { + "version": "6.0.1", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-bom": { + "version": "3.0.0", + "dev": true + }, + "strip-json-comments": { + "version": "3.1.1", + "dev": true + }, + "supports-color": { + "version": "8.1.1", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "dev": true + }, + "tar": { + "version": "6.1.11", "dev": true, "requires": { - "color-convert": "^2.0.1" + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" } }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "terser": { + "version": "5.14.2", "dev": true, "requires": { - "color-name": "~1.1.4" + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" } }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "text-table": { + "version": "0.2.0", "dev": true - } - } - }, - "smile2emoji": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/smile2emoji/-/smile2emoji-1.1.6.tgz", - "integrity": "sha512-l5RqlYuqVDUayBSs4tGjvmIrnnSzQZYHyxDdKrf50a8kPxhYritYH40f9AQ4UVR3/e9JZZT8PqOuD0oKhE2Psg==" - }, - "source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "dev": true - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - }, - "stats.js": { - "version": "0.17.0", - "resolved": "https://registry.npmjs.org/stats.js/-/stats.js-0.17.0.tgz", - "integrity": "sha512-hNKz8phvYLPEcRkeG1rsGmV5ChMjKDAWU7/OJJdDErPBNChQXxCo3WZurGpnWc6gZhAzEPFad1aVgyOANH1sMw==" - }, - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "string.prototype.trimend": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", - "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - } - }, - "string.prototype.trimstart": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", - "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true - }, - "table": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/table/-/table-6.8.0.tgz", - "integrity": "sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA==", - "dev": true, - "requires": { - "ajv": "^8.0.1", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - }, - "dependencies": { - "ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + }, + "to-fast-properties": { + "version": "2.0.0", + "dev": true + }, + "toidentifier": { + "version": "1.0.1", + "dev": true + }, + "tough-cookie": { + "version": "2.5.0", "dev": true, "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "psl": "^1.1.28", + "punycode": "^2.1.1" } }, - "json-schema-traverse": { + "tree-kill": { + "version": "1.2.2", + "dev": true + }, + "tsconfig-paths": { + "version": "3.14.1", + "dev": true, + "requires": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + } + } + }, + "tslib": { + "version": "2.4.0", + "dev": true + }, + "tunnel-agent": { + "version": "0.6.0", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "dev": true + }, + "type-check": { + "version": "0.4.0", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-fest": { + "version": "0.20.2", + "dev": true + }, + "type-is": { + "version": "1.6.18", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "unbox-primitive": { + "version": "1.0.2", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + } + }, + "unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "dev": true + }, + "unicode-match-property-ecmascript": { + "version": "2.0.0", + "dev": true, + "requires": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "2.0.0", + "dev": true + }, + "unicode-property-aliases-ecmascript": { + "version": "2.0.0", + "dev": true + }, + "unique-filename": { + "version": "1.1.1", + "dev": true, + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.2", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "unpipe": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true - } - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "three": { - "version": "file:packages/three", - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + }, + "uri-js": { + "version": "4.4.1", + "dev": true, "requires": { - "color-convert": "^2.0.1" + "punycode": "^2.1.0" } }, - "chalk": { - "version": "4.1.2", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "util-deprecate": { + "version": "1.0.2", + "dev": true + }, + "utils-merge": { + "version": "1.0.1", + "dev": true + }, + "uuid": { + "version": "3.4.0", + "dev": true + }, + "v8-compile-cache": { + "version": "2.3.0", + "dev": true + }, + "validate-npm-package-name": { + "version": "3.0.0", + "dev": true, "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "builtins": "^1.0.3" } }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "vary": { + "version": "1.1.2", + "dev": true + }, + "verror": { + "version": "1.10.0", + "dev": true, "requires": { - "color-name": "~1.1.4" + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + }, + "dependencies": { + "core-util-is": { + "version": "1.0.2", + "dev": true + } } }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "which": { + "version": "2.0.2", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } }, - "has-flag": { + "which-boxed-primitive": { + "version": "1.0.2", + "dev": true, + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, + "wide-align": { + "version": "1.1.5", + "dev": true, + "requires": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "widest-line": { + "version": "3.1.0", + "dev": true, + "requires": { + "string-width": "^4.0.0" + } + }, + "word-wrap": { + "version": "1.2.3", + "dev": true + }, + "wrap-ansi": { + "version": "7.0.0", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "dev": true + }, + "y18n": { + "version": "5.0.8", + "dev": true + }, + "yallist": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "dev": true }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "yargs": { + "version": "17.5.1", + "dev": true, "requires": { - "has-flag": "^4.0.0" + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.0.0" } + }, + "yargs-parser": { + "version": "21.0.1", + "dev": true + }, + "yocto-queue": { + "version": "0.1.0", + "dev": true } } }, "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==" + "version": "2.0.0" }, "to-regex-range": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "requires": { "is-number": "^7.0.0" } }, "toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" + "version": "1.0.1" }, "tr46": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", - "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", "requires": { "punycode": "^2.1.1" } }, "troika-three-text": { "version": "0.43.1-alpha.0", - "resolved": "https://registry.npmjs.org/troika-three-text/-/troika-three-text-0.43.1-alpha.0.tgz", - "integrity": "sha512-bayeycChrNM4HgpN6Y0GkuL1Ib9eCf0SOMfT0SH0msML5qpICjEdvTSqJUJYdmbv59gJlfAJ2bsnQrkr3IgyZw==", "requires": { "bidi-js": "^1.0.2", "troika-three-utils": "^0.43.0", @@ -3796,18 +41236,13 @@ }, "troika-three-utils": { "version": "0.43.0", - "resolved": "https://registry.npmjs.org/troika-three-utils/-/troika-three-utils-0.43.0.tgz", - "integrity": "sha512-UVc4jOob1VjrX0awA0dHxmHZ8yvgq8W/kmtihMnMeObm0HNOobPKAWm/N6o34/k/FPgOtUMDHYgkw+TG2RNouA==" + "requires": {} }, "troika-worker-utils": { - "version": "0.43.0", - "resolved": "https://registry.npmjs.org/troika-worker-utils/-/troika-worker-utils-0.43.0.tgz", - "integrity": "sha512-8YXWwfviJ1N/9+nuE5dT9RFttmDsIF8CP7d6rRsBBhH55il3fBqpFSuzTlOcdgC1yq8Hmhi6GgIl6eK4Zt+hTw==" + "version": "0.43.0" }, "tsconfig-paths": { "version": "3.14.1", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", - "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", "dev": true, "requires": { "@types/json5": "^0.0.29", @@ -3818,8 +41253,6 @@ "dependencies": { "json5": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", "dev": true, "requires": { "minimist": "^1.2.0" @@ -3829,8 +41262,6 @@ }, "type-check": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, "requires": { "prelude-ls": "^1.2.1" @@ -3838,14 +41269,10 @@ }, "type-fest": { "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true }, "type-is": { "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "requires": { "media-typer": "0.3.0", "mime-types": "~2.1.24" @@ -3853,8 +41280,6 @@ }, "unbox-primitive": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -3864,19 +41289,13 @@ } }, "unix-path": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/unix-path/-/unix-path-0.2.0.tgz", - "integrity": "sha512-x8ccHoiBE8Ykw4mpAqS49vXxaQrovLCyTunbhJgNhtDOpmIdlwnQuA8bHTnQWo+i64gJ4cIwOSn/ZVNAyaiBDQ==" + "version": "0.2.0" }, "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" + "version": "1.0.0" }, "update-browserslist-db": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.4.tgz", - "integrity": "sha512-jnmO2BEGUjsMOe/Fg9u0oczOe/ppIDZPebzccl1yDWGLFP16Pa1/RM5wEoKYPG2zstNcDuAStejyxsOuKINdGA==", + "version": "1.0.5", "requires": { "escalade": "^3.1.1", "picocolors": "^1.0.0" @@ -3884,8 +41303,6 @@ }, "uri-js": { "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, "requires": { "punycode": "^2.1.0" @@ -3893,37 +41310,25 @@ }, "use-asset": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/use-asset/-/use-asset-1.0.4.tgz", - "integrity": "sha512-7/hqDrWa0iMnCoET9W1T07EmD4Eg/Wmoj/X8TGBc++ECRK4m5yTsjP4O6s0yagbxfqIOuUkIxe2/sA+VR2GxZA==", "requires": { "fast-deep-equal": "^3.1.3" } }, "utility-types": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.10.0.tgz", - "integrity": "sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg==" + "version": "3.10.0" }, "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==" + "version": "1.0.1" }, "v8-compile-cache": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", "dev": true }, "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" + "version": "1.1.2" }, "vite": { "version": "2.9.14", - "resolved": "https://registry.npmjs.org/vite/-/vite-2.9.14.tgz", - "integrity": "sha512-P/UCjSpSMcE54r4mPak55hWAZPlyfS369svib/gpmz8/01L822lMPOJ/RYW6tLCe1RPvMvOsJ17erf55bKp4Hw==", "dev": true, "requires": { "esbuild": "^0.14.27", @@ -3934,24 +41339,16 @@ } }, "webidl-conversions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", - "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==" + "version": "7.0.0" }, "webm-writer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/webm-writer/-/webm-writer-1.0.0.tgz", - "integrity": "sha512-xafP4mzUqht03HBXP0Ov2YGsxfD08uncad9fQeshYwQXrcP6Z/4uxd1IUaGKqKigFPAgaD9xb6JEKA8SXLQMLA==" + "version": "1.0.0" }, "whatwg-mimetype": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", - "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==" + "version": "3.0.0" }, "whatwg-url": { "version": "11.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", - "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", "requires": { "tr46": "^3.0.0", "webidl-conversions": "^7.0.0" @@ -3959,16 +41356,12 @@ }, "which": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "requires": { "isexe": "^2.0.0" } }, "which-boxed-primitive": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", "dev": true, "requires": { "is-bigint": "^1.0.1", @@ -3980,19 +41373,13 @@ }, "word-wrap": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "dev": true }, "workerpool": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", - "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==" + "version": "6.2.0" }, "wrap-ansi": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "requires": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -4001,36 +41388,27 @@ "dependencies": { "ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "requires": { "color-convert": "^2.0.1" } }, "color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "requires": { "color-name": "~1.1.4" } }, "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "version": "1.1.4" } } }, "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + "version": "1.0.2" }, "ws": { "version": "7.4.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==" + "requires": {} }, "wsrtc": { "version": "file:packages/wsrtc", @@ -4041,37 +41419,26 @@ }, "dependencies": { "dotenv": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", - "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==" + "version": "10.0.0" }, "ws": { "version": "8.8.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.8.0.tgz", - "integrity": "sha512-JDAgSYQ1ksuwqfChJusw1LSJ8BizJ2e/vVu5Lxjq3YvNJNlROv1ui4i+c/kUUrPheBvQl4c5UbERhTwKa6QBJQ==" + "requires": {} } } }, "xhr2": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/xhr2/-/xhr2-0.2.1.tgz", - "integrity": "sha512-sID0rrVCqkVNUn8t6xuv9+6FViXjUVXq8H5rWOH2rz9fDNQEd4g0EA2XlcEdJXRz5BMEn4O1pJFdT+z4YHhoWw==" + "version": "0.2.1" }, "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" + "version": "5.0.8" }, "yallist": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, "yargs": { "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "requires": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -4083,14 +41450,10 @@ } }, "yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==" + "version": "20.2.4" }, "yargs-unparser": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", "requires": { "camelcase": "^6.0.0", "decamelize": "^4.0.0", @@ -4099,9 +41462,7 @@ } }, "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" + "version": "0.1.0" }, "zjs": { "version": "file:packages/zjs", @@ -4112,8 +41473,7 @@ }, "zustand": { "version": "3.7.2", - "resolved": "https://registry.npmjs.org/zustand/-/zustand-3.7.2.tgz", - "integrity": "sha512-PIJDIZKtokhof+9+60cpockVOq05sJzHCriyvaLBmEJixseQ1a5Kdov6fWZfWOu5SK9c+FhH1jU0tntLxRJYMA==" + "requires": {} } } } From 66c03b0097b8b9aedc3f3ed0f640ee82a692c32e Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Wed, 13 Apr 2022 15:16:25 -0400 Subject: [PATCH 027/125] Only merge BufferGeometry in avatar optimizer --- avatar-optimizer.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/avatar-optimizer.js b/avatar-optimizer.js index a6895ddba9..e3614b1c04 100644 --- a/avatar-optimizer.js +++ b/avatar-optimizer.js @@ -38,7 +38,7 @@ const _getMergeableObjects = model => { const mergeables = new Map(); model.traverse(o => { - if (o.isMesh) { + if (o.isMesh && o.geometry.type === 'BufferGeometry') { let type; if (o.isSkinnedMesh) { type = 'skinnedMesh'; From 396ea5eca1b04d6102a36a3e5058e3c33441fdce Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Wed, 13 Apr 2022 15:19:02 -0400 Subject: [PATCH 028/125] Avatar optimizer logging cleanup --- avatar-optimizer.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/avatar-optimizer.js b/avatar-optimizer.js index e3614b1c04..5217fe3270 100644 --- a/avatar-optimizer.js +++ b/avatar-optimizer.js @@ -34,8 +34,6 @@ class MorphAttributeLayout extends AttributeLayout { const _getMergeableObjects = model => { const renderer = getRenderer(); - console.log('got model', model); - const mergeables = new Map(); model.traverse(o => { if (o.isMesh && o.geometry.type === 'BufferGeometry') { @@ -99,8 +97,9 @@ const optimizeAvatarModel = (model, options = {}) => { const atlasTextures = !!(options.textures ?? true); const textureSize = options.textureSize ?? defaultTextureSize; + console.log('got model', model); const mergeables = _getMergeableObjects(model); - // console.log('got mergeables', mergeables); + console.log('got mergeables', mergeables); const _mergeMesh = (mergeable, mergeableIndex) => { const { From 111ac61899a7b01abfe3541208cbcb28508ca69c Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Wed, 13 Apr 2022 16:12:49 -0400 Subject: [PATCH 029/125] Avatar optimizer clamp uvs --- avatar-optimizer.js | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/avatar-optimizer.js b/avatar-optimizer.js index 5217fe3270..d74e170f15 100644 --- a/avatar-optimizer.js +++ b/avatar-optimizer.js @@ -31,6 +31,12 @@ class MorphAttributeLayout extends AttributeLayout { } } +const clampUvEpsilon = 0.02; +const _clampUv = uv => { + uv.x = Math.max(clampUvEpsilon, Math.min(1 - clampUvEpsilon, uv.x)); + uv.y = Math.max(clampUvEpsilon, Math.min(1 - clampUvEpsilon, uv.y)); + return uv; +}; const _getMergeableObjects = model => { const renderer = getRenderer(); @@ -414,11 +420,14 @@ const optimizeAvatarModel = (model, options = {}) => { const uvIndex = start + i; localVector2D.fromArray(geometry.attributes.uv.array, uvIndex * 2); - localVector2D.multiply( - localVector2D2.set(tw/canvasSize, th/canvasSize) - ).add( - localVector2D2.set(tx/canvasSize, ty/canvasSize) - ); + _clampUv(localVector2D); + localVector2D + .multiply( + localVector2D2.set(tw/canvasSize, th/canvasSize) + ) + .add( + localVector2D2.set(tx/canvasSize, ty/canvasSize) + ); localVector2D.toArray(geometry.attributes.uv.array, uvIndex * 2); } } From 314ceac161bf65b9e821687a33917a5ba296b6d8 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Wed, 13 Apr 2022 16:13:15 -0400 Subject: [PATCH 030/125] Avatar optimizer atlas debug code cleanup --- avatar-optimizer.js | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/avatar-optimizer.js b/avatar-optimizer.js index d74e170f15..d09b40505f 100644 --- a/avatar-optimizer.js +++ b/avatar-optimizer.js @@ -237,25 +237,28 @@ const optimizeAvatarModel = (model, options = {}) => { }; const atlasImages = atlasTextures ? _drawAtlasImages(atlas) : null; - /* // XXX debug + // XXX debug { const debugWidth = 300; let textureTypeIndex = 0; for (const textureType of textureTypes) { const atlasImage = atlasImages[textureType]; - atlasImage.style.cssText = `\ - position: fixed; - top: ${mergeableIndex * debugWidth}px; - left: ${textureTypeIndex * debugWidth}px; - min-width: ${debugWidth}px; - max-width: ${debugWidth}px; - min-height: ${debugWidth}px; - z-index: 100; - `; - document.body.appendChild(atlasImage); - textureTypeIndex++; + if (atlasImage) { + atlasImage.style.cssText = `\ + position: fixed; + top: ${mergeableIndex * debugWidth}px; + left: ${textureTypeIndex * debugWidth}px; + min-width: ${debugWidth}px; + max-width: ${debugWidth}px; + min-height: ${debugWidth}px; + z-index: 100; + `; + atlasImage.setAttribute('type', textureType); + document.body.appendChild(atlasImage); + textureTypeIndex++; + } } - } */ + } // build attribute layouts const _makeAttributeLayoutsFromGeometries = geometries => { From c30ff6ba279a5f7f2c97d8b609c13f52d9dd08e4 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Wed, 13 Apr 2022 16:13:40 -0400 Subject: [PATCH 031/125] Comment out avatar optimizer debug code --- avatar-optimizer.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/avatar-optimizer.js b/avatar-optimizer.js index d09b40505f..bc3aef7168 100644 --- a/avatar-optimizer.js +++ b/avatar-optimizer.js @@ -237,7 +237,7 @@ const optimizeAvatarModel = (model, options = {}) => { }; const atlasImages = atlasTextures ? _drawAtlasImages(atlas) : null; - // XXX debug + /* // XXX debug { const debugWidth = 300; let textureTypeIndex = 0; @@ -258,7 +258,7 @@ const optimizeAvatarModel = (model, options = {}) => { textureTypeIndex++; } } - } + } */ // build attribute layouts const _makeAttributeLayoutsFromGeometries = geometries => { From bd5835b2b2c51540c7a35a5c3479245e5c3e64f0 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Wed, 13 Apr 2022 16:14:23 -0400 Subject: [PATCH 032/125] Avatar optimizer cleanup --- avatar-optimizer.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/avatar-optimizer.js b/avatar-optimizer.js index bc3aef7168..75b1ef8103 100644 --- a/avatar-optimizer.js +++ b/avatar-optimizer.js @@ -103,9 +103,9 @@ const optimizeAvatarModel = (model, options = {}) => { const atlasTextures = !!(options.textures ?? true); const textureSize = options.textureSize ?? defaultTextureSize; - console.log('got model', model); + // console.log('got model', model); const mergeables = _getMergeableObjects(model); - console.log('got mergeables', mergeables); + // console.log('got mergeables', mergeables); const _mergeMesh = (mergeable, mergeableIndex) => { const { @@ -492,7 +492,7 @@ const optimizeAvatarModel = (model, options = {}) => { m.needsUpdate = true; }; _updateMaterial(); - console.log('got material', m); + // console.log('got material', m); const _makeMesh = () => { if (type === 'mesh') { From 952f971aef0d66f509b51906f8599340406e532c Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Wed, 13 Apr 2022 16:27:04 -0400 Subject: [PATCH 033/125] Avatar optimizer mod uvs instead of clamping --- avatar-optimizer.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/avatar-optimizer.js b/avatar-optimizer.js index 75b1ef8103..c8b71545ae 100644 --- a/avatar-optimizer.js +++ b/avatar-optimizer.js @@ -1,6 +1,7 @@ import * as THREE from 'three'; import {MaxRectsPacker} from 'maxrects-packer'; import {getRenderer} from './renderer.js'; +import {mod} from './util.js'; const defaultTextureSize = 4096; const startAtlasSize = 512; @@ -31,10 +32,9 @@ class MorphAttributeLayout extends AttributeLayout { } } -const clampUvEpsilon = 0.02; const _clampUv = uv => { - uv.x = Math.max(clampUvEpsilon, Math.min(1 - clampUvEpsilon, uv.x)); - uv.y = Math.max(clampUvEpsilon, Math.min(1 - clampUvEpsilon, uv.y)); + uv.x = mod(uv.x, 1); + uv.y = mod(uv.y, 1); return uv; }; const _getMergeableObjects = model => { From 1bdb5cab6debeb218f335ac530636b12186d7ec6 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Wed, 13 Apr 2022 16:45:24 -0400 Subject: [PATCH 034/125] Avatar optimizer refactoring --- avatar-optimizer.js | 58 ++++++++++++++++++++++++++++----------------- 1 file changed, 36 insertions(+), 22 deletions(-) diff --git a/avatar-optimizer.js b/avatar-optimizer.js index c8b71545ae..f5d898c8b4 100644 --- a/avatar-optimizer.js +++ b/avatar-optimizer.js @@ -453,32 +453,49 @@ const optimizeAvatarModel = (model, options = {}) => { const geometry = _mergeGeometries(geometries); // console.log('got geometry', geometry); + const _makeAtlasTextures = atlasImages => { + const _makeAtlasTexture = atlasImage => { + if (atlasImage) { + const originalTexture = originalTextures.get(atlasImage); + + const t = new THREE.Texture(atlasImage); + t.minFilter = originalTexture.minFilter; + t.magFilter = originalTexture.magFilter; + t.wrapS = originalTexture.wrapS; + t.wrapT = originalTexture.wrapT; + t.mapping = originalTexture.mapping; + // t.encoding = originalTexture.encoding; + + t.flipY = false; + t.needsUpdate = true; + + return t; + } else { + return null; + } + }; + + const result = {}; + for (const textureType of textureTypes) { + const atlasImage = atlasImages[textureType]; + const atlasTexture = _makeAtlasTexture(atlasImage); + result[textureType] = atlasTexture; + } + return result; + }; + const ts = atlasImages ? _makeAtlasTextures(atlasImages) : null; + /* const m = new THREE.MeshPhongMaterial({ color: 0xFF0000, }); */ const m = material; const _updateMaterial = () => { - if (atlasTextures) { + if (ts) { for (const textureType of textureTypes) { - const image = atlasImages[textureType]; - - if (image) { - const originalTexture = originalTextures.get(image); - - const t = new THREE.Texture(image); - t.minFilter = originalTexture.minFilter; - t.magFilter = originalTexture.magFilter; - t.wrapS = originalTexture.wrapS; - t.wrapT = originalTexture.wrapT; - t.mapping = originalTexture.mapping; - // t.encoding = originalTexture.encoding; - - t.flipY = false; - t.needsUpdate = true; + const t = ts[textureType]; + + if (t) { m[textureType] = t; - /* if (m[textureType] !== t) { - throw new Error('texture update failed'); - } */ if (m.uniforms) { m.uniforms[textureType].value = t; m.uniforms[textureType].needsUpdate = true; @@ -486,9 +503,6 @@ const optimizeAvatarModel = (model, options = {}) => { } } } - // m.roughness = 1; - // m.alphaTest = 0.1; - // m.transparent = true; m.needsUpdate = true; }; _updateMaterial(); From 69af0429381829e439b1d6848b27742475a24c05 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Wed, 13 Apr 2022 17:01:54 -0400 Subject: [PATCH 035/125] Add avatar optimizer caching --- avatar-optimizer.js | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/avatar-optimizer.js b/avatar-optimizer.js index f5d898c8b4..adce5ef040 100644 --- a/avatar-optimizer.js +++ b/avatar-optimizer.js @@ -187,11 +187,10 @@ const optimizeAvatarModel = (model, options = {}) => { const atlas = atlasTextures ? _packAtlases() : null; // draw atlas images - const originalTextures = new WeakMap(); // map of canvas to the texture that generated it + const originalTextures = new Map(); // map of canvas to the texture that generated it const _drawAtlasImages = atlas => { - const _drawAtlasImage = textureType => { - const textures = mergeable[`${textureType}s`]; - + const _getTexturesKey = textures => textures.map(t => t ? t.uuid : '').join(','); + const _drawAtlasImage = textures => { if (atlas && textures.some(t => t !== null)) { const canvasSize = Math.min(atlas.width, textureSize); const canvasScale = canvasSize / atlas.width; @@ -229,8 +228,16 @@ const optimizeAvatarModel = (model, options = {}) => { }; const atlasImages = {}; + const atlasImagesMap = new Map(); for (const textureType of textureTypes) { - const atlasImage = _drawAtlasImage(textureType); + const textures = mergeable[`${textureType}s`]; + const key = _getTexturesKey(textures); + + let atlasImage = atlasImagesMap.get(key); + if (!atlasImage) { + atlasImage = _drawAtlasImage(textures); + atlasImagesMap.set(key, atlasImage); + } atlasImages[textureType] = atlasImage; } return atlasImages; From 0d09c1ef42f25d05882fadd714d29a8ab7d8aa63 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Wed, 13 Apr 2022 17:11:25 -0400 Subject: [PATCH 036/125] Avatar optimizer textures aliasing --- avatar-optimizer.js | 53 ++++++++++++++++++++++++++------------------- 1 file changed, 31 insertions(+), 22 deletions(-) diff --git a/avatar-optimizer.js b/avatar-optimizer.js index adce5ef040..a0f52d467b 100644 --- a/avatar-optimizer.js +++ b/avatar-optimizer.js @@ -228,14 +228,17 @@ const optimizeAvatarModel = (model, options = {}) => { }; const atlasImages = {}; - const atlasImagesMap = new Map(); + const atlasImagesMap = new Map(); // cache to alias identical textures for (const textureType of textureTypes) { const textures = mergeable[`${textureType}s`]; const key = _getTexturesKey(textures); let atlasImage = atlasImagesMap.get(key); - if (!atlasImage) { + if (atlasImage === undefined) { // cache miss atlasImage = _drawAtlasImage(textures); + if (atlasImage !== null) { + atlasImage.key = key; + } atlasImagesMap.set(key, atlasImage); } atlasImages[textureType] = atlasImage; @@ -462,31 +465,37 @@ const optimizeAvatarModel = (model, options = {}) => { const _makeAtlasTextures = atlasImages => { const _makeAtlasTexture = atlasImage => { - if (atlasImage) { - const originalTexture = originalTextures.get(atlasImage); - - const t = new THREE.Texture(atlasImage); - t.minFilter = originalTexture.minFilter; - t.magFilter = originalTexture.magFilter; - t.wrapS = originalTexture.wrapS; - t.wrapT = originalTexture.wrapT; - t.mapping = originalTexture.mapping; - // t.encoding = originalTexture.encoding; - - t.flipY = false; - t.needsUpdate = true; - - return t; - } else { - return null; - } + const originalTexture = originalTextures.get(atlasImage); + + const t = new THREE.Texture(atlasImage); + t.minFilter = originalTexture.minFilter; + t.magFilter = originalTexture.magFilter; + t.wrapS = originalTexture.wrapS; + t.wrapT = originalTexture.wrapT; + t.mapping = originalTexture.mapping; + // t.encoding = originalTexture.encoding; + + t.flipY = false; + t.needsUpdate = true; + + return t; }; const result = {}; + const textureMap = new Map(); // cache to alias identical textures for (const textureType of textureTypes) { const atlasImage = atlasImages[textureType]; - const atlasTexture = _makeAtlasTexture(atlasImage); - result[textureType] = atlasTexture; + + if (atlasImage) { + let atlasTexture = textureMap.get(atlasImage.key); + if (atlasTexture === undefined) { // cache miss + atlasTexture = _makeAtlasTexture(atlasImage); + textureMap.set(atlasImage.key, atlasTexture); + } + result[textureType] = atlasTexture; + } else { + result[textureType] = null; + } } return result; }; From c09dab837e0dc49acee46a40d9d5ed40aec57d8e Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Wed, 13 Apr 2022 17:12:55 -0400 Subject: [PATCH 037/125] Commented code cleanup --- avatar-optimizer.js | 1 - 1 file changed, 1 deletion(-) diff --git a/avatar-optimizer.js b/avatar-optimizer.js index a0f52d467b..ec88e1374c 100644 --- a/avatar-optimizer.js +++ b/avatar-optimizer.js @@ -146,7 +146,6 @@ const optimizeAvatarModel = (model, options = {}) => { const _attemptPack = (textureSizes, atlasSize) => { const maxRectsPacker = new MaxRectsPacker(atlasSize, atlasSize, 1); const rects = textureSizes.map((textureSize, index) => { - // const image = t.image; const {x: width, y: height} = textureSize; return { width, From d03b9bcf9bbad5e3a8d3387f272d5b0cdd8b6849 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Fri, 22 Apr 2022 19:06:35 -0400 Subject: [PATCH 038/125] Break out avatar optimizer crunching --- avatar-optimizer.js | 802 +++++++++++++++++++++++--------------------- 1 file changed, 428 insertions(+), 374 deletions(-) diff --git a/avatar-optimizer.js b/avatar-optimizer.js index ec88e1374c..e8ffb40dad 100644 --- a/avatar-optimizer.js +++ b/avatar-optimizer.js @@ -1,7 +1,7 @@ import * as THREE from 'three'; import {MaxRectsPacker} from 'maxrects-packer'; import {getRenderer} from './renderer.js'; -import {mod} from './util.js'; +import {modUv} from './util.js'; const defaultTextureSize = 4096; const startAtlasSize = 512; @@ -24,22 +24,31 @@ class AttributeLayout { this.count = 0; } + makeDefault(g) { + return new THREE.BufferAttribute( + new this.TypedArrayConstructor(g.attributes.position.count * this.itemSize), + this.itemSize + ); + } } class MorphAttributeLayout extends AttributeLayout { constructor(name, TypedArrayConstructor, itemSize, arraySize) { super(name, TypedArrayConstructor, itemSize); this.arraySize = arraySize; } + makeDefault(g) { + return Array(this.arraySize).fill(super.makeDefault(g)); + } } -const _clampUv = uv => { - uv.x = mod(uv.x, 1); - uv.y = mod(uv.y, 1); - return uv; -}; -const _getMergeableObjects = model => { +const getObjectKeyDefault = (type, object, material) => { const renderer = getRenderer(); - + return [ + type, + renderer.getProgramCacheKey(object, material), + ].join(','); +}; +export const getMergeableObjects = (model, getObjectKey = getObjectKeyDefault) => { const mergeables = new Map(); model.traverse(o => { if (o.isMesh && o.geometry.type === 'BufferGeometry') { @@ -63,10 +72,7 @@ const _getMergeableObjects = model => { } = objectMaterial; const skeleton = o.skeleton ?? null; - const key = [ - type, - renderer.getProgramCacheKey(o, objectMaterial), - ].join(','); + const key = getObjectKey(type, o, objectMaterial); let m = mergeables.get(key); if (!m) { @@ -99,420 +105,472 @@ const _getMergeableObjects = model => { return Array.from(mergeables.values()); }; -const optimizeAvatarModel = (model, options = {}) => { - const atlasTextures = !!(options.textures ?? true); - const textureSize = options.textureSize ?? defaultTextureSize; - - // console.log('got model', model); - const mergeables = _getMergeableObjects(model); - // console.log('got mergeables', mergeables); - - const _mergeMesh = (mergeable, mergeableIndex) => { - const { - type, - material, - geometries, - maps, - emissiveMaps, - normalMaps, - skeletons, - morphTargetDictionaryArray, - morphTargetInfluencesArray, - } = mergeable; +export const mergeGeometryTextureAtlas = (mergeable, textureSize) => { + const { + type, + material, + geometries, + maps, + emissiveMaps, + normalMaps, + skeletons, + morphTargetDictionaryArray, + morphTargetInfluencesArray, + } = mergeable; + + // compute texture sizes + const textureSizes = maps.map((map, i) => { + const emissiveMap = emissiveMaps[i]; + const normalMap = normalMaps[i]; + + const maxSize = new THREE.Vector2(0, 0); + if (map) { + maxSize.x = Math.max(maxSize.x, map.image.width); + maxSize.y = Math.max(maxSize.y, map.image.height); + } + if (emissiveMap) { + maxSize.x = Math.max(maxSize.x, emissiveMap.image.width); + maxSize.y = Math.max(maxSize.y, emissiveMap.image.height); + } + if (normalMap) { + maxSize.x = Math.max(maxSize.x, normalMap.image.width); + maxSize.y = Math.max(maxSize.y, normalMap.image.height); + } + return maxSize; + }); - // compute texture sizes - const textureSizes = maps.map((map, i) => { - const emissiveMap = emissiveMaps[i]; - const normalMap = normalMaps[i]; - - const maxSize = new THREE.Vector2(0, 0); - if (map) { - maxSize.x = Math.max(maxSize.x, map.image.width); - maxSize.y = Math.max(maxSize.y, map.image.height); - } - if (emissiveMap) { - maxSize.x = Math.max(maxSize.x, emissiveMap.image.width); - maxSize.y = Math.max(maxSize.y, emissiveMap.image.height); + // generate atlas layouts + const _packAtlases = () => { + const _attemptPack = (textureSizes, atlasSize) => { + const maxRectsPacker = new MaxRectsPacker(atlasSize, atlasSize, 1); + const rects = textureSizes.map((textureSize, index) => { + const {x: width, y: height} = textureSize; + return { + width, + height, + data: { + index, + }, + }; + }); + maxRectsPacker.addArray(rects); + let oversized = maxRectsPacker.bins.length > 1; + maxRectsPacker.bins.forEach(bin => { + bin.rects.forEach(rect => { + if (rect.oversized) { + oversized = true; + } + }); + }); + if (!oversized) { + return maxRectsPacker; + } else { + return null; } - if (normalMap) { - maxSize.x = Math.max(maxSize.x, normalMap.image.width); - maxSize.y = Math.max(maxSize.y, normalMap.image.height); + }; + + const hasTextures = textureSizes.some(textureSize => textureSize.x > 0 || textureSize.y > 0); + if (hasTextures) { + let atlas; + let atlasSize = startAtlasSize; + while (!(atlas = _attemptPack(textureSizes, atlasSize))) { + atlasSize *= 2; } - return maxSize; - }); - - // generate atlas layouts - const _packAtlases = () => { - const _attemptPack = (textureSizes, atlasSize) => { - const maxRectsPacker = new MaxRectsPacker(atlasSize, atlasSize, 1); - const rects = textureSizes.map((textureSize, index) => { - const {x: width, y: height} = textureSize; - return { - width, - height, - data: { - index, - }, - }; - }); - maxRectsPacker.addArray(rects); - let oversized = maxRectsPacker.bins.length > 1; - maxRectsPacker.bins.forEach(bin => { + return atlas; + } else { + return null; + } + }; + const atlas = _packAtlases(); + + // draw atlas images + const originalTextures = new Map(); // map of canvas to the texture that generated it + const _drawAtlasImages = atlas => { + const _getTexturesKey = textures => textures.map(t => t ? t.uuid : '').join(','); + const _drawAtlasImage = textures => { + if (atlas && textures.some(t => t !== null)) { + const canvasSize = Math.min(atlas.width, textureSize); + const canvasScale = canvasSize / atlas.width; + + const canvas = document.createElement('canvas'); + canvas.width = canvasSize; + canvas.height = canvasSize; + const ctx = canvas.getContext('2d'); + + atlas.bins.forEach(bin => { bin.rects.forEach(rect => { - if (rect.oversized) { - oversized = true; + const {x, y, width: w, height: h, data: {index}} = rect; + const texture = textures[index]; + if (texture) { + const image = texture.image; + + // draw the image in the correct box on the canvas + const tx = x * canvasScale; + const ty = y * canvasScale; + const tw = w * canvasScale; + const th = h * canvasScale; + ctx.drawImage(image, 0, 0, image.width, image.height, tx, ty, tw, th); + + if (!originalTextures.has(canvas)) { + originalTextures.set(canvas, texture); + } } }); }); - if (!oversized) { - return maxRectsPacker; - } else { - return null; - } - }; - - const hasTextures = textureSizes.some(textureSize => textureSize.x > 0 || textureSize.y > 0); - if (hasTextures) { - let atlas; - let atlasSize = startAtlasSize; - while (!(atlas = _attemptPack(textureSizes, atlasSize))) { - atlasSize *= 2; - } - return atlas; + + return canvas; } else { return null; } }; - const atlas = atlasTextures ? _packAtlases() : null; - - // draw atlas images - const originalTextures = new Map(); // map of canvas to the texture that generated it - const _drawAtlasImages = atlas => { - const _getTexturesKey = textures => textures.map(t => t ? t.uuid : '').join(','); - const _drawAtlasImage = textures => { - if (atlas && textures.some(t => t !== null)) { - const canvasSize = Math.min(atlas.width, textureSize); - const canvasScale = canvasSize / atlas.width; - - const canvas = document.createElement('canvas'); - canvas.width = canvasSize; - canvas.height = canvasSize; - const ctx = canvas.getContext('2d'); - - atlas.bins.forEach(bin => { - bin.rects.forEach(rect => { - const {x, y, width: w, height: h, data: {index}} = rect; - const texture = textures[index]; - if (texture) { - const image = texture.image; - - // draw the image in the correct box on the canvas - const tx = x * canvasScale; - const ty = y * canvasScale; - const tw = w * canvasScale; - const th = h * canvasScale; - ctx.drawImage(image, 0, 0, image.width, image.height, tx, ty, tw, th); - - if (!originalTextures.has(canvas)) { - originalTextures.set(canvas, texture); - } - } - }); - }); - return canvas; - } else { - return null; + const atlasImages = {}; + const atlasImagesMap = new Map(); // cache to alias identical textures + for (const textureType of textureTypes) { + const textures = mergeable[`${textureType}s`]; + const key = _getTexturesKey(textures); + + let atlasImage = atlasImagesMap.get(key); + if (atlasImage === undefined) { // cache miss + atlasImage = _drawAtlasImage(textures); + if (atlasImage !== null) { + atlasImage.key = key; } - }; - - const atlasImages = {}; - const atlasImagesMap = new Map(); // cache to alias identical textures - for (const textureType of textureTypes) { - const textures = mergeable[`${textureType}s`]; - const key = _getTexturesKey(textures); - - let atlasImage = atlasImagesMap.get(key); - if (atlasImage === undefined) { // cache miss - atlasImage = _drawAtlasImage(textures); - if (atlasImage !== null) { - atlasImage.key = key; + atlasImagesMap.set(key, atlasImage); + } + atlasImages[textureType] = atlasImage; + } + return atlasImages; + }; + const atlasImages = _drawAtlasImages(atlas); + + /* // XXX debug + { + const debugWidth = 300; + let textureTypeIndex = 0; + for (const textureType of textureTypes) { + const atlasImage = atlasImages[textureType]; + if (atlasImage) { + atlasImage.style.cssText = `\ + position: fixed; + top: ${mergeableIndex * debugWidth}px; + left: ${textureTypeIndex * debugWidth}px; + min-width: ${debugWidth}px; + max-width: ${debugWidth}px; + min-height: ${debugWidth}px; + z-index: 100; + `; + atlasImage.setAttribute('type', textureType); + document.body.appendChild(atlasImage); + textureTypeIndex++; + } + } + } */ + + // build attribute layouts + const _makeAttributeLayoutsFromGeometries = geometries => { + const attributeLayouts = []; + for (const g of geometries) { + const attributes = g.attributes; + for (const attributeName in attributes) { + const attribute = attributes[attributeName]; + let layout = attributeLayouts.find(layout => layout.name === attributeName); + if (layout) { + // sanity check that item size is the same + if (layout.itemSize !== attribute.itemSize) { + throw new Error(`attribute ${attributeName} has different itemSize: ${layout.itemSize}, ${attribute.itemSize}`); } - atlasImagesMap.set(key, atlasImage); + } else { + layout = new AttributeLayout( + attributeName, + attribute.array.constructor, + attribute.itemSize + ); + attributeLayouts.push(layout); } - atlasImages[textureType] = atlasImage; + + layout.count += attribute.count * attribute.itemSize; } - return atlasImages; - }; - const atlasImages = atlasTextures ? _drawAtlasImages(atlas) : null; - - /* // XXX debug - { - const debugWidth = 300; - let textureTypeIndex = 0; - for (const textureType of textureTypes) { - const atlasImage = atlasImages[textureType]; - if (atlasImage) { - atlasImage.style.cssText = `\ - position: fixed; - top: ${mergeableIndex * debugWidth}px; - left: ${textureTypeIndex * debugWidth}px; - min-width: ${debugWidth}px; - max-width: ${debugWidth}px; - min-height: ${debugWidth}px; - z-index: 100; - `; - atlasImage.setAttribute('type', textureType); - document.body.appendChild(atlasImage); - textureTypeIndex++; + } + return attributeLayouts; + }; + const attributeLayouts = _makeAttributeLayoutsFromGeometries(geometries); + + const _makeMorphAttributeLayoutsFromGeometries = geometries => { + // create morph layouts + const morphAttributeLayouts = []; + for (const g of geometries) { + const morphAttributes = g.morphAttributes; + for (const morphAttributeName in morphAttributes) { + const morphAttribute = morphAttributes[morphAttributeName]; + let morphLayout = morphAttributeLayouts.find(l => l.name === morphAttributeName); + if (!morphLayout) { + morphLayout = new MorphAttributeLayout( + morphAttributeName, + morphAttribute[0].array.constructor, + morphAttribute[0].itemSize, + morphAttribute.length + ); + morphAttributeLayouts.push(morphLayout); } + + morphLayout.count += morphAttribute[0].count * morphAttribute[0].itemSize; } - } */ + } + return morphAttributeLayouts; + }; + const morphAttributeLayouts = _makeMorphAttributeLayoutsFromGeometries(geometries); + // console.log('got attribute layouts', attributeLayouts, morphAttributeLayouts); - // build attribute layouts - const _makeAttributeLayoutsFromGeometries = geometries => { - const attributeLayouts = []; + const _forceGeometriesAttributeLayouts = (attributeLayouts, geometries) => { + for (const layout of attributeLayouts) { for (const g of geometries) { - const attributes = g.attributes; - for (const attributeName in attributes) { - const attribute = attributes[attributeName]; - let layout = attributeLayouts.find(layout => layout.name === attributeName); - if (layout) { - // sanity check that item size is the same - if (layout.itemSize !== attribute.itemSize) { - throw new Error(`attribute ${attributeName} has different itemSize: ${layout.itemSize}, ${attribute.itemSize}`); - } + let gAttribute = g.attributes[layout.name]; + if (!gAttribute) { + if (layout.name === 'skinIndex' || layout.name === 'skinWeight') { + gAttribute = layout.makeDefault(g); + g.setAttribute(layout.name, gAttribute); + + layout.count += gAttribute.count * gAttribute.itemSize; } else { - layout = new AttributeLayout( - attributeName, - attribute.array.constructor, - attribute.itemSize - ); - attributeLayouts.push(layout); + throw new Error(`unknown layout ${layout.name}`); } - - layout.count += attribute.count * attribute.itemSize; } } - return attributeLayouts; - }; - const attributeLayouts = _makeAttributeLayoutsFromGeometries(geometries); + } - const _makeMorphAttributeLayoutsFromGeometries = geometries => { - // create morph layouts - const morphAttributeLayouts = []; + for (const morphLayout of morphAttributeLayouts) { for (const g of geometries) { - const morphAttributes = g.morphAttributes; - for (const morphAttributeName in morphAttributes) { - const morphAttribute = morphAttributes[morphAttributeName]; - let morphLayout = morphAttributeLayouts.find(l => l.name === morphAttributeName); - if (!morphLayout) { - morphLayout = new MorphAttributeLayout( - morphAttributeName, - morphAttribute[0].array.constructor, - morphAttribute[0].itemSize, - morphAttribute.length - ); - morphAttributeLayouts.push(morphLayout); - } + let morphAttribute = g.morphAttributes[morphLayout.name]; + if (!morphAttribute) { + // console.log('missing morph attribute', morphLayout, morphAttribute); + + morphAttribute = morphLayout.makeDefault(g); + g.morphAttributes[morphLayout.name] = morphAttribute; morphLayout.count += morphAttribute[0].count * morphAttribute[0].itemSize; - } - } - return morphAttributeLayouts; - }; - const morphAttributeLayouts = _makeMorphAttributeLayoutsFromGeometries(geometries); - // console.log('got attribute layouts', attributeLayouts, morphAttributeLayouts); - const _forceGeometriesAttributeLayouts = (attributeLayouts, geometries) => { - for (const layout of attributeLayouts) { - for (const g of geometries) { - let gAttribute = g.attributes[layout.name]; - if (!gAttribute) { - if (layout.name === 'skinIndex' || layout.name === 'skinWeight') { - gAttribute = new THREE.BufferAttribute(new Float32Array(g.attributes.position.count * layout.itemSize), layout.itemSize); - g.setAttribute(layout.name, gAttribute); - } else { - throw new Error(`unknown layout ${layout.name}`); - } - } + /* if (layout.name === 'skinIndex' || layout.name === 'skinWeight') { + gAttribute = new THREE.BufferAttribute(new Float32Array(g.attributes.position.count * layout.itemSize), layout.itemSize); + g.setAttribute(layout.name, gAttribute); + } else { + throw new Error(`unknown layout ${layout.name}`); + } */ } } - }; - const _mergeAttributes = (geometry, geometries, attributeLayouts) => { - for (const layout of attributeLayouts) { - const attributeData = new layout.TypedArrayConstructor(layout.count); - const attribute = new THREE.BufferAttribute(attributeData, layout.itemSize); - let attributeDataIndex = 0; + } + }; + const _mergeAttributes = (geometry, geometries, attributeLayouts) => { + for (const layout of attributeLayouts) { + const attributeData = new layout.TypedArrayConstructor(layout.count); + const attribute = new THREE.BufferAttribute(attributeData, layout.itemSize); + let attributeDataIndex = 0; + for (const g of geometries) { + const gAttribute = g.attributes[layout.name]; + attributeData.set(gAttribute.array, attributeDataIndex); + attributeDataIndex += gAttribute.count * gAttribute.itemSize; + } + // sanity check + if (attributeDataIndex !== layout.count) { + console.warn('desynced attribute data 1', layout.name, attributeDataIndex, layout.count); + debugger; + } + geometry.setAttribute(layout.name, attribute); + } + }; + const _mergeMorphAttributes = (geometry, geometries, morphAttributeLayouts) => { + for (const morphLayout of morphAttributeLayouts) { + const morphsArray = Array(morphLayout.arraySize); + for (let i = 0; i < morphLayout.arraySize; i++) { + const morphData = new morphLayout.TypedArrayConstructor(morphLayout.count); + const morphAttribute = new THREE.BufferAttribute(morphData, morphLayout.itemSize); + morphsArray[i] = morphAttribute; + let morphDataIndex = 0; for (const g of geometries) { - const gAttribute = g.attributes[layout.name]; - attributeData.set(gAttribute.array, attributeDataIndex); - attributeDataIndex += gAttribute.count * gAttribute.itemSize; + let gMorphAttribute = g.morphAttributes[morphLayout.name]; + gMorphAttribute = gMorphAttribute?.[i]; + if (gMorphAttribute) { + morphData.set(gMorphAttribute.array, morphDataIndex); + morphDataIndex += gMorphAttribute.count * gMorphAttribute.itemSize; + } else { + const matchingAttribute = g.attributes[morphLayout.name]; + morphDataIndex += matchingAttribute.count * matchingAttribute.itemSize; + } } // sanity check - if (attributeDataIndex !== layout.count) { - console.warn('desynced morph data', layout.name, attributeDataIndex, layout.count); + if (morphDataIndex !== morphLayout.count) { + console.warn('desynced morph data 2', morphLayout.name, morphDataIndex, morphLayout.count); } - geometry.setAttribute(layout.name, attribute); } - }; - const _mergeMorphAttributes = (geometry, geometries, morphAttributeLayouts) => { - for (const morphLayout of morphAttributeLayouts) { - const morphsArray = Array(morphLayout.arraySize); - for (let i = 0; i < morphLayout.arraySize; i++) { - const morphData = new morphLayout.TypedArrayConstructor(morphLayout.count); - const morphAttribute = new THREE.BufferAttribute(morphData, morphLayout.itemSize); - morphsArray[i] = morphAttribute; - let morphDataIndex = 0; - for (const g of geometries) { - let gMorphAttribute = g.morphAttributes[morphLayout.name]; - gMorphAttribute = gMorphAttribute?.[i]; - if (gMorphAttribute) { - morphData.set(gMorphAttribute.array, morphDataIndex); - morphDataIndex += gMorphAttribute.count * gMorphAttribute.itemSize; - } else { - const matchingAttribute = g.attributes[morphLayout.name]; - morphDataIndex += matchingAttribute.count * matchingAttribute.itemSize; + geometry.morphAttributes[morphLayout.name] = morphsArray; + } + }; + const _mergeIndices = (geometry, geometries) => { + let indexCount = 0; + for (const g of geometries) { + indexCount += g.index.count; + } + const indexData = new Uint32Array(indexCount); + + let positionOffset = 0; + let indexOffset = 0; + for (const g of geometries) { + const srcIndexData = g.index.array; + for (let i = 0; i < srcIndexData.length; i++) { + indexData[indexOffset++] = srcIndexData[i] + positionOffset; + } + positionOffset += g.attributes.position.count; + } + geometry.setIndex(new THREE.BufferAttribute(indexData, 1)); + }; + const _remapGeometryUvs = (geometry, geometries) => { + if (atlas) { + let uvIndex = 0; + const geometryUvOffsets = geometries.map(g => { + const start = uvIndex; + const count = g.attributes.uv.count; + uvIndex += count; + return { + start, + count, + }; + }); + + const canvasSize = Math.min(atlas.width, textureSize); + const canvasScale = canvasSize / atlas.width; + atlas.bins.forEach(bin => { + bin.rects.forEach(rect => { + const {x, y, width: w, height: h, data: {index}} = rect; + + if (w > 0 && h > 0) { + const {start, count} = geometryUvOffsets[index]; + + const tx = x * canvasScale; + const ty = y * canvasScale; + const tw = w * canvasScale; + const th = h * canvasScale; + + for (let i = 0; i < count; i++) { + const uvIndex = start + i; + + localVector2D.fromArray(geometry.attributes.uv.array, uvIndex * 2); + modUv(localVector2D); + localVector2D + .multiply( + localVector2D2.set(tw/canvasSize, th/canvasSize) + ) + .add( + localVector2D2.set(tx/canvasSize, ty/canvasSize) + ); + localVector2D.toArray(geometry.attributes.uv.array, uvIndex * 2); } } - // sanity check - if (morphDataIndex !== morphLayout.count) { - console.warn('desynced morph data', morphLayout.name, morphDataIndex, morphLayout.count); - } - } - geometry.morphAttributes[morphLayout.name] = morphsArray; - } - }; - const _mergeIndices = (geometry, geometries) => { - let indexCount = 0; - for (const g of geometries) { - indexCount += g.index.count; - } - const indexData = new Uint32Array(indexCount); - - let positionOffset = 0; - let indexOffset = 0; - for (const g of geometries) { - const srcIndexData = g.index.array; - for (let i = 0; i < srcIndexData.length; i++) { - indexData[indexOffset++] = srcIndexData[i] + positionOffset; - } - positionOffset += g.attributes.position.count; - } - geometry.setIndex(new THREE.BufferAttribute(indexData, 1)); - }; - const _remapGeometryUvs = (geometry, geometries) => { - if (atlas) { - let uvIndex = 0; - const geometryUvOffsets = geometries.map(g => { - const start = uvIndex; - const count = g.attributes.uv.count; - uvIndex += count; - return { - start, - count, - }; }); + }); + } + }; + const _mergeGeometries = geometries => { + const geometry = new THREE.BufferGeometry(); + geometry.morphTargetsRelative = true; - const canvasSize = Math.min(atlas.width, textureSize); - const canvasScale = canvasSize / atlas.width; - atlas.bins.forEach(bin => { - bin.rects.forEach(rect => { - const {x, y, width: w, height: h, data: {index}} = rect; - - if (w > 0 && h > 0) { - const {start, count} = geometryUvOffsets[index]; + _forceGeometriesAttributeLayouts(attributeLayouts, geometries); + _mergeAttributes(geometry, geometries, attributeLayouts); + _mergeMorphAttributes(geometry, geometries, morphAttributeLayouts); + _mergeIndices(geometry, geometries); + _remapGeometryUvs(geometry, geometries); - const tx = x * canvasScale; - const ty = y * canvasScale; - const tw = w * canvasScale; - const th = h * canvasScale; + return geometry; + }; + const geometry = _mergeGeometries(geometries); + // console.log('got geometry', geometry); - for (let i = 0; i < count; i++) { - const uvIndex = start + i; - - localVector2D.fromArray(geometry.attributes.uv.array, uvIndex * 2); - _clampUv(localVector2D); - localVector2D - .multiply( - localVector2D2.set(tw/canvasSize, th/canvasSize) - ) - .add( - localVector2D2.set(tx/canvasSize, ty/canvasSize) - ); - localVector2D.toArray(geometry.attributes.uv.array, uvIndex * 2); - } - } - }); - }); - } + const _makeAtlasTextures = atlasImages => { + const _makeAtlasTexture = atlasImage => { + const originalTexture = originalTextures.get(atlasImage); + + const t = new THREE.Texture(atlasImage); + t.minFilter = originalTexture.minFilter; + t.magFilter = originalTexture.magFilter; + t.wrapS = originalTexture.wrapS; + t.wrapT = originalTexture.wrapT; + t.mapping = originalTexture.mapping; + // t.encoding = originalTexture.encoding; + + t.flipY = false; + t.needsUpdate = true; + + return t; }; - const _mergeGeometries = geometries => { - const geometry = new THREE.BufferGeometry(); - geometry.morphTargetsRelative = true; - - _forceGeometriesAttributeLayouts(attributeLayouts, geometries); - _mergeAttributes(geometry, geometries, attributeLayouts); - _mergeMorphAttributes(geometry, geometries, morphAttributeLayouts); - _mergeIndices(geometry, geometries); - _remapGeometryUvs(geometry, geometries); - return geometry; - }; - const geometry = _mergeGeometries(geometries); - // console.log('got geometry', geometry); + const result = {}; + const textureMap = new Map(); // cache to alias identical textures + for (const textureType of textureTypes) { + const atlasImage = atlasImages[textureType]; - const _makeAtlasTextures = atlasImages => { - const _makeAtlasTexture = atlasImage => { - const originalTexture = originalTextures.get(atlasImage); - - const t = new THREE.Texture(atlasImage); - t.minFilter = originalTexture.minFilter; - t.magFilter = originalTexture.magFilter; - t.wrapS = originalTexture.wrapS; - t.wrapT = originalTexture.wrapT; - t.mapping = originalTexture.mapping; - // t.encoding = originalTexture.encoding; - - t.flipY = false; - t.needsUpdate = true; - - return t; - }; - - const result = {}; - const textureMap = new Map(); // cache to alias identical textures - for (const textureType of textureTypes) { - const atlasImage = atlasImages[textureType]; - - if (atlasImage) { - let atlasTexture = textureMap.get(atlasImage.key); - if (atlasTexture === undefined) { // cache miss - atlasTexture = _makeAtlasTexture(atlasImage); - textureMap.set(atlasImage.key, atlasTexture); - } - result[textureType] = atlasTexture; - } else { - result[textureType] = null; + if (atlasImage) { + let atlasTexture = textureMap.get(atlasImage.key); + if (atlasTexture === undefined) { // cache miss + atlasTexture = _makeAtlasTexture(atlasImage); + textureMap.set(atlasImage.key, atlasTexture); } + result[textureType] = atlasTexture; + } else { + result[textureType] = null; } - return result; - }; - const ts = atlasImages ? _makeAtlasTextures(atlasImages) : null; + } + return result; + }; + const atlasTextures = atlasImages ? _makeAtlasTextures(atlasImages) : null; + + return { + atlas, + atlasImages, + attributeLayouts, + morphAttributeLayouts, + geometry, + atlasTextures, + }; +}; + +export const optimizeAvatarModel = (model, options = {}) => { + const textureSize = options.textureSize ?? defaultTextureSize; + + const mergeables = getMergeableObjects(model); + + const _mergeMesh = (mergeable, mergeableIndex) => { + const { + type, + material, + geometries, + maps, + emissiveMaps, + normalMaps, + skeletons, + morphTargetDictionaryArray, + morphTargetInfluencesArray, + } = mergeable; + const { + atlas, + atlasImages, + attributeLayouts, + morphAttributeLayouts, + geometry, + atlasTextures, + } = mergeGeometryTextureAtlas(mergeable, textureSize); /* const m = new THREE.MeshPhongMaterial({ color: 0xFF0000, }); */ const m = material; const _updateMaterial = () => { - if (ts) { + if (atlasTextures) { for (const textureType of textureTypes) { - const t = ts[textureType]; + const atlasTexture = atlasTextures[textureType]; - if (t) { - m[textureType] = t; + if (atlasTexture) { + m[textureType] = atlasTexture; if (m.uniforms) { - m.uniforms[textureType].value = t; + m.uniforms[textureType].value = atlasTexture; m.uniforms[textureType].needsUpdate = true; } } @@ -549,8 +607,4 @@ const optimizeAvatarModel = (model, options = {}) => { object.add(mesh); } return object; -}; - -export { - optimizeAvatarModel, }; \ No newline at end of file From 02518d54e0af3bd347099ea9112e02ddc003f971 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Fri, 22 Apr 2022 19:09:14 -0400 Subject: [PATCH 039/125] Route avatar chruncher through avatar optimizer methods --- avatar-cruncher.js | 459 +++++---------------------------------------- 1 file changed, 43 insertions(+), 416 deletions(-) diff --git a/avatar-cruncher.js b/avatar-cruncher.js index 9dae03432f..b4de98ba73 100644 --- a/avatar-cruncher.js +++ b/avatar-cruncher.js @@ -1,5 +1,8 @@ import * as THREE from 'three'; import {MaxRectsPacker} from 'maxrects-packer'; +import {modUv} from './util.js'; + +import {getMergeableObjects, mergeGeometryTextureAtlas} from './avatar-optimizer.js'; const defaultTextureSize = 4096; const startAtlasSize = 512; @@ -14,13 +17,19 @@ class AttributeLayout { this.name = name; this.TypedArrayConstructor = TypedArrayConstructor; this.itemSize = itemSize; - this.index = 0; + this.count = 0; - this.depth = 0; } } -const crunchAvatarModel = (model, options = {}) => { - const atlasTextures = !!(options.textures ?? true); +class MorphAttributeLayout extends AttributeLayout { + constructor(name, TypedArrayConstructor, itemSize, arraySize) { + super(name, TypedArrayConstructor, itemSize); + this.arraySize = arraySize; + } +} + +export const crunchAvatarModel = (model, options = {}) => { + // const atlasTexturesEnabled = !!(options.textures ?? true); const textureSize = options.textureSize ?? defaultTextureSize; const textureTypes = [ @@ -29,420 +38,43 @@ const crunchAvatarModel = (model, options = {}) => { 'normalMap', ]; - const _collectObjects = () => { - const meshes = []; - const geometries = []; - const materials = []; - const textures = {}; - for (const textureType of textureTypes) { - textures[textureType] = []; - } - let textureGroupsMap = new WeakMap(); - const skeletons = []; - { - let indexIndex = 0; - model.traverse(node => { - if (node.isMesh && !node.parent?.isBone) { - meshes.push(node); - - const geometry = node.geometry; - geometries.push(geometry); - - const startIndex = indexIndex; - const count = geometry.index.count; - const _pushMaterial = material => { - materials.push(material); - for (const k of textureTypes) { - const texture = material[k]; - if (texture) { - const texturesOfType = textures[k]; - if (!texturesOfType.includes(texture)) { - texturesOfType.push(texture); - } - let textureGroups = textureGroupsMap.get(texture); - if (!textureGroups) { - textureGroups = []; - textureGroupsMap.set(texture, textureGroups); - } - textureGroups.push({ - startIndex, - count, - }); - } - } - }; - - let material = node.material; - if (Array.isArray(material)) { - for (let i = 0; i < material.length; i++) { - _pushMaterial(material[i]); - } - } else { - _pushMaterial(material); - } - - if (node.skeleton) { - if (!skeletons.includes(node.skeleton)) { - skeletons.push(node.skeleton); - } - } - - indexIndex += geometry.index.count; - } - }); - } - return { - meshes, - geometries, - materials, - textures, - textureGroupsMap, - skeletons, - }; - }; - - // collect objects + const getObjectKey = () => ''; + const mergeables = getMergeableObjects(model, getObjectKey); + const mergeable = mergeables[0]; const { - meshes, - geometries, - materials, - textures, - textureGroupsMap, skeletons, - } = _collectObjects(); - - // generate atlas layouts - const _packAtlases = () => { - const _attempt = (k, atlasSize) => { - const maxRectsPacker = new MaxRectsPacker(atlasSize, atlasSize, 1); - const rects = textures[k].map(t => { - const w = t.image.width; - const h = t.image.height; - const image = t.image; - const groups = textureGroupsMap.get(t); - return { - width: w, - height: h, - data: { - image, - groups, - }, - }; - }); - maxRectsPacker.addArray(rects); - let oversized = maxRectsPacker.bins.length > 1; - maxRectsPacker.bins.forEach(bin => { - bin.rects.forEach(rect => { - if (rect.oversized) { - oversized = true; - } - }); - }); - if (!oversized) { - return maxRectsPacker; - } else { - return null; - } - }; - - const atlases = {}; - for (const k of textureTypes) { - let atlas; - let atlasSize = startAtlasSize; - while (!(atlas = _attempt(k, atlasSize))) { - atlasSize *= 2; - } - atlases[k] = atlas; - } - return atlases; - }; - const atlases = atlasTextures ? _packAtlases() : null; - - // build attribute layouts - const _makeAttributeLayoutsFromGeometries = geometries => { - const geometry = geometries[0]; - const attributes = geometry.attributes; - const attributeLayouts = []; - for (const attributeName in attributes) { - const attribute = attributes[attributeName]; - const layout = new AttributeLayout(attributeName, attribute.array.constructor, attribute.itemSize); - attributeLayouts.push(layout); - } - - for (const layout of attributeLayouts) { - for (const g of geometries) { - let gAttribute = g.attributes[layout.name]; - if (!gAttribute) { - if (layout.name === 'skinIndex' || layout.name === 'skinWeight') { - gAttribute = new THREE.BufferAttribute(new Float32Array(g.attributes.position.count * layout.itemSize), layout.itemSize); - g.setAttribute(layout.name, gAttribute); - } else { - throw new Error('unknown layout'); - } - } - layout.count += gAttribute.count * gAttribute.itemSize; - } - } - - return attributeLayouts; - }; - const _makeMorphAttributeLayoutsFromGeometries = geometries => { - // create morph layouts - const morphAttributeLayouts = []; - for (const geometry of geometries) { - const morphAttributes = geometry.morphAttributes; - for (const morphAttributeName in morphAttributes) { - const morphAttribute = morphAttributes[morphAttributeName]; - let morphLayout = morphAttributeLayouts.find(l => l.name === morphAttributeName); - if (!morphLayout) { - morphLayout = new AttributeLayout(morphAttributeName, morphAttribute[0].array.constructor, morphAttribute[0].itemSize); - morphLayout.depth = morphAttribute.length; - morphAttributeLayouts.push(morphLayout); - } - } - } - - // compute morph layouts sizes - for (const morphLayout of morphAttributeLayouts) { - for (const g of geometries) { - const morphAttribute = g.morphAttributes[morphLayout.name]; - if (morphAttribute) { - morphLayout.count += morphAttribute[0].count * morphAttribute[0].itemSize; - // console.log('morph layout add 1', morphLayout.count, morphAttribute[0].count, morphAttribute[0].itemSize); - } else { - const matchingGeometryAttribute = g.attributes[morphLayout.name]; - if (matchingGeometryAttribute) { - morphLayout.count += matchingGeometryAttribute.count * matchingGeometryAttribute.itemSize; - // console.log('morph layout add 2', morphLayout.count, matchingGeometryAttribute.count, matchingGeometryAttribute.itemSize); - } else { - console.warn('geometry attributes desynced with morph attributes', g.attributes, morphAttribute); - } - } - } - } - return morphAttributeLayouts; - }; - const attributeLayouts = _makeAttributeLayoutsFromGeometries(geometries); - const morphAttributeLayouts = _makeMorphAttributeLayoutsFromGeometries(geometries); - - // validate attribute layouts - for (let i = 0; i < meshes.length; i++) { - const mesh = meshes[i]; - /* if (!mesh.skeleton) { - console.log('no skeleton', mesh);; - } */ - - const geometry = mesh.geometry; - if (!geometry.index) { - console.log('no index', mesh); - } - } - if (skeletons.length !== 1) { - console.log('did not have single skeleton', skeletons); - } - - /* { - let canvasOffsetX = 0; - let canvasOffsetY = 0; - for (const texture of textures.map) { - // copy the texture to canvas and attach it to the DOM - const canvas = document.createElement('canvas'); - canvas.width = texture.image.width; - canvas.height = texture.image.height; - const ctx = canvas.getContext('2d'); - ctx.drawImage(texture.image, 0, 0); - const displaySize = texture.image.width / 16; - canvas.style.cssText = `\ - position: fixed; - top: ${canvasOffsetY}px; - left: ${canvasOffsetX}px; - width: ${displaySize}px; - height: ${displaySize}px; - z-index: 10; - `; - document.body.appendChild(canvas); - canvasOffsetX += displaySize; - if (canvasOffsetX >= 256) { - canvasOffsetX = 0; - canvasOffsetY += 128; - } - } - } */ - - // console.log('got avatar breakout', meshes, geometries, materials, textures, skeletons, morphAttributeLayouts); - - // build geometry - const geometry = new THREE.BufferGeometry(); - // attributes - for (const layout of attributeLayouts) { - const attributeData = new layout.TypedArrayConstructor(layout.count); - const attribute = new THREE.BufferAttribute(attributeData, layout.itemSize); - for (const g of geometries) { - const gAttribute = g.attributes[layout.name]; - attributeData.set(gAttribute.array, layout.index); - layout.index += gAttribute.count * gAttribute.itemSize; - } - geometry.setAttribute(layout.name, attribute); - } - // morph attributes - for (const morphLayout of morphAttributeLayouts) { - const morphsArray = Array(morphLayout.depth); - for (let i = 0; i < morphLayout.depth; i++) { - const morphData = new morphLayout.TypedArrayConstructor(morphLayout.count); - let morphDataIndex = 0; - const morphAttribute = new THREE.BufferAttribute(morphData, morphLayout.itemSize); - morphsArray[i] = morphAttribute; - for (const g of geometries) { - let gMorphAttribute = g.morphAttributes[morphLayout.name]; - gMorphAttribute = gMorphAttribute && gMorphAttribute[i]; - if (gMorphAttribute) { - morphData.set(gMorphAttribute.array, morphDataIndex); - morphDataIndex += gMorphAttribute.count * gMorphAttribute.itemSize; - // console.log('new index 1', morphLayout.name, gMorphAttribute.array.some(n => n !== 0), morphDataIndex, gMorphAttribute.count, gMorphAttribute.itemSize); - } else { - const matchingAttribute = g.attributes[morphLayout.name]; - morphDataIndex += matchingAttribute.count * matchingAttribute.itemSize; - // console.log('new index 2', g, morphDataIndex, matchingAttribute.count, matchingAttribute.itemSize); - } - } - if (morphDataIndex !== morphLayout.count) { - console.warn('desynced morph data', morphLayout.name, morphDataIndex, morphLayout.count); - } - } - geometry.morphAttributes[morphLayout.name] = morphsArray; - } - // index - let indexCount = 0; - for (const g of geometries) { - indexCount += g.index.count; - } - const indexData = new Uint32Array(indexCount); - let positionOffset = 0; - let indexOffset = 0; - for (const g of geometries) { - const srcIndexData = g.index.array; - for (let i = 0; i < srcIndexData.length; i++) { - indexData[indexOffset++] = srcIndexData[i] + positionOffset; - } - positionOffset += g.attributes.position.count; - } - geometry.setIndex(new THREE.BufferAttribute(indexData, 1)); - geometry.morphTargetsRelative = true; - - /* const uv3Data = new Float32Array(geometry.attributes.uv.count * 4); - const uv3 = new THREE.BufferAttribute(uv3Data, 4); - geometry.setAttribute('uv3', uv3); */ - - /* // these uvs can be used to color code the mesh by material or texture - const uv4Data = new Float32Array(geometry.attributes.uv.count * 4); - const uv4 = new THREE.BufferAttribute(uv4Data, 4); - geometry.setAttribute('uv4', uv4); */ - - // verify - for (const layout of attributeLayouts) { - if (layout.index !== layout.count) { - console.log('bad layout count', layout.index, layout.count); - } - } - if (indexOffset !== indexCount) { - console.log('bad final index', indexOffset, indexCount); - } - - // draw the atlas - const _drawAtlases = () => { - const seenUvIndexes = new Map(); - const _drawAtlas = atlas => { - const canvas = document.createElement('canvas'); - const canvasSize = Math.min(atlas.width, textureSize); - const canvasScale = canvasSize / atlas.width; - canvas.width = canvasSize; - canvas.height = canvasSize; - const ctx = canvas.getContext('2d'); - - atlas.bins.forEach(bin => { - bin.rects.forEach(rect => { - const {x, y, width: w, height: h, data: {image, groups}} = rect; - // draw the image in the correct box on the canvas - const tx = x * canvasScale; - const ty = y * canvasScale; - const tw = w * canvasScale; - const th = h * canvasScale; - ctx.drawImage(image, 0, 0, image.width, image.height, tx, ty, tw, th); - - // const testUv = new THREE.Vector2(Math.random(), Math.random()); - for (const group of groups) { - const {startIndex, count} = group; - for (let i = 0; i < count; i++) { - const uvIndex = geometry.index.array[startIndex + i]; - - // XXX NOTE: this code is slightly wrong. it will generate a unified uv map (first come first served to the uv index) - // that means that the different maps might get the wrong uv. - // the diffuse map takes priority so it looks ok. - // the right way to do this is to have a separate uv map for each map. - if (!seenUvIndexes.get(uvIndex)) { - seenUvIndexes.set(uvIndex, true); - - localVector2D.fromArray(geometry.attributes.uv.array, uvIndex * 2); - localVector2D.multiply( - localVector2D2.set(tw/canvasSize, th/canvasSize) - ).add( - localVector2D2.set(tx/canvasSize, ty/canvasSize) - ); - localVector2D.toArray(geometry.attributes.uv.array, uvIndex * 2); - - /* localVector4D.set(x/atlas.width, y/atlas.height, w/atlas.width, h/atlas.height); - localVector4D.toArray(geometry.attributes.uv3.array, uvIndex * 4); */ - /* localVector4D.set(testUv.x, testUv.y, testUv.x, testUv.y); - localVector4D.toArray(geometry.attributes.uv4.array, uvIndex * 4); */ - } - } - } - }); - }); - atlas.image = canvas; - - return atlas; - }; - - // generate atlas for each map; they are all separate - const result = {}; - { - let canvasIndex = 0; - for (const k of textureTypes) { - const atlas = atlases[k]; - const atlas2 = _drawAtlas(atlas); - - /* const displaySize = 256; - atlas2.image.style.cssText = `\ - position: fixed; - top: 0; - left: ${canvasIndex * displaySize}px; - width: ${displaySize}px; - height: ${displaySize}px; - z-index: 10; - `; - document.body.appendChild(atlas2.image); */ - - result[k] = atlas2; - - canvasIndex++; - } - } - return result; - }; - const textureAtlases = atlasTextures ? _drawAtlases() : null; + morphTargetDictionaryArray, + morphTargetInfluencesArray, + } = mergeable; + const { + atlas, + atlasImages, + attributeLayouts, + morphAttributeLayouts, + geometry, + atlasTextures, + } = mergeGeometryTextureAtlas(mergeable, textureSize); + /* console.log('got atlas', { + atlas, + atlasImages, + attributeLayouts, + morphAttributeLayouts, + geometry, + atlasTextures, + }); */ // create material // const material = new THREE.MeshStandardMaterial(); const material = new THREE.MeshBasicMaterial(); - if (atlasTextures) { + // if (atlasTextures) { for (const k of textureTypes) { - const t = new THREE.Texture(textureAtlases[k].image); + /* const t = new THREE.Texture(textureAtlases[k].image); t.flipY = false; - t.needsUpdate = true; + t.needsUpdate = true; */ + const t = atlasTextures[k]; material[k] = t; } - } + // } material.roughness = 1; material.alphaTest = 0.1; material.transparent = true; @@ -450,13 +82,8 @@ const crunchAvatarModel = (model, options = {}) => { // create mesh const crunchedModel = new THREE.SkinnedMesh(geometry, material); crunchedModel.skeleton = skeletons[0]; - const deepestMorphMesh = meshes.find(m => (m.morphTargetInfluences ? m.morphTargetInfluences.length : 0) === morphAttributeLayouts[0].depth); - crunchedModel.morphTargetDictionary = deepestMorphMesh.morphTargetDictionary; - crunchedModel.morphTargetInfluences = deepestMorphMesh.morphTargetInfluences; - + crunchedModel.morphTargetDictionary = morphTargetDictionaryArray[0]; + crunchedModel.morphTargetInfluences = morphTargetInfluencesArray[0]; + crunchedModel.frustumCulled = false; return crunchedModel; -}; - -export { - crunchAvatarModel, }; \ No newline at end of file From 58f9b4d399ea522e3d3223254016bea860c8498f Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Fri, 22 Apr 2022 19:22:49 -0400 Subject: [PATCH 040/125] Add geometry-texture-atlas.js --- geometry-texture-atlas.js | 533 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 533 insertions(+) create mode 100644 geometry-texture-atlas.js diff --git a/geometry-texture-atlas.js b/geometry-texture-atlas.js new file mode 100644 index 0000000000..78d9ffcf10 --- /dev/null +++ b/geometry-texture-atlas.js @@ -0,0 +1,533 @@ +import * as THREE from 'three'; +import {MaxRectsPacker} from 'maxrects-packer'; +import {getRenderer} from './renderer.js'; +import {modUv} from './util.js'; + +const defaultTextureSize = 4096; +const startAtlasSize = 512; + +const localVector2D = new THREE.Vector2(); +const localVector2D2 = new THREE.Vector2(); + +const textureTypes = [ + 'map', + 'emissiveMap', + 'normalMap', + 'shadeTexture', +]; + +class AttributeLayout { + constructor(name, TypedArrayConstructor, itemSize) { + this.name = name; + this.TypedArrayConstructor = TypedArrayConstructor; + this.itemSize = itemSize; + + this.count = 0; + } + makeDefault(g) { + return new THREE.BufferAttribute( + new this.TypedArrayConstructor(g.attributes.position.count * this.itemSize), + this.itemSize + ); + } +} +class MorphAttributeLayout extends AttributeLayout { + constructor(name, TypedArrayConstructor, itemSize, arraySize) { + super(name, TypedArrayConstructor, itemSize); + this.arraySize = arraySize; + } + makeDefault(g) { + return Array(this.arraySize).fill(super.makeDefault(g)); + } +} + +const getObjectKeyDefault = (type, object, material) => { + const renderer = getRenderer(); + return [ + type, + renderer.getProgramCacheKey(object, material), + ].join(','); +}; +export const getMergeableObjects = (model, getObjectKey = getObjectKeyDefault) => { + const mergeables = new Map(); + model.traverse(o => { + if (o.isMesh && o.geometry.type === 'BufferGeometry') { + let type; + if (o.isSkinnedMesh) { + type = 'skinnedMesh'; + } else { + type = 'mesh'; + } + + const objectGeometry = o.geometry; + const morphTargetDictionary = o.morphTargetDictionary; + const morphTargetInfluences = o.morphTargetInfluences; + const objectMaterials = Array.isArray(o.material) ? o.material : [o.material]; + for (const objectMaterial of objectMaterials) { + const { + map = null, + emissiveMap = null, + normalMap = null, + shadeTexture = null, + } = objectMaterial; + const skeleton = o.skeleton ?? null; + + const key = getObjectKey(type, o, objectMaterial); + + let m = mergeables.get(key); + if (!m) { + m = { + type, + material: objectMaterial, + geometries: [], + maps: [], + emissiveMaps: [], + normalMaps: [], + shadeTextures: [], + skeletons: [], + morphTargetDictionaryArray: [], + morphTargetInfluencesArray: [], + }; + mergeables.set(key, m); + } + + m.geometries.push(objectGeometry); + m.maps.push(map); + m.emissiveMaps.push(emissiveMap); + m.normalMaps.push(normalMap); + m.shadeTextures.push(shadeTexture); + m.skeletons.push(skeleton); + m.morphTargetDictionaryArray.push(morphTargetDictionary); + m.morphTargetInfluencesArray.push(morphTargetInfluences); + } + } + }); + return Array.from(mergeables.values()); +}; + +export const mergeGeometryTextureAtlas = (mergeable, textureSize) => { + const { + type, + material, + geometries, + maps, + emissiveMaps, + normalMaps, + skeletons, + morphTargetDictionaryArray, + morphTargetInfluencesArray, + } = mergeable; + + // compute texture sizes + const textureSizes = maps.map((map, i) => { + const emissiveMap = emissiveMaps[i]; + const normalMap = normalMaps[i]; + + const maxSize = new THREE.Vector2(0, 0); + if (map) { + maxSize.x = Math.max(maxSize.x, map.image.width); + maxSize.y = Math.max(maxSize.y, map.image.height); + } + if (emissiveMap) { + maxSize.x = Math.max(maxSize.x, emissiveMap.image.width); + maxSize.y = Math.max(maxSize.y, emissiveMap.image.height); + } + if (normalMap) { + maxSize.x = Math.max(maxSize.x, normalMap.image.width); + maxSize.y = Math.max(maxSize.y, normalMap.image.height); + } + return maxSize; + }); + + // generate atlas layouts + const _packAtlases = () => { + const _attemptPack = (textureSizes, atlasSize) => { + const maxRectsPacker = new MaxRectsPacker(atlasSize, atlasSize, 1); + const rects = textureSizes.map((textureSize, index) => { + const {x: width, y: height} = textureSize; + return { + width, + height, + data: { + index, + }, + }; + }); + maxRectsPacker.addArray(rects); + let oversized = maxRectsPacker.bins.length > 1; + maxRectsPacker.bins.forEach(bin => { + bin.rects.forEach(rect => { + if (rect.oversized) { + oversized = true; + } + }); + }); + if (!oversized) { + return maxRectsPacker; + } else { + return null; + } + }; + + const hasTextures = textureSizes.some(textureSize => textureSize.x > 0 || textureSize.y > 0); + if (hasTextures) { + let atlas; + let atlasSize = startAtlasSize; + while (!(atlas = _attemptPack(textureSizes, atlasSize))) { + atlasSize *= 2; + } + return atlas; + } else { + return null; + } + }; + const atlas = _packAtlases(); + + // draw atlas images + const originalTextures = new Map(); // map of canvas to the texture that generated it + const _drawAtlasImages = atlas => { + const _getTexturesKey = textures => textures.map(t => t ? t.uuid : '').join(','); + const _drawAtlasImage = textures => { + if (atlas && textures.some(t => t !== null)) { + const canvasSize = Math.min(atlas.width, textureSize); + const canvasScale = canvasSize / atlas.width; + + const canvas = document.createElement('canvas'); + canvas.width = canvasSize; + canvas.height = canvasSize; + const ctx = canvas.getContext('2d'); + + atlas.bins.forEach(bin => { + bin.rects.forEach(rect => { + const {x, y, width: w, height: h, data: {index}} = rect; + const texture = textures[index]; + if (texture) { + const image = texture.image; + + // draw the image in the correct box on the canvas + const tx = x * canvasScale; + const ty = y * canvasScale; + const tw = w * canvasScale; + const th = h * canvasScale; + ctx.drawImage(image, 0, 0, image.width, image.height, tx, ty, tw, th); + + if (!originalTextures.has(canvas)) { + originalTextures.set(canvas, texture); + } + } + }); + }); + + return canvas; + } else { + return null; + } + }; + + const atlasImages = {}; + const atlasImagesMap = new Map(); // cache to alias identical textures + for (const textureType of textureTypes) { + const textures = mergeable[`${textureType}s`]; + const key = _getTexturesKey(textures); + + let atlasImage = atlasImagesMap.get(key); + if (atlasImage === undefined) { // cache miss + atlasImage = _drawAtlasImage(textures); + if (atlasImage !== null) { + atlasImage.key = key; + } + atlasImagesMap.set(key, atlasImage); + } + atlasImages[textureType] = atlasImage; + } + return atlasImages; + }; + const atlasImages = _drawAtlasImages(atlas); + + /* // XXX debug + { + const debugWidth = 300; + let textureTypeIndex = 0; + for (const textureType of textureTypes) { + const atlasImage = atlasImages[textureType]; + if (atlasImage) { + atlasImage.style.cssText = `\ + position: fixed; + top: ${mergeableIndex * debugWidth}px; + left: ${textureTypeIndex * debugWidth}px; + min-width: ${debugWidth}px; + max-width: ${debugWidth}px; + min-height: ${debugWidth}px; + z-index: 100; + `; + atlasImage.setAttribute('type', textureType); + document.body.appendChild(atlasImage); + textureTypeIndex++; + } + } + } */ + + // build attribute layouts + const _makeAttributeLayoutsFromGeometries = geometries => { + const attributeLayouts = []; + for (const g of geometries) { + const attributes = g.attributes; + for (const attributeName in attributes) { + const attribute = attributes[attributeName]; + let layout = attributeLayouts.find(layout => layout.name === attributeName); + if (layout) { + // sanity check that item size is the same + if (layout.itemSize !== attribute.itemSize) { + throw new Error(`attribute ${attributeName} has different itemSize: ${layout.itemSize}, ${attribute.itemSize}`); + } + } else { + layout = new AttributeLayout( + attributeName, + attribute.array.constructor, + attribute.itemSize + ); + attributeLayouts.push(layout); + } + + layout.count += attribute.count * attribute.itemSize; + } + } + return attributeLayouts; + }; + const attributeLayouts = _makeAttributeLayoutsFromGeometries(geometries); + + const _makeMorphAttributeLayoutsFromGeometries = geometries => { + // create morph layouts + const morphAttributeLayouts = []; + for (const g of geometries) { + const morphAttributes = g.morphAttributes; + for (const morphAttributeName in morphAttributes) { + const morphAttribute = morphAttributes[morphAttributeName]; + let morphLayout = morphAttributeLayouts.find(l => l.name === morphAttributeName); + if (!morphLayout) { + morphLayout = new MorphAttributeLayout( + morphAttributeName, + morphAttribute[0].array.constructor, + morphAttribute[0].itemSize, + morphAttribute.length + ); + morphAttributeLayouts.push(morphLayout); + } + + morphLayout.count += morphAttribute[0].count * morphAttribute[0].itemSize; + } + } + return morphAttributeLayouts; + }; + const morphAttributeLayouts = _makeMorphAttributeLayoutsFromGeometries(geometries); + // console.log('got attribute layouts', attributeLayouts, morphAttributeLayouts); + + const _forceGeometriesAttributeLayouts = (attributeLayouts, geometries) => { + for (const layout of attributeLayouts) { + for (const g of geometries) { + let gAttribute = g.attributes[layout.name]; + if (!gAttribute) { + if (layout.name === 'skinIndex' || layout.name === 'skinWeight') { + gAttribute = layout.makeDefault(g); + g.setAttribute(layout.name, gAttribute); + + layout.count += gAttribute.count * gAttribute.itemSize; + } else { + throw new Error(`unknown layout ${layout.name}`); + } + } + } + } + + for (const morphLayout of morphAttributeLayouts) { + for (const g of geometries) { + let morphAttribute = g.morphAttributes[morphLayout.name]; + if (!morphAttribute) { + // console.log('missing morph attribute', morphLayout, morphAttribute); + + morphAttribute = morphLayout.makeDefault(g); + g.morphAttributes[morphLayout.name] = morphAttribute; + + morphLayout.count += morphAttribute[0].count * morphAttribute[0].itemSize; + + /* if (layout.name === 'skinIndex' || layout.name === 'skinWeight') { + gAttribute = new THREE.BufferAttribute(new Float32Array(g.attributes.position.count * layout.itemSize), layout.itemSize); + g.setAttribute(layout.name, gAttribute); + } else { + throw new Error(`unknown layout ${layout.name}`); + } */ + } + } + } + }; + const _mergeAttributes = (geometry, geometries, attributeLayouts) => { + for (const layout of attributeLayouts) { + const attributeData = new layout.TypedArrayConstructor(layout.count); + const attribute = new THREE.BufferAttribute(attributeData, layout.itemSize); + let attributeDataIndex = 0; + for (const g of geometries) { + const gAttribute = g.attributes[layout.name]; + attributeData.set(gAttribute.array, attributeDataIndex); + attributeDataIndex += gAttribute.count * gAttribute.itemSize; + } + // sanity check + if (attributeDataIndex !== layout.count) { + console.warn('desynced attribute data 1', layout.name, attributeDataIndex, layout.count); + debugger; + } + geometry.setAttribute(layout.name, attribute); + } + }; + const _mergeMorphAttributes = (geometry, geometries, morphAttributeLayouts) => { + for (const morphLayout of morphAttributeLayouts) { + const morphsArray = Array(morphLayout.arraySize); + for (let i = 0; i < morphLayout.arraySize; i++) { + const morphData = new morphLayout.TypedArrayConstructor(morphLayout.count); + const morphAttribute = new THREE.BufferAttribute(morphData, morphLayout.itemSize); + morphsArray[i] = morphAttribute; + let morphDataIndex = 0; + for (const g of geometries) { + let gMorphAttribute = g.morphAttributes[morphLayout.name]; + gMorphAttribute = gMorphAttribute?.[i]; + if (gMorphAttribute) { + morphData.set(gMorphAttribute.array, morphDataIndex); + morphDataIndex += gMorphAttribute.count * gMorphAttribute.itemSize; + } else { + const matchingAttribute = g.attributes[morphLayout.name]; + morphDataIndex += matchingAttribute.count * matchingAttribute.itemSize; + } + } + // sanity check + if (morphDataIndex !== morphLayout.count) { + console.warn('desynced morph data 2', morphLayout.name, morphDataIndex, morphLayout.count); + } + } + geometry.morphAttributes[morphLayout.name] = morphsArray; + } + }; + const _mergeIndices = (geometry, geometries) => { + let indexCount = 0; + for (const g of geometries) { + indexCount += g.index.count; + } + const indexData = new Uint32Array(indexCount); + + let positionOffset = 0; + let indexOffset = 0; + for (const g of geometries) { + const srcIndexData = g.index.array; + for (let i = 0; i < srcIndexData.length; i++) { + indexData[indexOffset++] = srcIndexData[i] + positionOffset; + } + positionOffset += g.attributes.position.count; + } + geometry.setIndex(new THREE.BufferAttribute(indexData, 1)); + }; + const _remapGeometryUvs = (geometry, geometries) => { + if (atlas) { + let uvIndex = 0; + const geometryUvOffsets = geometries.map(g => { + const start = uvIndex; + const count = g.attributes.uv.count; + uvIndex += count; + return { + start, + count, + }; + }); + + const canvasSize = Math.min(atlas.width, textureSize); + const canvasScale = canvasSize / atlas.width; + atlas.bins.forEach(bin => { + bin.rects.forEach(rect => { + const {x, y, width: w, height: h, data: {index}} = rect; + + if (w > 0 && h > 0) { + const {start, count} = geometryUvOffsets[index]; + + const tx = x * canvasScale; + const ty = y * canvasScale; + const tw = w * canvasScale; + const th = h * canvasScale; + + for (let i = 0; i < count; i++) { + const uvIndex = start + i; + + localVector2D.fromArray(geometry.attributes.uv.array, uvIndex * 2); + modUv(localVector2D); + localVector2D + .multiply( + localVector2D2.set(tw/canvasSize, th/canvasSize) + ) + .add( + localVector2D2.set(tx/canvasSize, ty/canvasSize) + ); + localVector2D.toArray(geometry.attributes.uv.array, uvIndex * 2); + } + } + }); + }); + } + }; + const _mergeGeometries = geometries => { + const geometry = new THREE.BufferGeometry(); + geometry.morphTargetsRelative = true; + + _forceGeometriesAttributeLayouts(attributeLayouts, geometries); + _mergeAttributes(geometry, geometries, attributeLayouts); + _mergeMorphAttributes(geometry, geometries, morphAttributeLayouts); + _mergeIndices(geometry, geometries); + _remapGeometryUvs(geometry, geometries); + + return geometry; + }; + const geometry = _mergeGeometries(geometries); + // console.log('got geometry', geometry); + + const _makeAtlasTextures = atlasImages => { + const _makeAtlasTexture = atlasImage => { + const originalTexture = originalTextures.get(atlasImage); + + const t = new THREE.Texture(atlasImage); + t.minFilter = originalTexture.minFilter; + t.magFilter = originalTexture.magFilter; + t.wrapS = originalTexture.wrapS; + t.wrapT = originalTexture.wrapT; + t.mapping = originalTexture.mapping; + // t.encoding = originalTexture.encoding; + + t.flipY = false; + t.needsUpdate = true; + + return t; + }; + + const result = {}; + const textureMap = new Map(); // cache to alias identical textures + for (const textureType of textureTypes) { + const atlasImage = atlasImages[textureType]; + + if (atlasImage) { + let atlasTexture = textureMap.get(atlasImage.key); + if (atlasTexture === undefined) { // cache miss + atlasTexture = _makeAtlasTexture(atlasImage); + textureMap.set(atlasImage.key, atlasTexture); + } + result[textureType] = atlasTexture; + } else { + result[textureType] = null; + } + } + return result; + }; + const atlasTextures = atlasImages ? _makeAtlasTextures(atlasImages) : null; + + return { + atlas, + atlasImages, + attributeLayouts, + morphAttributeLayouts, + geometry, + atlasTextures, + }; +}; \ No newline at end of file From 7393da69916e0caeb06e42111480b9e033e55cc0 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Fri, 22 Apr 2022 19:23:42 -0400 Subject: [PATCH 041/125] Dead code cleanup --- avatar-cruncher.js | 49 +++++----------------------------------------- 1 file changed, 5 insertions(+), 44 deletions(-) diff --git a/avatar-cruncher.js b/avatar-cruncher.js index b4de98ba73..22ad32efa6 100644 --- a/avatar-cruncher.js +++ b/avatar-cruncher.js @@ -1,35 +1,10 @@ import * as THREE from 'three'; -import {MaxRectsPacker} from 'maxrects-packer'; -import {modUv} from './util.js'; -import {getMergeableObjects, mergeGeometryTextureAtlas} from './avatar-optimizer.js'; +import {getMergeableObjects, mergeGeometryTextureAtlas} from './geometry-texture-atlas.js'; const defaultTextureSize = 4096; -const startAtlasSize = 512; - -const localVector2D = new THREE.Vector2(); -const localVector2D2 = new THREE.Vector2(); -// const localVector4D = new THREE.Vector4(); -// const localVector4D2 = new THREE.Vector4(); - -class AttributeLayout { - constructor(name, TypedArrayConstructor, itemSize) { - this.name = name; - this.TypedArrayConstructor = TypedArrayConstructor; - this.itemSize = itemSize; - - this.count = 0; - } -} -class MorphAttributeLayout extends AttributeLayout { - constructor(name, TypedArrayConstructor, itemSize, arraySize) { - super(name, TypedArrayConstructor, itemSize); - this.arraySize = arraySize; - } -} export const crunchAvatarModel = (model, options = {}) => { - // const atlasTexturesEnabled = !!(options.textures ?? true); const textureSize = options.textureSize ?? defaultTextureSize; const textureTypes = [ @@ -54,27 +29,13 @@ export const crunchAvatarModel = (model, options = {}) => { geometry, atlasTextures, } = mergeGeometryTextureAtlas(mergeable, textureSize); - /* console.log('got atlas', { - atlas, - atlasImages, - attributeLayouts, - morphAttributeLayouts, - geometry, - atlasTextures, - }); */ // create material - // const material = new THREE.MeshStandardMaterial(); const material = new THREE.MeshBasicMaterial(); - // if (atlasTextures) { - for (const k of textureTypes) { - /* const t = new THREE.Texture(textureAtlases[k].image); - t.flipY = false; - t.needsUpdate = true; */ - const t = atlasTextures[k]; - material[k] = t; - } - // } + for (const k of textureTypes) { + const t = atlasTextures[k]; + material[k] = t; + } material.roughness = 1; material.alphaTest = 0.1; material.transparent = true; From 8445503d5b01f25891d415f5742ae379ffe835bf Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Fri, 22 Apr 2022 20:02:14 -0400 Subject: [PATCH 042/125] Avatar spriter export cleanup --- avatar-spriter.js | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/avatar-spriter.js b/avatar-spriter.js index 58d51ac399..58322c9682 100644 --- a/avatar-spriter.js +++ b/avatar-spriter.js @@ -1700,12 +1700,8 @@ const _renderSpriteImages = skinnedVrm => { return spriteImages; }; -function createSpriteMegaMesh(skinnedVrm) { +export const createSpriteMegaMesh = skinnedVrm => { const spriteImages = _renderSpriteImages(skinnedVrm); const spriteMegaAvatarMesh = new SpriteMegaAvatarMesh(spriteImages); return spriteMegaAvatarMesh; -} - -export { - createSpriteMegaMesh -}; +}; \ No newline at end of file From 28bffccd09c0d8d082daea0d1638b48bd5bdefe2 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Fri, 22 Apr 2022 20:03:04 -0400 Subject: [PATCH 043/125] Avatar spriter imports cleanup --- avatar-spriter.js | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/avatar-spriter.js b/avatar-spriter.js index 58322c9682..639d75ba19 100644 --- a/avatar-spriter.js +++ b/avatar-spriter.js @@ -6,6 +6,7 @@ const {useApp, useFrame, useLocalPlayer, usePhysics, useGeometries, useMaterials import {DoubleSidedPlaneGeometry, CameraGeometry} from './geometries.js'; import {WebaverseShaderMaterial} from './materials.js'; import Avatar from './avatars/avatars.js'; +import {mod, angleDifference} from './util.js'; const preview = false; // whether to draw debug meshes @@ -682,14 +683,6 @@ class SpriteMegaAvatarMesh extends THREE.Mesh { } } -function mod(a, n) { - return ((a % n) + n) % n; -} -function angleDifference(angle1, angle2) { - let a = angle2 - angle1; - a = mod(a + Math.PI, Math.PI*2) - Math.PI; - return a; -} const animationAngles = [ {name: 'left', angle: Math.PI/2}, {name: 'right', angle: -Math.PI/2}, From f1977212daabb4f7d90e4c78629fc71db75cea02 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Fri, 22 Apr 2022 20:06:11 -0400 Subject: [PATCH 044/125] Avatar spriter rendering cleanup --- avatar-spriter.js | 35 ++++++++++++++++++++++------------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/avatar-spriter.js b/avatar-spriter.js index 639d75ba19..4a2097de21 100644 --- a/avatar-spriter.js +++ b/avatar-spriter.js @@ -1,7 +1,7 @@ import * as THREE from 'three'; // import easing from './easing.js'; import metaversefile from 'metaversefile'; -const {useApp, useFrame, useLocalPlayer, usePhysics, useGeometries, useMaterials, useAvatarAnimations, useCleanup} = metaversefile; +// const {useApp, useFrame, useLocalPlayer, usePhysics, useGeometries, useMaterials, useAvatarAnimations, useCleanup} = metaversefile; // import * as BufferGeometryUtils from 'three/examples/jsm/utils/BufferGeometryUtils.js'; import {DoubleSidedPlaneGeometry, CameraGeometry} from './geometries.js'; import {WebaverseShaderMaterial} from './materials.js'; @@ -463,7 +463,9 @@ class SpriteMegaAvatarMesh extends THREE.Mesh { this.texs = texs; } setTexture(name) { - const tex = this.texs.find(t => t.name === name); + const spriteSpecs = getSpriteSpecs(); + const spriteSpecIndex = spriteSpecs.findIndex(spriteSpec => spriteSpec.name === name); + const tex = this.texs[spriteSpecIndex]; if (tex) { this.material.uniforms.uTex.value = tex; this.material.uniforms.uTex.needsUpdate = true; @@ -1500,7 +1502,7 @@ class AvatarSpriteDepthMaterial extends THREE.MeshNormalMaterial { } } -const _renderSpriteImages = skinnedVrm => { +export const renderSpriteImages = skinnedVrm => { const localRig = new Avatar(skinnedVrm, { fingers: true, hair: true, @@ -1576,12 +1578,13 @@ const _renderSpriteImages = skinnedVrm => { const canvas = document.createElement('canvas'); canvas.width = size; canvas.height = size; - // canvas.style.cssText = `position: fixed; top: ${canvasIndex2*1024}px; left: 0; width: 1024px; height: 1024px; z-index: 10;`; const ctx = canvas.getContext('2d'); - const tex = new THREE.Texture(canvas); - tex.name = name; - // tex.minFilter = THREE.NearestFilter; - // tex.magFilter = THREE.NearestFilter; + + let tex; + if (preview) { + tex = new THREE.Texture(canvas); + tex.name = name; + } let canvasIndex = 0; // console.log('generate sprite', name); @@ -1651,7 +1654,9 @@ const _renderSpriteImages = skinnedVrm => { 0, renderer.domElement.height - texSize, texSize, texSize, x * texSize, y * texSize, texSize, texSize ); - tex.needsUpdate = true; + if (preview) { + tex.needsUpdate = true; + } // await _timeout(50); } @@ -1687,14 +1692,18 @@ const _renderSpriteImages = skinnedVrm => { canvasIndex2++; - spriteImages.push(tex); + spriteImages.push(canvas); } - // console.timeEnd('render'); return spriteImages; }; export const createSpriteMegaMesh = skinnedVrm => { - const spriteImages = _renderSpriteImages(skinnedVrm); - const spriteMegaAvatarMesh = new SpriteMegaAvatarMesh(spriteImages); + const spriteImages = renderSpriteImages(skinnedVrm); + const spriteTextures = spriteImages.map(img => { + const t = new THREE.Texture(img); + t.needsUpdate = true; + return t; + }); + const spriteMegaAvatarMesh = new SpriteMegaAvatarMesh(spriteTextures); return spriteMegaAvatarMesh; }; \ No newline at end of file From 9a6d88fbd0075d039bdc160271ca9c8df16fa8fe Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Fri, 22 Apr 2022 20:20:51 -0400 Subject: [PATCH 045/125] Avatar spriter reset methods cleanup --- avatar-spriter.js | 22 +++------------------- 1 file changed, 3 insertions(+), 19 deletions(-) diff --git a/avatar-spriter.js b/avatar-spriter.js index 4a2097de21..ade8c88054 100644 --- a/avatar-spriter.js +++ b/avatar-spriter.js @@ -777,7 +777,6 @@ const getSpriteSpecs = () => { init({angle, avatar: localRig}) { let positionOffset = 0; return { - reset() {}, update(timestamp, timeDiffMs) { // positionOffset -= walkSpeed/1000 * timeDiffMs; @@ -801,7 +800,6 @@ const getSpriteSpecs = () => { init({angle, avatar: localRig}) { let positionOffset = 0; return { - reset() {}, update(timestamp, timeDiffMs) { positionOffset -= walkSpeed/1000 * timeDiffMs; @@ -825,7 +823,6 @@ const getSpriteSpecs = () => { init({angle, avatar: localRig}) { let positionOffset = 0; return { - reset() {}, update(timestamp, timeDiffMs) { positionOffset -= walkSpeed/1000 * timeDiffMs; @@ -849,7 +846,6 @@ const getSpriteSpecs = () => { init({angle, avatar: localRig}) { let positionOffset = 0; return { - reset() {}, update(timestamp, timeDiffMs) { positionOffset += walkSpeed/1000 * timeDiffMs; @@ -873,7 +869,6 @@ const getSpriteSpecs = () => { init({angle, avatar: localRig}) { let positionOffset = 0; return { - reset() {}, update(timestamp, timeDiffMs) { positionOffset += walkSpeed/1000 * timeDiffMs; @@ -897,7 +892,6 @@ const getSpriteSpecs = () => { init({angle, avatar: localRig}) { let positionOffset = 0; return { - reset() {}, update(timestamp, timeDiffMs) { positionOffset -= runSpeed/1000 * timeDiffMs; @@ -921,7 +915,6 @@ const getSpriteSpecs = () => { init({angle, avatar: localRig}) { let positionOffset = 0; return { - reset() {}, update(timestamp, timeDiffMs) { positionOffset -= runSpeed/1000 * timeDiffMs; @@ -945,7 +938,6 @@ const getSpriteSpecs = () => { init({angle, avatar: localRig}) { let positionOffset = 0; return { - reset() {}, update(timestamp, timeDiffMs) { positionOffset += runSpeed/1000 * timeDiffMs; @@ -969,7 +961,6 @@ const getSpriteSpecs = () => { init({angle, avatar: localRig}) { let positionOffset = 0; return { - reset() {}, update(timestamp, timeDiffMs) { positionOffset += runSpeed/1000 * timeDiffMs; @@ -1009,7 +1000,6 @@ const getSpriteSpecs = () => { localRig.update(timestamp, timeDiffMs); }, - reset() {}, cleanup() { localRig.crouchTime = maxCrouchTime; }, @@ -1038,7 +1028,6 @@ const getSpriteSpecs = () => { localRig.update(timestamp, timeDiffMs); }, - reset() {}, cleanup() { localRig.crouchTime = maxCrouchTime; }, @@ -1067,7 +1056,6 @@ const getSpriteSpecs = () => { localRig.update(timestamp, timeDiffMs); }, - reset() {}, cleanup() { localRig.crouchTime = maxCrouchTime; }, @@ -1096,7 +1084,6 @@ const getSpriteSpecs = () => { localRig.update(timestamp, timeDiffMs); }, - reset() {}, cleanup() { localRig.crouchTime = maxCrouchTime; }, @@ -1125,7 +1112,6 @@ const getSpriteSpecs = () => { localRig.update(timestamp, timeDiffMs); }, - reset() {}, cleanup() { localRig.crouchTime = maxCrouchTime; }, @@ -1175,8 +1161,7 @@ const getSpriteSpecs = () => { init({angle, avatar: localRig}) { let positionOffset = 0; - const defaultJumpTime = 0; - let jumpTime = defaultJumpTime; + let jumpTime = 0; // const jumpIncrementSpeed = 400; return { @@ -1204,7 +1189,7 @@ const getSpriteSpecs = () => { localRig.update(timestamp, timeDiffMs); }, reset() { - jumpTime = defaultJumpTime; + jumpTime = 0; }, cleanup() { localRig.jumpState = false; @@ -1612,7 +1597,6 @@ export const renderSpriteImages = skinnedVrm => { // pre-run the animation one cycle first, to stabilize the hair physics let now = 0; const startAngleIndex = angleIndex; - // localRig.springBoneManager.reset(); { const startNow = now; for (let j = 0; j < numFrames; j++) { @@ -1624,7 +1608,7 @@ export const renderSpriteImages = skinnedVrm => { } const initialPositionOffset = localRig.inputs.hmd.position.z; - spriteGenerator.reset(); + spriteGenerator.reset && spriteGenerator.reset(); // now perform the real capture const startNow = now; From fcd725763e4bffd8008543e158b9d19ba0fb1c2a Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Fri, 22 Apr 2022 20:33:12 -0400 Subject: [PATCH 046/125] Rename classes in avatar spriter --- avatar-spriter.js | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/avatar-spriter.js b/avatar-spriter.js index ade8c88054..c4d6bf4564 100644 --- a/avatar-spriter.js +++ b/avatar-spriter.js @@ -54,7 +54,7 @@ const alphaTest = 0.9; const planeSpriteMeshes = []; const spriteAvatarMeshes = []; -class SpritePlaneMesh extends THREE.Mesh { +class SpriteAnimationPlaneMesh extends THREE.Mesh { constructor(tex, {angleIndex}) { const planeSpriteMaterial = new WebaverseShaderMaterial({ uniforms: { @@ -189,7 +189,7 @@ class SpritePlaneMesh extends THREE.Mesh { return this; } } -class SpriteAvatarMesh extends THREE.Mesh { +class SpriteAnimation360Mesh extends THREE.Mesh { constructor(tex) { const avatarSpriteMaterial = new WebaverseShaderMaterial({ uniforms: { @@ -321,13 +321,12 @@ class SpriteAvatarMesh extends THREE.Mesh { this.customPostMaterial = new AvatarSpriteDepthMaterial(undefined, { tex, }); - // return spriteAvatarMesh; this.lastSpriteSpecName = ''; this.lastSpriteSpecTimestamp = 0; } } -class SpriteMegaAvatarMesh extends THREE.Mesh { +class SpriteAvatarMesh extends THREE.Mesh { constructor(texs) { const tex = texs[0]; const avatarMegaSpriteMaterial = new WebaverseShaderMaterial({ @@ -1646,7 +1645,7 @@ export const renderSpriteImages = skinnedVrm => { } if (preview) { - const planeSpriteMesh = new SpritePlaneMesh(tex, { + const planeSpriteMesh = new SpriteAnimationPlaneMesh(tex, { angleIndex: startAngleIndex, }); planeSpriteMesh.position.set(-canvasIndex*worldSize, 2, -canvasIndex2*worldSize); @@ -1662,7 +1661,7 @@ export const renderSpriteImages = skinnedVrm => { } if (preview) { - const spriteAvatarMesh = new SpriteAvatarMesh(tex); + const spriteAvatarMesh = new SpriteAnimation360Mesh(tex); spriteAvatarMesh.position.set( -canvasIndex*worldSize, 0, @@ -1681,13 +1680,13 @@ export const renderSpriteImages = skinnedVrm => { return spriteImages; }; -export const createSpriteMegaMesh = skinnedVrm => { +export const createSpriteAvatarMesh = skinnedVrm => { const spriteImages = renderSpriteImages(skinnedVrm); const spriteTextures = spriteImages.map(img => { const t = new THREE.Texture(img); t.needsUpdate = true; return t; }); - const spriteMegaAvatarMesh = new SpriteMegaAvatarMesh(spriteTextures); - return spriteMegaAvatarMesh; + const spriteAvatarMesh = new SpriteAvatarMesh(spriteTextures); + return spriteAvatarMesh; }; \ No newline at end of file From 5a51335500b13a054f95d68c41c769dabe334946 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Fri, 22 Apr 2022 20:33:26 -0400 Subject: [PATCH 047/125] Avatars dead import cleanup --- avatars/avatars.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/avatars/avatars.js b/avatars/avatars.js index 73476672a4..95b6983733 100644 --- a/avatars/avatars.js +++ b/avatars/avatars.js @@ -17,7 +17,7 @@ import { import { crouchMaxTime, // useMaxTime, - aimMaxTime, + // aimMaxTime, aimTransitionMaxTime, // avatarInterpolationFrameRate, // avatarInterpolationTimeDelay, From 868342dba09bba8de72e8bb0fe9ab56abd002e27 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Fri, 22 Apr 2022 20:34:37 -0400 Subject: [PATCH 048/125] Avatars hook in more async subavatars rendering --- avatars/avatars.js | 100 ++++++++++++++++++++++++++++++++++----------- 1 file changed, 77 insertions(+), 23 deletions(-) diff --git a/avatars/avatars.js b/avatars/avatars.js index 95b6983733..2c60ca6443 100644 --- a/avatars/avatars.js +++ b/avatars/avatars.js @@ -445,6 +445,7 @@ class Avatar { this.model = model; this.spriteMegaAvatarMesh = null; this.crunchedModel = null; + this.optimizedModel = null; this.options = options; this.vrmExtension = object?.parser?.json?.extensions?.VRM; @@ -879,6 +880,8 @@ class Avatar { this.microphoneWorker = null; this.volume = 0; + this.quality = 4; + this.shoulderTransforms.Start(); this.legsManager.Start(); @@ -1409,44 +1412,85 @@ class Avatar { return localEuler.y; } async setQuality(quality) { + this.quality = quality; + switch (this.quality) { + case 1: { + if (!this.spriteAvatarMesh) { + const skinnedMesh = await this.object.cloneVrm(); + this.spriteAvatarMesh = avatarSpriter.createSpriteAvatarMesh(skinnedMesh); + this.spriteAvatarMesh.visible = false; + this.spriteAvatarMesh.enabled = true; // XXX + scene.add(this.spriteAvatarMesh); + } + break; + } + case 2: { + if (!this.crunchedModel) { + this.crunchedModel = avatarCruncher.crunchAvatarModel(this.model); + this.crunchedModel.visible = false; + this.crunchedModel.enabled = true; // XXX + scene.add(this.crunchedModel); + } + break; + } + case 3: { + if (!this.optimizedModel) { + this.optimizedModel = avatarOptimizer.optimizeAvatarModel(this.model); + this.optimizedModel.visible = false; + this.optimizedModel.enabled = true; // XXX + scene.add(this.optimizedModel); + } + break; + } + case 3: + case 4: { + break; + } + default: { + throw new Error('unknown avatar quality: ' + this.quality); + } + } + + this.#updateVisibility(); + } + #updateVisibility() { this.model.visible = false; - if (this.crunchedModel) this.crunchedModel.visible = false; - if (this.spriteMegaAvatarMesh) this.spriteMegaAvatarMesh.visible = false; + if (this.spriteAvatarMesh) { + this.spriteAvatarMesh.visible = false; + } + if (this.crunchedModel) { + this.crunchedModel.visible = false; + } + if (this.optimizedModel) { + this.optimizedModel.visible = false; + } - switch (quality) { + switch (this.quality) { case 1: { - const skinnedMesh = await this.object.cloneVrm(); - this.spriteMegaAvatarMesh = this.spriteMegaAvatarMesh ?? avatarSpriter.createSpriteMegaMesh(skinnedMesh); - scene.add(this.spriteMegaAvatarMesh); - this.spriteMegaAvatarMesh.visible = true; + if (this.spriteAvatarMesh && this.spriteAvatarMesh.enabled) { + this.spriteAvatarMesh.visible = true; + } break; } case 2: { - this.crunchedModel = this.crunchedModel ?? avatarCruncher.crunchAvatarModel(this.model); - this.crunchedModel.frustumCulled = false; - scene.add(this.crunchedModel); - this.crunchedModel.visible = true; + if (this.crunchedModel && this.crunchedModel.enabled) { + this.crunchedModel.visible = true; + } break; } case 3: { - this.optimizedModel = avatarOptimizer.optimizeAvatarModel(this.model); - this.optimizedModel.traverse(o => { - if (o.isMesh) { - o.frustumCulled = false; - } - }); - scene.add(this.optimizedModel); - this.optimizedModel.visible = true; + if (this.optimizedModel && this.optimizedModel.enabled) { + this.optimizedModel.visible = true; + } break; } case 4: { - console.log('not implemented'); // XXX this.model.visible = true; break; } default: { - throw new Error('unknown avatar quality: ' + quality); + throw new Error('unknown avatar quality: ' + this.quality); } } } @@ -1867,8 +1911,8 @@ class Avatar { const _updateSubAvatars = () => { - if (this.spriteMegaAvatarMesh) { - this.spriteMegaAvatarMesh.update(timestamp, timeDiff, { + if (this.spriteAvatarMesh) { + this.spriteAvatarMesh.update(timestamp, timeDiff, { playerAvatar: this, camera, }); @@ -2187,6 +2231,16 @@ class Avatar { } */ destroy() { + if (this.spriteAvatarMesh) { + scene.remove(this.spriteAvatarMesh); + } + if (this.crunchedModel) { + scene.remove(this.crunchedModel); + } + if (this.optimizedModel) { + scene.remove(this.optimizedModel); + } + this.setAudioEnabled(false); } } From 136ba2205a13548742f24ffc56f5fc4610ce2216 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Thu, 28 Jul 2022 03:30:54 -0400 Subject: [PATCH 049/125] Add new exporters.js --- exporters.js | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 exporters.js diff --git a/exporters.js b/exporters.js new file mode 100644 index 0000000000..ebb364ff10 --- /dev/null +++ b/exporters.js @@ -0,0 +1,14 @@ +import {GLTFExporter} from 'three/examples/jsm/exporters/GLTFExporter.js'; +import {memoize} from './util.js'; + +const _gltfExporter = memoize(() => { + const gltfExporter = new GLTFExporter(); + return gltfExporter; +}); + +const exporters = { + get gltfExporter() { + return _gltfExporter(); + }, +}; +export default exporters; \ No newline at end of file From 4f6e6b28e725180c466460592ceda5068003a87d Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Thu, 28 Jul 2022 03:31:40 -0400 Subject: [PATCH 050/125] Add new avatar renderer --- avatars/avatar-renderer.js | 400 +++++++++++++++++++++++++++++++++++++ 1 file changed, 400 insertions(+) create mode 100644 avatars/avatar-renderer.js diff --git a/avatars/avatar-renderer.js b/avatars/avatar-renderer.js new file mode 100644 index 0000000000..6837bb18dc --- /dev/null +++ b/avatars/avatar-renderer.js @@ -0,0 +1,400 @@ +/* this file implements avatar optimization and THREE.js Object management + rendering */ +import * as THREE from 'three'; +import * as avatarOptimizer from '../avatar-optimizer.js'; +import * as avatarCruncher from '../avatar-cruncher.js'; +import * as avatarSpriter from '../avatar-spriter.js'; +import offscreenEngineManager from '../offscreen-engine-manager.js'; +import loaders from '../loaders.js'; +import { + defaultAvatarQuality, +} from '../constants.js'; + +const avatarPlaceholderImagePromise = (async () => { + const avatarPlaceholderImage = new Image(); + avatarPlaceholderImage.src = '/avatars/images/user.png'; + await new Promise((accept, reject) => { + avatarPlaceholderImage.onload = accept; + avatarPlaceholderImage.onerror = reject; + }); + return avatarPlaceholderImage; +})(); +const waitForAvatarPlaceholderImage = () => avatarPlaceholderImagePromise; +const avatarPlaceholderTexture = new THREE.Texture(); +(async() => { + const avatarPlaceholderImage = await waitForAvatarPlaceholderImage(); + avatarPlaceholderTexture.image = avatarPlaceholderImage; + avatarPlaceholderTexture.needsUpdate = true; +})(); +const geometry = new THREE.PlaneBufferGeometry(0.1, 0.1); +const material = new THREE.MeshBasicMaterial({ + map: avatarPlaceholderTexture, +}); +const _makeAvatarPlaceholderMesh = () => { + const mesh = new THREE.Mesh(geometry, material); + return mesh; +}; +const _bindSkeleton = (dstModel, srcObject) => { + console.log('bind skeleton', dstModel, srcObject); + const srcModel = srcObject.scene; + + const _findBoneInSrc = (srcBoneName) => { + let result = null; + const _recurse = o => { + if (o.isBone && o.name === srcBoneName) { + result = o; + return false; + } + for (const child of o.children) { + if (_recurse(child) === false) { + return false; + } + } + return true; + }; + _recurse(srcModel); + return result; + }; + const _findSrcSkeletonFromBoneName = (boneName) => { + let skeleton = null; + + const bone = _findBoneInSrc(boneName); + if (bone !== null) { + const _recurse = o => { + if (o.isSkinnedMesh) { + if (o.skeleton.bones.includes(bone)) { + skeleton = o.skeleton; + return false; + } + } + for (const child of o.children) { + if (_recurse(child) === false) { + return false; + } + } + return true; + }; + _recurse(srcModel); + } + + return skeleton; + }; + const _findSrcSkeletonFromDstSkeleton = skeleton => { + return _findSrcSkeletonFromBoneName(skeleton.bones[0].name); + }; + const _findSkinnedMeshInSrc = () => { + let result = null; + const _recurse = o => { + if (o.isSkinnedMesh) { + result = o; + return false; + } + for (const child of o.children) { + if (_recurse(child) === false) { + return false; + } + } + return true; + }; + _recurse(srcModel); + return result; + }; + dstModel.traverse(o => { + if (o.isSkinnedMesh) { + // bind the skeleton + const {skeleton: dstSkeleton} = o; + const srcSkeleton = _findSrcSkeletonFromDstSkeleton(dstSkeleton); + o.skeleton = srcSkeleton; + } + if (o.isMesh) { + // also bind the blend shapes + // skinnedMesh.skeleton = skeletons[0]; + const skinnedMesh = _findSkinnedMeshInSrc(); + // console.log('map blend shapes', o, skinnedMesh); + o.morphTargetDictionary = skinnedMesh.morphTargetDictionary; + o.morphTargetInfluences = skinnedMesh.morphTargetInfluences; + // o.geometry.morphAttributes = skinnedMesh.geometry.morphAttributes; + // o.morphAttributes = skinnedMesh.morphAttributes; + // o.morphAttributesRelative = skinnedMesh.morphAttributesRelative; + + o.geometry.morphAttributes.position.forEach(attr => { + attr.onUploadCallback = () => { + console.log('upload callback'); + }; + + for (let i = 0; i < attr.array.length; i++) { + // if ((attr.array[i]) != 0) { + attr.array[i] *= 10; + // attr.array[i] = Math.random(); + // } + } + }); + + // o.onBeforeRender = () => {debugger;} + o.material.onBeforeCompile = (shader) => { + console.log('compile avatar shader', shader); + }; + // window.o = o; + + const _frame = () => { + window.requestAnimationFrame(_frame); + + // console.log('got frame', o.morphTargetInfluences.join(',')); + }; + _frame(); + } + }); +}; + +export class AvatarRenderer { + constructor(object, { + quality = defaultAvatarQuality, + } = {}) { + this.object = object; + this.quality = quality; + + // + + this.scene = new THREE.Object3D(); + this.placeholderMesh = _makeAvatarPlaceholderMesh(); + + // + + this.createSpriteAvatarMesh = offscreenEngineManager.createFunction([ + `\ + import * as THREE from 'three'; + import * as avatarSpriter from './avatar-spriter.js'; + import loaders from './loaders.js'; + + `, + async function(arrayBuffer, srcUrl) { + if (!arrayBuffer) { + debugger; + } + + const parseVrm = (arrayBuffer, srcUrl) => new Promise((accept, reject) => { + const { gltfLoader } = loaders; + gltfLoader.parse(arrayBuffer, srcUrl, object => { + accept(object.scene); + }, reject); + }); + + const skinnedMesh = await parseVrm(arrayBuffer, srcUrl); + if (!skinnedMesh) { + debugger; + } + const textureImages = avatarSpriter.renderSpriteImages(skinnedMesh); + return textureImages; + } + ]); + this.crunchAvatarModel = offscreenEngineManager.createFunction([ + `\ + import * as THREE from 'three'; + import * as avatarCruncher from './avatar-cruncher.js'; + import loaders from './loaders.js'; + + `, + async function(arrayBuffer, srcUrl) { + if (!arrayBuffer) { + debugger; + } + + const parseVrm = (arrayBuffer, srcUrl) => new Promise((accept, reject) => { + const { gltfLoader } = loaders; + gltfLoader.parse(arrayBuffer, srcUrl, object => { + accept(object.scene); + }, reject); + }); + + const model = await parseVrm(arrayBuffer, srcUrl); + if (!model) { + debugger; + } + const glbData = await avatarCruncher.crunchAvatarModel(model); + return glbData; + } + ]); + this.optimizeAvatarModel = offscreenEngineManager.createFunction([ + `\ + import * as THREE from 'three'; + import * as avatarOptimizer from './avatar-optimizer.js'; + import loaders from './loaders.js'; + import exporters from './exporters.js'; + + `, + async function(arrayBuffer, srcUrl) { + if (!arrayBuffer) { + debugger; + } + + const parseVrm = (arrayBuffer, srcUrl) => new Promise((accept, reject) => { + const { gltfLoader } = loaders; + gltfLoader.parse(arrayBuffer, srcUrl, object => { + accept(object); + }, reject); + }); + + const object = await parseVrm(arrayBuffer, srcUrl); + + const model = object.scene; + const glbData = await avatarOptimizer.optimizeAvatarModel(model); + + /* const glbData = await new Promise((accept, reject) => { + const {gltfExporter} = exporters; + gltfExporter.parse( + object.scene, + function onCompleted(arrayBuffer) { + accept(arrayBuffer); + }, function onError(error) { + reject(error); + }, + { + binary: true, + includeCustomExtensions: true, + }, + ); + }); */ + + // const parsedObject = await parseVrm(glbData, srcUrl); + // console.log('compare skeletons', object, parsedObject); + + return glbData; + } + ]); + + this.setQuality(quality); + } + async setQuality(quality) { + this.quality = quality; + + // XXX destroy the old avatars? + this.scene.clear(); + this.scene.add(this.placeholderMesh); + + // console.log('set quality', quality, new Error().stack); + + switch (this.quality) { + case 1: { + if (!this.spriteAvatarMesh) { + if (!this.object.arrayBuffer) { + debugger; + } + const textureImages = await this.createSpriteAvatarMesh([this.object.arrayBuffer, this.object.srcUrl]); + this.spriteAvatarMesh = avatarSpriter.createSpriteAvatarMeshFromTextures(textureImages); + // this.spriteAvatarMesh.visible = false; + // this.spriteAvatarMesh.enabled = true; // XXX + this.scene.add(this.spriteAvatarMesh); + } + break; + } + case 2: { + if (!this.crunchedModel) { + if (!this.object.arrayBuffer) { + debugger; + } + const glbData = await this.crunchAvatarModel([this.object.arrayBuffer, this.object.srcUrl]); + const glb = await new Promise((accept, reject) => { + const {gltfLoader} = loaders; + gltfLoader.parse(glbData, this.object.srcUrl, object => { + accept(object.scene); + }, reject); + }); + this.crunchedModel = glb; + // this.crunchedModel.visible = false; + // this.crunchedModel.enabled = true; // XXX + this.scene.add(this.crunchedModel); + } + break; + } + case 3: { + if (!this.optimizedModel) { + if (!this.object.arrayBuffer) { + debugger; + } + const glbData = await this.optimizeAvatarModel([this.object.arrayBuffer, this.object.srcUrl]); + const glb = await new Promise((accept, reject) => { + const {gltfLoader} = loaders; + gltfLoader.parse(glbData, this.object.srcUrl, object => { + accept(object.scene); + }, reject); + }); + _bindSkeleton(glb, this.object); + /* glb.traverse(o => { + if (o.isMesh) { + console.log('set flag', o); + o.onBeforeRender = () => { + debugger; + }; + o.frustumCulled = false; + + for (const k in o.material) { + const v = o.material[k]; + if (v?.isTexture) { + v.onUpdate = () => { + debugger; + }; + } + } + } + }); */ + this.optimizedModel = glb; + // this.optimizedModel.visible = false; + // this.optimizedModel.enabled = true; // XXX + this.scene.add(this.optimizedModel); + + // window.optimizedModel = this.optimizedModel; + } + break; + } + case 4: { + break; + } + default: { + throw new Error('unknown avatar quality: ' + this.quality); + } + } + + this.scene.remove(this.placeholderMesh); + + // this.#updateVisibility(); + } + /* #updateVisibility() { + this.object.visible = false; + if (this.spriteAvatarMesh) { + this.spriteAvatarMesh.visible = false; + } + if (this.crunchedModel) { + this.crunchedModel.visible = false; + } + if (this.optimizedModel) { + this.optimizedModel.visible = false; + } + + switch (this.quality) { + case 1: { + if (this.spriteAvatarMesh && this.spriteAvatarMesh.enabled) { + this.spriteAvatarMesh.visible = true; + } + break; + } + case 2: { + if (this.crunchedModel && this.crunchedModel.enabled) { + this.crunchedModel.visible = true; + } + break; + } + case 3: { + if (this.optimizedModel && this.optimizedModel.enabled) { + this.optimizedModel.visible = true; + } + break; + } + case 4: { + this.object.visible = true; + break; + } + default: { + throw new Error('unknown avatar quality: ' + this.quality); + } + } + } */ +} \ No newline at end of file From b5b2e940d65e7b84b48cc81cf3c53a987a7e4cc9 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Thu, 28 Jul 2022 03:32:15 -0400 Subject: [PATCH 051/125] Latch new avatar renderer in avatars.js --- avatar-cruncher.js | 24 ++++++--- avatar-optimizer.js | 123 +++++++++++++++++++++++++++++++++++++------ avatar-spriter.js | 7 ++- avatars/avatars.js | 110 +++++++------------------------------- constants.js | 2 + metaversefile-api.js | 4 +- 6 files changed, 151 insertions(+), 119 deletions(-) diff --git a/avatar-cruncher.js b/avatar-cruncher.js index 22ad32efa6..9f29cc5948 100644 --- a/avatar-cruncher.js +++ b/avatar-cruncher.js @@ -1,10 +1,10 @@ import * as THREE from 'three'; - import {getMergeableObjects, mergeGeometryTextureAtlas} from './geometry-texture-atlas.js'; +import exporters from './exporters.js'; const defaultTextureSize = 4096; -export const crunchAvatarModel = (model, options = {}) => { +export const crunchAvatarModel = async (model, options = {}) => { const textureSize = options.textureSize ?? defaultTextureSize; const textureTypes = [ @@ -22,10 +22,10 @@ export const crunchAvatarModel = (model, options = {}) => { morphTargetInfluencesArray, } = mergeable; const { - atlas, - atlasImages, - attributeLayouts, - morphAttributeLayouts, + // atlas, + // atlasImages, + // attributeLayouts, + // morphAttributeLayouts, geometry, atlasTextures, } = mergeGeometryTextureAtlas(mergeable, textureSize); @@ -46,5 +46,15 @@ export const crunchAvatarModel = (model, options = {}) => { crunchedModel.morphTargetDictionary = morphTargetDictionaryArray[0]; crunchedModel.morphTargetInfluences = morphTargetInfluencesArray[0]; crunchedModel.frustumCulled = false; - return crunchedModel; + + const glbData = await new Promise((accept, reject) => { + const {gltfExporter} = exporters; + gltfExporter.parse(crunchedModel, function onCompleted(arrayBuffer) { + accept(arrayBuffer); + }, function onError(error) { + reject(error); + } + ); + }); + return glbData; }; \ No newline at end of file diff --git a/avatar-optimizer.js b/avatar-optimizer.js index e8ffb40dad..61c2423948 100644 --- a/avatar-optimizer.js +++ b/avatar-optimizer.js @@ -2,6 +2,7 @@ import * as THREE from 'three'; import {MaxRectsPacker} from 'maxrects-packer'; import {getRenderer} from './renderer.js'; import {modUv} from './util.js'; +import exporters from './exporters.js'; const defaultTextureSize = 4096; const startAtlasSize = 512; @@ -48,6 +49,24 @@ const getObjectKeyDefault = (type, object, material) => { renderer.getProgramCacheKey(object, material), ].join(','); }; +export const getSkeletons = (object) => { + const skeletons = []; + object.traverse((o) => { + if (o.isSkeleton) { + skeletons.push(o); + } + }); + return skeletons; +}; +export const getBones = (object) => { + const bones = []; + object.traverse((o) => { + if (o.isBone) { + bones.push(o); + } + }); + return bones; +} export const getMergeableObjects = (model, getObjectKey = getObjectKeyDefault) => { const mergeables = new Map(); model.traverse(o => { @@ -107,15 +126,15 @@ export const getMergeableObjects = (model, getObjectKey = getObjectKeyDefault) = export const mergeGeometryTextureAtlas = (mergeable, textureSize) => { const { - type, - material, + // type, + // material, geometries, maps, emissiveMaps, normalMaps, - skeletons, - morphTargetDictionaryArray, - morphTargetInfluencesArray, + // skeletons, + // morphTargetDictionaryArray, + // morphTargetInfluencesArray, } = mergeable; // compute texture sizes @@ -297,14 +316,18 @@ export const mergeGeometryTextureAtlas = (mergeable, textureSize) => { const attributeLayouts = _makeAttributeLayoutsFromGeometries(geometries); const _makeMorphAttributeLayoutsFromGeometries = geometries => { + console.log('got geomtries', geometries); + // create morph layouts const morphAttributeLayouts = []; for (const g of geometries) { const morphAttributes = g.morphAttributes; + // console.log('got keys', Object.keys(morphAttributes)); for (const morphAttributeName in morphAttributes) { const morphAttribute = morphAttributes[morphAttributeName]; let morphLayout = morphAttributeLayouts.find(l => l.name === morphAttributeName); if (!morphLayout) { + // console.log('missing morph layout', morphAttributeName, morphAttribute); morphLayout = new MorphAttributeLayout( morphAttributeName, morphAttribute[0].array.constructor, @@ -317,6 +340,11 @@ export const mergeGeometryTextureAtlas = (mergeable, textureSize) => { morphLayout.count += morphAttribute[0].count * morphAttribute[0].itemSize; } } + + /* for (const g of geometries) { + morphLayout.count += morphAttribute[0].count * morphAttribute[0].itemSize; + } */ + return morphAttributeLayouts; }; const morphAttributeLayouts = _makeMorphAttributeLayoutsFromGeometries(geometries); @@ -328,6 +356,9 @@ export const mergeGeometryTextureAtlas = (mergeable, textureSize) => { let gAttribute = g.attributes[layout.name]; if (!gAttribute) { if (layout.name === 'skinIndex' || layout.name === 'skinWeight') { + console.log('force layout', layout); + debugger; + gAttribute = layout.makeDefault(g); g.setAttribute(layout.name, gAttribute); @@ -343,7 +374,8 @@ export const mergeGeometryTextureAtlas = (mergeable, textureSize) => { for (const g of geometries) { let morphAttribute = g.morphAttributes[morphLayout.name]; if (!morphAttribute) { - // console.log('missing morph attribute', morphLayout, morphAttribute); + console.log('missing morph attribute', morphLayout, morphAttribute); + debugger; morphAttribute = morphLayout.makeDefault(g); g.morphAttributes[morphLayout.name] = morphAttribute; @@ -386,13 +418,34 @@ export const mergeGeometryTextureAtlas = (mergeable, textureSize) => { const morphAttribute = new THREE.BufferAttribute(morphData, morphLayout.itemSize); morphsArray[i] = morphAttribute; let morphDataIndex = 0; + + /* const geometries2 = geometries.slice(); + // randomize the order of geometries2 + for (let j = 0; j < geometries2.length; j++) { + const j2 = Math.floor(Math.random() * geometries2.length); + const tmp = geometries2[j]; + geometries2[j] = geometries2[j2]; + geometries2[j2] = tmp; + } */ + for (const g of geometries) { let gMorphAttribute = g.morphAttributes[morphLayout.name]; gMorphAttribute = gMorphAttribute?.[i]; if (gMorphAttribute) { morphData.set(gMorphAttribute.array, morphDataIndex); + + const nz = morphData.filter(n => n != 0); + console.log('case 1', nz.join(',')); + + /* for (let i = 0; i < morphData.length; i++) { + morphData[i] = Math.random(); + } */ + if ((gMorphAttribute.count * gMorphAttribute.itemSize) !== gMorphAttribute.array.length) { + debugger; + } morphDataIndex += gMorphAttribute.count * gMorphAttribute.itemSize; } else { + console.log('case 2'); const matchingAttribute = g.attributes[morphLayout.name]; morphDataIndex += matchingAttribute.count * matchingAttribute.itemSize; } @@ -532,7 +585,13 @@ export const mergeGeometryTextureAtlas = (mergeable, textureSize) => { }; }; -export const optimizeAvatarModel = (model, options = {}) => { +export const optimizeAvatarModel = async (model, options = {}) => { + /* if (!model) { + debugger; + } + if (!model.traverse) { + debugger; + } */ const textureSize = options.textureSize ?? defaultTextureSize; const mergeables = getMergeableObjects(model); @@ -541,19 +600,19 @@ export const optimizeAvatarModel = (model, options = {}) => { const { type, material, - geometries, - maps, - emissiveMaps, - normalMaps, + // geometries, + // maps, + // emissiveMaps, + // normalMaps, skeletons, morphTargetDictionaryArray, morphTargetInfluencesArray, } = mergeable; const { - atlas, - atlasImages, - attributeLayouts, - morphAttributeLayouts, + // atlas, + // atlasImages, + // attributeLayouts, + // morphAttributeLayouts, geometry, atlasTextures, } = mergeGeometryTextureAtlas(mergeable, textureSize); @@ -606,5 +665,37 @@ export const optimizeAvatarModel = (model, options = {}) => { for (const mesh of mergedMeshes) { object.add(mesh); } - return object; + + /* // also need skeletons or else the parse will crash + const skeletons = getSkeletons(model); + for (const skeleton of skeletons) { + object.add(skeleton); + } */ + + // same as above, but for bones + const bones = getBones(model); + for (const bone of bones) { + object.add(bone); + } + // console.log('got bones', model, bones); + + const glbData = await new Promise((accept, reject) => { + const {gltfExporter} = exporters; + gltfExporter.parse( + object, + function onCompleted(arrayBuffer) { + accept(arrayBuffer); + }, function onError(error) { + reject(error); + }, + { + binary: true, + onlyVisible: false, + // forceIndices: true, + truncateDrawRange: false, + includeCustomExtensions: true, + }, + ); + }); + return glbData; }; \ No newline at end of file diff --git a/avatar-spriter.js b/avatar-spriter.js index c4d6bf4564..6711423bb4 100644 --- a/avatar-spriter.js +++ b/avatar-spriter.js @@ -1680,8 +1680,7 @@ export const renderSpriteImages = skinnedVrm => { return spriteImages; }; -export const createSpriteAvatarMesh = skinnedVrm => { - const spriteImages = renderSpriteImages(skinnedVrm); +export const createSpriteAvatarMeshFromTextures = spriteImages => { const spriteTextures = spriteImages.map(img => { const t = new THREE.Texture(img); t.needsUpdate = true; @@ -1689,4 +1688,8 @@ export const createSpriteAvatarMesh = skinnedVrm => { }); const spriteAvatarMesh = new SpriteAvatarMesh(spriteTextures); return spriteAvatarMesh; +}; +export const createSpriteAvatarMesh = skinnedVrm => { + const spriteImages = renderSpriteImages(skinnedVrm); + return createSpriteAvatarMeshFromTextures(spriteImages); }; \ No newline at end of file diff --git a/avatars/avatars.js b/avatars/avatars.js index 2c60ca6443..6fa232556f 100644 --- a/avatars/avatars.js +++ b/avatars/avatars.js @@ -24,9 +24,7 @@ import { // avatarInterpolationNumFrames, } from '../constants.js'; // import {FixedTimeStep} from '../interpolants.js'; -import * as avatarOptimizer from '../avatar-optimizer.js'; -import * as avatarCruncher from '../avatar-cruncher.js'; -import * as avatarSpriter from '../avatar-spriter.js'; +import {AvatarRenderer} from './avatar-renderer.js'; // import * as sceneCruncher from '../scene-cruncher.js'; import { idleFactorSpeed, @@ -398,8 +396,6 @@ const _makeDebugMesh = (avatar) => { // const testMesh = new THREE.Mesh(g, m); // scene.add(testMesh); - - class Avatar { constructor(object, options = {}) { if (!object) { @@ -442,7 +438,17 @@ class Avatar { return o; })(); - this.model = model; + this.model = model; // XXX still needed? + this.model.visible = false; + + { + this.renderer = new AvatarRenderer(object); + scene.add(this.renderer.scene); // XXX debug + this.renderer.scene.updateMatrixWorld(); + globalThis.avatarRenderer = this.renderer; + globalThis.scene = scene; + } + this.spriteMegaAvatarMesh = null; this.crunchedModel = null; this.optimizedModel = null; @@ -461,10 +467,10 @@ class Avatar { flipZ, flipY, flipLeg, - tailBones, - armature, - armatureQuaternion, - armatureMatrixInverse, + // tailBones, + // armature, + // armatureQuaternion, + // armatureMatrixInverse, // retargetedAnimations, } = Avatar.bindAvatar(object); this.skinnedMeshes = skinnedMeshes; @@ -880,7 +886,7 @@ class Avatar { this.microphoneWorker = null; this.volume = 0; - this.quality = 4; + // this.quality = 4; this.shoulderTransforms.Start(); this.legsManager.Start(); @@ -1412,87 +1418,7 @@ class Avatar { return localEuler.y; } async setQuality(quality) { - this.quality = quality; - - switch (this.quality) { - case 1: { - if (!this.spriteAvatarMesh) { - const skinnedMesh = await this.object.cloneVrm(); - this.spriteAvatarMesh = avatarSpriter.createSpriteAvatarMesh(skinnedMesh); - this.spriteAvatarMesh.visible = false; - this.spriteAvatarMesh.enabled = true; // XXX - scene.add(this.spriteAvatarMesh); - } - break; - } - case 2: { - if (!this.crunchedModel) { - this.crunchedModel = avatarCruncher.crunchAvatarModel(this.model); - this.crunchedModel.visible = false; - this.crunchedModel.enabled = true; // XXX - scene.add(this.crunchedModel); - } - break; - } - case 3: { - if (!this.optimizedModel) { - this.optimizedModel = avatarOptimizer.optimizeAvatarModel(this.model); - this.optimizedModel.visible = false; - this.optimizedModel.enabled = true; // XXX - scene.add(this.optimizedModel); - } - break; - } - case 3: - case 4: { - break; - } - default: { - throw new Error('unknown avatar quality: ' + this.quality); - } - } - - this.#updateVisibility(); - } - #updateVisibility() { - this.model.visible = false; - if (this.spriteAvatarMesh) { - this.spriteAvatarMesh.visible = false; - } - if (this.crunchedModel) { - this.crunchedModel.visible = false; - } - if (this.optimizedModel) { - this.optimizedModel.visible = false; - } - - switch (this.quality) { - case 1: { - if (this.spriteAvatarMesh && this.spriteAvatarMesh.enabled) { - this.spriteAvatarMesh.visible = true; - } - break; - } - case 2: { - if (this.crunchedModel && this.crunchedModel.enabled) { - this.crunchedModel.visible = true; - } - break; - } - case 3: { - if (this.optimizedModel && this.optimizedModel.enabled) { - this.optimizedModel.visible = true; - } - break; - } - case 4: { - this.model.visible = true; - break; - } - default: { - throw new Error('unknown avatar quality: ' + this.quality); - } - } + await this.renderer.setQuality(quality); } lerpShoulderTransforms() { if (this.shoulderTransforms.handsEnabled[0]) { diff --git a/constants.js b/constants.js index 6a2e0c86b7..622361332e 100644 --- a/constants.js +++ b/constants.js @@ -160,6 +160,8 @@ export const defaultDioramaSize = 512; export const defaultChunkSize = 16; export const defaultWorldSeed = 100; +export const defaultAvatarQuality = 3; + export const defaultVoiceEndpoint = `Sweetie Belle`; export const defaultVoicePackName = `ShiShi voice pack`; diff --git a/metaversefile-api.js b/metaversefile-api.js index a259475dc5..c309aefc3b 100644 --- a/metaversefile-api.js +++ b/metaversefile-api.js @@ -453,9 +453,9 @@ metaversefile.setApi({ useAvatarOptimizer() { return avatarOptimizer; }, - useAvatarCruncher() { + /* useAvatarCruncher() { return avatarCruncher; - }, + }, */ useAvatarSpriter() { return avatarSpriter; }, From 2093ca30967afd12a0c28c2043fb57209e3a4022 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Thu, 28 Jul 2022 22:12:16 -0400 Subject: [PATCH 052/125] Major morphs debugging --- avatar-optimizer.js | 47 +++++++++++++++---- avatars/avatar-renderer.js | 94 +++++++++++++++++++++++++------------- 2 files changed, 102 insertions(+), 39 deletions(-) diff --git a/avatar-optimizer.js b/avatar-optimizer.js index 61c2423948..82b547c18a 100644 --- a/avatar-optimizer.js +++ b/avatar-optimizer.js @@ -98,6 +98,7 @@ export const getMergeableObjects = (model, getObjectKey = getObjectKeyDefault) = m = { type, material: objectMaterial, + objects: [], geometries: [], maps: [], emissiveMaps: [], @@ -110,6 +111,7 @@ export const getMergeableObjects = (model, getObjectKey = getObjectKeyDefault) = mergeables.set(key, m); } + m.objects.push(o); m.geometries.push(objectGeometry); m.maps.push(map); m.emissiveMaps.push(emissiveMap); @@ -128,6 +130,7 @@ export const mergeGeometryTextureAtlas = (mergeable, textureSize) => { const { // type, // material, + objects, geometries, maps, emissiveMaps, @@ -316,7 +319,10 @@ export const mergeGeometryTextureAtlas = (mergeable, textureSize) => { const attributeLayouts = _makeAttributeLayoutsFromGeometries(geometries); const _makeMorphAttributeLayoutsFromGeometries = geometries => { - console.log('got geomtries', geometries); + // console.log('got geomtries', geometries); + /* for (const geometry of geometries) { + geometry. + } */ // create morph layouts const morphAttributeLayouts = []; @@ -410,7 +416,10 @@ export const mergeGeometryTextureAtlas = (mergeable, textureSize) => { geometry.setAttribute(layout.name, attribute); } }; - const _mergeMorphAttributes = (geometry, geometries, morphAttributeLayouts) => { + const _mergeMorphAttributes = (geometry, geometries, objects, morphAttributeLayouts) => { + // console.log('morphAttributeLayouts', morphAttributeLayouts); + // globalThis.morphAttributeLayouts = morphAttributeLayouts; + for (const morphLayout of morphAttributeLayouts) { const morphsArray = Array(morphLayout.arraySize); for (let i = 0; i < morphLayout.arraySize; i++) { @@ -427,15 +436,31 @@ export const mergeGeometryTextureAtlas = (mergeable, textureSize) => { geometries2[j] = geometries2[j2]; geometries2[j2] = tmp; } */ + + // console.log('num geos', geometries.length); - for (const g of geometries) { + let first = 0; + for (let i = 0; i < geometries.length; i++) { + // const object = objects[i]; + const g = geometries[i]; + + const r = Math.random(); + let gMorphAttribute = g.morphAttributes[morphLayout.name]; gMorphAttribute = gMorphAttribute?.[i]; if (gMorphAttribute) { + // console.log('src', first, object, g, gMorphAttribute); morphData.set(gMorphAttribute.array, morphDataIndex); - const nz = morphData.filter(n => n != 0); - console.log('case 1', nz.join(',')); + // const nz = gMorphAttribute.array.filter(n => n != 0); + // console.log('case 1', first, nz.length, object, g, gMorphAttribute); + + if (first === 2 || first === 1) { + for (let i = 0; i < gMorphAttribute.array.length; i++) { + // morphData[morphDataIndex + i] = r; + // morphData[morphDataIndex + i] *= 100; + } + } /* for (let i = 0; i < morphData.length; i++) { morphData[i] = Math.random(); @@ -446,13 +471,17 @@ export const mergeGeometryTextureAtlas = (mergeable, textureSize) => { morphDataIndex += gMorphAttribute.count * gMorphAttribute.itemSize; } else { console.log('case 2'); + debugger; const matchingAttribute = g.attributes[morphLayout.name]; morphDataIndex += matchingAttribute.count * matchingAttribute.itemSize; } + + first++; } // sanity check if (morphDataIndex !== morphLayout.count) { console.warn('desynced morph data 2', morphLayout.name, morphDataIndex, morphLayout.count); + debugger; } } geometry.morphAttributes[morphLayout.name] = morphsArray; @@ -522,19 +551,19 @@ export const mergeGeometryTextureAtlas = (mergeable, textureSize) => { }); } }; - const _mergeGeometries = geometries => { + const _mergeGeometries = (geometries, objects) => { const geometry = new THREE.BufferGeometry(); geometry.morphTargetsRelative = true; _forceGeometriesAttributeLayouts(attributeLayouts, geometries); _mergeAttributes(geometry, geometries, attributeLayouts); - _mergeMorphAttributes(geometry, geometries, morphAttributeLayouts); + _mergeMorphAttributes(geometry, geometries, objects, morphAttributeLayouts); _mergeIndices(geometry, geometries); _remapGeometryUvs(geometry, geometries); return geometry; }; - const geometry = _mergeGeometries(geometries); + const geometry = _mergeGeometries(geometries, objects); // console.log('got geometry', geometry); const _makeAtlasTextures = atlasImages => { @@ -649,6 +678,8 @@ export const optimizeAvatarModel = async (model, options = {}) => { skinnedMesh.skeleton = skeletons[0]; skinnedMesh.morphTargetDictionary = morphTargetDictionaryArray[0]; skinnedMesh.morphTargetInfluences = morphTargetInfluencesArray[0]; + // skinnedMesh.updateMorphTargets(); + // console.log('got influences', skinnedMesh.morphTargetInfluences); return skinnedMesh; } else { throw new Error(`unknown type ${type}`); diff --git a/avatars/avatar-renderer.js b/avatars/avatar-renderer.js index 6837bb18dc..a706023472 100644 --- a/avatars/avatar-renderer.js +++ b/avatars/avatar-renderer.js @@ -5,9 +5,16 @@ import * as avatarCruncher from '../avatar-cruncher.js'; import * as avatarSpriter from '../avatar-spriter.js'; import offscreenEngineManager from '../offscreen-engine-manager.js'; import loaders from '../loaders.js'; +import exporters from '../exporters.js'; import { defaultAvatarQuality, } from '../constants.js'; +import { downloadFile } from '../util.js'; + +window.morphTargetDictionaries = []; +window.morphTargetInfluences = []; +window.srcMorphTargetDictionaries = []; +window.srcMorphTargetInfluences = []; const avatarPlaceholderImagePromise = (async () => { const avatarPlaceholderImage = new Image(); @@ -34,7 +41,7 @@ const _makeAvatarPlaceholderMesh = () => { return mesh; }; const _bindSkeleton = (dstModel, srcObject) => { - console.log('bind skeleton', dstModel, srcObject); + // console.log('bind skeleton', dstModel, srcObject); const srcModel = srcObject.scene; const _findBoneInSrc = (srcBoneName) => { @@ -103,6 +110,9 @@ const _bindSkeleton = (dstModel, srcObject) => { // bind the skeleton const {skeleton: dstSkeleton} = o; const srcSkeleton = _findSrcSkeletonFromDstSkeleton(dstSkeleton); + if (!srcSkeleton) { + debugger; + } o.skeleton = srcSkeleton; } if (o.isMesh) { @@ -110,8 +120,15 @@ const _bindSkeleton = (dstModel, srcObject) => { // skinnedMesh.skeleton = skeletons[0]; const skinnedMesh = _findSkinnedMeshInSrc(); // console.log('map blend shapes', o, skinnedMesh); - o.morphTargetDictionary = skinnedMesh.morphTargetDictionary; - o.morphTargetInfluences = skinnedMesh.morphTargetInfluences; + + // o.morphTargetDictionary = skinnedMesh.morphTargetDictionary; + // o.morphTargetInfluences = skinnedMesh.morphTargetInfluences; + + window.morphTargetDictionaries.push(o.morphTargetDictionary); + window.morphTargetInfluences.push(o.morphTargetInfluences); + window.srcMorphTargetDictionaries.push(skinnedMesh.morphTargetDictionary); + window.srcMorphTargetInfluences.push(skinnedMesh.morphTargetInfluences); + // o.geometry.morphAttributes = skinnedMesh.geometry.morphAttributes; // o.morphAttributes = skinnedMesh.morphAttributes; // o.morphAttributesRelative = skinnedMesh.morphAttributesRelative; @@ -123,7 +140,7 @@ const _bindSkeleton = (dstModel, srcObject) => { for (let i = 0; i < attr.array.length; i++) { // if ((attr.array[i]) != 0) { - attr.array[i] *= 10; + // attr.array[i] *= 10; // attr.array[i] = Math.random(); // } } @@ -138,7 +155,12 @@ const _bindSkeleton = (dstModel, srcObject) => { const _frame = () => { window.requestAnimationFrame(_frame); - // console.log('got frame', o.morphTargetInfluences.join(',')); + if (o.morphTargetInfluences.length !== skinnedMesh.morphTargetInfluences.length) { + debugger; + } + for (let i = 0; i < o.morphTargetInfluences.length; i++) { + o.morphTargetInfluences[i] = skinnedMesh.morphTargetInfluences[i]; + } }; _frame(); } @@ -307,41 +329,51 @@ export class AvatarRenderer { } case 3: { if (!this.optimizedModel) { - if (!this.object.arrayBuffer) { - debugger; - } - const glbData = await this.optimizeAvatarModel([this.object.arrayBuffer, this.object.srcUrl]); + this.optimizedModel = true; + + // const glbData = await this.optimizeAvatarModel([this.object.arrayBuffer, this.object.srcUrl]); + + const parseVrm = (arrayBuffer, srcUrl) => new Promise((accept, reject) => { + const { gltfLoader } = loaders; + gltfLoader.parse(arrayBuffer, srcUrl, object => { + accept(object); + }, reject); + }); + const object = await parseVrm(this.object.arrayBuffer, this.object.srcUrl); + object.scene.updateMatrixWorld(); + const glbData = await new Promise((accept, reject) => { + const {gltfExporter} = exporters; + gltfExporter.parse( + object.scene, + function onCompleted(arrayBuffer) { + accept(arrayBuffer); + }, function onError(error) { + reject(error); + }, + { + binary: true, + includeCustomExtensions: true, + }, + ); + }); + const glb = await new Promise((accept, reject) => { const {gltfLoader} = loaders; gltfLoader.parse(glbData, this.object.srcUrl, object => { + // window.o15 = object; accept(object.scene); }, reject); }); + _bindSkeleton(glb, this.object); - /* glb.traverse(o => { - if (o.isMesh) { - console.log('set flag', o); - o.onBeforeRender = () => { - debugger; - }; - o.frustumCulled = false; - - for (const k in o.material) { - const v = o.material[k]; - if (v?.isTexture) { - v.onUpdate = () => { - debugger; - }; - } - } - } - }); */ this.optimizedModel = glb; - // this.optimizedModel.visible = false; - // this.optimizedModel.enabled = true; // XXX + + // object.scene.position.x = -10; + // object.scene.updateMatrixWorld(); + // this.scene.add(object.scene); + + this.optimizedModel.updateMatrixWorld(); this.scene.add(this.optimizedModel); - - // window.optimizedModel = this.optimizedModel; } break; } From ae296277f931c1fcfbeaa2e41802e62573263ade Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Thu, 28 Jul 2022 22:25:49 -0400 Subject: [PATCH 053/125] More morphs debugging --- avatar-optimizer.js | 18 +++++++++--------- avatars/avatar-renderer.js | 17 +++++++++-------- avatars/avatars.js | 4 ++++ character-controller.js | 5 +++-- 4 files changed, 25 insertions(+), 19 deletions(-) diff --git a/avatar-optimizer.js b/avatar-optimizer.js index 82b547c18a..d9fd8e4a1a 100644 --- a/avatar-optimizer.js +++ b/avatar-optimizer.js @@ -444,23 +444,23 @@ export const mergeGeometryTextureAtlas = (mergeable, textureSize) => { // const object = objects[i]; const g = geometries[i]; - const r = Math.random(); + // const r = Math.random(); let gMorphAttribute = g.morphAttributes[morphLayout.name]; gMorphAttribute = gMorphAttribute?.[i]; if (gMorphAttribute) { - // console.log('src', first, object, g, gMorphAttribute); + console.log('src', first, g, gMorphAttribute); morphData.set(gMorphAttribute.array, morphDataIndex); // const nz = gMorphAttribute.array.filter(n => n != 0); // console.log('case 1', first, nz.length, object, g, gMorphAttribute); - if (first === 2 || first === 1) { + /* if (first === 2 || first === 1) { for (let i = 0; i < gMorphAttribute.array.length; i++) { // morphData[morphDataIndex + i] = r; // morphData[morphDataIndex + i] *= 100; } - } + } */ /* for (let i = 0; i < morphData.length; i++) { morphData[i] = Math.random(); @@ -676,9 +676,9 @@ export const optimizeAvatarModel = async (model, options = {}) => { } else if (type === 'skinnedMesh') { const skinnedMesh = new THREE.SkinnedMesh(geometry, m); skinnedMesh.skeleton = skeletons[0]; - skinnedMesh.morphTargetDictionary = morphTargetDictionaryArray[0]; - skinnedMesh.morphTargetInfluences = morphTargetInfluencesArray[0]; - // skinnedMesh.updateMorphTargets(); + // skinnedMesh.morphTargetDictionary = morphTargetDictionaryArray[0]; + // skinnedMesh.morphTargetInfluences = morphTargetInfluencesArray[0]; + skinnedMesh.updateMorphTargets(); // console.log('got influences', skinnedMesh.morphTargetInfluences); return skinnedMesh; } else { @@ -721,9 +721,9 @@ export const optimizeAvatarModel = async (model, options = {}) => { }, { binary: true, - onlyVisible: false, + // onlyVisible: false, // forceIndices: true, - truncateDrawRange: false, + // truncateDrawRange: false, includeCustomExtensions: true, }, ); diff --git a/avatars/avatar-renderer.js b/avatars/avatar-renderer.js index a706023472..ff55c3a5a2 100644 --- a/avatars/avatar-renderer.js +++ b/avatars/avatar-renderer.js @@ -133,7 +133,7 @@ const _bindSkeleton = (dstModel, srcObject) => { // o.morphAttributes = skinnedMesh.morphAttributes; // o.morphAttributesRelative = skinnedMesh.morphAttributesRelative; - o.geometry.morphAttributes.position.forEach(attr => { + /* o.geometry.morphAttributes.position.forEach(attr => { attr.onUploadCallback = () => { console.log('upload callback'); }; @@ -144,12 +144,12 @@ const _bindSkeleton = (dstModel, srcObject) => { // attr.array[i] = Math.random(); // } } - }); + }); */ // o.onBeforeRender = () => {debugger;} - o.material.onBeforeCompile = (shader) => { + /* o.material.onBeforeCompile = (shader) => { console.log('compile avatar shader', shader); - }; + }; */ // window.o = o; const _frame = () => { @@ -159,7 +159,8 @@ const _bindSkeleton = (dstModel, srcObject) => { debugger; } for (let i = 0; i < o.morphTargetInfluences.length; i++) { - o.morphTargetInfluences[i] = skinnedMesh.morphTargetInfluences[i]; + // o.morphTargetInfluences[i] = skinnedMesh.morphTargetInfluences[i]; + o.morphTargetInfluences[i] = 1; } }; _frame(); @@ -331,9 +332,9 @@ export class AvatarRenderer { if (!this.optimizedModel) { this.optimizedModel = true; - // const glbData = await this.optimizeAvatarModel([this.object.arrayBuffer, this.object.srcUrl]); + const glbData = await this.optimizeAvatarModel([this.object.arrayBuffer, this.object.srcUrl]); - const parseVrm = (arrayBuffer, srcUrl) => new Promise((accept, reject) => { + /* const parseVrm = (arrayBuffer, srcUrl) => new Promise((accept, reject) => { const { gltfLoader } = loaders; gltfLoader.parse(arrayBuffer, srcUrl, object => { accept(object); @@ -355,7 +356,7 @@ export class AvatarRenderer { includeCustomExtensions: true, }, ); - }); + }); */ const glb = await new Promise((accept, reject) => { const {gltfLoader} = loaders; diff --git a/avatars/avatars.js b/avatars/avatars.js index 6fa232556f..e8ca5302a6 100644 --- a/avatars/avatars.js +++ b/avatars/avatars.js @@ -438,6 +438,10 @@ class Avatar { return o; })(); + // if (!model.parent) { + console.log('model parent', model.parent, new Error().stack); + // } + this.model = model; // XXX still needed? this.model.visible = false; diff --git a/character-controller.js b/character-controller.js index 9eb3ad4aad..3065310d6e 100644 --- a/character-controller.js +++ b/character-controller.js @@ -12,7 +12,7 @@ import {getRenderer, scene, camera, dolly} from './renderer.js'; import physicsManager from './physics-manager.js'; import {world} from './world.js'; // import cameraManager from './camera-manager.js'; -import physx from './physx.js'; +// import physx from './physx.js'; import audioManager from './audio-manager.js'; import metaversefile from 'metaversefile'; import { @@ -23,7 +23,7 @@ import { activateMaxTime, // useMaxTime, aimTransitionMaxTime, - avatarInterpolationFrameRate, + // avatarInterpolationFrameRate, avatarInterpolationTimeDelay, avatarInterpolationNumFrames, // groundFriction, @@ -1062,6 +1062,7 @@ class LocalPlayer extends UninterpolatedPlayer { async setAvatarUrl(u) { const localAvatarEpoch = ++this.avatarEpoch; const avatarApp = await this.appManager.addTrackedApp(u); + // avatarApp.parent.remove(avatarApp); if (this.avatarEpoch !== localAvatarEpoch) { this.appManager.removeTrackedApp(avatarApp.instanceId); return; From 1d7a2b08f31b5a349617d174cc6442a98d6591fe Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Fri, 29 Jul 2022 07:42:44 -0400 Subject: [PATCH 054/125] Add more morph targets resolution --- avatar-optimizer.js | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/avatar-optimizer.js b/avatar-optimizer.js index d9fd8e4a1a..f11de569f9 100644 --- a/avatar-optimizer.js +++ b/avatar-optimizer.js @@ -136,8 +136,8 @@ export const mergeGeometryTextureAtlas = (mergeable, textureSize) => { emissiveMaps, normalMaps, // skeletons, - // morphTargetDictionaryArray, - // morphTargetInfluencesArray, + morphTargetDictionaryArray, + morphTargetInfluencesArray, } = mergeable; // compute texture sizes @@ -440,13 +440,16 @@ export const mergeGeometryTextureAtlas = (mergeable, textureSize) => { // console.log('num geos', geometries.length); let first = 0; - for (let i = 0; i < geometries.length; i++) { + for (let j = 0; j < geometries.length; j++) { // const object = objects[i]; - const g = geometries[i]; + const g = geometries[j]; // const r = Math.random(); let gMorphAttribute = g.morphAttributes[morphLayout.name]; + if (gMorphAttribute.length !== morphsArray.length) { + debugger; + } gMorphAttribute = gMorphAttribute?.[i]; if (gMorphAttribute) { console.log('src', first, g, gMorphAttribute); @@ -676,9 +679,9 @@ export const optimizeAvatarModel = async (model, options = {}) => { } else if (type === 'skinnedMesh') { const skinnedMesh = new THREE.SkinnedMesh(geometry, m); skinnedMesh.skeleton = skeletons[0]; - // skinnedMesh.morphTargetDictionary = morphTargetDictionaryArray[0]; - // skinnedMesh.morphTargetInfluences = morphTargetInfluencesArray[0]; - skinnedMesh.updateMorphTargets(); + skinnedMesh.morphTargetDictionary = morphTargetDictionaryArray[0]; + skinnedMesh.morphTargetInfluences = morphTargetInfluencesArray[0]; + // skinnedMesh.updateMorphTargets(); // console.log('got influences', skinnedMesh.morphTargetInfluences); return skinnedMesh; } else { From b4247913a5d3be84c5f5586fe6147af9d32c3374 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Fri, 29 Jul 2022 11:52:23 -0400 Subject: [PATCH 055/125] More morphs work --- avatar-optimizer.js | 168 ++++++++++++++++++++++++++++++++++--- avatars/avatar-renderer.js | 16 +++- 2 files changed, 169 insertions(+), 15 deletions(-) diff --git a/avatar-optimizer.js b/avatar-optimizer.js index f11de569f9..1d5ef65adb 100644 --- a/avatar-optimizer.js +++ b/avatar-optimizer.js @@ -136,8 +136,8 @@ export const mergeGeometryTextureAtlas = (mergeable, textureSize) => { emissiveMaps, normalMaps, // skeletons, - morphTargetDictionaryArray, - morphTargetInfluencesArray, + // morphTargetDictionaryArray, + // morphTargetInfluencesArray, } = mergeable; // compute texture sizes @@ -343,13 +343,30 @@ export const mergeGeometryTextureAtlas = (mergeable, textureSize) => { morphAttributeLayouts.push(morphLayout); } + for (let i = 1; i < morphAttribute.length; i++) { + const attribute = morphAttribute[i]; + if (attribute.count !== morphAttribute[0].count) { + debugger; + } + if (attribute.itemSize !== morphAttribute[0].itemSize) { + debugger; + } + if (attribute.array.constructor !== morphAttribute[0].array.constructor) { + debugger; + } + } + morphLayout.count += morphAttribute[0].count * morphAttribute[0].itemSize; } } - /* for (const g of geometries) { - morphLayout.count += morphAttribute[0].count * morphAttribute[0].itemSize; - } */ + for (let i = 0; i < geometries.length; i++) { + const g = geometries[i]; + for (const k in g.morphAttributes) { + const morphAttribute = g.morphAttributes[k]; + console.log('got morph attr', i, k, morphAttribute); + } + } return morphAttributeLayouts; }; @@ -364,7 +381,7 @@ export const mergeGeometryTextureAtlas = (mergeable, textureSize) => { if (layout.name === 'skinIndex' || layout.name === 'skinWeight') { console.log('force layout', layout); debugger; - + gAttribute = layout.makeDefault(g); g.setAttribute(layout.name, gAttribute); @@ -416,6 +433,122 @@ export const mergeGeometryTextureAtlas = (mergeable, textureSize) => { geometry.setAttribute(layout.name, attribute); } }; + /* function mergeBufferAttributes( attributes ) { + + let TypedArray; + let itemSize; + let normalized; + let arrayLength = 0; + + for ( let i = 0; i < attributes.length; ++ i ) { + + const attribute = attributes[ i ]; + + if ( attribute.isInterleavedBufferAttribute ) { + + console.error( 'THREE.BufferGeometryUtils: .mergeBufferAttributes() failed. InterleavedBufferAttributes are not supported.' ); + return null; + + } + + if ( TypedArray === undefined ) TypedArray = attribute.array.constructor; + if ( TypedArray !== attribute.array.constructor ) { + + console.error( 'THREE.BufferGeometryUtils: .mergeBufferAttributes() failed. BufferAttribute.array must be of consistent array types across matching attributes.' ); + return null; + + } + + if ( itemSize === undefined ) itemSize = attribute.itemSize; + if ( itemSize !== attribute.itemSize ) { + + console.error( 'THREE.BufferGeometryUtils: .mergeBufferAttributes() failed. BufferAttribute.itemSize must be consistent across matching attributes.' ); + return null; + + } + + if ( normalized === undefined ) normalized = attribute.normalized; + if ( normalized !== attribute.normalized ) { + + console.error( 'THREE.BufferGeometryUtils: .mergeBufferAttributes() failed. BufferAttribute.normalized must be consistent across matching attributes.' ); + return null; + + } + + arrayLength += attribute.array.length; + + } + + const array = new TypedArray( arrayLength ); + let offset = 0; + + for ( let i = 0; i < attributes.length; ++ i ) { + + array.set( attributes[ i ].array, offset ); + + offset += attributes[ i ].array.length; + + } + + return new THREE.BufferAttribute( array, itemSize, normalized ); + + } + const _mergeMorphAttributes = (geometry, geometries, objects, morphAttributeLayouts) => { + // collect + const morphAttributesUsed = new Set( Object.keys( geometries[ 0 ].morphAttributes ) ); + const morphAttributes = {}; + for (const geometry of geometries) { + for ( const name in geometry.morphAttributes ) { + + if ( ! morphAttributesUsed.has( name ) ) { + + console.error( 'THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index ' + i + '. .morphAttributes must be consistent throughout all geometries.' ); + return null; + + } + + if ( morphAttributes[ name ] === undefined ) morphAttributes[ name ] = []; + + morphAttributes[ name ].push( geometry.morphAttributes[ name ] ); + + } + } + + // merge + for ( const name in morphAttributes ) { + + const numMorphTargets = morphAttributes[ name ][ 0 ].length; + + if ( numMorphTargets === 0 ) break; + + geometry.morphAttributes = geometry.morphAttributes || {}; + geometry.morphAttributes[ name ] = []; + + for ( let i = 0; i < numMorphTargets; ++ i ) { + + const morphAttributesToMerge = []; + + for ( let j = 0; j < morphAttributes[ name ].length; ++ j ) { + + morphAttributesToMerge.push( morphAttributes[ name ][ j ][ i ] ); + + } + + const mergedMorphAttribute = mergeBufferAttributes( morphAttributesToMerge ); + + if ( ! mergedMorphAttribute ) { + + console.error( 'THREE.BufferGeometryUtils: .mergeBufferGeometries() failed while trying to merge the ' + name + ' morphAttribute.' ); + return null; + + } + + geometry.morphAttributes[ name ].push( mergedMorphAttribute ); + + } + + } + }; */ const _mergeMorphAttributes = (geometry, geometries, objects, morphAttributeLayouts) => { // console.log('morphAttributeLayouts', morphAttributeLayouts); // globalThis.morphAttributeLayouts = morphAttributeLayouts; @@ -437,7 +570,7 @@ export const mergeGeometryTextureAtlas = (mergeable, textureSize) => { geometries2[j2] = tmp; } */ - // console.log('num geos', geometries.length); + console.log('num geos', geometries); let first = 0; for (let j = 0; j < geometries.length; j++) { @@ -451,12 +584,15 @@ export const mergeGeometryTextureAtlas = (mergeable, textureSize) => { debugger; } gMorphAttribute = gMorphAttribute?.[i]; + if (gMorphAttribute.count !== g.attributes.position.count) { + debugger; + } if (gMorphAttribute) { - console.log('src', first, g, gMorphAttribute); + // console.log('src', first, g, gMorphAttribute, morphAttribute, object); morphData.set(gMorphAttribute.array, morphDataIndex); - // const nz = gMorphAttribute.array.filter(n => n != 0); - // console.log('case 1', first, nz.length, object, g, gMorphAttribute); + const nz = gMorphAttribute.array.filter(n => Math.abs(n) >= 0.01); + console.log('case 1', first, nz.length); /* if (first === 2 || first === 1) { for (let i = 0; i < gMorphAttribute.array.length; i++) { @@ -488,6 +624,7 @@ export const mergeGeometryTextureAtlas = (mergeable, textureSize) => { } } geometry.morphAttributes[morphLayout.name] = morphsArray; + // geometry.morphTargetsRelative = true; } }; const _mergeIndices = (geometry, geometries) => { @@ -504,6 +641,9 @@ export const mergeGeometryTextureAtlas = (mergeable, textureSize) => { for (let i = 0; i < srcIndexData.length; i++) { indexData[indexOffset++] = srcIndexData[i] + positionOffset; } + if (g.attributes.position.count !== g.morphAttributes.position[0].count) { + debugger; + } positionOffset += g.attributes.position.count; } geometry.setIndex(new THREE.BufferAttribute(indexData, 1)); @@ -713,7 +853,11 @@ export const optimizeAvatarModel = async (model, options = {}) => { } // console.log('got bones', model, bones); - const glbData = await new Promise((accept, reject) => { + // XXX this should anti-index flattened index ranges for the multi-materials case + + return object; + + /* const glbData = await new Promise((accept, reject) => { const {gltfExporter} = exporters; gltfExporter.parse( object, @@ -731,5 +875,5 @@ export const optimizeAvatarModel = async (model, options = {}) => { }, ); }); - return glbData; + return glbData; */ }; \ No newline at end of file diff --git a/avatars/avatar-renderer.js b/avatars/avatar-renderer.js index ff55c3a5a2..f1d88631fa 100644 --- a/avatars/avatar-renderer.js +++ b/avatars/avatar-renderer.js @@ -332,7 +332,15 @@ export class AvatarRenderer { if (!this.optimizedModel) { this.optimizedModel = true; - const glbData = await this.optimizeAvatarModel([this.object.arrayBuffer, this.object.srcUrl]); + const parseVrm = (arrayBuffer, srcUrl) => new Promise((accept, reject) => { + const { gltfLoader } = loaders; + gltfLoader.parse(arrayBuffer, srcUrl, object => { + accept(object); + }, reject); + }); + const object = await parseVrm(this.object.arrayBuffer, this.object.srcUrl); + + const glb = await avatarOptimizer.optimizeAvatarModel(object.scene); /* const parseVrm = (arrayBuffer, srcUrl) => new Promise((accept, reject) => { const { gltfLoader } = loaders; @@ -358,13 +366,13 @@ export class AvatarRenderer { ); }); */ - const glb = await new Promise((accept, reject) => { + /* const glb = await new Promise((accept, reject) => { const {gltfLoader} = loaders; gltfLoader.parse(glbData, this.object.srcUrl, object => { // window.o15 = object; accept(object.scene); }, reject); - }); + }); */ _bindSkeleton(glb, this.object); this.optimizedModel = glb; @@ -373,6 +381,8 @@ export class AvatarRenderer { // object.scene.updateMatrixWorld(); // this.scene.add(object.scene); + // window.glb = glb; + this.optimizedModel.updateMatrixWorld(); this.scene.add(this.optimizedModel); } From 3a94afe44aadc3eb8202709d99b48ac41f1a90f3 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Fri, 29 Jul 2022 12:01:08 -0400 Subject: [PATCH 056/125] Temporarily lock out avatar icon --- src/AvatarIcon.jsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/AvatarIcon.jsx b/src/AvatarIcon.jsx index 2d256c7fc0..fc3b7708cd 100644 --- a/src/AvatarIcon.jsx +++ b/src/AvatarIcon.jsx @@ -25,6 +25,8 @@ const CharacterIcon = () => { const canvasRef = useRef(); useEffect(() => { + return; + const canvas = canvasRef.current; if (canvas) { const localPlayer = playersManager.getLocalPlayer(); From ca2d4dbd7d97377a6de7574cd6d89d028815a68b Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Tue, 9 Aug 2022 21:59:07 -0400 Subject: [PATCH 057/125] Bugfix avatar-renderer morphs bind --- avatars/avatar-renderer.js | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/avatars/avatar-renderer.js b/avatars/avatar-renderer.js index f1d88631fa..64c82dc3c4 100644 --- a/avatars/avatar-renderer.js +++ b/avatars/avatar-renderer.js @@ -5,20 +5,21 @@ import * as avatarCruncher from '../avatar-cruncher.js'; import * as avatarSpriter from '../avatar-spriter.js'; import offscreenEngineManager from '../offscreen-engine-manager.js'; import loaders from '../loaders.js'; -import exporters from '../exporters.js'; +// import exporters from '../exporters.js'; import { defaultAvatarQuality, } from '../constants.js'; -import { downloadFile } from '../util.js'; +// import { downloadFile } from '../util.js'; +import { clone } from '../util.js'; -window.morphTargetDictionaries = []; +/* window.morphTargetDictionaries = []; window.morphTargetInfluences = []; window.srcMorphTargetDictionaries = []; -window.srcMorphTargetInfluences = []; +window.srcMorphTargetInfluences = []; */ const avatarPlaceholderImagePromise = (async () => { const avatarPlaceholderImage = new Image(); - avatarPlaceholderImage.src = '/avatars/images/user.png'; + avatarPlaceholderImage.src = '/images/user.png'; await new Promise((accept, reject) => { avatarPlaceholderImage.onload = accept; avatarPlaceholderImage.onerror = reject; @@ -41,7 +42,6 @@ const _makeAvatarPlaceholderMesh = () => { return mesh; }; const _bindSkeleton = (dstModel, srcObject) => { - // console.log('bind skeleton', dstModel, srcObject); const srcModel = srcObject.scene; const _findBoneInSrc = (srcBoneName) => { @@ -110,9 +110,9 @@ const _bindSkeleton = (dstModel, srcObject) => { // bind the skeleton const {skeleton: dstSkeleton} = o; const srcSkeleton = _findSrcSkeletonFromDstSkeleton(dstSkeleton); - if (!srcSkeleton) { + /* if (!srcSkeleton) { debugger; - } + } */ o.skeleton = srcSkeleton; } if (o.isMesh) { @@ -121,13 +121,13 @@ const _bindSkeleton = (dstModel, srcObject) => { const skinnedMesh = _findSkinnedMeshInSrc(); // console.log('map blend shapes', o, skinnedMesh); - // o.morphTargetDictionary = skinnedMesh.morphTargetDictionary; - // o.morphTargetInfluences = skinnedMesh.morphTargetInfluences; + o.morphTargetDictionary = clone(skinnedMesh.morphTargetDictionary); + o.morphTargetInfluences = clone(skinnedMesh.morphTargetInfluences); - window.morphTargetDictionaries.push(o.morphTargetDictionary); + /* window.morphTargetDictionaries.push(o.morphTargetDictionary); window.morphTargetInfluences.push(o.morphTargetInfluences); window.srcMorphTargetDictionaries.push(skinnedMesh.morphTargetDictionary); - window.srcMorphTargetInfluences.push(skinnedMesh.morphTargetInfluences); + window.srcMorphTargetInfluences.push(skinnedMesh.morphTargetInfluences); */ // o.geometry.morphAttributes = skinnedMesh.geometry.morphAttributes; // o.morphAttributes = skinnedMesh.morphAttributes; @@ -155,12 +155,12 @@ const _bindSkeleton = (dstModel, srcObject) => { const _frame = () => { window.requestAnimationFrame(_frame); - if (o.morphTargetInfluences.length !== skinnedMesh.morphTargetInfluences.length) { + /* if (o.morphTargetInfluences.length !== skinnedMesh.morphTargetInfluences.length) { debugger; - } + } */ for (let i = 0; i < o.morphTargetInfluences.length; i++) { - // o.morphTargetInfluences[i] = skinnedMesh.morphTargetInfluences[i]; - o.morphTargetInfluences[i] = 1; + o.morphTargetInfluences[i] = skinnedMesh.morphTargetInfluences[i]; + // o.morphTargetInfluences[i] = 1; } }; _frame(); From 213525c0602739ef1d37223bfdfe6ca0bea45a08 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Tue, 9 Aug 2022 22:02:03 -0400 Subject: [PATCH 058/125] Avatar renderer code cleanup --- avatars/avatar-renderer.js | 80 ++------------------------------------ 1 file changed, 3 insertions(+), 77 deletions(-) diff --git a/avatars/avatar-renderer.js b/avatars/avatar-renderer.js index 64c82dc3c4..7b950dde8a 100644 --- a/avatars/avatar-renderer.js +++ b/avatars/avatar-renderer.js @@ -10,12 +10,6 @@ import { defaultAvatarQuality, } from '../constants.js'; // import { downloadFile } from '../util.js'; -import { clone } from '../util.js'; - -/* window.morphTargetDictionaries = []; -window.morphTargetInfluences = []; -window.srcMorphTargetDictionaries = []; -window.srcMorphTargetInfluences = []; */ const avatarPlaceholderImagePromise = (async () => { const avatarPlaceholderImage = new Image(); @@ -110,60 +104,13 @@ const _bindSkeleton = (dstModel, srcObject) => { // bind the skeleton const {skeleton: dstSkeleton} = o; const srcSkeleton = _findSrcSkeletonFromDstSkeleton(dstSkeleton); - /* if (!srcSkeleton) { - debugger; - } */ o.skeleton = srcSkeleton; } if (o.isMesh) { - // also bind the blend shapes - // skinnedMesh.skeleton = skeletons[0]; + // bind the blend shapes const skinnedMesh = _findSkinnedMeshInSrc(); - // console.log('map blend shapes', o, skinnedMesh); - - o.morphTargetDictionary = clone(skinnedMesh.morphTargetDictionary); - o.morphTargetInfluences = clone(skinnedMesh.morphTargetInfluences); - - /* window.morphTargetDictionaries.push(o.morphTargetDictionary); - window.morphTargetInfluences.push(o.morphTargetInfluences); - window.srcMorphTargetDictionaries.push(skinnedMesh.morphTargetDictionary); - window.srcMorphTargetInfluences.push(skinnedMesh.morphTargetInfluences); */ - - // o.geometry.morphAttributes = skinnedMesh.geometry.morphAttributes; - // o.morphAttributes = skinnedMesh.morphAttributes; - // o.morphAttributesRelative = skinnedMesh.morphAttributesRelative; - - /* o.geometry.morphAttributes.position.forEach(attr => { - attr.onUploadCallback = () => { - console.log('upload callback'); - }; - - for (let i = 0; i < attr.array.length; i++) { - // if ((attr.array[i]) != 0) { - // attr.array[i] *= 10; - // attr.array[i] = Math.random(); - // } - } - }); */ - - // o.onBeforeRender = () => {debugger;} - /* o.material.onBeforeCompile = (shader) => { - console.log('compile avatar shader', shader); - }; */ - // window.o = o; - - const _frame = () => { - window.requestAnimationFrame(_frame); - - /* if (o.morphTargetInfluences.length !== skinnedMesh.morphTargetInfluences.length) { - debugger; - } */ - for (let i = 0; i < o.morphTargetInfluences.length; i++) { - o.morphTargetInfluences[i] = skinnedMesh.morphTargetInfluences[i]; - // o.morphTargetInfluences[i] = 1; - } - }; - _frame(); + o.morphTargetDictionary = skinnedMesh.morphTargetDictionary; + o.morphTargetInfluences = skinnedMesh.morphTargetInfluences; } }); }; @@ -190,10 +137,6 @@ export class AvatarRenderer { `, async function(arrayBuffer, srcUrl) { - if (!arrayBuffer) { - debugger; - } - const parseVrm = (arrayBuffer, srcUrl) => new Promise((accept, reject) => { const { gltfLoader } = loaders; gltfLoader.parse(arrayBuffer, srcUrl, object => { @@ -202,9 +145,6 @@ export class AvatarRenderer { }); const skinnedMesh = await parseVrm(arrayBuffer, srcUrl); - if (!skinnedMesh) { - debugger; - } const textureImages = avatarSpriter.renderSpriteImages(skinnedMesh); return textureImages; } @@ -217,10 +157,6 @@ export class AvatarRenderer { `, async function(arrayBuffer, srcUrl) { - if (!arrayBuffer) { - debugger; - } - const parseVrm = (arrayBuffer, srcUrl) => new Promise((accept, reject) => { const { gltfLoader } = loaders; gltfLoader.parse(arrayBuffer, srcUrl, object => { @@ -229,9 +165,6 @@ export class AvatarRenderer { }); const model = await parseVrm(arrayBuffer, srcUrl); - if (!model) { - debugger; - } const glbData = await avatarCruncher.crunchAvatarModel(model); return glbData; } @@ -245,10 +178,6 @@ export class AvatarRenderer { `, async function(arrayBuffer, srcUrl) { - if (!arrayBuffer) { - debugger; - } - const parseVrm = (arrayBuffer, srcUrl) => new Promise((accept, reject) => { const { gltfLoader } = loaders; gltfLoader.parse(arrayBuffer, srcUrl, object => { @@ -298,9 +227,6 @@ export class AvatarRenderer { switch (this.quality) { case 1: { if (!this.spriteAvatarMesh) { - if (!this.object.arrayBuffer) { - debugger; - } const textureImages = await this.createSpriteAvatarMesh([this.object.arrayBuffer, this.object.srcUrl]); this.spriteAvatarMesh = avatarSpriter.createSpriteAvatarMeshFromTextures(textureImages); // this.spriteAvatarMesh.visible = false; From b893ee27942ca97f97a206948bc032f1eca9ff0f Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Tue, 9 Aug 2022 22:20:10 -0400 Subject: [PATCH 059/125] More major avatars optimization cleanup --- avatars/avatar-renderer.js | 91 ++++++-------------------------------- 1 file changed, 13 insertions(+), 78 deletions(-) diff --git a/avatars/avatar-renderer.js b/avatars/avatar-renderer.js index 7b950dde8a..cdced21968 100644 --- a/avatars/avatar-renderer.js +++ b/avatars/avatar-renderer.js @@ -222,24 +222,21 @@ export class AvatarRenderer { this.scene.clear(); this.scene.add(this.placeholderMesh); - // console.log('set quality', quality, new Error().stack); - switch (this.quality) { case 1: { if (!this.spriteAvatarMesh) { + this.spriteAvatarMesh = {}; + const textureImages = await this.createSpriteAvatarMesh([this.object.arrayBuffer, this.object.srcUrl]); this.spriteAvatarMesh = avatarSpriter.createSpriteAvatarMeshFromTextures(textureImages); - // this.spriteAvatarMesh.visible = false; - // this.spriteAvatarMesh.enabled = true; // XXX this.scene.add(this.spriteAvatarMesh); } break; } case 2: { if (!this.crunchedModel) { - if (!this.object.arrayBuffer) { - debugger; - } + this.crunchedModel = {}; + const glbData = await this.crunchAvatarModel([this.object.arrayBuffer, this.object.srcUrl]); const glb = await new Promise((accept, reject) => { const {gltfLoader} = loaders; @@ -248,66 +245,24 @@ export class AvatarRenderer { }, reject); }); this.crunchedModel = glb; - // this.crunchedModel.visible = false; - // this.crunchedModel.enabled = true; // XXX this.scene.add(this.crunchedModel); } break; } case 3: { if (!this.optimizedModel) { - this.optimizedModel = true; + this.optimizedModel = {}; const parseVrm = (arrayBuffer, srcUrl) => new Promise((accept, reject) => { - const { gltfLoader } = loaders; - gltfLoader.parse(arrayBuffer, srcUrl, object => { - accept(object); - }, reject); + const {gltfLoader} = loaders; + gltfLoader.parse(arrayBuffer, srcUrl, accept, reject); }); const object = await parseVrm(this.object.arrayBuffer, this.object.srcUrl); const glb = await avatarOptimizer.optimizeAvatarModel(object.scene); - /* const parseVrm = (arrayBuffer, srcUrl) => new Promise((accept, reject) => { - const { gltfLoader } = loaders; - gltfLoader.parse(arrayBuffer, srcUrl, object => { - accept(object); - }, reject); - }); - const object = await parseVrm(this.object.arrayBuffer, this.object.srcUrl); - object.scene.updateMatrixWorld(); - const glbData = await new Promise((accept, reject) => { - const {gltfExporter} = exporters; - gltfExporter.parse( - object.scene, - function onCompleted(arrayBuffer) { - accept(arrayBuffer); - }, function onError(error) { - reject(error); - }, - { - binary: true, - includeCustomExtensions: true, - }, - ); - }); */ - - /* const glb = await new Promise((accept, reject) => { - const {gltfLoader} = loaders; - gltfLoader.parse(glbData, this.object.srcUrl, object => { - // window.o15 = object; - accept(object.scene); - }, reject); - }); */ - _bindSkeleton(glb, this.object); this.optimizedModel = glb; - - // object.scene.position.x = -10; - // object.scene.updateMatrixWorld(); - // this.scene.add(object.scene); - - // window.glb = glb; this.optimizedModel.updateMatrixWorld(); this.scene.add(this.optimizedModel); @@ -322,48 +277,28 @@ export class AvatarRenderer { } } + // remove the old placeholder mesh this.scene.remove(this.placeholderMesh); - - // this.#updateVisibility(); - } - /* #updateVisibility() { - this.object.visible = false; - if (this.spriteAvatarMesh) { - this.spriteAvatarMesh.visible = false; - } - if (this.crunchedModel) { - this.crunchedModel.visible = false; - } - if (this.optimizedModel) { - this.optimizedModel.visible = false; - } - + // add the new avatar mesh switch (this.quality) { case 1: { - if (this.spriteAvatarMesh && this.spriteAvatarMesh.enabled) { - this.spriteAvatarMesh.visible = true; - } + this.scene.add(this.spriteAvatarMesh); break; } case 2: { - if (this.crunchedModel && this.crunchedModel.enabled) { - this.crunchedModel.visible = true; - } + this.scene.add(this.crunchedModel); break; } case 3: { - if (this.optimizedModel && this.optimizedModel.enabled) { - this.optimizedModel.visible = true; - } + this.scene.add(this.optimizedModel); break; } case 4: { - this.object.visible = true; break; } default: { throw new Error('unknown avatar quality: ' + this.quality); } } - } */ + } } \ No newline at end of file From 5290612315440c6c52c1cfe6accccfdccfc93442 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Tue, 9 Aug 2022 22:20:36 -0400 Subject: [PATCH 060/125] Avatar optimizer code cleanup --- avatar-optimizer.js | 215 ++------------------------------------------ 1 file changed, 8 insertions(+), 207 deletions(-) diff --git a/avatar-optimizer.js b/avatar-optimizer.js index 1d5ef65adb..fa42d955a2 100644 --- a/avatar-optimizer.js +++ b/avatar-optimizer.js @@ -319,21 +319,14 @@ export const mergeGeometryTextureAtlas = (mergeable, textureSize) => { const attributeLayouts = _makeAttributeLayoutsFromGeometries(geometries); const _makeMorphAttributeLayoutsFromGeometries = geometries => { - // console.log('got geomtries', geometries); - /* for (const geometry of geometries) { - geometry. - } */ - // create morph layouts const morphAttributeLayouts = []; for (const g of geometries) { const morphAttributes = g.morphAttributes; - // console.log('got keys', Object.keys(morphAttributes)); for (const morphAttributeName in morphAttributes) { const morphAttribute = morphAttributes[morphAttributeName]; let morphLayout = morphAttributeLayouts.find(l => l.name === morphAttributeName); if (!morphLayout) { - // console.log('missing morph layout', morphAttributeName, morphAttribute); morphLayout = new MorphAttributeLayout( morphAttributeName, morphAttribute[0].array.constructor, @@ -343,7 +336,7 @@ export const mergeGeometryTextureAtlas = (mergeable, textureSize) => { morphAttributeLayouts.push(morphLayout); } - for (let i = 1; i < morphAttribute.length; i++) { + /* for (let i = 1; i < morphAttribute.length; i++) { const attribute = morphAttribute[i]; if (attribute.count !== morphAttribute[0].count) { debugger; @@ -354,24 +347,23 @@ export const mergeGeometryTextureAtlas = (mergeable, textureSize) => { if (attribute.array.constructor !== morphAttribute[0].array.constructor) { debugger; } - } + } */ morphLayout.count += morphAttribute[0].count * morphAttribute[0].itemSize; } } - for (let i = 0; i < geometries.length; i++) { + /* for (let i = 0; i < geometries.length; i++) { const g = geometries[i]; for (const k in g.morphAttributes) { const morphAttribute = g.morphAttributes[k]; console.log('got morph attr', i, k, morphAttribute); } - } + } */ return morphAttributeLayouts; }; const morphAttributeLayouts = _makeMorphAttributeLayoutsFromGeometries(geometries); - // console.log('got attribute layouts', attributeLayouts, morphAttributeLayouts); const _forceGeometriesAttributeLayouts = (attributeLayouts, geometries) => { for (const layout of attributeLayouts) { @@ -379,9 +371,6 @@ export const mergeGeometryTextureAtlas = (mergeable, textureSize) => { let gAttribute = g.attributes[layout.name]; if (!gAttribute) { if (layout.name === 'skinIndex' || layout.name === 'skinWeight') { - console.log('force layout', layout); - debugger; - gAttribute = layout.makeDefault(g); g.setAttribute(layout.name, gAttribute); @@ -397,9 +386,6 @@ export const mergeGeometryTextureAtlas = (mergeable, textureSize) => { for (const g of geometries) { let morphAttribute = g.morphAttributes[morphLayout.name]; if (!morphAttribute) { - console.log('missing morph attribute', morphLayout, morphAttribute); - debugger; - morphAttribute = morphLayout.makeDefault(g); g.morphAttributes[morphLayout.name] = morphAttribute; @@ -427,132 +413,12 @@ export const mergeGeometryTextureAtlas = (mergeable, textureSize) => { } // sanity check if (attributeDataIndex !== layout.count) { - console.warn('desynced attribute data 1', layout.name, attributeDataIndex, layout.count); - debugger; + console.error('desynced attribute data', layout.name, attributeDataIndex, layout.count); } geometry.setAttribute(layout.name, attribute); } }; - /* function mergeBufferAttributes( attributes ) { - - let TypedArray; - let itemSize; - let normalized; - let arrayLength = 0; - - for ( let i = 0; i < attributes.length; ++ i ) { - - const attribute = attributes[ i ]; - - if ( attribute.isInterleavedBufferAttribute ) { - - console.error( 'THREE.BufferGeometryUtils: .mergeBufferAttributes() failed. InterleavedBufferAttributes are not supported.' ); - return null; - - } - - if ( TypedArray === undefined ) TypedArray = attribute.array.constructor; - if ( TypedArray !== attribute.array.constructor ) { - - console.error( 'THREE.BufferGeometryUtils: .mergeBufferAttributes() failed. BufferAttribute.array must be of consistent array types across matching attributes.' ); - return null; - - } - - if ( itemSize === undefined ) itemSize = attribute.itemSize; - if ( itemSize !== attribute.itemSize ) { - - console.error( 'THREE.BufferGeometryUtils: .mergeBufferAttributes() failed. BufferAttribute.itemSize must be consistent across matching attributes.' ); - return null; - - } - - if ( normalized === undefined ) normalized = attribute.normalized; - if ( normalized !== attribute.normalized ) { - - console.error( 'THREE.BufferGeometryUtils: .mergeBufferAttributes() failed. BufferAttribute.normalized must be consistent across matching attributes.' ); - return null; - - } - - arrayLength += attribute.array.length; - - } - - const array = new TypedArray( arrayLength ); - let offset = 0; - - for ( let i = 0; i < attributes.length; ++ i ) { - - array.set( attributes[ i ].array, offset ); - - offset += attributes[ i ].array.length; - - } - - return new THREE.BufferAttribute( array, itemSize, normalized ); - - } - const _mergeMorphAttributes = (geometry, geometries, objects, morphAttributeLayouts) => { - // collect - const morphAttributesUsed = new Set( Object.keys( geometries[ 0 ].morphAttributes ) ); - const morphAttributes = {}; - for (const geometry of geometries) { - for ( const name in geometry.morphAttributes ) { - - if ( ! morphAttributesUsed.has( name ) ) { - - console.error( 'THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index ' + i + '. .morphAttributes must be consistent throughout all geometries.' ); - return null; - - } - - if ( morphAttributes[ name ] === undefined ) morphAttributes[ name ] = []; - - morphAttributes[ name ].push( geometry.morphAttributes[ name ] ); - - } - } - - // merge - for ( const name in morphAttributes ) { - - const numMorphTargets = morphAttributes[ name ][ 0 ].length; - - if ( numMorphTargets === 0 ) break; - - geometry.morphAttributes = geometry.morphAttributes || {}; - geometry.morphAttributes[ name ] = []; - - for ( let i = 0; i < numMorphTargets; ++ i ) { - - const morphAttributesToMerge = []; - - for ( let j = 0; j < morphAttributes[ name ].length; ++ j ) { - - morphAttributesToMerge.push( morphAttributes[ name ][ j ][ i ] ); - - } - - const mergedMorphAttribute = mergeBufferAttributes( morphAttributesToMerge ); - - if ( ! mergedMorphAttribute ) { - - console.error( 'THREE.BufferGeometryUtils: .mergeBufferGeometries() failed while trying to merge the ' + name + ' morphAttribute.' ); - return null; - - } - - geometry.morphAttributes[ name ].push( mergedMorphAttribute ); - - } - - } - }; */ const _mergeMorphAttributes = (geometry, geometries, objects, morphAttributeLayouts) => { - // console.log('morphAttributeLayouts', morphAttributeLayouts); - // globalThis.morphAttributeLayouts = morphAttributeLayouts; - for (const morphLayout of morphAttributeLayouts) { const morphsArray = Array(morphLayout.arraySize); for (let i = 0; i < morphLayout.arraySize; i++) { @@ -560,71 +426,27 @@ export const mergeGeometryTextureAtlas = (mergeable, textureSize) => { const morphAttribute = new THREE.BufferAttribute(morphData, morphLayout.itemSize); morphsArray[i] = morphAttribute; let morphDataIndex = 0; - - /* const geometries2 = geometries.slice(); - // randomize the order of geometries2 - for (let j = 0; j < geometries2.length; j++) { - const j2 = Math.floor(Math.random() * geometries2.length); - const tmp = geometries2[j]; - geometries2[j] = geometries2[j2]; - geometries2[j2] = tmp; - } */ - console.log('num geos', geometries); - - let first = 0; for (let j = 0; j < geometries.length; j++) { - // const object = objects[i]; const g = geometries[j]; - // const r = Math.random(); - let gMorphAttribute = g.morphAttributes[morphLayout.name]; - if (gMorphAttribute.length !== morphsArray.length) { - debugger; - } gMorphAttribute = gMorphAttribute?.[i]; - if (gMorphAttribute.count !== g.attributes.position.count) { - debugger; - } if (gMorphAttribute) { - // console.log('src', first, g, gMorphAttribute, morphAttribute, object); morphData.set(gMorphAttribute.array, morphDataIndex); - const nz = gMorphAttribute.array.filter(n => Math.abs(n) >= 0.01); - console.log('case 1', first, nz.length); - - /* if (first === 2 || first === 1) { - for (let i = 0; i < gMorphAttribute.array.length; i++) { - // morphData[morphDataIndex + i] = r; - // morphData[morphDataIndex + i] *= 100; - } - } */ - - /* for (let i = 0; i < morphData.length; i++) { - morphData[i] = Math.random(); - } */ - if ((gMorphAttribute.count * gMorphAttribute.itemSize) !== gMorphAttribute.array.length) { - debugger; - } morphDataIndex += gMorphAttribute.count * gMorphAttribute.itemSize; } else { - console.log('case 2'); - debugger; const matchingAttribute = g.attributes[morphLayout.name]; morphDataIndex += matchingAttribute.count * matchingAttribute.itemSize; } - - first++; } // sanity check if (morphDataIndex !== morphLayout.count) { - console.warn('desynced morph data 2', morphLayout.name, morphDataIndex, morphLayout.count); - debugger; + console.error('desynced morph data', morphLayout.name, morphDataIndex, morphLayout.count); } } geometry.morphAttributes[morphLayout.name] = morphsArray; - // geometry.morphTargetsRelative = true; } }; const _mergeIndices = (geometry, geometries) => { @@ -641,9 +463,6 @@ export const mergeGeometryTextureAtlas = (mergeable, textureSize) => { for (let i = 0; i < srcIndexData.length; i++) { indexData[indexOffset++] = srcIndexData[i] + positionOffset; } - if (g.attributes.position.count !== g.morphAttributes.position[0].count) { - debugger; - } positionOffset += g.attributes.position.count; } geometry.setIndex(new THREE.BufferAttribute(indexData, 1)); @@ -758,12 +577,6 @@ export const mergeGeometryTextureAtlas = (mergeable, textureSize) => { }; export const optimizeAvatarModel = async (model, options = {}) => { - /* if (!model) { - debugger; - } - if (!model.traverse) { - debugger; - } */ const textureSize = options.textureSize ?? defaultTextureSize; const mergeables = getMergeableObjects(model); @@ -789,9 +602,6 @@ export const optimizeAvatarModel = async (model, options = {}) => { atlasTextures, } = mergeGeometryTextureAtlas(mergeable, textureSize); - /* const m = new THREE.MeshPhongMaterial({ - color: 0xFF0000, - }); */ const m = material; const _updateMaterial = () => { if (atlasTextures) { @@ -810,7 +620,6 @@ export const optimizeAvatarModel = async (model, options = {}) => { m.needsUpdate = true; }; _updateMaterial(); - // console.log('got material', m); const _makeMesh = () => { if (type === 'mesh') { @@ -822,7 +631,6 @@ export const optimizeAvatarModel = async (model, options = {}) => { skinnedMesh.morphTargetDictionary = morphTargetDictionaryArray[0]; skinnedMesh.morphTargetInfluences = morphTargetInfluencesArray[0]; // skinnedMesh.updateMorphTargets(); - // console.log('got influences', skinnedMesh.morphTargetInfluences); return skinnedMesh; } else { throw new Error(`unknown type ${type}`); @@ -835,23 +643,16 @@ export const optimizeAvatarModel = async (model, options = {}) => { }; const mergedMeshes = mergeables.map((mergeable, i) => _mergeMesh(mergeable, i)); + // construct a new object with the merged meshes const object = new THREE.Object3D(); for (const mesh of mergedMeshes) { object.add(mesh); } - - /* // also need skeletons or else the parse will crash - const skeletons = getSkeletons(model); - for (const skeleton of skeletons) { - object.add(skeleton); - } */ - - // same as above, but for bones + // also need to keep the bones const bones = getBones(model); for (const bone of bones) { object.add(bone); } - // console.log('got bones', model, bones); // XXX this should anti-index flattened index ranges for the multi-materials case From da9c5d4f507c65e948d1c4981573c872a0c9f189 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Tue, 9 Aug 2022 22:21:19 -0400 Subject: [PATCH 061/125] Bugfix avatar optimizer texture encoding copy --- avatar-optimizer.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/avatar-optimizer.js b/avatar-optimizer.js index fa42d955a2..9bd68dd155 100644 --- a/avatar-optimizer.js +++ b/avatar-optimizer.js @@ -538,7 +538,7 @@ export const mergeGeometryTextureAtlas = (mergeable, textureSize) => { t.wrapS = originalTexture.wrapS; t.wrapT = originalTexture.wrapT; t.mapping = originalTexture.mapping; - // t.encoding = originalTexture.encoding; + t.encoding = originalTexture.encoding; t.flipY = false; t.needsUpdate = true; From 0848d45954a645ccfe5f26e4a1fe33152a378323 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Tue, 9 Aug 2022 22:29:58 -0400 Subject: [PATCH 062/125] Avatar renderer quality settings attachment --- avatars/avatar-renderer.js | 73 +++++++++++++++++++++----------------- 1 file changed, 41 insertions(+), 32 deletions(-) diff --git a/avatars/avatar-renderer.js b/avatars/avatar-renderer.js index cdced21968..2bf0cc7185 100644 --- a/avatars/avatar-renderer.js +++ b/avatars/avatar-renderer.js @@ -127,6 +127,16 @@ export class AvatarRenderer { this.scene = new THREE.Object3D(); this.placeholderMesh = _makeAvatarPlaceholderMesh(); + // + + this.spriteAvatarMeshPromise = null; + this.crunchedModelPromise = null; + this.optimizedModelPromise = null; + + this.spriteAvatarMesh = null; + this.crunchedModel = null; + this.optimizedModel = null; + // this.createSpriteAvatarMesh = offscreenEngineManager.createFunction([ @@ -224,49 +234,48 @@ export class AvatarRenderer { switch (this.quality) { case 1: { - if (!this.spriteAvatarMesh) { - this.spriteAvatarMesh = {}; - - const textureImages = await this.createSpriteAvatarMesh([this.object.arrayBuffer, this.object.srcUrl]); - this.spriteAvatarMesh = avatarSpriter.createSpriteAvatarMeshFromTextures(textureImages); - this.scene.add(this.spriteAvatarMesh); + if (!this.spriteAvatarMeshPromise) { + this.spriteAvatarMeshPromise = (async () => { + const textureImages = await this.createSpriteAvatarMesh([this.object.arrayBuffer, this.object.srcUrl]); + this.spriteAvatarMesh = avatarSpriter.createSpriteAvatarMeshFromTextures(textureImages); + })(); } + await this.spriteAvatarMeshPromise; break; } case 2: { - if (!this.crunchedModel) { - this.crunchedModel = {}; - - const glbData = await this.crunchAvatarModel([this.object.arrayBuffer, this.object.srcUrl]); - const glb = await new Promise((accept, reject) => { - const {gltfLoader} = loaders; - gltfLoader.parse(glbData, this.object.srcUrl, object => { - accept(object.scene); - }, reject); - }); - this.crunchedModel = glb; - this.scene.add(this.crunchedModel); + if (!this.crunchedModelPromise) { + this.crunchedModelPromise = (async () => { + const glbData = await this.crunchAvatarModel([this.object.arrayBuffer, this.object.srcUrl]); + const glb = await new Promise((accept, reject) => { + const {gltfLoader} = loaders; + gltfLoader.parse(glbData, this.object.srcUrl, object => { + accept(object.scene); + }, reject); + }); + this.crunchedModel = glb; + })(); } + await this.crunchedModelPromise; break; } case 3: { - if (!this.optimizedModel) { - this.optimizedModel = {}; - - const parseVrm = (arrayBuffer, srcUrl) => new Promise((accept, reject) => { - const {gltfLoader} = loaders; - gltfLoader.parse(arrayBuffer, srcUrl, accept, reject); - }); - const object = await parseVrm(this.object.arrayBuffer, this.object.srcUrl); - - const glb = await avatarOptimizer.optimizeAvatarModel(object.scene); + if (!this.optimizedModelPromise) { + this.optimizedModelPromise = (async () => { + const parseVrm = (arrayBuffer, srcUrl) => new Promise((accept, reject) => { + const {gltfLoader} = loaders; + gltfLoader.parse(arrayBuffer, srcUrl, accept, reject); + }); + const object = await parseVrm(this.object.arrayBuffer, this.object.srcUrl); - _bindSkeleton(glb, this.object); - this.optimizedModel = glb; + const glb = await avatarOptimizer.optimizeAvatarModel(object.scene); - this.optimizedModel.updateMatrixWorld(); - this.scene.add(this.optimizedModel); + _bindSkeleton(glb, this.object); + this.optimizedModel = glb; + this.optimizedModel.updateMatrixWorld(); + })(); } + await this.optimizedModelPromise; break; } case 4: { From 19b49e6afb57a0e0c7891f6112802d742ea13426 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Tue, 9 Aug 2022 22:30:10 -0400 Subject: [PATCH 063/125] Clean up model initialization in avatars.js --- avatars/avatars.js | 31 +------------------------------ 1 file changed, 1 insertion(+), 30 deletions(-) diff --git a/avatars/avatars.js b/avatars/avatars.js index e8ca5302a6..d42cded8e7 100644 --- a/avatars/avatars.js +++ b/avatars/avatars.js @@ -412,36 +412,7 @@ class Avatar { this.isLocalPlayer = options.isLocalPlayer !== undefined ? options.isLocalPlayer : true; this.object = object; - const model = (() => { - let o = object; - if (o && !o.isMesh) { - o = o.scene; - } - /* if (!o) { - const scene = new THREE.Scene(); - - const skinnedMesh = new THREE.Object3D(); - skinnedMesh.isSkinnedMesh = true; - skinnedMesh.skeleton = null; - skinnedMesh.bind = function(skeleton) { - this.skeleton = skeleton; - }; - skinnedMesh.bind(_importSkeleton(skeletonString)); - scene.add(skinnedMesh); - - const hips = _findHips(skinnedMesh.skeleton); - const armature = _findArmature(hips); - scene.add(armature); - - o = scene; - } */ - return o; - })(); - - // if (!model.parent) { - console.log('model parent', model.parent, new Error().stack); - // } - + const model = object.scene; this.model = model; // XXX still needed? this.model.visible = false; From e29fbf62297e59f68ecfca494c24265a2cec5667 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Wed, 10 Aug 2022 07:23:36 -0400 Subject: [PATCH 064/125] Avatar optimizer return GLB data --- avatar-optimizer.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/avatar-optimizer.js b/avatar-optimizer.js index 9bd68dd155..1c8dc77cc4 100644 --- a/avatar-optimizer.js +++ b/avatar-optimizer.js @@ -656,9 +656,9 @@ export const optimizeAvatarModel = async (model, options = {}) => { // XXX this should anti-index flattened index ranges for the multi-materials case - return object; + // return object; - /* const glbData = await new Promise((accept, reject) => { + const glbData = await new Promise((accept, reject) => { const {gltfExporter} = exporters; gltfExporter.parse( object, @@ -676,5 +676,5 @@ export const optimizeAvatarModel = async (model, options = {}) => { }, ); }); - return glbData; */ + return glbData; }; \ No newline at end of file From 74feed2aa5dc08f7a563e491bff3536296689987 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Wed, 10 Aug 2022 07:27:20 -0400 Subject: [PATCH 065/125] PAss through abord controller in avatar renderer --- avatars/avatar-renderer.js | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/avatars/avatar-renderer.js b/avatars/avatar-renderer.js index 2bf0cc7185..904635bd42 100644 --- a/avatars/avatar-renderer.js +++ b/avatars/avatar-renderer.js @@ -137,6 +137,10 @@ export class AvatarRenderer { this.crunchedModel = null; this.optimizedModel = null; + // + + this.abortController = new AbortController(); + // this.createSpriteAvatarMesh = offscreenEngineManager.createFunction([ @@ -236,7 +240,9 @@ export class AvatarRenderer { case 1: { if (!this.spriteAvatarMeshPromise) { this.spriteAvatarMeshPromise = (async () => { - const textureImages = await this.createSpriteAvatarMesh([this.object.arrayBuffer, this.object.srcUrl]); + const textureImages = await this.createSpriteAvatarMesh([this.object.arrayBuffer, this.object.srcUrl], { + signal: this.abortController.signal, + }); this.spriteAvatarMesh = avatarSpriter.createSpriteAvatarMeshFromTextures(textureImages); })(); } @@ -246,13 +252,14 @@ export class AvatarRenderer { case 2: { if (!this.crunchedModelPromise) { this.crunchedModelPromise = (async () => { - const glbData = await this.crunchAvatarModel([this.object.arrayBuffer, this.object.srcUrl]); - const glb = await new Promise((accept, reject) => { + const glbData = await this.crunchAvatarModel([this.object.arrayBuffer, this.object.srcUrl], { + signal: this.abortController.signal, + }); + const object = await new Promise((accept, reject) => { const {gltfLoader} = loaders; - gltfLoader.parse(glbData, this.object.srcUrl, object => { - accept(object.scene); - }, reject); + gltfLoader.parse(glbData, this.object.srcUrl, accept, reject); }); + const glb = object.scene; this.crunchedModel = glb; })(); } @@ -262,13 +269,14 @@ export class AvatarRenderer { case 3: { if (!this.optimizedModelPromise) { this.optimizedModelPromise = (async () => { - const parseVrm = (arrayBuffer, srcUrl) => new Promise((accept, reject) => { + const glbData = await this.optimizeAvatarModel([this.object.arrayBuffer, this.object.srcUrl], { + signal: this.abortController.signal, + }); + const object = await new Promise((accept, reject) => { const {gltfLoader} = loaders; - gltfLoader.parse(arrayBuffer, srcUrl, accept, reject); + gltfLoader.parse(glbData, this.object.srcUrl, accept, reject); }); - const object = await parseVrm(this.object.arrayBuffer, this.object.srcUrl); - - const glb = await avatarOptimizer.optimizeAvatarModel(object.scene); + const glb = object.scene; _bindSkeleton(glb, this.object); this.optimizedModel = glb; From 64e7946d211672ca00d6efeb0d01b3d22b12a551 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Wed, 10 Aug 2022 07:27:44 -0400 Subject: [PATCH 066/125] Avatar renderr cleanup --- avatars/avatar-renderer.js | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/avatars/avatar-renderer.js b/avatars/avatar-renderer.js index 904635bd42..385fb9f917 100644 --- a/avatars/avatar-renderer.js +++ b/avatars/avatar-renderer.js @@ -152,7 +152,7 @@ export class AvatarRenderer { `, async function(arrayBuffer, srcUrl) { const parseVrm = (arrayBuffer, srcUrl) => new Promise((accept, reject) => { - const { gltfLoader } = loaders; + const {gltfLoader} = loaders; gltfLoader.parse(arrayBuffer, srcUrl, object => { accept(object.scene); }, reject); @@ -172,7 +172,7 @@ export class AvatarRenderer { `, async function(arrayBuffer, srcUrl) { const parseVrm = (arrayBuffer, srcUrl) => new Promise((accept, reject) => { - const { gltfLoader } = loaders; + const {gltfLoader} = loaders; gltfLoader.parse(arrayBuffer, srcUrl, object => { accept(object.scene); }, reject); @@ -193,10 +193,8 @@ export class AvatarRenderer { `, async function(arrayBuffer, srcUrl) { const parseVrm = (arrayBuffer, srcUrl) => new Promise((accept, reject) => { - const { gltfLoader } = loaders; - gltfLoader.parse(arrayBuffer, srcUrl, object => { - accept(object); - }, reject); + const {gltfLoader} = loaders; + gltfLoader.parse(arrayBuffer, srcUrl, accept, reject); }); const object = await parseVrm(arrayBuffer, srcUrl); From 1aa3d86e168b3e6a073b8042961bdd9762123811 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Wed, 10 Aug 2022 07:28:04 -0400 Subject: [PATCH 067/125] Avatar renderer current mesh API cleanup --- avatars/avatar-renderer.js | 47 ++++++++++++++++++++++---------------- 1 file changed, 27 insertions(+), 20 deletions(-) diff --git a/avatars/avatar-renderer.js b/avatars/avatar-renderer.js index 385fb9f917..f27475c96b 100644 --- a/avatars/avatar-renderer.js +++ b/avatars/avatar-renderer.js @@ -221,12 +221,34 @@ export class AvatarRenderer { // const parsedObject = await parseVrm(glbData, srcUrl); // console.log('compare skeletons', object, parsedObject); + console.log('optimize avatar model glb data', glbData); + return glbData; } ]); this.setQuality(quality); } + getCurrentMesh() { + switch (this.quality) { + case 1: { + return this.spriteAvatarMesh; + } + case 2: { + return this.crunchedModel; + } + case 3: { + return this.optimizedModel; + } + /* case 4: { + break; + } */ + default: { + return null; + // throw new Error('unknown avatar quality: ' + this.quality); + } + } + } async setQuality(quality) { this.quality = quality; @@ -295,25 +317,10 @@ export class AvatarRenderer { // remove the old placeholder mesh this.scene.remove(this.placeholderMesh); // add the new avatar mesh - switch (this.quality) { - case 1: { - this.scene.add(this.spriteAvatarMesh); - break; - } - case 2: { - this.scene.add(this.crunchedModel); - break; - } - case 3: { - this.scene.add(this.optimizedModel); - break; - } - case 4: { - break; - } - default: { - throw new Error('unknown avatar quality: ' + this.quality); - } - } + const currentMesh = this.getCurrentMesh(); + this.scene.add(currentMesh); + } + destroy() { + // nothing } } \ No newline at end of file From 276c0f2ef8a2d336e2489cf4a1aad51283f038a6 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Wed, 10 Aug 2022 07:28:29 -0400 Subject: [PATCH 068/125] Avatar.js avatar renderer cleanup --- avatars/avatars.js | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/avatars/avatars.js b/avatars/avatars.js index d42cded8e7..cba0e10617 100644 --- a/avatars/avatars.js +++ b/avatars/avatars.js @@ -418,10 +418,10 @@ class Avatar { { this.renderer = new AvatarRenderer(object); - scene.add(this.renderer.scene); // XXX debug + scene.add(this.renderer.scene); this.renderer.scene.updateMatrixWorld(); - globalThis.avatarRenderer = this.renderer; - globalThis.scene = scene; + // globalThis.avatarRenderer = this.renderer; + // globalThis.scene = scene; } this.spriteMegaAvatarMesh = null; @@ -1811,15 +1811,14 @@ class Avatar { }; - const _updateSubAvatars = () => { + /* const _updateSubAvatars = () => { if (this.spriteAvatarMesh) { this.spriteAvatarMesh.update(timestamp, timeDiff, { playerAvatar: this, camera, }); } - }; - + }; */ const _motionControls = () => { this.sdkInputs.hmd.position.copy(this.inputs.hmd.position); @@ -1948,7 +1947,7 @@ class Avatar { this.emoter.update(now); this.options.visemes && _updateVisemes(); - _updateSubAvatars(); + // _updateSubAvatars(); const debug = metaversefile.useDebug(); if (debug.enabled && !this.debugMesh) { @@ -2132,7 +2131,7 @@ class Avatar { } */ destroy() { - if (this.spriteAvatarMesh) { + /* if (this.spriteAvatarMesh) { scene.remove(this.spriteAvatarMesh); } if (this.crunchedModel) { @@ -2140,7 +2139,9 @@ class Avatar { } if (this.optimizedModel) { scene.remove(this.optimizedModel); - } + } */ + this.renderer.destroy(); + scene.remove(this.renderer.scene); this.setAudioEnabled(false); } From 67975a96406ac2e4e760b21d039f062960987907 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Wed, 10 Aug 2022 07:36:55 -0400 Subject: [PATCH 069/125] More avatar renderer load work --- avatars/avatar-renderer.js | 124 +++++++++++++++++++++---------------- 1 file changed, 70 insertions(+), 54 deletions(-) diff --git a/avatars/avatar-renderer.js b/avatars/avatar-renderer.js index f27475c96b..870cb98246 100644 --- a/avatars/avatar-renderer.js +++ b/avatars/avatar-renderer.js @@ -114,11 +114,16 @@ const _bindSkeleton = (dstModel, srcObject) => { } }); }; +// const updateEvent = new MessageEvent('update'); -export class AvatarRenderer { +export class AvatarRenderer /* extends EventTarget */ { constructor(object, { quality = defaultAvatarQuality, } = {}) { + // super(); + + // + this.object = object; this.quality = quality; @@ -226,6 +231,7 @@ export class AvatarRenderer { return glbData; } ]); + this.loadPromise = null; this.setQuality(quality); } @@ -252,73 +258,83 @@ export class AvatarRenderer { async setQuality(quality) { this.quality = quality; - // XXX destroy the old avatars? + // XXX destroy old avatars? this.scene.clear(); this.scene.add(this.placeholderMesh); - switch (this.quality) { - case 1: { - if (!this.spriteAvatarMeshPromise) { - this.spriteAvatarMeshPromise = (async () => { - const textureImages = await this.createSpriteAvatarMesh([this.object.arrayBuffer, this.object.srcUrl], { - signal: this.abortController.signal, - }); - this.spriteAvatarMesh = avatarSpriter.createSpriteAvatarMeshFromTextures(textureImages); - })(); + const loadPromise = (async () => { + switch (this.quality) { + case 1: { + if (!this.spriteAvatarMeshPromise) { + this.spriteAvatarMeshPromise = (async () => { + const textureImages = await this.createSpriteAvatarMesh([this.object.arrayBuffer, this.object.srcUrl], { + signal: this.abortController.signal, + }); + this.spriteAvatarMesh = avatarSpriter.createSpriteAvatarMeshFromTextures(textureImages); + })(); + } + await this.spriteAvatarMeshPromise; + break; } - await this.spriteAvatarMeshPromise; - break; - } - case 2: { - if (!this.crunchedModelPromise) { - this.crunchedModelPromise = (async () => { - const glbData = await this.crunchAvatarModel([this.object.arrayBuffer, this.object.srcUrl], { - signal: this.abortController.signal, - }); - const object = await new Promise((accept, reject) => { - const {gltfLoader} = loaders; - gltfLoader.parse(glbData, this.object.srcUrl, accept, reject); - }); - const glb = object.scene; - this.crunchedModel = glb; - })(); + case 2: { + if (!this.crunchedModelPromise) { + this.crunchedModelPromise = (async () => { + const glbData = await this.crunchAvatarModel([this.object.arrayBuffer, this.object.srcUrl], { + signal: this.abortController.signal, + }); + const object = await new Promise((accept, reject) => { + const {gltfLoader} = loaders; + gltfLoader.parse(glbData, this.object.srcUrl, accept, reject); + }); + const glb = object.scene; + this.crunchedModel = glb; + })(); + } + await this.crunchedModelPromise; + break; } - await this.crunchedModelPromise; - break; - } - case 3: { - if (!this.optimizedModelPromise) { - this.optimizedModelPromise = (async () => { - const glbData = await this.optimizeAvatarModel([this.object.arrayBuffer, this.object.srcUrl], { - signal: this.abortController.signal, - }); - const object = await new Promise((accept, reject) => { - const {gltfLoader} = loaders; - gltfLoader.parse(glbData, this.object.srcUrl, accept, reject); - }); - const glb = object.scene; + case 3: { + if (!this.optimizedModelPromise) { + this.optimizedModelPromise = (async () => { + const glbData = await this.optimizeAvatarModel([this.object.arrayBuffer, this.object.srcUrl], { + signal: this.abortController.signal, + }); + const object = await new Promise((accept, reject) => { + const {gltfLoader} = loaders; + gltfLoader.parse(glbData, this.object.srcUrl, accept, reject); + }); + const glb = object.scene; - _bindSkeleton(glb, this.object); - this.optimizedModel = glb; - this.optimizedModel.updateMatrixWorld(); - })(); + _bindSkeleton(glb, this.object); + this.optimizedModel = glb; + this.optimizedModel.updateMatrixWorld(); + })(); + } + await this.optimizedModelPromise; + break; + } + case 4: { + break; + } + default: { + throw new Error('unknown avatar quality: ' + this.quality); } - await this.optimizedModelPromise; - break; - } - case 4: { - break; - } - default: { - throw new Error('unknown avatar quality: ' + this.quality); } - } + })(); + // if (!this.loadPromise) { + this.loadPromise = loadPromise; + // } // remove the old placeholder mesh this.scene.remove(this.placeholderMesh); // add the new avatar mesh const currentMesh = this.getCurrentMesh(); this.scene.add(currentMesh); + + // this.dispatchEvent(updateEvent); + } + waitForLoad() { + return this.loadPromise; } destroy() { // nothing From b7ab8211213567f9ab31239a5a91708bc7ad1fec Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Wed, 10 Aug 2022 07:37:05 -0400 Subject: [PATCH 070/125] Avatar renderer commenting --- avatars/avatar-renderer.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/avatars/avatar-renderer.js b/avatars/avatar-renderer.js index 870cb98246..f95d180819 100644 --- a/avatars/avatar-renderer.js +++ b/avatars/avatar-renderer.js @@ -148,6 +148,8 @@ export class AvatarRenderer /* extends EventTarget */ { // + // XXX support signal in offscreenEngineManager.createFunction(...)(..., {signal}) + // XXX integrate more cleanly with totum VRM type (do not double-parse) this.createSpriteAvatarMesh = offscreenEngineManager.createFunction([ `\ import * as THREE from 'three'; From 262b3b0adf1edda5ee830f93fc61f63bd6147542 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Wed, 10 Aug 2022 07:38:17 -0400 Subject: [PATCH 071/125] Avatar renderer load debugging --- avatars/avatar-renderer.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/avatars/avatar-renderer.js b/avatars/avatar-renderer.js index f95d180819..1af34a0d65 100644 --- a/avatars/avatar-renderer.js +++ b/avatars/avatar-renderer.js @@ -264,7 +264,7 @@ export class AvatarRenderer /* extends EventTarget */ { this.scene.clear(); this.scene.add(this.placeholderMesh); - const loadPromise = (async () => { + this.loadPromise = (async () => { switch (this.quality) { case 1: { if (!this.spriteAvatarMeshPromise) { @@ -323,9 +323,8 @@ export class AvatarRenderer /* extends EventTarget */ { } } })(); - // if (!this.loadPromise) { - this.loadPromise = loadPromise; - // } + + await this.loadPromise; // remove the old placeholder mesh this.scene.remove(this.placeholderMesh); From 97448115821fc51ab600327eef1807345ef87ab6 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Wed, 10 Aug 2022 07:38:38 -0400 Subject: [PATCH 072/125] Avatar renderer logging cleanup --- avatars/avatar-renderer.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/avatars/avatar-renderer.js b/avatars/avatar-renderer.js index 1af34a0d65..8278c88d37 100644 --- a/avatars/avatar-renderer.js +++ b/avatars/avatar-renderer.js @@ -228,8 +228,6 @@ export class AvatarRenderer /* extends EventTarget */ { // const parsedObject = await parseVrm(glbData, srcUrl); // console.log('compare skeletons', object, parsedObject); - console.log('optimize avatar model glb data', glbData); - return glbData; } ]); From a6672a02c7600632adc4e4a18bdc3be5a8b69b74 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Wed, 10 Aug 2022 08:04:10 -0400 Subject: [PATCH 073/125] Avatar renderer culling --- avatars/avatar-renderer.js | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/avatars/avatar-renderer.js b/avatars/avatar-renderer.js index 8278c88d37..d394291451 100644 --- a/avatars/avatar-renderer.js +++ b/avatars/avatar-renderer.js @@ -116,6 +116,14 @@ const _bindSkeleton = (dstModel, srcObject) => { }; // const updateEvent = new MessageEvent('update'); +const _unfrustumCull = o => { + o.traverse(o => { + if (o.isMesh) { + o.frustumCulled = false; + } + }); +}; + export class AvatarRenderer /* extends EventTarget */ { constructor(object, { quality = defaultAvatarQuality, @@ -270,7 +278,9 @@ export class AvatarRenderer /* extends EventTarget */ { const textureImages = await this.createSpriteAvatarMesh([this.object.arrayBuffer, this.object.srcUrl], { signal: this.abortController.signal, }); - this.spriteAvatarMesh = avatarSpriter.createSpriteAvatarMeshFromTextures(textureImages); + const glb = avatarSpriter.createSpriteAvatarMeshFromTextures(textureImages); + _unfrustumCull(glb); + this.spriteAvatarMesh = glb; })(); } await this.spriteAvatarMeshPromise; @@ -287,6 +297,9 @@ export class AvatarRenderer /* extends EventTarget */ { gltfLoader.parse(glbData, this.object.srcUrl, accept, reject); }); const glb = object.scene; + _unfrustumCull(glb); + + _bindSkeleton(glb, this.object); this.crunchedModel = glb; })(); } @@ -304,10 +317,11 @@ export class AvatarRenderer /* extends EventTarget */ { gltfLoader.parse(glbData, this.object.srcUrl, accept, reject); }); const glb = object.scene; + _unfrustumCull(glb); _bindSkeleton(glb, this.object); this.optimizedModel = glb; - this.optimizedModel.updateMatrixWorld(); + // this.optimizedModel.updateMatrixWorld(); })(); } await this.optimizedModelPromise; @@ -331,6 +345,9 @@ export class AvatarRenderer /* extends EventTarget */ { this.scene.add(currentMesh); // this.dispatchEvent(updateEvent); + } + update() { + } waitForLoad() { return this.loadPromise; From 7b45d634ec98961680fc013bc2e3ebe3e2541f42 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Wed, 10 Aug 2022 08:13:26 -0400 Subject: [PATCH 074/125] Hook in avatar renderer abort --- avatars/avatar-renderer.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/avatars/avatar-renderer.js b/avatars/avatar-renderer.js index d394291451..de36529e5a 100644 --- a/avatars/avatar-renderer.js +++ b/avatars/avatar-renderer.js @@ -6,6 +6,7 @@ import * as avatarSpriter from '../avatar-spriter.js'; import offscreenEngineManager from '../offscreen-engine-manager.js'; import loaders from '../loaders.js'; // import exporters from '../exporters.js'; +import {abortError} from '../lock-manager.js'; import { defaultAvatarQuality, } from '../constants.js'; @@ -156,8 +157,9 @@ export class AvatarRenderer /* extends EventTarget */ { // - // XXX support signal in offscreenEngineManager.createFunction(...)(..., {signal}) + // XXX add frustum culling in update() // XXX integrate more cleanly with totum VRM type (do not double-parse) + // XXX unlock avatar icon this.createSpriteAvatarMesh = offscreenEngineManager.createFunction([ `\ import * as THREE from 'three'; @@ -353,6 +355,6 @@ export class AvatarRenderer /* extends EventTarget */ { return this.loadPromise; } destroy() { - // nothing + this.abortController.abort(abortError); } } \ No newline at end of file From a0bbaf2c1fc76d642987cb7ec2a3861079187ff3 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Wed, 10 Aug 2022 08:13:57 -0400 Subject: [PATCH 075/125] Offscreen engine abort cleanup --- engine-worker.js | 4 ++-- offscreen-engine.js | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/engine-worker.js b/engine-worker.js index b970d814cd..db796a5ca0 100644 --- a/engine-worker.js +++ b/engine-worker.js @@ -138,10 +138,10 @@ window.innerHeight = canvas.height; window.devicePixelRatio = 1; bindCanvas(canvas); -const match = location.hash.match(/^#id=(.+)$/); +/* const match = location.hash.match(/^#id=(.+)$/); const id = match ? match[1] : null; if (id) { // nothing } else { throw new Error('no id in engine worker'); -} \ No newline at end of file +} */ \ No newline at end of file diff --git a/offscreen-engine.js b/offscreen-engine.js index c31caeb580..02169f1fdb 100644 --- a/offscreen-engine.js +++ b/offscreen-engine.js @@ -34,7 +34,7 @@ class OffscreenEngine { }); iframe.allow = 'cross-origin-isolated'; - iframe.src = `${inappPreviewHost}/engine.html#id=${this.id}`; + iframe.src = `${inappPreviewHost}/engine.html`; document.body.appendChild(iframe); this.iframe = iframe; From ed0a0402e06af02468bc6a5ddfe789ae693ee538 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Wed, 10 Aug 2022 13:19:03 -0400 Subject: [PATCH 076/125] Add avatars frustum culling --- avatars/avatar-renderer.js | 55 ++++++++++++++++++++++++++++++++++++-- avatars/avatars.js | 48 ++++++++++++++++----------------- 2 files changed, 76 insertions(+), 27 deletions(-) diff --git a/avatars/avatar-renderer.js b/avatars/avatar-renderer.js index de36529e5a..9c9c6088ce 100644 --- a/avatars/avatar-renderer.js +++ b/avatars/avatar-renderer.js @@ -5,6 +5,7 @@ import * as avatarCruncher from '../avatar-cruncher.js'; import * as avatarSpriter from '../avatar-spriter.js'; import offscreenEngineManager from '../offscreen-engine-manager.js'; import loaders from '../loaders.js'; +import {camera} from '../renderer.js'; // import exporters from '../exporters.js'; import {abortError} from '../lock-manager.js'; import { @@ -12,6 +13,9 @@ import { } from '../constants.js'; // import { downloadFile } from '../util.js'; +// const localBox = new THREE.Box3(); +const localSphere = new THREE.Sphere(); + const avatarPlaceholderImagePromise = (async () => { const avatarPlaceholderImage = new Image(); avatarPlaceholderImage.src = '/images/user.png'; @@ -124,6 +128,35 @@ const _unfrustumCull = o => { } }); }; +/* const _getMergedBoundingBox = o => { + const box = new THREE.Box3(); + o.updateMatrixWorld(); + o.traverse(o => { + if (o.isMesh) { + if (!o.geometry.boundingBox) { + debugger; + } + if (!o.geometry.boundingSphere) { + debugger; + } + box.expandByObject(o); + } + }); + return box; +}; */ +const _getMergedBoundingSphere = o => { + const sphere = new THREE.Sphere(); + o.updateMatrixWorld(); + o.traverse(o => { + if (o.isMesh) { + sphere.union( + localSphere.copy(o.geometry.boundingSphere) + .applyMatrix4(o.matrixWorld) + ); + } + }); + return sphere; +}; export class AvatarRenderer /* extends EventTarget */ { constructor(object, { @@ -139,6 +172,7 @@ export class AvatarRenderer /* extends EventTarget */ { // this.scene = new THREE.Object3D(); + this.scene.name = 'avatarRendererScene'; this.placeholderMesh = _makeAvatarPlaceholderMesh(); // @@ -282,6 +316,9 @@ export class AvatarRenderer /* extends EventTarget */ { }); const glb = avatarSpriter.createSpriteAvatarMeshFromTextures(textureImages); _unfrustumCull(glb); + // glb.boundingBox = _getMergedBoundingBox(glb); + glb.boundingSphere = _getMergedBoundingSphere(glb); + this.spriteAvatarMesh = glb; })(); } @@ -300,6 +337,8 @@ export class AvatarRenderer /* extends EventTarget */ { }); const glb = object.scene; _unfrustumCull(glb); + // glb.boundingBox = _getMergedBoundingBox(glb); + glb.boundingSphere = _getMergedBoundingSphere(glb); _bindSkeleton(glb, this.object); this.crunchedModel = glb; @@ -320,6 +359,8 @@ export class AvatarRenderer /* extends EventTarget */ { }); const glb = object.scene; _unfrustumCull(glb); + // glb.boundingBox = _getMergedBoundingBox(glb); + glb.boundingSphere = _getMergedBoundingSphere(glb); _bindSkeleton(glb, this.object); this.optimizedModel = glb; @@ -348,8 +389,18 @@ export class AvatarRenderer /* extends EventTarget */ { // this.dispatchEvent(updateEvent); } - update() { - + updateFrustumCull(matrix, frustum) { + const currentMesh = this.getCurrentMesh(); + if (currentMesh) { + // const boundingBox = localBox.copy(currentMesh.boundingBox) + // .applyMatrix4(matrix); + const boundingSphere = localSphere.copy(currentMesh.boundingSphere) + .applyMatrix4(matrix); + + // const inFrustum = frustum.intersectsBox(boundingBox); + const inFrustum = frustum.intersectsSphere(boundingSphere); + this.scene.visible = inFrustum; + } } waitForLoad() { return this.loadPromise; diff --git a/avatars/avatars.js b/avatars/avatars.js index cba0e10617..116c074638 100644 --- a/avatars/avatars.js +++ b/avatars/avatars.js @@ -65,8 +65,6 @@ const localVector3 = new THREE.Vector3(); // const localVector4 = new THREE.Vector3(); // const localVector5 = new THREE.Vector3(); // const localVector6 = new THREE.Vector3(); - - const localQuaternion = new THREE.Quaternion(); const localQuaternion2 = new THREE.Quaternion(); // const localQuaternion3 = new THREE.Quaternion(); @@ -77,7 +75,8 @@ const localEuler = new THREE.Euler(0, 0, 0, 'YXZ'); const localEuler2 = new THREE.Euler(0, 0, 0, 'YXZ'); const localMatrix = new THREE.Matrix4(); const localMatrix2 = new THREE.Matrix4(); -// const localPlane = new THREE.Plane(); +// const localPlane = new THREE.Plane(); +const localFrustum = new THREE.Frustum(); const textEncoder = new TextEncoder(); @@ -420,8 +419,6 @@ class Avatar { this.renderer = new AvatarRenderer(object); scene.add(this.renderer.scene); this.renderer.scene.updateMatrixWorld(); - // globalThis.avatarRenderer = this.renderer; - // globalThis.scene = scene; } this.spriteMegaAvatarMesh = null; @@ -1810,16 +1807,6 @@ class Avatar { } }; - - /* const _updateSubAvatars = () => { - if (this.spriteAvatarMesh) { - this.spriteAvatarMesh.update(timestamp, timeDiff, { - playerAvatar: this, - camera, - }); - } - }; */ - const _motionControls = () => { this.sdkInputs.hmd.position.copy(this.inputs.hmd.position); this.sdkInputs.hmd.quaternion.copy(this.inputs.hmd.quaternion); @@ -1947,7 +1934,27 @@ class Avatar { this.emoter.update(now); this.options.visemes && _updateVisemes(); - // _updateSubAvatars(); + + const _updateRendererFrustumCull = () => { + const localMatrix = new THREE.Matrix4(); + const localMatrix2 = new THREE.Matrix4(); + + localMatrix.makeTranslation( + this.inputs.hmd.position.x, + this.inputs.hmd.position.y - this.height / 2, + this.inputs.hmd.position.z + ); + + // XXX this can be optimized by initializing the frustum only once per frame and passing it in + const projScreenMatrix = localMatrix2.multiplyMatrices( + camera.projectionMatrix, + camera.matrixWorldInverse + ); + localFrustum.setFromProjectionMatrix(projScreenMatrix); + + this.renderer.updateFrustumCull(localMatrix, localFrustum); + }; + _updateRendererFrustumCull(); const debug = metaversefile.useDebug(); if (debug.enabled && !this.debugMesh) { @@ -2131,15 +2138,6 @@ class Avatar { } */ destroy() { - /* if (this.spriteAvatarMesh) { - scene.remove(this.spriteAvatarMesh); - } - if (this.crunchedModel) { - scene.remove(this.crunchedModel); - } - if (this.optimizedModel) { - scene.remove(this.optimizedModel); - } */ this.renderer.destroy(); scene.remove(this.renderer.scene); From 521bfdbd37a401ea70f77abde79022c1cd744e58 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Wed, 10 Aug 2022 13:20:15 -0400 Subject: [PATCH 077/125] Add instancing optimization comment --- instancing.js | 1 + 1 file changed, 1 insertion(+) diff --git a/instancing.js b/instancing.js index 91227ef85a..76088627d5 100644 --- a/instancing.js +++ b/instancing.js @@ -408,6 +408,7 @@ export class GeometryAllocator { distanceArray.length = 0; if (this.boundingType) { + // XXX this can be optimized by initializing the frustum only once per frame and passing it in const projScreenMatrix = localMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse From f80801dd13d46bfd8dc5b82c993ea44eceabc8d6 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Wed, 10 Aug 2022 19:18:17 -0400 Subject: [PATCH 078/125] Remove auto set quality from TabGraphics --- src/components/general/settings/TabGraphics.jsx | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/components/general/settings/TabGraphics.jsx b/src/components/general/settings/TabGraphics.jsx index a20249d7e9..5be50e430e 100644 --- a/src/components/general/settings/TabGraphics.jsx +++ b/src/components/general/settings/TabGraphics.jsx @@ -113,15 +113,10 @@ export const TabGraphics = ({ active }) => { function setAvatarQuality () { game.setAvatarQuality( avatarStyle ); - localPlayer.removeEventListener( 'avatarchange', setAvatarQuality ); }; - if ( ! localPlayer.avatar ) { - - localPlayer.addEventListener( 'avatarchange', setAvatarQuality ); - - } else { + if ( localPlayer.avatar ) { setAvatarQuality(); From e35f8cd638efb99a8fc2519ce305dab1c25bac9f Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Wed, 10 Aug 2022 19:21:21 -0400 Subject: [PATCH 079/125] Rewrite avatar renderer to use bound control object --- avatars/avatar-renderer.js | 325 +++++++++++++++++++++++++++---------- 1 file changed, 236 insertions(+), 89 deletions(-) diff --git a/avatars/avatar-renderer.js b/avatars/avatar-renderer.js index 9c9c6088ce..b558af69eb 100644 --- a/avatars/avatar-renderer.js +++ b/avatars/avatar-renderer.js @@ -1,16 +1,14 @@ /* this file implements avatar optimization and THREE.js Object management + rendering */ import * as THREE from 'three'; +import {VRMMaterialImporter/*, MToonMaterial*/} from '@pixiv/three-vrm/lib/three-vrm.module'; import * as avatarOptimizer from '../avatar-optimizer.js'; import * as avatarCruncher from '../avatar-cruncher.js'; import * as avatarSpriter from '../avatar-spriter.js'; import offscreenEngineManager from '../offscreen-engine-manager.js'; import loaders from '../loaders.js'; -import {camera} from '../renderer.js'; // import exporters from '../exporters.js'; import {abortError} from '../lock-manager.js'; -import { - defaultAvatarQuality, -} from '../constants.js'; +// import {defaultAvatarQuality} from '../constants.js'; // import { downloadFile } from '../util.js'; // const localBox = new THREE.Box3(); @@ -36,11 +34,67 @@ const geometry = new THREE.PlaneBufferGeometry(0.1, 0.1); const material = new THREE.MeshBasicMaterial({ map: avatarPlaceholderTexture, }); -const _makeAvatarPlaceholderMesh = () => { - const mesh = new THREE.Mesh(geometry, material); - return mesh; +const _makeAvatarPlaceholderMesh = () => new THREE.Mesh(geometry, material); +const parseVrm = (arrayBuffer, srcUrl) => new Promise((accept, reject) => { + const {gltfLoader} = loaders; + gltfLoader.parse(arrayBuffer, srcUrl, accept, reject); +}); +const _cloneVrm = async () => { + const vrm = await parseVrm(arrayBuffer, srcUrl); + vrm.cloneVrm = _cloneVrm; + vrm.arrayBuffer = arrayBuffer; + vrm.srcUrl = srcUrl; + return vrm; +}; +const _unfrustumCull = o => { + if (o.isMesh) { + o.frustumCulled = false; + } +}; +const _toonShaderify = async o => { + await new VRMMaterialImporter().convertGLTFMaterials(o); +}; +const _prepVrm = (vrm) => { + // app.add(vrm); + // vrm.updateMatrixWorld(); + _forAllMeshes(vrm, o => { + _addAnisotropy(o, 16); + // _limitShadeColor(o); + _unfrustumCull(o); + }); +}; + +const mapTypes = [ + 'alphaMap', + 'aoMap', + 'bumpMap', + 'displacementMap', + 'emissiveMap', + 'envMap', + 'lightMap', + 'map', + 'metalnessMap', + 'normalMap', + 'roughnessMap', +]; +const _addAnisotropy = (o, anisotropyLevel) => { + for (const mapType of mapTypes) { + if (o.material[mapType]) { + o.material[mapType].anisotropy = anisotropyLevel; + } + } }; +const _forAllMeshes = (o, fn) => { + o.traverse(o => { + if (o.isMesh) { + fn(o); + } + }); +}; + const _bindSkeleton = (dstModel, srcObject) => { + console.log('bind skeleton', {dstModel, srcObject}); + const srcModel = srcObject.scene; const _findBoneInSrc = (srcBoneName) => { @@ -105,14 +159,14 @@ const _bindSkeleton = (dstModel, srcObject) => { return result; }; dstModel.traverse(o => { + // bind skinned meshes to skeletons if (o.isSkinnedMesh) { - // bind the skeleton const {skeleton: dstSkeleton} = o; const srcSkeleton = _findSrcSkeletonFromDstSkeleton(dstSkeleton); o.skeleton = srcSkeleton; } + // bind blend shapes to controls if (o.isMesh) { - // bind the blend shapes const skinnedMesh = _findSkinnedMeshInSrc(); o.morphTargetDictionary = skinnedMesh.morphTargetDictionary; o.morphTargetInfluences = skinnedMesh.morphTargetInfluences; @@ -121,13 +175,6 @@ const _bindSkeleton = (dstModel, srcObject) => { }; // const updateEvent = new MessageEvent('update'); -const _unfrustumCull = o => { - o.traverse(o => { - if (o.isMesh) { - o.frustumCulled = false; - } - }); -}; /* const _getMergedBoundingBox = o => { const box = new THREE.Box3(); o.updateMatrixWorld(); @@ -158,15 +205,19 @@ const _getMergedBoundingSphere = o => { return sphere; }; +const defaultAvatarQuality = 4; export class AvatarRenderer /* extends EventTarget */ { - constructor(object, { + constructor({ + arrayBuffer, + srcUrl, quality = defaultAvatarQuality, } = {}) { // super(); // - this.object = object; + this.arrayBuffer = arrayBuffer; + this.srcUrl = srcUrl; this.quality = quality; // @@ -180,15 +231,26 @@ export class AvatarRenderer /* extends EventTarget */ { this.spriteAvatarMeshPromise = null; this.crunchedModelPromise = null; this.optimizedModelPromise = null; + this.meshPromise = null; this.spriteAvatarMesh = null; this.crunchedModel = null; this.optimizedModel = null; + this.mesh = null; + + // + + this.controlObject = null; + this.controlObjectLoaded = false; // this.abortController = new AbortController(); + // + + this.skeletonBindingsMap = new Map(); + // // XXX add frustum culling in update() @@ -201,7 +263,10 @@ export class AvatarRenderer /* extends EventTarget */ { import loaders from './loaders.js'; `, - async function(arrayBuffer, srcUrl) { + async function({ + arrayBuffer, + srcUrl, + }) { const parseVrm = (arrayBuffer, srcUrl) => new Promise((accept, reject) => { const {gltfLoader} = loaders; gltfLoader.parse(arrayBuffer, srcUrl, object => { @@ -211,7 +276,9 @@ export class AvatarRenderer /* extends EventTarget */ { const skinnedMesh = await parseVrm(arrayBuffer, srcUrl); const textureImages = avatarSpriter.renderSpriteImages(skinnedMesh); - return textureImages; + return { + textureImages, + }; } ]); this.crunchAvatarModel = offscreenEngineManager.createFunction([ @@ -221,7 +288,10 @@ export class AvatarRenderer /* extends EventTarget */ { import loaders from './loaders.js'; `, - async function(arrayBuffer, srcUrl) { + async function({ + arrayBuffer, + srcUrl, + }) { const parseVrm = (arrayBuffer, srcUrl) => new Promise((accept, reject) => { const {gltfLoader} = loaders; gltfLoader.parse(arrayBuffer, srcUrl, object => { @@ -231,7 +301,9 @@ export class AvatarRenderer /* extends EventTarget */ { const model = await parseVrm(arrayBuffer, srcUrl); const glbData = await avatarCruncher.crunchAvatarModel(model); - return glbData; + return { + glbData, + }; } ]); this.optimizeAvatarModel = offscreenEngineManager.createFunction([ @@ -242,7 +314,10 @@ export class AvatarRenderer /* extends EventTarget */ { import exporters from './exporters.js'; `, - async function(arrayBuffer, srcUrl) { + async function({ + arrayBuffer, + srcUrl, + }) { const parseVrm = (arrayBuffer, srcUrl) => new Promise((accept, reject) => { const {gltfLoader} = loaders; gltfLoader.parse(arrayBuffer, srcUrl, accept, reject); @@ -252,34 +327,16 @@ export class AvatarRenderer /* extends EventTarget */ { const model = object.scene; const glbData = await avatarOptimizer.optimizeAvatarModel(model); - - /* const glbData = await new Promise((accept, reject) => { - const {gltfExporter} = exporters; - gltfExporter.parse( - object.scene, - function onCompleted(arrayBuffer) { - accept(arrayBuffer); - }, function onError(error) { - reject(error); - }, - { - binary: true, - includeCustomExtensions: true, - }, - ); - }); */ - - // const parsedObject = await parseVrm(glbData, srcUrl); - // console.log('compare skeletons', object, parsedObject); - - return glbData; + return { + glbData, + }; } ]); this.loadPromise = null; this.setQuality(quality); } - getCurrentMesh() { + #getCurrentMesh() { switch (this.quality) { case 1: { return this.spriteAvatarMesh; @@ -290,12 +347,30 @@ export class AvatarRenderer /* extends EventTarget */ { case 3: { return this.optimizedModel; } - /* case 4: { - break; - } */ + case 4: { + return this.mesh; + } default: { return null; - // throw new Error('unknown avatar quality: ' + this.quality); + } + } + } + async #ensureControlObject() { + if (!this.controlObjectLoaded) { + this.controlObjectLoaded = true; + this.controlObject = await parseVrm(this.arrayBuffer, this.srcUrl); + } + } + #bindControlObject() { + for (const glb of [ + this.spriteAvatarMesh, + this.crunchedModel, + this.optimizedModel, + this.mesh, + ]) { + if (!!glb && !this.skeletonBindingsMap.has(glb)) { + _bindSkeleton(glb, this.controlObject); + this.skeletonBindingsMap.set(glb, true); } } } @@ -311,15 +386,27 @@ export class AvatarRenderer /* extends EventTarget */ { case 1: { if (!this.spriteAvatarMeshPromise) { this.spriteAvatarMeshPromise = (async () => { - const textureImages = await this.createSpriteAvatarMesh([this.object.arrayBuffer, this.object.srcUrl], { - signal: this.abortController.signal, - }); - const glb = avatarSpriter.createSpriteAvatarMeshFromTextures(textureImages); - _unfrustumCull(glb); - // glb.boundingBox = _getMergedBoundingBox(glb); - glb.boundingSphere = _getMergedBoundingSphere(glb); - - this.spriteAvatarMesh = glb; + await Promise.all([ + (async () => { + const { + textureImages, + } = await this.createSpriteAvatarMesh([ + { + arrayBuffer: this.arrayBuffer, + srcUrl: this.srcUrl, + } + ], { + signal: this.abortController.signal, + }); + const glb = avatarSpriter.createSpriteAvatarMeshFromTextures(textureImages); + _forAllMeshes(glb, _unfrustumCull); + glb.boundingSphere = _getMergedBoundingSphere(glb); + + this.spriteAvatarMesh = glb; + })(), + this.#ensureControlObject(), + ]); + this.#bindControlObject(); })(); } await this.spriteAvatarMeshPromise; @@ -328,20 +415,31 @@ export class AvatarRenderer /* extends EventTarget */ { case 2: { if (!this.crunchedModelPromise) { this.crunchedModelPromise = (async () => { - const glbData = await this.crunchAvatarModel([this.object.arrayBuffer, this.object.srcUrl], { - signal: this.abortController.signal, - }); - const object = await new Promise((accept, reject) => { - const {gltfLoader} = loaders; - gltfLoader.parse(glbData, this.object.srcUrl, accept, reject); - }); - const glb = object.scene; - _unfrustumCull(glb); - // glb.boundingBox = _getMergedBoundingBox(glb); - glb.boundingSphere = _getMergedBoundingSphere(glb); - - _bindSkeleton(glb, this.object); - this.crunchedModel = glb; + await Promise.all([ + (async () => { + const { + glbData, + } = await this.crunchAvatarModel([ + { + arrayBuffer: this.arrayBuffer, + srcUrl: this.srcUrl, + }, + ], { + signal: this.abortController.signal, + }); + const object = await new Promise((accept, reject) => { + const {gltfLoader} = loaders; + gltfLoader.parse(glbData, this.srcUrl, accept, reject); + }); + const glb = object.scene; + _forAllMeshes(glb, _unfrustumCull); + glb.boundingSphere = _getMergedBoundingSphere(glb); + + this.crunchedModel = glb; + })(), + this.#ensureControlObject(), + ]); + this.#bindControlObject(); })(); } await this.crunchedModelPromise; @@ -350,27 +448,72 @@ export class AvatarRenderer /* extends EventTarget */ { case 3: { if (!this.optimizedModelPromise) { this.optimizedModelPromise = (async () => { - const glbData = await this.optimizeAvatarModel([this.object.arrayBuffer, this.object.srcUrl], { - signal: this.abortController.signal, - }); - const object = await new Promise((accept, reject) => { - const {gltfLoader} = loaders; - gltfLoader.parse(glbData, this.object.srcUrl, accept, reject); - }); - const glb = object.scene; - _unfrustumCull(glb); - // glb.boundingBox = _getMergedBoundingBox(glb); - glb.boundingSphere = _getMergedBoundingSphere(glb); - - _bindSkeleton(glb, this.object); - this.optimizedModel = glb; - // this.optimizedModel.updateMatrixWorld(); + await Promise.all([ + (async () => { + // console.log('optimized model promise 1'); + const { + glbData, + } = await this.optimizeAvatarModel([ + { + arrayBuffer: this.arrayBuffer, + srcUrl: this.srcUrl, + }, + ], { + signal: this.abortController.signal, + }); + // console.log('optimized model promise 2'); + const object = await new Promise((accept, reject) => { + const {gltfLoader} = loaders; + gltfLoader.parse(glbData, this.srcUrl, accept, reject); + }); + // console.log('optimized model promise 3'); + const glb = object.scene; + _forAllMeshes(glb, _unfrustumCull); + glb.boundingSphere = _getMergedBoundingSphere(glb); + + this.optimizedModel = glb; + // console.log('optimized model promise 4'); + })(), + this.#ensureControlObject(), + ]); + this.#bindControlObject(); })(); } await this.optimizedModelPromise; break; } case 4: { + if (!this.meshPromise) { + this.meshPromise = (async () => { + await Promise.all([ + (async () => { + const glbData = this.arrayBuffer; + const object = await new Promise((accept, reject) => { + const {gltfLoader} = loaders; + gltfLoader.parse(glbData, this.srcUrl, accept, reject); + }); + const glb = object.scene; + + // + + // const skinnedVrmBase = await _cloneVrm(); + // app.skinnedVrm = skinnedVrmBase; + await _toonShaderify(object); + _prepVrm(object.scene); + _forAllMeshes(glb, _unfrustumCull); + + // + + glb.boundingSphere = _getMergedBoundingSphere(glb); + + this.mesh = glb; + })(), + this.#ensureControlObject(), + ]); + this.#bindControlObject(); + })(); + } + await this.meshPromise; break; } default: { @@ -384,13 +527,17 @@ export class AvatarRenderer /* extends EventTarget */ { // remove the old placeholder mesh this.scene.remove(this.placeholderMesh); // add the new avatar mesh - const currentMesh = this.getCurrentMesh(); + const currentMesh = this.#getCurrentMesh(); + /* console.log('got current mesh', currentMesh); + if (!currentMesh) { + debugger; + } */ this.scene.add(currentMesh); // this.dispatchEvent(updateEvent); } updateFrustumCull(matrix, frustum) { - const currentMesh = this.getCurrentMesh(); + const currentMesh = this.#getCurrentMesh(); if (currentMesh) { // const boundingBox = localBox.copy(currentMesh.boundingBox) // .applyMatrix4(matrix); From 261c066def62a733ae0ee990556ad68d23fc9fdd Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Wed, 10 Aug 2022 19:21:45 -0400 Subject: [PATCH 080/125] Use new avatar renderer in avatars.js --- avatars/avatars.js | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/avatars/avatars.js b/avatars/avatars.js index 116c074638..4d4feb80c5 100644 --- a/avatars/avatars.js +++ b/avatars/avatars.js @@ -396,8 +396,8 @@ const _makeDebugMesh = (avatar) => { // scene.add(testMesh); class Avatar { - constructor(object, options = {}) { - if (!object) { + constructor(avatarRenderer, options = {}) { + /* if (!object) { object = {}; } if (!object.parser) { @@ -406,20 +406,26 @@ class Avatar { extensions: {}, }, }; - } + } */ + this.avatarRenderer = avatarRenderer; this.isLocalPlayer = options.isLocalPlayer !== undefined ? options.isLocalPlayer : true; + const object = avatarRenderer.controlObject; this.object = object; - const model = object.scene; + if (!this.object) { + debugger; + } + + const model = this.object.scene; this.model = model; // XXX still needed? this.model.visible = false; - { + /* { this.renderer = new AvatarRenderer(object); scene.add(this.renderer.scene); this.renderer.scene.updateMatrixWorld(); - } + } */ this.spriteMegaAvatarMesh = null; this.crunchedModel = null; @@ -1390,7 +1396,7 @@ class Avatar { return localEuler.y; } async setQuality(quality) { - await this.renderer.setQuality(quality); + await this.avatarRenderer.setQuality(quality); } lerpShoulderTransforms() { if (this.shoulderTransforms.handsEnabled[0]) { @@ -1952,7 +1958,7 @@ class Avatar { ); localFrustum.setFromProjectionMatrix(projScreenMatrix); - this.renderer.updateFrustumCull(localMatrix, localFrustum); + this.avatarRenderer.updateFrustumCull(localMatrix, localFrustum); }; _updateRendererFrustumCull(); @@ -2138,8 +2144,8 @@ class Avatar { } */ destroy() { - this.renderer.destroy(); - scene.remove(this.renderer.scene); + this.avatarRenderer.destroy(); + scene.remove(this.avatarRenderer.scene); this.setAudioEnabled(false); } From 4bbe1b83ec5fa85398b17f6847948c3839eb5609 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Wed, 10 Aug 2022 19:22:12 -0400 Subject: [PATCH 081/125] Expose AvatarRenderer in metaversefile-api.js --- metaversefile-api.js | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/metaversefile-api.js b/metaversefile-api.js index c309aefc3b..7d063ceef0 100644 --- a/metaversefile-api.js +++ b/metaversefile-api.js @@ -26,9 +26,10 @@ import JSON6 from 'json-6'; import * as geometries from './geometries.js'; import * as materials from './materials.js'; import meshLodManager from './mesh-lodder.js'; -import * as avatarOptimizer from './avatar-optimizer.js'; -import * as avatarCruncher from './avatar-cruncher.js'; -import * as avatarSpriter from './avatar-spriter.js'; +import {AvatarRenderer} from './avatars/avatar-renderer.js'; +// import * as avatarOptimizer from './avatar-optimizer.js'; +// import * as avatarCruncher from './avatar-cruncher.js'; +// import * as avatarSpriter from './avatar-spriter.js'; import {chatManager} from './chat-manager.js'; import loreAI from './ai/lore/lore-ai.js'; import npcManager from './npc-manager.js'; @@ -450,18 +451,21 @@ metaversefile.setApi({ useVoices() { return voices; }, - useAvatarOptimizer() { + useAvatarRenderer() { + return AvatarRenderer; + }, + /* useAvatarOptimizer() { return avatarOptimizer; }, - /* useAvatarCruncher() { + useAvatarCruncher() { return avatarCruncher; - }, */ + }, useAvatarSpriter() { return avatarSpriter; }, useSceneCruncher() { return sceneCruncher; - }, + }, */ useScenePreviewer() { return scenePreviewer; }, From 4d35e405fb93a5f861aec5b54e247f5ed6bccd2c Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Wed, 10 Aug 2022 20:05:01 -0400 Subject: [PATCH 082/125] Add avatars adjustQuality method --- avatars/avatar-renderer.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/avatars/avatar-renderer.js b/avatars/avatar-renderer.js index b558af69eb..73563357dd 100644 --- a/avatars/avatar-renderer.js +++ b/avatars/avatar-renderer.js @@ -77,6 +77,8 @@ const mapTypes = [ 'normalMap', 'roughnessMap', ]; +const minQuality = 1; +const maxQuality = 4; const _addAnisotropy = (o, anisotropyLevel) => { for (const mapType of mapTypes) { if (o.material[mapType]) { @@ -536,6 +538,12 @@ export class AvatarRenderer /* extends EventTarget */ { // this.dispatchEvent(updateEvent); } + adjustQuality(delta) { + const newQuality = Math.min(Math.max(this.quality + delta, minQuality), maxQuality); + if (newQuality !== this.quality) { + this.setQuality(newQuality); + } + } updateFrustumCull(matrix, frustum) { const currentMesh = this.#getCurrentMesh(); if (currentMesh) { From 53a7347c6215a0cb97f8446a4631e3c424b26213 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Wed, 10 Aug 2022 20:06:08 -0400 Subject: [PATCH 083/125] Update player avatar binding to use new avatar renderer --- player-avatar-binding.js | 58 +++++++++++++++++++--------------------- 1 file changed, 27 insertions(+), 31 deletions(-) diff --git a/player-avatar-binding.js b/player-avatar-binding.js index 9ac15828b8..5b57368d67 100644 --- a/player-avatar-binding.js +++ b/player-avatar-binding.js @@ -49,43 +49,39 @@ export function applyPlayerModesToAvatar(player, session, rig) { rig.velocity.length() < 0.001, ); } -export function makeAvatar(app) { - if (app) { - const {skinnedVrm} = app; - - const _getPlayerByAppInstanceId = instanceId => { - const remotePlayers = playersManager.getRemotePlayers(); // Might have to be removed too - const localPlayer = playersManager.getLocalPlayer(); - const result = localPlayer.appManager.getAppByInstanceId(instanceId); - if (result) { - return localPlayer; - } else { - for (const remotePlayer in remotePlayers) { - if (remotePlayer.appManager.getAppByInstanceId(instanceId)) { - return remotePlayer; - } - } +const _getPlayerByAppInstanceId = instanceId => { + const remotePlayers = playersManager.getRemotePlayers(); // Might have to be removed too + const localPlayer = playersManager.getLocalPlayer(); + const result = localPlayer.appManager.getAppByInstanceId(instanceId); + if (result) { + return localPlayer; + } else { + for (const remotePlayer in remotePlayers) { + if (remotePlayer.appManager.getAppByInstanceId(instanceId)) { + return remotePlayer; } } - + } +}; +export function makeAvatar(app) { + if (app?.renderer) { // comes from vrm type handler const player = _getPlayerByAppInstanceId(app.instanceId); - if (skinnedVrm) { - const avatar = new Avatar(skinnedVrm, { - isLocalPlayer: !player || !player.isRemotePlayer, - fingers: true, - hair: true, - visemes: true, - debug: false, - }); - avatar[appSymbol] = app; + const avatar = new Avatar(app.renderer, { + isLocalPlayer: !player || !player.isRemotePlayer, + fingers: true, + hair: true, + visemes: true, + debug: false, + }); + avatar[appSymbol] = app; - unFrustumCull(app); - enableShadows(app); + unFrustumCull(app); + enableShadows(app); - return avatar; - } + return avatar; + } else { + return null; } - return null; } export function applyPlayerActionsToAvatar(player, rig) { const jumpAction = player.getAction('jump'); From 3c8eda59c502156bd4d9e4cd5f73deccc1a393ac Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Wed, 10 Aug 2022 20:06:29 -0400 Subject: [PATCH 084/125] Add avatar quality adjustment keyboard shortcut --- webaverse.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/webaverse.js b/webaverse.js index 28a513570a..6b61e2a62d 100644 --- a/webaverse.js +++ b/webaverse.js @@ -582,6 +582,12 @@ const _startHacks = webaverse => { titleCardHack: webaverse.titleCardHack, } })); + } else if (e.code === 'Home') { // home + const localPlayer = metaversefileApi.useLocalPlayer(); + localPlayer.avatar.avatarRenderer.adjustQuality(-1); + } else if (e.code === 'End') { // home + const localPlayer = metaversefileApi.useLocalPlayer(); + localPlayer.avatar.avatarRenderer.adjustQuality(1); } else { const match = e.code.match(/^Numpad([0-9])$/); if (match) { From 6247aac12be21701faebc522b70429f5955baea6 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Wed, 10 Aug 2022 20:45:54 -0400 Subject: [PATCH 085/125] Add binary export from avatar cruncher --- avatar-cruncher.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/avatar-cruncher.js b/avatar-cruncher.js index 9f29cc5948..aa257dab56 100644 --- a/avatar-cruncher.js +++ b/avatar-cruncher.js @@ -53,7 +53,14 @@ export const crunchAvatarModel = async (model, options = {}) => { accept(arrayBuffer); }, function onError(error) { reject(error); - } + }, + { + binary: true, + // onlyVisible: false, + // forceIndices: true, + // truncateDrawRange: false, + includeCustomExtensions: true, + }, ); }); return glbData; From 4605df9e1108843eaedadab3bb5b17392655c5b6 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Wed, 10 Aug 2022 20:46:16 -0400 Subject: [PATCH 086/125] Webaverse.js syntax --- webaverse.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webaverse.js b/webaverse.js index 6b61e2a62d..247fb57743 100644 --- a/webaverse.js +++ b/webaverse.js @@ -580,7 +580,7 @@ const _startHacks = webaverse => { webaverse.dispatchEvent(new MessageEvent('titlecardhackchange', { data: { titleCardHack: webaverse.titleCardHack, - } + }, })); } else if (e.code === 'Home') { // home const localPlayer = metaversefileApi.useLocalPlayer(); From 8e86d94cb1e3e0d2f817ae05e465450e8b2eeb98 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Wed, 10 Aug 2022 23:49:16 -0400 Subject: [PATCH 087/125] Avatar cruncher rewrite --- avatar-cruncher.js | 155 +++++++++++++++++++++++++++++++-------------- 1 file changed, 106 insertions(+), 49 deletions(-) diff --git a/avatar-cruncher.js b/avatar-cruncher.js index aa257dab56..0cc7eb6c3c 100644 --- a/avatar-cruncher.js +++ b/avatar-cruncher.js @@ -1,67 +1,124 @@ import * as THREE from 'three'; -import {getMergeableObjects, mergeGeometryTextureAtlas} from './geometry-texture-atlas.js'; +import {getMergeableObjects, getBones, mergeGeometryTextureAtlas} from './avatar-optimizer.js'; import exporters from './exporters.js'; const defaultTextureSize = 4096; +const textureTypes = [ + 'map', + 'emissiveMap', + 'normalMap', +]; +const getObjectKey = () => ''; export const crunchAvatarModel = async (model, options = {}) => { const textureSize = options.textureSize ?? defaultTextureSize; - const textureTypes = [ - 'map', - 'emissiveMap', - 'normalMap', - ]; - - const getObjectKey = () => ''; const mergeables = getMergeableObjects(model, getObjectKey); - const mergeable = mergeables[0]; - const { - skeletons, - morphTargetDictionaryArray, - morphTargetInfluencesArray, - } = mergeable; - const { - // atlas, - // atlasImages, - // attributeLayouts, - // morphAttributeLayouts, - geometry, - atlasTextures, - } = mergeGeometryTextureAtlas(mergeable, textureSize); - // create material - const material = new THREE.MeshBasicMaterial(); - for (const k of textureTypes) { - const t = atlasTextures[k]; - material[k] = t; + const _mergeMesh = (mergeable, mergeableIndex) => { + const { + type, + material, + // geometries, + // maps, + // emissiveMaps, + // normalMaps, + skeletons, + morphTargetDictionaryArray, + morphTargetInfluencesArray, + } = mergeable; + const { + // atlas, + // atlasImages, + // attributeLayouts, + // morphAttributeLayouts, + geometry, + atlasTextures, + } = mergeGeometryTextureAtlas(mergeable, textureSize); + + // const m = material; + const m = new THREE.MeshStandardMaterial(); + console.log('swap materials crunch', {material, m}); + m.roughness = 1; + // m.alphaTest = 0.1; + // m.side = THREE.BackSide; + // m.side = THREE.DoubleSide; + // m.alphaToCoverage = true; + // m.alphaTest = 1; + // m.transparent = false; + m.transparent = true; + const _updateMaterial = () => { + if (atlasTextures) { + for (const textureType of textureTypes) { + const atlasTexture = atlasTextures[textureType]; + + if (atlasTexture) { + m[textureType] = atlasTexture; + if (m.uniforms) { + m.uniforms[textureType].value = atlasTexture; + m.uniforms[textureType].needsUpdate = true; + } + } + } + } + m.needsUpdate = true; + }; + _updateMaterial(); + + const _makeMesh = () => { + if (type === 'mesh') { + const mesh = new THREE.Mesh(geometry, m); + return mesh; + } else if (type === 'skinnedMesh') { + const skinnedMesh = new THREE.SkinnedMesh(geometry, m); + skinnedMesh.skeleton = skeletons[0]; + skinnedMesh.morphTargetDictionary = morphTargetDictionaryArray[0]; + skinnedMesh.morphTargetInfluences = morphTargetInfluencesArray[0]; + // skinnedMesh.updateMorphTargets(); + return skinnedMesh; + } else { + throw new Error(`unknown type ${type}`); + } + }; + const mesh = _makeMesh(); + // console.log('got mesh', mesh); + + return mesh; + }; + const mergedMeshes = mergeables.map((mergeable, i) => _mergeMesh(mergeable, i)); + + // construct a new object with the merged meshes + const object = new THREE.Object3D(); + for (const mesh of mergedMeshes) { + object.add(mesh); } - material.roughness = 1; - material.alphaTest = 0.1; - material.transparent = true; + // also need to keep the bones + const bones = getBones(model); + for (const bone of bones) { + object.add(bone); + } + + // XXX this should anti-index flattened index ranges for the multi-materials case - // create mesh - const crunchedModel = new THREE.SkinnedMesh(geometry, material); - crunchedModel.skeleton = skeletons[0]; - crunchedModel.morphTargetDictionary = morphTargetDictionaryArray[0]; - crunchedModel.morphTargetInfluences = morphTargetInfluencesArray[0]; - crunchedModel.frustumCulled = false; + // return object; const glbData = await new Promise((accept, reject) => { const {gltfExporter} = exporters; - gltfExporter.parse(crunchedModel, function onCompleted(arrayBuffer) { - accept(arrayBuffer); - }, function onError(error) { - reject(error); - }, - { - binary: true, - // onlyVisible: false, - // forceIndices: true, - // truncateDrawRange: false, - includeCustomExtensions: true, - }, - ); + gltfExporter.parse( + object, + function onCompleted(arrayBuffer) { + accept(arrayBuffer); + }, function onError(error) { + reject(error); + }, + { + binary: true, + // onlyVisible: false, + // forceIndices: true, + // truncateDrawRange: false, + includeCustomExtensions: true, + }, + ); }); return glbData; }; \ No newline at end of file From 713c9110acb2d4c771756643a308271af4539354 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Thu, 11 Aug 2022 19:02:15 -0400 Subject: [PATCH 088/125] Remove alpha to coverage toggling --- heightfield-mapper.js | 6 ------ shadertoy.js | 20 -------------------- 2 files changed, 26 deletions(-) diff --git a/heightfield-mapper.js b/heightfield-mapper.js index abdabed826..0d97622687 100644 --- a/heightfield-mapper.js +++ b/heightfield-mapper.js @@ -314,7 +314,6 @@ export class HeightfieldMapper /* extends EventTarget */ { // push state const oldRenderTarget = renderer.getRenderTarget(); - context.disable(context.SAMPLE_ALPHA_TO_COVERAGE); // render renderer.setRenderTarget(this.heightfieldRenderTarget); @@ -323,7 +322,6 @@ export class HeightfieldMapper /* extends EventTarget */ { // pop state renderer.setRenderTarget(oldRenderTarget); - context.enable(context.SAMPLE_ALPHA_TO_COVERAGE); } } /* clearHeightfieldChunk(worldModPosition) { @@ -337,7 +335,6 @@ export class HeightfieldMapper /* extends EventTarget */ { // push state const oldRenderTarget = renderer.getRenderTarget(); - context.disable(context.SAMPLE_ALPHA_TO_COVERAGE); // render renderer.setRenderTarget(this.heightfieldRenderTarget); @@ -346,7 +343,6 @@ export class HeightfieldMapper /* extends EventTarget */ { // pop state renderer.setRenderTarget(oldRenderTarget); - context.enable(context.SAMPLE_ALPHA_TO_COVERAGE); } } */ /* updateFourTapHeightfield() { @@ -359,7 +355,6 @@ export class HeightfieldMapper /* extends EventTarget */ { // push state const oldRenderTarget = renderer.getRenderTarget(); - context.disable(context.SAMPLE_ALPHA_TO_COVERAGE); // render renderer.setRenderTarget(this.heightfieldFourTapRenderTarget); @@ -368,7 +363,6 @@ export class HeightfieldMapper /* extends EventTarget */ { // pop state renderer.setRenderTarget(oldRenderTarget); - context.enable(context.SAMPLE_ALPHA_TO_COVERAGE); } } */ } \ No newline at end of file diff --git a/shadertoy.js b/shadertoy.js index 3db26c8461..7764119b88 100644 --- a/shadertoy.js +++ b/shadertoy.js @@ -158,16 +158,6 @@ const _makeRenderTargetMesh = (renderTarget, worldWidth, worldHeight) => { side: THREE.DoubleSide, }); const mesh = new THREE.Mesh(geometry, material); - mesh.onBeforeRender = () => { - const renderer = getRenderer(); - const context = renderer.getContext(); - context.disable(context.SAMPLE_ALPHA_TO_COVERAGE); - }; - mesh.onAfterRender = () => { - const renderer = getRenderer(); - const context = renderer.getContext(); - context.enable(context.SAMPLE_ALPHA_TO_COVERAGE); - }; return mesh; }; /* let numRenderTargetMeshes = 0; @@ -307,19 +297,9 @@ class ShadertoyRenderer { this.frame++; if (this.loaded) { - // console.log('update start'); - - const renderer = getRenderer(); - const context = renderer.getContext(); - context.disable(context.SAMPLE_ALPHA_TO_COVERAGE); - for (const renderPass of this.renderPasses) { renderPass.update(); } - - context.enable(context.SAMPLE_ALPHA_TO_COVERAGE); - - // console.log('update end'); } } } From debf2600ef5e67b1c2ca22fcde68d0bfa8acf21c Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Thu, 11 Aug 2022 19:38:30 -0400 Subject: [PATCH 089/125] Add missing user.png --- public/images/user.png | Bin 0 -> 59654 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 public/images/user.png diff --git a/public/images/user.png b/public/images/user.png new file mode 100644 index 0000000000000000000000000000000000000000..24db512078e20e128bf3eb302d68555181461b3e GIT binary patch literal 59654 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

S;R^WJ~A%+^^P^7vx< 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 literal 0 HcmV?d00001 From f6b8d462e8220e8f218a1f65908ff8d9a87b0ff2 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Thu, 11 Aug 2022 22:52:54 -0400 Subject: [PATCH 090/125] Avatar spriter compute bounding sphere --- avatar-spriter.js | 1 + 1 file changed, 1 insertion(+) diff --git a/avatar-spriter.js b/avatar-spriter.js index 6711423bb4..a09568085c 100644 --- a/avatar-spriter.js +++ b/avatar-spriter.js @@ -739,6 +739,7 @@ const planeWarpedGeometry2 = planeGeometry.clone() new THREE.Quaternion(), new THREE.Vector3().setScalar(spriteScaleFactor), )); +planeWarpedGeometry2.computeBoundingSphere(); const camera2 = new THREE.PerspectiveCamera(60, 1, 0.1, 1000); const scene2 = new THREE.Scene(); From 1e6f1006bba5189bddf622c1f7546f779bf6988f Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Thu, 11 Aug 2022 23:02:08 -0400 Subject: [PATCH 091/125] Update avatar spriter to work on avatar renderer --- avatar-spriter.js | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/avatar-spriter.js b/avatar-spriter.js index a09568085c..5f3db95922 100644 --- a/avatar-spriter.js +++ b/avatar-spriter.js @@ -1487,8 +1487,8 @@ class AvatarSpriteDepthMaterial extends THREE.MeshNormalMaterial { } } -export const renderSpriteImages = skinnedVrm => { - const localRig = new Avatar(skinnedVrm, { +export const renderSpriteImages = avatarRenderer => { + const localRig = new Avatar(avatarRenderer, { fingers: true, hair: true, visemes: true, @@ -1504,8 +1504,8 @@ export const renderSpriteImages = skinnedVrm => { value: 1, }); - const skinnedModel = skinnedVrm.scene; - skinnedModel.traverse(o => { + const model = avatarRenderer.scene; + model.traverse(o => { if (o.isMesh) { o.frustumCulled = false; } @@ -1513,7 +1513,7 @@ export const renderSpriteImages = skinnedVrm => { const skeleton = (() => { let skeleton = null; - skinnedModel.traverse(o => { + model.traverse(o => { if (skeleton === null && o.isSkinnedMesh) { skeleton = o.skeleton; } @@ -1525,8 +1525,8 @@ export const renderSpriteImages = skinnedVrm => { const {renderer, scene} = metaversefile.useInternals(); const pixelRatio = renderer.getPixelRatio(); const _renderSpriteFrame = () => { - const oldParent = skinnedModel.parent; - scene2.add(skinnedModel); + const oldParent = model.parent; + scene2.add(model); const rendererSize = renderer.getSize(localVector2D); if (rendererSize.x >= texSize && rendererSize.y >= texSize) { @@ -1545,9 +1545,9 @@ export const renderSpriteImages = skinnedVrm => { } if (oldParent) { - oldParent.add(skinnedModel); + oldParent.add(model); } else { - skinnedModel.parent.remove(skinnedModel); + model.parent.remove(model); } }; @@ -1691,6 +1691,6 @@ export const createSpriteAvatarMeshFromTextures = spriteImages => { return spriteAvatarMesh; }; export const createSpriteAvatarMesh = skinnedVrm => { - const spriteImages = renderSpriteImages(skinnedVrm); + let spriteImages = renderSpriteImages(skinnedVrm); return createSpriteAvatarMeshFromTextures(spriteImages); }; \ No newline at end of file From ef8a586bb6271eebd76cd177fd8068482f2c7b35 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Thu, 11 Aug 2022 23:14:30 -0400 Subject: [PATCH 092/125] Avatar renderer defer offscreen engine creation --- avatars/avatar-renderer.js | 174 +++++++++++++++++++++---------------- 1 file changed, 98 insertions(+), 76 deletions(-) diff --git a/avatars/avatar-renderer.js b/avatars/avatar-renderer.js index 73563357dd..9aac28c195 100644 --- a/avatars/avatar-renderer.js +++ b/avatars/avatar-renderer.js @@ -258,86 +258,108 @@ export class AvatarRenderer /* extends EventTarget */ { // XXX add frustum culling in update() // XXX integrate more cleanly with totum VRM type (do not double-parse) // XXX unlock avatar icon - this.createSpriteAvatarMesh = offscreenEngineManager.createFunction([ - `\ - import * as THREE from 'three'; - import * as avatarSpriter from './avatar-spriter.js'; - import loaders from './loaders.js'; - - `, - async function({ - arrayBuffer, - srcUrl, - }) { - const parseVrm = (arrayBuffer, srcUrl) => new Promise((accept, reject) => { - const {gltfLoader} = loaders; - gltfLoader.parse(arrayBuffer, srcUrl, object => { - accept(object.scene); - }, reject); - }); - - const skinnedMesh = await parseVrm(arrayBuffer, srcUrl); - const textureImages = avatarSpriter.renderSpriteImages(skinnedMesh); - return { - textureImages, - }; - } - ]); - this.crunchAvatarModel = offscreenEngineManager.createFunction([ - `\ - import * as THREE from 'three'; - import * as avatarCruncher from './avatar-cruncher.js'; - import loaders from './loaders.js'; - - `, - async function({ - arrayBuffer, - srcUrl, - }) { - const parseVrm = (arrayBuffer, srcUrl) => new Promise((accept, reject) => { - const {gltfLoader} = loaders; - gltfLoader.parse(arrayBuffer, srcUrl, object => { - accept(object.scene); - }, reject); - }); - - const model = await parseVrm(arrayBuffer, srcUrl); - const glbData = await avatarCruncher.crunchAvatarModel(model); - return { - glbData, - }; - } - ]); - this.optimizeAvatarModel = offscreenEngineManager.createFunction([ - `\ - import * as THREE from 'three'; - import * as avatarOptimizer from './avatar-optimizer.js'; - import loaders from './loaders.js'; - import exporters from './exporters.js'; - - `, - async function({ - arrayBuffer, - srcUrl, - }) { - const parseVrm = (arrayBuffer, srcUrl) => new Promise((accept, reject) => { - const {gltfLoader} = loaders; - gltfLoader.parse(arrayBuffer, srcUrl, accept, reject); - }); - - const object = await parseVrm(arrayBuffer, srcUrl); - - const model = object.scene; - const glbData = await avatarOptimizer.optimizeAvatarModel(model); - return { - glbData, - }; - } - ]); + this.createSpriteAvatarMeshFn = null; + this.crunchAvatarModelFn = null; + this.optimizeAvatarModelFn = null; this.loadPromise = null; this.setQuality(quality); } + createSpriteAvatarMesh() { + if (!this.createSpriteAvatarMeshFn) { + this.createSpriteAvatarMeshFn = offscreenEngineManager.createFunction([ + `\ + import * as THREE from 'three'; + import * as avatarSpriter from './avatar-spriter.js'; + import loaders from './loaders.js'; + import {maxAvatarQuality} from './constants.js'; + import {AvatarRenderer} from './avatars/avatar-renderer.js'; + + `, + async function({ + arrayBuffer, + srcUrl, + }) { + const avatarRenderer = new AvatarRenderer({ + arrayBuffer, + srcUrl, + quality: maxAvatarQuality, + }); + await avatarRenderer.waitForLoad(); + + const textureCanvases = avatarSpriter.renderSpriteImages(avatarRenderer); + const textureImages = await Promise.all(textureCanvases.map(canvas => { + return createImageBitmap(canvas); + })); + return { + textureImages, + }; + } + ]); + } + return this.createSpriteAvatarMeshFn.apply(this, arguments); + } + crunchAvatarModel() { + if (!this.crunchAvatarModelFn) { + this.crunchAvatarModelFn = offscreenEngineManager.createFunction([ + `\ + import * as THREE from 'three'; + import * as avatarCruncher from './avatar-cruncher.js'; + import loaders from './loaders.js'; + + `, + async function({ + arrayBuffer, + srcUrl, + }) { + const parseVrm = (arrayBuffer, srcUrl) => new Promise((accept, reject) => { + const {gltfLoader} = loaders; + gltfLoader.parse(arrayBuffer, srcUrl, object => { + accept(object.scene); + }, reject); + }); + + const model = await parseVrm(arrayBuffer, srcUrl); + const glbData = await avatarCruncher.crunchAvatarModel(model); + return { + glbData, + }; + } + ]); + } + return this.crunchAvatarModelFn.apply(this, arguments); + } + optimizeAvatarModel() { + if (!this.optimizeAvatarModelFn) { + this.optimizeAvatarModelFn = offscreenEngineManager.createFunction([ + `\ + import * as THREE from 'three'; + import * as avatarOptimizer from './avatar-optimizer.js'; + import loaders from './loaders.js'; + import exporters from './exporters.js'; + + `, + async function({ + arrayBuffer, + srcUrl, + }) { + const parseVrm = (arrayBuffer, srcUrl) => new Promise((accept, reject) => { + const {gltfLoader} = loaders; + gltfLoader.parse(arrayBuffer, srcUrl, accept, reject); + }); + + const object = await parseVrm(arrayBuffer, srcUrl); + + const model = object.scene; + const glbData = await avatarOptimizer.optimizeAvatarModel(model); + return { + glbData, + }; + } + ]); + } + return this.optimizeAvatarModelFn.apply(this, arguments); + } #getCurrentMesh() { switch (this.quality) { case 1: { From e8f9fcdc73db386a2de46029a633dc8ffe1cda02 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Thu, 11 Aug 2022 23:15:04 -0400 Subject: [PATCH 093/125] More avatar renderer code work --- avatars/avatar-renderer.js | 18 ++---------------- 1 file changed, 2 insertions(+), 16 deletions(-) diff --git a/avatars/avatar-renderer.js b/avatars/avatar-renderer.js index 9aac28c195..b1531392a0 100644 --- a/avatars/avatar-renderer.js +++ b/avatars/avatar-renderer.js @@ -474,7 +474,6 @@ export class AvatarRenderer /* extends EventTarget */ { this.optimizedModelPromise = (async () => { await Promise.all([ (async () => { - // console.log('optimized model promise 1'); const { glbData, } = await this.optimizeAvatarModel([ @@ -485,18 +484,15 @@ export class AvatarRenderer /* extends EventTarget */ { ], { signal: this.abortController.signal, }); - // console.log('optimized model promise 2'); const object = await new Promise((accept, reject) => { const {gltfLoader} = loaders; gltfLoader.parse(glbData, this.srcUrl, accept, reject); }); - // console.log('optimized model promise 3'); const glb = object.scene; _forAllMeshes(glb, _unfrustumCull); glb.boundingSphere = _getMergedBoundingSphere(glb); this.optimizedModel = glb; - // console.log('optimized model promise 4'); })(), this.#ensureControlObject(), ]); @@ -518,16 +514,10 @@ export class AvatarRenderer /* extends EventTarget */ { }); const glb = object.scene; - // - - // const skinnedVrmBase = await _cloneVrm(); - // app.skinnedVrm = skinnedVrmBase; await _toonShaderify(object); _prepVrm(object.scene); _forAllMeshes(glb, _unfrustumCull); - // - glb.boundingSphere = _getMergedBoundingSphere(glb); this.mesh = glb; @@ -552,16 +542,15 @@ export class AvatarRenderer /* extends EventTarget */ { this.scene.remove(this.placeholderMesh); // add the new avatar mesh const currentMesh = this.#getCurrentMesh(); - /* console.log('got current mesh', currentMesh); if (!currentMesh) { debugger; - } */ + } this.scene.add(currentMesh); // this.dispatchEvent(updateEvent); } adjustQuality(delta) { - const newQuality = Math.min(Math.max(this.quality + delta, minQuality), maxQuality); + const newQuality = Math.min(Math.max(this.quality + delta, minAvatarQuality), maxAvatarQuality); if (newQuality !== this.quality) { this.setQuality(newQuality); } @@ -569,12 +558,9 @@ export class AvatarRenderer /* extends EventTarget */ { updateFrustumCull(matrix, frustum) { const currentMesh = this.#getCurrentMesh(); if (currentMesh) { - // const boundingBox = localBox.copy(currentMesh.boundingBox) - // .applyMatrix4(matrix); const boundingSphere = localSphere.copy(currentMesh.boundingSphere) .applyMatrix4(matrix); - // const inFrustum = frustum.intersectsBox(boundingBox); const inFrustum = frustum.intersectsSphere(boundingSphere); this.scene.visible = inFrustum; } From aa9d4955ad73aef19fc593dc1c32826755ce827b Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Thu, 11 Aug 2022 23:15:16 -0400 Subject: [PATCH 094/125] Add min/max avatar quality constants --- constants.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/constants.js b/constants.js index 622361332e..c9b3bba25a 100644 --- a/constants.js +++ b/constants.js @@ -160,6 +160,8 @@ export const defaultDioramaSize = 512; export const defaultChunkSize = 16; export const defaultWorldSeed = 100; +export const minAvatarQuality = 1; +export const maxAvatarQuality = 4; export const defaultAvatarQuality = 3; export const defaultVoiceEndpoint = `Sweetie Belle`; From 6015988161146f1c4131b188d65cca11c0cd9dbd Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Thu, 11 Aug 2022 23:15:36 -0400 Subject: [PATCH 095/125] Use avatar quality constants in avatar renderer --- avatars/avatar-renderer.js | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/avatars/avatar-renderer.js b/avatars/avatar-renderer.js index b1531392a0..4e4eab7659 100644 --- a/avatars/avatar-renderer.js +++ b/avatars/avatar-renderer.js @@ -8,8 +8,9 @@ import offscreenEngineManager from '../offscreen-engine-manager.js'; import loaders from '../loaders.js'; // import exporters from '../exporters.js'; import {abortError} from '../lock-manager.js'; -// import {defaultAvatarQuality} from '../constants.js'; -// import { downloadFile } from '../util.js'; +import {/*defaultAvatarQuality,*/ minAvatarQuality, maxAvatarQuality} from '../constants.js'; +const defaultAvatarQuality = 1; +// import {downloadFile} from '../util.js'; // const localBox = new THREE.Box3(); const localSphere = new THREE.Sphere(); @@ -77,8 +78,6 @@ const mapTypes = [ 'normalMap', 'roughnessMap', ]; -const minQuality = 1; -const maxQuality = 4; const _addAnisotropy = (o, anisotropyLevel) => { for (const mapType of mapTypes) { if (o.material[mapType]) { @@ -207,7 +206,6 @@ const _getMergedBoundingSphere = o => { return sphere; }; -const defaultAvatarQuality = 4; export class AvatarRenderer /* extends EventTarget */ { constructor({ arrayBuffer, From d53e269175045970e72837d3d18b71b8e51b027e Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Thu, 11 Aug 2022 23:46:24 -0400 Subject: [PATCH 096/125] Add avatar spriter canvas debugging --- avatars/avatar-renderer.js | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/avatars/avatar-renderer.js b/avatars/avatar-renderer.js index 4e4eab7659..fae45fa68c 100644 --- a/avatars/avatar-renderer.js +++ b/avatars/avatar-renderer.js @@ -423,6 +423,30 @@ export class AvatarRenderer /* extends EventTarget */ { const glb = avatarSpriter.createSpriteAvatarMeshFromTextures(textureImages); _forAllMeshes(glb, _unfrustumCull); glb.boundingSphere = _getMergedBoundingSphere(glb); + + // console.log('got texture images glb', {textureImages, glb}); + const canvasesPerRow = 4; + const canvasSize = 256; + for (let i = 0; i < textureImages.length; i++) { + const textureImage = textureImages[i]; + const x = i % canvasesPerRow; + const y = Math.floor(i / canvasesPerRow); + + const canvas = document.createElement('canvas'); + canvas.width = textureImage.width; + canvas.height = textureImage.height; + const ctx = canvas.getContext('2d'); + ctx.drawImage(textureImage, 0, 0); + canvas.style.cssText = `\ + position: absolute; + top: ${y * canvasSize}px; + left: ${x * canvasSize}px; + width: ${canvasSize}px; + height: ${canvasSize}px; + z-index: 1; + `; + document.body.appendChild(canvas); + } this.spriteAvatarMesh = glb; })(), From 80dc5c0c68076e196d6a852f14832b1a642e8887 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Thu, 11 Aug 2022 23:46:48 -0400 Subject: [PATCH 097/125] Small util.js cleanup --- util.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/util.js b/util.js index 75eed293ad..077e69ed74 100644 --- a/util.js +++ b/util.js @@ -8,7 +8,7 @@ import { /*accountsHost, loginEndpoint,*/ audioTimeoutTime, } from './constants.js'; // import { getRenderer } from './renderer.js'; -import { IdAllocator } from './id-allocator'; +import {IdAllocator} from './id-allocator.js'; const localVector = new THREE.Vector3(); const localVector2 = new THREE.Vector3(); From fa1f77ea25343526878456d8aaa5bb09018871da Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Thu, 11 Aug 2022 23:47:49 -0400 Subject: [PATCH 098/125] Add util.js getJsDataUrl method --- util.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/util.js b/util.js index 077e69ed74..e8c5f82509 100644 --- a/util.js +++ b/util.js @@ -1228,3 +1228,5 @@ export const splitLinesToWidth = (() => { return lines; }; })(); + +export const getJsDataUrl = src => `data:application/javascript;charset=utf-8,${encodeURIComponent(src)}` \ No newline at end of file From 194ac55a9cf5e69732e6a023da6d4413cd407ca0 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Thu, 11 Aug 2022 23:49:02 -0400 Subject: [PATCH 099/125] Set default avatar quality to max --- avatars/avatar-renderer.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/avatars/avatar-renderer.js b/avatars/avatar-renderer.js index fae45fa68c..e6f78956d1 100644 --- a/avatars/avatar-renderer.js +++ b/avatars/avatar-renderer.js @@ -9,7 +9,7 @@ import loaders from '../loaders.js'; // import exporters from '../exporters.js'; import {abortError} from '../lock-manager.js'; import {/*defaultAvatarQuality,*/ minAvatarQuality, maxAvatarQuality} from '../constants.js'; -const defaultAvatarQuality = 1; +const defaultAvatarQuality = 4; // import {downloadFile} from '../util.js'; // const localBox = new THREE.Box3(); From db3b7930d5028756322a67bb7bc76f8343da1be2 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Fri, 12 Aug 2022 01:16:39 -0400 Subject: [PATCH 100/125] Update avatar spriter API --- avatar-spriter.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/avatar-spriter.js b/avatar-spriter.js index 5f3db95922..68f34b61c9 100644 --- a/avatar-spriter.js +++ b/avatar-spriter.js @@ -480,7 +480,7 @@ class SpriteAvatarMesh extends THREE.Mesh { } } update(timestamp, timeDiff, { - playerAvatar: avatar, + avatar, camera, }) { const velocityScaleFactor = 10; // because avatars multiply velocity by 0.1 @@ -1688,6 +1688,7 @@ export const createSpriteAvatarMeshFromTextures = spriteImages => { return t; }); const spriteAvatarMesh = new SpriteAvatarMesh(spriteTextures); + spriteAvatarMesh.frustumCulled = false; return spriteAvatarMesh; }; export const createSpriteAvatarMesh = skinnedVrm => { From 0c62a62095fb9b27474978aa09e9f071c56f84e0 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Fri, 12 Aug 2022 01:17:15 -0400 Subject: [PATCH 101/125] Add local createSpriteAvatarMesh method --- avatars/avatar-renderer.js | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/avatars/avatar-renderer.js b/avatars/avatar-renderer.js index e6f78956d1..142953f6c0 100644 --- a/avatars/avatar-renderer.js +++ b/avatars/avatar-renderer.js @@ -6,6 +6,7 @@ import * as avatarCruncher from '../avatar-cruncher.js'; import * as avatarSpriter from '../avatar-spriter.js'; import offscreenEngineManager from '../offscreen-engine-manager.js'; import loaders from '../loaders.js'; +import {camera} from '../renderer.js'; // import exporters from '../exporters.js'; import {abortError} from '../lock-manager.js'; import {/*defaultAvatarQuality,*/ minAvatarQuality, maxAvatarQuality} from '../constants.js'; @@ -263,7 +264,33 @@ export class AvatarRenderer /* extends EventTarget */ { this.setQuality(quality); } - createSpriteAvatarMesh() { + createSpriteAvatarMesh([{ + arrayBuffer, + srcUrl, + }], {signal}) { + return (async () => { + /* console.log('avatar renderer 1', { + arrayBuffer, + srcUrl, + }); */ + const avatarRenderer = new AvatarRenderer({ + arrayBuffer, + srcUrl, + quality: maxAvatarQuality, + }); + await avatarRenderer.waitForLoad(); + + const textureCanvases = avatarSpriter.renderSpriteImages(avatarRenderer); + const textureImages = await Promise.all(textureCanvases.map(canvas => { + return createImageBitmap(canvas, { + imageOrientation: 'flipY', + }); + })); + return { + textureImages, + }; + })(); + if (!this.createSpriteAvatarMeshFn) { this.createSpriteAvatarMeshFn = offscreenEngineManager.createFunction([ `\ From 97d2ff41de03203d6960c44b36b3a9b81c7d860e Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Fri, 12 Aug 2022 01:18:14 -0400 Subject: [PATCH 102/125] Clean up avatar spriter canvas debugging --- avatars/avatar-renderer.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/avatars/avatar-renderer.js b/avatars/avatar-renderer.js index 142953f6c0..08ad980fc4 100644 --- a/avatars/avatar-renderer.js +++ b/avatars/avatar-renderer.js @@ -451,7 +451,7 @@ export class AvatarRenderer /* extends EventTarget */ { _forAllMeshes(glb, _unfrustumCull); glb.boundingSphere = _getMergedBoundingSphere(glb); - // console.log('got texture images glb', {textureImages, glb}); + /* // console.log('got texture images glb', {textureImages, glb}); const canvasesPerRow = 4; const canvasSize = 256; for (let i = 0; i < textureImages.length; i++) { @@ -473,7 +473,7 @@ export class AvatarRenderer /* extends EventTarget */ { z-index: 1; `; document.body.appendChild(canvas); - } + } */ this.spriteAvatarMesh = glb; })(), From 9bec8af589f9344457db252a6c66dba195167809 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Fri, 12 Aug 2022 01:18:35 -0400 Subject: [PATCH 103/125] Add avatar spriter updateAvatar method --- avatars/avatar-renderer.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/avatars/avatar-renderer.js b/avatars/avatar-renderer.js index 08ad980fc4..b20aaab86a 100644 --- a/avatars/avatar-renderer.js +++ b/avatars/avatar-renderer.js @@ -604,6 +604,15 @@ export class AvatarRenderer /* extends EventTarget */ { this.setQuality(newQuality); } } + updateAvatar(timestamp, timeDiff, avatar) { + const currentMesh = this.#getCurrentMesh(); + if (currentMesh === this.spriteAvatarMesh) { + this.spriteAvatarMesh.update(timestamp, timeDiff, { + avatar, + camera, + }); + } + } updateFrustumCull(matrix, frustum) { const currentMesh = this.#getCurrentMesh(); if (currentMesh) { From 9d2692926f1b4de7b5f50a7adc07219d382978c4 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Fri, 12 Aug 2022 01:19:25 -0400 Subject: [PATCH 104/125] Hook in avatars.js updateAvatar method for avatar sprites --- avatars/avatars.js | 1 + 1 file changed, 1 insertion(+) diff --git a/avatars/avatars.js b/avatars/avatars.js index 4d4feb80c5..0868de39c1 100644 --- a/avatars/avatars.js +++ b/avatars/avatars.js @@ -1958,6 +1958,7 @@ class Avatar { ); localFrustum.setFromProjectionMatrix(projScreenMatrix); + this.avatarRenderer.updateAvatar(timestamp, timeDiff, this); this.avatarRenderer.updateFrustumCull(localMatrix, localFrustum); }; _updateRendererFrustumCull(); From cd8e82e6a7c4f65e6feb41d4127e67d66caa0eae Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Fri, 12 Aug 2022 01:19:50 -0400 Subject: [PATCH 105/125] Abstract engine worker getJsDataUrl method --- engine-worker.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/engine-worker.js b/engine-worker.js index db796a5ca0..da3dac0a5d 100644 --- a/engine-worker.js +++ b/engine-worker.js @@ -1,6 +1,5 @@ -import { - bindCanvas, -} from './renderer.js'; +import {bindCanvas} from './renderer.js'; +import {getJsDataUrl} from './util.js'; window.addEventListener('message', e => { const method = e.data?.method; @@ -85,7 +84,7 @@ const _bindPort = port => { let error = null; let result = null; try { - const u = `data:application/javascript;charset=utf-8,${encodeURIComponent(src)}`; + const u = getJsDataUrl(src); const module = await import2(u); if (typeof module.default === 'function') { const fn = module.default; From 19323591e0c3b763c99eabc40541acfcd3cd3e59 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Fri, 12 Aug 2022 01:20:16 -0400 Subject: [PATCH 106/125] Offscreen engine proxy/direct cleanup --- offscreen-engine-manager.js | 9 ++++- offscreen-engine.js | 73 +++++++++++++++++++++++++++---------- 2 files changed, 60 insertions(+), 22 deletions(-) diff --git a/offscreen-engine-manager.js b/offscreen-engine-manager.js index a67bbe908e..643ac54f00 100644 --- a/offscreen-engine-manager.js +++ b/offscreen-engine-manager.js @@ -1,4 +1,9 @@ -import {OffscreenEngine} from './offscreen-engine.js'; +import { + OffscreenEngineProxy, + // OffscreenEngineDirect, +} from './offscreen-engine.js'; -const offscreenEngineManager = new OffscreenEngine(); +// const isOffscreenEngine = location.pathname === '/engine.html'; +// const offscreenEngineManager = isOffscreenEngine ? new OffscreenEngineDirect() : new OffscreenEngineProxy(); +const offscreenEngineManager = new OffscreenEngineProxy(); export default offscreenEngineManager; \ No newline at end of file diff --git a/offscreen-engine.js b/offscreen-engine.js index 02169f1fdb..9d652076b0 100644 --- a/offscreen-engine.js +++ b/offscreen-engine.js @@ -1,10 +1,23 @@ -import {getRandomString} from './util.js'; +import {getRandomString, getJsDataUrl} from './util.js'; import {inappPreviewHost} from './constants.js'; -class OffscreenEngine { +const _formatElement = e => { + if (typeof e === 'string') { + return e; + } else if (typeof e === 'function') { + return `\ +const _default_export_ = ${e.toString()}; +export default _default_export_;`; + } else { + console.warn('invalid element', e); + throw new Error('invalid element'); + } +}; +const _formatArray = a => a.map(e => _formatElement(e)).join('\n'); + +class OffscreenEngineProxy { constructor() { - this.id = getRandomString(); - this.frame = null; + this.iframe = null; this.port = null; this.loadPromise = null; @@ -57,19 +70,6 @@ class OffscreenEngine { if (!Array.isArray(o)) { o = [o]; } - const _formatElement = e => { - if (typeof e === 'string') { - return e; - } else if (typeof e === 'function') { - return `\ -const _default_export_ = ${e.toString()}; -export default _default_export_;`; - } else { - console.warn('invalid element', e); - throw new Error('invalid element'); - } - }; - const _formatArray = a => a.map(e => _formatElement(e)).join('\n'); const id = getRandomString(); const handlerId = getRandomString(); @@ -102,7 +102,7 @@ export default _default_export_;`; })(); const self = this; - async function callRemoteFn(args = [], { + async function callProxyFn(args = [], { signal = null, } = {}) { await loadPromise; @@ -161,7 +161,7 @@ export default _default_export_;`; }); return result; } - return callRemoteFn; + return callProxyFn; } destroy() { // this.live = false; @@ -176,7 +176,40 @@ export default _default_export_;`; } } } +/* class OffscreenEngineDirect { + constructor() { + // nothing + } + createFunction(o) { + if (!Array.isArray(o)) { + o = [o]; + } + + let fn = null; + const loadPromise = (async () => { + let src = _formatArray(o); + const u = getJsDataUrl(src); + const module = await import2(u); + fn = module.default; + // console.log('loaded fn', fn, src); + })(); + + async function callDirectFn(args = [], { + signal = null, + } = {}) { + await loadPromise; + signal.throwIfAborted(); + const result = await fn.apply(this, args); + return result; + } + return callDirectFn; + } + destroy() { + // nothing + } +} */ export { - OffscreenEngine, + OffscreenEngineProxy, + // OffscreenEngineDirect, }; From e80f1d1ca8ea25dcbdcb52d7928625aba2ddd397 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Fri, 12 Aug 2022 01:22:26 -0400 Subject: [PATCH 107/125] Avatar renderer commenting cleanup --- avatars/avatar-renderer.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/avatars/avatar-renderer.js b/avatars/avatar-renderer.js index b20aaab86a..2b55febd32 100644 --- a/avatars/avatar-renderer.js +++ b/avatars/avatar-renderer.js @@ -95,8 +95,6 @@ const _forAllMeshes = (o, fn) => { }; const _bindSkeleton = (dstModel, srcObject) => { - console.log('bind skeleton', {dstModel, srcObject}); - const srcModel = srcObject.scene; const _findBoneInSrc = (srcBoneName) => { From f1e6817699b8ae3e543757f09e92cda475413e17 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Fri, 12 Aug 2022 11:05:50 -0400 Subject: [PATCH 108/125] Use MeshBasicMaterial for avatar cruncher --- avatar-cruncher.js | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/avatar-cruncher.js b/avatar-cruncher.js index 0cc7eb6c3c..75b04b9694 100644 --- a/avatar-cruncher.js +++ b/avatar-cruncher.js @@ -37,15 +37,8 @@ export const crunchAvatarModel = async (model, options = {}) => { } = mergeGeometryTextureAtlas(mergeable, textureSize); // const m = material; - const m = new THREE.MeshStandardMaterial(); - console.log('swap materials crunch', {material, m}); + const m = new THREE.MeshBasicMaterial(); m.roughness = 1; - // m.alphaTest = 0.1; - // m.side = THREE.BackSide; - // m.side = THREE.DoubleSide; - // m.alphaToCoverage = true; - // m.alphaTest = 1; - // m.transparent = false; m.transparent = true; const _updateMaterial = () => { if (atlasTextures) { From 5eed31bc7d4fb6d082dc9e53dcbce684b8e662df Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Fri, 12 Aug 2022 11:06:37 -0400 Subject: [PATCH 109/125] Bugfix abort error passthrough in offscreen engine --- offscreen-engine.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/offscreen-engine.js b/offscreen-engine.js index 9d652076b0..75a22266e5 100644 --- a/offscreen-engine.js +++ b/offscreen-engine.js @@ -150,7 +150,7 @@ class OffscreenEngineProxy { if (signal) { const abort = () => { // XXX we can post the abort to the worker process to make it stop faster - reject(new Error('abort')); + reject(signal.reason); _cleanup(); }; signal.addEventListener('abort', abort); From dd138cb3b64965cfb1c9fc9a967f68f412e5fb01 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Fri, 12 Aug 2022 11:12:13 -0400 Subject: [PATCH 110/125] Rewrite abort handling in avatar renderer --- avatars/avatar-renderer.js | 155 +++++++++++++++++++++++++++++++------ 1 file changed, 132 insertions(+), 23 deletions(-) diff --git a/avatars/avatar-renderer.js b/avatars/avatar-renderer.js index 2b55febd32..b15437fabd 100644 --- a/avatars/avatar-renderer.js +++ b/avatars/avatar-renderer.js @@ -49,9 +49,10 @@ const _cloneVrm = async () => { return vrm; }; const _unfrustumCull = o => { - if (o.isMesh) { - o.frustumCulled = false; - } + o.frustumCulled = false; +}; +const _setDepthWrite = (o, depthWrite) => { + o.material.depthWrite = depthWrite; }; const _toonShaderify = async o => { await new VRMMaterialImporter().convertGLTFMaterials(o); @@ -244,7 +245,7 @@ export class AvatarRenderer /* extends EventTarget */ { // - this.abortController = new AbortController(); + this.abortController = null; // @@ -422,12 +423,25 @@ export class AvatarRenderer /* extends EventTarget */ { } } async setQuality(quality) { + // set new quality this.quality = quality; + // cancel old load + if (this.abortController) { + this.abortController.abort(abortError); + this.abortController = null; + } + + // clear old avatar scene // XXX destroy old avatars? this.scene.clear(); + // add placeholder this.scene.add(this.placeholderMesh); + // start loading + this.abortController = new AbortController(); + + // load this.loadPromise = (async () => { switch (this.quality) { case 1: { @@ -480,7 +494,16 @@ export class AvatarRenderer /* extends EventTarget */ { this.#bindControlObject(); })(); } - await this.spriteAvatarMeshPromise; + { + try { + await this.spriteAvatarMeshPromise; + } catch (err) { + if (err.isAbortError) { + this.spriteAvatarMeshPromise = null; + } + throw err; + } + } break; } case 2: { @@ -502,9 +525,54 @@ export class AvatarRenderer /* extends EventTarget */ { const {gltfLoader} = loaders; gltfLoader.parse(glbData, this.srcUrl, accept, reject); }); + // downloadFile(new Blob([glbData], {type: 'application/octet-stream'}), 'avatar.glb'); const glb = object.scene; - _forAllMeshes(glb, _unfrustumCull); + _forAllMeshes(glb, o => { + _unfrustumCull(o); + _setDepthWrite(o, true); + }); glb.boundingSphere = _getMergedBoundingSphere(glb); + + /* glb.traverse(o => { + if (o.isMesh) { + // o.material.side = THREE.BackSide; + + console.log('load material', o.material); + + const map = o.material.map; + if (map) { + // draw the ImageBitmap to a canvas + const canvas = document.createElement('canvas'); + canvas.width = map.image.width; + canvas.height = map.image.height; + const ctx = canvas.getContext('2d'); + ctx.drawImage(map.image, 0, 0); + + // set alpha to 255 for all pixels + { + const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height); + const {data} = imageData; + for (let i = 0; i < data.length; i += 4) { + data[i + 3] = 255; + } + ctx.putImageData(imageData, 0, 0); + } + + document.body.appendChild(canvas); + // 300px absolute top left + canvas.style.cssText = `\ + position: absolute; + top: 0; + left: 0; + width: 400px; + height: 400px; + `; + + map.image = canvas; + map.needsUpdate = true; + } + } + }); */ this.crunchedModel = glb; })(), @@ -513,7 +581,16 @@ export class AvatarRenderer /* extends EventTarget */ { this.#bindControlObject(); })(); } - await this.crunchedModelPromise; + { + try { + await this.crunchedModelPromise; + } catch (err) { + if (err.isAbortError) { + this.crunchedModelPromise = null; + } + throw err; + } + } break; } case 3: { @@ -546,7 +623,16 @@ export class AvatarRenderer /* extends EventTarget */ { this.#bindControlObject(); })(); } - await this.optimizedModelPromise; + { + try { + await this.optimizedModelPromise; + } catch (err) { + if (err.isAbortError) { + this.optimizedModelPromise = null; + } + throw err; + } + } break; } case 4: { @@ -574,7 +660,16 @@ export class AvatarRenderer /* extends EventTarget */ { this.#bindControlObject(); })(); } - await this.meshPromise; + { + try { + await this.meshPromise; + } catch (err) { + if (err.isAbortError) { + this.meshPromise = null; + } + throw err; + } + } break; } default: { @@ -582,19 +677,31 @@ export class AvatarRenderer /* extends EventTarget */ { } } })(); + { + // wait for load + let caughtError = null; + try { + await this.loadPromise; + } catch (err) { + caughtError = err; + } + // remove the placeholder mesh + this.scene.remove(this.placeholderMesh); + // handle errors + if (caughtError) { + if (caughtError.isAbortError) { + return; // bail + } else { + throw caughtError; + } + } else { + this.abortController = null; + } + } - await this.loadPromise; - - // remove the old placeholder mesh - this.scene.remove(this.placeholderMesh); // add the new avatar mesh const currentMesh = this.#getCurrentMesh(); - if (!currentMesh) { - debugger; - } this.scene.add(currentMesh); - - // this.dispatchEvent(updateEvent); } adjustQuality(delta) { const newQuality = Math.min(Math.max(this.quality + delta, minAvatarQuality), maxAvatarQuality); @@ -604,11 +711,13 @@ export class AvatarRenderer /* extends EventTarget */ { } updateAvatar(timestamp, timeDiff, avatar) { const currentMesh = this.#getCurrentMesh(); - if (currentMesh === this.spriteAvatarMesh) { - this.spriteAvatarMesh.update(timestamp, timeDiff, { - avatar, - camera, - }); + if (currentMesh) { + if (currentMesh === this.spriteAvatarMesh) { + this.spriteAvatarMesh.update(timestamp, timeDiff, { + avatar, + camera, + }); + } } } updateFrustumCull(matrix, frustum) { From d53fa62df450b118f25e3ee4612a8b0aee3c64c5 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Fri, 12 Aug 2022 13:24:46 -0400 Subject: [PATCH 111/125] Bugfix avatar renderer placeholder icon --- public/images/user.png | Bin 59654 -> 59413 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/public/images/user.png b/public/images/user.png index 24db512078e20e128bf3eb302d68555181461b3e..4fed3512ec082d87d20d428ad1041148bf9bd928 100644 GIT binary patch literal 59413 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

S;R^WJ~A%+^^P^7vx< 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 From 5ddcef4af829ba770a71077f1fa68b7274d88a88 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Fri, 12 Aug 2022 13:47:12 -0400 Subject: [PATCH 112/125] Avatar renderer switch icon --- avatars/avatar-renderer.js | 106 ++++++++++++++++++++++++++++++------- 1 file changed, 86 insertions(+), 20 deletions(-) diff --git a/avatars/avatar-renderer.js b/avatars/avatar-renderer.js index b15437fabd..02140f1403 100644 --- a/avatars/avatar-renderer.js +++ b/avatars/avatar-renderer.js @@ -6,6 +6,7 @@ import * as avatarCruncher from '../avatar-cruncher.js'; import * as avatarSpriter from '../avatar-spriter.js'; import offscreenEngineManager from '../offscreen-engine-manager.js'; import loaders from '../loaders.js'; +import {WebaverseShaderMaterial} from '../materials.js'; import {camera} from '../renderer.js'; // import exporters from '../exporters.js'; import {abortError} from '../lock-manager.js'; @@ -13,7 +14,10 @@ import {/*defaultAvatarQuality,*/ minAvatarQuality, maxAvatarQuality} from '../c const defaultAvatarQuality = 4; // import {downloadFile} from '../util.js'; -// const localBox = new THREE.Box3(); +const localVector2 = new THREE.Vector3(); +const localQuaternion = new THREE.Quaternion(); +const localEuler = new THREE.Euler(); +const localMatrix = new THREE.Matrix4(); const localSphere = new THREE.Sphere(); const avatarPlaceholderImagePromise = (async () => { @@ -29,14 +33,61 @@ const waitForAvatarPlaceholderImage = () => avatarPlaceholderImagePromise; const avatarPlaceholderTexture = new THREE.Texture(); (async() => { const avatarPlaceholderImage = await waitForAvatarPlaceholderImage(); + /* avatarPlaceholderImage.style.cssText = `\ + position: absolute; + top: 0; + left: 0; + z-index: 1; + `; + document.body.appendChild(avatarPlaceholderImage); */ avatarPlaceholderTexture.image = avatarPlaceholderImage; avatarPlaceholderTexture.needsUpdate = true; })(); -const geometry = new THREE.PlaneBufferGeometry(0.1, 0.1); -const material = new THREE.MeshBasicMaterial({ - map: avatarPlaceholderTexture, -}); -const _makeAvatarPlaceholderMesh = () => new THREE.Mesh(geometry, material); +const _makeAvatarPlaceholderMesh = (() => { + const geometry = new THREE.PlaneBufferGeometry(0.2, 0.2); + const material = new WebaverseShaderMaterial({ + uniforms: { + map: { + value: avatarPlaceholderTexture, + needsUpdate: true, + }, + }, + vertexShader: `\ + varying vec2 vUv; + void main() { + vUv = uv; + gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0); + } + `, + fragmentShader: `\ + uniform sampler2D map; + varying vec2 vUv; + + const vec4 green = vec4(${new THREE.Color(0x66bb6a).toArray().map(n => n.toFixed(8)).join(', ')}, 1.0); + + void main() { + if (vUv.x >= -1.) { + vec4 c = texture2D(map, vUv); + gl_FragColor = c; + } else { + gl_FragColor = green; + } + if (gl_FragColor.a < 0.9) { + discard; + } + } + `, + side: THREE.DoubleSide, + // alphaTest: 0.9, + // alphaToCoverage: true, + transparent: true, + }); + return () => { + const mesh = new THREE.Mesh(geometry, material); + mesh.frustumCulled = false; + return mesh; + }; +})(); const parseVrm = (arrayBuffer, srcUrl) => new Promise((accept, reject) => { const {gltfLoader} = loaders; gltfLoader.parse(arrayBuffer, srcUrl, accept, reject); @@ -51,21 +102,13 @@ const _cloneVrm = async () => { const _unfrustumCull = o => { o.frustumCulled = false; }; -const _setDepthWrite = (o, depthWrite) => { - o.material.depthWrite = depthWrite; +const _setDepthWrite = o => { + o.material.depthWrite = true; + o.material.alphaTest = 0.9; }; const _toonShaderify = async o => { await new VRMMaterialImporter().convertGLTFMaterials(o); }; -const _prepVrm = (vrm) => { - // app.add(vrm); - // vrm.updateMatrixWorld(); - _forAllMeshes(vrm, o => { - _addAnisotropy(o, 16); - // _limitShadeColor(o); - _unfrustumCull(o); - }); -}; const mapTypes = [ 'alphaMap', @@ -529,7 +572,7 @@ export class AvatarRenderer /* extends EventTarget */ { const glb = object.scene; _forAllMeshes(glb, o => { _unfrustumCull(o); - _setDepthWrite(o, true); + _setDepthWrite(o); }); glb.boundingSphere = _getMergedBoundingSphere(glb); @@ -648,8 +691,10 @@ export class AvatarRenderer /* extends EventTarget */ { const glb = object.scene; await _toonShaderify(object); - _prepVrm(object.scene); - _forAllMeshes(glb, _unfrustumCull); + _forAllMeshes(glb, o => { + _addAnisotropy(o, 16); + _unfrustumCull(o); + }); glb.boundingSphere = _getMergedBoundingSphere(glb); @@ -710,6 +755,27 @@ export class AvatarRenderer /* extends EventTarget */ { } } updateAvatar(timestamp, timeDiff, avatar) { + // update placeholder + { + this.placeholderMesh.position.copy(avatar.inputs.hmd.position); + // this.placeholderMesh.position.y -= avatar.height; + + localQuaternion + .setFromRotationMatrix( + localMatrix.lookAt( + camera.position, + this.placeholderMesh.position, + localVector2.set(0, 1, 0) + ) + ) + localEuler.setFromQuaternion(localQuaternion, 'YXZ'); + localEuler.x = 0; + localEuler.z = 0; + this.placeholderMesh.quaternion.setFromEuler(localEuler); + this.placeholderMesh.updateMatrixWorld(); + } + + // update avatar const currentMesh = this.#getCurrentMesh(); if (currentMesh) { if (currentMesh === this.spriteAvatarMesh) { From 7811099cd46d20443e495486f537a41c002cde62 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Fri, 12 Aug 2022 13:59:01 -0400 Subject: [PATCH 113/125] Clean up avatar placeholder mesh --- avatars/avatar-renderer.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/avatars/avatar-renderer.js b/avatars/avatar-renderer.js index 02140f1403..6e9fe56b05 100644 --- a/avatars/avatar-renderer.js +++ b/avatars/avatar-renderer.js @@ -730,8 +730,6 @@ export class AvatarRenderer /* extends EventTarget */ { } catch (err) { caughtError = err; } - // remove the placeholder mesh - this.scene.remove(this.placeholderMesh); // handle errors if (caughtError) { if (caughtError.isAbortError) { @@ -744,6 +742,9 @@ export class AvatarRenderer /* extends EventTarget */ { } } + // remove the placeholder mesh + this.scene.remove(this.placeholderMesh); + // add the new avatar mesh const currentMesh = this.#getCurrentMesh(); this.scene.add(currentMesh); From 5e8a11703671a072d7ee032a7fd7a44eaec90daa Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Fri, 12 Aug 2022 14:42:29 -0400 Subject: [PATCH 114/125] Avatar loading icon checkpoint --- avatars/avatar-renderer.js | 40 +++++++++++++++++++++++++++++++++----- 1 file changed, 35 insertions(+), 5 deletions(-) diff --git a/avatars/avatar-renderer.js b/avatars/avatar-renderer.js index 6e9fe56b05..2f3b466d2e 100644 --- a/avatars/avatar-renderer.js +++ b/avatars/avatar-renderer.js @@ -1,5 +1,6 @@ /* this file implements avatar optimization and THREE.js Object management + rendering */ import * as THREE from 'three'; +import * as BufferGeometryUtils from 'three/examples/jsm/utils/BufferGeometryUtils.js'; import {VRMMaterialImporter/*, MToonMaterial*/} from '@pixiv/three-vrm/lib/three-vrm.module'; import * as avatarOptimizer from '../avatar-optimizer.js'; import * as avatarCruncher from '../avatar-cruncher.js'; @@ -14,6 +15,7 @@ import {/*defaultAvatarQuality,*/ minAvatarQuality, maxAvatarQuality} from '../c const defaultAvatarQuality = 4; // import {downloadFile} from '../util.js'; +const localVector = new THREE.Vector3(); const localVector2 = new THREE.Vector3(); const localQuaternion = new THREE.Quaternion(); const localEuler = new THREE.Euler(); @@ -44,7 +46,29 @@ const avatarPlaceholderTexture = new THREE.Texture(); avatarPlaceholderTexture.needsUpdate = true; })(); const _makeAvatarPlaceholderMesh = (() => { - const geometry = new THREE.PlaneBufferGeometry(0.2, 0.2); + const planeGeometry = new THREE.PlaneBufferGeometry(0.2, 0.2); + { + const angles = new Float32Array(planeGeometry.attributes.position.count).fill(-100); + planeGeometry.setAttribute('angle', new THREE.BufferAttribute(angles, 1)); + } + const ringGeometry = new THREE.RingGeometry(0.125, 0.14, 10, 1); + { + const angles = new Float32Array(ringGeometry.attributes.position.count); + // compute the angle, starting from the 0 at the top of the ring + for (let i = 0; i < ringGeometry.attributes.position.count; i++) { + // localVector.fromArray(ringGeometry.attributes.position.array, i * 3); + // const {x, y} = localVector; + const x = ringGeometry.attributes.position.array[i * 3]; + const y = ringGeometry.attributes.position.array[i * 3 + 1]; + const angle = Math.atan2(y, x); + angles[i] = angle; + } + ringGeometry.setAttribute('angle', new THREE.BufferAttribute(angles, 1)); + } + const geometry = BufferGeometryUtils.mergeBufferGeometries([ + planeGeometry, + ringGeometry, + ]); const material = new WebaverseShaderMaterial({ uniforms: { map: { @@ -53,24 +77,29 @@ const _makeAvatarPlaceholderMesh = (() => { }, }, vertexShader: `\ + attribute float angle; varying vec2 vUv; + varying float vAngle; + void main() { vUv = uv; + vAngle = angle; gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0); } `, fragmentShader: `\ uniform sampler2D map; varying vec2 vUv; + varying float vAngle; const vec4 green = vec4(${new THREE.Color(0x66bb6a).toArray().map(n => n.toFixed(8)).join(', ')}, 1.0); void main() { - if (vUv.x >= -1.) { + if (vAngle > -50.) { + gl_FragColor = green; + } else { vec4 c = texture2D(map, vUv); gl_FragColor = c; - } else { - gl_FragColor = green; } if (gl_FragColor.a < 0.9) { discard; @@ -104,7 +133,8 @@ const _unfrustumCull = o => { }; const _setDepthWrite = o => { o.material.depthWrite = true; - o.material.alphaTest = 0.9; + o.material.alphaToCoverage = true; + // o.material.alphaTest = 0.5; }; const _toonShaderify = async o => { await new VRMMaterialImporter().convertGLTFMaterials(o); From 00d835402bff15ce74b01f3843fcc8ae444ea57d Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Fri, 12 Aug 2022 17:13:16 -0400 Subject: [PATCH 115/125] Checkpoint avatar loading --- avatars/avatar-renderer.js | 92 +++++++++++++++++++++++++++++++++----- 1 file changed, 81 insertions(+), 11 deletions(-) diff --git a/avatars/avatar-renderer.js b/avatars/avatar-renderer.js index 2f3b466d2e..66cf62e82f 100644 --- a/avatars/avatar-renderer.js +++ b/avatars/avatar-renderer.js @@ -22,6 +22,8 @@ const localEuler = new THREE.Euler(); const localMatrix = new THREE.Matrix4(); const localSphere = new THREE.Sphere(); +const greenColor = new THREE.Color(0x43a047); + const avatarPlaceholderImagePromise = (async () => { const avatarPlaceholderImage = new Image(); avatarPlaceholderImage.src = '/images/user.png'; @@ -51,18 +53,18 @@ const _makeAvatarPlaceholderMesh = (() => { const angles = new Float32Array(planeGeometry.attributes.position.count).fill(-100); planeGeometry.setAttribute('angle', new THREE.BufferAttribute(angles, 1)); } - const ringGeometry = new THREE.RingGeometry(0.125, 0.14, 10, 1); + const ringGeometry = new THREE.RingGeometry(0.125, 0.14, 32, 1); { const angles = new Float32Array(ringGeometry.attributes.position.count); // compute the angle, starting from the 0 at the top of the ring for (let i = 0; i < ringGeometry.attributes.position.count; i++) { - // localVector.fromArray(ringGeometry.attributes.position.array, i * 3); - // const {x, y} = localVector; const x = ringGeometry.attributes.position.array[i * 3]; const y = ringGeometry.attributes.position.array[i * 3 + 1]; - const angle = Math.atan2(y, x); + let angle = (Math.atan2(-x, -y) + Math.PI) / (Math.PI * 2); + // angle = Math.min(Math.max(angle, 0.1), 0.9); // exactly 1 interferes with mod angles[i] = angle; } + // console.log('got angles', angles); ringGeometry.setAttribute('angle', new THREE.BufferAttribute(angles, 1)); } const geometry = BufferGeometryUtils.mergeBufferGeometries([ @@ -71,48 +73,113 @@ const _makeAvatarPlaceholderMesh = (() => { ]); const material = new WebaverseShaderMaterial({ uniforms: { + uTime: { + value: 0, + needsUpdate: true, + }, map: { value: avatarPlaceholderTexture, needsUpdate: true, }, }, vertexShader: `\ + uniform float uTime; attribute float angle; varying vec2 vUv; varying float vAngle; + /* float getBezierT(float x, float a, float b, float c, float d) { + return float(sqrt(3.) * + sqrt(-4. * b * d + 4. * b * x + 3. * c * c + 2. * c * d - 8. * c * x - d * d + 4. * d * x) + + 6. * b - 9. * c + 3. * d) + / (6. * (b - 2. * c + d)); + } + float easing(float x) { + return getBezierT(x, 0., 1., 0., 1.); + } */ + + const float q = 0.1; + void main() { + vec3 p = position; vUv = uv; vAngle = angle; - gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0); + if (angle > -50.) { + vAngle = mod(angle - uTime, 1.); + vAngle = min(max(vAngle - 0.5, 0.), 1.) * 2.; + } else { + float t = uTime; + t = mod(t * 2., 1.); + float f = t < q ? + pow(t/q, 0.1) + : + 1. - (t - q)/(1. - q); + + p *= (1. + f * 0.2); + } + gl_Position = projectionMatrix * modelViewMatrix * vec4(p, 1.0); } `, fragmentShader: `\ + uniform float uTime; uniform sampler2D map; varying vec2 vUv; varying float vAngle; - const vec4 green = vec4(${new THREE.Color(0x66bb6a).toArray().map(n => n.toFixed(8)).join(', ')}, 1.0); + #define PI 3.1415926535897932384626433832795 + + const vec4 green = vec4(${ + greenColor.clone() + // .multiplyScalar(1.3) + .toArray() + .map(n => n.toFixed(8)) + .join(', ') + }, 1.0); void main() { if (vAngle > -50.) { + float f = vAngle; + // float f = (vAngle - uTime); + // f = mod(f, 1.); + gl_FragColor = green; + gl_FragColor.rgb *= pow(f * 1.3, 0.5); + /* if (f < 0.) { + gl_FragColor.r = 1.; + } + if (f > 1.) { + gl_FragColor.b = 1.; + } */ + // gl_FragColor = green; + // gl_FragColor.r = f; + gl_FragColor.a = f; } else { vec4 c = texture2D(map, vUv); gl_FragColor = c; - } - if (gl_FragColor.a < 0.9) { - discard; + gl_FragColor.rgb = (1. - gl_FragColor.rgb) * green.rgb; + + if (gl_FragColor.a < 0.9) { + discard; + } } } `, side: THREE.DoubleSide, // alphaTest: 0.9, - // alphaToCoverage: true, + alphaToCoverage: true, transparent: true, }); return () => { const mesh = new THREE.Mesh(geometry, material); + let startTime = 0; + const animationTime = 1500; + mesh.start = () => { + startTime = performance.now(); + }; + mesh.update = (timestamp) => { + material.uniforms.uTime.value = ((timestamp - startTime) / animationTime) % 1; + material.uniforms.uTime.needsUpdate = true; + }; mesh.frustumCulled = false; return mesh; }; @@ -510,6 +577,7 @@ export class AvatarRenderer /* extends EventTarget */ { this.scene.clear(); // add placeholder this.scene.add(this.placeholderMesh); + this.placeholderMesh.start(); // start loading this.abortController = new AbortController(); @@ -773,7 +841,7 @@ export class AvatarRenderer /* extends EventTarget */ { } // remove the placeholder mesh - this.scene.remove(this.placeholderMesh); + this.placeholderMesh.parent.remove(this.placeholderMesh); // add the new avatar mesh const currentMesh = this.#getCurrentMesh(); @@ -804,6 +872,8 @@ export class AvatarRenderer /* extends EventTarget */ { localEuler.z = 0; this.placeholderMesh.quaternion.setFromEuler(localEuler); this.placeholderMesh.updateMatrixWorld(); + + this.placeholderMesh.update(timestamp); } // update avatar From cf4793b2e96ac4301260842a0b90e014c0e255c0 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Fri, 12 Aug 2022 17:23:45 -0400 Subject: [PATCH 116/125] Clean up avatar load placeholder --- avatars/avatar-renderer.js | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/avatars/avatar-renderer.js b/avatars/avatar-renderer.js index 66cf62e82f..708b75a96b 100644 --- a/avatars/avatar-renderer.js +++ b/avatars/avatar-renderer.js @@ -53,18 +53,16 @@ const _makeAvatarPlaceholderMesh = (() => { const angles = new Float32Array(planeGeometry.attributes.position.count).fill(-100); planeGeometry.setAttribute('angle', new THREE.BufferAttribute(angles, 1)); } - const ringGeometry = new THREE.RingGeometry(0.125, 0.14, 32, 1); + const ringGeometry = new THREE.RingGeometry(0.135, 0.15, 32, 1); { const angles = new Float32Array(ringGeometry.attributes.position.count); // compute the angle, starting from the 0 at the top of the ring for (let i = 0; i < ringGeometry.attributes.position.count; i++) { const x = ringGeometry.attributes.position.array[i * 3]; const y = ringGeometry.attributes.position.array[i * 3 + 1]; - let angle = (Math.atan2(-x, -y) + Math.PI) / (Math.PI * 2); - // angle = Math.min(Math.max(angle, 0.1), 0.9); // exactly 1 interferes with mod + const angle = (Math.atan2(-x, -y) + Math.PI) / (Math.PI * 2); angles[i] = angle; } - // console.log('got angles', angles); ringGeometry.setAttribute('angle', new THREE.BufferAttribute(angles, 1)); } const geometry = BufferGeometryUtils.mergeBufferGeometries([ @@ -105,7 +103,7 @@ const _makeAvatarPlaceholderMesh = (() => { vUv = uv; vAngle = angle; if (angle > -50.) { - vAngle = mod(angle - uTime, 1.); + vAngle = mod(vAngle - uTime, 1.); vAngle = min(max(vAngle - 0.5, 0.), 1.) * 2.; } else { float t = uTime; @@ -139,6 +137,7 @@ const _makeAvatarPlaceholderMesh = (() => { void main() { if (vAngle > -50.) { float f = vAngle; + // f = pow(f, 0.2); // float f = (vAngle - uTime); // f = mod(f, 1.); @@ -172,7 +171,7 @@ const _makeAvatarPlaceholderMesh = (() => { return () => { const mesh = new THREE.Mesh(geometry, material); let startTime = 0; - const animationTime = 1500; + const animationTime = 1000; mesh.start = () => { startTime = performance.now(); }; From 77ffb58c434952d56a3821e4df8f8dbd4c101b93 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Fri, 12 Aug 2022 22:05:21 -0400 Subject: [PATCH 117/125] Bugfix optimized avatar hair mesh shader --- character-fx.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/character-fx.js b/character-fx.js index e514514c27..4576a6f647 100644 --- a/character-fx.js +++ b/character-fx.js @@ -111,11 +111,13 @@ class CharacterFx { const _initHairMeshes = () => { this.hairMeshes = []; - this.player.avatar.object.scene.traverse(o => { + const avatarRenderer = this.player.avatar.avatarRenderer; + const model = avatarRenderer.quality === 4 ? avatarRenderer.mesh : null; + model && model.traverse(o => { // console.log(o.name, o.isMesh); if (o.isSkinnedMesh) { const {geometry, skeleton} = o; - const skeletonBoneHariBooleans = skeleton.bones.map(bone => /hair/i.test(bone.name)); + const skeletonBoneHairBooleans = skeleton.bones.map(bone => /hair/i.test(bone.name)); const {attributes, index: indexAttribute} = geometry; const indices = indexAttribute.array; const {skinIndex, skinWeight} = attributes; @@ -128,7 +130,7 @@ class CharacterFx { for (let j = 0; j < itemSize; j++) { const skinIndex = skinIndices[index * itemSize + j]; const skinWeight = skinWeights[index * itemSize + j]; - if (skinWeight !== 0 && skeletonBoneHariBooleans[skinIndex]) { + if (skinWeight !== 0 && skeletonBoneHairBooleans[skinIndex]) { this.hairMeshes.push(o); done = true; break; From 06918f799a873d6bb588325974d3eecb3ad16be3 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Sat, 13 Aug 2022 22:42:51 -0400 Subject: [PATCH 118/125] Bump totum --- packages/totum | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/totum b/packages/totum index 7b2d1a4176..b96856748a 160000 --- a/packages/totum +++ b/packages/totum @@ -1 +1 @@ -Subproject commit 7b2d1a41761cac3ca4fa835a7d45ee338bfb3893 +Subproject commit b96856748ae7c374658259b824b7d216f41eb144 From aab7512c356929db8dc1cf2413331b79fa877f4a Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Sun, 14 Aug 2022 03:36:18 -0400 Subject: [PATCH 119/125] Major avatar spriter work --- avatar-spriter.js | 261 +++++++++++++++++++++++++++++----------------- 1 file changed, 168 insertions(+), 93 deletions(-) diff --git a/avatar-spriter.js b/avatar-spriter.js index 68f34b61c9..6d257972ce 100644 --- a/avatar-spriter.js +++ b/avatar-spriter.js @@ -5,10 +5,14 @@ import metaversefile from 'metaversefile'; // import * as BufferGeometryUtils from 'three/examples/jsm/utils/BufferGeometryUtils.js'; import {DoubleSidedPlaneGeometry, CameraGeometry} from './geometries.js'; import {WebaverseShaderMaterial} from './materials.js'; +import {getRenderer, scene, camera} from './renderer.js'; import Avatar from './avatars/avatars.js'; -import {mod, angleDifference} from './util.js'; +import {AvatarRenderer} from './avatars/avatar-renderer.js'; +import {mod, angleDifference, makePromise} from './util.js'; +import {world} from './world.js'; +import {maxAvatarQuality} from './constants.js'; -const preview = false; // whether to draw debug meshes +const preview = true; // whether to draw debug meshes const cameraGeometry = new CameraGeometry(); const cameraMaterial = new THREE.MeshBasicMaterial({ @@ -18,7 +22,6 @@ const cameraMesh = new THREE.Mesh( cameraGeometry, cameraMaterial, ); -// scene.add(cameraMesh); const localVector = new THREE.Vector3(); const localVector2 = new THREE.Vector3(); @@ -54,22 +57,91 @@ const alphaTest = 0.9; const planeSpriteMeshes = []; const spriteAvatarMeshes = []; +const globalUpdate = (timestamp, timeDiff, camera) => { + if (preview) { + for (const planeSpriteMesh of planeSpriteMeshes) { + const {duration} = planeSpriteMesh.spriteSpec; + const uTime = (timestamp/1000 % duration) / duration; + if (isNaN(uTime)) { + debugger; + } + [planeSpriteMesh.material, planeSpriteMesh.customPostMaterial].forEach(material => { + if (material?.uniforms) { + material.uniforms.uTime.value = uTime; + material.uniforms.uTime.needsUpdate = true; + } + }); + } + + for (const spriteAvatarMesh of spriteAvatarMeshes) { + const {duration} = spriteAvatarMesh.spriteSpec; + const uTime = (timestamp/1000 % duration) / duration; + if (isNaN(uTime)) { + debugger; + } + + { + localQuaternion + .setFromRotationMatrix( + localMatrix.lookAt( + spriteAvatarMesh.getWorldPosition(localVector), + camera.position, + localVector2.set(0, 1, 0) + ) + ) + // .premultiply(app.quaternion.clone().invert()); + localEuler.setFromQuaternion(localQuaternion, 'YXZ'); + localEuler.x = 0; + localEuler.z = 0; + spriteAvatarMesh.quaternion.setFromEuler(localEuler); + spriteAvatarMesh.updateMatrixWorld(); + } + + [ + spriteAvatarMesh.material, + spriteAvatarMesh.customPostMaterial, + ].forEach(material => { + if (material?.uniforms) { + material.uniforms.uTime.value = uTime; + material.uniforms.uTime.needsUpdate = true; + + material.uniforms.uY.value = mod(localEuler.y + Math.PI*2/numAngles/2, Math.PI*2) / (Math.PI*2); + material.uniforms.uY.needsUpdate = true; + } + }); + } + } +}; +const _ensureScheduleGlobalUpdate = (() => { + let scheduled = false; + return () => { + if (!scheduled) { + scene.add(cameraMesh); + world.appManager.addEventListener('frame', e => { + const {timestamp, timeDiff} = e.data; + globalUpdate(timestamp, timeDiff, camera); + }); + scheduled = true; + } + }; +})(); + class SpriteAnimationPlaneMesh extends THREE.Mesh { constructor(tex, {angleIndex}) { const planeSpriteMaterial = new WebaverseShaderMaterial({ uniforms: { uTex: { - type: 't', + // type: 't', value: tex, - // needsUpdate: true, + needsUpdate: true, }, uTime: { - type: 'f', + // type: 'f', value: 0, needsUpdate: true, }, uAngleIndex: { - type: 'f', + // type: 'f', value: angleIndex, needsUpdate: true, }, @@ -166,11 +238,14 @@ class SpriteAnimationPlaneMesh extends THREE.Mesh { vec2(x, -y)/${numSlots.toFixed(8)} + vec2(1.-vUv.x, vUv.y)/${numSlots.toFixed(8)} ); + // gl_FragColor.r = 1.; // gl_FragColor.a = 1.; + if (gl_FragColor.a < ${alphaTest}) { discard; } + gl_FragColor.a = 1.; } `, @@ -302,8 +377,10 @@ class SpriteAnimation360Mesh extends THREE.Mesh { vec2(x, -y)/${numSlots.toFixed(8)} + vec2(1.-vUv.x, vUv.y)/${numSlots.toFixed(8)} ); + // gl_FragColor.r = 1.; // gl_FragColor.a = 1.; + if (gl_FragColor.a < ${alphaTest}) { discard; } @@ -332,17 +409,17 @@ class SpriteAvatarMesh extends THREE.Mesh { const avatarMegaSpriteMaterial = new WebaverseShaderMaterial({ uniforms: { uTex: { - type: 't', + // type: 't', value: tex, needsUpdate: true, }, uTime: { - type: 'f', + // type: 'f', value: 0, needsUpdate: true, }, uY: { - type: 'f', + // type: 'f', value: 0, needsUpdate: true, }, @@ -440,8 +517,10 @@ class SpriteAvatarMesh extends THREE.Mesh { vec2(x, -y)/${numSlots.toFixed(8)} + vec2(1.-vUv.x, vUv.y)/${numSlots.toFixed(8)} ); + // gl_FragColor.r = 1.; // gl_FragColor.a = 1.; + if (gl_FragColor.a < ${alphaTest}) { discard; } @@ -479,60 +558,9 @@ class SpriteAvatarMesh extends THREE.Mesh { return false; } } - update(timestamp, timeDiff, { - avatar, - camera, - }) { + update(timestamp, timeDiff, avatar, camera) { const velocityScaleFactor = 10; // because avatars multiply velocity by 0.1 - if (preview) { - for (const planeSpriteMesh of planeSpriteMeshes) { - const {duration} = planeSpriteMesh.spriteSpec; - const uTime = (timestamp/1000 % duration) / duration; - [planeSpriteMesh.material, planeSpriteMesh.customPostMaterial].forEach(material => { - if (material?.uniforms) { - material.uniforms.uTime.value = uTime; - material.uniforms.uTime.needsUpdate = true; - } - }); - } - - for (const spriteAvatarMesh of spriteAvatarMeshes) { - const {duration} = spriteAvatarMesh.spriteSpec; - const uTime = (timestamp/1000 % duration) / duration; - - { - localQuaternion - .setFromRotationMatrix( - localMatrix.lookAt( - spriteAvatarMesh.getWorldPosition(localVector), - camera.position, - localVector2.set(0, 1, 0) - ) - ) - // .premultiply(app.quaternion.clone().invert()); - localEuler.setFromQuaternion(localQuaternion, 'YXZ'); - localEuler.x = 0; - localEuler.z = 0; - spriteAvatarMesh.quaternion.setFromEuler(localEuler); - spriteAvatarMesh.updateMatrixWorld(); - } - - [ - spriteAvatarMesh.material, - spriteAvatarMesh.customPostMaterial, - ].forEach(material => { - if (material?.uniforms) { - material.uniforms.uTime.value = uTime; - material.uniforms.uTime.needsUpdate = true; - - material.uniforms.uY.value = mod(localEuler.y + Math.PI*2/numAngles/2, Math.PI*2) / (Math.PI*2); - material.uniforms.uY.needsUpdate = true; - } - }); - } - } - // matrix transform this.position.copy(avatar.inputs.hmd.position); this.position.y -= avatar.height; @@ -808,11 +836,15 @@ const getSpriteSpecs = () => { .add(new THREE.Vector3(0, 0, -distance).applyEuler(euler)); camera2.lookAt(new THREE.Vector3(0, localRig.height*cameraHeightFactor, positionOffset)); camera2.updateMatrixWorld(); + + // console.log('update walk position offset', positionOffset, camera2.position.toArray().join(',')); localRig.inputs.hmd.position.set(0, localRig.height, positionOffset); localRig.inputs.hmd.updateMatrixWorld(); - + localRig.update(timestamp, timeDiffMs); + + // globalThis.localRig = localRig; }, }; }, @@ -1487,7 +1519,27 @@ class AvatarSpriteDepthMaterial extends THREE.MeshNormalMaterial { } } -export const renderSpriteImages = avatarRenderer => { +const _waitForKey = async () => { + const p = makePromise(); + const keydown = e => { + if (e.which === 8) { // backspace + p.accept(); + } + }; + window.addEventListener('keydown', keydown); + await p; + window.removeEventListener('keydown', keydown); +}; + +export const renderSpriteImages = async (arrayBuffer, srcUrl) => { + const avatarRenderer = new AvatarRenderer({ + arrayBuffer, + srcUrl, + camera: camera2, + quality: maxAvatarQuality, + }); + await avatarRenderer.waitForLoad(); + const localRig = new Avatar(avatarRenderer, { fingers: true, hair: true, @@ -1500,18 +1552,22 @@ export const renderSpriteImages = avatarRenderer => { localRig.setTopEnabled(false); localRig.setBottomEnabled(false); localRig.faceposes.push({ - emotion: "emotion-2", + emotion: 'emotion-2', value: 1, }); + + if (preview) { + _ensureScheduleGlobalUpdate(); + } const model = avatarRenderer.scene; - model.traverse(o => { + /* model.traverse(o => { if (o.isMesh) { o.frustumCulled = false; } - }); + }); */ - const skeleton = (() => { + /* const skeleton = (() => { let skeleton = null; model.traverse(o => { if (skeleton === null && o.isSkinnedMesh) { @@ -1519,10 +1575,12 @@ export const renderSpriteImages = avatarRenderer => { } }); return skeleton; - })(); - const rootBone = skeleton.bones.find(b => b.name === 'Root'); + })(); */ + // const rootBone = skeleton.bones.find(b => b.name === 'Root'); + // console.log('got skeleton bones', rootBone, skeleton.bones.map(b => b.name)); - const {renderer, scene} = metaversefile.useInternals(); + // const {renderer, scene} = metaversefile.useInternals(); + const renderer = getRenderer(); const pixelRatio = renderer.getPixelRatio(); const _renderSpriteFrame = () => { const oldParent = model.parent; @@ -1555,7 +1613,8 @@ export const renderSpriteImages = avatarRenderer => { let canvasIndex2 = 0; const spriteImages = []; // console.time('render'); - for (const spriteSpec of spriteSpecs) { + for (let i = 0 ; i < spriteSpecs.length; i++) { + const spriteSpec = spriteSpecs[i]; const {name, duration} = spriteSpec; // console.log('spritesheet', name); @@ -1564,6 +1623,15 @@ export const renderSpriteImages = avatarRenderer => { canvas.width = size; canvas.height = size; const ctx = canvas.getContext('2d'); + document.body.appendChild(canvas); + canvas.style.cssText = `\ + position: absolute; + top: 0; + left: 0; + width: 512px; + height: 512px; + z-index: 1; + `; let tex; if (preview) { @@ -1578,9 +1646,7 @@ export const renderSpriteImages = avatarRenderer => { const timeDiff = 1000/60; // 60 FPS // console.log('compute time diff', timeDiff); let angleIndex = 0; - for (let angle = 0; angle < Math.PI*2; angle += Math.PI*2/numAngles) { - // console.log('angle', angle/(Math.PI*2)*360); - + for (let angle = 0; angle < Math.PI*2; angle += Math.PI*2/numAngles) { const durationS = duration * 1000; const _getCurrentFrame = timestamp => { const result = Math.min(Math.floor(timestamp / durationS * numFrames), numFrames); @@ -1606,7 +1672,7 @@ export const renderSpriteImages = avatarRenderer => { } } } - const initialPositionOffset = localRig.inputs.hmd.position.z; + // const initialPositionOffset = localRig.inputs.hmd.position.z; spriteGenerator.reset && spriteGenerator.reset(); @@ -1620,17 +1686,6 @@ export const renderSpriteImages = avatarRenderer => { _renderSpriteFrame(); - if (preview) { - const positionOffset = localRig.inputs.hmd.position.z; - rootBone.position.set(0, 0, positionOffset - initialPositionOffset); - rootBone.updateMatrixWorld(); - - cameraMesh.position.copy(camera2.position); - cameraMesh.position.z -= initialPositionOffset; - cameraMesh.quaternion.copy(camera2.quaternion); - cameraMesh.updateMatrixWorld(); - } - const x = angleIndex % numSlots; const y = (angleIndex - x) / numSlots; ctx.drawImage( @@ -1642,7 +1697,23 @@ export const renderSpriteImages = avatarRenderer => { tex.needsUpdate = true; } - // await _timeout(50); + if (preview && i > 0) { + // const angleDegrees = angle/(Math.PI*2)*360; + // console.log('frame', spriteSpec, angleDegrees); + + scene.add(model); + + cameraMesh.position.copy(camera2.position); + // cameraMesh.position.z -= initialPositionOffset; + cameraMesh.quaternion.copy(camera2.quaternion); + cameraMesh.updateMatrixWorld(); + + // globalThis.model = model; + // globalThis.cameraMesh = cameraMesh; + + // pause for preview + await _waitForKey(); + } } if (preview) { @@ -1650,10 +1721,13 @@ export const renderSpriteImages = avatarRenderer => { angleIndex: startAngleIndex, }); planeSpriteMesh.position.set(-canvasIndex*worldSize, 2, -canvasIndex2*worldSize); - planeSpriteMesh.updateMatrixWorld(); planeSpriteMesh.spriteSpec = spriteSpec; scene.add(planeSpriteMesh); + planeSpriteMesh.updateMatrixWorld(); + planeSpriteMesh.frustumCulled = false; planeSpriteMeshes.push(planeSpriteMesh); + + console.log('add plane sprite mesh', planeSpriteMesh); } spriteGenerator.cleanup && spriteGenerator.cleanup(); @@ -1668,9 +1742,10 @@ export const renderSpriteImages = avatarRenderer => { 0, -canvasIndex2*worldSize, ); - spriteAvatarMesh.updateMatrixWorld(); spriteAvatarMesh.spriteSpec = spriteSpec; scene.add(spriteAvatarMesh); + spriteAvatarMesh.updateMatrixWorld(); + spriteAvatarMesh.frustumCulled = false; spriteAvatarMeshes.push(spriteAvatarMesh); } @@ -1691,7 +1766,7 @@ export const createSpriteAvatarMeshFromTextures = spriteImages => { spriteAvatarMesh.frustumCulled = false; return spriteAvatarMesh; }; -export const createSpriteAvatarMesh = skinnedVrm => { - let spriteImages = renderSpriteImages(skinnedVrm); +/* export const createSpriteAvatarMesh = skinnedVrm => { + let spriteImages = renderSpriteImages(skinnedVrm); // XXX make this non-async return createSpriteAvatarMeshFromTextures(spriteImages); -}; \ No newline at end of file +}; */ \ No newline at end of file From 97699d5260c1c2ba582b8f1a5965b0fcfc40b4e5 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Sun, 14 Aug 2022 03:36:49 -0400 Subject: [PATCH 120/125] Small import cleanup --- avatars/avatar-renderer.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/avatars/avatar-renderer.js b/avatars/avatar-renderer.js index 708b75a96b..355f173b51 100644 --- a/avatars/avatar-renderer.js +++ b/avatars/avatar-renderer.js @@ -7,8 +7,8 @@ import * as avatarCruncher from '../avatar-cruncher.js'; import * as avatarSpriter from '../avatar-spriter.js'; import offscreenEngineManager from '../offscreen-engine-manager.js'; import loaders from '../loaders.js'; -import {WebaverseShaderMaterial} from '../materials.js'; import {camera} from '../renderer.js'; +import {WebaverseShaderMaterial} from '../materials.js'; // import exporters from '../exporters.js'; import {abortError} from '../lock-manager.js'; import {/*defaultAvatarQuality,*/ minAvatarQuality, maxAvatarQuality} from '../constants.js'; From 6ce08694ba7970a1f74dbab01100a6cf6decbb6b Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Sun, 14 Aug 2022 03:37:48 -0400 Subject: [PATCH 121/125] Major avatar spriter debugging --- avatars/avatar-renderer.js | 72 ++++++++++++++++++-------------------- avatars/avatars.js | 29 +++------------ 2 files changed, 39 insertions(+), 62 deletions(-) diff --git a/avatars/avatar-renderer.js b/avatars/avatar-renderer.js index 355f173b51..86042ba9be 100644 --- a/avatars/avatar-renderer.js +++ b/avatars/avatar-renderer.js @@ -20,7 +20,9 @@ const localVector2 = new THREE.Vector3(); const localQuaternion = new THREE.Quaternion(); const localEuler = new THREE.Euler(); const localMatrix = new THREE.Matrix4(); +const localMatrix2 = new THREE.Matrix4(); const localSphere = new THREE.Sphere(); +const localFrustum = new THREE.Frustum(); const greenColor = new THREE.Color(0x43a047); @@ -48,6 +50,7 @@ const avatarPlaceholderTexture = new THREE.Texture(); avatarPlaceholderTexture.needsUpdate = true; })(); const _makeAvatarPlaceholderMesh = (() => { + // geometry const planeGeometry = new THREE.PlaneBufferGeometry(0.2, 0.2); { const angles = new Float32Array(planeGeometry.attributes.position.count).fill(-100); @@ -69,6 +72,8 @@ const _makeAvatarPlaceholderMesh = (() => { planeGeometry, ringGeometry, ]); + + // material const material = new WebaverseShaderMaterial({ uniforms: { uTime: { @@ -168,6 +173,8 @@ const _makeAvatarPlaceholderMesh = (() => { alphaToCoverage: true, transparent: true, }); + + // make fn return () => { const mesh = new THREE.Mesh(geometry, material); let startTime = 0; @@ -175,7 +182,7 @@ const _makeAvatarPlaceholderMesh = (() => { mesh.start = () => { startTime = performance.now(); }; - mesh.update = (timestamp) => { + mesh.update = timestamp => { material.uniforms.uTime.value = ((timestamp - startTime) / animationTime) % 1; material.uniforms.uTime.needsUpdate = true; }; @@ -313,24 +320,7 @@ const _bindSkeleton = (dstModel, srcObject) => { } }); }; -// const updateEvent = new MessageEvent('update'); -/* const _getMergedBoundingBox = o => { - const box = new THREE.Box3(); - o.updateMatrixWorld(); - o.traverse(o => { - if (o.isMesh) { - if (!o.geometry.boundingBox) { - debugger; - } - if (!o.geometry.boundingSphere) { - debugger; - } - box.expandByObject(o); - } - }); - return box; -}; */ const _getMergedBoundingSphere = o => { const sphere = new THREE.Sphere(); o.updateMatrixWorld(); @@ -349,6 +339,7 @@ export class AvatarRenderer /* extends EventTarget */ { constructor({ arrayBuffer, srcUrl, + camera, quality = defaultAvatarQuality, } = {}) { // super(); @@ -357,6 +348,7 @@ export class AvatarRenderer /* extends EventTarget */ { this.arrayBuffer = arrayBuffer; this.srcUrl = srcUrl; + this.camera = camera; this.quality = quality; // @@ -402,7 +394,7 @@ export class AvatarRenderer /* extends EventTarget */ { this.setQuality(quality); } - createSpriteAvatarMesh([{ + createSpriteAvatarMesh([{ // XXX for debugging; this should be done off-thread arrayBuffer, srcUrl, }], {signal}) { @@ -411,14 +403,8 @@ export class AvatarRenderer /* extends EventTarget */ { arrayBuffer, srcUrl, }); */ - const avatarRenderer = new AvatarRenderer({ - arrayBuffer, - srcUrl, - quality: maxAvatarQuality, - }); - await avatarRenderer.waitForLoad(); - const textureCanvases = avatarSpriter.renderSpriteImages(avatarRenderer); + const textureCanvases = await avatarSpriter.renderSpriteImages(arrayBuffer, srcUrl); const textureImages = await Promise.all(textureCanvases.map(canvas => { return createImageBitmap(canvas, { imageOrientation: 'flipY', @@ -450,7 +436,7 @@ export class AvatarRenderer /* extends EventTarget */ { }); await avatarRenderer.waitForLoad(); - const textureCanvases = avatarSpriter.renderSpriteImages(avatarRenderer); + const textureCanvases = await avatarSpriter.renderSpriteImages(avatarRenderer); const textureImages = await Promise.all(textureCanvases.map(canvas => { return createImageBitmap(canvas); })); @@ -852,7 +838,24 @@ export class AvatarRenderer /* extends EventTarget */ { this.setQuality(newQuality); } } - updateAvatar(timestamp, timeDiff, avatar) { + update(timestamp, timeDiff, avatar) { + localMatrix.makeTranslation( + avatar.inputs.hmd.position.x, + avatar.inputs.hmd.position.y - this.height / 2, + avatar.inputs.hmd.position.z + ); + + // XXX this can be optimized by initializing the frustum only once per frame and passing it in + const projScreenMatrix = localMatrix2.multiplyMatrices( + this.camera.projectionMatrix, + this.camera.matrixWorldInverse + ); + localFrustum.setFromProjectionMatrix(projScreenMatrix); + + this.#updateAvatar(timestamp, timeDiff, avatar); + this.#updateFrustumCull(localMatrix, localFrustum); + } + #updateAvatar(timestamp, timeDiff, avatar) { // update placeholder { this.placeholderMesh.position.copy(avatar.inputs.hmd.position); @@ -861,7 +864,7 @@ export class AvatarRenderer /* extends EventTarget */ { localQuaternion .setFromRotationMatrix( localMatrix.lookAt( - camera.position, + this.camera.position, this.placeholderMesh.position, localVector2.set(0, 1, 0) ) @@ -877,16 +880,11 @@ export class AvatarRenderer /* extends EventTarget */ { // update avatar const currentMesh = this.#getCurrentMesh(); - if (currentMesh) { - if (currentMesh === this.spriteAvatarMesh) { - this.spriteAvatarMesh.update(timestamp, timeDiff, { - avatar, - camera, - }); - } + if (currentMesh && currentMesh === this.spriteAvatarMesh) { + this.spriteAvatarMesh.update(timestamp, timeDiff, avatar, this.camera); } } - updateFrustumCull(matrix, frustum) { + #updateFrustumCull(matrix, frustum) { const currentMesh = this.#getCurrentMesh(); if (currentMesh) { const boundingSphere = localSphere.copy(currentMesh.boundingSphere) diff --git a/avatars/avatars.js b/avatars/avatars.js index 0868de39c1..669bd6b5c5 100644 --- a/avatars/avatars.js +++ b/avatars/avatars.js @@ -24,7 +24,7 @@ import { // avatarInterpolationNumFrames, } from '../constants.js'; // import {FixedTimeStep} from '../interpolants.js'; -import {AvatarRenderer} from './avatar-renderer.js'; +// import {AvatarRenderer} from './avatar-renderer.js'; // import * as sceneCruncher from '../scene-cruncher.js'; import { idleFactorSpeed, @@ -58,7 +58,6 @@ import Looker from './Looker.js' import * as wind from './simulation/wind.js'; - const localVector = new THREE.Vector3(); const localVector2 = new THREE.Vector3(); const localVector3 = new THREE.Vector3(); @@ -319,8 +318,8 @@ const _makeDebugMesh = (avatar) => { mesh.setFromAvatar = avatar => { for (const k in avatar.modelBoneOutputs) { const modelBone = avatar.modelBoneOutputs[k]; + const meshBone = modelBoneToMeshBoneMap.get(modelBone); - (modelBone.parent ? modelBone.parent.matrixWorld : @@ -1940,28 +1939,8 @@ class Avatar { this.emoter.update(now); this.options.visemes && _updateVisemes(); - - const _updateRendererFrustumCull = () => { - const localMatrix = new THREE.Matrix4(); - const localMatrix2 = new THREE.Matrix4(); - - localMatrix.makeTranslation( - this.inputs.hmd.position.x, - this.inputs.hmd.position.y - this.height / 2, - this.inputs.hmd.position.z - ); - - // XXX this can be optimized by initializing the frustum only once per frame and passing it in - const projScreenMatrix = localMatrix2.multiplyMatrices( - camera.projectionMatrix, - camera.matrixWorldInverse - ); - localFrustum.setFromProjectionMatrix(projScreenMatrix); - - this.avatarRenderer.updateAvatar(timestamp, timeDiff, this); - this.avatarRenderer.updateFrustumCull(localMatrix, localFrustum); - }; - _updateRendererFrustumCull(); + + this.avatarRenderer.update(timestamp, timeDiff, this); const debug = metaversefile.useDebug(); if (debug.enabled && !this.debugMesh) { From e7b206a9a7342aef42024088a672effd5129286d Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Sun, 14 Aug 2022 04:11:26 -0400 Subject: [PATCH 122/125] Avatar spriter disable preview mode --- avatar-spriter.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/avatar-spriter.js b/avatar-spriter.js index 6d257972ce..e7ef248cb2 100644 --- a/avatar-spriter.js +++ b/avatar-spriter.js @@ -12,7 +12,7 @@ import {mod, angleDifference, makePromise} from './util.js'; import {world} from './world.js'; import {maxAvatarQuality} from './constants.js'; -const preview = true; // whether to draw debug meshes +const preview = false; // whether to draw debug meshes const cameraGeometry = new CameraGeometry(); const cameraMaterial = new THREE.MeshBasicMaterial({ From b6f2be2c14bce3939d5fce711c297352c41233f8 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Sun, 14 Aug 2022 04:11:51 -0400 Subject: [PATCH 123/125] Replace avatar spriter wait for key with wait for idle --- avatar-spriter.js | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/avatar-spriter.js b/avatar-spriter.js index e7ef248cb2..682ba7fd0b 100644 --- a/avatar-spriter.js +++ b/avatar-spriter.js @@ -1519,7 +1519,7 @@ class AvatarSpriteDepthMaterial extends THREE.MeshNormalMaterial { } } -const _waitForKey = async () => { +/* const _waitForKey = async () => { const p = makePromise(); const keydown = e => { if (e.which === 8) { // backspace @@ -1529,7 +1529,11 @@ const _waitForKey = async () => { window.addEventListener('keydown', keydown); await p; window.removeEventListener('keydown', keydown); -}; +}; */ +const frameTimeDiff = 1000 / 60; // 60 FPS +const _waitForIdle = () => new Promise(resolve => { + requestIdleCallback(resolve); +}); export const renderSpriteImages = async (arrayBuffer, srcUrl) => { const avatarRenderer = new AvatarRenderer({ @@ -1642,8 +1646,6 @@ export const renderSpriteImages = async (arrayBuffer, srcUrl) => { // console.log('generate sprite', name); - // const timeDiff = duration * 1000 / numFrames; - const timeDiff = 1000/60; // 60 FPS // console.log('compute time diff', timeDiff); let angleIndex = 0; for (let angle = 0; angle < Math.PI*2; angle += Math.PI*2/numAngles) { @@ -1667,8 +1669,8 @@ export const renderSpriteImages = async (arrayBuffer, srcUrl) => { const startNow = now; for (let j = 0; j < numFrames; j++) { while (_getCurrentFrame(now - startNow) < j) { - spriteGenerator.update(now, timeDiff); - now += timeDiff; + spriteGenerator.update(now, frameTimeDiff); + now += frameTimeDiff; } } } @@ -1680,8 +1682,8 @@ export const renderSpriteImages = async (arrayBuffer, srcUrl) => { const startNow = now; for (let j = 0; j < numFrames; j++, angleIndex++) { while (_getCurrentFrame(now - startNow) < j) { - spriteGenerator.update(now, timeDiff); - now += timeDiff; + spriteGenerator.update(now, frameTimeDiff); + now += frameTimeDiff; } _renderSpriteFrame(); @@ -1695,9 +1697,7 @@ export const renderSpriteImages = async (arrayBuffer, srcUrl) => { ); if (preview) { tex.needsUpdate = true; - } - if (preview && i > 0) { // const angleDegrees = angle/(Math.PI*2)*360; // console.log('frame', spriteSpec, angleDegrees); @@ -1712,7 +1712,8 @@ export const renderSpriteImages = async (arrayBuffer, srcUrl) => { // globalThis.cameraMesh = cameraMesh; // pause for preview - await _waitForKey(); + // await _waitForKey(); + await _waitForIdle(); } } From f99f089ea9a3dd9dcabde28323ab5fed63e9b05e Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Sun, 14 Aug 2022 04:12:08 -0400 Subject: [PATCH 124/125] Avatar spirter do not latch canvases to document --- avatar-spriter.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/avatar-spriter.js b/avatar-spriter.js index 682ba7fd0b..7f58735150 100644 --- a/avatar-spriter.js +++ b/avatar-spriter.js @@ -1627,7 +1627,7 @@ export const renderSpriteImages = async (arrayBuffer, srcUrl) => { canvas.width = size; canvas.height = size; const ctx = canvas.getContext('2d'); - document.body.appendChild(canvas); + /* document.body.appendChild(canvas); canvas.style.cssText = `\ position: absolute; top: 0; @@ -1635,7 +1635,7 @@ export const renderSpriteImages = async (arrayBuffer, srcUrl) => { width: 512px; height: 512px; z-index: 1; - `; + `; */ let tex; if (preview) { From a7909df3ef377bd5d8ed1b3f9e7c513657525e21 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Sun, 14 Aug 2022 04:15:03 -0400 Subject: [PATCH 125/125] Avatar renderer sprite optimizer run off main thread --- avatars/avatar-renderer.js | 37 +++++-------------------------------- 1 file changed, 5 insertions(+), 32 deletions(-) diff --git a/avatars/avatar-renderer.js b/avatars/avatar-renderer.js index 86042ba9be..040b1bcaa4 100644 --- a/avatars/avatar-renderer.js +++ b/avatars/avatar-renderer.js @@ -394,51 +394,24 @@ export class AvatarRenderer /* extends EventTarget */ { this.setQuality(quality); } - createSpriteAvatarMesh([{ // XXX for debugging; this should be done off-thread - arrayBuffer, - srcUrl, - }], {signal}) { - return (async () => { - /* console.log('avatar renderer 1', { - arrayBuffer, - srcUrl, - }); */ - - const textureCanvases = await avatarSpriter.renderSpriteImages(arrayBuffer, srcUrl); - const textureImages = await Promise.all(textureCanvases.map(canvas => { - return createImageBitmap(canvas, { - imageOrientation: 'flipY', - }); - })); - return { - textureImages, - }; - })(); - + createSpriteAvatarMesh() { if (!this.createSpriteAvatarMeshFn) { this.createSpriteAvatarMeshFn = offscreenEngineManager.createFunction([ `\ import * as THREE from 'three'; import * as avatarSpriter from './avatar-spriter.js'; - import loaders from './loaders.js'; - import {maxAvatarQuality} from './constants.js'; - import {AvatarRenderer} from './avatars/avatar-renderer.js'; `, async function({ arrayBuffer, srcUrl, }) { - const avatarRenderer = new AvatarRenderer({ - arrayBuffer, - srcUrl, - quality: maxAvatarQuality, - }); - await avatarRenderer.waitForLoad(); - const textureCanvases = await avatarSpriter.renderSpriteImages(avatarRenderer); + const textureCanvases = await avatarSpriter.renderSpriteImages(arrayBuffer, srcUrl); const textureImages = await Promise.all(textureCanvases.map(canvas => { - return createImageBitmap(canvas); + return createImageBitmap(canvas, { + imageOrientation: 'flipY', + }); })); return { textureImages,