@colyseus/tools 0.17.18 → 0.17.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -3
- package/README.md +17 -16
- package/build/loadenv.cjs +3 -3
- package/build/loadenv.cjs.map +2 -2
- package/build/loadenv.mjs +3 -3
- package/build/loadenv.mjs.map +2 -2
- package/package.json +5 -5
- package/src/loadenv.ts +4 -3
package/LICENSE
CHANGED
package/README.md
CHANGED
|
@@ -7,19 +7,19 @@
|
|
|
7
7
|
<a href="https://npmjs.com/package/colyseus">
|
|
8
8
|
<img src="https://img.shields.io/npm/dm/colyseus.svg?style=for-the-badge&logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QAAKqNIzIAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAAHdElNRQfjAgETESWYxR33AAAAtElEQVQoz4WQMQrCQBRE38Z0QoTcwF4Qg1h4BO0sxGOk80iCtViksrIQRRBTewWxMI1mbELYjYu+4rPMDPtn12ChMT3gavb4US5Jym0tcBIta3oDHv4Gwmr7nC4QAxBrCdzM2q6XqUnm9m9r59h7Rc0n2pFv24k4ttGMUXW+sGELTJjSr7QDKuqLS6UKFChVWWuFkZw9Z2AAvAirKT+JTlppIRnd6XgaP4goefI2Shj++OnjB3tBmHYK8z9zAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE5LTAyLTAxVDE4OjE3OjM3KzAxOjAwGQQixQAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxOS0wMi0wMVQxODoxNzozNyswMTowMGhZmnkAAAAZdEVYdFNvZnR3YXJlAHd3dy5pbmtzY2FwZS5vcmeb7jwaAAAAAElFTkSuQmCC">
|
|
9
9
|
</a>
|
|
10
|
-
<a href="https://github.com/colyseus/colyseus/discussions" title="Discuss on Forum">
|
|
11
|
-
<img src="https://img.shields.io/badge/discuss-on%20forum-brightgreen.svg?style=for-the-badge&colorB=0069b8&logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QAAKqNIzIAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAAHdElNRQfjAgETDROxCNUzAAABB0lEQVQoz4WRvyvEARjGP193CnWRH+dHQmGwKZtFGcSmxHAL400GN95ktIpV2dzlLzDJgsGgGNRdDAzoQueS/PgY3HXHyT3T+/Y87/s89UANBKXBdoZo5J6L4K1K5ZxHfnjnlQUf3bKvkgy57a0r9hS3cXfMO1kWJMza++tj3Ac7/LY343x1NA9cNmYMwnSS/SP8JVFuSJmr44iFqvtmpjhmhBCrOOazCesq6H4P3bPBjFoIBydOk2bUA17I080Es+wSZ51B4DIA2zgjSpYcEe44Js01G0XjRcCU+y4ZMrDeLmfc9EnVd5M/o0VMeu6nJZxWJivLmhyw1WHTvrr2b4+2OFqra+ALwouTMDcqmjMAAAAldEVYdGRhdGU6Y3JlYXRlADIwMTktMDItMDFUMTg6MTM6MTkrMDE6MDAC9f6fAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE5LTAyLTAxVDE4OjEzOjE5KzAxOjAwc6hGIwAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAAASUVORK5CYII=" alt="Discussion forum" />
|
|
12
|
-
</a>
|
|
13
10
|
<a href="http://chat.colyseus.io">
|
|
14
11
|
<img src="https://img.shields.io/discord/525739117951320081.svg?style=for-the-badge&colorB=7581dc&logo=discord&logoColor=white">
|
|
15
12
|
</a>
|
|
13
|
+
<a href="https://github.com/colyseus/colyseus/discussions" title="Discuss Forum">
|
|
14
|
+
<img src="https://img.shields.io/badge/discuss-forum-brightgreen.svg?style=for-the-badge&colorB=0069b8&logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QAAKqNIzIAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAAHdElNRQfjAgETDROxCNUzAAABB0lEQVQoz4WRvyvEARjGP193CnWRH+dHQmGwKZtFGcSmxHAL400GN95ktIpV2dzlLzDJgsGgGNRdDAzoQueS/PgY3HXHyT3T+/Y87/s89UANBKXBdoZo5J6L4K1K5ZxHfnjnlQUf3bKvkgy57a0r9hS3cXfMO1kWJMza++tj3Ac7/LY343x1NA9cNmYMwnSS/SP8JVFuSJmr44iFqvtmpjhmhBCrOOazCesq6H4P3bPBjFoIBydOk2bUA17I080Es+wSZ51B4DIA2zgjSpYcEe44Js01G0XjRcCU+y4ZMrDeLmfc9EnVd5M/o0VMeu6nJZxWJivLmhyw1WHTvrr2b4+2OFqra+ALwouTMDcqmjMAAAAldEVYdGRhdGU6Y3JlYXRlADIwMTktMDItMDFUMTg6MTM6MTkrMDE6MDAC9f6fAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE5LTAyLTAxVDE4OjEzOjE5KzAxOjAwc6hGIwAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAAASUVORK5CYII=" alt="Discussion forum" />
|
|
15
|
+
</a>
|
|
16
16
|
<h3>
|
|
17
17
|
Multiplayer Framework for Node.js. <br /><a href="https://docs.colyseus.io/">View documentation</a>
|
|
18
18
|
</h3>
|
|
19
19
|
</div>
|
|
20
20
|
|
|
21
|
-
Colyseus is an Authoritative Multiplayer Framework for Node.js, with
|
|
22
|
-
available for the Web,
|
|
21
|
+
Colyseus is an Authoritative Multiplayer Framework for Node.js, with SDKs
|
|
22
|
+
available for the Web, Unity, Defold, Haxe, Cocos and Construct3. ([See official SDKs](https://docs.colyseus.io/getting-started))
|
|
23
23
|
|
|
24
24
|
The project focuses on providing synchronizable data structures for realtime and
|
|
25
25
|
turn-based games, matchmaking, and ease of usage both on the server-side and
|
|
@@ -28,23 +28,24 @@ client-side.
|
|
|
28
28
|
The mission of the framework is to be a standard netcode & matchmaking solution
|
|
29
29
|
for any kind of project you can think of!
|
|
30
30
|
|
|
31
|
-
##
|
|
31
|
+
## Why developers choose Colyseus:
|
|
32
32
|
|
|
33
|
-
-
|
|
34
|
-
-
|
|
35
|
-
-
|
|
36
|
-
-
|
|
37
|
-
-
|
|
33
|
+
- ⚡️ **Real-time state sync that just works** → Define your state on the server and it automatically synchronizes to all clients, delta-compressed and binary-encoded.
|
|
34
|
+
- ⚔️ **Built-in matchmaking** → Room-based architecture with filtering, queuing, and reconnection support out of the box.
|
|
35
|
+
- 📈 **Scalable** → Go from 10 to 10,000+ CCU by scaling vertically or horizontally with Redis and load balancers.
|
|
36
|
+
- 🛡️ **Cheat-proof by design** → Authoritative server model ensures game logic runs on the server, not the client.
|
|
37
|
+
- 🛠️ **Use the tools you already know** → Built on Node.js and TypeScript with a simple, familiar API on both server and client.
|
|
38
|
+
- 💙 **Free forever** → MIT licensed, even for commercial games.
|
|
38
39
|
|
|
39
|
-
See [public roadmap](https://
|
|
40
|
+
See [public roadmap](https://docs.colyseus.io/roadmap) for version 1.0.
|
|
40
41
|
|
|
41
42
|
# 🚀 Quickstart
|
|
42
43
|
|
|
43
|
-
|
|
44
|
+
Set up your own Colyseus server project for your game using `npm create colyseus-app@latest`:
|
|
44
45
|
|
|
45
46
|
```
|
|
46
|
-
npm create colyseus-app@latest my-
|
|
47
|
-
cd my-
|
|
47
|
+
npm create colyseus-app@latest ./my-server
|
|
48
|
+
cd my-server
|
|
48
49
|
npm start
|
|
49
50
|
```
|
|
50
51
|
|
|
@@ -87,7 +88,7 @@ Thanks goes to these wonderful people ([emoji key](https://github.com/kentcdodds
|
|
|
87
88
|
<td align="center"><a href="https://github.com/TinyDobbins"><img src="https://avatars2.githubusercontent.com/u/20824844?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Nikita Borisov</b></sub></a><br /><a href="https://github.com/colyseus/colyseus/issues?q=author%3ATinyDobbins" title="Bug reports">🐛</a> <a href="https://github.com/colyseus/colyseus/commits?author=TinyDobbins" title="Code">💻</a> <a href="#business-TinyDobbins" title="Business development">💼</a> <a href="#ideas-TinyDobbins" title="Ideas, Planning, & Feedback">🤔</a></td>
|
|
88
89
|
<td align="center"><a href="https://acemobe.com/"><img src="https://avatars2.githubusercontent.com/u/232101?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Phil Harvey</b></sub></a><br /><a href="https://github.com/colyseus/colyseus/commits?author=filharvey" title="Documentation">📖</a></td>
|
|
89
90
|
<td align="center"><a href="https://github.com/serjek"><img src="https://avatars2.githubusercontent.com/u/18265157?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Sergey</b></sub></a><br /><a href="https://github.com/colyseus/colyseus/issues?q=author%3Aserjek" title="Bug reports">🐛</a> <a href="https://github.com/colyseus/colyseus/commits?author=serjek" title="Code">💻</a></td>
|
|
90
|
-
<td align="center"><a href="https://
|
|
91
|
+
<td align="center"><a href="https://devlsh.com"><img src="https://avatars0.githubusercontent.com/u/853683?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Sophie</b></sub></a><br /><a href="#question-devlsh" title="Answering Questions">💬</a> <a href="https://github.com/colyseus/colyseus/issues?q=author%3Adevlsh" title="Bug reports">🐛</a> <a href="#ideas-devlsh" title="Ideas, Planning, & Feedback">🤔</a></td>
|
|
91
92
|
<td align="center"><a href="https://github.com/supertommy"><img src="https://avatars0.githubusercontent.com/u/2236153?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Tommy Leung</b></sub></a><br /><a href="#mentoring-supertommy" title="Mentoring">🧑🏫</a></td>
|
|
92
93
|
<td align="center"><a href="https://github.com/digimbyte"><img src="https://avatars2.githubusercontent.com/u/6645396?v=4?s=100" width="100px;" alt=""/><br /><sub><b>digimbyte</b></sub></a><br /><a href="https://github.com/colyseus/colyseus/commits?author=digimbyte" title="Documentation">📖</a></td>
|
|
93
94
|
</tr>
|
package/build/loadenv.cjs
CHANGED
|
@@ -36,7 +36,7 @@ function getNodeEnv() {
|
|
|
36
36
|
function getRegion() {
|
|
37
37
|
return (process.env.REGION || "unknown").toLowerCase();
|
|
38
38
|
}
|
|
39
|
-
function loadEnvFile(envFileOptions, log = "none") {
|
|
39
|
+
function loadEnvFile(envFileOptions, log = "none", override = false) {
|
|
40
40
|
const envPaths = [];
|
|
41
41
|
envFileOptions.forEach((envFilename) => {
|
|
42
42
|
if (envFilename.startsWith("/")) {
|
|
@@ -48,7 +48,7 @@ function loadEnvFile(envFileOptions, log = "none") {
|
|
|
48
48
|
});
|
|
49
49
|
const envPath = envPaths.find((envPath2) => import_fs.default.existsSync(envPath2));
|
|
50
50
|
if (envPath) {
|
|
51
|
-
import_dotenv.default.config({ path: envPath });
|
|
51
|
+
import_dotenv.default.config({ path: envPath, override });
|
|
52
52
|
if (log !== "none") {
|
|
53
53
|
console.info(`\u2705 ${import_path.default.basename(envPath)} loaded.`);
|
|
54
54
|
}
|
|
@@ -65,7 +65,7 @@ if (process.env.COLYSEUS_CLOUD !== void 0) {
|
|
|
65
65
|
if (process.env.APP_ROOT_PATH) {
|
|
66
66
|
cloudEnvFileNames.unshift(`${process.env.APP_ROOT_PATH}${process.env.APP_ROOT_PATH.endsWith("/") ? "" : "/"}.env.cloud`);
|
|
67
67
|
}
|
|
68
|
-
loadEnvFile(cloudEnvFileNames);
|
|
68
|
+
loadEnvFile(cloudEnvFileNames, "none", true);
|
|
69
69
|
}
|
|
70
70
|
if (process.env.REGION !== void 0) {
|
|
71
71
|
loadEnvFile([`.env.${getRegion()}.${getNodeEnv()}`], "success");
|
package/build/loadenv.cjs.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/loadenv.ts"],
|
|
4
|
-
"sourcesContent": ["import fs from 'fs';\nimport path from 'path';\nimport dotenv from 'dotenv';\n\nfunction getEnvFromArgv() {\n const envIndex = process.argv.indexOf(\"--env\");\n return (envIndex !== -1) ? process.argv[envIndex + 1] : undefined;\n}\n\nfunction getNodeEnv() {\n return process.env.NODE_ENV || getEnvFromArgv() || \"development\";\n}\n\nfunction getRegion() {\n // EU, NA, AS, AF, AU, SA, UNKNOWN\n return (process.env.REGION || \"unknown\").toLowerCase();\n}\n\nfunction loadEnvFile(envFileOptions: string[], log: 'none' | 'success' | 'both' = 'none') {\n const envPaths = [];\n envFileOptions.forEach((envFilename) => {\n if (envFilename.startsWith(\"/\")) {\n envPaths.push(envFilename);\n } else {\n envPaths.push(path.resolve(path.dirname(typeof(require) !== \"undefined\" && require?.main?.filename || process.cwd()), \"..\", envFilename));\n envPaths.push(path.resolve(process.cwd(), envFilename));\n }\n });\n\n // return the first .env path found\n const envPath = envPaths.find((envPath) => fs.existsSync(envPath));\n\n if (envPath) {\n dotenv.config({ path: envPath });\n\n if (log !== \"none\") {\n console.info(`\u2705 ${path.basename(envPath)} loaded.`);\n }\n\n } else if (log === \"both\") {\n console.info(`\u2139\uFE0F optional .env file not found: ${envFileOptions.join(\", \")}`);\n }\n}\n\n// reload /etc/environment, if exists\nif (fs.existsSync(\"/etc/environment\")) {\n dotenv.config({ path: \"/etc/environment\", override: true })\n}\n\n// (overrides previous env configs)\nloadEnvFile([`.env.${getNodeEnv()}`, `.env`], 'both');\n\n// load .env.cloud defined on admin panel\nif (process.env.COLYSEUS_CLOUD !== undefined) {\n const cloudEnvFileNames = [\".env.cloud\"];\n\n // prepend .env.cloud file from APP_ROOT_PATH\n if (process.env.APP_ROOT_PATH) {\n cloudEnvFileNames.unshift(`${process.env.APP_ROOT_PATH}${(process.env.APP_ROOT_PATH.endsWith(\"/\") ? \"\" : \"/\")}.env.cloud`);\n }\n\n loadEnvFile(cloudEnvFileNames);\n}\n\nif (process.env.REGION !== undefined) {\n loadEnvFile([`.env.${getRegion()}.${getNodeEnv()}`], 'success');\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gBAAe;AACf,kBAAiB;AACjB,oBAAmB;AAEnB,SAAS,iBAAiB;AACxB,QAAM,WAAW,QAAQ,KAAK,QAAQ,OAAO;AAC7C,SAAQ,aAAa,KAAM,QAAQ,KAAK,WAAW,CAAC,IAAI;AAC1D;AAEA,SAAS,aAAa;AACpB,SAAO,QAAQ,IAAI,YAAY,eAAe,KAAK;AACrD;AAEA,SAAS,YAAY;AAEnB,UAAQ,QAAQ,IAAI,UAAU,WAAW,YAAY;AACvD;AAEA,SAAS,YAAY,gBAA0B,MAAoC,QAAQ;
|
|
4
|
+
"sourcesContent": ["import fs from 'fs';\nimport path from 'path';\nimport dotenv from 'dotenv';\n\nfunction getEnvFromArgv() {\n const envIndex = process.argv.indexOf(\"--env\");\n return (envIndex !== -1) ? process.argv[envIndex + 1] : undefined;\n}\n\nfunction getNodeEnv() {\n return process.env.NODE_ENV || getEnvFromArgv() || \"development\";\n}\n\nfunction getRegion() {\n // EU, NA, AS, AF, AU, SA, UNKNOWN\n return (process.env.REGION || \"unknown\").toLowerCase();\n}\n\nfunction loadEnvFile(envFileOptions: string[], log: 'none' | 'success' | 'both' = 'none', override: boolean = false) {\n const envPaths = [];\n envFileOptions.forEach((envFilename) => {\n if (envFilename.startsWith(\"/\")) {\n envPaths.push(envFilename);\n } else {\n envPaths.push(path.resolve(path.dirname(typeof(require) !== \"undefined\" && require?.main?.filename || process.cwd()), \"..\", envFilename));\n envPaths.push(path.resolve(process.cwd(), envFilename));\n }\n });\n\n // return the first .env path found\n const envPath = envPaths.find((envPath) => fs.existsSync(envPath));\n\n if (envPath) {\n dotenv.config({ path: envPath, override });\n\n if (log !== \"none\") {\n console.info(`\u2705 ${path.basename(envPath)} loaded.`);\n }\n\n } else if (log === \"both\") {\n console.info(`\u2139\uFE0F optional .env file not found: ${envFileOptions.join(\", \")}`);\n }\n}\n\n// reload /etc/environment, if exists\nif (fs.existsSync(\"/etc/environment\")) {\n dotenv.config({ path: \"/etc/environment\", override: true })\n}\n\n// (overrides previous env configs)\nloadEnvFile([`.env.${getNodeEnv()}`, `.env`], 'both');\n\n// load .env.cloud defined on admin panel\nif (process.env.COLYSEUS_CLOUD !== undefined) {\n const cloudEnvFileNames = [\".env.cloud\"];\n\n // prepend .env.cloud file from APP_ROOT_PATH\n if (process.env.APP_ROOT_PATH) {\n cloudEnvFileNames.unshift(`${process.env.APP_ROOT_PATH}${(process.env.APP_ROOT_PATH.endsWith(\"/\") ? \"\" : \"/\")}.env.cloud`);\n }\n\n // .env.cloud can override previously loaded environment variables\n loadEnvFile(cloudEnvFileNames, 'none', true);\n}\n\nif (process.env.REGION !== undefined) {\n loadEnvFile([`.env.${getRegion()}.${getNodeEnv()}`], 'success');\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gBAAe;AACf,kBAAiB;AACjB,oBAAmB;AAEnB,SAAS,iBAAiB;AACxB,QAAM,WAAW,QAAQ,KAAK,QAAQ,OAAO;AAC7C,SAAQ,aAAa,KAAM,QAAQ,KAAK,WAAW,CAAC,IAAI;AAC1D;AAEA,SAAS,aAAa;AACpB,SAAO,QAAQ,IAAI,YAAY,eAAe,KAAK;AACrD;AAEA,SAAS,YAAY;AAEnB,UAAQ,QAAQ,IAAI,UAAU,WAAW,YAAY;AACvD;AAEA,SAAS,YAAY,gBAA0B,MAAoC,QAAQ,WAAoB,OAAO;AAClH,QAAM,WAAW,CAAC;AAClB,iBAAe,QAAQ,CAAC,gBAAgB;AACtC,QAAI,YAAY,WAAW,GAAG,GAAG;AAC/B,eAAS,KAAK,WAAW;AAAA,IAC3B,OAAO;AACL,eAAS,KAAK,YAAAA,QAAK,QAAQ,YAAAA,QAAK,QAAQ,OAAO,YAAa,eAAe,SAAS,MAAM,YAAY,QAAQ,IAAI,CAAC,GAAG,MAAM,WAAW,CAAC;AACxI,eAAS,KAAK,YAAAA,QAAK,QAAQ,QAAQ,IAAI,GAAG,WAAW,CAAC;AAAA,IACxD;AAAA,EACF,CAAC;AAGD,QAAM,UAAU,SAAS,KAAK,CAACC,aAAY,UAAAC,QAAG,WAAWD,QAAO,CAAC;AAEjE,MAAI,SAAS;AACT,kBAAAE,QAAO,OAAO,EAAE,MAAM,SAAS,SAAS,CAAC;AAEzC,QAAI,QAAQ,QAAQ;AAChB,cAAQ,KAAK,UAAK,YAAAH,QAAK,SAAS,OAAO,CAAC,UAAU;AAAA,IACtD;AAAA,EAEJ,WAAW,QAAQ,QAAQ;AACvB,YAAQ,KAAK,+CAAqC,eAAe,KAAK,IAAI,CAAC,EAAE;AAAA,EACjF;AACJ;AAGA,IAAI,UAAAE,QAAG,WAAW,kBAAkB,GAAG;AACrC,gBAAAC,QAAO,OAAO,EAAE,MAAM,oBAAoB,UAAU,KAAK,CAAC;AAC5D;AAGA,YAAY,CAAC,QAAQ,WAAW,CAAC,IAAI,MAAM,GAAG,MAAM;AAGpD,IAAI,QAAQ,IAAI,mBAAmB,QAAW;AAC1C,QAAM,oBAAoB,CAAC,YAAY;AAGvC,MAAI,QAAQ,IAAI,eAAe;AAC7B,sBAAkB,QAAQ,GAAG,QAAQ,IAAI,aAAa,GAAI,QAAQ,IAAI,cAAc,SAAS,GAAG,IAAI,KAAK,GAAI,YAAY;AAAA,EAC3H;AAGA,cAAY,mBAAmB,QAAQ,IAAI;AAC/C;AAEA,IAAI,QAAQ,IAAI,WAAW,QAAW;AACpC,cAAY,CAAC,QAAQ,UAAU,CAAC,IAAI,WAAW,CAAC,EAAE,GAAG,SAAS;AAChE;",
|
|
6
6
|
"names": ["path", "envPath", "fs", "dotenv"]
|
|
7
7
|
}
|
package/build/loadenv.mjs
CHANGED
|
@@ -19,7 +19,7 @@ function getNodeEnv() {
|
|
|
19
19
|
function getRegion() {
|
|
20
20
|
return (process.env.REGION || "unknown").toLowerCase();
|
|
21
21
|
}
|
|
22
|
-
function loadEnvFile(envFileOptions, log = "none") {
|
|
22
|
+
function loadEnvFile(envFileOptions, log = "none", override = false) {
|
|
23
23
|
const envPaths = [];
|
|
24
24
|
envFileOptions.forEach((envFilename) => {
|
|
25
25
|
if (envFilename.startsWith("/")) {
|
|
@@ -31,7 +31,7 @@ function loadEnvFile(envFileOptions, log = "none") {
|
|
|
31
31
|
});
|
|
32
32
|
const envPath = envPaths.find((envPath2) => fs.existsSync(envPath2));
|
|
33
33
|
if (envPath) {
|
|
34
|
-
dotenv.config({ path: envPath });
|
|
34
|
+
dotenv.config({ path: envPath, override });
|
|
35
35
|
if (log !== "none") {
|
|
36
36
|
console.info(`\u2705 ${path.basename(envPath)} loaded.`);
|
|
37
37
|
}
|
|
@@ -48,7 +48,7 @@ if (process.env.COLYSEUS_CLOUD !== void 0) {
|
|
|
48
48
|
if (process.env.APP_ROOT_PATH) {
|
|
49
49
|
cloudEnvFileNames.unshift(`${process.env.APP_ROOT_PATH}${process.env.APP_ROOT_PATH.endsWith("/") ? "" : "/"}.env.cloud`);
|
|
50
50
|
}
|
|
51
|
-
loadEnvFile(cloudEnvFileNames);
|
|
51
|
+
loadEnvFile(cloudEnvFileNames, "none", true);
|
|
52
52
|
}
|
|
53
53
|
if (process.env.REGION !== void 0) {
|
|
54
54
|
loadEnvFile([`.env.${getRegion()}.${getNodeEnv()}`], "success");
|
package/build/loadenv.mjs.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/loadenv.ts"],
|
|
4
|
-
"sourcesContent": ["import fs from 'fs';\nimport path from 'path';\nimport dotenv from 'dotenv';\n\nfunction getEnvFromArgv() {\n const envIndex = process.argv.indexOf(\"--env\");\n return (envIndex !== -1) ? process.argv[envIndex + 1] : undefined;\n}\n\nfunction getNodeEnv() {\n return process.env.NODE_ENV || getEnvFromArgv() || \"development\";\n}\n\nfunction getRegion() {\n // EU, NA, AS, AF, AU, SA, UNKNOWN\n return (process.env.REGION || \"unknown\").toLowerCase();\n}\n\nfunction loadEnvFile(envFileOptions: string[], log: 'none' | 'success' | 'both' = 'none') {\n const envPaths = [];\n envFileOptions.forEach((envFilename) => {\n if (envFilename.startsWith(\"/\")) {\n envPaths.push(envFilename);\n } else {\n envPaths.push(path.resolve(path.dirname(typeof(require) !== \"undefined\" && require?.main?.filename || process.cwd()), \"..\", envFilename));\n envPaths.push(path.resolve(process.cwd(), envFilename));\n }\n });\n\n // return the first .env path found\n const envPath = envPaths.find((envPath) => fs.existsSync(envPath));\n\n if (envPath) {\n dotenv.config({ path: envPath });\n\n if (log !== \"none\") {\n console.info(`\u2705 ${path.basename(envPath)} loaded.`);\n }\n\n } else if (log === \"both\") {\n console.info(`\u2139\uFE0F optional .env file not found: ${envFileOptions.join(\", \")}`);\n }\n}\n\n// reload /etc/environment, if exists\nif (fs.existsSync(\"/etc/environment\")) {\n dotenv.config({ path: \"/etc/environment\", override: true })\n}\n\n// (overrides previous env configs)\nloadEnvFile([`.env.${getNodeEnv()}`, `.env`], 'both');\n\n// load .env.cloud defined on admin panel\nif (process.env.COLYSEUS_CLOUD !== undefined) {\n const cloudEnvFileNames = [\".env.cloud\"];\n\n // prepend .env.cloud file from APP_ROOT_PATH\n if (process.env.APP_ROOT_PATH) {\n cloudEnvFileNames.unshift(`${process.env.APP_ROOT_PATH}${(process.env.APP_ROOT_PATH.endsWith(\"/\") ? \"\" : \"/\")}.env.cloud`);\n }\n\n loadEnvFile(cloudEnvFileNames);\n}\n\nif (process.env.REGION !== undefined) {\n loadEnvFile([`.env.${getRegion()}.${getNodeEnv()}`], 'success');\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;AAAA,OAAO,QAAQ;AACf,OAAO,UAAU;AACjB,OAAO,YAAY;AAEnB,SAAS,iBAAiB;AACxB,QAAM,WAAW,QAAQ,KAAK,QAAQ,OAAO;AAC7C,SAAQ,aAAa,KAAM,QAAQ,KAAK,WAAW,CAAC,IAAI;AAC1D;AAEA,SAAS,aAAa;AACpB,SAAO,QAAQ,IAAI,YAAY,eAAe,KAAK;AACrD;AAEA,SAAS,YAAY;AAEnB,UAAQ,QAAQ,IAAI,UAAU,WAAW,YAAY;AACvD;AAEA,SAAS,YAAY,gBAA0B,MAAoC,QAAQ;
|
|
4
|
+
"sourcesContent": ["import fs from 'fs';\nimport path from 'path';\nimport dotenv from 'dotenv';\n\nfunction getEnvFromArgv() {\n const envIndex = process.argv.indexOf(\"--env\");\n return (envIndex !== -1) ? process.argv[envIndex + 1] : undefined;\n}\n\nfunction getNodeEnv() {\n return process.env.NODE_ENV || getEnvFromArgv() || \"development\";\n}\n\nfunction getRegion() {\n // EU, NA, AS, AF, AU, SA, UNKNOWN\n return (process.env.REGION || \"unknown\").toLowerCase();\n}\n\nfunction loadEnvFile(envFileOptions: string[], log: 'none' | 'success' | 'both' = 'none', override: boolean = false) {\n const envPaths = [];\n envFileOptions.forEach((envFilename) => {\n if (envFilename.startsWith(\"/\")) {\n envPaths.push(envFilename);\n } else {\n envPaths.push(path.resolve(path.dirname(typeof(require) !== \"undefined\" && require?.main?.filename || process.cwd()), \"..\", envFilename));\n envPaths.push(path.resolve(process.cwd(), envFilename));\n }\n });\n\n // return the first .env path found\n const envPath = envPaths.find((envPath) => fs.existsSync(envPath));\n\n if (envPath) {\n dotenv.config({ path: envPath, override });\n\n if (log !== \"none\") {\n console.info(`\u2705 ${path.basename(envPath)} loaded.`);\n }\n\n } else if (log === \"both\") {\n console.info(`\u2139\uFE0F optional .env file not found: ${envFileOptions.join(\", \")}`);\n }\n}\n\n// reload /etc/environment, if exists\nif (fs.existsSync(\"/etc/environment\")) {\n dotenv.config({ path: \"/etc/environment\", override: true })\n}\n\n// (overrides previous env configs)\nloadEnvFile([`.env.${getNodeEnv()}`, `.env`], 'both');\n\n// load .env.cloud defined on admin panel\nif (process.env.COLYSEUS_CLOUD !== undefined) {\n const cloudEnvFileNames = [\".env.cloud\"];\n\n // prepend .env.cloud file from APP_ROOT_PATH\n if (process.env.APP_ROOT_PATH) {\n cloudEnvFileNames.unshift(`${process.env.APP_ROOT_PATH}${(process.env.APP_ROOT_PATH.endsWith(\"/\") ? \"\" : \"/\")}.env.cloud`);\n }\n\n // .env.cloud can override previously loaded environment variables\n loadEnvFile(cloudEnvFileNames, 'none', true);\n}\n\nif (process.env.REGION !== undefined) {\n loadEnvFile([`.env.${getRegion()}.${getNodeEnv()}`], 'success');\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;AAAA,OAAO,QAAQ;AACf,OAAO,UAAU;AACjB,OAAO,YAAY;AAEnB,SAAS,iBAAiB;AACxB,QAAM,WAAW,QAAQ,KAAK,QAAQ,OAAO;AAC7C,SAAQ,aAAa,KAAM,QAAQ,KAAK,WAAW,CAAC,IAAI;AAC1D;AAEA,SAAS,aAAa;AACpB,SAAO,QAAQ,IAAI,YAAY,eAAe,KAAK;AACrD;AAEA,SAAS,YAAY;AAEnB,UAAQ,QAAQ,IAAI,UAAU,WAAW,YAAY;AACvD;AAEA,SAAS,YAAY,gBAA0B,MAAoC,QAAQ,WAAoB,OAAO;AAClH,QAAM,WAAW,CAAC;AAClB,iBAAe,QAAQ,CAAC,gBAAgB;AACtC,QAAI,YAAY,WAAW,GAAG,GAAG;AAC/B,eAAS,KAAK,WAAW;AAAA,IAC3B,OAAO;AACL,eAAS,KAAK,KAAK,QAAQ,KAAK,QAAQ,OAAO,cAAa,eAAe,WAAS,MAAM,YAAY,QAAQ,IAAI,CAAC,GAAG,MAAM,WAAW,CAAC;AACxI,eAAS,KAAK,KAAK,QAAQ,QAAQ,IAAI,GAAG,WAAW,CAAC;AAAA,IACxD;AAAA,EACF,CAAC;AAGD,QAAM,UAAU,SAAS,KAAK,CAACA,aAAY,GAAG,WAAWA,QAAO,CAAC;AAEjE,MAAI,SAAS;AACT,WAAO,OAAO,EAAE,MAAM,SAAS,SAAS,CAAC;AAEzC,QAAI,QAAQ,QAAQ;AAChB,cAAQ,KAAK,UAAK,KAAK,SAAS,OAAO,CAAC,UAAU;AAAA,IACtD;AAAA,EAEJ,WAAW,QAAQ,QAAQ;AACvB,YAAQ,KAAK,+CAAqC,eAAe,KAAK,IAAI,CAAC,EAAE;AAAA,EACjF;AACJ;AAGA,IAAI,GAAG,WAAW,kBAAkB,GAAG;AACrC,SAAO,OAAO,EAAE,MAAM,oBAAoB,UAAU,KAAK,CAAC;AAC5D;AAGA,YAAY,CAAC,QAAQ,WAAW,CAAC,IAAI,MAAM,GAAG,MAAM;AAGpD,IAAI,QAAQ,IAAI,mBAAmB,QAAW;AAC1C,QAAM,oBAAoB,CAAC,YAAY;AAGvC,MAAI,QAAQ,IAAI,eAAe;AAC7B,sBAAkB,QAAQ,GAAG,QAAQ,IAAI,aAAa,GAAI,QAAQ,IAAI,cAAc,SAAS,GAAG,IAAI,KAAK,GAAI,YAAY;AAAA,EAC3H;AAGA,cAAY,mBAAmB,QAAQ,IAAI;AAC/C;AAEA,IAAI,QAAQ,IAAI,WAAW,QAAW;AACpC,cAAY,CAAC,QAAQ,UAAU,CAAC,IAAI,WAAW,CAAC,EAAE,GAAG,SAAS;AAChE;",
|
|
6
6
|
"names": ["envPath"]
|
|
7
7
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@colyseus/tools",
|
|
3
|
-
"version": "0.17.
|
|
3
|
+
"version": "0.17.19",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Simplify the development and production settings for your Colyseus project.",
|
|
6
6
|
"input": "./src/index.ts",
|
|
@@ -56,12 +56,12 @@
|
|
|
56
56
|
"pm2": "^6.0.14",
|
|
57
57
|
"mocha": "^11.7.5",
|
|
58
58
|
"uwebsockets-express": "^2.0.1",
|
|
59
|
-
"@colyseus/
|
|
60
|
-
"@colyseus/core": "^0.17.
|
|
61
|
-
"@colyseus/ws-transport": "^0.17.8",
|
|
59
|
+
"@colyseus/bun-websockets": "^0.17.7",
|
|
60
|
+
"@colyseus/core": "^0.17.36",
|
|
62
61
|
"@colyseus/redis-driver": "^0.17.6",
|
|
63
62
|
"@colyseus/redis-presence": "^0.17.6",
|
|
64
|
-
"@colyseus/
|
|
63
|
+
"@colyseus/uwebsockets-transport": "^0.17.16",
|
|
64
|
+
"@colyseus/ws-transport": "^0.17.9"
|
|
65
65
|
},
|
|
66
66
|
"peerDependencies": {
|
|
67
67
|
"@colyseus/core": "0.17.x",
|
package/src/loadenv.ts
CHANGED
|
@@ -16,7 +16,7 @@ function getRegion() {
|
|
|
16
16
|
return (process.env.REGION || "unknown").toLowerCase();
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
-
function loadEnvFile(envFileOptions: string[], log: 'none' | 'success' | 'both' = 'none') {
|
|
19
|
+
function loadEnvFile(envFileOptions: string[], log: 'none' | 'success' | 'both' = 'none', override: boolean = false) {
|
|
20
20
|
const envPaths = [];
|
|
21
21
|
envFileOptions.forEach((envFilename) => {
|
|
22
22
|
if (envFilename.startsWith("/")) {
|
|
@@ -31,7 +31,7 @@ function loadEnvFile(envFileOptions: string[], log: 'none' | 'success' | 'both'
|
|
|
31
31
|
const envPath = envPaths.find((envPath) => fs.existsSync(envPath));
|
|
32
32
|
|
|
33
33
|
if (envPath) {
|
|
34
|
-
dotenv.config({ path: envPath });
|
|
34
|
+
dotenv.config({ path: envPath, override });
|
|
35
35
|
|
|
36
36
|
if (log !== "none") {
|
|
37
37
|
console.info(`✅ ${path.basename(envPath)} loaded.`);
|
|
@@ -59,7 +59,8 @@ if (process.env.COLYSEUS_CLOUD !== undefined) {
|
|
|
59
59
|
cloudEnvFileNames.unshift(`${process.env.APP_ROOT_PATH}${(process.env.APP_ROOT_PATH.endsWith("/") ? "" : "/")}.env.cloud`);
|
|
60
60
|
}
|
|
61
61
|
|
|
62
|
-
|
|
62
|
+
// .env.cloud can override previously loaded environment variables
|
|
63
|
+
loadEnvFile(cloudEnvFileNames, 'none', true);
|
|
63
64
|
}
|
|
64
65
|
|
|
65
66
|
if (process.env.REGION !== undefined) {
|