Merge branch 'stable' into sdl

sdl^2
Bronwen 2021-05-24 03:15:18 -04:00
commit 88b31b03af
46 changed files with 2414 additions and 858 deletions

4
.gitignore vendored
View File

@ -1,2 +1,6 @@
node_modules
out
.system
*.tgz
.nyc_output
coverage

8
.mocharc.json 100644
View File

@ -0,0 +1,8 @@
{
"spec": [
"test/**/*.test.ts"
],
"loader": [
"ts-node/esm.mjs"
]
}

View File

@ -3,4 +3,12 @@ src
test
.editorconfig
tsconfig.json
examples
examples
.system
*.tgz
.nyc_output
coverage
syntax.md
testinglib
.travis.yml
.mocharc.json

View File

@ -4,4 +4,5 @@ node_js:
os:
- windows
- linux
- osx
- osx
env: YARN_GPG=no

View File

@ -685,6 +685,7 @@ tar@^6.1.0:
terminal-kit@^2.1.2:
version "2.1.2"
resolved "https://registry.yarnpkg.com/terminal-kit/-/terminal-kit-2.1.2.tgz#08689ff9f8efc6614d34d4cc7be916a91742b896"
integrity sha512-1eG7CrQfE1dd5ZHPG5WrTk/DTeskFPqSLEl+QYmvwvI41dRCN2j1qVyxA4FwE0/x24AbjhSA3FJSIgWqQD610Q==
dependencies:
"@cronvel/get-pixels" "^3.4.0"
chroma-js "^2.1.1"

View File

@ -19,4 +19,6 @@ async restore {
// window.setScene()
// await counter.render();
sync();
}

View File

@ -1,13 +1,13 @@
{
"name": "test",
"version": "1.0.0",
"main": "index.js",
"license": "MIT",
"dependencies": {
"chalk": "^4.1.1",
"random-world": "^1.2.1",
"signale": "^1.4.0",
"sisteransi": "^1.0.5",
"terminal-kit": "^2.1.2"
}
}
{
"name": "valyria",
"version": "1.0.0",
"main": "index.js",
"license": "MIT",
"dependencies": {
"@kmamal/sdl": "^0.0.13",
"canvas": "^2.8.0",
"chalk": "^4.1.1",
"sisteransi": "^1.0.5",
"terminal-kit": "^2.1.2"
}
}

View File

