This commit is contained in:
Eugene Pankov 2021-05-31 20:13:09 +02:00
parent ff29392dad
commit 04ddd11dfc
No known key found for this signature in database
GPG Key ID: 5896FCBBDD1CF4F4
19 changed files with 489 additions and 76 deletions

1
.gitignore vendored
View File

@ -3,3 +3,4 @@ index.d.ts
*.ignore.js
*.ignore.js.map
dist
.mypy_cache

1
app-dist Symbolic link
View File

@ -0,0 +1 @@
../terminus

View File

@ -1 +1 @@
<!DOCTYPE html><html><head><base href="dist/"><meta name="viewport" content="initial-scale=1, minimal-ui, shrink-to-fit=no"><link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400" rel="stylesheet"><script src="index.js"></script><title>Terminus</title></head><body><div class="terminal"><iframe src="terminal.html"></iframe></div></body></html>
<!DOCTYPE html><html><head><base href="dist/"><meta name="viewport" content="initial-scale=1, minimal-ui, shrink-to-fit=no"><link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400" rel="stylesheet"><script src="index.js" defer></script><title>Terminus</title></head><body><div class="terminal"><iframe src="terminal.html"></iframe></div></body></html>

View File

@ -4,7 +4,7 @@ html
base(href='dist/')
meta(name='viewport', content='initial-scale=1, minimal-ui, shrink-to-fit=no')
link(href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400", rel="stylesheet")
script(src='index.js')
script(src='index.js', defer)
title Terminus
body
.terminal

22
manage.py Executable file
View File

@ -0,0 +1,22 @@
#!/usr/bin/env python
"""Django's command-line utility for administrative tasks."""
import os
import sys
def main():
"""Run administrative tasks."""
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'terminus.settings')
try:
from django.core.management import execute_from_command_line
except ImportError as exc:
raise ImportError(
"Couldn't import Django. Are you sure it's installed and "
"available on your PYTHONPATH environment variable? Did you "
"forget to activate a virtual environment?"
) from exc
execute_from_command_line(sys.argv)
if __name__ == '__main__':
main()

View File

@ -15,6 +15,7 @@
"bootstrap": "^4.3.1",
"browserify-zlib": "^0.2.0",
"buffer": "^6.0.3",
"constants-browserify": "^1.0.0",
"core-js": "^3.8.3",
"crypto-browserify": "^3.12.0",
"css-loader": "^2.1.0",
@ -31,6 +32,7 @@
"source-code-pro": "^2.30.1",
"source-sans-pro": "^2.45.0",
"stream-browserify": "^3.0.0",
"string_decoder": "^1.3.0",
"style-loader": "^0.23.1",
"typescript": "3.3.3333",
"val-loader": "^1.1.1",

111
poetry.lock generated Normal file
View File

