mcp-garry-codes 1.0.0
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 +21 -0
- package/README.md +133 -0
- package/dist/config/env.d.ts +4 -0
- package/dist/config/env.d.ts.map +1 -0
- package/dist/config/env.js +27 -0
- package/dist/config/env.js.map +1 -0
- package/dist/config/schema.d.ts +28 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +12 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/contracts/common.d.ts +53 -0
- package/dist/contracts/common.d.ts.map +1 -0
- package/dist/contracts/common.js +30 -0
- package/dist/contracts/common.js.map +1 -0
- package/dist/contracts/linter_contracts.d.ts +79 -0
- package/dist/contracts/linter_contracts.d.ts.map +1 -0
- package/dist/contracts/linter_contracts.js +16 -0
- package/dist/contracts/linter_contracts.js.map +1 -0
- package/dist/contracts/scaffold_contracts.d.ts +84 -0
- package/dist/contracts/scaffold_contracts.d.ts.map +1 -0
- package/dist/contracts/scaffold_contracts.js +27 -0
- package/dist/contracts/scaffold_contracts.js.map +1 -0
- package/dist/contracts/security_contracts.d.ts +37 -0
- package/dist/contracts/security_contracts.d.ts.map +1 -0
- package/dist/contracts/security_contracts.js +6 -0
- package/dist/contracts/security_contracts.js.map +1 -0
- package/dist/contracts/test_contracts.d.ts +42 -0
- package/dist/contracts/test_contracts.d.ts.map +1 -0
- package/dist/contracts/test_contracts.js +10 -0
- package/dist/contracts/test_contracts.js.map +1 -0
- package/dist/contracts/wiki_contracts.d.ts +96 -0
- package/dist/contracts/wiki_contracts.d.ts.map +1 -0
- package/dist/contracts/wiki_contracts.js +17 -0
- package/dist/contracts/wiki_contracts.js.map +1 -0
- package/dist/core/cache.d.ts +9 -0
- package/dist/core/cache.d.ts.map +1 -0
- package/dist/core/cache.js +56 -0
- package/dist/core/cache.js.map +1 -0
- package/dist/core/errors.d.ts +37 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +52 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/file_utils.d.ts +13 -0
- package/dist/core/file_utils.d.ts.map +1 -0
- package/dist/core/file_utils.js +90 -0
- package/dist/core/file_utils.js.map +1 -0
- package/dist/core/logger.d.ts +18 -0
- package/dist/core/logger.d.ts.map +1 -0
- package/dist/core/logger.js +46 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/process_runner.d.ts +15 -0
- package/dist/core/process_runner.d.ts.map +1 -0
- package/dist/core/process_runner.js +64 -0
- package/dist/core/process_runner.js.map +1 -0
- package/dist/domain/glua/ast.d.ts +12 -0
- package/dist/domain/glua/ast.d.ts.map +1 -0
- package/dist/domain/glua/ast.js +176 -0
- package/dist/domain/glua/ast.js.map +1 -0
- package/dist/domain/glua/lexer.d.ts +42 -0
- package/dist/domain/glua/lexer.d.ts.map +1 -0
- package/dist/domain/glua/lexer.js +232 -0
- package/dist/domain/glua/lexer.js.map +1 -0
- package/dist/domain/networking/net_auditor.d.ts +5 -0
- package/dist/domain/networking/net_auditor.d.ts.map +1 -0
- package/dist/domain/networking/net_auditor.js +188 -0
- package/dist/domain/networking/net_auditor.js.map +1 -0
- package/dist/domain/packaging/validator.d.ts +5 -0
- package/dist/domain/packaging/validator.d.ts.map +1 -0
- package/dist/domain/packaging/validator.js +121 -0
- package/dist/domain/packaging/validator.js.map +1 -0
- package/dist/domain/performance/hot_path_analyzer.d.ts +5 -0
- package/dist/domain/performance/hot_path_analyzer.d.ts.map +1 -0
- package/dist/domain/performance/hot_path_analyzer.js +127 -0
- package/dist/domain/performance/hot_path_analyzer.js.map +1 -0
- package/dist/domain/scaffolding/templates.d.ts +5 -0
- package/dist/domain/scaffolding/templates.d.ts.map +1 -0
- package/dist/domain/scaffolding/templates.js +219 -0
- package/dist/domain/scaffolding/templates.js.map +1 -0
- package/dist/domain/wiki/offline_db.d.ts +3 -0
- package/dist/domain/wiki/offline_db.d.ts.map +1 -0
- package/dist/domain/wiki/offline_db.js +534 -0
- package/dist/domain/wiki/offline_db.js.map +1 -0
- package/dist/domain/wiki/types.d.ts +29 -0
- package/dist/domain/wiki/types.d.ts.map +1 -0
- package/dist/domain/wiki/types.js +2 -0
- package/dist/domain/wiki/types.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +28 -0
- package/dist/index.js.map +1 -0
- package/dist/integrations/glualint_adapter.d.ts +6 -0
- package/dist/integrations/glualint_adapter.d.ts.map +1 -0
- package/dist/integrations/glualint_adapter.js +62 -0
- package/dist/integrations/glualint_adapter.js.map +1 -0
- package/dist/integrations/python_test_harness.d.ts +5 -0
- package/dist/integrations/python_test_harness.d.ts.map +1 -0
- package/dist/integrations/python_test_harness.js +67 -0
- package/dist/integrations/python_test_harness.js.map +1 -0
- package/dist/integrations/web_search_adapter.d.ts +6 -0
- package/dist/integrations/web_search_adapter.d.ts.map +1 -0
- package/dist/integrations/web_search_adapter.js +80 -0
- package/dist/integrations/web_search_adapter.js.map +1 -0
- package/dist/integrations/wiki_client.d.ts +13 -0
- package/dist/integrations/wiki_client.d.ts.map +1 -0
- package/dist/integrations/wiki_client.js +110 -0
- package/dist/integrations/wiki_client.js.map +1 -0
- package/dist/prompts/index.d.ts +73 -0
- package/dist/prompts/index.d.ts.map +1 -0
- package/dist/prompts/index.js +127 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/resources/realms_resources.d.ts +2 -0
- package/dist/resources/realms_resources.d.ts.map +1 -0
- package/dist/resources/realms_resources.js +30 -0
- package/dist/resources/realms_resources.js.map +1 -0
- package/dist/resources/schema_resources.d.ts +2 -0
- package/dist/resources/schema_resources.d.ts.map +1 -0
- package/dist/resources/schema_resources.js +43 -0
- package/dist/resources/schema_resources.js.map +1 -0
- package/dist/resources/wiki_resources.d.ts +3 -0
- package/dist/resources/wiki_resources.d.ts.map +1 -0
- package/dist/resources/wiki_resources.js +31 -0
- package/dist/resources/wiki_resources.js.map +1 -0
- package/dist/security/path_guard.d.ts +8 -0
- package/dist/security/path_guard.d.ts.map +1 -0
- package/dist/security/path_guard.js +37 -0
- package/dist/security/path_guard.js.map +1 -0
- package/dist/security/process_guard.d.ts +8 -0
- package/dist/security/process_guard.d.ts.map +1 -0
- package/dist/security/process_guard.js +26 -0
- package/dist/security/process_guard.js.map +1 -0
- package/dist/security/redaction.d.ts +6 -0
- package/dist/security/redaction.d.ts.map +1 -0
- package/dist/security/redaction.js +49 -0
- package/dist/security/redaction.js.map +1 -0
- package/dist/server.d.ts +3 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +364 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/analyze_performance.d.ts +4 -0
- package/dist/tools/analyze_performance.d.ts.map +1 -0
- package/dist/tools/analyze_performance.js +20 -0
- package/dist/tools/analyze_performance.js.map +1 -0
- package/dist/tools/audit_net_security.d.ts +4 -0
- package/dist/tools/audit_net_security.d.ts.map +1 -0
- package/dist/tools/audit_net_security.js +19 -0
- package/dist/tools/audit_net_security.js.map +1 -0
- package/dist/tools/get_gmod_symbol.d.ts +4 -0
- package/dist/tools/get_gmod_symbol.d.ts.map +1 -0
- package/dist/tools/get_gmod_symbol.js +30 -0
- package/dist/tools/get_gmod_symbol.js.map +1 -0
- package/dist/tools/lint_glua.d.ts +4 -0
- package/dist/tools/lint_glua.d.ts.map +1 -0
- package/dist/tools/lint_glua.js +24 -0
- package/dist/tools/lint_glua.js.map +1 -0
- package/dist/tools/package_and_validate.d.ts +4 -0
- package/dist/tools/package_and_validate.d.ts.map +1 -0
- package/dist/tools/package_and_validate.js +23 -0
- package/dist/tools/package_and_validate.js.map +1 -0
- package/dist/tools/run_glua_test.d.ts +4 -0
- package/dist/tools/run_glua_test.d.ts.map +1 -0
- package/dist/tools/run_glua_test.js +15 -0
- package/dist/tools/run_glua_test.js.map +1 -0
- package/dist/tools/scaffold_gmod_component.d.ts +4 -0
- package/dist/tools/scaffold_gmod_component.d.ts.map +1 -0
- package/dist/tools/scaffold_gmod_component.js +16 -0
- package/dist/tools/scaffold_gmod_component.js.map +1 -0
- package/dist/tools/search_gmod_wiki.d.ts +4 -0
- package/dist/tools/search_gmod_wiki.d.ts.map +1 -0
- package/dist/tools/search_gmod_wiki.js +30 -0
- package/dist/tools/search_gmod_wiki.js.map +1 -0
- package/dist/tools/web_search_glua.d.ts +4 -0
- package/dist/tools/web_search_glua.d.ts.map +1 -0
- package/dist/tools/web_search_glua.js +15 -0
- package/dist/tools/web_search_glua.js.map +1 -0
- package/package.json +58 -0
- package/src/test_harness/lua/glua_mock.lua +383 -0
- package/src/test_harness/python/gmod_tester.py +156 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process_runner.js","sourceRoot":"","sources":["../../src/core/process_runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAe1C,MAAM,OAAO,aAAa;IACjB,MAAM,CAAC,KAAK,CAAC,OAAO,CACzB,MAAc,EACd,IAAc,EACd,OAA2B;QAE3B,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAEhC,MAAM,OAAO,GAAG,OAAO,EAAE,SAAS,IAAI,KAAK,CAAC;QAC5C,MAAM,SAAS,GAAG,OAAO,EAAE,SAAS,IAAI,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,cAAc;QAExE,MAAM,CAAC,KAAK,CAAC,yBAAyB,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE;YAChE,MAAM;YACN,IAAI;YACJ,GAAG,EAAE,OAAO,EAAE,GAAG;YACjB,OAAO;SACR,CAAC,CAAC;QAEH,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE;gBAC3D,GAAG,EAAE,OAAO,EAAE,GAAG;gBACjB,OAAO;gBACP,SAAS;gBACT,KAAK,EAAE,KAAK;gBACZ,GAAG,EAAE;oBACH,GAAG,OAAO,CAAC,GAAG;oBACd,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,CAAC;iBACxB;aACF,CAAC,CAAC;YAEH,OAAO;gBACL,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE;gBACzB,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE;gBACzB,QAAQ,EAAE,CAAC;aACZ,CAAC;QACJ,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,MAAM,KAAK,GAAG,GAOb,CAAC;YAEF,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;YAC9C,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;YAE9C,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAC/C,MAAM,IAAI,YAAY,CAAC;oBACrB,IAAI,EAAE,aAAa,CAAC,eAAe;oBACnC,OAAO,EAAE,YAAY,MAAM,qBAAqB,OAAO,KAAK;oBAC5D,WAAW,EAAE,sEAAsE;oBACnF,OAAO,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE;iBAC7C,CAAC,CAAC;YACL,CAAC;YAED,kGAAkG;YAClG,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACnC,OAAO;oBACL,MAAM;oBACN,MAAM;oBACN,QAAQ,EAAE,KAAK,CAAC,IAAI;iBACrB,CAAC;YACJ,CAAC;YAED,MAAM,IAAI,YAAY,CAAC;gBACrB,IAAI,EAAE,aAAa,CAAC,wBAAwB;gBAC5C,OAAO,EAAE,6BAA6B,MAAM,MAAM,KAAK,CAAC,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE;gBAChF,WAAW,EAAE,gBAAgB,MAAM,8EAA8E;gBACjH,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;aAC1B,CAAC,CAAC;QACL,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { GLuaDiagnostic } from "../../contracts/linter_contracts.js";
|
|
2
|
+
export type GModRealm = "server" | "client" | "shared" | "menu";
|
|
3
|
+
export interface RealmRule {
|
|
4
|
+
functionName: string;
|
|
5
|
+
allowedRealm: GModRealm[];
|
|
6
|
+
errorMessage: string;
|
|
7
|
+
}
|
|
8
|
+
export declare class GLuaAnalyzer {
|
|
9
|
+
static detectRealmFromPath(filePath: string): GModRealm;
|
|
10
|
+
static analyze(code: string, realm: GModRealm): GLuaDiagnostic[];
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=ast.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ast.d.ts","sourceRoot":"","sources":["../../../src/domain/glua/ast.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAErE,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEhE,MAAM,WAAW,SAAS;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,SAAS,EAAE,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;CACtB;AAmCD,qBAAa,YAAY;WACT,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS;WAoBhD,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,cAAc,EAAE;CAwIxE"}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
import { GLuaLexer, TokenType } from "./lexer.js";
|
|
2
|
+
const REALM_RESTRICTIONS = [
|
|
3
|
+
{
|
|
4
|
+
functionName: "util.AddNetworkString",
|
|
5
|
+
allowedRealm: ["server"],
|
|
6
|
+
errorMessage: "util.AddNetworkString can ONLY be called on the SERVER."
|
|
7
|
+
},
|
|
8
|
+
{
|
|
9
|
+
functionName: "vgui.Create",
|
|
10
|
+
allowedRealm: ["client", "menu"],
|
|
11
|
+
errorMessage: "vgui.Create is a CLIENT/MENU UI function and does not exist on the SERVER."
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
functionName: "LocalPlayer",
|
|
15
|
+
allowedRealm: ["client"],
|
|
16
|
+
errorMessage: "LocalPlayer() only exists on the CLIENT. On the SERVER, use entity/player references passed in hooks or net.Receive."
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
functionName: "surface.DrawRect",
|
|
20
|
+
allowedRealm: ["client"],
|
|
21
|
+
errorMessage: "surface rendering functions only exist on the CLIENT."
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
functionName: "draw.SimpleText",
|
|
25
|
+
allowedRealm: ["client"],
|
|
26
|
+
errorMessage: "draw library functions only exist on the CLIENT."
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
functionName: "cam.Start3D2D",
|
|
30
|
+
allowedRealm: ["client"],
|
|
31
|
+
errorMessage: "cam.Start3D2D only exists on the CLIENT."
|
|
32
|
+
}
|
|
33
|
+
];
|
|
34
|
+
export class GLuaAnalyzer {
|
|
35
|
+
static detectRealmFromPath(filePath) {
|
|
36
|
+
const normalized = filePath.replace(/\\/g, "/").toLowerCase();
|
|
37
|
+
const fileName = normalized.split("/").pop() ?? "";
|
|
38
|
+
if (fileName === "cl_init.lua" || fileName.startsWith("cl_") || normalized.includes("/client/")) {
|
|
39
|
+
return "client";
|
|
40
|
+
}
|
|
41
|
+
if (fileName === "init.lua" || fileName.startsWith("sv_") || normalized.includes("/server/")) {
|
|
42
|
+
return "server";
|
|
43
|
+
}
|
|
44
|
+
if (fileName === "shared.lua" || fileName.startsWith("sh_") || normalized.includes("/shared/")) {
|
|
45
|
+
return "shared";
|
|
46
|
+
}
|
|
47
|
+
if (normalized.includes("/menu/")) {
|
|
48
|
+
return "menu";
|
|
49
|
+
}
|
|
50
|
+
return "shared";
|
|
51
|
+
}
|
|
52
|
+
static analyze(code, realm) {
|
|
53
|
+
const diagnostics = [];
|
|
54
|
+
const lexer = new GLuaLexer(code);
|
|
55
|
+
const tokens = lexer.tokenize();
|
|
56
|
+
// Check line by line and token stream
|
|
57
|
+
for (let i = 0; i < tokens.length; i++) {
|
|
58
|
+
const token = tokens[i];
|
|
59
|
+
// Check realm-restricted calls
|
|
60
|
+
for (const rule of REALM_RESTRICTIONS) {
|
|
61
|
+
if (rule.functionName.includes(".")) {
|
|
62
|
+
const parts = rule.functionName.split(".");
|
|
63
|
+
if (token.type === TokenType.IDENTIFIER &&
|
|
64
|
+
token.value === parts[0] &&
|
|
65
|
+
tokens[i + 1]?.value === "." &&
|
|
66
|
+
tokens[i + 2]?.value === parts[1]) {
|
|
67
|
+
if (realm !== "shared" && !rule.allowedRealm.includes(realm)) {
|
|
68
|
+
diagnostics.push({
|
|
69
|
+
line: token.line,
|
|
70
|
+
column: token.column,
|
|
71
|
+
severity: "error",
|
|
72
|
+
code: "GMOD_REALM_MISMATCH",
|
|
73
|
+
message: rule.errorMessage,
|
|
74
|
+
suggestion: `Move this call to a ${rule.allowedRealm.join(" or ")} script or wrap in 'if ${rule.allowedRealm[0].toUpperCase()} then ... end'.`
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
if (token.type === TokenType.IDENTIFIER && token.value === rule.functionName) {
|
|
81
|
+
if (realm !== "shared" && !rule.allowedRealm.includes(realm)) {
|
|
82
|
+
diagnostics.push({
|
|
83
|
+
line: token.line,
|
|
84
|
+
column: token.column,
|
|
85
|
+
severity: "error",
|
|
86
|
+
code: "GMOD_REALM_MISMATCH",
|
|
87
|
+
message: rule.errorMessage,
|
|
88
|
+
suggestion: `Move this call to a ${rule.allowedRealm.join(" or ")} script or wrap in 'if ${rule.allowedRealm[0].toUpperCase()} then ... end'.`
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
// Check global pollution: "function Identifier(" without "local" preceding it
|
|
95
|
+
if (token.type === TokenType.KEYWORD && token.value === "function") {
|
|
96
|
+
const prevToken = tokens[i - 1];
|
|
97
|
+
const nextToken = tokens[i + 1];
|
|
98
|
+
if ((!prevToken || prevToken.value !== "local") &&
|
|
99
|
+
nextToken &&
|
|
100
|
+
nextToken.type === TokenType.IDENTIFIER &&
|
|
101
|
+
tokens[i + 2]?.value === "(") {
|
|
102
|
+
// If identifier is not namespaced (no ':' or '.')
|
|
103
|
+
if (tokens[i + 2]?.value !== "." && tokens[i + 2]?.value !== ":") {
|
|
104
|
+
diagnostics.push({
|
|
105
|
+
line: token.line,
|
|
106
|
+
column: token.column,
|
|
107
|
+
severity: "warning",
|
|
108
|
+
code: "GLOBAL_POLLUTION",
|
|
109
|
+
message: `Function '${nextToken.value}' is defined in the global scope.`,
|
|
110
|
+
suggestion: `Consider making it 'local function ${nextToken.value}' or namespacing it into an addon table.`
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
// Check deprecated / dangerous functions
|
|
116
|
+
if (token.type === TokenType.IDENTIFIER && token.value === "CompileString") {
|
|
117
|
+
diagnostics.push({
|
|
118
|
+
line: token.line,
|
|
119
|
+
column: token.column,
|
|
120
|
+
severity: "warning",
|
|
121
|
+
code: "DYNAMIC_CODE_EXECUTION",
|
|
122
|
+
message: "CompileString detected. Executing dynamic code may introduce backdoor or remote execution risks.",
|
|
123
|
+
suggestion: "Ensure input to CompileString is strictly vetted or avoid dynamic compilation."
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
if (token.type === TokenType.IDENTIFIER && token.value === "RunString") {
|
|
127
|
+
diagnostics.push({
|
|
128
|
+
line: token.line,
|
|
129
|
+
column: token.column,
|
|
130
|
+
severity: "warning",
|
|
131
|
+
code: "DYNAMIC_CODE_EXECUTION",
|
|
132
|
+
message: "RunString detected. Arbitrary string execution presents a severe security risk.",
|
|
133
|
+
suggestion: "Avoid RunString in production addons."
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
// Check net.ReadTable exploitation risk
|
|
137
|
+
if (token.type === TokenType.IDENTIFIER &&
|
|
138
|
+
token.value === "net" &&
|
|
139
|
+
tokens[i + 1]?.value === "." &&
|
|
140
|
+
tokens[i + 2]?.value === "ReadTable") {
|
|
141
|
+
diagnostics.push({
|
|
142
|
+
line: token.line,
|
|
143
|
+
column: token.column,
|
|
144
|
+
severity: "warning",
|
|
145
|
+
code: "UNRESTRICTED_TABLE_NETWORKING",
|
|
146
|
+
message: "net.ReadTable() detected. Arbitrary table deserialization over net messages is slow and susceptible to payload bloat or server freezes.",
|
|
147
|
+
suggestion: "Prefer structured primitive streaming (net.WriteUInt, net.WriteString) over net.WriteTable/net.ReadTable."
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
// Check for missing AddCSLuaFile in shared scripts
|
|
152
|
+
if (realm === "shared" && !code.includes("AddCSLuaFile")) {
|
|
153
|
+
diagnostics.push({
|
|
154
|
+
line: 1,
|
|
155
|
+
column: 1,
|
|
156
|
+
severity: "info",
|
|
157
|
+
code: "MISSING_ADDCSLUAFILE",
|
|
158
|
+
message: "Shared script is missing AddCSLuaFile().",
|
|
159
|
+
suggestion: "Add 'AddCSLuaFile()' at the very top of shared weapon/entity files so clients download them."
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
// Check for potential infinite loops
|
|
163
|
+
if (/while\s+true\s+do/.test(code) && !code.includes("coroutine.yield") && !code.includes("break")) {
|
|
164
|
+
diagnostics.push({
|
|
165
|
+
line: 1,
|
|
166
|
+
column: 1,
|
|
167
|
+
severity: "error",
|
|
168
|
+
code: "INFINITE_LOOP_RISK",
|
|
169
|
+
message: "Unbounded 'while true do' loop detected without break or coroutine.yield.",
|
|
170
|
+
suggestion: "Ensure the loop has a termination condition or yields execution."
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
return diagnostics;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
//# sourceMappingURL=ast.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ast.js","sourceRoot":"","sources":["../../../src/domain/glua/ast.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GLua Tokenizer supporting standard Lua 5.1 and Garry's Mod extensions:
|
|
3
|
+
* - Single-line C++ comments: //
|
|
4
|
+
* - Multi-line C comments: /* ... * /
|
|
5
|
+
* - C-style boolean operators: &&, ||, !=, !
|
|
6
|
+
* - 'continue' keyword
|
|
7
|
+
*/
|
|
8
|
+
export declare enum TokenType {
|
|
9
|
+
KEYWORD = "KEYWORD",
|
|
10
|
+
IDENTIFIER = "IDENTIFIER",
|
|
11
|
+
STRING = "STRING",
|
|
12
|
+
NUMBER = "NUMBER",
|
|
13
|
+
OPERATOR = "OPERATOR",
|
|
14
|
+
PUNCTUATION = "PUNCTUATION",
|
|
15
|
+
COMMENT = "COMMENT",
|
|
16
|
+
WHITESPACE = "WHITESPACE",
|
|
17
|
+
EOF = "EOF"
|
|
18
|
+
}
|
|
19
|
+
export interface Token {
|
|
20
|
+
type: TokenType;
|
|
21
|
+
value: string;
|
|
22
|
+
line: number;
|
|
23
|
+
column: number;
|
|
24
|
+
}
|
|
25
|
+
export declare class GLuaLexer {
|
|
26
|
+
private input;
|
|
27
|
+
private pos;
|
|
28
|
+
private line;
|
|
29
|
+
private column;
|
|
30
|
+
constructor(input: string);
|
|
31
|
+
tokenize(): Token[];
|
|
32
|
+
private peek;
|
|
33
|
+
private advance;
|
|
34
|
+
private makeToken;
|
|
35
|
+
private readSingleLineComment;
|
|
36
|
+
private readMultiLineCComment;
|
|
37
|
+
private readLuaComment;
|
|
38
|
+
private readString;
|
|
39
|
+
private readNumber;
|
|
40
|
+
private readIdentifier;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=lexer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lexer.d.ts","sourceRoot":"","sources":["../../../src/domain/glua/lexer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,oBAAY,SAAS;IACnB,OAAO,YAAY;IACnB,UAAU,eAAe;IACzB,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,QAAQ,aAAa;IACrB,WAAW,gBAAgB;IAC3B,OAAO,YAAY;IACnB,UAAU,eAAe;IACzB,GAAG,QAAQ;CACZ;AAED,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAUD,qBAAa,SAAS;IACpB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,GAAG,CAAK;IAChB,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,MAAM,CAAK;gBAEP,KAAK,EAAE,MAAM;IAIlB,QAAQ,IAAI,KAAK,EAAE;IAoG1B,OAAO,CAAC,IAAI;IAIZ,OAAO,CAAC,OAAO;IAYf,OAAO,CAAC,SAAS;IASjB,OAAO,CAAC,qBAAqB;IAY7B,OAAO,CAAC,qBAAqB;IAiB7B,OAAO,CAAC,cAAc;IAatB,OAAO,CAAC,UAAU;IA2BlB,OAAO,CAAC,UAAU;IAWlB,OAAO,CAAC,cAAc;CAWvB"}
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GLua Tokenizer supporting standard Lua 5.1 and Garry's Mod extensions:
|
|
3
|
+
* - Single-line C++ comments: //
|
|
4
|
+
* - Multi-line C comments: /* ... * /
|
|
5
|
+
* - C-style boolean operators: &&, ||, !=, !
|
|
6
|
+
* - 'continue' keyword
|
|
7
|
+
*/
|
|
8
|
+
export var TokenType;
|
|
9
|
+
(function (TokenType) {
|
|
10
|
+
TokenType["KEYWORD"] = "KEYWORD";
|
|
11
|
+
TokenType["IDENTIFIER"] = "IDENTIFIER";
|
|
12
|
+
TokenType["STRING"] = "STRING";
|
|
13
|
+
TokenType["NUMBER"] = "NUMBER";
|
|
14
|
+
TokenType["OPERATOR"] = "OPERATOR";
|
|
15
|
+
TokenType["PUNCTUATION"] = "PUNCTUATION";
|
|
16
|
+
TokenType["COMMENT"] = "COMMENT";
|
|
17
|
+
TokenType["WHITESPACE"] = "WHITESPACE";
|
|
18
|
+
TokenType["EOF"] = "EOF";
|
|
19
|
+
})(TokenType || (TokenType = {}));
|
|
20
|
+
const GLUA_KEYWORDS = new Set([
|
|
21
|
+
"and", "break", "do", "else", "elseif", "end", "false", "for", "function",
|
|
22
|
+
"if", "in", "local", "nil", "not", "or", "repeat", "return", "then",
|
|
23
|
+
"true", "until", "while",
|
|
24
|
+
// GMod specific
|
|
25
|
+
"continue"
|
|
26
|
+
]);
|
|
27
|
+
export class GLuaLexer {
|
|
28
|
+
input;
|
|
29
|
+
pos = 0;
|
|
30
|
+
line = 1;
|
|
31
|
+
column = 1;
|
|
32
|
+
constructor(input) {
|
|
33
|
+
this.input = input;
|
|
34
|
+
}
|
|
35
|
+
tokenize() {
|
|
36
|
+
const tokens = [];
|
|
37
|
+
while (this.pos < this.input.length) {
|
|
38
|
+
const char = this.input[this.pos];
|
|
39
|
+
// Whitespace
|
|
40
|
+
if (/\s/.test(char)) {
|
|
41
|
+
if (char === "\n") {
|
|
42
|
+
this.line++;
|
|
43
|
+
this.column = 1;
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
this.column++;
|
|
47
|
+
}
|
|
48
|
+
this.pos++;
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
51
|
+
// C++ style single-line comment (//)
|
|
52
|
+
if (char === "/" && this.peek() === "/") {
|
|
53
|
+
tokens.push(this.readSingleLineComment());
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
// C style multi-line comment (/* ... */)
|
|
57
|
+
if (char === "/" && this.peek() === "*") {
|
|
58
|
+
tokens.push(this.readMultiLineCComment());
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
// Lua comment (-- or --[[ ... ]])
|
|
62
|
+
if (char === "-" && this.peek() === "-") {
|
|
63
|
+
tokens.push(this.readLuaComment());
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
// Strings ('...' or "..." or [[...]])
|
|
67
|
+
if (char === '"' || char === "'") {
|
|
68
|
+
tokens.push(this.readString(char));
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
// C-style !=, &&, || operators
|
|
72
|
+
if (char === "!" && this.peek() === "=") {
|
|
73
|
+
tokens.push(this.makeToken(TokenType.OPERATOR, "!="));
|
|
74
|
+
this.advance(2);
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
if (char === "&" && this.peek() === "&") {
|
|
78
|
+
tokens.push(this.makeToken(TokenType.OPERATOR, "&&"));
|
|
79
|
+
this.advance(2);
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
82
|
+
if (char === "|" && this.peek() === "|") {
|
|
83
|
+
tokens.push(this.makeToken(TokenType.OPERATOR, "||"));
|
|
84
|
+
this.advance(2);
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
if (char === "=" && this.peek() === "=") {
|
|
88
|
+
tokens.push(this.makeToken(TokenType.OPERATOR, "=="));
|
|
89
|
+
this.advance(2);
|
|
90
|
+
continue;
|
|
91
|
+
}
|
|
92
|
+
if (char === "~" && this.peek() === "=") {
|
|
93
|
+
tokens.push(this.makeToken(TokenType.OPERATOR, "~="));
|
|
94
|
+
this.advance(2);
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
97
|
+
if (char === "." && this.peek() === ".") {
|
|
98
|
+
tokens.push(this.makeToken(TokenType.OPERATOR, ".."));
|
|
99
|
+
this.advance(2);
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
// Numbers
|
|
103
|
+
if (/[0-9]/.test(char)) {
|
|
104
|
+
tokens.push(this.readNumber());
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
// Identifiers / Keywords
|
|
108
|
+
if (/[a-zA-Z_]/.test(char)) {
|
|
109
|
+
tokens.push(this.readIdentifier());
|
|
110
|
+
continue;
|
|
111
|
+
}
|
|
112
|
+
// Generic punctuation/operator
|
|
113
|
+
tokens.push(this.makeToken(TokenType.PUNCTUATION, char));
|
|
114
|
+
this.advance(1);
|
|
115
|
+
}
|
|
116
|
+
tokens.push({
|
|
117
|
+
type: TokenType.EOF,
|
|
118
|
+
value: "",
|
|
119
|
+
line: this.line,
|
|
120
|
+
column: this.column
|
|
121
|
+
});
|
|
122
|
+
return tokens;
|
|
123
|
+
}
|
|
124
|
+
peek(offset = 1) {
|
|
125
|
+
return this.pos + offset < this.input.length ? this.input[this.pos + offset] : "";
|
|
126
|
+
}
|
|
127
|
+
advance(n = 1) {
|
|
128
|
+
for (let i = 0; i < n; i++) {
|
|
129
|
+
if (this.input[this.pos] === "\n") {
|
|
130
|
+
this.line++;
|
|
131
|
+
this.column = 1;
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
this.column++;
|
|
135
|
+
}
|
|
136
|
+
this.pos++;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
makeToken(type, value) {
|
|
140
|
+
return {
|
|
141
|
+
type,
|
|
142
|
+
value,
|
|
143
|
+
line: this.line,
|
|
144
|
+
column: this.column
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
readSingleLineComment() {
|
|
148
|
+
const startLine = this.line;
|
|
149
|
+
const startCol = this.column;
|
|
150
|
+
let comment = "";
|
|
151
|
+
while (this.pos < this.input.length && this.input[this.pos] !== "\n") {
|
|
152
|
+
comment += this.input[this.pos];
|
|
153
|
+
this.pos++;
|
|
154
|
+
this.column++;
|
|
155
|
+
}
|
|
156
|
+
return { type: TokenType.COMMENT, value: comment, line: startLine, column: startCol };
|
|
157
|
+
}
|
|
158
|
+
readMultiLineCComment() {
|
|
159
|
+
const startLine = this.line;
|
|
160
|
+
const startCol = this.column;
|
|
161
|
+
let comment = "/*";
|
|
162
|
+
this.advance(2); // skip /*
|
|
163
|
+
while (this.pos < this.input.length) {
|
|
164
|
+
if (this.input[this.pos] === "*" && this.peek() === "/") {
|
|
165
|
+
comment += "*/";
|
|
166
|
+
this.advance(2);
|
|
167
|
+
break;
|
|
168
|
+
}
|
|
169
|
+
comment += this.input[this.pos];
|
|
170
|
+
this.advance(1);
|
|
171
|
+
}
|
|
172
|
+
return { type: TokenType.COMMENT, value: comment, line: startLine, column: startCol };
|
|
173
|
+
}
|
|
174
|
+
readLuaComment() {
|
|
175
|
+
const startLine = this.line;
|
|
176
|
+
const startCol = this.column;
|
|
177
|
+
let comment = "--";
|
|
178
|
+
this.advance(2);
|
|
179
|
+
while (this.pos < this.input.length && this.input[this.pos] !== "\n") {
|
|
180
|
+
comment += this.input[this.pos];
|
|
181
|
+
this.pos++;
|
|
182
|
+
this.column++;
|
|
183
|
+
}
|
|
184
|
+
return { type: TokenType.COMMENT, value: comment, line: startLine, column: startCol };
|
|
185
|
+
}
|
|
186
|
+
readString(quote) {
|
|
187
|
+
const startLine = this.line;
|
|
188
|
+
const startCol = this.column;
|
|
189
|
+
let str = quote;
|
|
190
|
+
this.advance(1); // skip opening quote
|
|
191
|
+
while (this.pos < this.input.length) {
|
|
192
|
+
const char = this.input[this.pos];
|
|
193
|
+
str += char;
|
|
194
|
+
if (char === "\\") {
|
|
195
|
+
this.advance(1);
|
|
196
|
+
if (this.pos < this.input.length) {
|
|
197
|
+
str += this.input[this.pos];
|
|
198
|
+
this.advance(1);
|
|
199
|
+
}
|
|
200
|
+
continue;
|
|
201
|
+
}
|
|
202
|
+
if (char === quote) {
|
|
203
|
+
this.advance(1);
|
|
204
|
+
break;
|
|
205
|
+
}
|
|
206
|
+
this.advance(1);
|
|
207
|
+
}
|
|
208
|
+
return { type: TokenType.STRING, value: str, line: startLine, column: startCol };
|
|
209
|
+
}
|
|
210
|
+
readNumber() {
|
|
211
|
+
const startLine = this.line;
|
|
212
|
+
const startCol = this.column;
|
|
213
|
+
let num = "";
|
|
214
|
+
while (this.pos < this.input.length && /[0-9.xXa-fA-F]/.test(this.input[this.pos])) {
|
|
215
|
+
num += this.input[this.pos];
|
|
216
|
+
this.advance(1);
|
|
217
|
+
}
|
|
218
|
+
return { type: TokenType.NUMBER, value: num, line: startLine, column: startCol };
|
|
219
|
+
}
|
|
220
|
+
readIdentifier() {
|
|
221
|
+
const startLine = this.line;
|
|
222
|
+
const startCol = this.column;
|
|
223
|
+
let id = "";
|
|
224
|
+
while (this.pos < this.input.length && /[a-zA-Z0-9_]/.test(this.input[this.pos])) {
|
|
225
|
+
id += this.input[this.pos];
|
|
226
|
+
this.advance(1);
|
|
227
|
+
}
|
|
228
|
+
const type = GLUA_KEYWORDS.has(id) ? TokenType.KEYWORD : TokenType.IDENTIFIER;
|
|
229
|
+
return { type, value: id, line: startLine, column: startCol };
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
//# sourceMappingURL=lexer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lexer.js","sourceRoot":"","sources":["../../../src/domain/glua/lexer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"net_auditor.d.ts","sourceRoot":"","sources":["../../../src/domain/networking/net_auditor.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EAGvB,MAAM,uCAAuC,CAAC;AAI/C,qBAAa,UAAU;WACD,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,sBAAsB,CAAC;CAmNvG"}
|