@ -0,0 +1,735 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
# yarn lockfile v1
"@cronvel/get-pixels@^3.4.0":
version "3.4.0"
resolved "https://registry.yarnpkg.com/@cronvel/get-pixels/-/get-pixels-3.4.0.tgz#697cd691c16bbb8b29ed596da73fd6a7e9a2f34d"
dependencies:
jpeg-js "^0.4.1"
ndarray "^1.0.19"
ndarray-pack "^1.1.1"
node-bitmap "0.0.1"
omggif "^1.0.10"
pngjs "^5.0.0"
"@kmamal/sdl@^0.0.13":
version "0.0.13"
resolved "https://registry.yarnpkg.com/@kmamal/sdl/-/sdl-0.0.13.tgz#20524ee00bc6fc427a2cc3c2d79ada1c34c7c338"
dependencies:
bindings "*"
prebuild-install "^6.0.1"
"@mapbox/node-pre-gyp@^1.0.0":
version "1.0.5"
resolved "https://registry.yarnpkg.com/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.5.tgz#2a0b32fcb416fb3f2250fd24cb2a81421a4f5950"
dependencies:
detect-libc "^1.0.3"
https-proxy-agent "^5.0.0"
make-dir "^3.1.0"
node-fetch "^2.6.1"
nopt "^5.0.0"
npmlog "^4.1.2"
rimraf "^3.0.2"
semver "^7.3.4"
tar "^6.1.0"
abbrev@1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
agent-base@6:
version "6.0.2"
resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77"
dependencies:
debug "4"
ansi-regex@^2.0.0:
version "2.1.1"
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
ansi-regex@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
ansi-styles@^4.1.0:
version "4.3.0"
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
dependencies:
color-convert "^2.0.1"
aproba@^1.0.3:
version "1.2.0"
resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
are-we-there-yet@~1.1.2:
version "1.1.5"
resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21"
dependencies:
delegates "^1.0.0"
readable-stream "^2.0.6"
balanced-match@^1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
base64-js@^1.3.1:
version "1.5.1"
resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
bindings@*:
version "1.5.0"
resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df"
dependencies:
file-uri-to-path "1.0.0"
bl@^4.0.3:
version "4.1.0"
resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a"
dependencies:
buffer "^5.5.0"
inherits "^2.0.4"
readable-stream "^3.4.0"
brace-expansion@^1.1.7:
version "1.1.11"
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
dependencies:
balanced-match "^1.0.0"
concat-map "0.0.1"
buffer@^5.5.0:
version "5.7.1"
resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0"
dependencies:
base64-js "^1.3.1"
ieee754 "^1.1.13"
canvas@^2.8.0:
version "2.8.0"
resolved "https://registry.yarnpkg.com/canvas/-/canvas-2.8.0.tgz#f99ca7f25e6e26686661ffa4fec1239bbef74461"
dependencies:
"@mapbox/node-pre-gyp" "^1.0.0"
nan "^2.14.0"
simple-get "^3.0.3"
chalk@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.1.tgz#c80b3fab28bf6371e6863325eee67e618b77e6ad"
dependencies:
ansi-styles "^4.1.0"
supports-color "^7.1.0"
chownr@^1.1.1:
version "1.1.4"
resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b"
chownr@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece"
chroma-js@^2.1.1:
version "2.1.2"
resolved "https://registry.yarnpkg.com/chroma-js/-/chroma-js-2.1.2.tgz#1075cb9ae25bcb2017c109394168b5cf3aa500ec"
dependencies:
cross-env "^6.0.3"
code-point-at@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
color-convert@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
dependencies:
color-name "~1.1.4"
color-name@~1.1.4:
version "1.1.4"
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
concat-map@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
console-control-strings@^1.0.0, console-control-strings@~1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
core-util-is@~1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
cross-env@^6.0.3:
version "6.0.3"
resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-6.0.3.tgz#4256b71e49b3a40637a0ce70768a6ef5c72ae941"
dependencies:
cross-spawn "^7.0.0"
cross-spawn@^7.0.0:
version "7.0.3"
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
dependencies:
path-key "^3.1.0"
shebang-command "^2.0.0"
which "^2.0.1"
cwise-compiler@^1.1.2:
version "1.1.3"
resolved "https://registry.yarnpkg.com/cwise-compiler/-/cwise-compiler-1.1.3.tgz#f4d667410e850d3a313a7d2db7b1e505bb034cc5"
dependencies:
uniq "^1.0.0"
debug@4:
version "4.3.1"
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee"
dependencies:
ms "2.1.2"
decompress-response@^4.2.0:
version "4.2.1"
resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-4.2.1.tgz#414023cc7a302da25ce2ec82d0d5238ccafd8986"
dependencies:
mimic-response "^2.0.0"
deep-extend@^0.6.0:
version "0.6.0"
resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
delegates@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
detect-libc@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"
end-of-stream@^1.1.0, end-of-stream@^1.4.1:
version "1.4.4"
resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
dependencies:
once "^1.4.0"
expand-template@^2.0.3:
version "2.0.3"
resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c"
file-uri-to-path@1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd"
fs-constants@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad"
fs-minipass@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb"
dependencies:
minipass "^3.0.0"
fs.realpath@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
gauge@~2.7.3:
version "2.7.4"
resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
dependencies:
aproba "^1.0.3"
console-control-strings "^1.0.0"
has-unicode "^2.0.0"
object-assign "^4.1.0"
signal-exit "^3.0.0"
string-width "^1.0.1"
strip-ansi "^3.0.1"
wide-align "^1.1.0"
github-from-package@0.0.0:
version "0.0.0"
resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce"
glob@^7.1.3:
version "7.1.7"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90"
dependencies:
fs.realpath "^1.0.0"
inflight "^1.0.4"
inherits "2"
minimatch "^3.0.4"
once "^1.3.0"
path-is-absolute "^1.0.0"
has-flag@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
has-unicode@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
https-proxy-agent@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2"
dependencies:
agent-base "6"
debug "4"
ieee754@^1.1.13:
version "1.2.1"
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
inflight@^1.0.4:
version "1.0.6"
resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
dependencies:
once "^1.3.0"
wrappy "1"
inherits@2, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3:
version "2.0.4"
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
ini@~1.3.0:
version "1.3.8"
resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c"
iota-array@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/iota-array/-/iota-array-1.0.0.tgz#81ef57fe5d05814cd58c2483632a99c30a0e8087"
is-buffer@^1.0.2:
version "1.1.6"
resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
is-fullwidth-code-point@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
dependencies:
number-is-nan "^1.0.0"
is-fullwidth-code-point@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
isarray@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
isexe@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
jpeg-js@^0.4.1:
version "0.4.3"
resolved "https://registry.yarnpkg.com/jpeg-js/-/jpeg-js-0.4.3.tgz#6158e09f1983ad773813704be80680550eff977b"
lazyness@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/lazyness/-/lazyness-1.2.0.tgz#5dc0f02c37280436b21f0e4918ce6e72a109c657"
lru-cache@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
dependencies:
yallist "^4.0.0"
make-dir@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f"
dependencies:
semver "^6.0.0"
mimic-response@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-2.1.0.tgz#d13763d35f613d09ec37ebb30bac0469c0ee8f43"
minimatch@^3.0.4:
version "3.0.4"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
dependencies:
brace-expansion "^1.1.7"
minimist@^1.2.0, minimist@^1.2.3:
version "1.2.5"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
minipass@^3.0.0:
version "3.1.3"
resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.3.tgz#7d42ff1f39635482e15f9cdb53184deebd5815fd"
dependencies:
yallist "^4.0.0"
minizlib@^2.1.1:
version "2.1.2"
resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931"
dependencies:
minipass "^3.0.0"
yallist "^4.0.0"
mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3:
version "0.5.3"
resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113"
mkdirp@^1.0.3:
version "1.0.4"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
ms@2.1.2:
version "2.1.2"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
nan@^2.14.0:
version "2.14.2"
resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19"
napi-build-utils@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806"
ndarray-pack@^1.1.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/ndarray-pack/-/ndarray-pack-1.2.1.tgz#8caebeaaa24d5ecf70ff86020637977da8ee585a"
dependencies:
cwise-compiler "^1.1.2"
ndarray "^1.0.13"
ndarray@^1.0.13, ndarray@^1.0.19:
version "1.0.19"
resolved "https://registry.yarnpkg.com/ndarray/-/ndarray-1.0.19.tgz#6785b5f5dfa58b83e31ae5b2a058cfd1ab3f694e"
dependencies:
iota-array "^1.0.0"
is-buffer "^1.0.2"
nextgen-events@^1.3.4:
version "1.4.0"
resolved "https://registry.yarnpkg.com/nextgen-events/-/nextgen-events-1.4.0.tgz#82e7201e4d8421f1cb4dcfce973c10b455fdc2be"
node-abi@^2.21.0:
version "2.26.0"
resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.26.0.tgz#355d5d4bc603e856f74197adbf3f5117a396ba40"
dependencies:
semver "^5.4.1"
node-bitmap@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/node-bitmap/-/node-bitmap-0.0.1.tgz#180eac7003e0c707618ef31368f62f84b2a69091"
node-fetch@^2.6.1:
version "2.6.1"
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052"
noop-logger@^0.1.1:
version "0.1.1"
resolved "https://registry.yarnpkg.com/noop-logger/-/noop-logger-0.1.1.tgz#94a2b1633c4f1317553007d8966fd0e841b6a4c2"
nopt@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88"
dependencies:
abbrev "1"
npmlog@^4.0.1, npmlog@^4.1.2:
version "4.1.2"
resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
dependencies:
are-we-there-yet "~1.1.2"
console-control-strings "~1.1.0"
gauge "~2.7.3"
set-blocking "~2.0.0"
number-is-nan@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
object-assign@^4.1.0:
version "4.1.1"
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
omggif@^1.0.10:
version "1.0.10"
resolved "https://registry.yarnpkg.com/omggif/-/omggif-1.0.10.tgz#ddaaf90d4a42f532e9e7cb3a95ecdd47f17c7b19"
once@^1.3.0, once@^1.3.1, once@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
dependencies:
wrappy "1"
path-is-absolute@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
path-key@^3.1.0:
version "3.1.1"
resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
pngjs@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-5.0.0.tgz#e79dd2b215767fd9c04561c01236df960bce7fbb"
prebuild-install@^6.0.1:
version "6.1.2"
resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-6.1.2.tgz#6ce5fc5978feba5d3cbffedca0682b136a0b5bff"
dependencies:
detect-libc "^1.0.3"
expand-template "^2.0.3"
github-from-package "0.0.0"
minimist "^1.2.3"
mkdirp-classic "^0.5.3"
napi-build-utils "^1.0.1"
node-abi "^2.21.0"
noop-logger "^0.1.1"
npmlog "^4.0.1"
pump "^3.0.0"
rc "^1.2.7"
simple-get "^3.0.3"
tar-fs "^2.0.0"
tunnel-agent "^0.6.0"
process-nextick-args@~2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
pump@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
dependencies:
end-of-stream "^1.1.0"
once "^1.3.1"
rc@^1.2.7:
version "1.2.8"
resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
dependencies:
deep-extend "^0.6.0"
ini "~1.3.0"
minimist "^1.2.0"
strip-json-comments "~2.0.1"
readable-stream@^2.0.6:
version "2.3.7"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
dependencies:
core-util-is "~1.0.0"
inherits "~2.0.3"
isarray "~1.0.0"
process-nextick-args "~2.0.0"
safe-buffer "~5.1.1"
string_decoder "~1.1.1"
util-deprecate "~1.0.1"
readable-stream@^3.1.1, readable-stream@^3.4.0:
version "3.6.0"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198"
dependencies:
inherits "^2.0.3"
string_decoder "^1.1.1"
util-deprecate "^1.0.1"
rimraf@^3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
dependencies:
glob "^7.1.3"
safe-buffer@^5.0.1, safe-buffer@~5.2.0:
version "5.2.1"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
safe-buffer@~5.1.0, safe-buffer@~5.1.1:
version "5.1.2"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
semver@^5.4.1:
version "5.7.1"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
semver@^6.0.0:
version "6.3.0"
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
semver@^7.3.4:
version "7.3.5"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7"
dependencies:
lru-cache "^6.0.0"
set-blocking@~2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
setimmediate@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
seventh@^0.7.40:
version "0.7.40"
resolved "https://registry.yarnpkg.com/seventh/-/seventh-0.7.40.tgz#a5a010496cb84421bb81f524840484a5aa473be9"
dependencies:
setimmediate "^1.0.5"
shebang-command@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
dependencies:
shebang-regex "^3.0.0"
shebang-regex@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
signal-exit@^3.0.0:
version "3.0.3"
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c"
simple-concat@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f"
simple-get@^3.0.3:
version "3.1.0"
resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-3.1.0.tgz#b45be062435e50d159540b576202ceec40b9c6b3"
dependencies:
decompress-response "^4.2.0"
once "^1.3.1"
simple-concat "^1.0.0"
sisteransi@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed"
string-kit@^0.12.5:
version "0.12.5"
resolved "https://registry.yarnpkg.com/string-kit/-/string-kit-0.12.5.tgz#e7f646e7740e54b7ecae6cf67b73bb616aa16652"
string-width@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
dependencies:
code-point-at "^1.0.0"
is-fullwidth-code-point "^1.0.0"
strip-ansi "^3.0.0"
"string-width@^1.0.2 || 2":
version "2.1.1"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
dependencies:
is-fullwidth-code-point "^2.0.0"
strip-ansi "^4.0.0"
string_decoder@^1.1.1:
version "1.3.0"
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
dependencies:
safe-buffer "~5.2.0"
string_decoder@~1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
dependencies:
safe-buffer "~5.1.0"
strip-ansi@^3.0.0, strip-ansi@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
dependencies:
ansi-regex "^2.0.0"
strip-ansi@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
dependencies:
ansi-regex "^3.0.0"
strip-json-comments@~2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
supports-color@^7.1.0:
version "7.2.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
dependencies:
has-flag "^4.0.0"
tar-fs@^2.0.0:
version "2.1.1"
resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784"
dependencies:
chownr "^1.1.1"
mkdirp-classic "^0.5.2"
pump "^3.0.0"
tar-stream "^2.1.4"
tar-stream@^2.1.4:
version "2.2.0"
resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287"
dependencies:
bl "^4.0.3"
end-of-stream "^1.4.1"
fs-constants "^1.0.0"
inherits "^2.0.3"
readable-stream "^3.1.1"
tar@^6.1.0:
version "6.1.0"
resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.0.tgz#d1724e9bcc04b977b18d5c573b333a2207229a83"
dependencies:
chownr "^2.0.0"
fs-minipass "^2.0.0"
minipass "^3.0.0"
minizlib "^2.1.1"
mkdirp "^1.0.3"
yallist "^4.0.0"
terminal-kit@^2.1.2:
version "2.1.2"
resolved "https://registry.yarnpkg.com/terminal-kit/-/terminal-kit-2.1.2.tgz#08689ff9f8efc6614d34d4cc7be916a91742b896"
integrity sha512-1eG7CrQfE1dd5ZHPG5WrTk/DTeskFPqSLEl+QYmvwvI41dRCN2j1qVyxA4FwE0/x24AbjhSA3FJSIgWqQD610Q==
dependencies:
"@cronvel/get-pixels" "^3.4.0"
chroma-js "^2.1.1"
lazyness "^1.2.0"
ndarray "^1.0.19"
nextgen-events "^1.3.4"
seventh "^0.7.40"
string-kit "^0.12.5"
tree-kit "^0.7.0"
tree-kit@^0.7.0:
version "0.7.0"
resolved "https://registry.yarnpkg.com/tree-kit/-/tree-kit-0.7.0.tgz#f677b10f79d9b4442ba20e0d87c8a12ecabe5fbb"
tunnel-agent@^0.6.0:
version "0.6.0"
resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
dependencies:
safe-buffer "^5.0.1"
uniq@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff"
util-deprecate@^1.0.1, util-deprecate@~1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
which@^2.0.1:
version "2.0.2"
resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
dependencies:
isexe "^2.0.0"
wide-align@^1.1.0:
version "1.1.3"
resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457"
dependencies:
string-width "^1.0.2 || 2"
wrappy@1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
yallist@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"

