diff --git a/CHANGELOG.md b/CHANGELOG.md
deleted file mode 100644
index abfef30..0000000
--- a/CHANGELOG.md
+++ /dev/null
@@ -1,466 +0,0 @@
-OneFinity CNC Controller Firmware Changelog
-===========================================
-
-## v1.0.8
- - Fixed chatter and lost steps issues (most commonly seen by Fusion users), re-enabled support for G61, G61.1, G64.
- - Fixed 3d preview on Safari-based web browsers (MacOS & iOS)
- - Made it less likely for a user to upload a non-gcode file
- - Fixed problems with UI freezing when attempting to process a non-gcode file
- - Simplified error popup to make it less confusing
- - Improved error messages for most internal errors
-
-## v1.0.7
- - Cleaned up UI layout a bit on the main screen
- - Enabled auto expansion of partition and file system to fill SD card on first boot
- - Added probe continuity test before probing (pop-up dialog)
- - Added a popup after probing, reminding the user to put away the probe
- - Lowered default probe seek speed
- - Fixed file drop-down menu showing old files
- - Added file system watcher for uploaded files
- - Improved support for large gcode files, improves performance on Raspi
- - Fixed a bug where the UI could become unresponsive at boot, or when uploading the first gcode file
- - Changed default max-deviation to 0.001 to reduce issues with chattering while cutting arcs and circles
- - Hides ratpoison (window manager) message during boot up
- - Disabled G61, G61.1, G64 gcodes until the root cause of circle chatter is identified and fixed
- - Increased icon size on the main GUI
- - Improved version comparison logic for handling public beta releases in the future
- - Changed default max-jerk to 1000 for X/Y axes
- - Changed default idle current to 1A
- - Force-set some critical configuration values to help with reliability
- - Metric units only for junction-accel and max-deviation
- - Rewrote the homing procedure to be more consistent
- - Small improvements to the stall homing procedure
- - Fixed error messages in the console (webgl)
- - Fixed styling bug with error dialog
- - Added a setting to allow enable/disable of probing safety prompts
-
-## v1.0.6
- - Tweaked stall homing procedure to clear stepper stall condition before homing
- - Modified motor homing parameters (8 microsteps, 1.688 m/min search velocity, 2 stall volts, 1 stall current, 1.5mm zero backoff)
- - Added pop up message while loading/simulating file on upload
- - Decreased max velocity in default settings for X and Y axes
- - Restored jerk to 1000 on all axes
- - Fixed issue with default units not displaying on Control page (thanks to Robin Goldstone)
-
-## v1.0.5
- - Changed the jog commands so that save/restore modal states are not used to avoid situation where spindle/loads could
- turn back on if the stop button was used instead of the M5/M9 gcode commands.
- - Added tool path status to control page
- - Moved over/under/no-fit warnings to tool status from machine status
- - Added "home machine" pop up on start if the machine is not homed
- - Added confirmation for X0Y0 and Z0 buttons
-
-## v1.0.4
- - Fixed text sticking out of some dialog boxes
- - Added changes to PWR microcontroller to support new precharge circuitry on V3 of the PCB
- - Added a Shutdown button under the menu
- - Added confirmation dialog to shutdown
- - Fixed Reset Defaults for OneFinity settings
- - Probe buttons now turn green when probe input is active
- - Added defaults for both machinist and woodworker machines
- - Re-activated "Upgrade" button under Admin to grab updates directly from the web
-
-## v1.0.3
- - Changed upgrade scripts to point at OneFinity github repository
- - Upgrade function not yet fully implemented
-
-## v1.0.2
- - Initial release of customized OneFinity firmware
- - Includes GUI customizations, stall homing
-
-Note: This firmware was forked from version 0.4.14 of the Buildbotics firmware
-
-Buildbotics CNC Controller Firmware Changelog
-=============================================
-
-## v0.4.14
- - Handle file uploads with '#' or '?' in the name.
- - Added "step mode" to Web based jogging.
- - Fixed touch screen Web jogging.
-
-## v0.4.13
- - Support for OMRON MX2 VFD.
- - Better error handling in WiFi configuration.
- - Fix open WiFi access.
- - Improved video camera performance.
- - Allow up to 4 camera clients at once.
- - Add axis bounds GCode variables ``#<_x_min>``, ``#<_x_max>``, etc.
- - Expose ``junction-accel`` planning parameter.
- - Fixed problem with manual firmware upload on OSX.
- - Ignore cameras that do not support MJPEG format video.
-
-## v0.4.12
- - Segments straddle arc in linearization.
- - Control max-arc-error with GCode var.
- - Implemented path modes G61, G61.1 & G64 with naive CAM and basic blending.
- - Log GCode messages to "Messages" tab.
- - Acknowledging a message on one browser clears it for all.
- - Automatically reload Web view when file changes.
- - Added ``config-screen`` script. Web based screen config to come later.
- - Suppress message popup with (MSG,# No popup message).
- - Show latest GCode message in ``Message`` field on CONTROL page.
- - Marked several GCodes supported in cheat sheet.
- - Solved planner lookahead failure for most reasonable cases.
- - Prevent cutting off distant parts of 3D path view.
- - Raised default ``latch-backoff`` to 100mm and ``zero-backoff`` to 5mm.
- - Added ``max-deviation`` option.
- - Fixed problem with GCode boolean expression parsing. #232.
- - Ensure 2uS step pulse width.
-
-## v0.4.11
- - Don't reset global offsets on M2.
- - Test shunt and show error on failure.
- - Report spindle status codes from Modbus.
- - Save more log files in bug report.
- - Fixed indicators low-side units.
- - Support for YL600, YL620 & YL620-A VFDs.
- - Move Modbus indicators to tool page.
- - Support for Sunfar E300 VFD.
- - Set GCODE_SCRIPT_PATH to support GCode file routines.
- - Fix pause bug introduced in v0.4.10.
-
-## v0.4.10
- - Fix demo password check
- - Fix bug were fast clicks could cause jog commands to arrive out of order.
- - Fix bug where planner position may not sync after jog.
- - Show power shutdown on indicators page.
- - Show all motors in shutdown when in power shutdown.
- - Improved GCode error messages.
- - Put controller into estop when in power shutdown.
-
-## v0.4.9
- - Enforce 6A per motor channel peak current limit.
- - Adjust config values above max or below min instead of resetting to default.
-
-## v0.4.8
- - Fixed log rotating.
- - Use systemd service instead of init.d.
- - Fix planner terminate.
- - Changed AVR serial interrupt priorites.
- - Increased AVR serial and command buffers.
- - Boost HDMI signal.
- - Rewrote RPi serial driver.
- - Automatically scale max CPU speed to reduce RPi temp.
- - Disable USB camera if RPi temperature above 80°C, back on at 75°C.
- - Respect offsets in canned cycle moves. #219
- - Fixed G53 warning.
- - Fixed delayed offset update after M2 or M30 end of program.
- - Handle multiple consecutive config resets correctly.
- - Fixed log CPU usage problem introduced in v0.4.6.
- - Show RPi temp on indicators page.
- - Show red thermometer if RPi temp exceeds 80°C.
-
-## v0.4.7
- - Fix homing switch to motor channel mapping with non-standard axis order.
- - Added ``switch-debounce`` and ``switch-lockout`` config options.
- - Handle corrupt GCode simulation data correctly.
- - Fixes for exception logging.
- - Always limit motor max-velocity. #209
- - Sync GCode and planner files to disk after write.
- - Added warning about reliability in a noisy environment on WiFi config page.
- - EStop on motor fault.
- - Fixed ETA line wrapping on Web interface.
- - Fixed zeroing with non-zero offset when unhomed. #211
- - Handle file paths uploaded from Windows correctly. #212
- - Don't retain estop state through reboot.
- - Log when RPi gets hot.
- - Support Modbus multi-write mode.
- - Added support for Nowforever VFDs.
-
-## v0.4.6
- - Fixed a rare ``Negative s-curve time`` error.
- - Don't allow manual axis homing when soft limits are not set.
- - Right click to enable camera crosshair.
- - Demo mode.
- - Limit idle-current to 2A.
- - Removed dangerous ``power-mode`` in favor of simpler ``enabled`` option.
- - Fixed bug where motor driver could fail to disabled during estop.
- - Restored estop text.
-
-## v0.4.5
- - Fix for random errors while running VFD.
- - Fix bug where planner would not continue after optional pause (M1).
- - Fix lockup on invalid no move probe G38.x. #183
- - Fix zeroing homed axis after jog.
- - Fix VFD communication at higher baud rates (> 9600). #184
-
-## v0.4.4
- - Write version to log file.
- - Write time to log file periodically.
- - Show simulation progress with or with out 3D view.
- - Synchronize file list between browsers.
- - Increased max simulation time to 24hrs.
- - Added button to download current GCode file.
- - Blink play button to indicate pause.
- - Many layout tweaks/improvements.
- - Don't abort simulations when system time changes.
- - Only allow one camera stream at a time.
-
-## v0.4.2
- - Suppress ``Auto-creating missing tool`` warning.
- - Prevent ``Stream is closed`` error.
- - Suppress ``WebGL not supported`` warning.
- - Fixed Web disconnect during simulation of large GCode.
- - Disable outputs on estop.
- - Improved switch debouncing for better homing.
- - Handle zero length dwell correctly.
- - Fixed problem with cached GCode file upload when file changed on disk.
- - Run simulation at low process priority.
- - Added ``Bug Report`` button to ``Admin`` -> ``General``.
- - Only render 3D view as needed to save CPU.
- - Prevent lockup due to browser causing out of memory condition.
- - Show error message when too large GCode upload fails.
- - Much faster 3D view loading.
-
-## v0.4.1
- - Fix toolpath view axes bug.
- - Added LASER intensity view.
- - Fixed reverse path planner bug.
- - Video size and path view controls persistent over browser reload.
- - Fixed time and progress bugs.
- - Added PWM rapid auto off feature for LASER/Plasma.
- - Added dynamic PWM for LASER/Plasma.
- - Added motor faults table to indicators page.
- - Emit error and indicate FAULT on axis for motor driver faults.
- - Display axis motor FAULT on LCD.
- - Fixed bug with rapid repeated unpause.
-
-## v0.4.0
- - Increased display precision of position and motor config.
- - Added support for 256 microstepping.
- - Smoother operation at 250k step rate by doubling clock as needed.
- - Indicators tab improvements.
- - Much improved camera support.
- - Camera hotpluging.
- - Move camera video to header.
- - Click to switch video size.
- - Automount/unmount USB drives.
- - Automatically install ``buildbotics.gc`` when no other GCode exists.
- - Preplan GCode and check for errors.
- - Display 3D view of program tool paths in browser.
- - Display accurate time remaining, ETA and progress during run.
- - Automatically collapse moves in planner which are too short in time.
- - Show IO status indicators on configuration pages.
- - Check that axis dimensions fit path plan dimensions.
- - Show machine working envelope in path plan viewer.
- - Don't reload browser view on reconnect unless controller has reloaded.
- - Increased max switch backoff search distance.
- - Major improvements for LASER raster GCodes.
- - Fixed major bug in command queuing.
- - Ignore Program Number O-Codes.
- - Improved planning of collinear line segments.
- - Allow PWM output up to 320kHz and no slower than 8Hz.
-
-## v0.3.28
- - Show step rate on motor configuration page.
- - Limit motor max-velocity such that step rate cannot exceed 250k.
- - Fixed deceleration bug at full 250k step rate.
-
-## v0.3.27
- - Fixed homing in imperial mode.
-
-## v0.3.26
- - Removed VFD test.
- - Show VFD status on configuration page.
- - Show VFD commands fail counts.
- - Marked some VFD types as beta.
-
-## v0.3.25
- - Error on home if max-soft-limit <= min-soft-limit + 1. #139
- - Decrease boot time networking delay.
- - Default to US keyboard layout. #145
- - Added configuration option to show metric or imperial units in browser. #74
- - Implemented fine jogging control in Web interface. #147
-
-## v0.3.24
- - Added unhome button on axis position popup.
- - Ignore soft limits of max <= min.
- - Fixed problem with restarting program in imperial units mode.
- - Handle GCode with infinite or very long loops correctly.
- - Fixed Huanyang spindle restart after stop.
-
-## v0.3.23
- - Fix for modbus read operation.
- - Finalized AC-Tech VFD support.
- - Preliminary FR-D700 VFD support.
- - Ignore leading zeros in modbus messages.
- - Handle older PWR firmwares.
-
-## v0.3.22
- - Fix position loss after program pause. #130
- - Correctly handle disabled axes.
- - Fixed config checkbox not displaying defaulted enabled correctly.
- - Added Custom Modbus VFD programming.
-
-## v0.3.21
- - Implemented M70-M73 modal state save/restore.
- - Added support for modbus VFDs.
- - Start Huanyang spindle with out first pressing Start button on VFD.
- - Faster switching of large GCode files in Web.
- - Fixed reported gcode line off by one.
- - Disable MDI input while running.
- - Stabilized direction pin output during slow moves.
-
-## v0.3.20
- - Eliminated drift caused by miscounting half microsteps.
- - Fixed disappearing GCode in Web.
- - More efficient GCode scrolling with very large files.
- - Fully functional soft-limited jogging.
- - Added client and access-point Wifi configuration.
- - Fixed broken hostname Web redirect after change.
- - Split admin page -> General & Network.
- - Improved calculation of junction velocity limits.
-
-## v0.3.19
- - Fixed stopping problems. #127
- - Fixed ``Negative s-curve time`` error.
- - Improved jogging with soft limits.
- - Added site favicon.
- - Fixed problems with offsets and imperial units.
- - Fixed ``All zero s-curve times`` caused by extremely short, non-zero moves.
- - Fixed position drift.
-
-## v0.3.18
- - Don't enable any tool by default.
-
-## v0.3.17
- - Fixed pausing fail near end of run bug.
- - Show "Upgrading firmware" when upgrading.
- - Log excessive pwr communication failures as errors.
- - Ensure we can still get out of non-idle cycles when there are errors.
- - Less frequent pwr variable updates.
- - Stop cancels seek and subsequent estop.
- - Fixed bug in AVR/Planner command synchronization.
- - Consistently display HOMING state during homing operation.
- - Homing zeros axis global offset.
- - Added zero all button. #126
- - Separate "Auto" and "MDI" play/pause & stop buttons. #126
- - Moved home all button. #126
- - Display "Video camera not found." instead of broken image icon.
- - Show offset positions not absolute on LCD.
- - Don't change gcode lines while homing.
- - Don't change button states while homing.
- - Adding warning about power cyclying during an upgrade.
- - Reset planner on AVR errors.
- - Fixed pausing with short moves.
- - Corrected s-curve accel increasing jogging velocities.
-
-## v0.3.16
- - Fixed switch debounce bug.
-
-## v0.3.15
- - Suppress warning missing config.json warning after config reset.
- - Fixed EStop reboot loop.
- - Removed AVR unexpected reboot error.
-
-## v0.3.14
- - Fixed: Config fails silently after web disconnect #112
- - Always reload the page after a disconnect.
- - Honor soft limits #111 (but not when jogging)
- - Limit switch going active while moving causes estop. #54
- - Added more links to help page.
- - Fixed axis display on LCD. #122
- - Added GCode cheat sheet.
- - Fixed LCD boot splash screen. #121
- - Implemented tool change procedures and pause message box. #81
- - Implemented program start and end procedures.
-
-## v0.3.13
- - Disable spindle and loads on stop.
- - Fixed several state transition (stop, pause, estop, etc.) problems.
-
-## v0.3.12
- - Updated DB25 M2 breakout diagram.
- - Enabled AVR watchdog.
- - Fixed problem with selecting newly uploaded file.
- - More thorough shutdown of stepper driver in estop.
- - Fixed spindle type specific options.
- - No more ``Unexpected AVR firmware reboot`` errors on estop clear.
- - Downgraded ``Machine alarmed - Command not processed`` errors to warnings.
- - Suppress unnecessary axis homing warnings.
- - More details for axis homing errors.
- - Support GCode messages e.g. (MSG, Hello World!)
- - Support programmed pauses. i.e. M0
-
-## v0.3.11
- - Suppressed ``firmware rebooted`` warning.
- - Error on unexpected AVR reboot.
- - Fixed pin fault output.
- - No longer using interrupts for switch inputs. Debouncing on clock tick.
-
-## v0.3.10
- - Fixed "Flood" display, changed to "Load 1" and "Load 2". #108
- - Highlight loads when on.
- - Fixed axis zeroing.
- - Fixed bug in home position set after successful home. #109
- - Fixed ugly Web error dumps.
- - Allow access to log file from Web.
- - Rotate log so it does not grow too big.
- - Keep same GCode file through browser reload. #20
-
-## v0.3.9
- - Fixed bug in move exec that was causing bumping between moves.
- - Fixed planner bug which could create negative s-curve times.
- - Hide step and optional pause buttons until they are implemented.
- - Fixed pausing problems.
- - Limit number of console messages.
- - Scrollbar on console view.
- - Log debug messages to console in developer mode.
- - Fixed AVR log message source.
- - Fixed step correction.
- - JOGGING, HOMMING and MDI states.
- - Fixed position problem with rapid MDI entry.
-
-## v0.3.8
- - Fixed pwr flags display
- - Added pwr fault flags to indicators
-
-## v0.3.7
- - Allow blocking error dialog for a period of time
- - Show actual error message on planner errors
- - Reset planner on serious error
- - Fixed console clear
- - Added helpful info to Video tab
- - Changed "Console" tab to "Messages"
- - Removed spin up/down velocity options, they don't do anything
- - Allow RS485 to work when wires are swapped
- - Allow setting VFD ID
- - Only show relevant spindle config items
- - More robust video camera reset
- - Added help page
- - Allow upgrade with out Internet
- - Limit power fault reporting
- - Added load over temp, load limiting and motor overload power faults
-
-## v0.3.6
- - Set max_usb_current=1 in /boot/config.txt from installer #103
-
-## v0.3.5
- - Fixed dwell (G4)
- - Always show limit switch indicators regardless of motor enable
- - Fixed feed rate display
- - Added current GCode unit display
- - Fixed homed axis zeroing
- - Fixed probe pin input
- - Added reload button to video tab
- - Don't open error dialog on repeat messages
- - Handle large GCode files in browser
- - Added max lookahead limit to planner
- - Fixed GCode stopping/pausing where ramp down needs more than is in the queue
- - Added breakout box diagram to indicators
- - Initialize axes offsets to zero on startup
- - Fixed conflict between ``x`` state variable and ``x`` axis variable
- - Don't show ipv6 addresses on LCD. They don't fit.
-
-## v0.3.4
- - Added alternate units for motor parameters
- - Automatic config file upgrading
- - Fixed planner/jog sync
- - Fixed planner limits config
- - Accel units mm/min² -> m/min²
- - Search and latch velocity mm/min -> m/min
- - Fixed password update (broken in last version)
- - Start Web server earlier in case of Python coding errors
-
-
-Changelog not maintained in previous versions. See git commit log.
diff --git a/CODE_TAG b/CODE_TAG
deleted file mode 100644
index d36ffb0..0000000
--- a/CODE_TAG
+++ /dev/null
@@ -1,22 +0,0 @@
- This file is part of the Buildbotics firmware.
-
- Copyright (c) 2015 - 2018, Buildbotics LLC
- All rights reserved.
-
- This file ("the software") is free software: you can redistribute it
- and/or modify it under the terms of the GNU General Public License,
- version 2 as published by the Free Software Foundation. You should
- have received a copy of the GNU General Public License, version 2
- along with the software. If not, see .
-
- The software is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the software. If not, see
- .
-
- For information regarding this software email:
- "Joseph Coffland"
diff --git a/Makefile b/Makefile
index a6a6548..bfa1a8c 100644
--- a/Makefile
+++ b/Makefile
@@ -22,12 +22,8 @@ RSYNC_OPTS := $(RSYNC_EXCLUDE) -rv --no-g --delete --force
VERSION := $(shell sed -n 's/^.*"version": "\([^"]*\)",.*$$/\1/p' package.json)
PKG_NAME := bbctrl-$(VERSION)
-PUB_PATH := root@buildbotics.com:/var/www/buildbotics.com/bbctrl
-BETA_VERSION := $(VERSION)-rc$(shell ./scripts/next-rc)
-BETA_PKG_NAME := bbctrl-$(BETA_VERSION)
SUBPROJECTS := avr boot pwr jig
-WATCH := src/pug src/pug/templates src/stylus src/js src/resources src/svelte-components src/static Makefile
ifndef HOST
HOST=onefinity
@@ -37,16 +33,12 @@ ifndef PASSWORD
PASSWORD=onefinity
endif
-
all: $(HTML) $(RESOURCES)
@for SUB in $(SUBPROJECTS); do $(MAKE) -C src/$$SUB; done
pkg: all $(AVR_FIRMWARE) bbserial
./setup.py sdist
-beta-pkg: pkg
- cp dist/$(PKG_NAME).tar.bz2 dist/$(BETA_PKG_NAME).tar.bz2
-
bbserial:
$(MAKE) -C src/bbserial
@@ -74,15 +66,6 @@ $(GPLAN_IMG):
$(AVR_FIRMWARE):
$(MAKE) -C src/avr
-publish: pkg
- echo -n $(VERSION) > dist/latest.txt
- rsync $(RSYNC_OPTS) dist/$(PKG_NAME).tar.bz2 dist/latest.txt $(PUB_PATH)/
-
-publish-beta: beta-pkg
- echo -n $(BETA_VERSION) > dist/latest-beta.txt
- rsync $(RSYNC_OPTS) dist/$(BETA_PKG_NAME).tar.bz2 dist/latest-beta.txt \
- $(PUB_PATH)/
-
update: pkg
http_proxy= curl -i -X PUT -H "Content-Type: multipart/form-data" \
-F "firmware=@dist/$(PKG_NAME).tar.bz2" -F "password=$(PASSWORD)" \
@@ -122,34 +105,4 @@ $(TARGET_DIR)/%.html: src/pug/%.pug node_modules FORCE
@mkdir -p $(TARGET_DIR)
$(PUG) -O pug-opts.js -P $< -o $(TARGET_DIR) || (rm -f $@; exit 1)
-pylint:
- pylint3 -E $(shell find src/py -name \*.py | grep -v flycheck_)
-
-jshint:
- ./node_modules/jshint/bin/jshint --config jshint.json src/js/*.js
-
-lint: pylint jshint
-
-watch:
- @clear
- $(MAKE)
- @while sleep 1; do \
- inotifywait -qr -e modify -e create -e delete \
- --exclude .*~ --exclude \#.* $(WATCH); \
- clear; \
- $(MAKE); \
- done
-
-tidy:
- rm -f $(shell find "$(DIR)" -name \*~)
-
-clean: tidy
- rm -rf build html dist
- @for SUB in $(SUBPROJECTS); do \
- $(MAKE) -C src/$$SUB clean; \
- done
-
-dist-clean: clean
- rm -rf node_modules
-
.PHONY: all install clean tidy pkg gplan lint pylint jshint bbserial
diff --git a/package-lock.json b/package-lock.json
index dbefd97..3833918 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -7,6 +7,7 @@
"": {
"name": "bbctrl",
"version": "1.0.10b6",
+ "hasInstallScript": true,
"license": "GPL-3.0+",
"dependencies": {
"browserify": "^17.0.0",
diff --git a/package.json b/package.json
index 0464291..f209545 100644
--- a/package.json
+++ b/package.json
@@ -4,6 +4,9 @@
"homepage": "https://onefinitycnc.com/",
"repository": "https://github.com/OneFinityCNC/onefinity",
"license": "GPL-3.0+",
+ "scripts": {
+ "postinstall": "cd src/svelte-components && npm i"
+ },
"dependencies": {
"browserify": "^17.0.0",
"jshint": "^2.13.4",
diff --git a/scripts/check-config-vars.py b/scripts/check-config-vars.py
deleted file mode 100644
index 6fd567a..0000000
--- a/scripts/check-config-vars.py
+++ /dev/null
@@ -1,37 +0,0 @@
-#!/usr/bin/env python3
-
-'''Check that the configuration variable template used on the RPi matches the
-variables used in the AVR'''
-
-import sys
-import json
-
-templ = json.load(open('src/resources/config-template.json', 'r'))
-vars = json.load(open('avr/build/vars.json', 'r'))
-
-
-def check(section):
- errors = 0
-
- for name, entry in section.items():
- if 'type' in entry:
- ok = False
-
- # TODO check that defaults are valid
- # TODO check that types match
-
- if 'code' in entry and not entry['code'] in vars:
- print('"%s" with code "%s" not found' % (name, entry['code']))
-
- else: ok = True
-
- if not ok: errors += 1
-
- else: errors += check(entry)
-
- return errors
-
-
-errors = check(templ)
-print('\n%d errors' % errors)
-sys.exit(errors != 0)
diff --git a/scripts/demo-chroot b/scripts/demo-chroot
deleted file mode 100644
index 75e7578..0000000
--- a/scripts/demo-chroot
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/bin/bash -ex
-
-ROOT="$PWD/demo"
-
-# Clean up on EXIT
-function cleanup {
- umount "$ROOT"/{dev/pts,dev,sys,proc} 2>/dev/null || true
-}
-trap cleanup EXIT
-
-# mount binds
-mount --bind /dev "$ROOT/dev/"
-mount --bind /sys "$ROOT/sys/"
-mount --bind /proc "$ROOT/proc/"
-mount --bind /dev/pts "$ROOT/dev/pts"
-
-chroot "$ROOT" "$@"
diff --git a/scripts/install.sh b/scripts/install.sh
index a13d7ed..bf318dd 100755
--- a/scripts/install.sh
+++ b/scripts/install.sh
@@ -93,6 +93,14 @@ if [ $? -ne 0 ]; then
REBOOT=true
fi
+# Set the default locale to en_US
+grep '^en_US.UTF-8 UTF-8' /etc/locale.gen >/dev/null
+if [ $? -ne 0 ]; then
+ perl -pi -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/g' /etc/locale.gen
+ locale-gen en_US.UTF-8
+ update-locale en_US.UTF-8
+fi
+
# Install .Xresources & .xinitrc
cp scripts/Xresources ~pi/.Xresources
chown pi:pi ~pi/.Xresources
diff --git a/scripts/log-position-to-gcode b/scripts/log-position-to-gcode
deleted file mode 100644
index 7597fb4..0000000
--- a/scripts/log-position-to-gcode
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/usr/bin/env python3
-
-import json
-import sys
-
-p = [0, 0, 0]
-
-
-print('F400 G21')
-
-for line in sys.stdin:
- try:
- if not line.startswith('I:Comm:> '): continue
- line = line[9:]
-
- data = json.loads(line)
-
- changed = False
- for axis in range(3):
- var = 'xyz'[axis] + 'p'
- if var in data:
- p[axis] = data[var]
- changed = True
-
- if changed: print('G1 X%d Y%d Z%d' % tuple(p))
-
- except json.decoder.JSONDecodeError: pass
diff --git a/scripts/reset-video b/scripts/reset-video
deleted file mode 100644
index 94b46cd..0000000
--- a/scripts/reset-video
+++ /dev/null
@@ -1,23 +0,0 @@
-#!/usr/bin/env python3
-
-import sys
-import subprocess
-import os.path
-import time
-
-if not os.path.exists('/dev/video0'):
- print('/dev/video0 not found')
- sys.exit(1)
-
-p = subprocess.Popen('udevadm info -q path /dev/video0'.split(),
- stdout = subprocess.PIPE)
-s = p.communicate()[0].decode('utf-8')
-dev = s.split('/')[7]
-
-with open('/sys/bus/usb/drivers/usb/unbind', 'w') as f:
- f.write(dev)
-
-time.sleep(1)
-
-with open('/sys/bus/usb/drivers/usb/bind', 'w') as f:
- f.write(dev)
diff --git a/scripts/ssh-bbctrl b/scripts/ssh-bbctrl
deleted file mode 100644
index ad9ed9a..0000000
--- a/scripts/ssh-bbctrl
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/bin/bash
-
-USER=bbmc
-HOST=bbctrl.local
-
-if [ $# -eq 1 ]; then
- if [[ "$1" = *@ ]]; then
- LOGIN="$1"
- else
- LOGIN=$USER@"$1"
- fi
-else
- LOGIN=$USER@$HOST
-fi
-
-ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no "$LOGIN"
diff --git a/scripts/svg2abs.js b/scripts/svg2abs.js
deleted file mode 100644
index 7cfc6dd..0000000
--- a/scripts/svg2abs.js
+++ /dev/null
@@ -1,64 +0,0 @@
-function convertToAbsolute(path) {
- var x0, y0, x1, y1, x2, y2, segs = path.pathSegList;
-
- for (var x = 0, y = 0, i = 0, len = segs.numberOfItems; i < len; i++) {
- var seg = segs.getItem(i), c = seg.pathSegTypeAsLetter;
-
- if (/[MLHVCSQTA]/.test(c)){
- if ('x' in seg) x = seg.x;
- if ('y' in seg) y = seg.y;
-
- } else {
- if ('x1' in seg) x1 = x + seg.x1;
- if ('x2' in seg) x2 = x + seg.x2;
- if ('y1' in seg) y1 = y + seg.y1;
- if ('y2' in seg) y2 = y + seg.y2;
- if ('x' in seg) x += seg.x;
- if ('y' in seg) y += seg.y;
-
- switch(c) {
- case 'm':
- segs.replaceItem(path.createSVGPathSegMovetoAbs(x, y), i);
- break;
- case 'l':
- segs.replaceItem(path.createSVGPathSegLinetoAbs(x, y), i);
- break;
- case 'h':
- segs.replaceItem(path.createSVGPathSegLinetoHorizontalAbs(x), i);
- break;
- case 'v':
- segs.replaceItem(path.createSVGPathSegLinetoVerticalAbs(y), i);
- break;
- case 'c':
- segs.replaceItem(
- path.createSVGPathSegCurvetoCubicAbs(x, y, x1, y1, x2, y2), i);
- break;
- case 's':
- segs.replaceItem(
- path.createSVGPathSegCurvetoCubicSmoothAbs(x, y, x2, y2), i);
- break;
- case 'q':
- segs.replaceItem(
- path.createSVGPathSegCurvetoQuadraticAbs(x, y, x1, y1), i);
- break;
- case 't':
- segs.replaceItem(
- path.createSVGPathSegCurvetoQuadraticSmoothAbs(x, y), i);
- break;
- case 'a':
- segs.replaceItem(
- path.createSVGPathSegArcAbs(x, y, seg.r1, seg.r2, seg.angle,
- seg.largeArcFlag, seg.sweepFlag), i);
- break;
-
- case 'z': case 'Z':
- x = x0;
- y = y0;
- break;
- }
- }
-
- // Record the start of a subpath
- if (c == 'M' || c == 'm') x0 = x, y0 = y;
- }
-}
diff --git a/setup.py b/setup.py
index d57ae67..7475c6d 100755
--- a/setup.py
+++ b/setup.py
@@ -32,7 +32,6 @@ setup(
'scripts/update-bbctrl',
'scripts/upgrade-bbctrl',
'scripts/sethostname',
- 'scripts/reset-video',
'scripts/config-wifi',
'scripts/edit-config',
'scripts/edit-boot-config',
diff --git a/src/py/bbctrl/AVREmu.py b/src/py/bbctrl/AVREmu.py
deleted file mode 100644
index 05181af..0000000
--- a/src/py/bbctrl/AVREmu.py
+++ /dev/null
@@ -1,207 +0,0 @@
-################################################################################
-# #
-# This file is part of the Buildbotics firmware. #
-# #
-# Copyright (c) 2015 - 2018, Buildbotics LLC #
-# All rights reserved. #
-# #
-# This file ("the software") is free software: you can redistribute it #
-# and/or modify it under the terms of the GNU General Public License, #
-# version 2 as published by the Free Software Foundation. You should #
-# have received a copy of the GNU General Public License, version 2 #
-# along with the software. If not, see . #
-# #
-# The software is distributed in the hope that it will be useful, but #
-# WITHOUT ANY WARRANTY; without even the implied warranty of #
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU #
-# Lesser General Public License for more details. #
-# #
-# You should have received a copy of the GNU Lesser General Public #
-# License along with the software. If not, see #
-# . #
-# #
-# For information regarding this software email: #
-# "Joseph Coffland" #
-# #
-################################################################################
-
-import os
-import sys
-import traceback
-import signal
-
-import bbctrl
-import bbctrl.Cmd as Cmd
-
-
-class AVREmu(object):
- def __init__(self, ctrl):
- self.ctrl = ctrl
- self.log = ctrl.log.get('AVREmu')
-
- self.avrOut = None
- self.avrIn = None
- self.i2cOut = None
- self.read_cb = None
- self.write_cb = None
- self.pid = None
-
-
- def close(self):
- # Close pipes
- def _close(fd, withHandle):
- if fd is None: return
- try:
- if withHandle: self.ctrl.ioloop.remove_handler(fd)
- except: pass
- try:
- os.close(fd)
- except: pass
-
- _close(self.avrOut, True)
- _close(self.avrIn, True)
- _close(self.i2cOut, False)
-
- self.avrOut, self.avrIn, self.i2cOut = None, None, None
-
- # Kill process and wait for it
- if self.pid is not None:
- os.kill(self.pid, signal.SIGKILL)
- os.waitpid(self.pid, 0)
- self.pid = None
-
-
- def _start(self):
- try:
- self.close()
-
- # Create pipes
- stdinFDs = os.pipe()
- stdoutFDs = os.pipe()
- i2cFDs = os.pipe()
-
- self.pid = os.fork()
-
- if not self.pid:
- # Dup child ends
- os.dup2(stdinFDs[0], 0)
- os.dup2(stdoutFDs[1], 1)
- os.dup2(i2cFDs[0], 3)
-
- # Close orig fds
- os.close(stdinFDs[0])
- os.close(stdoutFDs[1])
- os.close(i2cFDs[0])
-
- # Close parent ends
- os.close(stdinFDs[1])
- os.close(stdoutFDs[0])
- os.close(i2cFDs[1])
-
- cmd = ['bbemu']
- if self.ctrl.args.fast_emu: cmd.append('--fast')
-
- os.execvp(cmd[0], cmd)
- os._exit(1) # In case of failure
-
- # Parent, close child ends
- os.close(stdinFDs[0])
- os.close(stdoutFDs[1])
- os.close(i2cFDs[0])
-
- # Non-blocking IO
- os.set_blocking(stdinFDs[1], False)
- os.set_blocking(stdoutFDs[0], False)
- os.set_blocking(i2cFDs[1], False)
-
- self.avrOut = stdinFDs[1]
- self.avrIn = stdoutFDs[0]
- self.i2cOut = i2cFDs[1]
-
- ioloop = self.ctrl.ioloop
- ioloop.add_handler(self.avrOut, self._avr_write_handler,
- ioloop.WRITE | ioloop.ERROR)
- ioloop.add_handler(self.avrIn, self._avr_read_handler,
- ioloop.READ | ioloop.ERROR)
-
- self.write_enabled = True
-
- except Exception:
- self.close()
- self.log.exception('Internal error: Failed to start bbemu')
-
-
- def set_handlers(self, read_cb, write_cb):
- if self.read_cb is not None or self.write_cb is not None:
- raise Exception('AVR handler already set')
-
- self.read_cb = read_cb
- self.write_cb = write_cb
- self._start()
-
-
- def enable_write(self, enable):
- if self.avrOut is None: return
-
- flags = self.ctrl.ioloop.WRITE if enable else 0
- self.ctrl.ioloop.update_handler(self.avrOut, flags)
- self.write_enabled = enable
-
-
- def _avr_write(self, data):
- try:
- length = os.write(self.avrOut, data)
- self.continue_write = length and length == len(data)
- return length
-
- except BlockingIOError: pass
- except BrokenPipeError: pass
-
- return 0
-
-
- def _avr_write_handler(self, fd, events):
- if self.avrOut is None: return
-
- if events & self.ctrl.ioloop.ERROR:
- self._start()
- return
-
- try:
- while True:
- self.continue_write = False
- self.write_cb(self._avr_write)
- if not self.continue_write: break
-
- except Exception as e:
- self.log.warning('AVR write handler error: %s',
- traceback.format_exc())
-
-
- def _avr_read_handler(self, fd, events):
- if self.avrIn is None: return
-
- if events & self.ctrl.ioloop.ERROR:
- self._start()
- return
-
- try:
- data = os.read(self.avrIn, 4096)
- if data is not None: self.read_cb(data)
-
- except Exception as e:
- self.log.warning('AVR read handler error: %s %s' %
- (data, traceback.format_exc()))
-
-
- def i2c_command(self, cmd, byte = None, word = None, block = None):
- if byte is not None: data = chr(byte)
- elif word is not None: data = word
- elif block is not None: data = block
- else: data = ''
-
- try:
- if self.i2cOut is not None:
- os.write(self.i2cOut, bytes(cmd + data + '\n', 'utf-8'))
-
- except BrokenPipeError: pass
diff --git a/src/py/bbctrl/Ctrl.py b/src/py/bbctrl/Ctrl.py
index f66f39d..31728c7 100644
--- a/src/py/bbctrl/Ctrl.py
+++ b/src/py/bbctrl/Ctrl.py
@@ -25,10 +25,7 @@ class Ctrl(object):
self.log.get('Ctrl').info('Starting %s' % self.id)
try:
- if args.demo:
- self.avr = bbctrl.AVREmu(self)
- else:
- self.avr = bbctrl.AVR(self)
+ self.avr = bbctrl.AVR(self)
self.i2c = bbctrl.I2C(args.i2c_port, args.demo)
self.mach = bbctrl.Mach(self, self.avr)
diff --git a/src/py/bbctrl/ObjGraph.py b/src/py/bbctrl/ObjGraph.py
deleted file mode 100644
index 7957bbb..0000000
--- a/src/py/bbctrl/ObjGraph.py
+++ /dev/null
@@ -1,1223 +0,0 @@
-"""
-Tools for drawing Python object reference graphs with graphviz.
-
-You can find documentation online at https://mg.pov.lt/objgraph/
-
-Copyright (c) 2008-2017 Marius Gedminas and contributors
-
-Released under the MIT licence.
-"""
-# Permission is hereby granted, free of charge, to any person obtaining a
-# copy of this software and associated documentation files (the "Software"),
-# to deal in the Software without restriction, including without limitation
-# the rights to use, copy, modify, merge, publish, distribute, sublicense,
-# and/or sell copies of the Software, and to permit persons to whom the
-# Software is furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-# DEALINGS IN THE SOFTWARE.
-
-from __future__ import print_function
-
-import codecs
-import collections
-import gc
-import re
-import inspect
-import types
-import operator
-import os
-import subprocess
-import tempfile
-import sys
-import itertools
-
-try:
- # Python 2.x compatibility
- from StringIO import StringIO
-except ImportError:
- from io import StringIO
-
-try:
- from types import InstanceType
-except ImportError:
- # Python 3.x compatibility
- InstanceType = None
-
-
-__author__ = "Marius Gedminas (marius@gedmin.as)"
-__copyright__ = "Copyright (c) 2008-2017 Marius Gedminas and contributors"
-__license__ = "MIT"
-__version__ = '3.4.1.dev0'
-__date__ = '2018-02-13'
-
-
-try:
- basestring
-except NameError:
- # Python 3.x compatibility
- basestring = str
-
-try:
- iteritems = dict.iteritems
-except AttributeError:
- # Python 3.x compatibility
- iteritems = dict.items
-
-IS_INTERACTIVE = False
-try: # pragma: nocover
- import graphviz
- if get_ipython().__class__.__name__ != 'TerminalInteractiveShell':
- IS_INTERACTIVE = True
-except (NameError, ImportError):
- pass
-
-
-def _isinstance(object, classinfo):
- """Return whether an object is an instance of a class or its subclass.
-
- Differs from the builtin isinstance() implementation in that it does not
- depend on the ``__class__`` attribute which is proxied by
- mock.Mock(spec=...).
- """
- return issubclass(type(object), classinfo)
-
-
-def count(typename, objects=None):
- """Count objects tracked by the garbage collector with a given class name.
-
- The class name can optionally be fully qualified.
-
- Example:
-
- >>> count('dict')
- 42
- >>> count('mymodule.MyClass')
- 2
-
- .. note::
-
- The Python garbage collector does not track simple
- objects like int or str. See
- https://docs.python.org/3/library/gc.html#gc.is_tracked
- for more information.
-
- Instead of looking through all objects tracked by the GC, you may
- specify your own collection, e.g.
-
- >>> count('MyClass', get_leaking_objects())
- 3
-
- See also: :func:`get_leaking_objects`.
-
- .. versionchanged:: 1.7
- New parameter: ``objects``.
-
- .. versionchanged:: 1.8
- Accepts fully-qualified type names (i.e. 'package.module.ClassName')
- as well as short type names (i.e. 'ClassName').
-
- """
- if objects is None:
- objects = gc.get_objects()
- try:
- if '.' in typename:
- return sum(1 for o in objects if _long_typename(o) == typename)
- else:
- return sum(1 for o in objects if _short_typename(o) == typename)
- finally:
- del objects # clear cyclic references to frame
-
-
-def typestats(objects=None, shortnames=True, filter=None):
- """Count the number of instances for each type tracked by the GC.
-
- Note that the GC does not track simple objects like int or str.
-
- Note that classes with the same name but defined in different modules
- will be lumped together if ``shortnames`` is True.
-
- If ``filter`` is specified, it should be a function taking one argument and
- returning a boolean. Objects for which ``filter(obj)`` returns ``False``
- will be ignored.
-
- Example:
-
- >>> typestats()
- {'list': 12041, 'tuple': 10245, ...}
- >>> typestats(get_leaking_objects())
- {'MemoryError': 1, 'tuple': 2795, 'RuntimeError': 1, 'list': 47, ...}
-
- .. versionadded:: 1.1
-
- .. versionchanged:: 1.7
- New parameter: ``objects``.
-
- .. versionchanged:: 1.8
- New parameter: ``shortnames``.
-
- .. versionchanged:: 3.1.3
- New parameter: ``filter``.
-
- """
- if objects is None:
- objects = gc.get_objects()
- try:
- if shortnames:
- typename = _short_typename
- else:
- typename = _long_typename
- stats = {}
- for o in objects:
- if filter and not filter(o):
- continue
- n = typename(o)
- stats[n] = stats.get(n, 0) + 1
- return stats
- finally:
- del objects # clear cyclic references to frame
-
-
-def most_common_types(limit=10, objects=None, shortnames=True, filter=None):
- """Count the names of types with the most instances.
-
- Returns a list of (type_name, count), sorted most-frequent-first.
-
- Limits the return value to at most ``limit`` items. You may set ``limit``
- to None to avoid that.
-
- If ``filter`` is specified, it should be a function taking one argument and
- returning a boolean. Objects for which ``filter(obj)`` returns ``False``
- will be ignored.
-
- The caveats documented in :func:`typestats` apply.
-
- Example:
-
- >>> most_common_types(limit=2)
- [('list', 12041), ('tuple', 10245)]
-
- .. versionadded:: 1.4
-
- .. versionchanged:: 1.7
- New parameter: ``objects``.
-
- .. versionchanged:: 1.8
- New parameter: ``shortnames``.
-
- .. versionchanged:: 3.1.3
- New parameter: ``filter``.
-
- """
- stats = sorted(
- typestats(objects, shortnames=shortnames, filter=filter).items(),
- key=operator.itemgetter(1), reverse=True)
- if limit:
- stats = stats[:limit]
- return stats
-
-
-def show_most_common_types(
- limit=10,
- objects=None,
- shortnames=True,
- file=None,
- filter=None):
- """Print the table of types of most common instances.
-
- If ``filter`` is specified, it should be a function taking one argument and
- returning a boolean. Objects for which ``filter(obj)`` returns ``False``
- will be ignored.
-
- The caveats documented in :func:`typestats` apply.
-
- Example:
-
- >>> show_most_common_types(limit=5)
- tuple 8959
- function 2442
- wrapper_descriptor 1048
- dict 953
- builtin_function_or_method 800
-
- .. versionadded:: 1.1
-
- .. versionchanged:: 1.7
- New parameter: ``objects``.
-
- .. versionchanged:: 1.8
- New parameter: ``shortnames``.
-
- .. versionchanged:: 3.0
- New parameter: ``file``.
-
- .. versionchanged:: 3.1.3
- New parameter: ``filter``.
-
- """
- if file is None:
- file = sys.stdout
- stats = most_common_types(limit, objects, shortnames=shortnames,
- filter=filter)
- width = max(len(name) for name, count in stats)
- for name, count in stats:
- file.write('%-*s %i\n' % (width, name, count))
-
-
-def growth(limit=10, peak_stats={}, shortnames=True, filter=None):
- """Count the increase in peak object since last call.
-
- Returns a list of (type_name, total_count, increase_delta),
- descending order by increase_delta.
-
- Limits the output to ``limit`` largest deltas. You may set ``limit`` to
- None to see all of them.
-
- Uses and updates ``peak_stats``, a dictionary from type names to previously
- seen peak object counts. Usually you don't need to pay attention to this
- argument.
-
- If ``filter`` is specified, it should be a function taking one argument and
- returning a boolean. Objects for which ``filter(obj)`` returns ``False``
- will be ignored.
-
- The caveats documented in :func:`typestats` apply.
-
- Example:
-
- >>> growth(2)
- [(tuple, 12282, 10), (dict, 1922, 7)]
-
- .. versionadded:: 3.3.0
-
- """
- gc.collect()
- stats = typestats(shortnames=shortnames, filter=filter)
- deltas = {}
- for name, count in iteritems(stats):
- old_count = peak_stats.get(name, 0)
- if count > old_count:
- deltas[name] = count - old_count
- peak_stats[name] = count
- deltas = sorted(deltas.items(), key=operator.itemgetter(1),
- reverse=True)
- if limit:
- deltas = deltas[:limit]
-
- return [(name, stats[name], delta) for name, delta in deltas]
-
-
-def show_growth(limit=10, peak_stats=None, shortnames=True, file=None,
- filter=None):
- """Show the increase in peak object counts since last call.
-
- if ``peak_stats`` is None, peak object counts will recorded in
- func `growth`, and your can record the counts by yourself with set
- ``peak_stats`` to a dictionary.
-
- The caveats documented in :func:`growth` apply.
-
- Example:
-
- >>> show_growth()
- wrapper_descriptor 970 +14
- tuple 12282 +10
- dict 1922 +7
- ...
-
- .. versionadded:: 1.5
-
- .. versionchanged:: 1.8
- New parameter: ``shortnames``.
-
- .. versionchanged:: 2.1
- New parameter: ``file``.
-
- .. versionchanged:: 3.1.3
- New parameter: ``filter``.
-
- """
- if peak_stats is None:
- result = growth(limit, shortnames=shortnames, filter=filter)
- else:
- result = growth(limit, peak_stats, shortnames, filter)
- if result:
- if file is None:
- file = sys.stdout
- width = max(len(name) for name, _, _ in result)
- for name, count, delta in result:
- file.write('%-*s%9d %+9d\n' % (width, name, count, delta))
-
-
-def get_new_ids(skip_update=False, limit=10, sortby='deltas',
- shortnames=None, file=None, _state={}):
- """Find and display new objects allocated since last call.
-
- Shows the increase in object counts since last call to this
- function and returns the memory address ids for new objects.
-
- Returns a dictionary mapping object type names to sets of object IDs
- that have been created since the last time this function was called.
-
- ``skip_update`` (bool): If True, returns the same dictionary that
- was returned during the previous call without updating the internal
- state or examining the objects currently in memory.
-
- ``limit`` (int): The maximum number of rows that you want to print
- data for. Use 0 to suppress the printing. Use None to print everything.
-
- ``sortby`` (str): This is the column that you want to sort by in
- descending order. Possible values are: 'old', 'current', 'new',
- 'deltas'
-
- ``shortnames`` (bool): If True, classes with the same name but
- defined in different modules will be lumped together. If False,
- all type names will be qualified with the module name. If None (default),
- ``get_new_ids`` will remember the value from previous calls, so it's
- enough to prime this once. By default the primed value is True.
-
- ``_state`` (dict): Stores old, current, and new_ids in memory.
- It is used by the function to store the internal state between calls.
- Never pass in this argument unless you know what you're doing.
-
- The caveats documented in :func:`growth` apply.
-
- When one gets new_ids from :func:`get_new_ids`, one can use
- :func:`at_addrs` to get a list of those objects. Then one can iterate over
- the new objects, print out what they are, and call :func:`show_backrefs` or
- :func:`show_chain` to see where they are referenced.
-
- Example:
-
- >>> _ = get_new_ids() # store current objects in _state
- >>> _ = get_new_ids() # current_ids become old_ids in _state
- >>> a = [0, 1, 2] # list we don't know about
- >>> b = [3, 4, 5] # list we don't know about
- >>> new_ids = get_new_ids(limit=3) # we see new lists
- ======================================================================
- Type Old_ids Current_ids New_ids Count_Deltas
- ======================================================================
- list 324 326 +3 +2
- dict 1125 1125 +0 +0
- wrapper_descriptor 1001 1001 +0 +0
- ======================================================================
- >>> new_lists = at_addrs(new_ids['list'])
- >>> a in new_lists
- True
- >>> b in new_lists
- True
-
- .. versionadded:: 3.4
- """
- if not _state:
- _state['old'] = collections.defaultdict(set)
- _state['current'] = collections.defaultdict(set)
- _state['new'] = collections.defaultdict(set)
- _state['shortnames'] = True
- new_ids = _state['new']
- if skip_update:
- return new_ids
- old_ids = _state['old']
- current_ids = _state['current']
- if shortnames is None:
- shortnames = _state['shortnames']
- else:
- _state['shortnames'] = shortnames
- gc.collect()
- objects = gc.get_objects()
- for class_name in old_ids:
- old_ids[class_name].clear()
- for class_name, ids_set in current_ids.items():
- old_ids[class_name].update(ids_set)
- for class_name in current_ids:
- current_ids[class_name].clear()
- for o in objects:
- if shortnames:
- class_name = _short_typename(o)
- else:
- class_name = _long_typename(o)
- id_number = id(o)
- current_ids[class_name].add(id_number)
- for class_name in new_ids:
- new_ids[class_name].clear()
- rows = []
- keys_to_remove = []
- for class_name in current_ids:
- num_old = len(old_ids[class_name])
- num_current = len(current_ids[class_name])
- if num_old == 0 and num_current == 0:
- # remove the key from our dicts if we don't have any old or
- # current class_name objects
- keys_to_remove.append(class_name)
- continue
- new_ids_set = current_ids[class_name] - old_ids[class_name]
- new_ids[class_name].update(new_ids_set)
- num_new = len(new_ids_set)
- num_delta = num_current - num_old
- row = (class_name, num_old, num_current, num_new, num_delta)
- rows.append(row)
- for key in keys_to_remove:
- del old_ids[key]
- del current_ids[key]
- del new_ids[key]
- index_by_sortby = {'old': 1, 'current': 2, 'new': 3, 'deltas': 4}
- rows.sort(key=operator.itemgetter(index_by_sortby[sortby], 0),
- reverse=True)
- if limit is not None:
- rows = rows[:limit]
- if not rows:
- return new_ids
- if file is None:
- file = sys.stdout
- width = max(len(row[0]) for row in rows)
- print('='*(width+13*4), file=file)
- print('%-*s%13s%13s%13s%13s' %
- (width, 'Type', 'Old_ids', 'Current_ids', 'New_ids', 'Count_Deltas'),
- file=file)
- print('='*(width+13*4), file=file)
- for row_class, old, current, new, delta in rows:
- print('%-*s%13d%13d%+13d%+13d' %
- (width, row_class, old, current, new, delta), file=file)
- print('='*(width+13*4), file=file)
- return new_ids
-
-
-def get_leaking_objects(objects=None):
- """Return objects that do not have any referents.
-
- These could indicate reference-counting bugs in C code. Or they could
- be legitimate.
-
- Note that the GC does not track simple objects like int or str.
-
- .. versionadded:: 1.7
- """
- if objects is None:
- gc.collect()
- objects = gc.get_objects()
- try:
- ids = set(id(i) for i in objects)
- for i in objects:
- ids.difference_update(id(j) for j in gc.get_referents(i))
- # this then is our set of objects without referrers
- return [i for i in objects if id(i) in ids]
- finally:
- del objects, i # clear cyclic references to frame
-
-
-def by_type(typename, objects=None):
- """Return objects tracked by the garbage collector with a given class name.
-
- Example:
-
- >>> by_type('MyClass')
- []
-
- Note that the GC does not track simple objects like int or str.
-
- .. versionchanged:: 1.7
- New parameter: ``objects``.
-
- .. versionchanged:: 1.8
- Accepts fully-qualified type names (i.e. 'package.module.ClassName')
- as well as short type names (i.e. 'ClassName').
-
- """
- if objects is None:
- objects = gc.get_objects()
- try:
- if '.' in typename:
- return [o for o in objects if _long_typename(o) == typename]
- else:
- return [o for o in objects if _short_typename(o) == typename]
- finally:
- del objects # clear cyclic references to frame
-
-
-def at(addr):
- """Return an object at a given memory address.
-
- The reverse of id(obj):
-
- >>> at(id(obj)) is obj
- True
-
- Note that this function does not work on objects that are not tracked by
- the GC (e.g. ints or strings).
- """
- for o in gc.get_objects():
- if id(o) == addr:
- return o
- return None
-
-
-def at_addrs(address_set):
- """Return a list of objects for a given set of memory addresses.
-
- The reverse of [id(obj1), id(obj2), ...]. Note that objects are returned
- in an arbitrary order.
-
- When one gets ``new_ids`` from :func:`get_new_ids`, one can use this
- function to get a list of those objects. Then one can iterate over the new
- objects, print out what they are, and call :func:`show_backrefs` or
- :func:`show_chain` to see where they are referenced.
-
- >>> a = [0, 1, 2]
- >>> new_ids = get_new_ids()
- >>> new_lists = at_addrs(new_ids['list'])
- >>> a in new_lists
- True
-
- Note that this function does not work on objects that are not tracked
- by the GC (e.g. ints or strings).
-
- .. versionadded:: 3.4
- """
- res = []
- for o in gc.get_objects():
- if id(o) in address_set:
- res.append(o)
- return res
-
-
-def find_ref_chain(obj, predicate, max_depth=20, extra_ignore=()):
- """Find a shortest chain of references leading from obj.
-
- The end of the chain will be some object that matches your predicate.
-
- ``predicate`` is a function taking one argument and returning a boolean.
-
- ``max_depth`` limits the search depth.
-
- ``extra_ignore`` can be a list of object IDs to exclude those objects from
- your search.
-
- Example:
-
- >>> find_ref_chain(obj, lambda x: isinstance(x, MyClass))
- [obj, ..., ]
-
- Returns ``[obj]`` if such a chain could not be found.
-
- .. versionadded:: 1.7
- """
- return _find_chain(obj, predicate, gc.get_referents,
- max_depth=max_depth, extra_ignore=extra_ignore)[::-1]
-
-
-def find_backref_chain(obj, predicate, max_depth=20, extra_ignore=()):
- """Find a shortest chain of references leading to obj.
-
- The start of the chain will be some object that matches your predicate.
-
- ``predicate`` is a function taking one argument and returning a boolean.
-
- ``max_depth`` limits the search depth.
-
- ``extra_ignore`` can be a list of object IDs to exclude those objects from
- your search.
-
- Example:
-
- >>> find_backref_chain(obj, is_proper_module)
- [, ..., obj]
-
- Returns ``[obj]`` if such a chain could not be found.
-
- .. versionchanged:: 1.5
- Returns ``obj`` instead of ``None`` when a chain could not be found.
-
- """
- return _find_chain(obj, predicate, gc.get_referrers,
- max_depth=max_depth, extra_ignore=extra_ignore)
-
-
-def show_backrefs(objs, max_depth=3, extra_ignore=(), filter=None, too_many=10,
- highlight=None, filename=None, extra_info=None,
- refcounts=False, shortnames=True, output=None):
- """Generate an object reference graph ending at ``objs``.
-
- The graph will show you what objects refer to ``objs``, directly and
- indirectly.
-
- ``objs`` can be a single object, or it can be a list of objects. If
- unsure, wrap the single object in a new list.
-
- ``filename`` if specified, can be the name of a .dot or a image
- file, whose extension indicates the desired output format; note
- that output to a specific format is entirely handled by GraphViz:
- if the desired format is not supported, you just get the .dot
- file. If ``filename`` and ``output`` are not specified, ``show_backrefs``
- will try to display the graph inline (if you're using IPython), otherwise
- it'll try to produce a .dot file and spawn a viewer (xdot). If xdot is
- not available, ``show_backrefs`` will convert the .dot file to a
- .png and print its name.
-
- ``output`` if specified, the GraphViz output will be written to this
- file object. ``output`` and ``filename`` should not both be specified.
-
- Use ``max_depth`` and ``too_many`` to limit the depth and breadth of the
- graph.
-
- Use ``filter`` (a predicate) and ``extra_ignore`` (a list of object IDs) to
- remove undesired objects from the graph.
-
- Use ``highlight`` (a predicate) to highlight certain graph nodes in blue.
-
- Use ``extra_info`` (a function taking one argument and returning a
- string) to report extra information for objects.
-
- Specify ``refcounts=True`` if you want to see reference counts.
- These will mostly match the number of arrows pointing to an object,
- but can be different for various reasons.
-
- Specify ``shortnames=False`` if you want to see fully-qualified type
- names ('package.module.ClassName'). By default you get to see only the
- class name part.
-
- Examples:
-
- >>> show_backrefs(obj)
- >>> show_backrefs([obj1, obj2])
- >>> show_backrefs(obj, max_depth=5)
- >>> show_backrefs(obj, filter=lambda x: not inspect.isclass(x))
- >>> show_backrefs(obj, highlight=inspect.isclass)
- >>> show_backrefs(obj, extra_ignore=[id(locals())])
-
- .. versionchanged:: 1.3
- New parameters: ``filename``, ``extra_info``.
-
- .. versionchanged:: 1.5
- New parameter: ``refcounts``.
-
- .. versionchanged:: 1.8
- New parameter: ``shortnames``.
-
- .. versionchanged:: 2.0
- New parameter: ``output``.
-
- """
- # For show_backrefs(), it makes sense to stop when reaching a
- # module because you'll end up in sys.modules and explode the
- # graph with useless clutter. That's why we're specifying
- # cull_func here, but not in show_graph().
- return _show_graph(objs, max_depth=max_depth, extra_ignore=extra_ignore,
- filter=filter, too_many=too_many, highlight=highlight,
- edge_func=gc.get_referrers, swap_source_target=False,
- filename=filename, output=output, extra_info=extra_info,
- refcounts=refcounts, shortnames=shortnames,
- cull_func=is_proper_module)
-
-
-def show_refs(objs, max_depth=3, extra_ignore=(), filter=None, too_many=10,
- highlight=None, filename=None, extra_info=None,
- refcounts=False, shortnames=True, output=None):
- """Generate an object reference graph starting at ``objs``.
-
- The graph will show you what objects are reachable from ``objs``, directly
- and indirectly.
-
- ``objs`` can be a single object, or it can be a list of objects. If
- unsure, wrap the single object in a new list.
-
- ``filename`` if specified, can be the name of a .dot or a image
- file, whose extension indicates the desired output format; note
- that output to a specific format is entirely handled by GraphViz:
- if the desired format is not supported, you just get the .dot
- file. If ``filename`` and ``output`` is not specified, ``show_refs`` will
- try to display the graph inline (if you're using IPython), otherwise it'll
- try to produce a .dot file and spawn a viewer (xdot). If xdot is
- not available, ``show_refs`` will convert the .dot file to a
- .png and print its name.
-
- ``output`` if specified, the GraphViz output will be written to this
- file object. ``output`` and ``filename`` should not both be specified.
-
- Use ``max_depth`` and ``too_many`` to limit the depth and breadth of the
- graph.
-
- Use ``filter`` (a predicate) and ``extra_ignore`` (a list of object IDs) to
- remove undesired objects from the graph.
-
- Use ``highlight`` (a predicate) to highlight certain graph nodes in blue.
-
- Use ``extra_info`` (a function returning a string) to report extra
- information for objects.
-
- Specify ``refcounts=True`` if you want to see reference counts.
-
- Examples:
-
- >>> show_refs(obj)
- >>> show_refs([obj1, obj2])
- >>> show_refs(obj, max_depth=5)
- >>> show_refs(obj, filter=lambda x: not inspect.isclass(x))
- >>> show_refs(obj, highlight=inspect.isclass)
- >>> show_refs(obj, extra_ignore=[id(locals())])
-
- .. versionadded:: 1.1
-
- .. versionchanged:: 1.3
- New parameters: ``filename``, ``extra_info``.
-
- .. versionchanged:: 1.5
- Follows references from module objects instead of stopping.
- New parameter: ``refcounts``.
-
- .. versionchanged:: 1.8
- New parameter: ``shortnames``.
-
- .. versionchanged:: 2.0
- New parameter: ``output``.
- """
- return _show_graph(objs, max_depth=max_depth, extra_ignore=extra_ignore,
- filter=filter, too_many=too_many, highlight=highlight,
- edge_func=gc.get_referents, swap_source_target=True,
- filename=filename, extra_info=extra_info,
- refcounts=refcounts, shortnames=shortnames,
- output=output)
-
-
-def show_chain(*chains, **kw):
- """Show a chain (or several chains) of object references.
-
- Useful in combination with :func:`find_ref_chain` or
- :func:`find_backref_chain`, e.g.
-
- >>> show_chain(find_backref_chain(obj, is_proper_module))
-
- You can specify if you want that chain traced backwards or forwards
- by passing a ``backrefs`` keyword argument, e.g.
-
- >>> show_chain(find_ref_chain(obj, is_proper_module),
- ... backrefs=False)
-
- Ideally this shouldn't matter, but for some objects
- :func:`gc.get_referrers` and :func:`gc.get_referents` are not perfectly
- symmetrical.
-
- You can specify ``highlight``, ``extra_info``, ``refcounts``,
- ``shortnames``, ``filename`` or ``output`` arguments like for
- :func:`show_backrefs` or :func:`show_refs`.
-
- .. versionadded:: 1.5
-
- .. versionchanged:: 1.7
- New parameter: ``backrefs``.
-
- .. versionchanged:: 2.0
- New parameter: ``output``.
-
- """
- backrefs = kw.pop('backrefs', True)
- chains = [chain for chain in chains if chain] # remove empty ones
-
- def in_chains(x, ids=set(map(id, itertools.chain(*chains)))):
- return id(x) in ids
- max_depth = max(map(len, chains)) - 1
- if backrefs:
- show_backrefs([chain[-1] for chain in chains], max_depth=max_depth,
- filter=in_chains, **kw)
- else:
- show_refs([chain[0] for chain in chains], max_depth=max_depth,
- filter=in_chains, **kw)
-
-
-def is_proper_module(obj):
- """
- Returns ``True`` if ``obj`` can be treated like a garbage collector root.
-
- That is, if ``obj`` is a module that is in ``sys.modules``.
-
- >>> import types
- >>> is_proper_module([])
- False
- >>> is_proper_module(types)
- True
- >>> is_proper_module(types.ModuleType('foo'))
- False
-
- .. versionadded:: 1.8
- """
- return (
- inspect.ismodule(obj)
- and obj is sys.modules.get(getattr(obj, '__name__', None))
- )
-
-
-#
-# Internal helpers
-#
-
-def _find_chain(obj, predicate, edge_func, max_depth=20, extra_ignore=()):
- queue = [obj]
- depth = {id(obj): 0}
- parent = {id(obj): None}
- ignore = set(extra_ignore)
- ignore.add(id(extra_ignore))
- ignore.add(id(queue))
- ignore.add(id(depth))
- ignore.add(id(parent))
- ignore.add(id(ignore))
- ignore.add(id(sys._getframe())) # this function
- ignore.add(id(sys._getframe(1))) # find_chain/find_backref_chain
- gc.collect()
- while queue:
- target = queue.pop(0)
- if predicate(target):
- chain = [target]
- while parent[id(target)] is not None:
- target = parent[id(target)]
- chain.append(target)
- return chain
- tdepth = depth[id(target)]
- if tdepth < max_depth:
- referrers = edge_func(target)
- ignore.add(id(referrers))
- for source in referrers:
- if id(source) in ignore:
- continue
- if id(source) not in depth:
- depth[id(source)] = tdepth + 1
- parent[id(source)] = target
- queue.append(source)
- return [obj] # not found
-
-
-def _show_graph(objs, edge_func, swap_source_target,
- max_depth=3, extra_ignore=(), filter=None, too_many=10,
- highlight=None, filename=None, extra_info=None,
- refcounts=False, shortnames=True, output=None,
- cull_func=None):
- if not _isinstance(objs, (list, tuple)):
- objs = [objs]
-
- is_interactive = False
- if filename and output:
- raise ValueError('Cannot specify both output and filename.')
- elif output:
- f = output
- elif filename and filename.endswith('.dot'):
- f = codecs.open(filename, 'w', encoding='utf-8')
- dot_filename = filename
- elif IS_INTERACTIVE:
- is_interactive = True
- f = StringIO()
- else:
- fd, dot_filename = tempfile.mkstemp(prefix='objgraph-',
- suffix='.dot', text=True)
- f = os.fdopen(fd, "w")
- if getattr(f, 'encoding', None):
- # Python 3 will wrap the file in the user's preferred encoding
- # Re-wrap it for utf-8
- import io
- f = io.TextIOWrapper(f.detach(), 'utf-8')
- f.write('digraph ObjectGraph {\n'
- ' node[shape=box, style=filled, fillcolor=white];\n')
- queue = []
- depth = {}
- ignore = set(extra_ignore)
- ignore.add(id(objs))
- ignore.add(id(extra_ignore))
- ignore.add(id(queue))
- ignore.add(id(depth))
- ignore.add(id(ignore))
- ignore.add(id(sys._getframe())) # this function
- ignore.add(id(sys._getframe().f_locals))
- ignore.add(id(sys._getframe(1))) # show_refs/show_backrefs
- ignore.add(id(sys._getframe(1).f_locals))
- for obj in objs:
- f.write(' %s[fontcolor=red];\n' % (_obj_node_id(obj)))
- depth[id(obj)] = 0
- queue.append(obj)
- del obj
- gc.collect()
- nodes = 0
- while queue:
- nodes += 1
- # The names "source" and "target" are reversed here because
- # originally there was just show_backrefs() and we were
- # traversing the reference graph backwards.
- target = queue.pop(0)
- tdepth = depth[id(target)]
- f.write(' %s[label="%s"];\n' % (_obj_node_id(target),
- _obj_label(target, extra_info,
- refcounts, shortnames)))
- h, s, v = _gradient((0, 0, 1), (0, 0, .3), tdepth, max_depth)
- if inspect.ismodule(target):
- h = .3
- s = 1
- if highlight and highlight(target):
- h = .6
- s = .6
- v = 0.5 + v * 0.5
- f.write(' %s[fillcolor="%g,%g,%g"];\n'
- % (_obj_node_id(target), h, s, v))
- if v < 0.5:
- f.write(' %s[fontcolor=white];\n' % (_obj_node_id(target)))
- if hasattr(getattr(target, '__class__', None), '__del__'):
- f.write(' %s->%s_has_a_del[color=red,style=dotted,'
- 'len=0.25,weight=10];\n' % (_obj_node_id(target),
- _obj_node_id(target)))
- f.write(' %s_has_a_del[label="__del__",shape=doublecircle,'
- 'height=0.25,color=red,fillcolor="0,.5,1",fontsize=6];\n'
- % (_obj_node_id(target)))
- if tdepth >= max_depth:
- continue
- if cull_func is not None and cull_func(target):
- continue
- neighbours = edge_func(target)
- ignore.add(id(neighbours))
- n = 0
- skipped = 0
- for source in neighbours:
- if id(source) in ignore:
- continue
- if filter and not filter(source):
- continue
- if n >= too_many:
- skipped += 1
- continue
- if swap_source_target:
- srcnode, tgtnode = target, source
- else:
- srcnode, tgtnode = source, target
- elabel = _edge_label(srcnode, tgtnode, shortnames)
- f.write(' %s -> %s%s;\n' % (_obj_node_id(srcnode),
- _obj_node_id(tgtnode), elabel))
- if id(source) not in depth:
- depth[id(source)] = tdepth + 1
- queue.append(source)
- n += 1
- del source
- del neighbours
- if skipped > 0:
- h, s, v = _gradient((0, 1, 1), (0, 1, .3), tdepth + 1, max_depth)
- if swap_source_target:
- label = "%d more references" % skipped
- edge = "%s->too_many_%s" % (_obj_node_id(target),
- _obj_node_id(target))
- else:
- label = "%d more backreferences" % skipped
- edge = "too_many_%s->%s" % (_obj_node_id(target),
- _obj_node_id(target))
- f.write(' %s[color=red,style=dotted,len=0.25,weight=10];\n'
- % edge)
- f.write(' too_many_%s[label="%s",shape=box,height=0.25,'
- 'color=red,fillcolor="%g,%g,%g",fontsize=6];\n'
- % (_obj_node_id(target), label, h, s, v))
- f.write(' too_many_%s[fontcolor=white];\n'
- % (_obj_node_id(target)))
- f.write("}\n")
-
- if output:
- return
-
- if is_interactive:
- return graphviz.Source(f.getvalue())
- else:
- # The file should only be closed if this function was in charge of
- # opening the file.
- f.close()
- print("Graph written to %s (%d nodes)" % (dot_filename, nodes))
- _present_graph(dot_filename, filename)
-
-
-def _present_graph(dot_filename, filename=None):
- """Present a .dot file to the user in the requested fashion.
-
- If ``filename`` is provided, runs ``dot`` to convert the .dot file
- into the desired format, determined by the filename extension.
-
- If ``filename`` is not provided, tries to launch ``xdot``, a
- graphical .dot file viewer. If ``xdot`` is not present on the system,
- converts the graph to a PNG.
- """
- if filename == dot_filename:
- # nothing to do, the user asked for a .dot file and got it
- return
- if not filename and _program_in_path('xdot'):
- print("Spawning graph viewer (xdot)")
- subprocess.Popen(['xdot', dot_filename], close_fds=True)
- elif _program_in_path('dot'):
- if not filename:
- print("Graph viewer (xdot) not found, generating a png instead")
- filename = dot_filename[:-4] + '.png'
- stem, ext = os.path.splitext(filename)
- cmd = ['dot', '-T' + ext[1:], '-o' + filename, dot_filename]
- dot = subprocess.Popen(cmd, close_fds=False)
- dot.wait()
- if dot.returncode != 0:
- # XXX: shouldn't this go to stderr or a log?
- print('dot failed (exit code %d) while executing "%s"'
- % (dot.returncode, ' '.join(cmd)))
- else:
- print("Image generated as %s" % filename)
- else:
- if not filename:
- print("Graph viewer (xdot) and image renderer (dot) not found,"
- " not doing anything else")
- else:
- print("Image renderer (dot) not found, not doing anything else")
-
-
-def _obj_node_id(obj):
- return ('o%d' % id(obj)).replace('-', '_')
-
-
-def _obj_label(obj, extra_info=None, refcounts=False, shortnames=True):
- if shortnames:
- label = [_short_typename(obj)]
- else:
- label = [_long_typename(obj)]
- if refcounts:
- label[0] += ' [%d]' % (sys.getrefcount(obj) - 4)
- # Why -4? To ignore the references coming from
- # obj_label's frame (obj)
- # show_graph's frame (target variable)
- # sys.getrefcount()'s argument
- # something else that doesn't show up in gc.get_referrers()
- label.append(_safe_repr(obj))
- if extra_info:
- label.append(str(extra_info(obj)))
- return _quote('\n'.join(label))
-
-
-def _quote(s):
- return (s.replace("\\", "\\\\")
- .replace("\"", "\\\"")
- .replace("\n", "\\n")
- .replace("\0", "\\\\0"))
-
-
-def _get_obj_type(obj):
- objtype = type(obj)
- if type(obj) == InstanceType:
- objtype = obj.__class__
- return objtype
-
-
-def _short_typename(obj):
- return _get_obj_type(obj).__name__
-
-
-def _long_typename(obj):
- objtype = _get_obj_type(obj)
- name = objtype.__name__
- module = getattr(objtype, '__module__', None)
- if module:
- return '%s.%s' % (module, name)
- else:
- return name
-
-
-def _safe_repr(obj):
- try:
- return _short_repr(obj)
- except Exception:
- return '(unrepresentable)'
-
-
-def _name_or_repr(value):
- try:
- result = value.__name__
- except AttributeError:
- result = repr(value)[:40]
-
- if _isinstance(result, basestring):
- return result
- else:
- return repr(value)[:40]
-
-
-def _short_repr(obj):
- if _isinstance(obj, (type, types.ModuleType, types.BuiltinMethodType,
- types.BuiltinFunctionType)):
- return _name_or_repr(obj)
- if _isinstance(obj, types.MethodType):
- name = _name_or_repr(obj.__func__)
- if obj.__self__:
- return name + ' (bound)'
- else:
- return name
- # NB: types.LambdaType is an alias for types.FunctionType!
- if _isinstance(obj, types.LambdaType) and obj.__name__ == '':
- return 'lambda: %s:%s' % (os.path.basename(obj.__code__.co_filename),
- obj.__code__.co_firstlineno)
- if _isinstance(obj, types.FrameType):
- return '%s:%s' % (obj.f_code.co_filename, obj.f_lineno)
- if _isinstance(obj, (tuple, list, dict, set)):
- return '%d items' % len(obj)
- return repr(obj)[:40]
-
-
-def _gradient(start_color, end_color, depth, max_depth):
- if max_depth == 0:
- # avoid division by zero
- return start_color
- h1, s1, v1 = start_color
- h2, s2, v2 = end_color
- f = float(depth) / max_depth
- h = h1 * (1-f) + h2 * f
- s = s1 * (1-f) + s2 * f
- v = v1 * (1-f) + v2 * f
- return h, s, v
-
-
-def _edge_label(source, target, shortnames=True):
- if (_isinstance(target, dict)
- and target is getattr(source, '__dict__', None)):
- return ' [label="__dict__",weight=10]'
- if _isinstance(source, types.FrameType):
- if target is source.f_locals:
- return ' [label="f_locals",weight=10]'
- if target is source.f_globals:
- return ' [label="f_globals",weight=10]'
- if _isinstance(source, types.MethodType):
- try:
- if target is source.__self__:
- return ' [label="__self__",weight=10]'
- if target is source.__func__:
- return ' [label="__func__",weight=10]'
- except AttributeError: # pragma: nocover
- # Python < 2.6 compatibility
- if target is source.im_self:
- return ' [label="im_self",weight=10]'
- if target is source.im_func:
- return ' [label="im_func",weight=10]'
- if _isinstance(source, types.FunctionType):
- for k in dir(source):
- if target is getattr(source, k):
- return ' [label="%s",weight=10]' % _quote(k)
- if _isinstance(source, dict):
- for k, v in iteritems(source):
- if v is target:
- if _isinstance(k, basestring) and _is_identifier(k):
- return ' [label="%s",weight=2]' % _quote(k)
- else:
- if shortnames:
- tn = _short_typename(k)
- else:
- tn = _long_typename(k)
- return ' [label="%s"]' % _quote(tn + "\n" + _safe_repr(k))
- return ''
-
-
-_is_identifier = re.compile('[a-zA-Z_][a-zA-Z_0-9]*$').match
-
-
-def _program_in_path(program):
- # XXX: Consider using distutils.spawn.find_executable or shutil.which
- path = os.environ.get("PATH", os.defpath).split(os.pathsep)
- path = [os.path.join(dir, program) for dir in path]
- path = [True for file in path
- if os.path.isfile(file) or os.path.isfile(file + '.exe')]
- return bool(path)
diff --git a/src/py/bbctrl/State.py b/src/py/bbctrl/State.py
index 888d05e..89badcc 100644
--- a/src/py/bbctrl/State.py
+++ b/src/py/bbctrl/State.py
@@ -123,8 +123,6 @@ class State(object):
if not os.path.exists(upload):
os.mkdir(upload)
- from shutil import copy
- copy(bbctrl.get_resource('http/buildbotics.nc'), upload)
for path in os.listdir(upload):
if os.path.isfile(upload + '/' + path):
diff --git a/src/py/bbctrl/__init__.py b/src/py/bbctrl/__init__.py
index c5cae69..3b5c03f 100644
--- a/src/py/bbctrl/__init__.py
+++ b/src/py/bbctrl/__init__.py
@@ -1,33 +1,5 @@
#!/usr/bin/env python3
-################################################################################
-# #
-# This file is part of the Buildbotics firmware. #
-# #
-# Copyright (c) 2015 - 2018, Buildbotics LLC #
-# All rights reserved. #
-# #
-# This file ("the software") is free software: you can redistribute it #
-# and/or modify it under the terms of the GNU General Public License, #
-# version 2 as published by the Free Software Foundation. You should #
-# have received a copy of the GNU General Public License, version 2 #
-# along with the software. If not, see . #
-# #
-# The software is distributed in the hope that it will be useful, but #
-# WITHOUT ANY WARRANTY; without even the implied warranty of #
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU #
-# Lesser General Public License for more details. #
-# #
-# You should have received a copy of the GNU Lesser General Public #
-# License along with the software. If not, see #
-# . #
-# #
-# For information regarding this software email: #
-# "Joseph Coffland" #
-# #
-################################################################################
-
-import os
import sys
import signal
import tornado
@@ -53,13 +25,11 @@ from bbctrl.Comm import Comm
from bbctrl.CommandQueue import CommandQueue
from bbctrl.Camera import Camera, VideoHandler
from bbctrl.AVR import AVR
-from bbctrl.AVREmu import AVREmu
from bbctrl.IOLoop import IOLoop
from bbctrl.MonitorTemp import MonitorTemp
import bbctrl.Cmd as Cmd
import bbctrl.v4l2 as v4l2
import bbctrl.Log as log
-import bbctrl.ObjGraph as ObjGraph
ctrl = None
@@ -69,7 +39,7 @@ def get_resource(path):
return resource_filename(Requirement.parse('bbctrl'), 'bbctrl/' + path)
-def on_exit(sig = 0, func = None):
+def on_exit(sig=0, func=None):
global ctrl
print('Exit handler triggered: signal = %d', sig)
@@ -85,76 +55,46 @@ def time_str():
return datetime.datetime.now().strftime('%Y%m%d-%H:%M:%S')
-
-class Debugger:
- def __init__(self, ioloop, freq = 60 * 15, depth = 100):
- self.ioloop = ioloop
- self.freq = freq
- self.depth = depth
- self._callback()
-
-
- def _callback(self):
- with open('bbctrl-debug-%s.log' % time_str(), 'w') as log:
- def line(name):
- log.write('==== ' + name + ' ' + '=' * (74 - len(name)) + '\n')
-
- line('Common')
- ObjGraph.show_most_common_types(limit = self.depth, file = log)
-
- log.write('\n')
- line('Growth')
- ObjGraph.show_growth(limit = self.depth, file = log)
-
- log.write('\n')
- line('New IDs')
- ObjGraph.get_new_ids(limit = self.depth, file = log)
-
- log.flush()
- self.ioloop.call_later(self.freq, self._callback)
-
-
-
def parse_args():
parser = argparse.ArgumentParser(
- description = 'Buildbotics Machine Controller')
+ description='Buildbotics Machine Controller')
- parser.add_argument('-p', '--port', default = 80,
- type = int, help = 'HTTP port')
- parser.add_argument('-a', '--addr', metavar = 'IP', default = '0.0.0.0',
- help = 'HTTP address to bind')
- parser.add_argument('-s', '--serial', default = '/dev/ttyAMA0',
- help = 'Serial device')
- parser.add_argument('-b', '--baud', default = 230400, type = int,
- help = 'Serial baud rate')
- parser.add_argument('--i2c-port', default = 1, type = int,
- help = 'I2C port')
- parser.add_argument('--avr-addr', default = 0x2b, type = int,
- help = 'AVR I2C address')
- parser.add_argument('--pwr-addr', default = 0x60, type = int,
- help = 'Power AVR I2C address')
- parser.add_argument('-v', '--verbose', action = 'store_true',
- help = 'Verbose output')
- parser.add_argument('-l', '--log', metavar = "FILE",
- help = 'Set a log file')
- parser.add_argument('--disable-camera', action = 'store_true',
- help = 'Disable the camera')
- parser.add_argument('--width', default = 640, type = int,
- help = 'Camera width')
- parser.add_argument('--height', default = 480, type = int,
- help = 'Camera height')
- parser.add_argument('--fps', default = 15, type = int,
- help = 'Camera frames per second')
- parser.add_argument('--camera-clients', default = 4,
- help = 'Maximum simultaneous camera clients')
- parser.add_argument('--demo', action = 'store_true',
- help = 'Enter demo mode')
- parser.add_argument('--debug', default = 0, type = int,
- help = 'Enable debug mode and set frequency in seconds')
- parser.add_argument('--fast-emu', action = 'store_true',
- help = 'Enter demo mode')
- parser.add_argument('--client-timeout', default = 5 * 60, type = int,
- help = 'Demo client timeout in seconds')
+ parser.add_argument('-p', '--port', default=80,
+ type=int, help='HTTP port')
+ parser.add_argument('-a', '--addr', metavar='IP', default='0.0.0.0',
+ help='HTTP address to bind')
+ parser.add_argument('-s', '--serial', default='/dev/ttyAMA0',
+ help='Serial device')
+ parser.add_argument('-b', '--baud', default=230400, type=int,
+ help='Serial baud rate')
+ parser.add_argument('--i2c-port', default=1, type=int,
+ help='I2C port')
+ parser.add_argument('--avr-addr', default=0x2b, type=int,
+ help='AVR I2C address')
+ parser.add_argument('--pwr-addr', default=0x60, type=int,
+ help='Power AVR I2C address')
+ parser.add_argument('-v', '--verbose', action='store_true',
+ help='Verbose output')
+ parser.add_argument('-l', '--log', metavar="FILE",
+ help='Set a log file')
+ parser.add_argument('--disable-camera', action='store_true',
+ help='Disable the camera')
+ parser.add_argument('--width', default=640, type=int,
+ help='Camera width')
+ parser.add_argument('--height', default=480, type=int,
+ help='Camera height')
+ parser.add_argument('--fps', default=15, type=int,
+ help='Camera frames per second')
+ parser.add_argument('--camera-clients', default=4,
+ help='Maximum simultaneous camera clients')
+ parser.add_argument('--demo', action='store_true',
+ help='Enter demo mode')
+ parser.add_argument('--debug', default=0, type=int,
+ help='Enable debug mode and set frequency in seconds')
+ parser.add_argument('--fast-emu', action='store_true',
+ help='Enter demo mode')
+ parser.add_argument('--client-timeout', default=5 * 60, type=int,
+ help='Demo client timeout in seconds')
return parser.parse_args()
@@ -170,16 +110,15 @@ def run():
# Create ioloop
ioloop = tornado.ioloop.IOLoop.current()
- # Set ObjGraph signal handler
- if args.debug: Debugger(ioloop, args.debug)
-
# Start server
web = Web(args, ioloop)
try:
ioloop.start()
- except KeyboardInterrupt: on_exit()
+ except KeyboardInterrupt:
+ on_exit()
-if __name__ == '__main__': run()
+if __name__ == '__main__':
+ run()
diff --git a/src/resources/buildbotics.nc b/src/resources/buildbotics.nc
deleted file mode 100644
index 8c5ddb0..0000000
--- a/src/resources/buildbotics.nc
+++ /dev/null
@@ -1,403 +0,0 @@
-G21
-(File: 'buildbotics_logo.tpl')
-G0 Z3
-F1600
-M3 S10000
-M6 T2
-G0 X59.25 Y5.85
-G1 Z-1.5
-G1 X61.68 Y6.7
-G1 X63.86 Y8.07
-G1 X65.68 Y9.89
-G1 X67.05 Y12.07
-G1 X67.9 Y14.5
-G1 X68.2 Y17.09
-G1 Y56.6
-G1 X67.73 Y59.04
-G1 X50.8
-G1 Y34.9
-G1 X50.65 Y34.55
-G1 X50.3 Y34.4
-G1 X23.46
-G1 X23.1 Y34.55
-G1 X22.96 Y34.9
-G1 X22.98 Y49.88
-G1 X22.96 Y59.05
-G1 X22.41
-G1 X19.26
-G1 X6.04
-G1 X5.56 Y56.53
-G1 Y17.09
-G1 X5.85 Y14.5
-G1 X6.7 Y12.07
-G1 X8.07 Y9.89
-G1 X9.89 Y8.07
-G1 X12.07 Y6.7
-G1 X14.5 Y5.85
-G1 X17.09 Y5.56
-G1 X56.67
-G1 X59.25 Y5.85
-G0 Z3
-G0 X64.26 Y64.72
-G1 Z-1.5
-G1 X61.78 Y66.52
-G1 X58.91 Y67.68
-G1 X56.54 Y68.08
-G1 X17.22
-G1 X14.84 Y67.68
-G1 X11.97 Y66.52
-G1 X9.49 Y64.72
-G1 X8.08 Y63.16
-G1 X27.35
-G1 X27.89 Y63.45
-G1 X27.96 Y63.48
-G1 X31.48 Y64.75
-G1 X31.52 Y64.76
-G1 X31.56 Y64.77
-G1 X35.19 Y65.41
-G1 X35.26
-G1 X35.97 Y65.44
-G1 X36.04 Y65.45
-G1 X36.07
-G1 X36.82 Y65.44
-G1 X36.83
-G1 X36.89
-G1 X36.95
-G1 X36.97
-G1 X37.72 Y65.43
-G1 X37.74
-G1 X37.8
-G1 X37.81
-G1 X37.88
-G1 X37.89
-G1 X38.65 Y65.38
-G1 X38.68
-G1 X38.75 Y65.37
-G1 X39.38 Y65.32
-G1 X39.44 Y65.31
-G1 X42.68 Y64.64
-G1 X42.76 Y64.62
-G1 X45.87 Y63.44
-G1 X45.93 Y63.41
-G1 X46.4 Y63.16
-G1 X65.67
-G1 X64.26 Y64.72
-G0 Z3
-G0 X36.88 Y9.4
-G1 Z-1.5
-G1 X37.31 Y9.64
-G1 X39.58 Y13.48
-G1 X39.63 Y13.6
-G1 X39.65 Y13.73
-G1 Y27.54
-G1 X41.67
-G1 Y25.39
-G1 X41.75 Y25.12
-G1 X41.97 Y24.93
-G1 X46.41 Y22.92
-G1 Y19.97
-G1 X45.44
-G1 X45.08 Y19.82
-G1 X44.94 Y19.47
-G1 Y13.73
-G1 X45.08 Y13.38
-G1 X45.44 Y13.23
-G1 X49.94 Y13.24
-G1 X50.29 Y13.39
-G1 X50.44 Y13.74
-G1 Y19.47
-G1 X50.29 Y19.83
-G1 X49.93 Y19.97
-G1 X48.92
-G1 Y23.61
-G1 X48.84 Y23.88
-G1 X48.63 Y24.06
-G1 X44.19 Y26.12
-G1 Y27.54
-G1 X49.22
-G1 X49.33 Y27.56
-G1 X49.44 Y27.6
-G1 X50.13 Y27.94
-G1 X50.25 Y28.02
-G1 X50.34 Y28.13
-G1 X50.73 Y28.77
-G1 X50.78 Y28.89
-G1 X50.8 Y29.03
-G1 Y33.05
-G1 Y34.25
-G1 Y34.65
-G1 X50.66 Y35.01
-G1 X50.3 Y35.15
-G1 X23.46
-G1 X23.1 Y35.01
-G1 X22.96 Y34.65
-G1 Y29.07
-G1 X22.97 Y28.94
-G1 X23.02 Y28.82
-G1 X23.4 Y28.17
-G1 X23.49 Y28.06
-G1 X23.6 Y27.98
-G1 X24.29 Y27.6
-G1 X24.4 Y27.56
-G1 X24.52 Y27.54
-G1 X25.55
-G1 Y26.4
-G1 X23.4 Y25.52
-G1 X23.17 Y25.33
-G1 X23.09 Y25.06
-G1 Y17.54
-G1 X23.23 Y17.19
-G1 X23.59 Y17.04
-G1 X24.6
-G1 Y10.36
-G1 X24.62 Y10.23
-G1 X24.66 Y10.11
-G1 X24.8 Y9.88
-G1 X24.88 Y9.77
-G1 X24.99 Y9.68
-G1 X25.25 Y9.54
-G1 X25.37 Y9.5
-G1 X25.49 Y9.48
-G1 X26.53
-G1 X26.65 Y9.49
-G1 X26.76 Y9.54
-G1 X27.01 Y9.66
-G1 X27.12 Y9.74
-G1 X27.21 Y9.85
-G1 X27.35 Y10.09
-G1 X27.41 Y10.22
-G1 X27.43 Y10.35
-G1 Y10.43
-G1 X27.47 Y17.04
-G1 X28.57
-G1 X28.92 Y17.19
-G1 X29.07 Y17.54
-G1 Y24.64
-G1 X30.72 Y25.3
-G1 X30.95 Y25.49
-G1 X31.03 Y25.77
-G1 X31.02 Y27.54
-G1 X34.03
-G1 Y13.73
-G1 X34.05 Y13.59
-G1 X34.1 Y13.47
-G1 X36.45 Y9.64
-G1 X36.88 Y9.4
-G0 Z3
-G0 X49.94 Y10.82
-G1 Z-1.5
-G1 X50.29 Y10.97
-G1 X50.44 Y11.32
-G1 Y13.34
-G1 X50.29 Y13.69
-G1 X49.94 Y13.84
-G1 X45.44
-G1 X45.08 Y13.69
-G1 X44.94 Y13.34
-G1 Y11.32
-G1 X45.08 Y10.97
-G1 X45.44 Y10.82
-G1 X49.94
-G0 Z3
-G0 X48.46 Y9.7
-G1 Z-1.5
-G1 X48.59 Y9.72
-G1 X48.71 Y9.77
-G1 X50.03 Y10.53
-G1 X50.21 Y10.71
-G1 X50.28 Y10.96
-G1 X50.14 Y11.31
-G1 X49.78 Y11.46
-G1 X45.62
-G1 X45.14 Y11.09
-G1 X45.37 Y10.53
-G1 X46.69 Y9.77
-G1 X46.81 Y9.72
-G1 X46.94 Y9.7
-G1 X48.46
-G0 Z3
-G0 X50.3 Y34.4
-G1 Z-1.5
-G1 X50.66 Y34.55
-G1 X50.8 Y34.9
-G1 Y49.88
-G1 X50.79 Y59.52
-G1 X50.76 Y59.69
-G1 X50.67 Y59.84
-G1 X50.09 Y60.52
-G1 X50.06 Y60.55
-G1 X50.02 Y60.58
-G1 X47.89 Y62.26
-G1 X47.85 Y62.28
-G1 X47.81 Y62.31
-G1 X44.46 Y64.03
-G1 X44.41 Y64.05
-G1 X44.37 Y64.06
-G1 X40.69 Y65.1
-G1 X40.62 Y65.12
-G1 X37.86 Y65.45
-G1 X37.8 Y65.46
-G1 X36.89 Y65.44
-G1 X36.83
-G1 X36.82
-G1 X36.07 Y65.45
-G1 X36.04 Y65.44
-G1 X35.97
-G1 X35.1 Y65.41
-G1 X35.04 Y65.4
-G1 X32.44 Y64.99
-G1 X32.37 Y64.97
-G1 X28.94 Y63.9
-G1 X28.89 Y63.88
-G1 X28.85 Y63.86
-G1 X25.74 Y62.2
-G1 X25.7 Y62.18
-G1 X25.66 Y62.15
-G1 X23.68 Y60.56
-G1 X23.65 Y60.53
-G1 X23.62 Y60.5
-G1 X23.08 Y59.87
-G1 X22.99 Y59.71
-G1 X22.96 Y59.54
-G1 X22.98 Y49.88
-G1 X22.96 Y34.9
-G1 X23.1 Y34.55
-G1 X23.46 Y34.4
-G1 X50.3
-G0 Z3
-G0 X55.2 Y43.67
-G1 Z-1.5
-G1 Y51.34
-G1 X55.11 Y51.94
-G1 X54.83 Y52.88
-G1 X54.39 Y53.88
-G1 X53.8 Y54.85
-G1 X53.09 Y55.74
-G1 X52.28 Y56.47
-G1 X51.41 Y56.98
-G1 X51.07 Y57.09
-G1 Y43.67
-G1 X55.2
-G0 Z3
-G0 X22.69 Y43.63
-G1 Z-1.5
-G1 Y57.09
-G1 X22.35 Y56.98
-G1 X21.47 Y56.47
-G1 X20.67 Y55.74
-G1 X19.95 Y54.85
-G1 X19.36 Y53.88
-G1 X18.92 Y52.88
-G1 X18.64 Y51.94
-G1 X18.55 Y51.34
-G1 Y43.63
-G1 X22.69
-G0 Z3
-G0 X28.55 Y35.84
-G1 Z-0.99
-G1 X30.11 Y36.15
-G1 X31.43 Y37.03
-G1 X32.32 Y38.35
-G1 X32.63 Y39.91
-G1 X32.32 Y41.47
-G1 X31.43 Y42.79
-G1 X30.11 Y43.68
-G1 X28.55 Y43.99
-G1 X26.99 Y43.68
-G1 X25.67 Y42.79
-G1 X24.79 Y41.47
-G1 X24.48 Y39.91
-G1 X24.79 Y38.35
-G1 X25.67 Y37.03
-G1 X26.99 Y36.15
-G1 X28.55 Y35.84
-G0 Z3
-G0 X45.33 Y35.93
-G1 Z-0.99
-G1 X46.88 Y36.24
-G1 X48.21 Y37.12
-G1 X49.09 Y38.45
-G1 X49.4 Y40
-G1 X49.09 Y41.56
-G1 X48.21 Y42.88
-G1 X46.88 Y43.77
-G1 X45.33 Y44.08
-G1 X43.77 Y43.77
-G1 X42.45 Y42.88
-G1 X41.56 Y41.56
-G1 X41.25 Y40
-G1 X41.56 Y38.45
-G1 X42.45 Y37.12
-G1 X43.77 Y36.24
-G1 X45.33 Y35.93
-G0 Z3
-G0 X45.2 Y39.12
-G1 Z-0.99
-G1 X45.7 Y39.19
-G1 X46.07 Y39.52
-G1 X46.22 Y40
-G1 X46.07 Y40.49
-G1 X45.7 Y40.81
-G1 X45.2 Y40.89
-G1 X44.74 Y40.68
-G1 X44.47 Y40.26
-G1 Y39.75
-G1 X44.74 Y39.33
-G1 X45.2 Y39.12
-G0 Z3
-G0 X28.43 Y39.03
-G1 Z-0.99
-G1 X28.92 Y39.1
-G1 X29.3 Y39.43
-G1 X29.44 Y39.91
-G1 X29.3 Y40.4
-G1 X28.92 Y40.72
-G1 X28.43 Y40.8
-G1 X27.97 Y40.59
-G1 X27.7 Y40.16
-G1 Y39.66
-G1 X27.97 Y39.24
-G1 X28.43 Y39.03
-G0 Z3
-G0 X55.76 Y0
-G1 Z-1.5
-G1 X59.27 Y0.35
-G1 X62.65 Y1.37
-G1 X65.76 Y3.03
-G1 X68.49 Y5.27
-G1 X70.73 Y8
-G1 X72.39 Y11.11
-G1 X73.42 Y14.49
-G1 X73.76 Y18
-G1 Y55.69
-G1 X73.42 Y59.2
-G1 X72.39 Y62.57
-G1 X70.73 Y65.69
-G1 X68.49 Y68.41
-G1 X65.76 Y70.65
-G1 X62.65 Y72.31
-G1 X59.27 Y73.34
-G1 X55.76 Y73.69
-G1 X18
-G1 X14.49 Y73.34
-G1 X11.11 Y72.31
-G1 X8 Y70.65
-G1 X5.27 Y68.41
-G1 X3.03 Y65.69
-G1 X1.37 Y62.57
-G1 X0.35 Y59.2
-G1 X0 Y55.69
-G1 Y18
-G1 X0.35 Y14.49
-G1 X1.37 Y11.11
-G1 X3.03 Y8
-G1 X5.27 Y5.27
-G1 X8 Y3.03
-G1 X11.11 Y1.37
-G1 X14.49 Y0.35
-G1 X18 Y0
-G1 X55.76
-G0 Z3
-M5
-G0 X40 Y75
-M2
diff --git a/src/svelte-components/package-lock.json b/src/svelte-components/package-lock.json
index a98b03f..25137e5 100644
--- a/src/svelte-components/package-lock.json
+++ b/src/svelte-components/package-lock.json
@@ -8,21 +8,21 @@
"name": "svelte-components",
"version": "0.0.0",
"devDependencies": {
- "@sveltejs/kit": "^1.0.0-next.357",
- "@sveltejs/vite-plugin-svelte": "^1.0.0-next.49",
+ "@sveltejs/kit": "^1.0.0-next.392",
+ "@sveltejs/vite-plugin-svelte": "^1.0.1",
"@tsconfig/svelte": "^3.0.0",
"node-sass": "^7.0.1",
"polyfill-object.fromentries": "^1.0.1",
"smui-theme": "^6.0.0-beta.16",
"string.prototype.matchall": "^4.0.7",
- "svelte": "^3.48.0",
+ "svelte": "^3.49.0",
"svelte-check": "^2.8.0",
"svelte-material-ui": "^6.0.0-beta.16",
"svelte-preprocess": "^4.10.7",
"svelte-tiny-virtual-list": "^2.0.5",
"tslib": "^2.4.0",
"typescript": "^4.7.4",
- "vite": "^2.9.13"
+ "vite": "^3.0.2"
}
},
"node_modules/@babel/code-frame": {
@@ -129,9 +129,9 @@
"dev": true
},
"node_modules/@jridgewell/resolve-uri": {
- "version": "3.0.8",
- "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.8.tgz",
- "integrity": "sha512-YK5G9LaddzGbcucK4c8h5tWFmMPBvRZ/uyWmN1/SbBdIvqGUdWGkJ5BAaccgs6XbzVLsqbPJrBSFwKv3kT9i7w==",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
+ "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==",
"dev": true,
"engines": {
"node": ">=6.0.0"
@@ -1516,46 +1516,46 @@
}
},
"node_modules/@sveltejs/kit": {
- "version": "1.0.0-next.357",
- "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-1.0.0-next.357.tgz",
- "integrity": "sha512-nCAehVybIEpQNnPu61V/EFVdfDb1nBSiQUfW9EcSSDEUbyAMCVBOKZZuzQ0qQDp3xniqRkyDzpBA4wN+ADxHBw==",
+ "version": "1.0.0-next.392",
+ "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-1.0.0-next.392.tgz",
+ "integrity": "sha512-od4rDJ/Soq0I7mda7sTbAnNKERHSDEGNa7QBpLA859xgBkwC1JnEIymYOh9dm+hMyHhB0bUoRoaur0qxKLqOOw==",
"dev": true,
"dependencies": {
- "@sveltejs/vite-plugin-svelte": "^1.0.0-next.48",
+ "@sveltejs/vite-plugin-svelte": "^1.0.1",
"chokidar": "^3.5.3",
- "sade": "^1.8.1",
- "vite": "^2.9.10"
+ "sade": "^1.8.1"
},
"bin": {
"svelte-kit": "svelte-kit.js"
},
"engines": {
- "node": ">=16.7"
+ "node": ">=16.9"
},
"peerDependencies": {
- "svelte": "^3.44.0"
+ "svelte": "^3.44.0",
+ "vite": "^3.0.0"
}
},
"node_modules/@sveltejs/vite-plugin-svelte": {
- "version": "1.0.0-next.49",
- "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-1.0.0-next.49.tgz",
- "integrity": "sha512-AKh0Ka8EDgidnxWUs8Hh2iZLZovkETkefO99XxZ4sW4WGJ7VFeBx5kH/NIIGlaNHLcrIvK3CK0HkZwC3Cici0A==",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-1.0.1.tgz",
+ "integrity": "sha512-PorCgUounn0VXcpeJu+hOweZODKmGuLHsLomwqSj+p26IwjjGffmYQfVHtiTWq+NqaUuuHWWG7vPge6UFw4Aeg==",
"dev": true,
"dependencies": {
"@rollup/pluginutils": "^4.2.1",
"debug": "^4.3.4",
"deepmerge": "^4.2.2",
- "kleur": "^4.1.4",
+ "kleur": "^4.1.5",
"magic-string": "^0.26.2",
"svelte-hmr": "^0.14.12"
},
"engines": {
- "node": "^14.13.1 || >= 16"
+ "node": "^14.18.0 || >= 16"
},
"peerDependencies": {
"diff-match-patch": "^1.0.5",
"svelte": "^3.44.0",
- "vite": "^2.9.0"
+ "vite": "^3.0.0"
},
"peerDependenciesMeta": {
"diff-match-patch": {
@@ -1585,9 +1585,9 @@
"dev": true
},
"node_modules/@types/node": {
- "version": "18.0.1",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.1.tgz",
- "integrity": "sha512-CmR8+Tsy95hhwtZBKJBs0/FFq4XX7sDZHlGGf+0q+BRZfMbOTkzkj0AFAuTyXbObDIoanaBBW0+KEW+m3N16Wg==",
+ "version": "18.0.6",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.6.tgz",
+ "integrity": "sha512-/xUq6H2aQm261exT6iZTMifUySEt4GR5KX8eYyY+C4MSNPqSh9oNIP7tz2GLKTlFaiBbgZNxffoR3CVRG+cljw==",
"dev": true
},
"node_modules/@types/normalize-package-data": {
@@ -2301,9 +2301,9 @@
"dev": true
},
"node_modules/esbuild": {
- "version": "0.14.48",
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.48.tgz",
- "integrity": "sha512-w6N1Yn5MtqK2U1/WZTX9ZqUVb8IOLZkZ5AdHkT6x3cHDMVsYWC7WPdiLmx19w3i4Rwzy5LqsEMtVihG3e4rFzA==",
+ "version": "0.14.49",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.49.tgz",
+ "integrity": "sha512-/TlVHhOaq7Yz8N1OJrjqM3Auzo5wjvHFLk+T8pIue+fhnhIMpfAzsG6PLVMbFveVxqD2WOp3QHei+52IMUNmCw==",
"dev": true,
"hasInstallScript": true,
"bin": {
@@ -2313,32 +2313,32 @@
"node": ">=12"
},
"optionalDependencies": {
- "esbuild-android-64": "0.14.48",
- "esbuild-android-arm64": "0.14.48",
- "esbuild-darwin-64": "0.14.48",
- "esbuild-darwin-arm64": "0.14.48",
- "esbuild-freebsd-64": "0.14.48",
- "esbuild-freebsd-arm64": "0.14.48",
- "esbuild-linux-32": "0.14.48",
- "esbuild-linux-64": "0.14.48",
- "esbuild-linux-arm": "0.14.48",
- "esbuild-linux-arm64": "0.14.48",
- "esbuild-linux-mips64le": "0.14.48",
- "esbuild-linux-ppc64le": "0.14.48",
- "esbuild-linux-riscv64": "0.14.48",
- "esbuild-linux-s390x": "0.14.48",
- "esbuild-netbsd-64": "0.14.48",
- "esbuild-openbsd-64": "0.14.48",
- "esbuild-sunos-64": "0.14.48",
- "esbuild-windows-32": "0.14.48",
- "esbuild-windows-64": "0.14.48",
- "esbuild-windows-arm64": "0.14.48"
+ "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"
}
},
"node_modules/esbuild-android-64": {
- "version": "0.14.48",
- "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.48.tgz",
- "integrity": "sha512-3aMjboap/kqwCUpGWIjsk20TtxVoKck8/4Tu19rubh7t5Ra0Yrpg30Mt1QXXlipOazrEceGeWurXKeFJgkPOUg==",
+ "version": "0.14.49",
+ "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.49.tgz",
+ "integrity": "sha512-vYsdOTD+yi+kquhBiFWl3tyxnj2qZJsl4tAqwhT90ktUdnyTizgle7TjNx6Ar1bN7wcwWqZ9QInfdk2WVagSww==",
"cpu": [
"x64"
],
@@ -2352,9 +2352,9 @@
}
},
"node_modules/esbuild-android-arm64": {
- "version": "0.14.48",
- "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.48.tgz",
- "integrity": "sha512-vptI3K0wGALiDq+EvRuZotZrJqkYkN5282iAfcffjI5lmGG9G1ta/CIVauhY42MBXwEgDJkweiDcDMRLzBZC4g==",
+ "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": [
"arm64"
],
@@ -2368,9 +2368,9 @@
}
},
"node_modules/esbuild-darwin-64": {
- "version": "0.14.48",
- "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.48.tgz",
- "integrity": "sha512-gGQZa4+hab2Va/Zww94YbshLuWteyKGD3+EsVon8EWTWhnHFRm5N9NbALNbwi/7hQ/hM1Zm4FuHg+k6BLsl5UA==",
+ "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==",
"cpu": [
"x64"
],
@@ -2384,9 +2384,9 @@
}
},
"node_modules/esbuild-darwin-arm64": {
- "version": "0.14.48",
- "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.48.tgz",
- "integrity": "sha512-bFjnNEXjhZT+IZ8RvRGNJthLWNHV5JkCtuOFOnjvo5pC0sk2/QVk0Qc06g2PV3J0TcU6kaPC3RN9yy9w2PSLEA==",
+ "version": "0.14.49",
+ "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.49.tgz",
+ "integrity": "sha512-XMaqDxO846srnGlUSJnwbijV29MTKUATmOLyQSfswbK/2X5Uv28M9tTLUJcKKxzoo9lnkYPsx2o8EJcTYwCs/A==",
"cpu": [
"arm64"
],
@@ -2400,9 +2400,9 @@
}
},
"node_modules/esbuild-freebsd-64": {
- "version": "0.14.48",
- "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.48.tgz",
- "integrity": "sha512-1NOlwRxmOsnPcWOGTB10JKAkYSb2nue0oM1AfHWunW/mv3wERfJmnYlGzL3UAOIUXZqW8GeA2mv+QGwq7DToqA==",
+ "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==",
"cpu": [
"x64"
],
@@ -2416,9 +2416,9 @@
}
},
"node_modules/esbuild-freebsd-arm64": {
- "version": "0.14.48",
- "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.48.tgz",
- "integrity": "sha512-gXqKdO8wabVcYtluAbikDH2jhXp+Klq5oCD5qbVyUG6tFiGhrC9oczKq3vIrrtwcxDQqK6+HDYK8Zrd4bCA9Gw==",
+ "version": "0.14.49",
+ "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.49.tgz",
+ "integrity": "sha512-lFLtgXnAc3eXYqj5koPlBZvEbBSOSUbWO3gyY/0+4lBdRqELyz4bAuamHvmvHW5swJYL7kngzIZw6kdu25KGOA==",
"cpu": [
"arm64"
],
@@ -2432,9 +2432,9 @@
}
},
"node_modules/esbuild-linux-32": {
- "version": "0.14.48",
- "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.48.tgz",
- "integrity": "sha512-ghGyDfS289z/LReZQUuuKq9KlTiTspxL8SITBFQFAFRA/IkIvDpnZnCAKTCjGXAmUqroMQfKJXMxyjJA69c/nQ==",
+ "version": "0.14.49",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.49.tgz",
+ "integrity": "sha512-zTTH4gr2Kb8u4QcOpTDVn7Z8q7QEIvFl/+vHrI3cF6XOJS7iEI1FWslTo3uofB2+mn6sIJEQD9PrNZKoAAMDiA==",
"cpu": [
"ia32"
],
@@ -2448,9 +2448,9 @@
}
},
"node_modules/esbuild-linux-64": {
- "version": "0.14.48",
- "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.48.tgz",
- "integrity": "sha512-vni3p/gppLMVZLghI7oMqbOZdGmLbbKR23XFARKnszCIBpEMEDxOMNIKPmMItQrmH/iJrL1z8Jt2nynY0bE1ug==",
+ "version": "0.14.49",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.49.tgz",
+ "integrity": "sha512-hYmzRIDzFfLrB5c1SknkxzM8LdEUOusp6M2TnuQZJLRtxTgyPnZZVtyMeCLki0wKgYPXkFsAVhi8vzo2mBNeTg==",
"cpu": [
"x64"
],
@@ -2464,9 +2464,9 @@
}
},
"node_modules/esbuild-linux-arm": {
- "version": "0.14.48",
- "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.48.tgz",
- "integrity": "sha512-+VfSV7Akh1XUiDNXgqgY1cUP1i2vjI+BmlyXRfVz5AfV3jbpde8JTs5Q9sYgaoq5cWfuKfoZB/QkGOI+QcL1Tw==",
+ "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==",
"cpu": [
"arm"
],
@@ -2480,9 +2480,9 @@
}
},
"node_modules/esbuild-linux-arm64": {
- "version": "0.14.48",
- "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.48.tgz",
- "integrity": "sha512-3CFsOlpoxlKPRevEHq8aAntgYGYkE1N9yRYAcPyng/p4Wyx0tPR5SBYsxLKcgPB9mR8chHEhtWYz6EZ+H199Zw==",
+ "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==",
"cpu": [
"arm64"
],
@@ -2496,9 +2496,9 @@
}
},
"node_modules/esbuild-linux-mips64le": {
- "version": "0.14.48",
- "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.48.tgz",
- "integrity": "sha512-cs0uOiRlPp6ymknDnjajCgvDMSsLw5mST2UXh+ZIrXTj2Ifyf2aAP3Iw4DiqgnyYLV2O/v/yWBJx+WfmKEpNLA==",
+ "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==",
"cpu": [
"mips64el"
],
@@ -2512,9 +2512,9 @@
}
},
"node_modules/esbuild-linux-ppc64le": {
- "version": "0.14.48",
- "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.48.tgz",
- "integrity": "sha512-+2F0vJMkuI0Wie/wcSPDCqXvSFEELH7Jubxb7mpWrA/4NpT+/byjxDz0gG6R1WJoeDefcrMfpBx4GFNN1JQorQ==",
+ "version": "0.14.49",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.49.tgz",
+ "integrity": "sha512-WP9zR4HX6iCBmMFH+XHHng2LmdoIeUmBpL4aL2TR8ruzXyT4dWrJ5BSbT8iNo6THN8lod6GOmYDLq/dgZLalGw==",
"cpu": [
"ppc64"
],
@@ -2528,9 +2528,9 @@
}
},
"node_modules/esbuild-linux-riscv64": {
- "version": "0.14.48",
- "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.48.tgz",
- "integrity": "sha512-BmaK/GfEE+5F2/QDrIXteFGKnVHGxlnK9MjdVKMTfvtmudjY3k2t8NtlY4qemKSizc+QwyombGWTBDc76rxePA==",
+ "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==",
"cpu": [
"riscv64"
],
@@ -2544,9 +2544,9 @@
}
},
"node_modules/esbuild-linux-s390x": {
- "version": "0.14.48",
- "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.48.tgz",
- "integrity": "sha512-tndw/0B9jiCL+KWKo0TSMaUm5UWBLsfCKVdbfMlb3d5LeV9WbijZ8Ordia8SAYv38VSJWOEt6eDCdOx8LqkC4g==",
+ "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==",
"cpu": [
"s390x"
],
@@ -2560,9 +2560,9 @@
}
},
"node_modules/esbuild-netbsd-64": {
- "version": "0.14.48",
- "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.48.tgz",
- "integrity": "sha512-V9hgXfwf/T901Lr1wkOfoevtyNkrxmMcRHyticybBUHookznipMOHoF41Al68QBsqBxnITCEpjjd4yAos7z9Tw==",
+ "version": "0.14.49",
+ "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.49.tgz",
+ "integrity": "sha512-BXaUwFOfCy2T+hABtiPUIpWjAeWK9P8O41gR4Pg73hpzoygVGnj0nI3YK4SJhe52ELgtdgWP/ckIkbn2XaTxjQ==",
"cpu": [
"x64"
],
@@ -2576,9 +2576,9 @@
}
},
"node_modules/esbuild-openbsd-64": {
- "version": "0.14.48",
- "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.48.tgz",
- "integrity": "sha512-+IHf4JcbnnBl4T52egorXMatil/za0awqzg2Vy6FBgPcBpisDWT2sVz/tNdrK9kAqj+GZG/jZdrOkj7wsrNTKA==",
+ "version": "0.14.49",
+ "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.49.tgz",
+ "integrity": "sha512-lP06UQeLDGmVPw9Rg437Btu6J9/BmyhdoefnQ4gDEJTtJvKtQaUcOQrhjTq455ouZN4EHFH1h28WOJVANK41kA==",
"cpu": [
"x64"
],
@@ -2592,9 +2592,9 @@
}
},
"node_modules/esbuild-sunos-64": {
- "version": "0.14.48",
- "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.48.tgz",
- "integrity": "sha512-77m8bsr5wOpOWbGi9KSqDphcq6dFeJyun8TA+12JW/GAjyfTwVtOnN8DOt6DSPUfEV+ltVMNqtXUeTeMAxl5KA==",
+ "version": "0.14.49",
+ "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.49.tgz",
+ "integrity": "sha512-4c8Zowp+V3zIWje329BeLbGh6XI9c/rqARNaj5yPHdC61pHI9UNdDxT3rePPJeWcEZVKjkiAS6AP6kiITp7FSw==",
"cpu": [
"x64"
],
@@ -2608,9 +2608,9 @@
}
},
"node_modules/esbuild-windows-32": {
- "version": "0.14.48",
- "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.48.tgz",
- "integrity": "sha512-EPgRuTPP8vK9maxpTGDe5lSoIBHGKO/AuxDncg5O3NkrPeLNdvvK8oywB0zGaAZXxYWfNNSHskvvDgmfVTguhg==",
+ "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==",
"cpu": [
"ia32"
],
@@ -2624,9 +2624,9 @@
}
},
"node_modules/esbuild-windows-64": {
- "version": "0.14.48",
- "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.48.tgz",
- "integrity": "sha512-YmpXjdT1q0b8ictSdGwH3M8VCoqPpK1/UArze3X199w6u8hUx3V8BhAi1WjbsfDYRBanVVtduAhh2sirImtAvA==",
+ "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==",
"cpu": [
"x64"
],
@@ -2640,9 +2640,9 @@
}
},
"node_modules/esbuild-windows-arm64": {
- "version": "0.14.48",
- "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.48.tgz",
- "integrity": "sha512-HHaOMCsCXp0rz5BT2crTka6MPWVno121NKApsGs/OIW5QC0ggC69YMGs1aJct9/9FSUF4A1xNE/cLvgB5svR4g==",
+ "version": "0.14.49",
+ "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.49.tgz",
+ "integrity": "sha512-v+HYNAXzuANrCbbLFJ5nmO3m5y2PGZWLe3uloAkLt87aXiO2mZr3BTmacZdjwNkNEHuH3bNtN8cak+mzVjVPfA==",
"cpu": [
"arm64"
],
@@ -3283,9 +3283,9 @@
}
},
"node_modules/ip": {
- "version": "1.1.8",
- "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz",
- "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz",
+ "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==",
"dev": true
},
"node_modules/is-arrayish": {
@@ -4422,9 +4422,9 @@
}
},
"node_modules/psl": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
- "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz",
+ "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==",
"dev": true
},
"node_modules/punycode": {
@@ -4709,9 +4709,9 @@
}
},
"node_modules/rollup": {
- "version": "2.75.7",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.75.7.tgz",
- "integrity": "sha512-VSE1iy0eaAYNCxEXaleThdFXqZJ42qDBatAwrfnPlENEZ8erQ+0LYX4JXOLPceWfZpV1VtZwZ3dFCuOZiSyFtQ==",
+ "version": "2.77.0",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.77.0.tgz",
+ "integrity": "sha512-vL8xjY4yOQEw79DvyXLijhnhh+R/O9zpF/LEgkCebZFtb6ELeN9H3/2T0r8+mp+fFTBHZ5qGpOpW2ela2zRt3g==",
"dev": true,
"bin": {
"rollup": "dist/bin/rollup"
@@ -4821,9 +4821,9 @@
}
},
"node_modules/sass": {
- "version": "1.53.0",
- "resolved": "https://registry.npmjs.org/sass/-/sass-1.53.0.tgz",
- "integrity": "sha512-zb/oMirbKhUgRQ0/GFz8TSAwRq2IlR29vOUJZOx0l8sV+CkHUfHa4u5nqrG+1VceZp7Jfj59SVW9ogdhTvJDcQ==",
+ "version": "1.54.0",
+ "resolved": "https://registry.npmjs.org/sass/-/sass-1.54.0.tgz",
+ "integrity": "sha512-C4zp79GCXZfK0yoHZg+GxF818/aclhp9F48XBu/+bm9vXEVAYov9iU3FBVRMq3Hx3OA4jfKL+p2K9180mEh0xQ==",
"dev": true,
"dependencies": {
"chokidar": ">=3.0.0 <4.0.0",
@@ -4952,12 +4952,12 @@
}
},
"node_modules/socks": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.2.tgz",
- "integrity": "sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA==",
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.0.tgz",
+ "integrity": "sha512-scnOe9y4VuiNUULJN72GrM26BNOjVsfPXI+j+98PkyEfsIXroa5ofyjT+FzGvn/xHs73U2JtoBYAVx9Hl4quSA==",
"dev": true,
"dependencies": {
- "ip": "^1.1.5",
+ "ip": "^2.0.0",
"smart-buffer": "^4.2.0"
},
"engines": {
@@ -5245,9 +5245,9 @@
}
},
"node_modules/svelte": {
- "version": "3.48.0",
- "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.48.0.tgz",
- "integrity": "sha512-fN2YRm/bGumvjUpu6yI3BpvZnpIm9I6A7HR4oUNYd7ggYyIwSA/BX7DJ+UXXffLp6XNcUijyLvttbPVCYa/3xQ==",
+ "version": "3.49.0",
+ "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.49.0.tgz",
+ "integrity": "sha512-+lmjic1pApJWDfPCpUUTc1m8azDqYCG1JN9YEngrx/hUyIcFJo6VZhj0A1Ai0wqoHcEIuQy+e9tk+4uDgdtsFA==",
"dev": true,
"engines": {
"node": ">= 8"
@@ -5418,9 +5418,9 @@
"dev": true
},
"node_modules/svelte2tsx": {
- "version": "0.5.11",
- "resolved": "https://registry.npmjs.org/svelte2tsx/-/svelte2tsx-0.5.11.tgz",
- "integrity": "sha512-Is95G1wqNvEUJZ9DITRS2zfMwVJRZztMduPs1vJJ0cm65WUg/avBl5vBXjHycQL/qmFpaqa3NG4qWnf7bCHPag==",
+ "version": "0.5.12",
+ "resolved": "https://registry.npmjs.org/svelte2tsx/-/svelte2tsx-0.5.12.tgz",
+ "integrity": "sha512-43ayMivmh1IDCgb+4YDf54YuOJZGCUKFpp37RbfjGgNU+Pmb9HhP+zRXa1pMh4mwSTBfqZS0FbJZP3Q8CSxvvg==",
"dev": true,
"dependencies": {
"dedent-js": "^1.0.1",
@@ -5629,21 +5629,21 @@
}
},
"node_modules/vite": {
- "version": "2.9.13",
- "resolved": "https://registry.npmjs.org/vite/-/vite-2.9.13.tgz",
- "integrity": "sha512-AsOBAaT0AD7Mhe8DuK+/kE4aWYFMx/i0ZNi98hJclxb4e0OhQcZYUrvLjIaQ8e59Ui7txcvKMiJC1yftqpQoDw==",
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-3.0.2.tgz",
+ "integrity": "sha512-TAqydxW/w0U5AoL5AsD9DApTvGb2iNbGs3sN4u2VdT1GFkQVUfgUldt+t08TZgi23uIauh1TUOQJALduo9GXqw==",
"dev": true,
"dependencies": {
- "esbuild": "^0.14.27",
- "postcss": "^8.4.13",
- "resolve": "^1.22.0",
- "rollup": "^2.59.0"
+ "esbuild": "^0.14.47",
+ "postcss": "^8.4.14",
+ "resolve": "^1.22.1",
+ "rollup": "^2.75.6"
},
"bin": {
"vite": "bin/vite.js"
},
"engines": {
- "node": ">=12.2.0"
+ "node": "^14.18.0 || >=16.0.0"
},
"optionalDependencies": {
"fsevents": "~2.3.2"
@@ -5651,7 +5651,8 @@
"peerDependencies": {
"less": "*",
"sass": "*",
- "stylus": "*"
+ "stylus": "*",
+ "terser": "^5.4.0"
},
"peerDependenciesMeta": {
"less": {
@@ -5662,6 +5663,9 @@
},
"stylus": {
"optional": true
+ },
+ "terser": {
+ "optional": true
}
}
},
@@ -5882,9 +5886,9 @@
"dev": true
},
"@jridgewell/resolve-uri": {
- "version": "3.0.8",
- "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.8.tgz",
- "integrity": "sha512-YK5G9LaddzGbcucK4c8h5tWFmMPBvRZ/uyWmN1/SbBdIvqGUdWGkJ5BAaccgs6XbzVLsqbPJrBSFwKv3kT9i7w==",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
+ "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==",
"dev": true
},
"@jridgewell/sourcemap-codec": {
@@ -7251,27 +7255,26 @@
}
},
"@sveltejs/kit": {
- "version": "1.0.0-next.357",
- "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-1.0.0-next.357.tgz",
- "integrity": "sha512-nCAehVybIEpQNnPu61V/EFVdfDb1nBSiQUfW9EcSSDEUbyAMCVBOKZZuzQ0qQDp3xniqRkyDzpBA4wN+ADxHBw==",
+ "version": "1.0.0-next.392",
+ "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-1.0.0-next.392.tgz",
+ "integrity": "sha512-od4rDJ/Soq0I7mda7sTbAnNKERHSDEGNa7QBpLA859xgBkwC1JnEIymYOh9dm+hMyHhB0bUoRoaur0qxKLqOOw==",
"dev": true,
"requires": {
- "@sveltejs/vite-plugin-svelte": "^1.0.0-next.48",
+ "@sveltejs/vite-plugin-svelte": "^1.0.1",
"chokidar": "^3.5.3",
- "sade": "^1.8.1",
- "vite": "^2.9.10"
+ "sade": "^1.8.1"
}
},
"@sveltejs/vite-plugin-svelte": {
- "version": "1.0.0-next.49",
- "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-1.0.0-next.49.tgz",
- "integrity": "sha512-AKh0Ka8EDgidnxWUs8Hh2iZLZovkETkefO99XxZ4sW4WGJ7VFeBx5kH/NIIGlaNHLcrIvK3CK0HkZwC3Cici0A==",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-1.0.1.tgz",
+ "integrity": "sha512-PorCgUounn0VXcpeJu+hOweZODKmGuLHsLomwqSj+p26IwjjGffmYQfVHtiTWq+NqaUuuHWWG7vPge6UFw4Aeg==",
"dev": true,
"requires": {
"@rollup/pluginutils": "^4.2.1",
"debug": "^4.3.4",
"deepmerge": "^4.2.2",
- "kleur": "^4.1.4",
+ "kleur": "^4.1.5",
"magic-string": "^0.26.2",
"svelte-hmr": "^0.14.12"
}
@@ -7295,9 +7298,9 @@
"dev": true
},
"@types/node": {
- "version": "18.0.1",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.1.tgz",
- "integrity": "sha512-CmR8+Tsy95hhwtZBKJBs0/FFq4XX7sDZHlGGf+0q+BRZfMbOTkzkj0AFAuTyXbObDIoanaBBW0+KEW+m3N16Wg==",
+ "version": "18.0.6",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.6.tgz",
+ "integrity": "sha512-/xUq6H2aQm261exT6iZTMifUySEt4GR5KX8eYyY+C4MSNPqSh9oNIP7tz2GLKTlFaiBbgZNxffoR3CVRG+cljw==",
"dev": true
},
"@types/normalize-package-data": {
@@ -7858,170 +7861,170 @@
"dev": true
},
"esbuild": {
- "version": "0.14.48",
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.48.tgz",
- "integrity": "sha512-w6N1Yn5MtqK2U1/WZTX9ZqUVb8IOLZkZ5AdHkT6x3cHDMVsYWC7WPdiLmx19w3i4Rwzy5LqsEMtVihG3e4rFzA==",
+ "version": "0.14.49",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.49.tgz",
+ "integrity": "sha512-/TlVHhOaq7Yz8N1OJrjqM3Auzo5wjvHFLk+T8pIue+fhnhIMpfAzsG6PLVMbFveVxqD2WOp3QHei+52IMUNmCw==",
"dev": true,
"requires": {
- "esbuild-android-64": "0.14.48",
- "esbuild-android-arm64": "0.14.48",
- "esbuild-darwin-64": "0.14.48",
- "esbuild-darwin-arm64": "0.14.48",
- "esbuild-freebsd-64": "0.14.48",
- "esbuild-freebsd-arm64": "0.14.48",
- "esbuild-linux-32": "0.14.48",
- "esbuild-linux-64": "0.14.48",
- "esbuild-linux-arm": "0.14.48",
- "esbuild-linux-arm64": "0.14.48",
- "esbuild-linux-mips64le": "0.14.48",
- "esbuild-linux-ppc64le": "0.14.48",
- "esbuild-linux-riscv64": "0.14.48",
- "esbuild-linux-s390x": "0.14.48",
- "esbuild-netbsd-64": "0.14.48",
- "esbuild-openbsd-64": "0.14.48",
- "esbuild-sunos-64": "0.14.48",
- "esbuild-windows-32": "0.14.48",
- "esbuild-windows-64": "0.14.48",
- "esbuild-windows-arm64": "0.14.48"
+ "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-android-64": {
- "version": "0.14.48",
- "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.48.tgz",
- "integrity": "sha512-3aMjboap/kqwCUpGWIjsk20TtxVoKck8/4Tu19rubh7t5Ra0Yrpg30Mt1QXXlipOazrEceGeWurXKeFJgkPOUg==",
+ "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": {
- "version": "0.14.48",
- "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.48.tgz",
- "integrity": "sha512-vptI3K0wGALiDq+EvRuZotZrJqkYkN5282iAfcffjI5lmGG9G1ta/CIVauhY42MBXwEgDJkweiDcDMRLzBZC4g==",
+ "version": "0.14.49",
+ "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.49.tgz",
+ "integrity": "sha512-g2HGr/hjOXCgSsvQZ1nK4nW/ei8JUx04Li74qub9qWrStlysaVmadRyTVuW32FGIpLQyc5sUjjZopj49eGGM2g==",
"dev": true,
"optional": true
},
"esbuild-darwin-64": {
- "version": "0.14.48",
- "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.48.tgz",
- "integrity": "sha512-gGQZa4+hab2Va/Zww94YbshLuWteyKGD3+EsVon8EWTWhnHFRm5N9NbALNbwi/7hQ/hM1Zm4FuHg+k6BLsl5UA==",
+ "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.48",
- "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.48.tgz",
- "integrity": "sha512-bFjnNEXjhZT+IZ8RvRGNJthLWNHV5JkCtuOFOnjvo5pC0sk2/QVk0Qc06g2PV3J0TcU6kaPC3RN9yy9w2PSLEA==",
+ "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.48",
- "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.48.tgz",
- "integrity": "sha512-1NOlwRxmOsnPcWOGTB10JKAkYSb2nue0oM1AfHWunW/mv3wERfJmnYlGzL3UAOIUXZqW8GeA2mv+QGwq7DToqA==",
+ "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
},
"esbuild-freebsd-arm64": {
- "version": "0.14.48",
- "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.48.tgz",
- "integrity": "sha512-gXqKdO8wabVcYtluAbikDH2jhXp+Klq5oCD5qbVyUG6tFiGhrC9oczKq3vIrrtwcxDQqK6+HDYK8Zrd4bCA9Gw==",
+ "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
},
"esbuild-linux-32": {
- "version": "0.14.48",
- "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.48.tgz",
- "integrity": "sha512-ghGyDfS289z/LReZQUuuKq9KlTiTspxL8SITBFQFAFRA/IkIvDpnZnCAKTCjGXAmUqroMQfKJXMxyjJA69c/nQ==",
+ "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
},
"esbuild-linux-64": {
- "version": "0.14.48",
- "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.48.tgz",
- "integrity": "sha512-vni3p/gppLMVZLghI7oMqbOZdGmLbbKR23XFARKnszCIBpEMEDxOMNIKPmMItQrmH/iJrL1z8Jt2nynY0bE1ug==",
+ "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
},
"esbuild-linux-arm": {
- "version": "0.14.48",
- "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.48.tgz",
- "integrity": "sha512-+VfSV7Akh1XUiDNXgqgY1cUP1i2vjI+BmlyXRfVz5AfV3jbpde8JTs5Q9sYgaoq5cWfuKfoZB/QkGOI+QcL1Tw==",
+ "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==",
"dev": true,
"optional": true
},
"esbuild-linux-arm64": {
- "version": "0.14.48",
- "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.48.tgz",
- "integrity": "sha512-3CFsOlpoxlKPRevEHq8aAntgYGYkE1N9yRYAcPyng/p4Wyx0tPR5SBYsxLKcgPB9mR8chHEhtWYz6EZ+H199Zw==",
+ "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.48",
- "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.48.tgz",
- "integrity": "sha512-cs0uOiRlPp6ymknDnjajCgvDMSsLw5mST2UXh+ZIrXTj2Ifyf2aAP3Iw4DiqgnyYLV2O/v/yWBJx+WfmKEpNLA==",
+ "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.48",
- "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.48.tgz",
- "integrity": "sha512-+2F0vJMkuI0Wie/wcSPDCqXvSFEELH7Jubxb7mpWrA/4NpT+/byjxDz0gG6R1WJoeDefcrMfpBx4GFNN1JQorQ==",
+ "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.48",
- "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.48.tgz",
- "integrity": "sha512-BmaK/GfEE+5F2/QDrIXteFGKnVHGxlnK9MjdVKMTfvtmudjY3k2t8NtlY4qemKSizc+QwyombGWTBDc76rxePA==",
+ "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.48",
- "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.48.tgz",
- "integrity": "sha512-tndw/0B9jiCL+KWKo0TSMaUm5UWBLsfCKVdbfMlb3d5LeV9WbijZ8Ordia8SAYv38VSJWOEt6eDCdOx8LqkC4g==",
+ "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.48",
- "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.48.tgz",
- "integrity": "sha512-V9hgXfwf/T901Lr1wkOfoevtyNkrxmMcRHyticybBUHookznipMOHoF41Al68QBsqBxnITCEpjjd4yAos7z9Tw==",
+ "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.48",
- "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.48.tgz",
- "integrity": "sha512-+IHf4JcbnnBl4T52egorXMatil/za0awqzg2Vy6FBgPcBpisDWT2sVz/tNdrK9kAqj+GZG/jZdrOkj7wsrNTKA==",
+ "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.48",
- "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.48.tgz",
- "integrity": "sha512-77m8bsr5wOpOWbGi9KSqDphcq6dFeJyun8TA+12JW/GAjyfTwVtOnN8DOt6DSPUfEV+ltVMNqtXUeTeMAxl5KA==",
+ "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.48",
- "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.48.tgz",
- "integrity": "sha512-EPgRuTPP8vK9maxpTGDe5lSoIBHGKO/AuxDncg5O3NkrPeLNdvvK8oywB0zGaAZXxYWfNNSHskvvDgmfVTguhg==",
+ "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.48",
- "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.48.tgz",
- "integrity": "sha512-YmpXjdT1q0b8ictSdGwH3M8VCoqPpK1/UArze3X199w6u8hUx3V8BhAi1WjbsfDYRBanVVtduAhh2sirImtAvA==",
+ "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.48",
- "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.48.tgz",
- "integrity": "sha512-HHaOMCsCXp0rz5BT2crTka6MPWVno121NKApsGs/OIW5QC0ggC69YMGs1aJct9/9FSUF4A1xNE/cLvgB5svR4g==",
+ "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
},
@@ -8505,9 +8508,9 @@
}
},
"ip": {
- "version": "1.1.8",
- "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz",
- "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz",
+ "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==",
"dev": true
},
"is-arrayish": {
@@ -9352,9 +9355,9 @@
}
},
"psl": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
- "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz",
+ "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==",
"dev": true
},
"punycode": {
@@ -9558,9 +9561,9 @@
}
},
"rollup": {
- "version": "2.75.7",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.75.7.tgz",
- "integrity": "sha512-VSE1iy0eaAYNCxEXaleThdFXqZJ42qDBatAwrfnPlENEZ8erQ+0LYX4JXOLPceWfZpV1VtZwZ3dFCuOZiSyFtQ==",
+ "version": "2.77.0",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.77.0.tgz",
+ "integrity": "sha512-vL8xjY4yOQEw79DvyXLijhnhh+R/O9zpF/LEgkCebZFtb6ELeN9H3/2T0r8+mp+fFTBHZ5qGpOpW2ela2zRt3g==",
"dev": true,
"requires": {
"fsevents": "~2.3.2"
@@ -9629,9 +9632,9 @@
}
},
"sass": {
- "version": "1.53.0",
- "resolved": "https://registry.npmjs.org/sass/-/sass-1.53.0.tgz",
- "integrity": "sha512-zb/oMirbKhUgRQ0/GFz8TSAwRq2IlR29vOUJZOx0l8sV+CkHUfHa4u5nqrG+1VceZp7Jfj59SVW9ogdhTvJDcQ==",
+ "version": "1.54.0",
+ "resolved": "https://registry.npmjs.org/sass/-/sass-1.54.0.tgz",
+ "integrity": "sha512-C4zp79GCXZfK0yoHZg+GxF818/aclhp9F48XBu/+bm9vXEVAYov9iU3FBVRMq3Hx3OA4jfKL+p2K9180mEh0xQ==",
"dev": true,
"requires": {
"chokidar": ">=3.0.0 <4.0.0",
@@ -9726,12 +9729,12 @@
}
},
"socks": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.2.tgz",
- "integrity": "sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA==",
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.0.tgz",
+ "integrity": "sha512-scnOe9y4VuiNUULJN72GrM26BNOjVsfPXI+j+98PkyEfsIXroa5ofyjT+FzGvn/xHs73U2JtoBYAVx9Hl4quSA==",
"dev": true,
"requires": {
- "ip": "^1.1.5",
+ "ip": "^2.0.0",
"smart-buffer": "^4.2.0"
}
},
@@ -9967,9 +9970,9 @@
"dev": true
},
"svelte": {
- "version": "3.48.0",
- "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.48.0.tgz",
- "integrity": "sha512-fN2YRm/bGumvjUpu6yI3BpvZnpIm9I6A7HR4oUNYd7ggYyIwSA/BX7DJ+UXXffLp6XNcUijyLvttbPVCYa/3xQ==",
+ "version": "3.49.0",
+ "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.49.0.tgz",
+ "integrity": "sha512-+lmjic1pApJWDfPCpUUTc1m8azDqYCG1JN9YEngrx/hUyIcFJo6VZhj0A1Ai0wqoHcEIuQy+e9tk+4uDgdtsFA==",
"dev": true
},
"svelte-check": {
@@ -10076,9 +10079,9 @@
"dev": true
},
"svelte2tsx": {
- "version": "0.5.11",
- "resolved": "https://registry.npmjs.org/svelte2tsx/-/svelte2tsx-0.5.11.tgz",
- "integrity": "sha512-Is95G1wqNvEUJZ9DITRS2zfMwVJRZztMduPs1vJJ0cm65WUg/avBl5vBXjHycQL/qmFpaqa3NG4qWnf7bCHPag==",
+ "version": "0.5.12",
+ "resolved": "https://registry.npmjs.org/svelte2tsx/-/svelte2tsx-0.5.12.tgz",
+ "integrity": "sha512-43ayMivmh1IDCgb+4YDf54YuOJZGCUKFpp37RbfjGgNU+Pmb9HhP+zRXa1pMh4mwSTBfqZS0FbJZP3Q8CSxvvg==",
"dev": true,
"requires": {
"dedent-js": "^1.0.1",
@@ -10245,16 +10248,16 @@
}
},
"vite": {
- "version": "2.9.13",
- "resolved": "https://registry.npmjs.org/vite/-/vite-2.9.13.tgz",
- "integrity": "sha512-AsOBAaT0AD7Mhe8DuK+/kE4aWYFMx/i0ZNi98hJclxb4e0OhQcZYUrvLjIaQ8e59Ui7txcvKMiJC1yftqpQoDw==",
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-3.0.2.tgz",
+ "integrity": "sha512-TAqydxW/w0U5AoL5AsD9DApTvGb2iNbGs3sN4u2VdT1GFkQVUfgUldt+t08TZgi23uIauh1TUOQJALduo9GXqw==",
"dev": true,
"requires": {
- "esbuild": "^0.14.27",
+ "esbuild": "^0.14.47",
"fsevents": "~2.3.2",
- "postcss": "^8.4.13",
- "resolve": "^1.22.0",
- "rollup": "^2.59.0"
+ "postcss": "^8.4.14",
+ "resolve": "^1.22.1",
+ "rollup": "^2.75.6"
}
},
"webidl-conversions": {
diff --git a/src/svelte-components/package.json b/src/svelte-components/package.json
index 80a77fa..3b40fd4 100644
--- a/src/svelte-components/package.json
+++ b/src/svelte-components/package.json
@@ -11,20 +11,20 @@
"check": "svelte-check --tsconfig ./tsconfig.json"
},
"devDependencies": {
- "@sveltejs/kit": "^1.0.0-next.357",
- "@sveltejs/vite-plugin-svelte": "^1.0.0-next.49",
+ "@sveltejs/kit": "^1.0.0-next.392",
+ "@sveltejs/vite-plugin-svelte": "^1.0.1",
"@tsconfig/svelte": "^3.0.0",
"node-sass": "^7.0.1",
"polyfill-object.fromentries": "^1.0.1",
"smui-theme": "^6.0.0-beta.16",
"string.prototype.matchall": "^4.0.7",
- "svelte": "^3.48.0",
+ "svelte": "^3.49.0",
"svelte-check": "^2.8.0",
"svelte-material-ui": "^6.0.0-beta.16",
"svelte-preprocess": "^4.10.7",
"svelte-tiny-virtual-list": "^2.0.5",
"tslib": "^2.4.0",
"typescript": "^4.7.4",
- "vite": "^2.9.13"
+ "vite": "^3.0.2"
}
}