@ -0,0 +1,111 @@
[[package]]
name = "asgiref"
version = "3.3.4"
description = "ASGI specs, helper code, and adapters"
category = "main"
optional = false
python-versions = ">=3.6"
[package.dependencies]
typing-extensions = {version = "*", markers = "python_version < \"3.8\""}
[package.extras]
tests = ["pytest", "pytest-asyncio", "mypy (>=0.800)"]
[[package]]
name = "django"
version = "3.2.3"
description = "A high-level Python Web framework that encourages rapid development and clean, pragmatic design."
category = "main"
optional = false
python-versions = ">=3.6"
[package.dependencies]
asgiref = ">=3.3.2,<4"
pytz = "*"
sqlparse = ">=0.2.2"
[package.extras]
argon2 = ["argon2-cffi (>=19.1.0)"]
bcrypt = ["bcrypt"]
[[package]]
name = "django-rest-framework"
version = "0.1.0"
description = "alias."
category = "main"
optional = false
python-versions = "*"
[package.dependencies]
djangorestframework = "*"
[[package]]
name = "djangorestframework"
version = "3.12.4"
description = "Web APIs for Django, made easy."
category = "main"
optional = false
python-versions = ">=3.5"
[package.dependencies]
django = ">=2.2"
[[package]]
name = "pytz"
version = "2021.1"
description = "World timezone definitions, modern and historical"
category = "main"
optional = false
python-versions = "*"
[[package]]
name = "sqlparse"
version = "0.4.1"
description = "A non-validating SQL parser."
category = "main"
optional = false
python-versions = ">=3.5"
[[package]]
name = "typing-extensions"
version = "3.10.0.0"
description = "Backported and Experimental Type Hints for Python 3.5+"
category = "main"
optional = false
python-versions = "*"
[metadata]
lock-version = "1.1"
python-versions = "^3.7"
content-hash = "d745493eff37d4b0b0b9e932d7f14cd1266603161ca3f04ffb50596f03ee9d89"
[metadata.files]
asgiref = [
{file = "asgiref-3.3.4-py3-none-any.whl", hash = "sha256:92906c611ce6c967347bbfea733f13d6313901d54dcca88195eaeb52b2a8e8ee"},
{file = "asgiref-3.3.4.tar.gz", hash = "sha256:d1216dfbdfb63826470995d31caed36225dcaf34f182e0fa257a4dd9e86f1b78"},
]
django = [
{file = "Django-3.2.3-py3-none-any.whl", hash = "sha256:7e0a1393d18c16b503663752a8b6790880c5084412618990ce8a81cc908b4962"},
{file = "Django-3.2.3.tar.gz", hash = "sha256:13ac78dbfd189532cad8f383a27e58e18b3d33f80009ceb476d7fcbfc5dcebd8"},
]
django-rest-framework = [
{file = "django-rest-framework-0.1.0.tar.gz", hash = "sha256:47a8f496fa69e3b6bd79f68dd7a1527d907d6b77f009e9db7cf9bb21cc565e4a"},
]
djangorestframework = [
{file = "djangorestframework-3.12.4-py3-none-any.whl", hash = "sha256:6d1d59f623a5ad0509fe0d6bfe93cbdfe17b8116ebc8eda86d45f6e16e819aaf"},
{file = "djangorestframework-3.12.4.tar.gz", hash = "sha256:f747949a8ddac876e879190df194b925c177cdeb725a099db1460872f7c0a7f2"},
]
pytz = [
{file = "pytz-2021.1-py2.py3-none-any.whl", hash = "sha256:eb10ce3e7736052ed3623d49975ce333bcd712c7bb19a58b9e2089d4057d0798"},
{file = "pytz-2021.1.tar.gz", hash = "sha256:83a4a90894bf38e243cf052c8b58f381bfe9a7a483f6a9cab140bc7f702ac4da"},
]
sqlparse = [
{file = "sqlparse-0.4.1-py3-none-any.whl", hash = "sha256:017cde379adbd6a1f15a61873f43e8274179378e95ef3fede90b5aa64d304ed0"},
{file = "sqlparse-0.4.1.tar.gz", hash = "sha256:0f91fd2e829c44362cbcfab3e9ae12e22badaa8a29ad5ff599f9ec109f0454e8"},
]
typing-extensions = [
{file = "typing_extensions-3.10.0.0-py2-none-any.whl", hash = "sha256:0ac0f89795dd19de6b97debb0c6af1c70987fd80a2d62d1958f7e56fcc31b497"},
{file = "typing_extensions-3.10.0.0-py3-none-any.whl", hash = "sha256:779383f6086d90c99ae41cf0ff39aac8a7937a9283ce0a414e5dd782f4c94a84"},
{file = "typing_extensions-3.10.0.0.tar.gz", hash = "sha256:50b6f157849174217d0656f99dc82fe932884fb250826c18350e159ec6cdf342"},
]

16
pyproject.toml Normal file
View File

