diff --git a/.github/workflows/ci_suite.yml b/.github/workflows/ci_suite.yml
index 6df3be1bc5d..497ecc19a35 100644
--- a/.github/workflows/ci_suite.yml
+++ b/.github/workflows/ci_suite.yml
@@ -58,8 +58,9 @@ jobs:
bash tools/ci/install_byond.sh
source $HOME/BYOND/byond/bin/byondsetup
python3 tools/ci/template_dm_generator.py
- tgui/bin/tgui --build
- bash tools/ci/dm.sh -DCIBUILDING -DCITESTING -DALL_MAPS tgstation.dme
+ tools/build/build
+ env:
+ CBT_BUILD_MODE : ALL_MAPS
run_all_tests:
if: "!contains(github.event.head_commit.message, '[ci skip]')"
@@ -97,9 +98,10 @@ jobs:
run: |
bash tools/ci/install_byond.sh
source $HOME/BYOND/byond/bin/byondsetup
- tgui/bin/tgui --build
- bash tools/ci/dm.sh -DCIBUILDING tgstation.dme
+ tools/build/build
bash tools/ci/run_server.sh
+ env:
+ CBT_BUILD_MODE: TEST_RUN
test_windows:
if: "!contains(github.event.head_commit.message, '[ci skip]')"
@@ -109,6 +111,8 @@ jobs:
- uses: actions/checkout@v2
- name: Compile
run: pwsh tools/ci/build.ps1
+ env:
+ DM_EXE: "C:\\byond\\bin\\dm.exe"
- name: Create artifact
run: |
md deploy
diff --git a/code/modules/asset_cache/asset_list_items.dm b/code/modules/asset_cache/asset_list_items.dm
index 62b8c60851f..60f8bb05f44 100644
--- a/code/modules/asset_cache/asset_list_items.dm
+++ b/code/modules/asset_cache/asset_list_items.dm
@@ -166,6 +166,13 @@
)
parents = list("font-awesome.css" = 'html/font-awesome/css/all.min.css')
+/datum/asset/simple/namespaced/tgfont
+ assets = list(
+ "tgfont.eot" = 'tgui/packages/tgfont/dist/tgfont.eot',
+ "tgfont.woff2" = 'tgui/packages/tgfont/dist/tgfont.woff2',
+ )
+ parents = list("tgfont.css" = 'tgui/packages/tgfont/dist/tgfont.css')
+
/datum/asset/spritesheet/chat
name = "chat"
diff --git a/code/modules/tgui/tgui.dm b/code/modules/tgui/tgui.dm
index b99783f67ad..55497b150ac 100644
--- a/code/modules/tgui/tgui.dm
+++ b/code/modules/tgui/tgui.dm
@@ -94,6 +94,8 @@
window.send_message("ping")
var/flush_queue = window.send_asset(get_asset_datum(
/datum/asset/simple/namespaced/fontawesome))
+ flush_queue |= window.send_asset(get_asset_datum(
+ /datum/asset/simple/namespaced/tgfont))
for(var/datum/asset/asset in src_object.ui_assets(user))
flush_queue |= window.send_asset(asset)
if (flush_queue)
diff --git a/code/modules/tgui_panel/tgui_panel.dm b/code/modules/tgui_panel/tgui_panel.dm
index 33dd525f2fc..895333daee3 100644
--- a/code/modules/tgui_panel/tgui_panel.dm
+++ b/code/modules/tgui_panel/tgui_panel.dm
@@ -47,6 +47,7 @@
get_asset_datum(/datum/asset/simple/tgui_panel),
))
window.send_asset(get_asset_datum(/datum/asset/simple/namespaced/fontawesome))
+ window.send_asset(get_asset_datum(/datum/asset/simple/namespaced/tgfont))
window.send_asset(get_asset_datum(/datum/asset/spritesheet/chat))
// Other setup
request_telemetry()
diff --git a/tgui/packages/tgfont/.gitignore b/tgui/packages/tgfont/.gitignore
new file mode 100644
index 00000000000..9b1c8b133c9
--- /dev/null
+++ b/tgui/packages/tgfont/.gitignore
@@ -0,0 +1 @@
+/dist
diff --git a/tgui/packages/tgfont/config.cjs b/tgui/packages/tgfont/config.cjs
new file mode 100644
index 00000000000..4f6b58f1061
--- /dev/null
+++ b/tgui/packages/tgfont/config.cjs
@@ -0,0 +1,14 @@
+/**
+ * @file
+ * @copyright 2021 AnturK https://github.com/AnturK
+ * @license MIT
+ */
+
+module.exports = {
+ name: 'tgfont',
+ inputDir: './icons',
+ outputDir: './dist',
+ fontTypes: ['woff2', 'eot'],
+ assetTypes: ['css'],
+ prefix: 'tg',
+};
diff --git a/tgui/packages/tgfont/icons/nanotrasen_logo.svg b/tgui/packages/tgfont/icons/nanotrasen_logo.svg
new file mode 100644
index 00000000000..d21b9f0a2a0
--- /dev/null
+++ b/tgui/packages/tgfont/icons/nanotrasen_logo.svg
@@ -0,0 +1,8 @@
+
+
+
+
diff --git a/tgui/packages/tgfont/icons/syndicate_logo.svg b/tgui/packages/tgfont/icons/syndicate_logo.svg
new file mode 100644
index 00000000000..c2863b790df
--- /dev/null
+++ b/tgui/packages/tgfont/icons/syndicate_logo.svg
@@ -0,0 +1,6 @@
+
+
+
+
diff --git a/tgui/packages/tgfont/mkdist.cjs b/tgui/packages/tgfont/mkdist.cjs
new file mode 100644
index 00000000000..5c628becf99
--- /dev/null
+++ b/tgui/packages/tgfont/mkdist.cjs
@@ -0,0 +1,14 @@
+/**
+ * @file
+ * @copyright 2021 AnturK https://github.com/AnturK
+ * @license MIT
+ */
+
+// Change working directory to project root
+process.chdir(__dirname);
+
+// Silently make a dist folder
+try {
+ require('fs').mkdirSync('dist');
+}
+catch (err) {}
diff --git a/tgui/packages/tgfont/package.json b/tgui/packages/tgfont/package.json
new file mode 100644
index 00000000000..bf10a5d18a5
--- /dev/null
+++ b/tgui/packages/tgfont/package.json
@@ -0,0 +1,11 @@
+{
+ "private": true,
+ "name": "tgfont",
+ "version": "1.0.0",
+ "dependencies": {
+ "fantasticon": "^1.1.1"
+ },
+ "scripts": {
+ "build": "node mkdist.cjs && fantasticon --config config.cjs"
+ }
+}
diff --git a/tgui/packages/tgui/components/Icon.js b/tgui/packages/tgui/components/Icon.js
index 34737e4d794..13efaffca79 100644
--- a/tgui/packages/tgui/components/Icon.js
+++ b/tgui/packages/tgui/components/Icon.js
@@ -28,17 +28,23 @@ export const Icon = props => {
if (typeof rotation === 'number') {
style['transform'] = `rotate(${rotation}deg)`;
}
- const faRegular = FA_OUTLINE_REGEX.test(name);
- const faName = name.replace(FA_OUTLINE_REGEX, '');
+ let iconClass = "";
+ if (name.startsWith("tg-")) {
+ // tgfont icon
+ iconClass = name;
+ } else {
+ // font awesome icon
+ const faRegular = FA_OUTLINE_REGEX.test(name);
+ const faName = name.replace(FA_OUTLINE_REGEX, '');
+ iconClass = (faRegular ? 'far ' : 'fas ') + 'fa-'+ faName + (spin ? " fa-spin" : "");
+ }
return (
diff --git a/tgui/yarn.lock b/tgui/yarn.lock
index acbd58c5c0c..33e134d3d82 100644
--- a/tgui/yarn.lock
+++ b/tgui/yarn.lock
@@ -2117,7 +2117,7 @@ __metadata:
languageName: node
linkType: hard
-"ansi-regex@npm:^2.0.0":
+"ansi-regex@npm:^2.0.0, ansi-regex@npm:^2.1.1":
version: 2.1.1
resolution: "ansi-regex@npm:2.1.1"
checksum: 93a53c923fd433f67cd3d5647dffa6790f37bbfb924cf73ad23e28a8e414bde142d1da260d9a2be52ac4aa382063196880b1d40cf8b547642c746ed538ebf6c4
@@ -2193,7 +2193,7 @@ __metadata:
languageName: node
linkType: hard
-"argparse@npm:^1.0.7":
+"argparse@npm:^1.0.6, argparse@npm:^1.0.7":
version: 1.0.10
resolution: "argparse@npm:1.0.10"
dependencies:
@@ -2533,6 +2533,15 @@ __metadata:
languageName: node
linkType: hard
+"bindings@npm:^1.5.0":
+ version: 1.5.0
+ resolution: "bindings@npm:1.5.0"
+ dependencies:
+ file-uri-to-path: 1.0.0
+ checksum: bd623dec58f126eb0c30f04a20da7080f06cdd5af26bf5a91615e70055fbba66c4cec5c88b156e8181c1d822f2392034a40a9121ef3ebc25638dc2163332b12d
+ languageName: node
+ linkType: hard
+
"brace-expansion@npm:^1.1.7":
version: 1.1.11
resolution: "brace-expansion@npm:1.1.11"
@@ -2608,6 +2617,15 @@ __metadata:
languageName: node
linkType: hard
+"bufferstreams@npm:^3.0.0":
+ version: 3.0.0
+ resolution: "bufferstreams@npm:3.0.0"
+ dependencies:
+ readable-stream: ^3.4.0
+ checksum: 987dabd6e7e053e905648478ee1e4ff4832a4c7e3aee136783c930caaabd4ed94b4544802a03220dd0838c061c8c1e9ddd73d5f2ee00bb18469e98d55b5ba123
+ languageName: node
+ linkType: hard
+
"cache-base@npm:^1.0.1":
version: 1.0.1
resolution: "cache-base@npm:1.0.1"
@@ -2642,6 +2660,16 @@ __metadata:
languageName: node
linkType: hard
+"camel-case@npm:^4.1.2":
+ version: 4.1.2
+ resolution: "camel-case@npm:4.1.2"
+ dependencies:
+ pascal-case: ^3.1.2
+ tslib: ^2.0.3
+ checksum: 0b8dcfb424c9497e45984b88ef005c66bdf8e877e36365aedfc3cf73182684fde5a14cf2c526579c0351a5f27dc39a00f1edecc25d43606075fea948c504e37f
+ languageName: node
+ linkType: hard
+
"camelcase@npm:^5.0.0, camelcase@npm:^5.3.1":
version: 5.3.1
resolution: "camelcase@npm:5.3.1"
@@ -2663,6 +2691,17 @@ __metadata:
languageName: node
linkType: hard
+"capital-case@npm:^1.0.4":
+ version: 1.0.4
+ resolution: "capital-case@npm:1.0.4"
+ dependencies:
+ no-case: ^3.0.4
+ tslib: ^2.0.3
+ upper-case-first: ^2.0.2
+ checksum: cce3d8f8f72d04d20e03f3724294edf2e727e71300617357a071cde16972b8f8170d485babf9453928a8fbd145df656d2e0256d6d475859356c78c3849fa12ac
+ languageName: node
+ linkType: hard
+
"capture-exit@npm:^2.0.0":
version: 2.0.0
resolution: "capture-exit@npm:2.0.0"
@@ -2700,6 +2739,26 @@ __metadata:
languageName: node
linkType: hard
+"change-case@npm:^4.1.2":
+ version: 4.1.2
+ resolution: "change-case@npm:4.1.2"
+ dependencies:
+ camel-case: ^4.1.2
+ capital-case: ^1.0.4
+ constant-case: ^3.0.4
+ dot-case: ^3.0.4
+ header-case: ^2.0.4
+ no-case: ^3.0.4
+ param-case: ^3.0.4
+ pascal-case: ^3.1.2
+ path-case: ^3.0.4
+ sentence-case: ^3.0.4
+ snake-case: ^3.0.4
+ tslib: ^2.0.3
+ checksum: dfc3d5afcb442b8dfabfd2068d9e845b396f98ba72f4b2c702b8afe935e56d6a0b48281866f91fe77cf669d99bfea6176079d5d1033f6ce574c6a97a5862bcf9
+ languageName: node
+ linkType: hard
+
"char-regex@npm:^1.0.2":
version: 1.0.2
resolution: "char-regex@npm:1.0.2"
@@ -2768,6 +2827,20 @@ __metadata:
languageName: node
linkType: hard
+"cli-color@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "cli-color@npm:2.0.0"
+ dependencies:
+ ansi-regex: ^2.1.1
+ d: ^1.0.1
+ es5-ext: ^0.10.51
+ es6-iterator: ^2.0.3
+ memoizee: ^0.4.14
+ timers-ext: ^0.1.7
+ checksum: 6a8824e7f14ab1e5a1275de9b284cbb4e48bc9077742cfd3321dce37cc76bd2c0a7428d29c66098542d9c751d4b230643fca10d968db7462adac8228136508f2
+ languageName: node
+ linkType: hard
+
"cliui@npm:^6.0.0":
version: 6.0.0
resolution: "cliui@npm:6.0.0"
@@ -2869,7 +2942,7 @@ __metadata:
languageName: node
linkType: hard
-"commander@npm:^2.20.0":
+"commander@npm:^2.12.2, commander@npm:^2.20.0":
version: 2.20.3
resolution: "commander@npm:2.20.3"
checksum: b73428e97de7624323f81ba13f8ed9271de487017432d18b4da3f07cfc528ad754bbd199004bd5d14e0ccd67d1fdfe0ec8dbbd4c438b401df3c4cc387bfd1daa
@@ -2924,6 +2997,17 @@ __metadata:
languageName: node
linkType: hard
+"constant-case@npm:^3.0.4":
+ version: 3.0.4
+ resolution: "constant-case@npm:3.0.4"
+ dependencies:
+ no-case: ^3.0.4
+ tslib: ^2.0.3
+ upper-case: ^2.0.2
+ checksum: c2ca78e785a0ca46cbb4cb5ea7d64c2ff8e6184ca8a46cab39ec5bedf51a42f22d019d0aaeb00afe0e73e0d6a628d6bd9b85294856047c2fae794934888b8a10
+ languageName: node
+ linkType: hard
+
"convert-source-map@npm:^1.4.0, convert-source-map@npm:^1.6.0, convert-source-map@npm:^1.7.0":
version: 1.7.0
resolution: "convert-source-map@npm:1.7.0"
@@ -3042,6 +3126,23 @@ __metadata:
languageName: node
linkType: hard
+"cubic2quad@npm:^1.0.0":
+ version: 1.1.1
+ resolution: "cubic2quad@npm:1.1.1"
+ checksum: 00b4d3be5e876dae197152eb5c8518d2a656e841d9ffbe21eb7f778e9255577d4e77af117d1c3043c78f7f034c33aa25657985cbd7422cbca79e9079ac42ac0c
+ languageName: node
+ linkType: hard
+
+"d@npm:1, d@npm:^1.0.1":
+ version: 1.0.1
+ resolution: "d@npm:1.0.1"
+ dependencies:
+ es5-ext: ^0.10.50
+ type: ^1.0.1
+ checksum: cf9b770965fa4876f7aff46784e4f1a1ee71cc5df7e05c9c36bee52a74340b312b6f7ab224c8bfcc83f4b18c6f6a24e7b50bcd449ba4464c1df69874941324ae
+ languageName: node
+ linkType: hard
+
"dashdash@npm:^1.12.0":
version: 1.14.1
resolution: "dashdash@npm:1.14.1"
@@ -3233,6 +3334,16 @@ __metadata:
languageName: node
linkType: hard
+"dot-case@npm:^3.0.4":
+ version: 3.0.4
+ resolution: "dot-case@npm:3.0.4"
+ dependencies:
+ no-case: ^3.0.4
+ tslib: ^2.0.3
+ checksum: 2d93626464927f533eaa66ba8c9b3a2dede6a324b5020fb90c46779ed629d50542f642aaac578e035e5cb141473c5f2c50eac232a8d8bf820ab471358d7bf587
+ languageName: node
+ linkType: hard
+
"duplexer@npm:^0.1.2":
version: 0.1.2
resolution: "duplexer@npm:0.1.2"
@@ -3371,6 +3482,50 @@ __metadata:
languageName: node
linkType: hard
+"es5-ext@npm:^0.10.35, es5-ext@npm:^0.10.46, es5-ext@npm:^0.10.50, es5-ext@npm:^0.10.51, es5-ext@npm:^0.10.53, es5-ext@npm:~0.10.14, es5-ext@npm:~0.10.2, es5-ext@npm:~0.10.46":
+ version: 0.10.53
+ resolution: "es5-ext@npm:0.10.53"
+ dependencies:
+ es6-iterator: ~2.0.3
+ es6-symbol: ~3.1.3
+ next-tick: ~1.0.0
+ checksum: 99e8115c2f99674d0defc1e077bb0061cd9e1fc996e93605f83441cc5b3b200b7b3646f9cda9313aa877a05c47b4577ead99a26177136a0ca3f208f67a7b4418
+ languageName: node
+ linkType: hard
+
+"es6-iterator@npm:^2.0.3, es6-iterator@npm:~2.0.3":
+ version: 2.0.3
+ resolution: "es6-iterator@npm:2.0.3"
+ dependencies:
+ d: 1
+ es5-ext: ^0.10.35
+ es6-symbol: ^3.1.1
+ checksum: 1880ce31210da874cbb92b404c3128bdf68f616f3a902b2ca1d12f268aaedb11c5e6a2d9d364cde762de0130652a0474ba91abc09fa35f4abf6a8f22a592265e
+ languageName: node
+ linkType: hard
+
+"es6-symbol@npm:^3.1.1, es6-symbol@npm:~3.1.3":
+ version: 3.1.3
+ resolution: "es6-symbol@npm:3.1.3"
+ dependencies:
+ d: ^1.0.1
+ ext: ^1.1.2
+ checksum: 0915d72de8760b56b69ca4360276123a4f61de5a3172fe340ce9288271cf48bcebe3ee46ca8ee0f2fd73206bbbefa7c4a40a6673d278a87c97d3a155de778931
+ languageName: node
+ linkType: hard
+
+"es6-weak-map@npm:^2.0.3":
+ version: 2.0.3
+ resolution: "es6-weak-map@npm:2.0.3"
+ dependencies:
+ d: 1
+ es5-ext: ^0.10.46
+ es6-iterator: ^2.0.3
+ es6-symbol: ^3.1.1
+ checksum: 8dfd50b2919e16cf246ea9d5f9271eef466924248bc98a48a718cc149d0f67b708628c8e4bd32fa945a813c7780f94270f21ac16fff33c854a348db7e19f084d
+ languageName: node
+ linkType: hard
+
"escalade@npm:^3.1.1":
version: 3.1.1
resolution: "escalade@npm:3.1.1"
@@ -3589,6 +3744,16 @@ __metadata:
languageName: node
linkType: hard
+"event-emitter@npm:^0.3.5":
+ version: 0.3.5
+ resolution: "event-emitter@npm:0.3.5"
+ dependencies:
+ d: 1
+ es5-ext: ~0.10.14
+ checksum: 92107b89703222355070b8c49208baf9426ce015d54b646a80f6652d348ab6064c5e13f1756ae20c750d8368f4b3cde48bafc56484667ba0e12d07c50b645f21
+ languageName: node
+ linkType: hard
+
"events@npm:^3.2.0":
version: 3.2.0
resolution: "events@npm:3.2.0"
@@ -3688,6 +3853,15 @@ __metadata:
languageName: node
linkType: hard
+"ext@npm:^1.1.2":
+ version: 1.4.0
+ resolution: "ext@npm:1.4.0"
+ dependencies:
+ type: ^2.0.0
+ checksum: c94102371fecdee9f48d1acac2d0e49d49906af457c79d1d7cf1a0a14317ed3e4c99cd8a2e6f9a00e93d54306ee2872e2542edd0aa58bccc4fc72aa429ef215c
+ languageName: node
+ linkType: hard
+
"extend-shallow@npm:^2.0.1":
version: 2.0.1
resolution: "extend-shallow@npm:2.0.1"
@@ -3744,6 +3918,27 @@ __metadata:
languageName: node
linkType: hard
+"fantasticon@npm:^1.1.1":
+ version: 1.1.1
+ resolution: "fantasticon@npm:1.1.1"
+ dependencies:
+ change-case: ^4.1.2
+ cli-color: ^2.0.0
+ commander: ^7.0.0
+ glob: ^7.1.6
+ handlebars: ^4.7.6
+ slugify: ^1.4.6
+ svg2ttf: ^5.0.0
+ svgicons2svgfont: ^9.1.1
+ ttf2eot: ^2.0.0
+ ttf2woff: ^2.0.2
+ ttf2woff2: ^4.0.1
+ bin:
+ fantasticon: bin/fantasticon
+ checksum: c554ebaf79b85c3debfde3e5e6c5e2a49f99839b81b0b38f2a2b93dd62d41829d6b89fad6b3551ce9ec17a3f38f2cc27fba8c6860b493413dd07a38a889e1dda
+ languageName: node
+ linkType: hard
+
"fast-deep-equal@npm:^3.1.1":
version: 3.1.3
resolution: "fast-deep-equal@npm:3.1.3"
@@ -3825,6 +4020,13 @@ __metadata:
languageName: node
linkType: hard
+"file-uri-to-path@npm:1.0.0":
+ version: 1.0.0
+ resolution: "file-uri-to-path@npm:1.0.0"
+ checksum: 5ddb9682f04f6f87b7765b93306206db2f96bc86162487e27639c55fe3ffeed12c30906ef1dedaa5307d7cabbbbdcbfa299b79aaec435de0f17e17ab31bd20b3
+ languageName: node
+ linkType: hard
+
"fill-range@npm:^4.0.0":
version: 4.0.0
resolution: "fill-range@npm:4.0.0"
@@ -3999,6 +4201,13 @@ __metadata:
languageName: node
linkType: hard
+"geometry-interfaces@npm:^1.1.4":
+ version: 1.1.4
+ resolution: "geometry-interfaces@npm:1.1.4"
+ checksum: e4384ca4f5b9906915486240213c06c7725cd0f4dc31a1427872b84bb977a78f5e4d1fc09c36f50f045ee1d175ab10d73920a71a8837585536ed8bdaf7572554
+ languageName: node
+ linkType: hard
+
"get-caller-file@npm:^2.0.1":
version: 2.0.5
resolution: "get-caller-file@npm:2.0.5"
@@ -4148,6 +4357,24 @@ __metadata:
languageName: node
linkType: hard
+"handlebars@npm:^4.7.6":
+ version: 4.7.7
+ resolution: "handlebars@npm:4.7.7"
+ dependencies:
+ minimist: ^1.2.5
+ neo-async: ^2.6.0
+ source-map: ^0.6.1
+ uglify-js: ^3.1.4
+ wordwrap: ^1.0.0
+ dependenciesMeta:
+ uglify-js:
+ optional: true
+ bin:
+ handlebars: bin/handlebars
+ checksum: 2df9a6b422e2ccc0b7ca53f7a1f9915b47d19bf3fd372824a87e2a28b7952fa2cb3348cbe33a87ef49ee04f42d10359aab44819ca8d680ee3a5b53d48bd062a1
+ languageName: node
+ linkType: hard
+
"har-schema@npm:^2.0.0":
version: 2.0.0
resolution: "har-schema@npm:2.0.0"
@@ -4241,6 +4468,16 @@ __metadata:
languageName: node
linkType: hard
+"header-case@npm:^2.0.4":
+ version: 2.0.4
+ resolution: "header-case@npm:2.0.4"
+ dependencies:
+ capital-case: ^1.0.4
+ tslib: ^2.0.3
+ checksum: 1cc640a98a59224db2b1c3ed2ecf2a9755db445b103462d4a30185e825ec6d61fbcc6b607a0d87b6f71b33a9f0080f6900420da528ced5cb661b4de75c36dd4d
+ languageName: node
+ linkType: hard
+
"hosted-git-info@npm:^2.1.4":
version: 2.8.8
resolution: "hosted-git-info@npm:2.8.8"
@@ -4392,7 +4629,7 @@ __metadata:
languageName: node
linkType: hard
-"inherits@npm:2, inherits@npm:~2.0.3":
+"inherits@npm:2, inherits@npm:^2.0.3, inherits@npm:~2.0.1, inherits@npm:~2.0.3":
version: 2.0.4
resolution: "inherits@npm:2.0.4"
checksum: 98426da247ddfc3dcd7d7daedd90c3ca32d5b08deca08949726f12d49232aef94772a07b36cf4ff833e105ae2ef931777f6de4a6dd8245a216b9299ad4a50bea
@@ -4649,6 +4886,13 @@ __metadata:
languageName: node
linkType: hard
+"is-promise@npm:^2.2.2":
+ version: 2.2.2
+ resolution: "is-promise@npm:2.2.2"
+ checksum: 6fe84293b8750d3604a909979a7517a38b1618817f1fbbfdaf4d6138642117c85fbee12927b4d51349a5bcd9bdf8d1bf181f09145ede2d7eb41f4b394ab2ce7d
+ languageName: node
+ linkType: hard
+
"is-regex@npm:^1.1.1":
version: 1.1.2
resolution: "is-regex@npm:1.1.2"
@@ -4712,6 +4956,13 @@ __metadata:
languageName: node
linkType: hard
+"isarray@npm:0.0.1":
+ version: 0.0.1
+ resolution: "isarray@npm:0.0.1"
+ checksum: daeda3c23646200b0b464b7a9030d10008d7701fc6b7a1b45cafe42b4f4d2dde20835b56f19a49e04bb218245b7f7a2bcc6d0f696cff3711e4eddaa2031c611f
+ languageName: node
+ linkType: hard
+
"isarray@npm:1.0.0, isarray@npm:~1.0.0":
version: 1.0.0
resolution: "isarray@npm:1.0.0"
@@ -5584,7 +5835,7 @@ __metadata:
languageName: node
linkType: hard
-"lodash@npm:^4.17.19, lodash@npm:^4.17.20":
+"lodash@npm:^4.17.10, lodash@npm:^4.17.19, lodash@npm:^4.17.20":
version: 4.17.21
resolution: "lodash@npm:4.17.21"
checksum: 4983720b9abca930a4a46f18db163d7dad8dd00dbed6db0cc7b499b33b717cce69f80928b27bbb1ff2cbd3b19d251ee90669a8b5ea466072ca81c2ebe91e7468
@@ -5602,6 +5853,15 @@ __metadata:
languageName: node
linkType: hard
+"lower-case@npm:^2.0.2":
+ version: 2.0.2
+ resolution: "lower-case@npm:2.0.2"
+ dependencies:
+ tslib: ^2.0.3
+ checksum: aabaca9cef65f7564a1005b625664527e4d169e363101e65773f8f6ff2fdcf09884a3bc02990cd7a62cf05f3538114af25ee7bef553f1ca3208c8a77ac75cbfa
+ languageName: node
+ linkType: hard
+
"lru-cache@npm:^6.0.0":
version: 6.0.0
resolution: "lru-cache@npm:6.0.0"
@@ -5611,6 +5871,15 @@ __metadata:
languageName: node
linkType: hard
+"lru-queue@npm:^0.1.0":
+ version: 0.1.0
+ resolution: "lru-queue@npm:0.1.0"
+ dependencies:
+ es5-ext: ~0.10.2
+ checksum: 2eab98cdfb3101dab91ef6b8b50fce616440fa29d27ef1a1b99aa6be13422d03d6ebee15c1eb4873971c34baee27d64376aebc64560aecb37a328c82e3f40169
+ languageName: node
+ linkType: hard
+
"make-dir@npm:^3.0.0, make-dir@npm:^3.0.2, make-dir@npm:^3.1.0":
version: 3.1.0
resolution: "make-dir@npm:3.1.0"
@@ -5654,6 +5923,22 @@ __metadata:
languageName: node
linkType: hard
+"memoizee@npm:^0.4.14":
+ version: 0.4.15
+ resolution: "memoizee@npm:0.4.15"
+ dependencies:
+ d: ^1.0.1
+ es5-ext: ^0.10.53
+ es6-weak-map: ^2.0.3
+ event-emitter: ^0.3.5
+ is-promise: ^2.2.2
+ lru-queue: ^0.1.0
+ next-tick: ^1.1.0
+ timers-ext: ^0.1.7
+ checksum: 2ec67072cbd49c2611e7fd7317cf2074c8982a3bfdb06a8a24b52fbb72fad6254a119a7ef66dc04ebdb45c220622fcbdd907fcf48c5cdb5019860d7d5487eb87
+ languageName: node
+ linkType: hard
+
"merge-stream@npm:^2.0.0":
version: 2.0.0
resolution: "merge-stream@npm:2.0.0"
@@ -5668,6 +5953,13 @@ __metadata:
languageName: node
linkType: hard
+"microbuffer@npm:^1.0.0":
+ version: 1.0.0
+ resolution: "microbuffer@npm:1.0.0"
+ checksum: 2353fc6cd746b2bfc5168bdc50cfdb04754c63bc29a4e688d49dfe4a551d0302dcd95092811fef87eabdd97a831385fe2cd967c0c9460a2ccff1a6c14afd4211
+ languageName: node
+ linkType: hard
+
"micromatch@npm:^3.1.4":
version: 3.1.10
resolution: "micromatch@npm:3.1.10"
@@ -5812,6 +6104,15 @@ __metadata:
languageName: node
linkType: hard
+"nan@npm:^2.14.2":
+ version: 2.14.2
+ resolution: "nan@npm:2.14.2"
+ dependencies:
+ node-gyp: latest
+ checksum: 36349b2e5df4182aa0d0cc43fcd6cc782ca560a83c2764743d80c14ba5028d0c54041a2f464b8d4cb18a884e04415034a0a764c745e1d5502ea34a5cb6470a39
+ languageName: node
+ linkType: hard
+
"nanoid@npm:^3.1.20":
version: 3.1.20
resolution: "nanoid@npm:3.1.20"
@@ -5847,13 +6148,36 @@ __metadata:
languageName: node
linkType: hard
-"neo-async@npm:^2.6.2":
+"neatequal@npm:^1.0.0":
+ version: 1.0.0
+ resolution: "neatequal@npm:1.0.0"
+ dependencies:
+ varstream: ^0.3.2
+ checksum: abc0d1fb519eb4f1dc646d5803e1b640ae396f8e6d4c5247f7f77d4c5d5dce7788b04458c1e03faa46856dc3b816040b836286217f8ec12eebd79c68a21fe542
+ languageName: node
+ linkType: hard
+
+"neo-async@npm:^2.6.0, neo-async@npm:^2.6.2":
version: 2.6.2
resolution: "neo-async@npm:2.6.2"
checksum: 34a8f5309135be258a97082af810ea43700a3e0121e7b1ea31b3e22e2663d7c0d502cd949abb6d1ab8c11abfd04500ee61721ec5408b2d4bef8105241fd8a4c2
languageName: node
linkType: hard
+"next-tick@npm:1, next-tick@npm:^1.1.0":
+ version: 1.1.0
+ resolution: "next-tick@npm:1.1.0"
+ checksum: 586cc85dcd8ec759b03269b39c8e3d899a27dbe49c472e7fb2b6a98b14a5b46d8c3b1b9a5fae29eb22881d9efa6d882d44617c51268b49d92e98ba8f20d42000
+ languageName: node
+ linkType: hard
+
+"next-tick@npm:~1.0.0":
+ version: 1.0.0
+ resolution: "next-tick@npm:1.0.0"
+ checksum: 18db63c447c6e65a23235b91da9ccdae53f74f9194cfbc71a1fd3170cdf81bd157d9676e47c2ea4ea5bd20e09fb019917b0a45d8e1a63e377175fc083f285234
+ languageName: node
+ linkType: hard
+
"nice-try@npm:^1.0.4":
version: 1.0.5
resolution: "nice-try@npm:1.0.5"
@@ -5861,7 +6185,17 @@ __metadata:
languageName: node
linkType: hard
-"node-gyp@npm:latest":
+"no-case@npm:^3.0.4":
+ version: 3.0.4
+ resolution: "no-case@npm:3.0.4"
+ dependencies:
+ lower-case: ^2.0.2
+ tslib: ^2.0.3
+ checksum: 84db4909caec37504c6655f995a004067f8733be8cd8d849f1578661b60a1685e086325fa4e1a5e8ce94e7416c1d0f037e2a00f635a14457183de80ab4fc7612
+ languageName: node
+ linkType: hard
+
+"node-gyp@npm:^7.1.2, node-gyp@npm:latest":
version: 7.1.2
resolution: "node-gyp@npm:7.1.2"
dependencies:
@@ -6216,6 +6550,23 @@ __metadata:
languageName: node
linkType: hard
+"pako@npm:^1.0.0":
+ version: 1.0.11
+ resolution: "pako@npm:1.0.11"
+ checksum: 71c60150b68220ec52a404f3c39a4ed38f750e42452b88fe0eb2e6b5c98e91f73f706444359b097aca1e6db83ef8fef50b5a9ec100e30a606cda6da8d45e5439
+ languageName: node
+ linkType: hard
+
+"param-case@npm:^3.0.4":
+ version: 3.0.4
+ resolution: "param-case@npm:3.0.4"
+ dependencies:
+ dot-case: ^3.0.4
+ tslib: ^2.0.3
+ checksum: 879358f67167dfe48f4cd5b3c888456b8d7d30daf8bff1e354eece6e8bedb9fb27250bc34fd32390cb9d890677b9b907dcf89808ee3ebcd947d4c1db9f650127
+ languageName: node
+ linkType: hard
+
"parent-module@npm:^1.0.0":
version: 1.0.1
resolution: "parent-module@npm:1.0.1"
@@ -6244,6 +6595,16 @@ __metadata:
languageName: node
linkType: hard
+"pascal-case@npm:^3.1.2":
+ version: 3.1.2
+ resolution: "pascal-case@npm:3.1.2"
+ dependencies:
+ no-case: ^3.0.4
+ tslib: ^2.0.3
+ checksum: 31708cecab221482edc81e2bd9b9d8282d72d4f1443b31f39725aa23768c5e42d93c4c014f1bc90f7f074e2a70d5091e4892ea370e550affc9ccf1d33c900bcd
+ languageName: node
+ linkType: hard
+
"pascalcase@npm:^0.1.1":
version: 0.1.1
resolution: "pascalcase@npm:0.1.1"
@@ -6251,6 +6612,16 @@ __metadata:
languageName: node
linkType: hard
+"path-case@npm:^3.0.4":
+ version: 3.0.4
+ resolution: "path-case@npm:3.0.4"
+ dependencies:
+ dot-case: ^3.0.4
+ tslib: ^2.0.3
+ checksum: 4f4a2ac7f621e70a531c7ece246a410ce000f0cd279086f3cbaa9d28fb912f36fb4b4e9f524a535bf1975b6a404a35851c7b463d0453de4b5e0ecf69d4b8aed3
+ languageName: node
+ linkType: hard
+
"path-exists@npm:^4.0.0":
version: 4.0.0
resolution: "path-exists@npm:4.0.0"
@@ -6551,7 +6922,19 @@ __metadata:
languageName: node
linkType: hard
-"readable-stream@npm:^2.0.6":
+"readable-stream@npm:^1.0.33":
+ version: 1.1.14
+ resolution: "readable-stream@npm:1.1.14"
+ dependencies:
+ core-util-is: ~1.0.0
+ inherits: ~2.0.1
+ isarray: 0.0.1
+ string_decoder: ~0.10.x
+ checksum: e4c30b6b8495c11fc83e1b5fcb03b378127d93c953413973a25500991d0bf2b2e158e329d0f56d294e24a61c7751b874570158f24f97ebacb8a5f2fdcc05a0ec
+ languageName: node
+ linkType: hard
+
+"readable-stream@npm:^2.0.6, readable-stream@npm:^2.3.3":
version: 2.3.7
resolution: "readable-stream@npm:2.3.7"
dependencies:
@@ -6566,6 +6949,17 @@ __metadata:
languageName: node
linkType: hard
+"readable-stream@npm:^3.4.0":
+ version: 3.6.0
+ resolution: "readable-stream@npm:3.6.0"
+ dependencies:
+ inherits: ^2.0.3
+ string_decoder: ^1.1.1
+ util-deprecate: ^1.0.1
+ checksum: f178b1daa80d9e58ebba71dbb08486430aa6f0dea3a22a1b7401f3f6983077d0bc0edea43099db06b8d006c9ad48d6383e8fb72c05d5b187670aeaf1b9b44f00
+ languageName: node
+ linkType: hard
+
"readdirp@npm:~3.5.0":
version: 3.5.0
resolution: "readdirp@npm:3.5.0"
@@ -6860,7 +7254,7 @@ __metadata:
languageName: node
linkType: hard
-"safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.0, safe-buffer@npm:^5.1.2":
+"safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.0, safe-buffer@npm:^5.1.2, safe-buffer@npm:~5.2.0":
version: 5.2.1
resolution: "safe-buffer@npm:5.2.1"
checksum: 0bb57f0d8f9d1fa4fe35ad8a2db1f83a027d48f2822d59ede88fd5cd4ddad83c0b497213feb7a70fbf90597a70c5217f735b0eb1850df40ce9b4ae81dd22b3f9
@@ -6942,6 +7336,13 @@ __metadata:
languageName: node
linkType: hard
+"sax@npm:^1.2.4":
+ version: 1.2.4
+ resolution: "sax@npm:1.2.4"
+ checksum: 9d7668d69105e89e2c1a4b2fdc12c72e1a2f78b825f7b4a8a2ea5cdfebf70920bd17715bed55264c3b3959616a0695f8ad2d098bf6944fbd0953ee9c695dceef
+ languageName: node
+ linkType: hard
+
"saxes@npm:^5.0.0":
version: 5.0.1
resolution: "saxes@npm:5.0.1"
@@ -7011,6 +7412,17 @@ __metadata:
languageName: node
linkType: hard
+"sentence-case@npm:^3.0.4":
+ version: 3.0.4
+ resolution: "sentence-case@npm:3.0.4"
+ dependencies:
+ no-case: ^3.0.4
+ tslib: ^2.0.3
+ upper-case-first: ^2.0.2
+ checksum: 39bf70b87190064fdccd357ebd78ea9196a260ee6b87893b5099aa54af92f5a49676fa9f94c7ccf501a3fa0d72e3438237c110022b6cec760d6dd921b1bf16f7
+ languageName: node
+ linkType: hard
+
"serialize-javascript@npm:^5.0.1":
version: 5.0.1
resolution: "serialize-javascript@npm:5.0.1"
@@ -7141,6 +7553,23 @@ __metadata:
languageName: node
linkType: hard
+"slugify@npm:^1.4.6":
+ version: 1.4.7
+ resolution: "slugify@npm:1.4.7"
+ checksum: df4963d10c69d8f5331a9c741a6d123e519010ef7b41d00a5c14f476c39c7e9be993889f4dd762ea4f8fb99c21fcf8ce13e73ec7e2fe1e9ca4322e65e6cae548
+ languageName: node
+ linkType: hard
+
+"snake-case@npm:^3.0.4":
+ version: 3.0.4
+ resolution: "snake-case@npm:3.0.4"
+ dependencies:
+ dot-case: ^3.0.4
+ tslib: ^2.0.3
+ checksum: f087328861d81e6476996b837b91f9daaa063fd03cb2f0cd35276c5aaa03e7ac7acfd94721028ae5119193a6fc0a9c91123ea7a43e59650f076dac06428c8bf2
+ languageName: node
+ linkType: hard
+
"snapdragon-node@npm:^2.0.1":
version: 2.1.1
resolution: "snapdragon-node@npm:2.1.1"
@@ -7383,6 +7812,20 @@ __metadata:
languageName: node
linkType: hard
+"string.fromcodepoint@npm:^0.2.1":
+ version: 0.2.1
+ resolution: "string.fromcodepoint@npm:0.2.1"
+ checksum: 715fe85fef97bc4e3d1830625457e063709a989f9e18892d79714e9a10a8b2e289fa3580712528ec6cbad9bf83f4059121998f27793e3aac3bba0ae7211d3fb9
+ languageName: node
+ linkType: hard
+
+"string.prototype.codepointat@npm:^0.2.0":
+ version: 0.2.1
+ resolution: "string.prototype.codepointat@npm:0.2.1"
+ checksum: 2621f45bdb78d969fd5754bac5aa0686776e894556cba734e11ca6b032869e39b0762a284fca5cdf04ef3d6cca9cb0fb0676fed09dba8518569aae5a353df66e
+ languageName: node
+ linkType: hard
+
"string.prototype.matchall@npm:^4.0.2":
version: 4.0.4
resolution: "string.prototype.matchall@npm:4.0.4"
@@ -7418,6 +7861,22 @@ __metadata:
languageName: node
linkType: hard
+"string_decoder@npm:^1.1.1":
+ version: 1.3.0
+ resolution: "string_decoder@npm:1.3.0"
+ dependencies:
+ safe-buffer: ~5.2.0
+ checksum: 0a09afb610cb538707fcf0a50a080f159040529eabdba82f23b04f1d1f90adf9ba18cc3800231c6ab2ee55dece047f4bed87c56da52b2afd85c3c7fb73eb7e48
+ languageName: node
+ linkType: hard
+
+"string_decoder@npm:~0.10.x":
+ version: 0.10.31
+ resolution: "string_decoder@npm:0.10.31"
+ checksum: ae53bca3796913fe686c6b519299a3631d04f0d388f35e7412914e3d351024f711d783d0415babfec276f5f533e84fae687e77220829d872fadb5bb9f7190890
+ languageName: node
+ linkType: hard
+
"string_decoder@npm:~1.1.1":
version: 1.1.1
resolution: "string_decoder@npm:1.1.1"
@@ -7522,6 +7981,56 @@ __metadata:
languageName: node
linkType: hard
+"svg-pathdata@npm:^5.0.0":
+ version: 5.0.5
+ resolution: "svg-pathdata@npm:5.0.5"
+ checksum: df6647eece946f91b829b05656359a063c211b12f7105635cbca40fc2059591c06c36c609c2f32d6590925b3c9a81bd88ddf3673c2c4483f6acb68a163064e60
+ languageName: node
+ linkType: hard
+
+"svg2ttf@npm:^5.0.0":
+ version: 5.1.0
+ resolution: "svg2ttf@npm:5.1.0"
+ dependencies:
+ argparse: ^1.0.6
+ cubic2quad: ^1.0.0
+ lodash: ^4.17.10
+ microbuffer: ^1.0.0
+ svgpath: ^2.1.5
+ xmldom: ~0.1.22
+ bin:
+ svg2ttf: svg2ttf.js
+ checksum: d60c33d41689a88de8966cd0a4e4d10c1bfde9130fffd9f5c504b8f5dcda0b66df4fb501923bf71cb8487d098e58a6e26e81d322fa5d5d82a6dc2a9d56cd990c
+ languageName: node
+ linkType: hard
+
+"svgicons2svgfont@npm:^9.1.1":
+ version: 9.1.1
+ resolution: "svgicons2svgfont@npm:9.1.1"
+ dependencies:
+ commander: ^2.12.2
+ geometry-interfaces: ^1.1.4
+ glob: ^7.1.2
+ neatequal: ^1.0.0
+ readable-stream: ^2.3.3
+ sax: ^1.2.4
+ string.fromcodepoint: ^0.2.1
+ string.prototype.codepointat: ^0.2.0
+ svg-pathdata: ^5.0.0
+ transformation-matrix-js: ^2.7.1
+ bin:
+ svgicons2svgfont: bin/svgicons2svgfont.js
+ checksum: 0bfd901e7f0bfc71c9d497ce72e0a51f5ce22b38174a5c005efdfe05487f592793be96dd68bcae9ec96656e59d45755b18eeb990bf506a4adc06695d8e3995f7
+ languageName: node
+ linkType: hard
+
+"svgpath@npm:^2.1.5":
+ version: 2.3.1
+ resolution: "svgpath@npm:2.3.1"
+ checksum: 6eba36ce937db0a0853d856786586411f9f3538e73be23828a65b7271f6b2daec0cecea2de14e7edf52748b49685fbe3cb2161e96311d8a2facfd8caed2f8f2c
+ languageName: node
+ linkType: hard
+
"symbol-tree@npm:^3.2.4":
version: 3.2.4
resolution: "symbol-tree@npm:3.2.4"
@@ -7619,6 +8128,14 @@ __metadata:
languageName: node
linkType: hard
+"tgfont@workspace:packages/tgfont":
+ version: 0.0.0-use.local
+ resolution: "tgfont@workspace:packages/tgfont"
+ dependencies:
+ fantasticon: ^1.1.1
+ languageName: unknown
+ linkType: soft
+
"tgui-dev-server@workspace:*, tgui-dev-server@workspace:packages/tgui-dev-server":
version: 0.0.0-use.local
resolution: "tgui-dev-server@workspace:packages/tgui-dev-server"
@@ -7717,6 +8234,16 @@ __metadata:
languageName: node
linkType: hard
+"timers-ext@npm:^0.1.7":
+ version: 0.1.7
+ resolution: "timers-ext@npm:0.1.7"
+ dependencies:
+ es5-ext: ~0.10.46
+ next-tick: 1
+ checksum: 4593b57c397934fc7ddf7b240a8ff8468cdd7006407a442ec48c291bd85dcb7268858b72d1132bc55309e29d8eeae796f9edf378b0b45feff56b51f350e723b6
+ languageName: node
+ linkType: hard
+
"tmpl@npm:1.0.x":
version: 1.0.4
resolution: "tmpl@npm:1.0.4"
@@ -7808,6 +8335,13 @@ __metadata:
languageName: node
linkType: hard
+"transformation-matrix-js@npm:^2.7.1":
+ version: 2.7.6
+ resolution: "transformation-matrix-js@npm:2.7.6"
+ checksum: df1e0781cce721187c882d09917d4c055cc91f036b81d4ea90f8e3ed769011b403582c1ba2031bff8e2dd9b4fbccaabd72496e6426746ba7f4e6dd68e0ce54ab
+ languageName: node
+ linkType: hard
+
"tslib@npm:^1.8.1, tslib@npm:^1.9.0":
version: 1.14.1
resolution: "tslib@npm:1.14.1"
@@ -7815,6 +8349,13 @@ __metadata:
languageName: node
linkType: hard
+"tslib@npm:^2.0.3":
+ version: 2.1.0
+ resolution: "tslib@npm:2.1.0"
+ checksum: d8f5bdd067611651c6b846c2388f4dc8ba1f5af124e66105f5263d1ad56da17f4b8c6566887ca2f205c5a9758451871ceca87d5d06087af2dca1699c5e33db69
+ languageName: node
+ linkType: hard
+
"tsutils@npm:^3.17.1":
version: 3.20.0
resolution: "tsutils@npm:3.20.0"
@@ -7826,6 +8367,45 @@ __metadata:
languageName: node
linkType: hard
+"ttf2eot@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "ttf2eot@npm:2.0.0"
+ dependencies:
+ argparse: ^1.0.6
+ microbuffer: ^1.0.0
+ bin:
+ ttf2eot: ./ttf2eot.js
+ checksum: 635e8687e5de0afb2af2666a97f9ad8b2c9fa4e97f427b905746c7387365e2c1bb617c4227dda5ce0efd175c093c710ddc6494be4d2a9f18b3ec256556b372d5
+ languageName: node
+ linkType: hard
+
+"ttf2woff2@npm:^4.0.1":
+ version: 4.0.1
+ resolution: "ttf2woff2@npm:4.0.1"
+ dependencies:
+ bindings: ^1.5.0
+ bufferstreams: ^3.0.0
+ nan: ^2.14.2
+ node-gyp: ^7.1.2
+ bin:
+ ttf2woff2: bin/ttf2woff2.js
+ checksum: c9bcba9249fe6e82203ef8b38400da3a6f69f1fcb5855b2b6aa8e7747d84a9cdd91089b0cb4fb3eb68d0731a98e177ef29f23182c54cab22d7b6d3d810d7d5f4
+ languageName: node
+ linkType: hard
+
+"ttf2woff@npm:^2.0.2":
+ version: 2.0.2
+ resolution: "ttf2woff@npm:2.0.2"
+ dependencies:
+ argparse: ^1.0.6
+ microbuffer: ^1.0.0
+ pako: ^1.0.0
+ bin:
+ ttf2woff: ttf2woff.js
+ checksum: f60c11feada699bac0e4d8e58148ebcc6c92449c624247f98a60cbacbba656faeac197f3c8534a4f24618575e877c66a620311e09286ca436f8172cfbe8a7538
+ languageName: node
+ linkType: hard
+
"tunnel-agent@npm:^0.6.0":
version: 0.6.0
resolution: "tunnel-agent@npm:0.6.0"
@@ -7895,6 +8475,20 @@ __metadata:
languageName: node
linkType: hard
+"type@npm:^1.0.1":
+ version: 1.2.0
+ resolution: "type@npm:1.2.0"
+ checksum: 1589416fd9d0a0a1bf18c62dbc7452b0f22017efd5bfc2912050bb57421b084801563ff13b3e3efd60df45590f23e1f3d27d892aeeec9b3ed142c917a4858812
+ languageName: node
+ linkType: hard
+
+"type@npm:^2.0.0":
+ version: 2.5.0
+ resolution: "type@npm:2.5.0"
+ checksum: 56dd61c60ed02dc75bae7029f95d1e457a9b174f60a75025ce9dc911a01e3918df29a9a29f0bc58d88a2baf18fa399f3898f2fa26d512d61cf9726c2c69920a0
+ languageName: node
+ linkType: hard
+
"typedarray-to-buffer@npm:^3.1.5":
version: 3.1.5
resolution: "typedarray-to-buffer@npm:3.1.5"
@@ -7924,6 +8518,15 @@ typescript@^4.2.3:
languageName: node
linkType: hard
+"uglify-js@npm:^3.1.4":
+ version: 3.13.1
+ resolution: "uglify-js@npm:3.13.1"
+ bin:
+ uglifyjs: bin/uglifyjs
+ checksum: 32dd0bf3dd767b66ba8b20d3c757b98ab5253fde3dd6d52e41c0d669ec528b444a09cfca704cba9a7498a2d6de8755f89113c9737763dfa0833ef05c2aa43bcc
+ languageName: node
+ linkType: hard
+
"unicode-canonical-property-names-ecmascript@npm:^1.0.4":
version: 1.0.4
resolution: "unicode-canonical-property-names-ecmascript@npm:1.0.4"
@@ -7984,6 +8587,24 @@ typescript@^4.2.3:
languageName: node
linkType: hard
+"upper-case-first@npm:^2.0.2":
+ version: 2.0.2
+ resolution: "upper-case-first@npm:2.0.2"
+ dependencies:
+ tslib: ^2.0.3
+ checksum: b485994181366f0aced25ed7e3344ae3bfc06ce5430b4a8ec89a552bf57206a9471705561fa37075ee8a1058b5ebc91570746bf6f74f351aa1ab6156dfad5618
+ languageName: node
+ linkType: hard
+
+"upper-case@npm:^2.0.2":
+ version: 2.0.2
+ resolution: "upper-case@npm:2.0.2"
+ dependencies:
+ tslib: ^2.0.3
+ checksum: db9adfeca3ba0ca98f197d8cbf5b97f424c30ac2bb5e672e68033cf2ea747e66d1e2ebc3921e947dad672869c65c6cb5257fe703142bca9c3aeefe802a0bc2e8
+ languageName: node
+ linkType: hard
+
"uri-js@npm:^4.2.2":
version: 4.4.1
resolution: "uri-js@npm:4.4.1"
@@ -8024,7 +8645,7 @@ typescript@^4.2.3:
languageName: node
linkType: hard
-"util-deprecate@npm:^1.0.2, util-deprecate@npm:~1.0.1":
+"util-deprecate@npm:^1.0.1, util-deprecate@npm:^1.0.2, util-deprecate@npm:~1.0.1":
version: 1.0.2
resolution: "util-deprecate@npm:1.0.2"
checksum: 73c2b1cf0210ccac300645384d8443cabbd93194117b2dc1b3bae8d8279ad39aedac857e020c4ea505e96a1045059c7359db3df6a9df0be6b8584166c9d61dc9
@@ -8077,6 +8698,18 @@ typescript@^4.2.3:
languageName: node
linkType: hard
+"varstream@npm:^0.3.2":
+ version: 0.3.2
+ resolution: "varstream@npm:0.3.2"
+ dependencies:
+ readable-stream: ^1.0.33
+ bin:
+ json2varstream: cli/json2varstream.js
+ varstream2json: cli/varstream2json.js
+ checksum: 3c94bd295e6e0932510fe977e1d70294305250ed2ac00786280fa8a2e42c5aec81ec7b6910a1ccba8f1c50f686efeb076ba09da5574d35a5971b116a4d7d84d1
+ languageName: node
+ linkType: hard
+
"verror@npm:1.10.0":
version: 1.10.0
resolution: "verror@npm:1.10.0"
@@ -8347,6 +8980,13 @@ typescript@^4.2.3:
languageName: node
linkType: hard
+"wordwrap@npm:^1.0.0":
+ version: 1.0.0
+ resolution: "wordwrap@npm:1.0.0"
+ checksum: b4f3f8104a727d1b08e77f43f3692977146f13074392747a3d9cfd631d0fc3ff1c0c034d44fcd7a22183c6505d2fc305421e3512671f8a56f903055671ace4ce
+ languageName: node
+ linkType: hard
+
"wrap-ansi@npm:^6.2.0":
version: 6.2.0
resolution: "wrap-ansi@npm:6.2.0"
@@ -8406,6 +9046,13 @@ typescript@^4.2.3:
languageName: node
linkType: hard
+"xmldom@npm:~0.1.22":
+ version: 0.1.31
+ resolution: "xmldom@npm:0.1.31"
+ checksum: 69b741952c32338c915a74d3a6edc37bade58f93ff3722704cc6a10461c62cb5d6d1bcf2e7a3db6e3ff713f15c7e43089e54dfa369d471898905c489bd8e397b
+ languageName: node
+ linkType: hard
+
"y18n@npm:^4.0.0":
version: 4.0.1
resolution: "y18n@npm:4.0.1"
diff --git a/tools/LinuxOneShot/SetupProgram/PreCompile.sh b/tools/LinuxOneShot/SetupProgram/PreCompile.sh
index 328c2a3aef7..ed2feb4f1a3 100644
--- a/tools/LinuxOneShot/SetupProgram/PreCompile.sh
+++ b/tools/LinuxOneShot/SetupProgram/PreCompile.sh
@@ -66,7 +66,7 @@ cd ..
echo "Compiling tgui..."
cd "$1"
chmod +x tools/bootstrap/node # Workaround for https://github.com/tgstation/tgstation-server/issues/1167
-env TG_BOOTSTRAP_CACHE="$original_dir" TG_BOOTSTRAP_NODE_LINUX=1 TG_BUILD_TGS_MODE=1 tools/bootstrap/node tools/build/build.js
+env TG_BOOTSTRAP_CACHE="$original_dir" TG_BOOTSTRAP_NODE_LINUX=1 CBT_BUILD_MODE="TGS" tools/bootstrap/node tools/build/build.js
cd "$original_dir"
if [ ! -d "../GameStaticFiles/config" ]; then
@@ -89,4 +89,4 @@ echo "Compiling tgui..."
cd "$1"
chmod +x tools/bootstrap/node # Workaround for https://github.com/tgstation/tgstation-server/issues/1167
chmod +x tgui/bin/tgui
-env TG_BOOTSTRAP_CACHE="$original_dir" TG_BOOTSTRAP_NODE_LINUX=1 TG_BUILD_TGS_MODE=1 tools/bootstrap/node tools/build/build.js
\ No newline at end of file
+env TG_BOOTSTRAP_CACHE="$original_dir" TG_BOOTSTRAP_NODE_LINUX=1 CBT_BUILD_MODE="TGS" tools/bootstrap/node tools/build/build.js
diff --git a/tools/build/build.js b/tools/build/build.js
index 2f7156f0636..9d26c5e4226 100755
--- a/tools/build/build.js
+++ b/tools/build/build.js
@@ -21,6 +21,32 @@ if (NODE_VERSION < NODE_VERSION_TARGET) {
process.exit(1);
}
+const STANDARD_BUILD = "Standard Build"
+const TGS_BUILD = "TGS Build"
+const ALL_MAPS_BUILD = "CI All Maps Build"
+const TEST_RUN_BUILD = "CI Integration Tests Build"
+
+let BUILD_MODE = STANDARD_BUILD;
+if (process.env.CBT_BUILD_MODE) {
+ switch (process.env.CBT_BUILD_MODE) {
+ case "ALL_MAPS":
+ BUILD_MODE = ALL_MAPS_BUILD
+ break;
+ case "TEST_RUN":
+ BUILD_MODE = TEST_RUN_BUILD
+ break;
+ case "TGS":
+ BUILD_MODE = TGS_BUILD
+ break;
+ default:
+ BUILD_MODE = process.env.CBT_BUILD_MODE
+ break;
+ }
+}
+console.log(`Starting CBT in ${BUILD_MODE} mode.`)
+
+const DME_NAME = 'tgstation'
+
// Main
// --------------------------------------------------------
@@ -28,32 +54,46 @@ const { resolveGlob, stat } = require('./cbt/fs');
const { exec } = require('./cbt/process');
const { Task, runTasks } = require('./cbt/task');
const { regQuery } = require('./cbt/winreg');
+const fs = require('fs');
-const taskTgui = new Task('tgui')
- .depends('tgui/.yarn/releases/*')
+const yarn = args => {
+ const yarnPath = resolveGlob('./tgui/.yarn/releases/yarn-*.cjs')[0]
+ .replace('/tgui/', '/');
+ return exec('node', [yarnPath, ...args], {
+ cwd: './tgui',
+ });
+};
+
+/// Installs all tgui dependencies
+const taskYarn = new Task('yarn')
+ .build(() => yarn(['install']));
+
+/// Builds svg fonts
+const taskTgfont = new Task('tgfont')
+ .depends('tgui/.yarn/install-state.gz')
+ .depends('tgui/packages/tgfont/**/*.+(js|cjs|svg)')
+ .depends('tgui/packages/tgfont/package.json')
+ .provides('tgui/packages/tgfont/dist/tgfont.css')
+ .provides('tgui/packages/tgfont/dist/tgfont.eot')
+ .provides('tgui/packages/tgfont/dist/tgfont.woff2')
+ .build(() => yarn(['workspace', 'tgfont', 'build']));
+
+/// Builds tgui
+const taskTgui = new Task('tgui')
.depends('tgui/.yarn/install-state.gz')
- .depends('tgui/yarn.lock')
.depends('tgui/webpack.config.js')
.depends('tgui/**/package.json')
- .depends('tgui/packages/**/*.+(js|jsx|ts|tsx|cjs|mjs|scss)')
+ .depends('tgui/packages/**/*.+(js|jsx|ts|tsx|cjs|scss)')
.provides('tgui/public/tgui.bundle.css')
.provides('tgui/public/tgui.bundle.js')
.provides('tgui/public/tgui-common.bundle.js')
.provides('tgui/public/tgui-panel.bundle.css')
.provides('tgui/public/tgui-panel.bundle.js')
.build(async () => {
- // Instead of calling `tgui/bin/tgui`, we reproduce the whole pipeline
- // here for maximum compilation speed.
- const yarnPath = resolveGlob('./tgui/.yarn/releases/yarn-*.cjs')[0]
- .replace('/tgui/', '/');
- const yarn = args => exec('node', [yarnPath, ...args], {
- cwd: './tgui',
- });
- await yarn(['install']);
await yarn(['run', 'webpack-cli', '--mode=production']);
});
-const taskDm = new Task('dm')
+const taskDm = (...injectedDefines) => new Task('dm')
.depends('_maps/map_files/generic/**')
.depends('code/**')
.depends('goon/**')
@@ -62,9 +102,9 @@ const taskDm = new Task('dm')
.depends('interface/**')
.depends('tgui/public/tgui.html')
.depends('tgui/public/*.bundle.*')
- .depends('tgstation.dme')
- .provides('tgstation.dmb')
- .provides('tgstation.rsc')
+ .depends(`${DME_NAME}.dme`)
+ .provides(`${DME_NAME}.dmb`)
+ .provides(`${DME_NAME}.rsc`)
.build(async () => {
const dmPath = await (async () => {
// Search in array of paths
@@ -109,17 +149,66 @@ const taskDm = new Task('dm')
|| 'DreamMaker'
);
})();
- await exec(dmPath, ['tgstation.dme']);
+ if (injectedDefines.length) {
+ const injectedContent = injectedDefines
+ .map(x => `#define ${x}\n`)
+ .join('')
+ // Create mdme file
+ fs.writeFileSync(`${DME_NAME}.mdme`, injectedContent)
+ // Add the actual dme content
+ const dme_content = fs.readFileSync(`${DME_NAME}.dme`)
+ fs.appendFileSync(`${DME_NAME}.mdme`, dme_content)
+
+ await exec(dmPath, [`${DME_NAME}.mdme`]);
+ // Rename dmb
+ fs.renameSync(`${DME_NAME}.mdme.dmb`, `${DME_NAME}.dmb`)
+ // Rename rsc
+ fs.renameSync(`${DME_NAME}.mdme.rsc`, `${DME_NAME}.rsc`)
+ // Remove mdme
+ fs.rmSync(`${DME_NAME}.mdme`)
+ }
+ else {
+ await exec(dmPath, [`${DME_NAME}.dme`]);
+ }
});
// Frontend
-const tasksToRun = [
- taskTgui,
- taskDm,
-];
-
-if (process.env.TG_BUILD_TGS_MODE) {
- tasksToRun.pop();
+let tasksToRun = [];
+switch (BUILD_MODE) {
+ case STANDARD_BUILD:
+ tasksToRun = [
+ taskYarn,
+ taskTgfont,
+ taskTgui,
+ taskDm(),
+ ]
+ break;
+ case TGS_BUILD:
+ tasksToRun = [
+ taskYarn,
+ taskTgfont,
+ taskTgui
+ ]
+ break;
+ case ALL_MAPS_BUILD:
+ tasksToRun = [
+ taskYarn,
+ taskTgfont,
+ taskTgui,
+ taskDm('CIBUILDING','CITESTING','ALL_MAPS')
+ ];
+ break;
+ case TEST_RUN_BUILD:
+ tasksToRun = [
+ taskYarn,
+ taskTgfont,
+ taskTgui,
+ taskDm('CIBUILDING')
+ ];
+ break;
+ default:
+ console.error(`Unknown build mode : ${BUILD_MODE}`)
+ break;
}
runTasks(tasksToRun);
diff --git a/tools/ci/build.ps1 b/tools/ci/build.ps1
index 737b90a9f32..af44ef7d46f 100644
--- a/tools/ci/build.ps1
+++ b/tools/ci/build.ps1
@@ -5,7 +5,6 @@ if(!(Test-Path -Path "C:/byond")){
}
bash tools/ci/install_node.sh
-bash tgui/bin/tgui --build
+bash tools/build/build
-&"C:/byond/bin/dm.exe" -max_errors 0 tgstation.dme
exit $LASTEXITCODE
diff --git a/tools/ci/dm.sh b/tools/ci/dm.sh
deleted file mode 100755
index ea432fa5acb..00000000000
--- a/tools/ci/dm.sh
+++ /dev/null
@@ -1,91 +0,0 @@
-#!/bin/bash
-
-dmepath=""
-retval=1
-
-for var
-do
- if [[ $var != -* && $var == *.dme ]]
- then
- dmepath=`echo $var | sed -r 's/.{4}$//'`
- break
- fi
-done
-
-if [[ $dmepath == "" ]]
-then
- echo "No .dme file specified, aborting."
- exit 1
-fi
-
-if [[ -a $dmepath.mdme ]]
-then
- rm $dmepath.mdme
-fi
-
-cp $dmepath.dme $dmepath.mdme
-if [[ $? != 0 ]]
-then
- echo "Failed to make modified dme, aborting."
- exit 2
-fi
-
-for var
-do
- arg=`echo $var | sed -r 's/^.{2}//'`
- if [[ $var == -D* ]]
- then
- sed -i '1s/^/#define '$arg'\n/' $dmepath.mdme
- continue
- fi
-done
-
-#windows
-if [[ `uname` == MINGW* ]]
-then
- dm=""
-
- if hash dm.exe 2>/dev/null
- then
- dm='dm.exe'
- elif [[ -a '/c/Program Files (x86)/BYOND/bin/dm.exe' ]]
- then
- dm='/c/Program Files (x86)/BYOND/bin/dm.exe'
- elif [[ -a '/c/Program Files/BYOND/bin/dm.exe' ]]
- then
- dm='/c/Program Files/BYOND/bin/dm.exe'
- fi
-
- if [[ $dm == "" ]]
- then
- echo "Couldn't find the DreamMaker executable, aborting."
- exit 3
- fi
-
- "$dm" $dmepath.mdme 2>&1 | tee result.log
- retval=$?
- if ! grep '\- 0 errors, 0 warnings' result.log
- then
- retval=1 #hard fail, due to warnings or errors
- fi
-else
- if hash DreamMaker 2>/dev/null
- then
- DreamMaker -max_errors 0 $dmepath.mdme 2>&1 | tee result.log
- retval=$?
- if ! grep '\- 0 errors, 0 warnings' result.log
- then
- retval=1 #hard fail, due to warnings or errors
- fi
- else
- echo "Couldn't find the DreamMaker executable, aborting."
- exit 3
- fi
-fi
-
-mv $dmepath.mdme.dmb $dmepath.dmb
-mv $dmepath.mdme.rsc $dmepath.rsc
-
-rm $dmepath.mdme
-
-exit $retval
diff --git a/tools/linux_build.py b/tools/linux_build.py
deleted file mode 100755
index 99fb652b940..00000000000
--- a/tools/linux_build.py
+++ /dev/null
@@ -1,95 +0,0 @@
-#!/usr/bin/env python
-
-import subprocess
-import os
-import sys
-import argparse
-import time
-from subprocess import PIPE, STDOUT
-
-null = open("/dev/null", "wb")
-
-def wait(p):
- rc = p.wait()
- if rc != 0:
- p = play("sound/misc/compiler-failure.ogg")
- p.wait()
- assert p.returncode == 0
- sys.exit(rc)
-
-def play(soundfile):
- p = subprocess.Popen(["play", soundfile], stdout=null, stderr=null)
- assert p.wait() == 0
- return p
-
-def stage1():
- p = subprocess.Popen("(cd tgui; /bin/bash ./build.sh)", shell=True)
- wait(p)
- play("sound/misc/compiler-stage1.ogg")
-
-def stage2(map):
- if map:
- txt = "-M{}".format(map)
- else:
- txt = ''
- args = "bash tools/travis/dm.sh {} tgstation.dme".format(txt)
- print(args)
- p = subprocess.Popen(args, shell=True)
- wait(p)
-
-def stage3(profile_mode=False):
- start_time = time.time()
- play("sound/misc/compiler-stage2.ogg")
- logfile = open('server.log~','w')
- p = subprocess.Popen(
- "DreamDaemon tgstation.dmb 25001 -trusted",
- shell=True, stdout=PIPE, stderr=STDOUT)
- try:
- while p.returncode is None:
- stdout = p.stdout.readline()
- if "Initializations complete" in stdout:
- play("sound/misc/server-ready.ogg")
- time_taken = time.time() - start_time
- print("{} seconds taken to fully start".format(time_taken))
- if "Map is ready." in stdout:
- time_taken = time.time() - start_time
- print("{} seconds for initial map loading".format(time_taken))
- if profile_mode:
- return time_taken
- sys.stdout.write(stdout)
- sys.stdout.flush()
- logfile.write(stdout)
- finally:
- logfile.flush()
- os.fsync(logfile.fileno())
- logfile.close()
- p.kill()
-
-
-def main():
- parser = argparse.ArgumentParser()
- parser.add_argument('-s','---stage',default=1,type=int)
- parser.add_argument('--only',action='store_true')
- parser.add_argument('-m','--map',type=str)
- parser.add_argument('--profile-mode',action='store_true')
- args = parser.parse_args()
- stage = args.stage
- assert stage in (1,2,3)
- if stage == 1:
- stage1()
- if not args.only:
- stage = 2
- if stage == 2:
- stage2(args.map)
- if not args.only:
- stage = 3
- if stage == 3:
- value = stage3(profile_mode=args.profile_mode)
- with open('profile~', 'a') as f:
- f.write("{}\n".format(value))
-
-if __name__=='__main__':
- try:
- main()
- except KeyboardInterrupt:
- pass
diff --git a/tools/tgs4_scripts/PreCompile.bat b/tools/tgs4_scripts/PreCompile.bat
index 0c944e7adc5..f297666c961 100644
--- a/tools/tgs4_scripts/PreCompile.bat
+++ b/tools/tgs4_scripts/PreCompile.bat
@@ -11,5 +11,5 @@ IF NOT "%1" == "" (
rem TGS3: Otherwise build in Game/B
cd ..\Game\B
)
-set TG_BUILD_TGS_MODE=1
+set CBT_BUILD_MODE="TGS"
tools\build\build
diff --git a/tools/tgs4_scripts/PreCompile.sh b/tools/tgs4_scripts/PreCompile.sh
index 1e26561db6c..a7faa1258b9 100755
--- a/tools/tgs4_scripts/PreCompile.sh
+++ b/tools/tgs4_scripts/PreCompile.sh
@@ -69,4 +69,4 @@ cd ..
echo "Compiling tgui..."
cd "$1"
chmod +x tools/bootstrap/node # Workaround for https://github.com/tgstation/tgstation-server/issues/1167
-env TG_BOOTSTRAP_CACHE="$original_dir" TG_BOOTSTRAP_NODE_LINUX=1 TG_BUILD_TGS_MODE=1 tools/bootstrap/node tools/build/build.js
+env TG_BOOTSTRAP_CACHE="$original_dir" TG_BOOTSTRAP_NODE_LINUX=1 CBT_BUILD_MODE="TGS" tools/bootstrap/node tools/build/build.js