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