Merge pull request #51 from aminya/time-installation

This commit is contained in:
Amin Yahyaabadi 2022-04-18 06:24:18 -07:00 committed by GitHub
commit f85476e0b8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 95 additions and 49 deletions

2
dist/setup_cpp.js vendored

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -40,8 +40,10 @@
"execa": "^5.1.1",
"mri": "^1.2.0",
"msvc-dev-cmd": "github:aminya/msvc-dev-cmd#9f672c1",
"numerous": "1.0.3",
"semver": "7.3.7",
"setup-python": "github:actions/setup-python#7f80679172b057fc5e90d70d197929d454754a5a",
"time-delta": "github:aminya/time-delta#69d91a41cef28e569be9a2991129f5f7d1f0d00e",
"untildify": "^4.0.0",
"which": "^2.0.2"
},
@ -96,6 +98,7 @@
"semver": "7.3.7",
"eslint": "^8.13.0",
"prettier": "2.6.2",
"lru-cache": "7.8.1",
"core-js": "*",
"babel-eslint": "npm:@babel/eslint-parser"
},

View File

@ -4,6 +4,7 @@ overrides:
semver: 7.3.7
eslint: ^8.13.0
prettier: 2.6.2
lru-cache: 7.8.1
core-js: '*'
babel-eslint: npm:@babel/eslint-parser
@ -30,6 +31,7 @@ specifiers:
msvc-dev-cmd: github:aminya/msvc-dev-cmd#9f672c1
npm-check-updates: ^12.5.9
npm-run-all2: ^5.0.2
numerous: 1.0.3
parcel: ^2.4.1
prettier: 2.6.2
prettier-config-atomic: ^3.0.9
@ -37,6 +39,7 @@ specifiers:
setup-python: github:actions/setup-python#7f80679172b057fc5e90d70d197929d454754a5a
shx: 0.3.4
terser-config-atomic: ^0.1.1
time-delta: github:aminya/time-delta#69d91a41cef28e569be9a2991129f5f7d1f0d00e
ts-jest: ^27.1.4
typescript: ^4.6.3
untildify: ^4.0.0
@ -50,8 +53,10 @@ dependencies:
execa: 5.1.1
mri: 1.2.0
msvc-dev-cmd: github.com/aminya/msvc-dev-cmd/9f672c1
numerous: 1.0.3
semver: 7.3.7
setup-python: github.com/actions/setup-python/7f80679172b057fc5e90d70d197929d454754a5a
time-delta: github.com/aminya/time-delta/69d91a41cef28e569be9a2991129f5f7d1f0d00e
untildify: 4.0.0
which: 2.0.2
@ -304,7 +309,7 @@ packages:
engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0}
peerDependencies:
'@babel/core': '>=7.11.0'
eslint: ^7.5.0 || ^8.0.0 || *
eslint: '*'
dependencies:
'@babel/core': 7.17.9
eslint: 8.13.0
@ -1308,7 +1313,7 @@ packages:
dotenv-expand: 5.1.0
json-source-map: 0.6.1
json5: 2.2.1
msgpackr: 1.5.5
msgpackr: 1.5.6
nullthrows: 1.1.1
semver: 7.3.7
dev: true
@ -2151,7 +2156,7 @@ packages:
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
'@typescript-eslint/parser': ^5.0.0
eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 || *
eslint: '*'
typescript: '*'
peerDependenciesMeta:
typescript:
@ -2177,7 +2182,7 @@ packages:
resolution: {integrity: sha512-yhktJjMCJX8BSBczh1F/uY8wGRYrBeyn84kH6oyqdIJwTGKmzX5Qiq49LRQ0Jh0LXnWijEziSo6BRqny8nqLVQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 || *
eslint: '*'
typescript: '*'
peerDependenciesMeta:
typescript:
@ -2250,7 +2255,7 @@ packages:
resolution: {integrity: sha512-ZuEckdupXpXamKvFz/Ql8YnePh2ZWcwz7APICzJL985Rp5C2AYcHO62oJzIqNhAMtMK6XvrlBTZeNG8n7gS3lQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 || *
eslint: '*'
dependencies:
'@types/json-schema': 7.0.11
'@typescript-eslint/scope-manager': 5.19.0
@ -2272,8 +2277,8 @@ packages:
eslint-visitor-keys: 3.3.0
dev: true
/abab/2.0.5:
resolution: {integrity: sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==}
/abab/2.0.6:
resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==}
dev: true
/abbrev/1.1.1:
@ -3148,7 +3153,7 @@ packages:
cspell-trie-lib: 5.19.7
fast-equals: 3.0.1
find-up: 5.0.0
fs-extra: 10.0.1
fs-extra: 10.1.0
gensequence: 3.1.1
import-fresh: 3.3.0
resolve-from: 5.0.0
@ -3162,7 +3167,7 @@ packages:
engines: {node: '>=12.13.0'}
dependencies:
'@cspell/cspell-pipe': 5.19.7
fs-extra: 10.0.1
fs-extra: 10.1.0
gensequence: 3.1.1
dev: true
@ -3179,7 +3184,7 @@ packages:
cspell-lib: 5.19.7
fast-json-stable-stringify: 2.1.0
file-entry-cache: 6.0.1
fs-extra: 10.0.1
fs-extra: 10.1.0
get-stdin: 8.0.0
glob: 7.2.0
imurmurhash: 0.1.4
@ -3242,7 +3247,7 @@ packages:
resolution: {integrity: sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==}
engines: {node: '>=10'}
dependencies:
abab: 2.0.5
abab: 2.0.6
whatwg-mimetype: 2.3.0
whatwg-url: 8.7.0
dev: true
@ -3608,7 +3613,7 @@ packages:
resolution: {integrity: sha512-GOrQyDtVEc1Xy20U7vsB2yAoB4nBlfH5HZJeatRXHleO+OS5Ot+MWij4Dpltw4/DyIkqUfqz1epfhVR5XWWQPA==}
engines: {node: '>= 6'}
peerDependencies:
eslint: ^5.16.0 || ^6.8.0 || ^7.2.0 || *
eslint: '*'
eslint-plugin-import: ^2.22.1
dependencies:
confusing-browser-globals: 1.0.11
@ -3623,7 +3628,7 @@ packages:
resolution: {integrity: sha512-glZNDEZ36VdlZWoxn/bUR1r/sdFKPd1mHPbqUtkctgNG4yT2DLLtJ3D+yCV+jzZCc2V1nBVkmdknOJBZ5Hc0fg==}
engines: {node: '>= 6'}
peerDependencies:
eslint: ^5.16.0 || ^6.8.0 || ^7.2.0 || *
eslint: '*'
eslint-plugin-import: ^2.22.1
eslint-plugin-jsx-a11y: ^6.4.1
eslint-plugin-react: ^7.21.5
@ -3674,7 +3679,7 @@ packages:
resolution: {integrity: sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==}
hasBin: true
peerDependencies:
eslint: '>=7.0.0 || *'
eslint: '*'
dependencies:
eslint: 8.13.0
dev: true
@ -3698,7 +3703,7 @@ packages:
resolution: {integrity: sha512-+qtkIPSc9etYqOODIlENqiRjID/oEoGMAAQJN988Aczy461NIwzaamFY6Fi0QDVVDb2v+OL/StVrk/QmyItfeg==}
requiresBuild: true
peerDependencies:
eslint: '>=6.0.0 || *'
eslint: '*'
dependencies:
axe-core: 3.5.6
babel-eslint: /@babel/eslint-parser/7.17.0_@babel+core@7.17.9+eslint@8.13.0
@ -3728,7 +3733,7 @@ packages:
resolution: {integrity: sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==}
engines: {node: '>=8.10.0'}
peerDependencies:
eslint: '>=4.19.1 || *'
eslint: '*'
dependencies:
eslint: 8.13.0
eslint-utils: 2.1.0
@ -3745,7 +3750,7 @@ packages:
resolution: {integrity: sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==}
engines: {node: '>=4'}
peerDependencies:
eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || *
eslint: '*'
dependencies:
array-includes: 3.1.4
array.prototype.flat: 1.3.0
@ -3775,7 +3780,7 @@ packages:
resolution: {integrity: sha512-sVCFKX9fllURnXT2JwLN5Qgo24Ug5NF6dxhkmxsMEUZhXRcGg+X3e1JbJ84YePQKBl5E0ZjAH5Q4rkdcGY99+g==}
engines: {node: '>=4.0'}
peerDependencies:
eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || *
eslint: '*'
dependencies:
'@babel/runtime': 7.17.9
aria-query: 4.2.2
@ -3797,7 +3802,7 @@ packages:
resolution: {integrity: sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==}
engines: {node: '>=8.10.0'}
peerDependencies:
eslint: '>=5.16.0 || *'
eslint: '*'
dependencies:
eslint: 8.13.0
eslint-plugin-es: 3.0.1_eslint@8.13.0
@ -3820,7 +3825,7 @@ packages:
engines: {node: '>=10'}
requiresBuild: true
peerDependencies:
eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || *
eslint: '*'
dependencies:
eslint: 8.13.0
dev: true
@ -3834,7 +3839,7 @@ packages:
/eslint-plugin-react-native/3.11.0_eslint@8.13.0:
resolution: {integrity: sha512-7F3OTwrtQPfPFd+VygqKA2VZ0f2fz0M4gJmry/TRE18JBb94/OtMxwbL7Oqwu7FGyrdeIOWnXQbBAveMcSTZIA==}
peerDependencies:
eslint: ^3.17.0 || ^4 || ^5 || ^6 || ^7 || *
eslint: '*'
dependencies:
'@babel/traverse': 7.17.9
eslint: 8.13.0
@ -3848,14 +3853,14 @@ packages:
resolution: {integrity: sha512-AfjgFQB+nYszudkxRkTFu0UR1zEQig0ArVMPloKhxwlwkzaw/fBiH0QWcBBhZONlXqQC51+nfqFrkn4EzHcGBw==}
engines: {node: '>=4'}
peerDependencies:
eslint: ^3 || ^4 || ^5 || ^6 || ^7 || *
eslint: '*'
dependencies:
array-includes: 3.1.4
array.prototype.flatmap: 1.3.0
doctrine: 2.1.0
eslint: 8.13.0
has: 1.0.3
jsx-ast-utils: 2.4.1
jsx-ast-utils: 3.2.2
minimatch: 3.1.2
object.entries: 1.1.5
object.fromentries: 2.0.5
@ -3870,7 +3875,7 @@ packages:
resolution: {integrity: sha512-CVCXajliVh509PcZYRFyu/BoUEz452+jtQJq2b3Bae4v3xBUWPLCmtmBM+ZinG4MzwmxJgJ2M5rMqhqLVn7MtQ==}
engines: {node: '>=4'}
peerDependencies:
eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || *
eslint: '*'
dependencies:
array-includes: 3.1.4
array.prototype.flatmap: 1.3.0
@ -3940,7 +3945,7 @@ packages:
resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==}
engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0}
peerDependencies:
eslint: '>=5 || *'
eslint: '*'
dependencies:
eslint: 8.13.0
eslint-visitor-keys: 2.1.0
@ -4241,8 +4246,8 @@ packages:
resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==}
dev: true
/fs-extra/10.0.1:
resolution: {integrity: sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag==}
/fs-extra/10.1.0:
resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==}
engines: {node: '>=12'}
dependencies:
graceful-fs: 4.2.10
@ -4847,6 +4852,11 @@ packages:
engines: {node: '>= 0.4'}
dev: true
/is-node/1.0.2:
resolution: {integrity: sha1-19ACdF733ru3R36YiVarCk/MtlM=}
engines: {node: '>= 0.10'}
dev: false
/is-npm/5.0.0:
resolution: {integrity: sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==}
engines: {node: '>=10'}
@ -5484,7 +5494,7 @@ packages:
canvas:
optional: true
dependencies:
abab: 2.0.5
abab: 2.0.6
acorn: 8.7.0
acorn-globals: 6.0.0
cssom: 0.4.4
@ -5692,7 +5702,7 @@ packages:
resolution: {integrity: sha512-gto+BB2uEob8qRiTlOq+R3uX0YNHsX9mjxj9Sbdue/LIKqu6IlZjrsjKeGyOMquc/474GEqFyX2pdytpydp0rQ==}
requiresBuild: true
dependencies:
msgpackr: 1.5.5
msgpackr: 1.5.6
nan: 2.15.0
node-gyp-build: 4.4.0
ordered-binary: 1.2.5
@ -5778,16 +5788,9 @@ packages:
engines: {node: '>=8'}
dev: true
/lru-cache/6.0.0:
resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
engines: {node: '>=10'}
dependencies:
yallist: 4.0.0
/lru-cache/7.8.1:
resolution: {integrity: sha512-E1v547OCgJvbvevfjgK9sNKIVXO96NnsTsFPBlg4ZxjhsJSODoH9lk8Bm0OxvHNm6Vm5Yqkl/1fErDxhYL8Skg==}
engines: {node: '>=12'}
dev: true
/make-dir/3.1.0:
resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==}
@ -5818,7 +5821,7 @@ packages:
minipass-pipeline: 1.2.4
negotiator: 0.6.3
promise-retry: 2.0.1
socks-proxy-agent: 6.1.1
socks-proxy-agent: 6.2.0
ssri: 9.0.0
transitivePeerDependencies:
- supports-color
@ -6241,8 +6244,8 @@ packages:
dev: true
optional: true
/msgpackr/1.5.5:
resolution: {integrity: sha512-JG0V47xRIQ9pyUnx6Hb4+3TrQoia2nA3UIdmyTldhxaxtKFkekkKpUW/N6fwHwod9o4BGuJGtouxOk+yCP5PEA==}
/msgpackr/1.5.6:
resolution: {integrity: sha512-Y1Ia1AYKcz30JOAUyyC0jCicI7SeP8NK+SVCGZIeLg2oQs28wSwW2GbHXktk4ZZmrq9/v2jU0JAbvbp2d1ewpg==}
optionalDependencies:
msgpackr-extract: 1.1.4
dev: true
@ -6491,6 +6494,10 @@ packages:
resolution: {integrity: sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==}
dev: true
/numerous/1.0.3:
resolution: {integrity: sha512-jN2WTpfdMmR1d5ClpYguln+XAvgW7B0te6wlsyaZhyev7E2CyOmvXq5LTIV/p9mt9WrPW9Xw1g5+28iZh8BhFQ==}
dev: false
/nwsapi/2.2.0:
resolution: {integrity: sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==}
dev: true
@ -7282,7 +7289,7 @@ packages:
engines: {node: '>=10'}
hasBin: true
dependencies:
lru-cache: 6.0.0
lru-cache: 7.8.1
/set-blocking/2.0.0:
resolution: {integrity: sha1-BF+XgtARrppoA93TgrJDkrPYkPc=}
@ -7346,8 +7353,8 @@ packages:
engines: {node: '>= 6.0.0', npm: '>= 3.0.0'}
dev: true
/socks-proxy-agent/6.1.1:
resolution: {integrity: sha512-t8J0kG3csjA4g6FTbsMOWws+7R7vuRC8aQ/wy3/1OWmsgwA68zs/+cExQ0koSitUDXqhufF/YJr9wtNMZHw5Ew==}
/socks-proxy-agent/6.2.0:
resolution: {integrity: sha512-wWqJhjb32Q6GsrUqzuFkukxb/zzide5quXYcMVpIjxalDBBYy2nqKCFQ/9+Ie4dvOYSQdOk3hUlZSdzZOd3zMQ==}
engines: {node: '>= 10'}
dependencies:
agent-base: 6.0.2
@ -8173,6 +8180,7 @@ packages:
/yallist/4.0.0:
resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
dev: true
/yaml/1.10.2:
resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==}
@ -8248,3 +8256,13 @@ packages:
is-plain-obj: 2.1.0
sort-object-keys: 1.1.3
dev: true
github.com/aminya/time-delta/69d91a41cef28e569be9a2991129f5f7d1f0d00e:
resolution: {tarball: https://codeload.github.com/aminya/time-delta/tar.gz/69d91a41cef28e569be9a2991129f5f7d1f0d00e}
name: time-delta
version: 1.0.0
engines: {node: '>=12'}
dependencies:
is-node: 1.0.2
numerous: 1.0.3
dev: false

View File

@ -18,12 +18,22 @@ import { setupPython } from "./python/python"
import mri from "mri"
import { untildify_user as untildify } from "./utils/path/untildify"
import { isGitHubCI } from "./utils/env/isci"
import * as timeDelta from "time-delta"
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
import timeDeltaLocale from "time-delta/locales/en.js"
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
import * as numerous from "numerous"
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
import numerousLocale from "numerous/locales/en.js"
import semverValid from "semver/functions/valid"
import { getVersion } from "./default_versions"
import { setupGcc } from "./gcc/gcc"
import { InstallationInfo } from "./utils/setup/setupBin"
import { error, success, warning } from "./utils/io/io"
import { error, info, success, warning } from "./utils/io/io"
import { setupVcpkg } from "./vcpkg/vcpkg"
import { join } from "path"
import { setupVCVarsall } from "./vcvarsall/vcvarsall"
@ -124,6 +134,12 @@ export async function main(args: string[]): Promise<number> {
const successMessages: string[] = []
const errorMessages: string[] = []
const timeFormatter = timeDelta.create({ autoloadLocales: true })
timeDelta.addLocale(timeDeltaLocale as timeDelta.Locale)
numerous.addLocale(numerousLocale)
let time1: number
let time2: number
// installing the specified tools
// loop over the tools and run their setup function
@ -134,6 +150,7 @@ export async function main(args: string[]): Promise<number> {
// skip if undefined
if (version !== undefined) {
// running the setup function for this tool
time1 = Date.now()
startGroup(`Installing ${tool} ${version}`)
try {
let installationInfo: InstallationInfo | undefined | void
@ -155,11 +172,14 @@ export async function main(args: string[]): Promise<number> {
errorMessages.push(`${tool} failed to install`)
}
endGroup()
time2 = Date.now()
info(`took ${timeFormatter.format(time1, time2) || "0 seconds"}`)
}
}
// installing the specified compiler
const maybeCompiler = opts.compiler
time1 = Date.now()
try {
if (maybeCompiler !== undefined) {
const { compiler, version } = getCompilerInfo(maybeCompiler)
@ -206,11 +226,15 @@ export async function main(args: string[]): Promise<number> {
}
}
endGroup()
time2 = Date.now()
info(`took ${timeFormatter.format(time1, time2) || "0 seconds"}`)
}
} catch (e) {
error(e as string | Error)
errorMessages.push(`Failed to install the ${maybeCompiler}`)
endGroup()
time2 = Date.now()
info(`took ${timeFormatter.format(time1, time2) || "0 seconds"}`)
}
if (successMessages.length === 0 && errorMessages.length === 0) {
@ -321,15 +345,15 @@ function maybeGetInput(key: string) {
}
function getSuccessMessage(tool: string, installationInfo: InstallationInfo | undefined | void) {
let msg = `${tool} was successfully installed`
let msg = `${tool} was installed successfully:`
if (installationInfo === undefined) {
return msg
}
if ("installDir" in installationInfo) {
msg += `\nThe installation directory is ${installationInfo.installDir}`
msg += `\n- The installation directory is ${installationInfo.installDir}`
}
if (installationInfo.binDir !== "") {
msg += `\nThe binary directory is ${installationInfo.binDir}`
msg += `\n- The binary directory is ${installationInfo.binDir}`
}
return msg
}

View File

@ -6,7 +6,7 @@ export function error(err: string | Error) {
}
export function success(msg: string) {
return isGitHubCI() ? core.info(msg) : console.log(`\x1b[32m${msg}\x1b[0m`)
return console.log(`\x1b[32m${msg}\x1b[0m`)
}
export function warning(msg: string) {

View File

@ -16,6 +16,7 @@
"inlineSources": true,
"preserveSymlinks": true,
"removeComments": false,
"skipLibCheck": true, // TODO: time-delta has issues
"lib": ["ES2018", "dom"],
"target": "ES2018",
"allowJs": true,