added manyfold templates
This commit is contained in:
		
							parent
							
								
									28e4082844
								
							
						
					
					
						commit
						3422005b82
					
				
					 20 changed files with 46988 additions and 1101 deletions
				
			
		
							
								
								
									
										2
									
								
								.gitignore
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.gitignore
									
										
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -1,3 +1,3 @@
 | 
			
		|||
node_modules
 | 
			
		||||
manyfold/usr
 | 
			
		||||
manyfold/.env
 | 
			
		||||
manyfold/usr/public/webxr/node_modules
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										3
									
								
								.gitmodules
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								.gitmodules
									
										
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -1,3 +0,0 @@
 | 
			
		|||
[submodule "godot"]
 | 
			
		||||
	path = clients/godot
 | 
			
		||||
	url = ../xrforge-godot.git
 | 
			
		||||
| 
						 | 
				
			
			@ -1 +0,0 @@
 | 
			
		|||
Subproject commit 79e8669ca609782aa6fa9eeed259d9621697f460
 | 
			
		||||
| 
						 | 
				
			
			@ -1 +0,0 @@
 | 
			
		|||
../manyfold/usr/src/app/public/webxr
 | 
			
		||||
							
								
								
									
										86
									
								
								manyfold/usr/src/app/app/components/preview_frame.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										86
									
								
								manyfold/usr/src/app/app/components/preview_frame.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,86 @@
 | 
			
		|||
# frozen_string_literal: true
 | 
			
		||||
 | 
			
		||||
class Components::PreviewFrame < Components::Base
 | 
			
		||||
  include Phlex::Rails::Helpers::ImageTag
 | 
			
		||||
 | 
			
		||||
  register_value_helper :policy_scope
 | 
			
		||||
 | 
			
		||||
  def initialize(object:)
 | 
			
		||||
    @object = object
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def before_template
 | 
			
		||||
    @file = @object.is_a?(Model) ? @object.preview_file : policy_scope(@object.models).first&.preview_file
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def view_template
 | 
			
		||||
    a href: "/webxr/dist/xrforge.html?#{model_model_file_path(@file.model, @file, format: @file.extension)}", target:"_blank" do
 | 
			
		||||
      if @file
 | 
			
		||||
        local
 | 
			
		||||
      elsif @object.remote?
 | 
			
		||||
        remote
 | 
			
		||||
      else
 | 
			
		||||
        empty
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  private
 | 
			
		||||
 | 
			
		||||
  def local
 | 
			
		||||
    if @file.is_image?
 | 
			
		||||
      image model_model_file_path(@file.model, @file, format: @file.extension, derivative: "preview"), @file.name
 | 
			
		||||
    elsif @file.is_renderable?
 | 
			
		||||
      div class: "card-img-top #{"sensitive" if needs_hiding?}" do
 | 
			
		||||
        Renderer file: @file
 | 
			
		||||
      end
 | 
			
		||||
    else
 | 
			
		||||
      empty
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def remote
 | 
			
		||||
    preview_data = @object.federails_actor&.extensions&.dig("preview")
 | 
			
		||||
    case preview_data&.dig("type")
 | 
			
		||||
    when "Image"
 | 
			
		||||
      image preview_data["url"], preview_data["summary"]
 | 
			
		||||
    when "Document"
 | 
			
		||||
      div class: "card-img-top #{"sensitive" if needs_hiding?}" do
 | 
			
		||||
        iframe(
 | 
			
		||||
          scrolling: "no",
 | 
			
		||||
          srcdoc: safe([
 | 
			
		||||
            "<html><body style=\"margin: 0; padding: 0; aspect-ratio: 1\">",
 | 
			
		||||
            preview_data["content"],
 | 
			
		||||
            "</body></html>"
 | 
			
		||||
          ].join),
 | 
			
		||||
          title: preview_data["summary"]
 | 
			
		||||
        )
 | 
			
		||||
      end
 | 
			
		||||
    else
 | 
			
		||||
      empty
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def needs_hiding?
 | 
			
		||||
    return false unless current_user.nil? || current_user.sensitive_content_handling.present?
 | 
			
		||||
    case @object.class
 | 
			
		||||
    when Model
 | 
			
		||||
      @object.sensitive
 | 
			
		||||
    when Collection
 | 
			
		||||
      @file.model.sensitive
 | 
			
		||||
    else
 | 
			
		||||
      false
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def empty
 | 
			
		||||
    div class: "preview-empty" do
 | 
			
		||||
      p { t("components.model_card.no_preview") }
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def image(url, alt)
 | 
			
		||||
    div class: "card-img-top card-img-top-background", style: "background-image: url(#{url})"
 | 
			
		||||
    image_tag url, class: "card-img-top image-preview #{"sensitive" if needs_hiding?}", alt: alt, style: "position:absolute; top:0"
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
							
								
								
									
										44
									
								
								manyfold/usr/src/app/app/views/layouts/application.html.erb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								manyfold/usr/src/app/app/views/layouts/application.html.erb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,44 @@
 | 
			
		|||
<!DOCTYPE html>
 | 
			
		||||
<html lang="<%= I18n.locale %>" data-controller="i18n">
 | 
			
		||||
  <head>
 | 
			
		||||
    <title><%= @title || site_name %></title>
 | 
			
		||||
    <meta name="viewport" content="width=device-width,initial-scale=1">
 | 
			
		||||
    <%= csrf_meta_tags %>
 | 
			
		||||
    <%= tag.meta name: "csp-nonce", content: content_security_policy_nonce if content_security_policy_nonce %>
 | 
			
		||||
    <%= favicon_link_tag "roundel.svg" %>
 | 
			
		||||
    <%= tag.link rel: "apple-touch-icon", href: asset_path("square-180.png") %>
 | 
			
		||||
    <%= tag.meta name: "apple-mobile-web-app-title", content: site_name %>
 | 
			
		||||
    <%= javascript_include_tag "application", nonce: true, defer: true %>
 | 
			
		||||
    <%= stylesheet_link_tag "themes/#{SiteSettings.theme}", nonce: true %>
 | 
			
		||||
    <%= stylesheet_link_tag "/public/assets/xrforge.css" %>
 | 
			
		||||
    <%= turbo_refreshes_with method: :morph, scroll: :preserve %>
 | 
			
		||||
    <%= tag.meta name: "robots", content: @indexing_directives if @indexing_directives.presence %>
 | 
			
		||||
    <%= yield :head %>
 | 
			
		||||
  </head>
 | 
			
		||||
 | 
			
		||||
  <body>
 | 
			
		||||
    <%= skip_link "content", t(".skip_to_content") %>
 | 
			
		||||
    <%= render "application/navbar" %>
 | 
			
		||||
    <%= yield :breadcrumbs %>
 | 
			
		||||
    <main class="container-fluid" id="content">
 | 
			
		||||
      <div>
 | 
			
		||||
        <% if notice %>
 | 
			
		||||
          <p class="alert alert-info">
 | 
			
		||||
            <%= icon "info-circle-fill", t(".alert.info") %>
 | 
			
		||||
            <%= notice %>
 | 
			
		||||
          </p>
 | 
			
		||||
        <% end %>
 | 
			
		||||
        <% if alert %>
 | 
			
		||||
          <p class="alert alert-danger">
 | 
			
		||||
            <%= icon "x-octagon-fill", t(".alert.danger") %>
 | 
			
		||||
            <%= alert %>
 | 
			
		||||
          </p>
 | 
			
		||||
        <% end %>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="pt-3">
 | 
			
		||||
        <%= yield %>
 | 
			
		||||
      </div>
 | 
			
		||||
    </main>
 | 
			
		||||
    <%= render "application/footer" %>
 | 
			
		||||
  </body>
 | 
			
		||||