View File

@ -1,36 +1,55 @@
{
"name": "vogue",
"version": "0.0.1",
"name": "vogue-runtime",
"version": "0.1.0",
"main": "index.js",
"license": "MIT",
"type": "module",
"bin": {
"vogue": "out/run.js"
},
"scripts": {
"test": "node --enable-source-maps --unhandled-rejections=strict out/run.js test",
"debug": "cross-env DEBUG=vogue:* yarn test",
"debug:watch": "cross-env DEBUG=vogue:* supervisor -w out,test,lib -n exit --exec yarn -- test",
"postinstall": "yarn compile && cd test && yarn",
"postcompile:watch": "echo DONE",
"compile": "tsc",
"compile:watch": "tsc --watch"
"repository": {
"url": "https://github.com/marcus13345/vogue"
},
"dependencies": {
"scripts": {
"dev": "multiview [ yarn test:watch ] [ yarn compile:watch ] [ yarn debug:watch ]",
"test": "c8 --all mocha",
"test:watch": "cross-env FORCE_COLOR=true supervisor -t -w src,test,.mocharc.json -n exit --extensions js,ts,node --exec cross-env -- yarn test",
"debug": "cross-env DEBUG=vogue:* FORCE_COLOR=true DEBUG_COLORS=true DEBUG_HIDE_DATE=true node --enable-source-maps --unhandled-rejections=strict out/run.js examples/test",
"debug:watch": "supervisor -t -w out,test/system/**/*.v,lib -n exit --exec yarn -- debug",
"compile": "tsc",
"compile:watch": "yarn compile --watch --preserveWatchOutput",
"postinstall": "yarn compile && cd examples/test && yarn"
},
"devDependencies": {
"c8": "^7.7.2",
"cross-env": "^7.0.3",
"multiview": "^3.0.1",
"yarn": "^1.22.10",
"@types/chai": "^4.2.18",
"@types/debug": "^4.1.5",
"@types/fs-extra": "^9.0.11",
"@types/jest": "^26.0.23",
"@types/lodash": "^4.14.169",
"@types/nearley": "^2.11.1",
"@types/node": "^15.3.0",
"@types/sinon": "^10.0.0",
"@types/uglify-js": "^3.13.0",
"cross-env": "^7.0.3",
"@types/uuid": "^8.3.0",
"chai": "^4.3.4",
"mocha": "^8.4.0",
"mocha-lcov-reporter": "^1.3.0",
"supervisor": "^0.12.0",
"sinon": "^10.0.0",
"ts-node": "^9.1.1",
"typescript": "^4.2.4"
},
"dependencies": {
"debug": "^4.3.1",
"fs-extra": "^10.0.0",
"lodash": "^4.17.21",
"moo": "^0.5.1",
"nearley": "^2.20.1",
"nedb": "^1.8.0",
"supervisor": "^0.12.0",
"typescript": "^4.2.4",
"uglify-js": "^3.13.5",
"yarn": "^1.22.10"
"uuid": "^8.3.2"
}
}

View File

@ -1,33 +1,53 @@
import Serializable from './Serializable.js';
import minify from './minify.js';
import debug from 'debug';
import _ from 'lodash';
const log = debug('vogue:instance');
import vm from 'vm';
import Module, { Link } from './Module.js';
import Module, { LinkDescription, Variable } from './Module.js';
import System from './System.js';
import { KV } from './KV.js';
import * as uuid from 'uuid';
/**
* @typedef {import('./System.js').default} System
* @typedef {import('./Module.js').default} Module
*/
export type Link = any; // BUT PROXY
export type SerializedInstance = {
type: string,
links: {
[name: string]: string
},
members: {
[name: string]: any // SO LONG AS ITS SERIALIZABLE ._.*
},
id: string
}
export default class Instance extends Serializable {
export default class Instance {
module: Module;
links = {}
system: System;
context: vm.Context;
context: vm.Context | null = null;
locals = [];
internalFunctions = {};
_link: Instance;
location: string;
_id: string;
initialContext: any = {};
get currentContext(): any {
return this.context ?? this.initialContext;
}
sync() {
this.system.saveInstance(this);
}
createContext(): vm.Context {
if(this.context) return this.context;
const initialContext: KV = {};
const initialContext: any = {};
// node bindings
initialContext.setTimeout = setTimeout;
@ -36,64 +56,145 @@ export default class Instance extends Serializable {
// system globals!
// TODO turn this into its own vogue module! system.create/instance.create
// TODO request context from system...
initialContext.create = this.system.newInstance.bind(this.system);
for(const name in this.system.staticInstances)
initialContext[name] = this.system.staticInstances[name];
initialContext.create = this.system.newLink.bind(this.system);
initialContext.process = process;
for(const name in this.system.staticLinks) {
log('creating context with static link: ' + name);
initialContext[name] = this.system.staticLinks[name];
}
// local links!
// optional arrays
// TODO maybe make these property accessors to allow for some automation
for(const link of this.module.links.filter((v: Link) => v.array && !v.required))
for(const link of this.module.links.filter((v: LinkDescription) => v.array && !v.required))
initialContext[link.name] = [];
for(const link of this.module.links.filter((v: Link) => !v.array && !v.required))
for(const link of this.module.links.filter((v: LinkDescription) => !v.array && !v.required))
initialContext[link.name] = null;
for(const variable of this.module.variables)
initialContext[variable.name] = null;
attachHookedProperty(initialContext, variable.name, null, this.sync.bind(this))
for(const name in this.initialContext)
initialContext[name] = this.initialContext[name]
for(const name in this.module.imports)
initialContext[name] = this.module.imports[name];
// instance defined functions
initialContext.sync = this.system.saveInstance.bind(this.system, this);
const context = vm.createContext(initialContext);
// user defined functions
for(const name in this.module.functions) {
const { code, parameters, async } = this.module.functions[name];
const injectedScript =
`
var ${name} = ${async ? 'async' : ''} function ${name}(${parameters.join(', ')}) ${code}
`;
vm.runInContext(injectedScript, context, {
});
const injectedScript = `
var ${name} = ${async ? 'async ' : ''}function ${name}(${parameters.join(', ')}) ${code}
${name} = ${name}.bind(this);`.trim();
// log('injecting function...')
// log(injectedScript)
vm.runInContext(injectedScript, context, {});
}
log('context created! ' + Object.keys(context));
// log(context);
return context;
};
constructor(module: Module, location: string, parameters: {[name: string]: any}, system: System) {
super();
setMember(name: string, value: any) {
log('setMember: ' + this.toString() + '.' + name + ' => ' + value);
this.currentContext[name] = value;
}
setLink(name: string, value: Link) {
log('setLink: ' + this.toString() + '.' + name + ' => ' + value.__link__);
this.currentContext[name] = value;
}
constructor(
module: Module,
location: string,
parameters: {[name: string]: any},
system: System,
options?: {
id?: string
}
) {
this.module = module;
this.location = location;
this.system = system;
this.context = this.createContext();
// this.context = this.createContext();
this._id = options?.id ?? uuid.v4();
this._link = new Proxy(this, {
get(target: Instance, prop: string, receiver) {
log(`getting ${target.module.name.full}.${prop}: (${target.module.identifiers[prop]}|${typeof target.context[prop]})`);
log(`getting ${target.module.name.full}.${prop.toString()}: (${target.module.identifiers[prop]}|${typeof target.context?.[prop]})`);
if(target.context === null)
target.restore();
const DNEText = `${target.module.name.full}.${prop.toString()} either does not exist, or is not accessible`;
if(prop === 'restore') throw new Error(DNEText);
if(prop === '__link__') return target._id;
if(prop in target.module.functions) {
return target.context[prop];
return target.context?.[prop];
}
throw new Error(DNEText);
}
});
log('created ' + this);
}
restore() {
return this.context.restore?.();
if(this.context === null)
this.context = this.createContext();
return this.context?.restore?.();
}
get link () {
return this._link;
}
toSerializableObject(): SerializedInstance {
const obj: any = {};
obj.type = this.module.name.full;
obj.links = Object.fromEntries(this.module.links.map((link: LinkDescription): [string, string] => {
const name = link.name;
const linkId = this.context?.[name]?.__link__;
return [name, linkId];
}));
obj.members = Object.fromEntries(
this.module.variables
.filter((member: Variable): boolean => {
return member.persist;
})
.map((member: Variable): [string, any] => {
const name = member.name;
const value = this.context?.[name];
return [name, value];
})
);
obj.id = this._id;
return obj as SerializedInstance;
}
toString() {
return this.module.name.full + '(' + this._id.substr(0, 4) + ')';
}
}
function attachHookedProperty(target: any, name: string, initialValue: any, changedHook: () => void) {
const propId = uuid.v4();
target[propId] = initialValue;
// TODO if its an object, replace it with a dead simple proxy? for detecting internal changes...
Object.defineProperty(target, name, {
get() {
return target[propId];
},
set(value) {
target[propId] = value;
changedHook();
}
})
}

View File

@ -1,3 +0,0 @@
export type KV = {
[key: string]: any
};

View File

@ -14,7 +14,7 @@ import { createRequire } from 'module';
import { pathToFileURL } from 'url';
const log = debug('vogue:module');
export type Link = {
export type LinkDescription = {
name: string,
array: boolean,
required: boolean
@ -26,7 +26,7 @@ export type Variable = {
}
export default class Module {
links: Link[] = [];
links: LinkDescription[] = [];
globals = [];
functions: {
[name: string]: {

View File

@ -1,198 +0,0 @@
// import { Ubjson } from '@shelacek/ubjson';
import { existsSync, readFileSync, writeFileSync } from 'fs';
import { KV } from './KV';
export default class Serializable {
constructor(...args: any[]) {}
// things that need to be stored only in cold
// storage are keyed with a special prefix
static CLASS_REFERENCE = '$$CLASS_NAME';
// things that need to be stored only at runtime
// are keyed with symbols to not interfere with
// user code.
static PERSIST_LOCATION = Symbol('PERSIST_LOCATION');
start() {}
// toUbj() {
// return Ubjson.encode(this.toSerializableObject());
// }
// static fromUbj(buffer) {
// return this.fromSerializableObject(Ubjson.decode(buffer));
// }
toJson() {
return JSON.stringify(this.toSerializableObject(), null, 2);
}
static serializationDependencies(): any[] {
return [];
}
static fromJson(str: string) {
return this.fromSerializableObject(JSON.parse(str));
}
toSerializableObject() {
const transformValue = (val: any): any => {
if(Array.isArray(val)) {
return transformArray(val);
} else if (val === null || val === undefined) {
return val;
} else if(typeof val === 'object') {
return transformObject(val);
} else {
return val;
}
}
const transformObject = (obj: KV): KV => {
const clone: KV = {};
for(const prop of Object.keys(obj)) {
if(prop.startsWith('_')) continue;
clone[prop] = transformValue(obj[prop]);
}
if(obj instanceof Serializable) {
clone[Serializable.CLASS_REFERENCE] = obj.constructor.name;
}
return clone;
}
const transformArray = (arr: any[]): any[] => {
const clone = [];
for(const item of arr) {
clone.push(transformValue(item));
}
return clone;
}
return transformObject(this);
}
static fromSerializableObject(obj: KV) {
if(obj[Serializable.CLASS_REFERENCE] !== this.name) return null;
const transformValue = (val: any): any => {
if(Array.isArray(val)) {
return transformArray(val);
} else if(val === null || val === undefined) {
return val;
} else if(typeof val === 'object') {
if(Serializable.CLASS_REFERENCE in val) {
const classes = this.serializationDependencies();
const matchingClasses = classes.filter((classObject) => {
classObject.name === val[Serializable.CLASS_REFERENCE]
});
if(matchingClasses.length === 1) {
return matchingClasses[0].fromSerializableObject(val);
} else {
return transformObject(val);
}
}
return transformObject(val);
} else {
return val;
}
}
const transformObject = (obj: KV): KV => {
const clone: KV = {};
for(const prop of Object.keys(obj)) {
if(prop.startsWith('_')) continue;
clone[prop] = transformValue(obj[prop]);
}
return clone;
}
const transformArray = (arr: any[]): any[] => {
const clone = [];
for(const item of arr) {
clone.push(transformValue(item));
}
return clone;
}
const clone = transformObject(obj);
if(Serializable.CLASS_REFERENCE in obj)
clone.__proto__ = this.prototype;
clone.restore();
return clone;
}
serialize({
encoding = 'json'
} = {}) {
switch(encoding) {
case 'json': return this.toJson();
case 'ubjson':
// case 'ubj': return this.toUbj();
default: {
throw new TypeError('Unknown encoding: ' + encoding);
}
}
}
static deserialize(obj: any, {
encoding = 'json'
} = {}) {
switch(encoding) {
case 'json': return this.fromJson(obj);
case 'ubjson':
// case 'ubj': return this.fromUbj(obj);
default: {
throw new TypeError('Unknown encoding: ' + encoding);
}
}
}
async restore() {}
static createFromDisk(filename: string, ...args: any[]) {
if(existsSync(filename)) {
const instance = this.deserialize(readFileSync(createFilepath(filename)));
// TS is plain and simply wrong... symbols can be used to index object...
// @ts-ignore
instance[Serializable.PERSIST_LOCATION] = createFilepath(filename);
instance?.restore();
return instance;
} else {
const instance = new this(...args);
// again... TS is wrong...
// @ts-ignore
instance[Serializable.PERSIST_LOCATION] = createFilepath(filename);
instance?.updateDisk();
return instance;
}
}
updateDisk(filepath?: string) {
// if it hasnt yet been written to disk...
// this can happen if the contrustor
// was called outside of createFromDisk
if(filepath) {
// see above... TS7053 is just _wrong_. incorrect. thats not how JS works.
// @ts-ignore
this[Serializable.PERSIST_LOCATION] = createFilepath(filepath);
}
const data = this.serialize();
// this is getting annoying...
// @ts-ignore
writeFileSync(this[Serializable.PERSIST_LOCATION], data);
}
}
function createFilepath(path: string) {
return `data/${path}`;
}

View File

@ -1,8 +1,10 @@
import Instance from './Instance.js';
import Serializable from './Serializable.js';
import Instance, { Link, SerializedInstance } from './Instance.js';
import _ from 'lodash';
import Module from './Module.js';
import debug from 'debug';
import { lstatSync, readdirSync, readFileSync, writeFileSync } from 'fs';
import { resolve } from 'path';
import { ensureDirSync } from 'fs-extra';
const log = debug('vogue:system')
const {get, set} = _;
@ -13,30 +15,102 @@ type ModuleNamespaceMap = {
type ModuleName = string;
class System extends Serializable {
instances: Instance[] = [];
class System {
instances: Map<string, Instance> = new Map();
modules: Module[];
namespace: ModuleNamespaceMap = {};
staticInstances: {
[key: string]: Instance
staticLinks: {
[key: string]: Link
} = {};
rootDir: string;
constructor(modules: Module[], rootDir: string) {
super();
this.rootDir = rootDir;
this.modules = modules;
this.createNamespace();
ensureDirSync(resolve(this.rootDir, '.system'));
const vault = readdirSync(resolve(this.rootDir, '.system')).map(v => resolve(this.rootDir, '.system', v));
const serializedInstances: SerializedInstance[] = vault.map((v) => JSON.parse(readFileSync(v).toString()));
log('injecting serialized instances...');
for(const serializedInstance of serializedInstances)
this.injectSerializedInstance(serializedInstance);
log('linking serialized instances...');
for(const serializedInstance of serializedInstances)
this.linkSerializedInstance(serializedInstance);
log('restoring static instances...');
for(const [,instance] of this.instances) {
if(!!instance.module.static) {
instance.restore();
}
}
log('restoring boot instances...');
for(const [,instance] of this.instances) {
if(!!instance.module.singleton) {
instance.restore();
}
}
// this.inject(serializedInstance);
if (vault.length !== 0) {
return this;
}
// TODO future workflow notes
// pull jsons into boots
// filter json boots
// create static / singletons into boots
// boot boots!
const bootModules = this.deriveBootModules();
this.createStaticInstances();
this.rootDir = rootDir;
log('instantiating boot modules...');
for(const name of bootModules) {
log(' ' + name);
this.newInstance(name);
this.newLink(name);
}
}
linkSerializedInstance(serializedInstance: SerializedInstance): void {
const instance = this.getInstanceById(serializedInstance.id);
for(const name in serializedInstance.links) {
const linkId = serializedInstance.links[name]
const linkedInstance = this.getInstanceById(linkId);
const linkedInstanceLink = linkedInstance.link;
instance.setLink(name, linkedInstanceLink);
}
}
injectSerializedInstance(serializedInstance: SerializedInstance): void {
const instance = new Instance(this.getModule(serializedInstance.type), this.rootDir, {}, this, {
id: serializedInstance.id
});
this.instances.set(instance._id, instance);
for(const name in serializedInstance.members) {
instance.setMember(name, serializedInstance.members[name]);
}
if(instance.module.static) {
log('injected static instance ' + instance.module.static + ': ' + instance.module.name.full);
this.staticLinks[instance.module.static] = instance.link;
}
}
getInstanceById(id: string): Instance {
if(!this.instances.has(id))
throw new Error(`${id} is not a valid instance link id`);
return this.instances.get(id) as Instance;
}
createStaticInstances() {
log('deriving static modules...');
const staticModules = this.modules.filter((module) => {
@ -49,8 +123,8 @@ class System extends Serializable {
log('instantiating static modules...');
for(const module of staticModules) {
log(' ' + module.static + ': ' + module.name.full);
this.staticInstances[module.static] =
this.newInstance(module.name.full, {});
this.staticLinks[module.static] =
this.newLink(module.name.full, {});
}
}
@ -79,6 +153,16 @@ class System extends Serializable {
}, {});
}
saveInstance(instance: Instance): void {
const path = resolve(this.rootDir, '.system');
ensureDirSync(path);
const file = instance._id + '.json';
const filepath = resolve(path, file);
log('saving ' + instance + '...');
const json = JSON.stringify(instance.toSerializableObject(), null, 2)
writeFileSync(filepath, json);
}
getModule(name: ModuleName): Module {
const module = get(this.namespace, name);
if(module instanceof Module) return module;
@ -86,10 +170,12 @@ class System extends Serializable {
}
createInstance(name: ModuleName, args = {}) {
return new Instance(this.getModule(name), '', args, this);
const instance = new Instance(this.getModule(name), this.rootDir, args, this);
this.saveInstance(instance);
return instance;
}
newInstance(name: ModuleName, args = {}) {
newLink(name: ModuleName, args = {}) {
const instance = this.createInstance(name, args);
const link = instance.link;
instance.restore();
@ -97,4 +183,14 @@ class System extends Serializable {
}
}
export default System;
export default System;
// class SerializedInstanceInjector {
// system: System;
// serializedInstances: SerializedInstance[];
// constructor(serializedInstances: SerializedInstance[], system: System) {
// this.serializedInstances = serializedInstances;
// this.system = system;
// }
// }

View File

@ -14,7 +14,6 @@ import { readFileSync } from 'fs';
import debug from 'debug';
import { resolve, dirname } from 'path';
import { fileURLToPath } from 'url';
import minify from './minify.js';
const log = debug('vogue:ast');
const grammarFile = resolve(fileURLToPath(dirname(import.meta.url)), '..', 'lib', 'grammar.ne');

View File

@ -4,3 +4,8 @@ Object.defineProperty(Array.prototype, 'empty', {
return this.length === 0;
}
});
// in theory we dont need this anymore... with strict promise rejections...
// process.on('unhandledRejection', (reason: Error, p) => {
// console.log(reason.stack ?? reason.name + '\n\nStack trace unavailable...');
// });

View File

@ -1,16 +1,16 @@
import uglify from 'uglify-js';
// import uglify from 'uglify-js';
export default (code: string): string => {
return uglify.minify(code, {
compress: {
dead_code: true,
global_defs: {
DEBUG: false
}
},
sourceMap: {
content: 'inline'
}
}).code;
}
// export default (code: string): string => {
// return uglify.minify(code, {
// compress: {
// dead_code: true,
// global_defs: {
// DEBUG: false
// }
// },
// sourceMap: {
// content: 'inline'
// }
// }).code;
// }

View File

@ -1,4 +1,4 @@
#!/usr/bin/env node
#!/usr/bin/env node --enable-source-maps --unhandled-rejections=strict
import debug from 'debug';
const log = debug('vogue:cli');
const systemLocation = resolve(process.argv[2]);
@ -11,14 +11,11 @@ import Module from './Module.js';
import System from './System.js';
import './extensions.js';
import { fileURLToPath } from 'url';
// globals inside grammar context
import minify from './minify';
const { get, set } = _;
const standardLibrary = resolve(fileURLToPath(dirname(import.meta.url)), '..', 'lib', 'vogue');
(async () => {
// TODO simplify this line gaddam
const ignoreDeps = (path: string) => parse(path).name !== 'node_modules';
const files = [
@ -35,7 +32,7 @@ const standardLibrary = resolve(fileURLToPath(dirname(import.meta.url)), '..', '
const modules = await Promise.all(fullpaths.map(loc => Module.create(loc, systemLocation)));
const sys = new System(modules, systemLocation);
})()
})();
function walkdirSync(root: string, filter: ((path: string) => boolean) = () => true): string[] {
log('reading', root, '...');

View File

@ -0,0 +1,10 @@
import { expect } from 'chai';
import '../src/extensions.ts';
describe('extensions', () => {
it('creates empty array extensions', () => {
expect(([] as any).empty).to.be.true;
expect(([1] as any).empty).to.be.false;
expect(([1, 2, 3] as any).empty).to.be.false;
});
})

106
test/lexer.test.ts 100644
View File

@ -0,0 +1,106 @@
import { createAst } from '../src/createAst.js';
import { expect } from 'chai';
import * as ModuleFiles from './lib/ModuleFiles.js'
describe('Lexer', () => {
it('parses blank file', () => {
const ast: any = createAst(ModuleFiles.blank);
expect(ast).to.deep.equal([]);
});
describe('namespaces', () => {
it('parses namespaces without dots', () => {
const ast: any = createAst(ModuleFiles.namespaceX);
expect(ast).to.deep.equal([{type: 'namespace', namespace: 'x'}]);
});
it('parses namespaces with a single dot', () => {
const ast: any = createAst(ModuleFiles.namespaceXY);
expect(ast).to.deep.equal([{type: 'namespace', namespace: 'x.y'}]);
});
it('parses namespaces two dots', () => {
const ast: any = createAst(ModuleFiles.namespaceXYZ);
expect(ast).to.deep.equal([{type: 'namespace', namespace: 'x.y.z'}]);
});
});
describe('links', () => {
it('parses link', () => {
const ast: any = createAst(ModuleFiles.link);
expect(ast).to.deep.equal([{type: 'link', array: false, required: false, name: 'test'}]);
});
it('parses required link', () => {
const ast: any = createAst(ModuleFiles.requiredLink);
expect(ast).to.deep.equal([{type: 'link', array: false, required: true, name: 'test'}]);
});
it('parses link array', () => {
const ast: any = createAst(ModuleFiles.linkArray);
expect(ast).to.deep.equal([{type: 'link', array: true, required: false, name: 'test'}]);
});
it('parses required link array', () => {
const ast: any = createAst(ModuleFiles.requiredLinkArray);
expect(ast).to.deep.equal([{type: 'link', array: true, required: true, name: 'test'}]);
});
});
describe('functions', () => {
it('function with parameters omitted', () => {
const ast: any = createAst(ModuleFiles.functionNoParams);
expect(ast).to.be.an('array').with.length(1);
expect(ast[0]).to.be.an('object');
expect(ast[0]).to.include({type: 'function', name: 'test', async: false});
expect(ast[0].parameters).to.be.an('array').of.length(0);
});
it('function with empty parameters', () => {
const ast: any = createAst(ModuleFiles.functionEmptyParams);
expect(ast).to.be.an('array').with.length(1);
expect(ast[0]).to.be.an('object');
expect(ast[0]).to.include({type: 'function', name: 'test', async: false});
expect(ast[0].parameters).to.be.an('array').of.length(0);
});
it('function with one parameter', () => {
const ast: any = createAst(ModuleFiles.functionOneParam);
expect(ast).to.be.an('array').with.length(1);
expect(ast[0]).to.be.an('object');
expect(ast[0]).to.include({type: 'function', name: 'test', async: false});
expect(ast[0].parameters).to.be.an('array').deep.equals(["a"]);
});
it('function with two parameters', () => {
const ast: any = createAst(ModuleFiles.functionTwoParams);
expect(ast).to.be.an('array').with.length(1);
expect(ast[0]).to.be.an('object');
expect(ast[0]).to.include({type: 'function', name: 'test', async: false});
expect(ast[0].parameters).to.be.an('array').deep.equals(["a", "b"]);
});
it('async function with parameters omitted', () => {
const ast: any = createAst(ModuleFiles.asyncFunctionNoParams);
expect(ast).to.be.an('array').with.length(1);
expect(ast[0]).to.be.an('object');
expect(ast[0]).to.deep.include({type: 'function', name: 'test', async: true});
expect(ast[0].parameters).to.be.an('array').of.length(0);
});
it('async function with empty parameters', () => {
const ast: any = createAst(ModuleFiles.asyncFunctionEmptyParams);
expect(ast).to.be.an('array').with.length(1);
expect(ast[0]).to.be.an('object');
expect(ast[0]).to.deep.include({type: 'function', name: 'test', async: true});
expect(ast[0].parameters).to.be.an('array').of.length(0);
});
it('async function with one parameter', () => {
const ast: any = createAst(ModuleFiles.asyncFunctionOneParam);
expect(ast).to.be.an('array').with.length(1);
expect(ast[0]).to.be.an('object');
expect(ast[0]).to.deep.include({type: 'function', name: 'test', async: true});
expect(ast[0].parameters).to.be.an('array').deep.equals(["a"]);
});
it('async function with two parameters', () => {
const ast: any = createAst(ModuleFiles.asyncFunctionTwoParams);
expect(ast).to.be.an('array').with.length(1);
expect(ast[0]).to.be.an('object');
expect(ast[0]).to.deep.include({type: 'function', name: 'test', async: true});
expect(ast[0].parameters).to.be.an('array').deep.equals(["a", "b"]);
});
});
});

View File

@ -0,0 +1,27 @@
import { resolve, parse } from 'path';
import { fileURLToPath } from 'url';
function file(str: string) {
return resolve(parse(fileURLToPath(import.meta.url)).dir, '..', 'modules', str + '.v')
}
export const blank = file('blank');
export const namespaceX = file('namespaceX');
export const namespaceXY = file('namespaceXY');
export const namespaceXYZ = file('namespaceXYZ');
export const link = file('link');
export const linkArray = file('linkArray');
export const requiredLink = file('requiredLink');
export const requiredLinkArray = file('requiredLinkArray');
export const functionNoParams = file('functionNoParams');
export const functionEmptyParams = file('functionEmptyParams');
export const functionOneParam = file('functionOneParam');
export const functionTwoParams = file('functionTwoParams');
export const asyncFunctionNoParams = file('asyncFunctionNoParams');
export const asyncFunctionEmptyParams = file('asyncFunctionEmptyParams');
export const asyncFunctionOneParam = file('asyncFunctionOneParam');
export const asyncFunctionTwoParams = file('asyncFunctionTwoParams');

View File

@ -0,0 +1,3 @@
async test() {
}

View File

@ -0,0 +1,3 @@
async test {
}

View File

@ -0,0 +1,3 @@
async test(a) {
}

View File

@ -0,0 +1,3 @@
async test(a, b) {
}

View File

View File

@ -0,0 +1,3 @@
test() {
}

View File

@ -0,0 +1,3 @@
test {
}

View File

@ -0,0 +1,3 @@
test(a) {
}

View File

@ -0,0 +1,3 @@
test(a, b) {
}

View File

@ -0,0 +1 @@
link test;

View File

@ -0,0 +1 @@
link[] test;

View File

@ -0,0 +1 @@
namespace x;

View File

@ -0,0 +1 @@
namespace x.y;

View File

@ -0,0 +1 @@
namespace x.y.z;

View File

@ -0,0 +1 @@
required link test;

View File

@ -0,0 +1 @@
required link[] test;

View File

@ -1,6 +0,0 @@
restore {
}

View File

@ -1,11 +0,0 @@
namespace structures;
member alive;
member age;
required link land;
restore {
alive ??= true;
age ??= 0;
}

10
test/tsconfig.json 100644
View File

@ -0,0 +1,10 @@
{
"compilerOptions": {
"module": "ES6",
"moduleResolution": "node",
"target": "es2020"
},
"include": [
"**/*.ts"
]
}

View File

@ -1,16 +0,0 @@
link[] pawns;
member map;
member size;
restore {
for(let i = 0; i < 3; i ++) {
}
this.size ??= 64;
}
async render() {
}

View File

@ -1,346 +0,0 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
# yarn lockfile v1
"@cronvel/get-pixels@^3.4.0":
version "3.4.0"
resolved "https://registry.npmjs.org/@cronvel/get-pixels/-/get-pixels-3.4.0.tgz"
dependencies:
jpeg-js "^0.4.1"
ndarray "^1.0.19"
ndarray-pack "^1.1.1"
node-bitmap "0.0.1"
omggif "^1.0.10"
pngjs "^5.0.0"
ansi-styles@^3.2.1:
version "3.2.1"
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
dependencies:
color-convert "^1.9.0"
ansi-styles@^4.1.0:
version "4.3.0"
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
dependencies:
color-convert "^2.0.1"
chalk@^2.3.2:
version "2.4.2"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
dependencies:
ansi-styles "^3.2.1"
escape-string-regexp "^1.0.5"
supports-color "^5.3.0"
chalk@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.1.tgz#c80b3fab28bf6371e6863325eee67e618b77e6ad"
dependencies:
ansi-styles "^4.1.0"
supports-color "^7.1.0"
chroma-js@^2.1.1:
version "2.1.1"
resolved "https://registry.npmjs.org/chroma-js/-/chroma-js-2.1.1.tgz"
dependencies:
cross-env "^6.0.3"
color-convert@^1.9.0:
version "1.9.3"
resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
dependencies:
color-name "1.1.3"
color-convert@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
dependencies:
color-name "~1.1.4"
color-name@1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
color-name@~1.1.4:
version "1.1.4"
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
cross-env@^6.0.3:
version "6.0.3"
resolved "https://registry.npmjs.org/cross-env/-/cross-env-6.0.3.tgz"
dependencies:
cross-spawn "^7.0.0"
cross-spawn@^7.0.0:
version "7.0.3"
resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz"
dependencies:
path-key "^3.1.0"
shebang-command "^2.0.0"
which "^2.0.1"
cwise-compiler@^1.1.2:
version "1.1.3"
resolved "https://registry.npmjs.org/cwise-compiler/-/cwise-compiler-1.1.3.tgz"
dependencies:
uniq "^1.0.0"
error-ex@^1.3.1:
version "1.3.2"
resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
dependencies:
is-arrayish "^0.2.1"
escape-string-regexp@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
figures@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962"
dependencies:
escape-string-regexp "^1.0.5"
find-up@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
dependencies:
locate-path "^2.0.0"
graceful-fs@^4.1.2:
version "4.2.6"
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee"
has-flag@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
has-flag@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
iota-array@^1.0.0:
version "1.0.0"
resolved "https://registry.npmjs.org/iota-array/-/iota-array-1.0.0.tgz"
is-arrayish@^0.2.1:
version "0.2.1"
resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
is-buffer@^1.0.2:
version "1.1.6"
resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz"
isexe@^2.0.0:
version "2.0.0"
resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz"
jpeg-js@^0.4.1:
version "0.4.3"
resolved "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.3.tgz"
json-parse-better-errors@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9"
lazyness@^1.2.0:
version "1.2.0"
resolved "https://registry.npmjs.org/lazyness/-/lazyness-1.2.0.tgz"
load-json-file@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b"
dependencies:
graceful-fs "^4.1.2"
parse-json "^4.0.0"
pify "^3.0.0"
strip-bom "^3.0.0"
locate-path@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
dependencies:
p-locate "^2.0.0"
path-exists "^3.0.0"
moment@^2.11.2:
version "2.29.1"
resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.1.tgz#b2be769fa31940be9eeea6469c075e35006fa3d3"
integrity sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==
ndarray-pack@^1.1.1:
version "1.2.1"
resolved "https://registry.npmjs.org/ndarray-pack/-/ndarray-pack-1.2.1.tgz"
dependencies:
cwise-compiler "^1.1.2"
ndarray "^1.0.13"
ndarray@^1.0.13, ndarray@^1.0.19:
version "1.0.19"
resolved "https://registry.npmjs.org/ndarray/-/ndarray-1.0.19.tgz"
dependencies:
iota-array "^1.0.0"
is-buffer "^1.0.2"
nextgen-events@^1.3.4:
version "1.3.4"
resolved "https://registry.npmjs.org/nextgen-events/-/nextgen-events-1.3.4.tgz"
node-bitmap@0.0.1:
version "0.0.1"
resolved "https://registry.npmjs.org/node-bitmap/-/node-bitmap-0.0.1.tgz"
omggif@^1.0.10:
version "1.0.10"
resolved "https://registry.npmjs.org/omggif/-/omggif-1.0.10.tgz"
p-limit@^1.1.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8"
dependencies:
p-try "^1.0.0"
p-locate@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43"
dependencies:
p-limit "^1.1.0"
p-try@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"
parse-json@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0"
dependencies:
error-ex "^1.3.1"
json-parse-better-errors "^1.0.1"
path-exists@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
path-key@^3.1.0:
version "3.1.1"
resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz"
pify@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
pkg-conf@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/pkg-conf/-/pkg-conf-2.1.0.tgz#2126514ca6f2abfebd168596df18ba57867f0058"
dependencies:
find-up "^2.0.0"
load-json-file "^4.0.0"
pngjs@^5.0.0:
version "5.0.0"
resolved "https://registry.npmjs.org/pngjs/-/pngjs-5.0.0.tgz"
random-world@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/random-world/-/random-world-1.2.1.tgz#aca953a169dc5ffa455a2bc39d7ee81da6f12480"
integrity sha1-rKlToWncX/pFWivDnX7oHabxJIA=
dependencies:
moment "^2.11.2"
seedrandom "^2.4.2"
underscore "^1.8.3"
uuid "^3.0.1"
seedrandom@^2.4.2:
version "2.4.4"
resolved "https://registry.yarnpkg.com/seedrandom/-/seedrandom-2.4.4.tgz#b25ea98632c73e45f58b77cfaa931678df01f9ba"
integrity sha512-9A+PDmgm+2du77B5i0Ip2cxOqqHjgNxnBgglxLcX78A2D6c2rTo61z4jnVABpF4cKeDMDG+cmXXvdnqse2VqMA==
setimmediate@^1.0.5:
version "1.0.5"
resolved "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz"
seventh@^0.7.40:
version "0.7.40"
resolved "https://registry.npmjs.org/seventh/-/seventh-0.7.40.tgz"
dependencies:
setimmediate "^1.0.5"
shebang-command@^2.0.0:
version "2.0.0"
resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz"
dependencies:
shebang-regex "^3.0.0"
shebang-regex@^3.0.0:
version "3.0.0"
resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz"
signale@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/signale/-/signale-1.4.0.tgz#c4be58302fb0262ac00fc3d886a7c113759042f1"
dependencies:
chalk "^2.3.2"
figures "^2.0.0"
pkg-conf "^2.1.0"
sisteransi@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed"
string-kit@^0.12.5:
version "0.12.5"
resolved "https://registry.npmjs.org/string-kit/-/string-kit-0.12.5.tgz"
strip-bom@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
supports-color@^5.3.0:
version "5.5.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
dependencies:
has-flag "^3.0.0"
supports-color@^7.1.0:
version "7.2.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
dependencies:
has-flag "^4.0.0"
terminal-kit@^2.1.2:
version "2.1.2"
resolved "https://registry.npmjs.org/terminal-kit/-/terminal-kit-2.1.2.tgz"
dependencies:
"@cronvel/get-pixels" "^3.4.0"
chroma-js "^2.1.1"
lazyness "^1.2.0"
ndarray "^1.0.19"
nextgen-events "^1.3.4"
seventh "^0.7.40"
string-kit "^0.12.5"
tree-kit "^0.7.0"
tree-kit@^0.7.0:
version "0.7.0"
resolved "https://registry.npmjs.org/tree-kit/-/tree-kit-0.7.0.tgz"
underscore@^1.8.3:
version "1.13.1"
resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.13.1.tgz#0c1c6bd2df54b6b69f2314066d65b6cde6fcf9d1"
integrity sha512-hzSoAVtJF+3ZtiFX0VgfFPHEDRm7Y/QPjGyNo4TVdnDTdft3tr8hEkD25a1jC+TjTuE7tkHGKkhwCgs9dgBB2g==
uniq@^1.0.0:
version "1.0.1"
resolved "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz"
uuid@^3.0.1:
version "3.4.0"
resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"
integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==
which@^2.0.1:
version "2.0.2"
resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz"
dependencies:
isexe "^2.0.0"

View File

@ -7,7 +7,8 @@
"target": "esnext",
"outDir": "out",
"sourceMap": true,
"declaration": true
"declaration": true,
"pretty": true
},
"include": [
"src/**/*.ts"

Binary file not shown.

1341
yarn.lock

File diff suppressed because it is too large Load Diff