@ -0,0 +1,16 @@
[tool.poetry]
name = "terminus-web"
version = "0.1.0"
description = ""
authors = ["Your Name <you@example.com>"]
[tool.poetry.dependencies]
python = "^3.7"
Django = "^3.2.3"
django-rest-framework = "^0.1.0"
[tool.poetry.dev-dependencies]
[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"

0
terminal-styles.scss Normal file
View File

1
terminal.d.ts vendored
View File

@ -6,6 +6,7 @@ import '@fortawesome/fontawesome-free/css/fontawesome.css';
import 'source-code-pro/source-code-pro.css';
import 'source-sans-pro/source-sans-pro.css';
import { Duplex } from 'stream-browserify';
import './terminal-styles.scss';
export declare class Socket extends Duplex {
webSocket: WebSocket;
constructor();

View File

@ -1,5 +1,5 @@
doctype html
html
html.terminus
head
meta(charset='UTF-8')
script(src='./terminal.js')

View File

@ -8,6 +8,7 @@ import * as yaml from 'js-yaml'
import { Duplex } from 'stream-browserify'
import { Buffer } from 'buffer'
import './terminal-styles.scss'
export class Socket extends Duplex {
webSocket: WebSocket
@ -22,10 +23,10 @@ export class Socket extends Duplex {
connect () {
this.webSocket = new WebSocket('ws://localhost:9001/')
this.webSocket.onopen = event => {
this.emit('connect')
this['emit']('connect')
}
this.webSocket.onmessage = async event => {
this.emit('data', Buffer.from(await event.data.arrayBuffer()))
this['emit']('data', Buffer.from(await event.data.arrayBuffer()))
}
}
@ -69,6 +70,8 @@ async function start () {
terminal:
font: "Source Code Pro"
autoOpen: true
rightClick: menu
copyOnSelect: false
appearance:
vibrancy: false
pluginBlacklist: []
@ -94,20 +97,20 @@ async function start () {
mkdirSync: path => {
console.warn('mock mkdirSync', path)
},
stat: (path, cb) => {
if ([
'resources/builtin-plugins',
'resources/builtin-plugins/terminus-core/package.json',
'resources/builtin-plugins/terminus-ssh/package.json',
'resources/builtin-plugins/terminus-settings/package.json',
'resources/builtin-plugins/terminus-terminal/package.json',
].includes(path)) {
cb(null, {})
} else {
console.warn('mock stat', path)
cb('ENOEXIST')
}
},
// stat: (path, cb) => {
// if ([
// 'resources/builtin-plugins',
// 'resources/builtin-plugins/terminus-core/package.json',
// 'resources/builtin-plugins/terminus-ssh/package.json',
// 'resources/builtin-plugins/terminus-settings/package.json',
// 'resources/builtin-plugins/terminus-terminal/package.json',
// ].includes(path)) {
// cb(null, {})
// } else {
// console.warn('mock stat', path)
// cb('ENOEXIST')
// }
// },
writeFileSync: () => null,
readFileSync: (path) => {
if (path === 'app-path/config.yaml') {
@ -116,31 +119,22 @@ async function start () {
return ''
},
readFile: (path, enc, cb) => {
if ([
'resources/builtin-plugins/terminus-core/package.json',
'resources/builtin-plugins/terminus-ssh/package.json',
'resources/builtin-plugins/terminus-terminal/package.json',
'resources/builtin-plugins/terminus-settings/package.json',
].includes(path)) {
cb(null, '{ "keywords": ["terminus-builtin-plugin"], "author": "" }')
} else {
console.warn('mock readFile', path)
cb('UNKNOWN', null)
}
},
readdir: (path, cb) => {
if (path === 'resources/builtin-plugins') {
cb(null, [
'terminus-core',
'terminus-ssh',
'terminus-settings',
'terminus-terminal',
])
} else {
console.warn('mock readdir', path)
cb(null, [])
}
},
// readdir: (path, cb) => {
// if (path === 'resources/builtin-plugins') {
// cb(null, [
// 'terminus-core',
// 'terminus-ssh',
// 'terminus-settings',
// 'terminus-terminal',
// ])
// } else {
// console.warn('mock readdir', path)
// cb(null, [])
// }
// },
constants: {},
},
'@electron/remote': {
@ -149,6 +143,7 @@ async function start () {
getPath: () => 'app-path',
getWindow: () => ({
reload: () => null,
setTrafficLightPosition: () => null,
}),
},
screen: {
@ -221,10 +216,6 @@ async function start () {
clearLine: stream => stream.write('\r'),
},
zlib: require('browserify-zlib'),
util: {
...require('util'),
promisify: () => null,
},
'any-promise': Promise,
net: {
Socket,
@ -256,7 +247,7 @@ async function start () {
},
'readable-stream': {},
os: {
platform: () => 'linux',
platform: () => 'web',
homedir: () => '/home',
},
'mz/child_process': {
@ -287,6 +278,7 @@ async function start () {
},
},
dns: {},
util: require('util'),
keytar: {
getPassword: () => null,
},
@ -316,17 +308,18 @@ async function start () {
Object.assign(window, {
require: (path) => {
if (mocks[path]) {
console.warn('requiring mock', path)
return mocks[path]
}
if (builtins[path]) {
return builtins[path]
}
console.warn('requiring', path)
console.error('requiring real module', path)
},
process: {
env: { XWEB: 1, LOGNAME: 'root' },
argv: ['terminus'],
platform: 'linux',
platform: 'darwin',
on: () => null,
stdout: {},
stderr: {},
@ -351,29 +344,58 @@ async function start () {
window['__dirname'] = '__dirname'
window['setImmediate'] = setTimeout
mocks.module['prototype'] = { require: window['require'] }
window['terminusConfig'] = configContent
let pluginCode = {
core: await import(/* webpackChunkName: "app" */ '../terminus/terminus-core/dist/index.js'),
ssh: await import(/* webpackChunkName: "app" */ '../terminus/terminus-ssh/dist/index.js'),
settings: await import(/* webpackChunkName: "app" */ '../terminus/terminus-settings/dist/index.js'),
terminal: await import(/* webpackChunkName: "app" */ '../terminus/terminus-terminal/dist/index.js'),
}
require('util').promisify = () => null
function loadPlugin (name) {
let code = `(function (exports, require, module) { \n${pluginCode[name].default}\n })`
// let plugins: Record<string, any> = {}
// plugins.core = builtins['terminus-core'] = await import(/* webpackChunkName: "app" */ '../terminus/terminus-core/dist/index.js')
// plugins.settings = builtins['terminus-settings'] = await import(/* webpackChunkName: "app" */ '../terminus/terminus-settings/dist/index.js')
// plugins.terminal = builtins['terminus-terminal'] = await import(/* webpackChunkName: "app" */ '../terminus/terminus-terminal/dist/index.js')
// plugins['community-color-schemes'] = builtins['terminus-community-color-schemes'] = await import(/* webpackChunkName: "app" */ '../terminus/terminus-community-color-schemes/dist/index.js')
// plugins.ssh = builtins['terminus-ssh'] = await import(/* webpackChunkName: "app" */ '../terminus/terminus-ssh/dist/index.js')
// plugins.web = builtins['terminus-web'] = await import(/* webpackChunkName: "app" */ '../terminus/terminus-web/dist/index.js')
async function loadPlugin (name, file = 'index.js') {
let code = await (await fetch(`../app-dist/${name}/dist/${file}`)).text()
code = `(function (exports, require, module) { \n${code}\n })`
let m = eval(code)
let module = { exports: {} }
m(module.exports, window['require'], module)
return module.exports
}
for (const plugin of ['core', 'settings', 'terminal', 'ssh']) {
builtins[`resources/builtin-plugins/terminus-${plugin}`] = builtins[`terminus-${plugin}`] = loadPlugin(plugin)
const pluginModules = []
for (const plugin of [
'terminus-core',
'terminus-settings',
'terminus-terminal',
'terminus-ssh',
'terminus-community-color-schemes',
'terminus-web',
]) {
console.log(`Loading ${plugin}`)
const mod = await loadPlugin(plugin)
builtins[`resources/builtin-plugins/${plugin}`] = builtins[plugin] = mod
pluginModules.push(mod)
console.log(mod)
}
await import(/* webpackChunkName: "app" */ '../terminus/app/dist/preload.js')
// for (const name of ['core', 'settings', 'terminal', 'ssh', 'community-color-schemes', 'web']) {
// plugins[name].pluginName = name
// builtins[`resources/builtin-plugins/terminus-${name}`] = plugins[name]
// }
// await import(/* webpackChunkName: "app" */ '../terminus/app/dist/preload.js')
// document.querySelector('app-root')['style'].display = 'flex'
// await import(/* webpackChunkName: "app" */ '../terminus/app/dist/bundle-web.js')
// window['bootstrapTerminus'](Object.values(plugins), { config })
await loadPlugin('app', 'preload.js')
await loadPlugin('app', 'bundle-web.js')
document.querySelector('app-root')['style'].display = 'flex'
await import(/* webpackChunkName: "app" */ '../terminus/app/dist/bundle.js')
window['bootstrapTerminus'](pluginModules, { config })
}
start()

0
terminus/__init__.py Normal file
View File

16
terminus/asgi.py Normal file
View File

@ -0,0 +1,16 @@
"""
ASGI config for terminus project.
It exposes the ASGI callable as a module-level variable named ``application``.
For more information on this file, see
https://docs.djangoproject.com/en/3.2/howto/deployment/asgi/
"""
import os
from django.core.asgi import get_asgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'terminus.settings')
application = get_asgi_application()

125
terminus/settings.py Normal file
View File

@ -0,0 +1,125 @@
"""
Django settings for terminus project.
Generated by 'django-admin startproject' using Django 3.2.3.
For more information on this file, see
https://docs.djangoproject.com/en/3.2/topics/settings/
For the full list of settings and their values, see
https://docs.djangoproject.com/en/3.2/ref/settings/
"""
from pathlib import Path
# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent
# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/3.2/howto/deployment/checklist/
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'django-insecure-jw3fshufj(1$iv+&9bie=r%27+^e2sz0!_gq38*5p5!csrm&#s'
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
ALLOWED_HOSTS = []
# Application definition
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
ROOT_URLCONF = 'terminus.urls'
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
WSGI_APPLICATION = 'terminus.wsgi.application'
# Database
# https://docs.djangoproject.com/en/3.2/ref/settings/#databases
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
# Password validation
# https://docs.djangoproject.com/en/3.2/ref/settings/#auth-password-validators
AUTH_PASSWORD_VALIDATORS = [
{
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
},
]
# Internationalization
# https://docs.djangoproject.com/en/3.2/topics/i18n/
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/3.2/howto/static-files/
STATIC_URL = '/static/'
# Default primary key field type
# https://docs.djangoproject.com/en/3.2/ref/settings/#default-auto-field
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'

21
terminus/urls.py Normal file
View File

@ -0,0 +1,21 @@
"""terminus URL Configuration
The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/3.2/topics/http/urls/
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: path('', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.urls import include, path
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path
urlpatterns = [
path('admin/', admin.site.urls),
]

16
terminus/wsgi.py Normal file
View File

@ -0,0 +1,16 @@
"""
WSGI config for terminus project.
It exposes the WSGI callable as a module-level variable named ``application``.
For more information on this file, see
https://docs.djangoproject.com/en/3.2/howto/deployment/wsgi/
"""
import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'terminus.settings')
application = get_wsgi_application()

View File

@ -33,10 +33,25 @@ module.exports = {
extensions: ['.ts', '.js'],
fallback: {
stream: require.resolve('stream-browserify'),
assert: require.resolve('assert'),
util: require.resolve('util'),
assert: require.resolve('assert/'),
constants: require.resolve('constants-browserify'),
util: require.resolve('util/'),
zlib: require.resolve('browserify-zlib'),
},
},
externals: {
'dns': 'commonjs dns',
'tls': 'commonjs tls',
'tty': 'commonjs tty',
'crypto': 'commonjs crypto',
'querystring': 'commonjs querystring',
'https': 'commonjs https',
'http': 'commonjs http',
'url': 'commonjs url',
'terminus-core': 'commonjs terminus-core',
'terminus-terminal': 'commonjs terminus-terminal',
'terminus-settings': 'commonjs terminus-settings',
},
module: {
rules: [
{
@ -49,7 +64,7 @@ module.exports = {
},
},
{ test: /terminus\/app\/dist/, use: ['script-loader'] },
{ test: /dist\/index/, use: ['raw-loader'] },
// { test: /dist\/index/, use: ['raw-loader'] },
{
test: /\.(ttf|eot|otf|woff|woff2)(\?v=[0-9]\.[0-9]\.[0-9])?$/,
use: {
@ -73,3 +88,31 @@ module.exports = {
],
}
}
const externals = [
'@electron/remote',
'any-promise',
'child_process',
'electron-promise-ipc',
'electron',
'fontmanager-redux',
'fs',
'keytar',
'hterm-umdjs',
'macos-native-processlist',
'native-process-working-directory',
'net',
'os',
'path',
'readline',
'serialport',
'socksv5',
'windows-native-registry',
'windows-process-tree',
'windows-process-tree/build/Release/windows_process_tree.node',
]
for (const k of externals) {
module.exports.externals[k] = `commonjs ${k}`
}

View File

@ -344,11 +344,6 @@ arr-union@^3.1.0:
resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4"
integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=
array-filter@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-1.0.0.tgz#baf79e62e6ef4c2a4c0b831232daffec251f9d83"
integrity sha1-uveeYubvTCpMC4MSMtr/7CUfnYM=
array-find-index@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1"
@ -359,6 +354,17 @@ array-unique@^0.3.2:
resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=
array.prototype.filter@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/array.prototype.filter/-/array.prototype.filter-1.0.0.tgz#24d63e38983cdc6bf023a3c574b2f2a3f384c301"
integrity sha512-TfO1gz+tLm+Bswq0FBOXPqAchtCr2Rn48T8dLJoRFl8NoEosjZmzptmuo1X8aZBzZcqsR1W8U761tjACJtngTQ==
dependencies:
call-bind "^1.0.2"
define-properties "^1.1.3"
es-abstract "^1.18.0"
es-array-method-boxes-properly "^1.0.0"
is-string "^1.0.5"
asap@~2.0.3:
version "2.0.6"
resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46"
@ -415,11 +421,11 @@ atob@^2.1.1:
integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
available-typed-arrays@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.2.tgz#6b098ca9d8039079ee3f77f7b783c4480ba513f5"
integrity sha512-XWX3OX8Onv97LMk/ftVyBibpGwY5a8SmuxZPzeOxqmuEqUCOM9ZE+uIaD1VNJ5QnvU2UQusvmKbuM1FR8QWGfQ==
version "1.0.3"
resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.3.tgz#fb7d02445bfedefad79fad1fe47931163a227198"
integrity sha512-CuPhFULixV/d89POo1UG4GqGbR7dmrefY2ZdmsYakeR4gOSJXoF7tfeaiqMHGOMrlTiJoeEs87fpLsBYmE2BMw==
dependencies:
array-filter "^1.0.0"
array.prototype.filter "^1.0.0"
awesome-typescript-loader@^5.2.1:
version "5.2.1"
@ -872,6 +878,11 @@ constantinople@^3.0.1:
babel-types "^6.26.0"
babylon "^6.18.0"
constants-browserify@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75"
integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=
copy-descriptor@^0.1.0:
version "0.1.1"
resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
@ -1155,7 +1166,7 @@ error-ex@^1.2.0:
dependencies:
is-arrayish "^0.2.1"
es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2:
es-abstract@^1.18.0, es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2:
version "1.18.0"
resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0.tgz#ab80b359eecb7ede4c298000390bc5ac3ec7b5a4"
integrity sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==
@ -1177,6 +1188,11 @@ es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2:
string.prototype.trimstart "^1.0.4"
unbox-primitive "^1.0.0"
es-array-method-boxes-properly@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e"
integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==
es-module-lexer@^0.4.0:
version "0.4.1"
resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.4.1.tgz#dda8c6a14d8f340a24e34331e0fab0cb50438e0e"
@ -3570,7 +3586,7 @@ string.prototype.trimstart@^1.0.4:
call-bind "^1.0.2"
define-properties "^1.1.3"
string_decoder@^1.1.1:
string_decoder@^1.1.1, string_decoder@^1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==