</html>
 | 
			
		||||
							
								
								
									
										7
									
								
								manyfold/usr/src/app/config/initializers/cors.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								manyfold/usr/src/app/config/initializers/cors.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,7 @@
 | 
			
		|||
# always allow cors so remote XR viewers can load content 
 | 
			
		||||
Rails.application.config.middleware.insert_after Rack::Head, Rack::Cors do
 | 
			
		||||
  allow do
 | 
			
		||||
    origins '*'
 | 
			
		||||
    resource '*', headers: :any, methods: [:get, :options, :head]
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
							
								
								
									
										1
									
								
								manyfold/usr/src/app/public/assets/xrforge.css
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								manyfold/usr/src/app/public/assets/xrforge.css
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1 @@
 | 
			
		|||
a,div { border:1px solid red !important; color:yellow !important; }
 | 
			
		||||
							
								
								
									
										3
									
								
								manyfold/usr/src/app/public/viewer/index.html
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								manyfold/usr/src/app/public/viewer/index.html
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,3 @@
 | 
			
		|||
<script>
 | 
			
		||||
alert(document.location.search)
 | 
			
		||||
</script>
 | 
			
		||||
| 
						 | 
				
			
			@ -1,4 +1,4 @@
 | 
			
		|||
<!-- Saved from local source at 2025-10-03T15:03:53Z using monolith v2.10.1 -->
 | 
			
		||||
<!-- Saved from local source at 2025-10-22T15:01:16Z using monolith v2.10.1 -->
 | 
			
		||||
<!DOCTYPE html><html><head>
 | 
			
		||||
		<style type="text/css">
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,59 +0,0 @@
 | 
			
		|||
// viewer/plugin.xrforge.js
 | 
			
		||||
function init(widget2) {
 | 
			
		||||
  inferSource(widget2.src);
 | 
			
		||||
}
 | 
			
		||||
async function inferSource(src) {
 | 
			
		||||
  response = await fetch(src, {
 | 
			
		||||
    method: "HEAD"
 | 
			
		||||
  });
 | 
			
		||||
  if (!response.ok) {
 | 
			
		||||
    throw new Error(`HTTP error! status: ${response.status}`);
 | 
			
		||||
  }
 | 
			
		||||
  contentDisposition = response.headers.get("Content-Disposition");
 | 
			
		||||
  console.log(widget.src);
 | 
			
		||||
  widget.src = extractFilename(contentDisposition);
 | 
			
		||||
  console.log("detected: " + widget.src);
 | 
			
		||||
}
 | 
			
		||||
