# HG changeset patch # User cin # Date 2020-01-24 01:17:42 # Node ID 8e944df97a6828cb1ffd2bdc492f34121f27fc25 # Parent 0000000000000000000000000000000000000000 Initial commit, copied files related to .tsx scripts support. diff --git a/.hgignore b/.hgignore new file mode 100644 --- /dev/null +++ b/.hgignore @@ -0,0 +1,6 @@ +syntax: glob +.gradle/ +.project +.settings/ +build/ +node_modules/ diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,9 @@ +{ + "java.configuration.updateBuildConfiguration": "automatic", + "files.exclude": { + "**/.classpath": true, + "**/.project": true, + "**/.settings": true, + "**/.factorypath": true + } +} \ No newline at end of file diff --git a/build.gradle b/build.gradle new file mode 100644 --- /dev/null +++ b/build.gradle @@ -0,0 +1,39 @@ +plugins { + id "org.implab.gradle-typescript" version "1.3.1" + id "ivy-publish" +} + +typescript { + compilerOptions { + lib = ["es5", "dom", "scripthost", "es2015.promise", "es2015.symbol", "es2015.iterable"] + listFiles = true + declaration = true + types = [] + module = "amd" + it.target = "es5" + experimentalDecorators = true + jsx = "react" + jsxFactory = "createElement" + moduleResolution = "node" + } + + tscCmd = "$projectDir/node_modules/.bin/tsc" + tsLintCmd = "$projectDir/node_modules/.bin/tslint" + esLintCmd = "$projectDir/node_modules/.bin/eslint" +} + +configureTsMain { + compilerOptions { + types = ["requirejs", "dojo-typings"] + } +} + +task printVersion { + doLast { + println "packageName: $packageName"; + println "version: $version"; + println "target: $typescript.compilerOptions.target"; + println "module: $typescript.compilerOptions.module"; + println "symbols: $symbols"; + } +} \ No newline at end of file diff --git a/gradle.properties b/gradle.properties new file mode 100644 --- /dev/null +++ b/gradle.properties @@ -0,0 +1,8 @@ +group=org.implab.implabjs +version= +author=Implab team +description=Create HyperText with Typescript, integrate Dojo1 widgets in your .tsx scripts. +license=BSD-2-Clause +repository=http://hg.code.sf.net/p/implabjs/djx +npmScope=implab +symbols=pack \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..5c2d1cf016b3885f6930543d57b744ea8c220a1a GIT binary patch literal 55616 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½OPj>8MCGn~A(qs+~ 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 \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin or MSYS, switch paths to Windows format before running java +if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=$(save "$@") + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong +if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then + cd "$(dirname "$0")" +fi + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,100 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windows variants + +if not "%OS%" == "Windows_NT" goto win9xME_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/package-lock.json b/package-lock.json new file mode 100644 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1323 @@ +{ + "requires": true, + "lockfileVersion": 1, + "dependencies": { + "@babel/code-frame": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", + "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", + "dev": true, + "requires": { + "@babel/highlight": "^7.8.3" + } + }, + "@babel/highlight": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz", + "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + } + }, + "@implab/core-amd": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@implab/core-amd/-/core-amd-1.3.2.tgz", + "integrity": "sha512-OPx02obqz60FiOzDqEFuPfag/0ugl1tuQouI+52Op0k+fcmuBK4QACJy7o3fzOYvejdjF1DG4aRXuCm6+vgMYQ==", + "dev": true + }, + "@types/chai": { + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.7.tgz", + "integrity": "sha512-luq8meHGYwvky0O7u0eQZdA7B4Wd9owUCqvbw2m3XCrCU8mplYOujMBbvyS547AxJkC+pGnd0Cm15eNxEUNU8g==", + "dev": true + }, + "@types/node": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-8.0.0.tgz", + "integrity": "sha512-j2tekvJCO7j22cs+LO6i0kRPhmQ9MXaPZ55TzOc1lzkN5b6BWqq4AFjl04s1oRRQ1v5rSe+KEvnLUSTonuls/A==", + "dev": true + }, + "@types/requirejs": { + "version": "2.1.31", + "resolved": "https://registry.npmjs.org/@types/requirejs/-/requirejs-2.1.31.tgz", + "integrity": "sha512-b2soeyuU76rMbcRJ4e0hEl0tbMhFwZeTC0VZnfuWlfGlk6BwWNsev6kFu/twKABPX29wkX84wU2o+cEJoXsiTw==", + "dev": true + }, + "@types/tape": { + "version": "4.2.33", + "resolved": "https://registry.npmjs.org/@types/tape/-/tape-4.2.33.tgz", + "integrity": "sha512-ltfyuY5BIkYlGuQfwqzTDT8f0q8Z5DGppvUnWGs39oqDmMd6/UWhNpX3ZMh/VYvfxs3rFGHMrLC/eGRdLiDGuw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "acorn": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.0.tgz", + "integrity": "sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ==", + "dev": true + }, + "acorn-jsx": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.1.0.tgz", + "integrity": "sha512-tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw==", + "dev": true + }, + "ajv": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.11.0.tgz", + "integrity": "sha512-nCprB/0syFYy9fVYU1ox1l2KN8S9I+tziH8D4zdZuLT3N6RMlGSGt5FSTpAiHB/Whv8Qs1cWHma1aMKZyaHRKA==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "dev": true + }, + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dev": true, + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "cli-width": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", + "dev": true + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "deep-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", + "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=", + "dev": true + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "defined": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", + "dev": true + }, + "diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "dojo": { + "version": "1.10.10", + "resolved": "https://registry.npmjs.org/dojo/-/dojo-1.10.10.tgz", + "integrity": "sha512-kg79C8Yyd317cG3MgXGMH4AeQ8TgNr8H/PpA3BRms7DTfl0CJCRAgGE/C6d9Nw55s1ID/fEsfS+P3bj1s7dWgA==", + "dev": true + }, + "dojo-typings": { + "version": "1.11.9", + "resolved": "https://registry.npmjs.org/dojo-typings/-/dojo-typings-1.11.9.tgz", + "integrity": "sha512-mh8w+Mau2Y1QfTEszEAdO7j6ycNhYxF/Ing6nAk1eUg6NxjeT0viVHjICMd9sU3U463vM2G+KfBBK5grk3/Mlw==", + "dev": true, + "requires": { + "@types/chai": "^4.0.4" + } + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "es-abstract": { + "version": "1.17.4", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.4.tgz", + "integrity": "sha512-Ae3um/gb8F0mui/jPL+QiqmglkUsaQf7FwBEHYIFkztkneosu9imhqHpBzQ3h1vit8t5iQ74t6PEVvphBZiuiQ==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.1.5", + "is-regex": "^1.0.5", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimleft": "^2.1.1", + "string.prototype.trimright": "^2.1.1" + }, + "dependencies": { + "object-inspect": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", + "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", + "dev": true + } + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "eslint": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.1.0.tgz", + "integrity": "sha512-QhrbdRD7ofuV09IuE2ySWBz0FyXCq0rriLTZXZqaWSI79CVtHVRdkFuFTViiqzZhkCgfOh9USpriuGN2gIpZDQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "ajv": "^6.10.0", + "chalk": "^2.1.0", + "cross-spawn": "^6.0.5", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^1.3.1", + "eslint-visitor-keys": "^1.0.0", + "espree": "^6.0.0", + "esquery": "^1.0.1", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^11.7.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "inquirer": "^6.4.1", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.14", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.2", + "progress": "^2.0.0", + "regexpp": "^2.0.1", + "semver": "^6.1.2", + "strip-ansi": "^5.2.0", + "strip-json-comments": "^3.0.1", + "table": "^5.2.3", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + } + }, + "eslint-scope": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz", + "integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", + "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "eslint-visitor-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", + "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==", + "dev": true + }, + "espree": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-6.1.2.tgz", + "integrity": "sha512-2iUPuuPP+yW1PZaMSDM9eyVf8D5P0Hi8h83YtZ5bPc/zHYjII5khoixIUTMO794NOY8F/ThF1Bo8ncZILarUTA==", + "dev": true, + "requires": { + "acorn": "^7.1.0", + "acorn-jsx": "^5.1.0", + "eslint-visitor-keys": "^1.1.0" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "esquery": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", + "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", + "dev": true, + "requires": { + "estraverse": "^4.0.0" + } + }, + "esrecurse": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "dev": true, + "requires": { + "estraverse": "^4.1.0" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, + "fast-deep-equal": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz", + "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "dev": true, + "requires": { + "flat-cache": "^2.0.1" + } + }, + "flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "dev": true, + "requires": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + } + }, + "flatted": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz", + "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==", + "dev": true + }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "requires": { + "is-callable": "^1.1.3" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", + "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "import-fresh": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", + "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "inquirer": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", + "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", + "dev": true, + "requires": { + "ansi-escapes": "^3.2.0", + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.3", + "figures": "^2.0.0", + "lodash": "^4.17.12", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rxjs": "^6.4.0", + "string-width": "^2.1.0", + "strip-ansi": "^5.1.0", + "through": "^2.3.6" + } + }, + "is-callable": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", + "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==", + "dev": true + }, + "is-date-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", + "dev": true + }, + "is-regex": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", + "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", + "dev": true + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "object-inspect": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.6.0.tgz", + "integrity": "sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ==", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "regexpp": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", + "dev": true + }, + "requirejs": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/requirejs/-/requirejs-2.3.6.tgz", + "integrity": "sha512-ipEzlWQe6RK3jkzikgCupiTbTvm4S0/CAU5GlgptkN5SO6F3u0UD0K18wy6ErDqiCyP4J4YYe1HuAShvsxePLg==", + "dev": true + }, + "resolve": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.1.tgz", + "integrity": "sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dev": true, + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + } + }, + "resumer": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/resumer/-/resumer-0.0.0.tgz", + "integrity": "sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k=", + "dev": true, + "requires": { + "through": "~2.3.4" + } + }, + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "run-async": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", + "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", + "dev": true, + "requires": { + "is-promise": "^2.1.0" + } + }, + "rxjs": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.4.tgz", + "integrity": "sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "string.prototype.trim": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz", + "integrity": "sha1-0E3iyJ4Tf019IG8Ia17S+ua+jOo=", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.5.0", + "function-bind": "^1.0.2" + } + }, + "string.prototype.trimleft": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz", + "integrity": "sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, + "string.prototype.trimright": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz", + "integrity": "sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + } + } + }, + "strip-json-comments": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz", + "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "table": { + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "dev": true, + "requires": { + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + }, + "dependencies": { + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + } + } + }, + "tape": { + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/tape/-/tape-4.11.0.tgz", + "integrity": "sha512-yixvDMX7q7JIs/omJSzSZrqulOV51EC9dK8dM0TzImTIkHWfe2/kFyL5v+d9C+SrCMaICk59ujsqFAVidDqDaA==", + "dev": true, + "requires": { + "deep-equal": "~1.0.1", + "defined": "~1.0.0", + "for-each": "~0.3.3", + "function-bind": "~1.1.1", + "glob": "~7.1.4", + "has": "~1.0.3", + "inherits": "~2.0.4", + "minimist": "~1.2.0", + "object-inspect": "~1.6.0", + "resolve": "~1.11.1", + "resumer": "~0.0.0", + "string.prototype.trim": "~1.1.2", + "through": "~2.3.8" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "tslib": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", + "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==", + "dev": true + }, + "tslint": { + "version": "5.18.0", + "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.18.0.tgz", + "integrity": "sha512-Q3kXkuDEijQ37nXZZLKErssQVnwCV/+23gFEMROi8IlbaBG6tXqLPQJ5Wjcyt/yHPKBC+hD5SzuGaMora+ZS6w==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "builtin-modules": "^1.1.1", + "chalk": "^2.3.0", + "commander": "^2.12.1", + "diff": "^3.2.0", + "glob": "^7.1.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "resolve": "^1.3.2", + "semver": "^5.3.0", + "tslib": "^1.8.0", + "tsutils": "^2.29.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "tsutils": { + "version": "2.29.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", + "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + }, + "typescript": { + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.6.5.tgz", + "integrity": "sha512-BEjlc0Z06ORZKbtcxGrIvvwYs5hAnuo6TKdNFL55frVDlB+na3z5bsLhFaIxmT+dPWgBIjMo6aNnTOgHHmHgiQ==", + "dev": true + }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "v8-compile-cache": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz", + "integrity": "sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==", + "dev": true + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "write": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "dev": true, + "requires": { + "mkdirp": "^0.5.1" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 --- /dev/null +++ b/package.json @@ -0,0 +1,14 @@ +{ + "devDependencies": { + "@types/node": "8.0.0", + "@types/tape": "~4.2.33", + "@types/requirejs": "2.1.31", + "dojo": "1.16.0", + "dojo-typings": "1.11.9", + "tape": "~4.13.0", + "typescript": "~3.7.5", + "eslint": "6.8.0", + "tslint": "6.0.0", + "@implab/core-amd": "^1.3.2" + } +} diff --git a/settings.gradle b/settings.gradle new file mode 100644 --- /dev/null +++ b/settings.gradle @@ -0,0 +1,15 @@ +/* + * This settings file was generated by the Gradle 'init' task. + * + * The settings file is used to specify which projects to include in your build. + * In a single project build this file can be empty or even removed. + * + * Detailed information about configuring a multi-project build in Gradle can be found + * in the user guide at https://docs.gradle.org/3.5/userguide/multi_project_builds.html + */ + +// To declare projects as part of a multi-project build use the 'include' method + +//include 'sub-project-name' + +//rootProject.name = 'djx' \ No newline at end of file diff --git a/src/main/ts/NlsBundle.ts b/src/main/ts/NlsBundle.ts new file mode 100644 --- /dev/null +++ b/src/main/ts/NlsBundle.ts @@ -0,0 +1,78 @@ +import { MapOf } from "@implab/core-amd/interfaces"; +import { isPromise, mixin } from "@implab/core-amd/safe"; +import { locale as sysLocale } from "dojo/_base/kernel"; +import { id as mid } from "module"; +import { TraceSource } from "@implab/core-amd/log/TraceSource"; + +const trace = TraceSource.get(mid); + +type PromiseOrValue = PromiseLike | T; +type ResolveCallback = () => PromiseOrValue; + +trace.debug("Current sysLocale: {0}", sysLocale); + +function when(value: PromiseOrValue, cb: (v: T) => PromiseOrValue): PromiseOrValue { + return isPromise(value) ? + value.then(cb) : + cb(value); +} + +function isCallback(v: ResolveCallback | PromiseOrValue): v is ResolveCallback { + return typeof v === "function"; +} + +function chainObjects(o1: T, o2: T) { + if (!o1) + return o2; + if (!o2) + return o1; + + return mixin(Object.create(o1) as T, o2); +} + +export class NlsBundle { + _locales: MapOf | PromiseOrValue>; + default: T; + + _cache: MapOf>; + + constructor(defNls: T, locales: MapOf) { + this.default = defNls; + this._locales = locales || {}; + this._cache = {}; + } + + getLocale(locale: string) { + const _loc = locale || sysLocale; + + const locales = new Array(); + + _loc.split("-").reduce((a, x) => { + a.push(x); + locales.unshift(a.join("-")); + return a; + }, []); + + return this._resolveLocale(locales); + } + + _resolveLocale(locales: string[]): PromiseOrValue { + if (!locales.length) + return; + + const locale = locales.shift(); + + if (this._cache[locale]) + return this._cache[locale]; + + let data = this._locales[locale]; + if (isCallback(data)) + data = data(); + + const parent = locales.length ? this._resolveLocale(locales) : this.default; + + return this._cache[locale] = when(data, x => { + return when(parent, y => this._cache[locale] = chainObjects(y, x)); + }); + } +} diff --git a/src/main/ts/declare.ts b/src/main/ts/declare.ts new file mode 100644 --- /dev/null +++ b/src/main/ts/declare.ts @@ -0,0 +1,233 @@ +import declare = require("dojo/_base/declare"); +import { each } from "@implab/core-amd/safe"; +import { Constructor } from "@implab/core-amd/interfaces"; + +export interface AbstractConstructor { + prototype: T; +} + +interface DjMockConstructor { + new(...args: any[]): T; + mock: boolean; + base: AbstractConstructor; +} + +export function djbase( + b0: AbstractConstructor +): dojo._base.DeclareConstructor; + +export function djbase( + b0: AbstractConstructor, + b1: AbstractConstructor +): dojo._base.DeclareConstructor; + +export function djbase( + b0: AbstractConstructor, + b1: AbstractConstructor, + b2: AbstractConstructor +): dojo._base.DeclareConstructor; + +export function djbase( + b0: AbstractConstructor, + b1: AbstractConstructor, + b2: AbstractConstructor, + b3: AbstractConstructor +): dojo._base.DeclareConstructor; + +export function djbase( + b0: AbstractConstructor, + b1: AbstractConstructor, + b2: AbstractConstructor, + b3: AbstractConstructor, + b4: AbstractConstructor +): dojo._base.DeclareConstructor; + +export function djbase( + b0: AbstractConstructor, + b1: AbstractConstructor, + b2: AbstractConstructor, + b3: AbstractConstructor, + b4: AbstractConstructor, + b5: AbstractConstructor +): dojo._base.DeclareConstructor; + +export function djbase( + b0: AbstractConstructor, + b1: AbstractConstructor, + b2: AbstractConstructor, + b3: AbstractConstructor, + b4: AbstractConstructor, + b5: AbstractConstructor, + b6: AbstractConstructor +): dojo._base.DeclareConstructor; + +export function djbase( + b0: AbstractConstructor, + b1: AbstractConstructor, + b2: AbstractConstructor, + b3: AbstractConstructor, + b4: AbstractConstructor, + b5: AbstractConstructor, + b6: AbstractConstructor, + b7: AbstractConstructor +): dojo._base.DeclareConstructor; + +/** Создает конструктор-заглушку из списка базовых классов, используется + * для объявления классов при помощи `dojo/_base/declare`. + * + * Создает пустой конструтор, с пустым стандартным прототипом, это нужно, + * поскольку в унаследованном классе конструктор обязательно должен вызвать + * `super(...)`, таким образом он вызовет пустую функцию. + * + * Созданный конструтор хранит в себе список базовых классов, который будет + * использован декоратором `djclass`, который вернет класс, объявленный при + * помощи `dojo/_base/declare`. + * + * @param bases список базовых классов, от которых требуется унаследовать + * новый класс. + * + */ +export function djbase(...bases: any[]): Constructor { + + const t = class { + static mock: boolean; + static base: AbstractConstructor; + }; + + t.mock = true; + t.base = declare(bases); + + return t as any; +} + +function isMockConstructor(v: AbstractConstructor): v is DjMockConstructor { + return v && "mock" in v; +} + +/** Создает класс при помощи `dojo/_base/declare`. Для этого исходный класс + * должен быть унаследован от `djbase(...)`. + * + * @param target Класс, который нужно объявить при помощи `dojo/_base/declare` + */ +export function djclass(target: T): T { + // получаем базовый конструктор и его прототип + let bp = target && target.prototype && Object.getPrototypeOf(target.prototype); + const bc = bp && bp.constructor; + + // проверка того, что класс унаследован от специальной заглушки + if (isMockConstructor(bc)) { + // t - базовый класс, объявленный при помощи dojo/_base/declare + const t = bc.base; + + // bc - базовый класс, bc.prototype используется как super + // при вызове базовых методов. Нужно создать bc.prototype + // таким образом, чтобы он вызывал this.inherited(). + + // создаем новый порототип, он не в цепочке прототипов у текущего + // класса, но super.some_method будет использовать именно его. + // в этом объекте будут размещены прокси для переопределенных + // методов. + bp = bc.prototype = Object.create(t.prototype); + bp.constructor = bc; + + // proxy - фабрика для создания прокси-методов, которые внутри + // себя вызовут this.inherited с правильными параметрами. + const proxy = (m: (...args: any[]) => any) => function () { + return this.inherited(m, arguments); + }; + + // у текущего класса прототип содержит методы, объявленные в этом + // классе и его конструктор. Нужно пройти по всем методам и + // создать для них прокси. + // При этом только те, методы, которые есть в базовых классах + // могут быть переопределены. + each(target.prototype, (m: any, p: string | number | symbol) => { + if (typeof m === "function" && + p !== "constructor" && + target.prototype.hasOwnProperty(p) && + p in t.prototype + ) { + bp[p] = proxy(m); + } + }); + + const cls = declare(t, target.prototype); + // TODO mixin static members + return cls as any; + } else { + return target as any; + } +} + +function makeSetterName(prop: string) { + return [ + "_set", + prop.replace(/^./, x => x.toUpperCase()), + "Attr" + ].join(""); +} + +function makeGetterName(prop: string) { + return [ + "_get", + prop.replace(/^./, x => x.toUpperCase()), + "Attr" + ].join(""); +} + +interface NodeBindSpec { + node: string; + type: string; +} + +/** + * Описание привязки свойства виджета к свойству внутреннего объекта. + */ +interface MemberBindSpec { + /** + * Имя свойства со ссылкой на объект, к которому . + */ + member: string; + /** + * Свойство объекта к которому нужно осуществить привязку. + */ + property: string; + + /** + * Привязка осуществляется не только на запись но и на чтение свойства. + */ + getter?: boolean; +} + +function isNodeBindSpec(v): v is NodeBindSpec { + return "node" in v; +} + +function isMemberBindSpec(v): v is MemberBindSpec { + return "member" in v; +} + +/** Декорирует свойства виджета для привязки их к внутренним членам, либо DOM + * элементам, либо свойству внутреннего объекта. + * + * @param {NodeBindSpec | MemberBindSpec} params Параметры связывания. + */ +export function bind(params: NodeBindSpec | MemberBindSpec) { + if (isNodeBindSpec(params)) + return (target: any, name: string) => { + target[makeSetterName(name)] = params; + }; + else if (isMemberBindSpec(params)) { + return (target: any, name: string) => { + target[name] = null; + target[makeSetterName(name)] = function (v) { + this._set(name, v); + this[params.member].set(params.property, v); + }; + if (params.getter) + target[makeGetterName(name)] = function () { + return this[params.member].get(params.property); + }; + }; + } +} diff --git a/src/main/ts/djx/BuildContextBase.ts b/src/main/ts/djx/BuildContextBase.ts new file mode 100644 --- /dev/null +++ b/src/main/ts/djx/BuildContextBase.ts @@ -0,0 +1,67 @@ +import { isNull, mixin } from "@implab/core-amd/safe"; +import { isPlainObject, isNode, isBuildContext } from "./traits"; + +export abstract class BuildContextBase { + _attrs = {}; + + _children = []; + + _created: boolean; + + visitNext(v: any) { + if (isNull(v)) + return; + + if (isPlainObject(v)) { + + if (this._created) + this._setAttrs(v); + else + mixin(this._attrs, v); + + } else { + if (this._created) + this._addChild(v); + else + this._children.push(v); + } + } + + getChildDom(v: any) { + if (isNull(v)) + return; + + const tv = typeof v; + if (tv === "string" || tv === "number" || tv === "boolean" || v instanceof RegExp || v instanceof Date) { + return document.createTextNode(v.toString()); + } else if (isNode(v)) { + return v; + } else if (isBuildContext(v)) { + return v.getDomElement(); + } else { + throw new Error("Invalid parameter"); + } + } + + abstract _getDomElement(): HTMLElement; + + ensureCreated() { + if (!this._created) { + this._create(this._attrs, this._children); + this._children = null; + this._attrs = null; + this._created = true; + } + } + + getDomElement() { + this.ensureCreated(); + return this._getDomElement(); + } + + abstract _addChild(child: any): void; + + abstract _setAttrs(attrs: object): void; + + abstract _create(attrs: object, children: any[]): void; +} diff --git a/src/main/ts/djx/DjxWidgetBase.ts b/src/main/ts/djx/DjxWidgetBase.ts new file mode 100644 --- /dev/null +++ b/src/main/ts/djx/DjxWidgetBase.ts @@ -0,0 +1,44 @@ +import { djbase, djclass } from "../declare"; +import _WidgetBase = require("dijit/_WidgetBase"); +import _AttachMixin = require("dijit/_AttachMixin"); +import { BuildContext, isNode } from "./traits"; +import registry = require("dijit/registry"); + +@djclass +export abstract class DjxWidgetBase extends djbase(_WidgetBase, _AttachMixin) { + + buildRendering() { + this.domNode = this.render().getDomElement(); + super.buildRendering(); + } + + abstract render(): BuildContext; + + _processTemplateNode( + baseNode: T, + getAttrFunc: (baseNode: T, attr: string) => string, + attachFunc: (node: T, type: string, func?: (...args: any[]) => any) => dojo.Handle + ): boolean { + if (isNode(baseNode)) { + const w = registry.byNode(baseNode); + if (w) { + // from dijit/_WidgetsInTemplateMixin + this._processTemplateNode(w, + (n, p) => n[p], // callback to get a property of a widget + (widget, type, callback) => { + // callback to do data-dojo-attach-event to a widget + if (type in widget) { + // back-compat, remove for 2.0 + return widget.connect(widget, type, callback); + } else { + // 1.x may never hit this branch, but it's the default for 2.0 + return widget.on(type, callback); + } + }); + // don't process widgets internals + return false; + } + } + return super._processTemplateNode(baseNode, getAttrFunc, attachFunc); + } +} diff --git a/src/main/ts/djx/HtmlElementContext.ts b/src/main/ts/djx/HtmlElementContext.ts new file mode 100644 --- /dev/null +++ b/src/main/ts/djx/HtmlElementContext.ts @@ -0,0 +1,37 @@ +import dom = require("dojo/dom-construct"); +import attr = require("dojo/dom-attr"); +import { argumentNotEmptyString } from "@implab/core-amd/safe"; +import { BuildContextBase } from "./BuildContextBase"; + +export class HtmlElementContext extends BuildContextBase { + elementType: string; + + _element: HTMLElement; + + constructor(elementType: string) { + argumentNotEmptyString(elementType, "elementType"); + super(); + + this.elementType = elementType; + } + + _addChild(child: any): void { + dom.place(this.getChildDom(child), this._element); + } + + _setAttrs(attrs: object): void { + attr.set(this._element, attrs); + } + + _create(attrs: object, children: any[]) { + this._element = dom.create(this.elementType, attrs); + + if (children) + children.forEach(v => this._addChild(v)); + } + + _getDomElement() { + return this._element; + } + +} diff --git a/src/main/ts/djx/WidgetContext.ts b/src/main/ts/djx/WidgetContext.ts new file mode 100644 --- /dev/null +++ b/src/main/ts/djx/WidgetContext.ts @@ -0,0 +1,40 @@ +import dom = require("dojo/dom-construct"); +import { argumentNotNull, isNull, mixin } from "@implab/core-amd/safe"; +import _WidgetBase = require("dijit/_WidgetBase"); +import { _WidgetBaseConstructor, isNode } from "./traits"; +import { BuildContextBase } from "./BuildContextBase"; + +export class WidgetContext extends BuildContextBase { + widgetClass: _WidgetBaseConstructor; + + _instance: _WidgetBase; + + constructor(widgetClass: _WidgetBaseConstructor) { + super(); + argumentNotNull(widgetClass, "widgetClass"); + + this.widgetClass = widgetClass; + } + + _addChild(child: any): void { + if (!this._instance.containerNode) + throw new Error("Widget doesn't support adding children"); + + dom.place(this.getChildDom(child), this._instance.containerNode); + } + + _setAttrs(attrs: object): void { + this._instance.set(attrs); + } + + _create(attrs: object, children: any[]) { + this._instance = new this.widgetClass(this._attrs); + if (children) + children.forEach(x => this._addChild(x)); + } + + _getDomElement() { + return this._instance.domNode; + } + +} diff --git a/src/main/ts/djx/traits.ts b/src/main/ts/djx/traits.ts new file mode 100644 --- /dev/null +++ b/src/main/ts/djx/traits.ts @@ -0,0 +1,31 @@ +import _WidgetBase = require("dijit/_WidgetBase"); + +export interface BuildContext { + getDomElement(): HTMLElement; +} + +export function isNode(el: any): el is HTMLElement { + return el && el.nodeName && el.nodeType; +} + +export function isWidget(v: any): v is _WidgetBase { + return v && "domNode" in v; +} + +export function isBuildContext(v: any): v is BuildContext { + return typeof v === "object" && typeof v.getDomElement === "function"; +} + +export function isPlainObject(v: object) { + if (typeof v !== "object") + return false; + + const vp = Object.getPrototypeOf(v); + return !vp || vp === Object.prototype; +} + +export type _WidgetBaseConstructor = dijit._WidgetBaseConstructor<_WidgetBase>; + +export function isWidgetConstructor(v: any): v is _WidgetBaseConstructor { + return typeof v === "function" && v.prototype && "domNode" in v.prototype; +} diff --git a/src/main/ts/i18n.ts b/src/main/ts/i18n.ts new file mode 100644 --- /dev/null +++ b/src/main/ts/i18n.ts @@ -0,0 +1,28 @@ +import { MapOf } from "@implab/core-amd/interfaces"; +import { NlsBundle } from "./NlsBundle"; +import { isPromise } from "@implab/core-amd/safe"; + +export function bundle(nls: T, locales?: MapOf) { + const nlsBundle = new NlsBundle(nls, locales); + + const fn = (locale?: string) => { + const result = nlsBundle.getLocale(locale); + if (isPromise(result)) + throw new Error(`The bundle '${locale}' isn't loaded`); + else + return result; + }; + + fn.define = (pack: Partial) => pack; + fn.default = nlsBundle.default; + fn.load = async (id: string, require: Require, cb: { (): void; error: (arg0: any) => void; }) => { + try { + await nlsBundle.getLocale(id); + cb(); + } catch (e) { + cb.error(e); + } + }; + + return fn; +} diff --git a/src/main/tsconfig.json b/src/main/tsconfig.json new file mode 100644 --- /dev/null +++ b/src/main/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "../tsconfig", + "compilerOptions": { + "rootDir": "ts", + "types": ["requirejs", "dojo-typings"] + } +} \ No newline at end of file diff --git a/src/test/ts/TestTraits.ts b/src/test/ts/TestTraits.ts new file mode 100644 --- /dev/null +++ b/src/test/ts/TestTraits.ts @@ -0,0 +1,74 @@ +import { IObservable, ICancellation, IDestroyable } from "@implab/core-amd/interfaces"; +import { Cancellation } from "@implab/core-amd/Cancellation"; +import { TraceEvent, LogLevel, WarnLevel, DebugLevel, TraceSource } from "@implab/core-amd/log/TraceSource"; +import * as tape from "tape"; +import { argumentNotNull, destroy } from "@implab/core-amd/safe"; + +export class TapeWriter implements IDestroyable { + private readonly _tape: tape.Test; + + private readonly _subscriptions = new Array(); + private _destroyed; + + constructor(t: tape.Test) { + argumentNotNull(t, "tape"); + this._tape = t; + } + + writeEvents(source: IObservable, ct: ICancellation = Cancellation.none) { + if (!this._destroyed) { + const subscription = source.on(this.writeEvent.bind(this)); + if (ct.isSupported()) { + ct.register(subscription.destroy.bind(subscription)); + } + this._subscriptions.push(subscription); + } + } + + writeEvent(next: TraceEvent) { + if (next.level >= DebugLevel) { + this._tape.comment(`DEBUG ${next.source.id} ${next}`); + } else if (next.level >= LogLevel) { + this._tape.comment(`LOG ${next.source.id} ${next}`); + } else if (next.level >= WarnLevel) { + this._tape.comment(`WARN ${next.source.id} ${next}`); + } else { + this._tape.comment(`ERROR ${next.source.id} ${next}`); + } + } + + destroy() { + this._subscriptions.forEach(destroy); + } +} + +export function test(name: string, cb: (t: tape.Test, trace: TraceSource) => any) { + tape(name, async t => { + const writer = new TapeWriter(t); + + // this trace is not announced through the TraceSource global registry + const trace = new TraceSource(name); + trace.level = DebugLevel; + writer.writeEvents(trace.events); + + const h = TraceSource.on(ts => { + ts.level = DebugLevel; + writer.writeEvents(ts.events); + }); + + try { + await cb(t, trace); + } catch (e) { + + // verbose error information + // tslint:disable-next-line + console.error(e); + t.fail(e); + + } finally { + t.end(); + destroy(writer); + destroy(h); + } + }); +} diff --git a/src/test/ts/dummy.ts b/src/test/ts/dummy.ts new file mode 100644 --- /dev/null +++ b/src/test/ts/dummy.ts @@ -0,0 +1,10 @@ +import * as tape from "tape"; + +tape("simple", t => { + t.pass("sync assert"); + setTimeout(() => { + t.pass("async assert"); + // end should be called after the last assertion + t.end(); + }, 100); +}); diff --git a/src/test/tsconfig.json b/src/test/tsconfig.json new file mode 100644 --- /dev/null +++ b/src/test/tsconfig.json @@ -0,0 +1,11 @@ +{ + "extends": "../tsconfig", + "compilerOptions": { + "rootDir": "ts", + "rootDirs": [ + "ts", + "../main/ts" + ], + "types": ["requirejs", "dojo-typings"] + } +} \ No newline at end of file diff --git a/src/tsconfig.json b/src/tsconfig.json new file mode 100644 --- /dev/null +++ b/src/tsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "moduleResolution": "node", + "noEmitOnError": true, + "types": [], + "experimentalDecorators": true, + "jsxFactory": "createElement", + "jsx": "react", + "lib": ["es5", "es2015.promise", "es2015.symbol", "es2015.iterable", "dom", "scripthost"] + } +} \ No newline at end of file diff --git a/tslint.json b/tslint.json new file mode 100644 --- /dev/null +++ b/tslint.json @@ -0,0 +1,43 @@ +{ + "extends": "tslint:recommended", + "defaultSeverity": "warn", + "rules": { + "align": [ + true, + "parameters", + "statements" + ], + "interface-name": [false], + "max-line-length": [ true, 185 ], + "member-access": false, + "member-ordering": [ + false, + "variables-before-functions" + ], + "no-bitwise": false, + "no-empty": false, + "no-namespace": false, + "ordered-imports": false, + "no-return-await": true, + "no-floating-promises": true, + "prefer-for-of": false, + "one-line": [ + true, + "check-open-brace", + "check-catch", + "check-whitespace" + ], + "object-literal-sort-keys": false, + "trailing-comma": [ + true, + { + "singleline": "never", + "multiline": "never" + } + ], + "variable-name": false, + "curly": false, + "array-type": false, + "arrow-parens": [true, "ban-single-arg-parens"] + } +} \ No newline at end of file