function extractFilename(contentDispositionHeader) {
 | 
			
		||||
  const utf8Match = contentDispositionHeader.match(/filename\*=(?:utf-8|UTF-8)''(.+?)(?:;|$)/i);
 | 
			
		||||
  if (utf8Match && utf8Match[1]) {
 | 
			
		||||
    return decodeURIComponent(utf8Match[1].trim());
 | 
			
		||||
  }
 | 
			
		||||
  const basicMatch = contentDispositionHeader.match(/filename="(.+?)"/i);
 | 
			
		||||
  if (basicMatch && basicMatch[1]) {
 | 
			
		||||
    return basicMatch[1].trim();
 | 
			
		||||
  }
 | 
			
		||||
  return null;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// viewer/index.js
 | 
			
		||||
var widget2 = new Proxy({
 | 
			
		||||
  backend: null,
 | 
			
		||||
  player: document.querySelector("#player"),
 | 
			
		||||
  src: document.location.search.substr(1),
 | 
			
		||||
  ext: {},
 | 
			
		||||
  init(opts) {
 | 
			
		||||
    for (var i in opts)
 | 
			
		||||
      this[i] = opts[i];
 | 
			
		||||
  },
 | 
			
		||||
  play() {
 | 
			
		||||
    player.setAttribute("gltf-model", `url(${widget2.src})`);
 | 
			
		||||
    document.querySelector("#btn_play").style.display = "none";
 | 
			
		||||
    let script = document.createElement("script");
 | 
			
		||||
    script.src = "https://aframe.io/releases/1.7.0/aframe.min.js";
 | 
			
		||||
    document.head.appendChild(script);
 | 
			
		||||
    script = document.createElement("script");
 | 
			
		||||
    script.src = "backend.xrforge.js";
 | 
			
		||||
    document.head.appendChild(script);
 | 
			
		||||
  }
 | 
			
		||||
}, {
 | 
			
		||||
  get(me, k) {
 | 
			
		||||
    return me[k];
 | 
			
		||||
  },
 | 
			
		||||
  set(me, k, v) {
 | 
			
		||||
    me[k] = v;
 | 
			
		||||
    return true;
 | 
			
		||||
  }
 | 
			
		||||
});
 | 
			
		||||
init(widget2);
 | 
			
		||||
document.querySelector("#btn_play").addEventListener("click", () => widget2.play());
 | 
			
		||||
							
								
								
									
										46845
									
								
								manyfold/usr/src/app/public/webxr/dist/xrforge/xrforge-r929vkvh.js
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										46845
									
								
								manyfold/usr/src/app/public/webxr/dist/xrforge/xrforge-r929vkvh.js
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| 
						 | 
				
			
			@ -1,93 +0,0 @@
 | 
			
		|||
<!DOCTYPE html>
 | 
			
		||||
<html>
 | 
			
		||||
	<head>
 | 
			
		||||
		<style type="text/css">
 | 
			
		||||
 | 
			
		||||
				body{ 
 | 
			
		||||
					background: #555; 
 | 
			
		||||
				  height: 100%;
 | 
			
		||||
				  margin: 0;
 | 
			
		||||
				  overflow: hidden;
 | 
			
		||||
				  padding: 0;
 | 
			
		||||
				  width: 100%;
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				img#btn_play:hover {
 | 
			
		||||
					opacity: 1.0;
 | 
			
		||||
				}
 | 
			
		||||
				img#btn_play {
 | 
			
		||||
					position: fixed;
 | 
			
		||||
					top: 50%;
 | 
			
		||||
					left: 50%;
 | 
			
		||||
          width:30%;
 | 
			
		||||
          max-width:400px;
 | 
			
		||||
					transform: translate(-50%,-50%);
 | 
			
		||||
					cursor: pointer;
 | 
			
		||||
					opacity: 0.6;
 | 
			
		||||
					transition: 0.3s;
 | 
			
		||||
					z-index: 999;
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
		</style>
 | 
			
		||||
	</head>
 | 
			
		||||
	<body>
 | 
			
		||||
 | 
			
		||||
	  <img id="btn_play" src="play.svg"/>
 | 
			
		||||
 | 
			
		||||
	  <a-scene>
 | 
			
		||||
	  	<a-entity id="player" animation-mixer_disabled gltf-model></a-entity>
 | 
			
		||||
	  </a-scene>
 | 
			
		||||
 | 
			
		||||
		<script type="module">
 | 
			
		||||
			import * as xrforge from './plugin.xrforge.js';
 | 
			
		||||
			import * as level0  from './xrf.level0.js';
 | 
			
		||||
 | 
			
		||||
			const widget = new Proxy({
 | 
			
		||||
 | 
			
		||||
				backend: null,
 | 
			
		||||
			  player:  document.querySelector("#player"),
 | 
			
		||||
			  src:     document.location.search.substr(1),
 | 
			
		||||
				ext:     {},
 | 
			
		||||
 | 
			
		||||
				init(opts){ 
 | 
			
		||||
					for( var i in opts) this[i] = opts[i]
 | 
			
		||||
				},
 | 
			
		||||
 | 
			
		||||
				play(){
 | 
			
		||||
     			// set URL
 | 
			
		||||
			    player.setAttribute("gltf-model", `url(${widget.src})` )
 | 
			
		||||
 | 
			
		||||
          document.querySelector("#btn_play").style.display = 'none'
 | 
			
		||||
 | 
			
		||||
			    let script = document.createElement("script")
 | 
			
		||||
			    script.src = "https://aframe.io/releases/1.7.0/aframe.min.js"
 | 
			
		||||
			    document.head.appendChild(script)
 | 
			
		||||
 | 
			
		||||
			    script = document.createElement("script")
 | 
			
		||||
			    script.src = "backend.xrforge.js"
 | 
			
		||||
			    document.head.appendChild(script)
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
			},
 | 
			
		||||
			{
 | 
			
		||||
				get(me,k){ return me[k] },
 | 
			
		||||
 | 
			
		||||
				set(me,k,v){ 
 | 
			
		||||
					me[k] = v
 | 
			
		||||
					return true 
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
			})
 | 
			
		||||
 | 
			
		||||
			xrforge.init(widget)
 | 
			
		||||
			level0.init(widget)
 | 
			
		||||
 | 
			
		||||
			document.querySelector("#btn_play").addEventListener("click", () => widget.play() )
 | 
			
		||||
 | 
			
		||||
			//document.body.style.background = `url(${src.replace( /\.(glb|usdz|gltf|obj|col)$/ , ".png")})`
 | 
			
		||||
           	
 | 
			
		||||
 | 
			
		||||
		</script>
 | 
			
		||||
 | 
			
		||||
	</body>
 | 
			
		||||
</html>
 | 
			
		||||
| 
						 | 
				
			
			@ -1,11 +0,0 @@
 | 
			
		|||
 | 
			
		||||
import * as level0  from 'xrf/level0';
 | 
			
		||||
 | 
			
		||||
function init(){
 | 
			
		||||
  let file = document.location.search.substr(1)
 | 
			
		||||
  import('aframe') // window.AFRAME will be exposed
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export {init}
 | 
			
		||||
//level0.init(widget)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1,43 +0,0 @@
 | 
			
		|||
<?xml version="1.0" encoding="iso-8859-1"?>
 | 
			
		||||
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
 | 
			
		||||
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
 | 
			
		||||
	 viewBox="0 0 58.752 58.752" style="enable-background:new 0 0 58.752 58.752;" xml:space="preserve">
 | 
			
		||||
<g>
 | 
			
		||||
	<path stroke="#CCC" stroke-opacity="0.5" fill="white" d="M52.524,23.925L12.507,0.824c-1.907-1.1-4.376-1.097-6.276,0C4.293,1.94,3.088,4.025,3.088,6.264v46.205
 | 
			
		||||
		c0,2.24,1.204,4.325,3.131,5.435c0.953,0.555,2.042,0.848,3.149,0.848c1.104,0,2.192-0.292,3.141-0.843l40.017-23.103
 | 
			
		||||
		c1.936-1.119,3.138-3.203,3.138-5.439C55.663,27.134,54.462,25.05,52.524,23.925z M49.524,29.612L9.504,52.716
 | 
			
		||||
		c-0.082,0.047-0.18,0.052-0.279-0.005c-0.084-0.049-0.137-0.142-0.137-0.242V6.263c0-0.1,0.052-0.192,0.14-0.243
 | 
			
		||||
		c0.042-0.025,0.09-0.038,0.139-0.038c0.051,0,0.099,0.013,0.142,0.038l40.01,23.098c0.089,0.052,0.145,0.147,0.145,0.249
 | 
			
		||||
		C49.663,29.47,49.611,29.561,49.524,29.612z"/>
 | 
			
		||||
</g>
 | 
			
		||||
<g>
 | 
			
		||||
</g>
 | 
			
		||||
<g>
 | 
			
		||||
</g>
 | 
			
		||||
<g>
 | 
			
		||||
</g>
 | 
			
		||||
<g>
 | 
			
		||||
</g>
 | 
			
		||||
<g>
 | 
			
		||||
</g>
 | 
			
		||||
<g>
 | 
			
		||||
</g>
 | 
			
		||||
<g>
 | 
			
		||||
</g>
 | 
			
		||||
<g>
 | 
			
		||||
</g>
 | 
			
		||||
<g>
 | 
			
		||||
</g>
 | 
			
		||||
<g>
 | 
			
		||||
</g>
 | 
			
		||||
<g>
 | 
			
		||||
</g>
 | 
			
		||||
<g>
 | 
			
		||||
</g>
 | 
			
		||||
<g>
 | 
			
		||||
</g>
 | 
			
		||||
<g>
 | 
			
		||||
</g>
 | 
			
		||||
<g>
 | 
			
		||||
</g>
 | 
			
		||||
</svg>
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 1.2 KiB  | 
| 
						 | 
				
			
			@ -1,43 +0,0 @@
 | 
			
		|||
 | 
			
		||||
async function inferSource(src){
 | 
			
		||||
  let response = await fetch(src, {
 | 
			
		||||
    method: 'HEAD'
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  if (!response.ok) {
 | 
			
		||||
    throw new Error(`HTTP error! status: ${response.status}`);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // 1. Get the Content-Disposition header value
 | 
			
		||||
  let contentDisposition = response.headers.get('Content-Disposition');
 | 
			
		||||
  
 | 
			
		||||
  // 2. Process the value to extract the filename
 | 
			
		||||
  let file = extractFilename(contentDisposition)
 | 
			
		||||
  let srcParts = src.split("/")
 | 
			
		||||
  srcParts.pop()
 | 
			
		||||
  srcParts.push(file)
 | 
			
		||||
  return srcParts.join("/")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function extractFilename(contentDispositionHeader) {
 | 
			
		||||
  if( !contentDispositionHeader ) return ""
 | 
			
		||||
  // Check for the preferred 'filename*' (UTF-8 encoded)
 | 
			
		||||
  // This looks for 'filename*=' followed by the encoding and the filename
 | 
			
		||||
  const utf8Match = contentDispositionHeader.match(/filename\*=(?:utf-8|UTF-8)''(.+?)(?:;|$)/i);
 | 
			
		||||
  if (utf8Match && utf8Match[1]) {
 | 
			
		||||
    // The filename might be URL-encoded, so decode it
 | 
			
		||||
    // The value in your example is 'website.jpg' which is not encoded, 
 | 
			
		||||
    // but a proper implementation should decode.
 | 
			
		||||
    return decodeURIComponent(utf8Match[1].trim());
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // Fallback to the simpler 'filename'
 | 
			
		||||
  const basicMatch = contentDispositionHeader.match(/filename="(.+?)"/i);
 | 
			
		||||
  if (basicMatch && basicMatch[1]) {
 | 
			
		||||
    return basicMatch[1].trim();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return null;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export { inferSource };
 | 
			
		||||
							
								
								
									
										754
									
								
								manyfold/usr/src/app/public/webxr/package-lock.json
									
										
									
										generated
									
									
									
								
							
							
						
						
									
										754
									
								
								manyfold/usr/src/app/public/webxr/package-lock.json
									
										
									
										generated
									
									
									
								
							| 
						 | 
				
			
			@ -1,754 +0,0 @@
 | 
			
		|||
{
 | 
			
		||||
  "name": "webxr",
 | 
			
		||||
  "version": "1.0.0",
 | 
			
		||||
  "lockfileVersion": 3,
 | 
			
		||||
  "requires": true,
 | 
			
		||||
  "packages": {
 | 
			
		||||
    "": {
 | 
			
		||||
      "name": "webxr",
 | 
			
		||||
      "version": "1.0.0",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "aframe": "^1.7.1",
 | 
			
		||||
        "xrf": "^0.0.1"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "../../../xrfragment/xrf.js": {
 | 
			
		||||
      "name": "xrf",
 | 
			
		||||
      "version": "0.0.1",
 | 
			
		||||
      "extraneous": true,
 | 
			
		||||
      "license": "MIT"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@sindresorhus/is": {
 | 
			
		||||
      "version": "0.14.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz",
 | 
			
		||||
      "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==",
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=6"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@szmarczak/http-timer": {
 | 
			
		||||
      "version": "1.1.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz",
 | 
			
		||||
      "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==",
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "defer-to-connect": "^1.0.1"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=6"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/aframe": {
 | 
			
		||||
      "version": "1.7.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/aframe/-/aframe-1.7.1.tgz",
 | 
			
		||||
      "integrity": "sha512-dcc7PWI5z8pyJ0s2W0mUd8d83339frgMXhUvWr1yxkdgg6zSExkuQwsSJjiNn7XWKMUUqKYDvV/WzQQRA+OBXA==",
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "buffer": "^6.0.3",
 | 
			
		||||
        "debug": "^4.3.4",
 | 
			
		||||
        "deep-assign": "^2.0.0",
 | 
			
		||||
        "load-bmfont": "^1.2.3",
 | 
			
		||||
        "super-animejs": "^3.1.0",
 | 
			
		||||
        "three": "npm:super-three@0.173.5",
 | 
			
		||||
        "three-bmfont-text": "github:dmarcos/three-bmfont-text#eed4878795be9b3e38cf6aec6b903f56acd1f695"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">= 4.6.0",
 | 
			
		||||
        "npm": ">= 2.15.9"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/an-array": {
 | 
			
		||||
      "version": "1.0.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/an-array/-/an-array-1.0.0.tgz",
 | 
			
		||||
      "integrity": "sha512-M175GYI7RmsYu24Ok383yZQa3eveDfNnmhTe3OQ3bm70bEovz2gWenH+ST/n32M8lrwLWk74hcPds5CDRPe2wg==",
 | 
			
		||||
      "license": "MIT"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/array-shuffle": {
 | 
			
		||||
      "version": "1.0.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/array-shuffle/-/array-shuffle-1.0.1.tgz",
 | 
			
		||||
      "integrity": "sha512-PBqgo1Y2XWSksBzq3GFPEb798ZrW2snAcmr4drbVeF/6MT/5aBlkGJEvu5A/CzXHf4EjbHOj/ZowatjlIiVidA==",
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=0.10.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/as-number": {
 | 
			
		||||
      "version": "1.0.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/as-number/-/as-number-1.0.0.tgz",
 | 
			
		||||
      "integrity": "sha512-HkI/zLo2AbSRO4fqVkmyf3hms0bJDs3iboHqTrNuwTiCRvdYXM7HFhfhB6Dk51anV2LM/IMB83mtK9mHw4FlAg==",
 | 
			
		||||
      "license": "MIT"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/base64-js": {
 | 
			
		||||
      "version": "1.5.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
 | 
			
		||||
      "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
 | 
			
		||||
      "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"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/buffer": {
 | 
			
		||||
      "version": "6.0.3",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
 | 
			
		||||
      "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
 | 
			
		||||
      "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": {
 | 
			
		||||
        "base64-js": "^1.3.1",
 | 
			
		||||
        "ieee754": "^1.2.1"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/buffer-equal": {
 | 
			
		||||
      "version": "0.0.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz",
 | 
			
		||||
      "integrity": "sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA==",
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=0.4.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/cacheable-request": {
 | 
			
		||||
      "version": "6.1.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz",
 | 
			
		||||
      "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==",
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "clone-response": "^1.0.2",
 | 
			
		||||
        "get-stream": "^5.1.0",
 | 
			
		||||
        "http-cache-semantics": "^4.0.0",
 | 
			
		||||
        "keyv": "^3.0.0",
 | 
			
		||||
        "lowercase-keys": "^2.0.0",
 | 
			
		||||
        "normalize-url": "^4.1.0",
 | 
			
		||||
        "responselike": "^1.0.2"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=8"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/cacheable-request/node_modules/get-stream": {
 | 
			
		||||
      "version": "5.2.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
 | 
			
		||||
      "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "pump": "^3.0.0"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=8"
 | 
			
		||||
      },
 | 
			
		||||
      "funding": {
 | 
			
		||||
        "url": "https://github.com/sponsors/sindresorhus"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/cacheable-request/node_modules/lowercase-keys": {
 | 
			
		||||
      "version": "2.0.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz",
 | 
			
		||||
      "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==",
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=8"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/centra": {
 | 
			
		||||
      "version": "2.7.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/centra/-/centra-2.7.0.tgz",
 | 
			
		||||
      "integrity": "sha512-PbFMgMSrmgx6uxCdm57RUos9Tc3fclMvhLSATYN39XsDV29B89zZ3KA89jmY0vwSGazyU+uerqwa6t+KaodPcg==",
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "follow-redirects": "^1.15.6"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/clone-response": {
 | 
			
		||||
      "version": "1.0.3",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz",
 | 
			
		||||
      "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==",
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "mimic-response": "^1.0.0"
 | 
			
		||||
      },
 | 
			
		||||
      "funding": {
 | 
			
		||||
        "url": "https://github.com/sponsors/sindresorhus"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/debug": {
 | 
			
		||||
      "version": "4.4.3",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
 | 
			
		||||
      "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "ms": "^2.1.3"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=6.0"
 | 
			
		||||
      },
 | 
			
		||||
      "peerDependenciesMeta": {
 | 
			
		||||
        "supports-color": {
 | 
			
		||||
          "optional": true
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/decompress-response": {
 | 
			
		||||
      "version": "3.3.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz",
 | 
			
		||||
      "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==",
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "mimic-response": "^1.0.0"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=4"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/deep-assign": {
 | 
			
		||||
      "version": "2.0.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/deep-assign/-/deep-assign-2.0.0.tgz",
 | 
			
		||||
      "integrity": "sha512-2QhG3Kxulu4XIF3WL5C5x0sc/S17JLgm1SfvDfIRsR/5m7ZGmcejII7fZ2RyWhN0UWIJm0TNM/eKow6LAn3evQ==",
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "is-obj": "^1.0.0"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=0.10.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/defer-to-connect": {
 | 
			
		||||
      "version": "1.1.3",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz",
 | 
			
		||||
      "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==",
 | 
			
		||||
      "license": "MIT"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/dom-walk": {
 | 
			
		||||
      "version": "0.1.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz",
 | 
			
		||||
      "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w=="
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/dtype": {
 | 
			
		||||
      "version": "2.0.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/dtype/-/dtype-2.0.0.tgz",
 | 
			
		||||
      "integrity": "sha512-s2YVcLKdFGS0hpFqJaTwscsyt0E8nNFdmo73Ocd81xNPj4URI4rj6D60A+vFMIw7BXWlb4yRkEwfBqcZzPGiZg==",
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">= 0.8.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/duplexer3": {
 | 
			
		||||
      "version": "0.1.5",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz",
 | 
			
		||||
      "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==",
 | 
			
		||||
      "license": "BSD-3-Clause"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/end-of-stream": {
 | 
			
		||||
      "version": "1.4.5",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz",
 | 
			
		||||
      "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==",
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "once": "^1.4.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/end-of-stream/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==",
 | 
			
		||||
      "license": "ISC",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "wrappy": "1"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/follow-redirects": {
 | 
			
		||||
      "version": "1.15.11",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz",
 | 
			
		||||
      "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==",
 | 
			
		||||
      "funding": [
 | 
			
		||||
        {
 | 
			
		||||
          "type": "individual",
 | 
			
		||||
          "url": "https://github.com/sponsors/RubenVerborgh"
 | 
			
		||||
        }
 | 
			
		||||
      ],
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=4.0"
 | 
			
		||||
      },
 | 
			
		||||
      "peerDependenciesMeta": {
 | 
			
		||||
        "debug": {
 | 
			
		||||
          "optional": true
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/get-stream": {
 | 
			
		||||
      "version": "4.1.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
 | 
			
		||||
      "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "pump": "^3.0.0"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=6"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/global": {
 | 
			
		||||
      "version": "4.4.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz",
 | 
			
		||||
      "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==",
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "min-document": "^2.19.0",
 | 
			
		||||
        "process": "^0.11.10"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/got": {
 | 
			
		||||
      "version": "9.6.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz",
 | 
			
		||||
      "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==",
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "@sindresorhus/is": "^0.14.0",
 | 
			
		||||
        "@szmarczak/http-timer": "^1.1.2",
 | 
			
		||||
        "cacheable-request": "^6.0.0",
 | 
			
		||||
        "decompress-response": "^3.3.0",
 | 
			
		||||
        "duplexer3": "^0.1.4",
 | 
			
		||||
        "get-stream": "^4.1.0",
 | 
			
		||||
        "lowercase-keys": "^1.0.1",
 | 
			
		||||
        "mimic-response": "^1.0.1",
 | 
			
		||||
        "p-cancelable": "^1.0.0",
 | 
			
		||||
        "to-readable-stream": "^1.0.0",
 | 
			
		||||
        "url-parse-lax": "^3.0.0"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=8.6"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/http-cache-semantics": {
 | 
			
		||||
      "version": "4.2.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz",
 | 
			
		||||
      "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==",
 | 
			
		||||
      "license": "BSD-2-Clause"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/ieee754": {
 | 
			
		||||
      "version": "1.2.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
 | 
			
		||||
      "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
 | 
			
		||||
      "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": "BSD-3-Clause"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/is-buffer": {
 | 
			
		||||
      "version": "1.1.6",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
 | 
			
		||||
      "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
 | 
			
		||||
      "license": "MIT"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/is-function": {
 | 
			
		||||
      "version": "1.0.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz",
 | 
			
		||||
      "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==",
 | 
			
		||||
      "license": "MIT"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/is-obj": {
 | 
			
		||||
      "version": "1.0.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
 | 
			
		||||
      "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==",
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=0.10.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/json-buffer": {
 | 
			
		||||
      "version": "3.0.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz",
 | 
			
		||||
      "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==",
 | 
			
		||||
      "license": "MIT"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/keyv": {
 | 
			
		||||
      "version": "3.1.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz",
 | 
			
		||||
      "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==",
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "json-buffer": "3.0.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/layout-bmfont-text": {
 | 
			
		||||
      "version": "1.3.4",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/layout-bmfont-text/-/layout-bmfont-text-1.3.4.tgz",
 | 
			
		||||
      "integrity": "sha512-mceomHZ8W7pSKQhTdLvOe1Im4n37u8xa5Gr0J3KPCHRMO/9o7+goWIOzZcUUd+Xgzy3+22bvoIQ0OaN3LRtgaw==",
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "as-number": "^1.0.0",
 | 
			
		||||
        "word-wrapper": "^1.0.7",
 | 
			
		||||
        "xtend": "^4.0.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/load-bmfont": {
 | 
			
		||||
      "version": "1.4.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/load-bmfont/-/load-bmfont-1.4.2.tgz",
 | 
			
		||||
      "integrity": "sha512-qElWkmjW9Oq1F9EI5Gt7aD9zcdHb9spJCW1L/dmPf7KzCCEJxq8nhHz5eCgI9aMf7vrG/wyaCqdsI+Iy9ZTlog==",
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "buffer-equal": "0.0.1",
 | 
			
		||||
        "mime": "^1.3.4",
 | 
			
		||||
        "parse-bmfont-ascii": "^1.0.3",
 | 
			
		||||
        "parse-bmfont-binary": "^1.0.5",
 | 
			
		||||
        "parse-bmfont-xml": "^1.1.4",
 | 
			
		||||
        "phin": "^3.7.1",
 | 
			
		||||
        "xhr": "^2.0.1",
 | 
			
		||||
        "xtend": "^4.0.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/lowercase-keys": {
 | 
			
		||||
      "version": "1.0.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
 | 
			
		||||
      "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==",
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=0.10.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/map-limit": {
 | 
			
		||||
      "version": "0.0.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/map-limit/-/map-limit-0.0.1.tgz",
 | 
			
		||||
      "integrity": "sha512-pJpcfLPnIF/Sk3taPW21G/RQsEEirGaFpCW3oXRwH9dnFHPHNGjNyvh++rdmC2fNqEaTw2MhYJraoJWAHx8kEg==",
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "once": "~1.3.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "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"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/mimic-response": {
 | 
			
		||||
      "version": "1.0.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
 | 
			
		||||
      "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==",
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=4"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/min-document": {
 | 
			
		||||
      "version": "2.19.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz",
 | 
			
		||||
      "integrity": "sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "dom-walk": "^0.1.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/minimist": {
 | 
			
		||||
      "version": "1.2.8",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
 | 
			
		||||
      "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "funding": {
 | 
			
		||||
        "url": "https://github.com/sponsors/ljharb"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/ms": {
 | 
			
		||||
      "version": "2.1.3",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
 | 
			
		||||
      "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
 | 
			
		||||
      "license": "MIT"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/new-array": {
 | 
			
		||||
      "version": "1.0.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/new-array/-/new-array-1.0.0.tgz",
 | 
			
		||||
      "integrity": "sha512-K5AyFYbuHZ4e/ti52y7k18q8UHsS78FlRd85w2Fmsd6AkuLipDihPflKC0p3PN5i8II7+uHxo+CtkLiJDfmS5A==",
 | 
			
		||||
      "license": "MIT"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/nice-color-palettes": {
 | 
			
		||||
      "version": "3.0.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/nice-color-palettes/-/nice-color-palettes-3.0.0.tgz",
 | 
			
		||||
      "integrity": "sha512-lL4AjabAAFi313tjrtmgm/bxCRzp4l3vCshojfV/ij3IPdtnRqv6Chcw+SqJUhbe7g3o3BecaqCJYUNLswGBhQ==",
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "got": "^9.2.2",
 | 
			
		||||
        "map-limit": "0.0.1",
 | 
			
		||||
        "minimist": "^1.2.0",
 | 
			
		||||
        "new-array": "^1.0.0"
 | 
			
		||||
      },
 | 
			
		||||
      "bin": {
 | 
			
		||||
        "nice-color-palettes": "bin/index.js"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/normalize-url": {
 | 
			
		||||
      "version": "4.5.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz",
 | 
			
		||||
      "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==",
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=8"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/once": {
 | 
			
		||||
      "version": "1.3.3",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz",
 | 
			
		||||
      "integrity": "sha512-6vaNInhu+CHxtONf3zw3vq4SP2DOQhjBvIa3rNcG0+P7eKWlYH6Peu7rHizSloRU2EwMz6GraLieis9Ac9+p1w==",
 | 
			
		||||
      "license": "ISC",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "wrappy": "1"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/p-cancelable": {
 | 
			
		||||
      "version": "1.1.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz",
 | 
			
		||||
      "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==",
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=6"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/parse-bmfont-ascii": {
 | 
			
		||||
      "version": "1.0.6",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz",
 | 
			
		||||
      "integrity": "sha512-U4RrVsUFCleIOBsIGYOMKjn9PavsGOXxbvYGtMOEfnId0SVNsgehXh1DxUdVPLoxd5mvcEtvmKs2Mmf0Mpa1ZA==",
 | 
			
		||||
      "license": "MIT"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/parse-bmfont-binary": {
 | 
			
		||||
      "version": "1.0.6",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz",
 | 
			
		||||
      "integrity": "sha512-GxmsRea0wdGdYthjuUeWTMWPqm2+FAd4GI8vCvhgJsFnoGhTrLhXDDupwTo7rXVAgaLIGoVHDZS9p/5XbSqeWA==",
 | 
			
		||||
      "license": "MIT"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/parse-bmfont-xml": {
 | 
			
		||||
      "version": "1.1.6",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/parse-bmfont-xml/-/parse-bmfont-xml-1.1.6.tgz",
 | 
			
		||||
      "integrity": "sha512-0cEliVMZEhrFDwMh4SxIyVJpqYoOWDJ9P895tFuS+XuNzI5UBmBk5U5O4KuJdTnZpSBI4LFA2+ZiJaiwfSwlMA==",
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "xml-parse-from-string": "^1.0.0",
 | 
			
		||||
        "xml2js": "^0.5.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/parse-headers": {
 | 
			
		||||
      "version": "2.0.6",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.6.tgz",
 | 
			
		||||
      "integrity": "sha512-Tz11t3uKztEW5FEVZnj1ox8GKblWn+PvHY9TmJV5Mll2uHEwRdR/5Li1OlXoECjLYkApdhWy44ocONwXLiKO5A==",
 | 
			
		||||
      "license": "MIT"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/phin": {
 | 
			
		||||
      "version": "3.7.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/phin/-/phin-3.7.1.tgz",
 | 
			
		||||
      "integrity": "sha512-GEazpTWwTZaEQ9RhL7Nyz0WwqilbqgLahDM3D0hxWwmVDI52nXEybHqiN6/elwpkJBhcuj+WbBu+QfT0uhPGfQ==",
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "centra": "^2.7.0"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">= 8"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/prepend-http": {
 | 
			
		||||
      "version": "2.0.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz",
 | 
			
		||||
      "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==",
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=4"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/process": {
 | 
			
		||||
      "version": "0.11.10",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
 | 
			
		||||
      "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==",
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">= 0.6.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/pump": {
 | 
			
		||||
      "version": "3.0.3",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz",
 | 
			
		||||
      "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==",
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "end-of-stream": "^1.1.0",
 | 
			
		||||
        "once": "^1.3.1"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/quad-indices": {
 | 
			
		||||
      "version": "2.0.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/quad-indices/-/quad-indices-2.0.1.tgz",
 | 
			
		||||
      "integrity": "sha512-6jtmCsEbGAh5npThXrBaubbTjPcF0rMbn57XCJVI7LkW8PUT56V+uIrRCCWCn85PSgJC9v8Pm5tnJDwmOBewvA==",
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "an-array": "^1.0.0",
 | 
			
		||||
        "dtype": "^2.0.0",
 | 
			
		||||
        "is-buffer": "^1.0.2"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/responselike": {
 | 
			
		||||
      "version": "1.0.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz",
 | 
			
		||||
      "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==",
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "lowercase-keys": "^1.0.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/sax": {
 | 
			
		||||
      "version": "1.4.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz",
 | 
			
		||||
      "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==",
 | 
			
		||||
      "license": "ISC"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/super-animejs": {
 | 
			
		||||
      "version": "3.1.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/super-animejs/-/super-animejs-3.1.0.tgz",
 | 
			
		||||
      "integrity": "sha512-6MFAFJDRuvwkovxQZPruuyHinTa4rgj4hNLOndjcYYhZLckoXtVRY9rJPuq8p6c/tgZJrFYEAYAfJ2/hhNtUCA==",
 | 
			
		||||
      "license": "MIT"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/three": {
 | 
			
		||||
      "name": "super-three",
 | 
			
		||||
      "version": "0.173.5",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/super-three/-/super-three-0.173.5.tgz",
 | 
			
		||||
      "integrity": "sha512-ecjojbhUg/5QrixwqF4s6gvtJap9XQz7TcnFUX/J8Yosgb2eE2ZUqsyqr/JczFG//6hwIaZPeAa9M5DNaM1dmQ==",
 | 
			
		||||
      "license": "MIT"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/three-bmfont-text": {
 | 
			
		||||
      "version": "3.0.0",
 | 
			
		||||
      "resolved": "git+ssh://git@github.com/dmarcos/three-bmfont-text.git#eed4878795be9b3e38cf6aec6b903f56acd1f695",
 | 
			
		||||
      "integrity": "sha512-FDlyR8SyHQ0Ek38qBx5Hg/AwPuBI/1w/QWpMgzw19Vn81xsDNFTOXJpU0HcvI78C72wwXjJ3T7+EX7k2geDV4Q==",
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "array-shuffle": "^1.0.1",
 | 
			
		||||
        "layout-bmfont-text": "^1.2.0",
 | 
			
		||||
        "nice-color-palettes": "^3.0.0",
 | 
			
		||||
        "quad-indices": "^2.0.1"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/to-readable-stream": {
 | 
			
		||||
      "version": "1.0.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz",
 | 
			
		||||
      "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==",
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=6"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/url-parse-lax": {
 | 
			
		||||
      "version": "3.0.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz",
 | 
			
		||||
      "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==",
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "prepend-http": "^2.0.0"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=4"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/word-wrapper": {
 | 
			
		||||
      "version": "1.0.7",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/word-wrapper/-/word-wrapper-1.0.7.tgz",
 | 
			
		||||
      "integrity": "sha512-VOPBFCm9b6FyYKQYfn9AVn2dQvdR/YOVFV6IBRA1TBMJWKffvhEX1af6FMGrttILs2Q9ikCRhLqkbY2weW6dOQ==",
 | 
			
		||||
      "license": "MIT"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/wrappy": {
 | 
			
		||||
      "version": "1.0.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
 | 
			
		||||
      "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
 | 
			
		||||
      "license": "ISC"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/xhr": {
 | 
			
		||||
      "version": "2.6.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz",
 | 
			
		||||
      "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==",
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "global": "~4.4.0",
 | 
			
		||||
        "is-function": "^1.0.1",
 | 
			
		||||
        "parse-headers": "^2.0.0",
 | 
			
		||||
        "xtend": "^4.0.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/xml-parse-from-string": {
 | 
			
		||||
      "version": "1.0.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz",
 | 
			
		||||
      "integrity": "sha512-ErcKwJTF54uRzzNMXq2X5sMIy88zJvfN2DmdoQvy7PAFJ+tPRU6ydWuOKNMyfmOjdyBQTFREi60s0Y0SyI0G0g==",
 | 
			
		||||
      "license": "MIT"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/xml2js": {
 | 
			
		||||
      "version": "0.5.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz",
 | 
			
		||||
      "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==",
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "sax": ">=0.6.0",
 | 
			
		||||
        "xmlbuilder": "~11.0.0"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=4.0.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/xmlbuilder": {
 | 
			
		||||
      "version": "11.0.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz",
 | 
			
		||||
      "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==",
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=4.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/xrf": {
 | 
			
		||||
      "version": "0.0.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/xrf/-/xrf-0.0.1.tgz",
 | 
			
		||||
      "integrity": "sha512-uYa8M73z45DRTymga+48gTDEeur+iM3jPktVBnaOHopb17VvZxJ6yZy6TAhMURMrliHB48mYUUSC5J5NRF8wZA==",
 | 
			
		||||
      "license": "MIT"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/xtend": {
 | 
			
		||||
      "version": "4.0.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
 | 
			
		||||
      "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=0.4"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,16 +0,0 @@
 | 
			
		|||
{
 | 
			
		||||
  "name": "webxr",
 | 
			
		||||
  "version": "1.0.0",
 | 
			
		||||
  "main": "index.js",
 | 
			
		||||
  "scripts": {
 | 
			
		||||
    "build": "echo -e \"hint: pass bun args via: BARG='--minify' npm run build'\n\n\" && BARG=$BARG npm run build-xrforge",
 | 
			
		||||
    "build-xrforge": "mkdir -p dist/xrforge && bun build ${BARG} --outdir=dist/xrforge xrforge.html && monolith dist/xrforge/xrforge.html --output dist/xrforge.html && sed -i 's|data:module|data:text/javascript;|g' dist/xrforge.html # https://github.com/Y2Z/monolith/issues/474 "
 | 
			
		||||
  },
 | 
			
		||||
  "author": "Leon van Kammen",
 | 
			
		||||
  "license": "",
 | 
			
		||||
  "description": "",
 | 
			
		||||
  "dependencies": {
 | 
			
		||||
    "aframe": "^1.7.1",
 | 
			
		||||
    "xrf": "^0.0.1"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,24 +0,0 @@
 | 
			
		|||
#let 
 | 
			
		||||
#  pkgs = import (builtins.fetchGit {
 | 
			
		||||
#      name = "nixos-23.05";
 | 
			
		||||
#    url = "https://github.com/nixos/nixpkgs/";
 | 
			
		||||
#    ref = "refs/heads/nixos-unstable";
 | 
			
		||||
#    rev = "ef99fa5c5ed624460217c31ac4271cfb5cb2502c";
 | 
			
		||||
#  }) {};
 | 
			
		||||
{ pkgs ? import <nixpkgs> {} }:
 | 
			
		||||
 | 
			
		||||
  pkgs.mkShell {
 | 
			
		||||
    # nativeBuildInputs is usually what you want -- tools you need to run
 | 
			
		||||
    nativeBuildInputs = with pkgs.buildPackages; [ 
 | 
			
		||||
 | 
			
		||||
      nodejs_20
 | 
			
		||||
      monolith
 | 
			
		||||
      bun
 | 
			
		||||
 | 
			
		||||
    ];
 | 
			
		||||
 | 
			
		||||
    shellHook = ''
 | 
			
		||||
      
 | 
			
		||||
      export NIX_XRFORGE_WEBXR=1
 | 
			
		||||
    '';
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,51 +0,0 @@
 | 
			
		|||
<!DOCTYPE html>
 | 
			
		||||
<html>
 | 
			
		||||
	<head>
 | 
			
		||||
		<style type="text/css">
 | 
			
		||||
 | 
			
		||||
				body{ 
 | 
			
		||||
					background: #555; 
 | 
			
		||||
				  height: 100%;
 | 
			
		||||
				  margin: 0;
 | 
			
		||||
				  overflow: hidden;
 | 
			
		||||
				  padding: 0;
 | 
			
		||||
				  width: 100%;
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				img#btn_play:hover {
 | 
			
		||||
					opacity: 1.0;
 | 
			
		||||
				}
 | 
			
		||||
				img#btn_play {
 | 
			
		||||
					position: fixed;
 | 
			
		||||
					top: 50%;
 | 
			
		||||
					left: 50%;
 | 
			
		||||
			                width:30%;
 | 
			
		||||
				        max-width:400px;
 | 
			
		||||
					transform: translate(-50%,-50%);
 | 
			
		||||
					cursor: pointer;
 | 
			
		||||
					opacity: 0.6;
 | 
			
		||||
					transition: 0.3s;
 | 
			
		||||
					z-index: 999;
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
		</style>
 | 
			
		||||
	</head>
 | 
			
		||||
	<body>
 | 
			
		||||
 | 
			
		||||
	  <img id="btn_play" src="lib/assets/play.svg"/>
 | 
			
		||||
 | 
			
		||||
	  <a-scene>
 | 
			
		||||
	  	<a-entity id="scene" animation-mixer_disabled gltf-model></a-entity>
 | 
			
		||||
 | 
			
		||||
      <a-entity id="player" movement-controls touch-controls="axis:y" wasd-controls="fly:true" look-controls="magicWindowTrackingEnabled:true">
 | 
			
		||||
        <a-entity camera="fov:90" position="0 1.6 0" id="camera"></a-entity>
 | 
			
		||||
        <a-entity id="left-hand" hand-tracking-grab-controls="hand:left;modelColor:#cccccc" raycaster="objects:.ray" blink-controls="cameraRig:#player; teleportOrigin: #camera; collisionEntities: .floor"></a-entity>
 | 
			
		||||
        <a-entity id="right-hand" hand-tracking-grab-controls="hand:right;modelColor:#cccccc" laser-controls="hand: right" raycaster="objects:.ray" blink-controls="cameraRig:#player; teleportOrigin: #camera; collisionEntities: .floor"></a-entity>
 | 
			
		||||
      </a-entity>
 | 
			
		||||
 | 
			
		||||
	  </a-scene>
 | 
			
		||||
 | 
			
		||||
    <script type="module" src="lib/xrforge/index.js"></script>
 | 
			
		||||
 | 
			
		||||
	</body>
 | 
			
		||||
</html>
 | 
			
		||||
		Loading…
	
	Add table
		
		Reference in a new issue