@amxts/core 0.1.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 +162 -0
- package/README.ru.md +162 -0
- package/amxmodx/base/include/amxconst.inc +594 -0
- package/amxmodx/base/include/amxmisc.inc +902 -0
- package/amxmodx/base/include/amxmodx.inc +3447 -0
- package/amxmodx/base/include/amxmodx_version.inc +20 -0
- package/amxmodx/base/include/cellarray.inc +525 -0
- package/amxmodx/base/include/cellstack.inc +166 -0
- package/amxmodx/base/include/celltrie.inc +412 -0
- package/amxmodx/base/include/core.inc +202 -0
- package/amxmodx/base/include/csstats.inc +298 -0
- package/amxmodx/base/include/csstats_const.inc +29 -0
- package/amxmodx/base/include/cstrike.inc +1287 -0
- package/amxmodx/base/include/cstrike_const.inc +521 -0
- package/amxmodx/base/include/csx.inc +259 -0
- package/amxmodx/base/include/cvars.inc +547 -0
- package/amxmodx/base/include/datapack.inc +161 -0
- package/amxmodx/base/include/dbi.inc +154 -0
- package/amxmodx/base/include/dodconst.inc +152 -0
- package/amxmodx/base/include/dodfun.inc +152 -0
- package/amxmodx/base/include/dodstats.inc +69 -0
- package/amxmodx/base/include/dodx.inc +161 -0
- package/amxmodx/base/include/engine.inc +1343 -0
- package/amxmodx/base/include/engine_const.inc +310 -0
- package/amxmodx/base/include/engine_stocks.inc +248 -0
- package/amxmodx/base/include/esf.inc +70 -0
- package/amxmodx/base/include/esf_const.inc +74 -0
- package/amxmodx/base/include/fakemeta.inc +1127 -0
- package/amxmodx/base/include/fakemeta_const.inc +793 -0
- package/amxmodx/base/include/fakemeta_stocks.inc +395 -0
- package/amxmodx/base/include/fakemeta_util.inc +882 -0
- package/amxmodx/base/include/file.inc +666 -0
- package/amxmodx/base/include/float.inc +422 -0
- package/amxmodx/base/include/fun.inc +333 -0
- package/amxmodx/base/include/gameconfig.inc +93 -0
- package/amxmodx/base/include/geoip.inc +264 -0
- package/amxmodx/base/include/ham_const.inc +4352 -0
- package/amxmodx/base/include/hamsandwich.inc +439 -0
- package/amxmodx/base/include/hlsdk_const.inc +808 -0
- package/amxmodx/base/include/json.inc +777 -0
- package/amxmodx/base/include/lang.inc +119 -0
- package/amxmodx/base/include/message_const.inc +1130 -0
- package/amxmodx/base/include/message_stocks.inc +161 -0
- package/amxmodx/base/include/messages.inc +604 -0
- package/amxmodx/base/include/newmenus.inc +387 -0
- package/amxmodx/base/include/ns.inc +754 -0
- package/amxmodx/base/include/ns_const.inc +196 -0
- package/amxmodx/base/include/nvault.inc +154 -0
- package/amxmodx/base/include/regex.inc +348 -0
- package/amxmodx/base/include/sockets.inc +183 -0
- package/amxmodx/base/include/sorting.inc +107 -0
- package/amxmodx/base/include/sqlx.inc +582 -0
- package/amxmodx/base/include/string.inc +786 -0
- package/amxmodx/base/include/string_const.inc +156 -0
- package/amxmodx/base/include/string_stocks.inc +325 -0
- package/amxmodx/base/include/textparse_ini.inc +214 -0
- package/amxmodx/base/include/textparse_smc.inc +261 -0
- package/amxmodx/base/include/tfcconst.inc +84 -0
- package/amxmodx/base/include/tfcstats.inc +62 -0
- package/amxmodx/base/include/tfcx.inc +148 -0
- package/amxmodx/base/include/time.inc +118 -0
- package/amxmodx/base/include/tsconst.inc +154 -0
- package/amxmodx/base/include/tsfun.inc +198 -0
- package/amxmodx/base/include/tsstats.inc +65 -0
- package/amxmodx/base/include/tsx.inc +88 -0
- package/amxmodx/base/include/vault.inc +60 -0
- package/amxmodx/base/include/vector.inc +131 -0
- package/amxmodx/base/include/xs.inc +1570 -0
- package/as/amxts.d.ts +153 -0
- package/as/constants.ts +4730 -0
- package/as/effects.ts +1449 -0
- package/as/entities.ts +5482 -0
- package/as/events.ts +3054 -0
- package/as/facade.ts +4639 -0
- package/as/flags.ts +299 -0
- package/as/fs.ts +287 -0
- package/as/hooks.ts +18536 -0
- package/as/kit.ts +25 -0
- package/as/lib/check.ts +86 -0
- package/as/modules/http.ts +184 -0
- package/as/natives.ts +11845 -0
- package/as/os.ts +30 -0
- package/as/promise.ts +1392 -0
- package/as/promise.types.d.ts +82 -0
- package/as/remote.ts +288 -0
- package/as/tsconfig.json +22 -0
- package/as/vector.ts +65 -0
- package/bin/amxts.mjs +10 -0
- package/includes/menu_core.inc +355 -0
- package/includes/order.txt +54 -0
- package/includes/sources.json +27 -0
- package/includes/universal_config.inc +355 -0
- package/lint/oxlint-plugin.mjs +77 -0
- package/node_modules/assemblyscript/LICENSE +201 -0
- package/node_modules/assemblyscript/NOTICE +93 -0
- package/node_modules/assemblyscript/package.json +63 -0
- package/node_modules/assemblyscript/std/README.md +6 -0
- package/node_modules/assemblyscript/std/assembly/array.ts +526 -0
- package/node_modules/assemblyscript/std/assembly/arraybuffer.ts +77 -0
- package/node_modules/assemblyscript/std/assembly/atomics.ts +127 -0
- package/node_modules/assemblyscript/std/assembly/bindings/asyncify.ts +16 -0
- package/node_modules/assemblyscript/std/assembly/bindings/dom.ts +291 -0
- package/node_modules/assemblyscript/std/assembly/bindings/node.ts +6 -0
- package/node_modules/assemblyscript/std/assembly/builtins.ts +2631 -0
- package/node_modules/assemblyscript/std/assembly/compat.ts +2 -0
- package/node_modules/assemblyscript/std/assembly/console.ts +42 -0
- package/node_modules/assemblyscript/std/assembly/crypto.ts +9 -0
- package/node_modules/assemblyscript/std/assembly/dataview.ts +181 -0
- package/node_modules/assemblyscript/std/assembly/date.ts +373 -0
- package/node_modules/assemblyscript/std/assembly/diagnostics.ts +11 -0
- package/node_modules/assemblyscript/std/assembly/error.ts +44 -0
- package/node_modules/assemblyscript/std/assembly/function.ts +38 -0
- package/node_modules/assemblyscript/std/assembly/index.d.ts +2822 -0
- package/node_modules/assemblyscript/std/assembly/iterator.ts +35 -0
- package/node_modules/assemblyscript/std/assembly/map.ts +260 -0
- package/node_modules/assemblyscript/std/assembly/math.ts +3289 -0
- package/node_modules/assemblyscript/std/assembly/memory.ts +123 -0
- package/node_modules/assemblyscript/std/assembly/number.ts +388 -0
- package/node_modules/assemblyscript/std/assembly/object.ts +36 -0
- package/node_modules/assemblyscript/std/assembly/performance.ts +9 -0
- package/node_modules/assemblyscript/std/assembly/polyfills.ts +27 -0
- package/node_modules/assemblyscript/std/assembly/process.ts +50 -0
- package/node_modules/assemblyscript/std/assembly/reference.ts +48 -0
- package/node_modules/assemblyscript/std/assembly/regexp.ts +12 -0
- package/node_modules/assemblyscript/std/assembly/rt/README.md +83 -0
- package/node_modules/assemblyscript/std/assembly/rt/common.ts +81 -0
- package/node_modules/assemblyscript/std/assembly/rt/index-incremental.ts +2 -0
- package/node_modules/assemblyscript/std/assembly/rt/index-minimal.ts +2 -0
- package/node_modules/assemblyscript/std/assembly/rt/index-stub.ts +1 -0
- package/node_modules/assemblyscript/std/assembly/rt/index.d.ts +37 -0
- package/node_modules/assemblyscript/std/assembly/rt/itcms.ts +419 -0
- package/node_modules/assemblyscript/std/assembly/rt/rtrace.ts +15 -0
- package/node_modules/assemblyscript/std/assembly/rt/stub.ts +133 -0
- package/node_modules/assemblyscript/std/assembly/rt/tcms.ts +254 -0
- package/node_modules/assemblyscript/std/assembly/rt/tlsf.ts +592 -0
- package/node_modules/assemblyscript/std/assembly/rt.ts +87 -0
- package/node_modules/assemblyscript/std/assembly/set.ts +220 -0
- package/node_modules/assemblyscript/std/assembly/shared/feature.ts +65 -0
- package/node_modules/assemblyscript/std/assembly/shared/runtime.ts +11 -0
- package/node_modules/assemblyscript/std/assembly/shared/target.ts +11 -0
- package/node_modules/assemblyscript/std/assembly/shared/tsconfig.json +11 -0
- package/node_modules/assemblyscript/std/assembly/shared/typeinfo.ts +72 -0
- package/node_modules/assemblyscript/std/assembly/staticarray.ts +401 -0
- package/node_modules/assemblyscript/std/assembly/string.ts +847 -0
- package/node_modules/assemblyscript/std/assembly/symbol.ts +114 -0
- package/node_modules/assemblyscript/std/assembly/table.ts +16 -0
- package/node_modules/assemblyscript/std/assembly/tsconfig.json +6 -0
- package/node_modules/assemblyscript/std/assembly/typedarray.ts +1945 -0
- package/node_modules/assemblyscript/std/assembly/uri.ts +17 -0
- package/node_modules/assemblyscript/std/assembly/util/bytes.ts +107 -0
- package/node_modules/assemblyscript/std/assembly/util/casemap.ts +497 -0
- package/node_modules/assemblyscript/std/assembly/util/error.ts +54 -0
- package/node_modules/assemblyscript/std/assembly/util/hash.ts +117 -0
- package/node_modules/assemblyscript/std/assembly/util/math.ts +1922 -0
- package/node_modules/assemblyscript/std/assembly/util/memory.ts +290 -0
- package/node_modules/assemblyscript/std/assembly/util/number.ts +873 -0
- package/node_modules/assemblyscript/std/assembly/util/sort.ts +313 -0
- package/node_modules/assemblyscript/std/assembly/util/string.ts +1202 -0
- package/node_modules/assemblyscript/std/assembly/util/uri.ts +275 -0
- package/node_modules/assemblyscript/std/assembly/vector.ts +4 -0
- package/node_modules/assemblyscript/std/assembly.json +16 -0
- package/node_modules/assemblyscript/std/portable/index.d.ts +462 -0
- package/node_modules/assemblyscript/std/portable/index.js +416 -0
- package/node_modules/assemblyscript/std/portable.json +11 -0
- package/node_modules/assemblyscript/std/types/assembly/index.d.ts +1 -0
- package/node_modules/assemblyscript/std/types/assembly/package.json +3 -0
- package/node_modules/assemblyscript/std/types/portable/index.d.ts +1 -0
- package/node_modules/assemblyscript/std/types/portable/package.json +3 -0
- package/node_modules/assemblyscript/tsconfig-base.json +13 -0
- package/package.json +112 -0
- package/runtime/deps/assemblyscript/LICENSE +201 -0
- package/runtime/deps/assemblyscript/NOTICE +93 -0
- package/runtime/deps/assemblyscript/bin/asc.js +35 -0
- package/runtime/deps/assemblyscript/dist/asc.js +25035 -0
- package/runtime/deps/assemblyscript/dist/assemblyscript.js +337 -0
- package/runtime/deps/assemblyscript/node_modules/binaryen/LICENSE +201 -0
- package/runtime/deps/assemblyscript/node_modules/binaryen/index.js +28905 -0
- package/runtime/deps/assemblyscript/node_modules/binaryen/package.json +50 -0
- package/runtime/deps/assemblyscript/node_modules/long/LICENSE +202 -0
- package/runtime/deps/assemblyscript/node_modules/long/index.js +1581 -0
- package/runtime/deps/assemblyscript/node_modules/long/package.json +58 -0
- package/runtime/deps/assemblyscript/package.json +114 -0
- package/runtime/host/amxts.inc +85 -0
- package/runtime/licenses/AMXX-LICENSE.txt +34 -0
- package/runtime/licenses/AssemblyScript-LICENSE +201 -0
- package/runtime/licenses/AssemblyScript-NOTICE +93 -0
- package/runtime/licenses/Binaryen-LICENSE +201 -0
- package/runtime/licenses/Bun-LICENSE.md +84 -0
- package/runtime/licenses/GPL-3.0.txt +674 -0
- package/runtime/licenses/LLVM-LICENSE.TXT +279 -0
- package/runtime/licenses/README.md +25 -0
- package/runtime/licenses/WAMR-LICENSE +219 -0
- package/runtime/natives.txt +1095 -0
- package/runtime/patches/README.md +59 -0
- package/runtime/patches/assemblyscript-0.28.20-amxts.patch +14174 -0
- package/runtime/patches/wamr-2.4.5-amxts.patch +364 -0
- package/scripts/apply-docs.ts +508 -0
- package/scripts/asc.ts +27 -0
- package/scripts/auto-imports.ts +258 -0
- package/scripts/build-wasm.ts +595 -0
- package/scripts/check.ts +93 -0
- package/scripts/compile-cache.ts +179 -0
- package/scripts/compile.ts +401 -0
- package/scripts/docker-server.ts +73 -0
- package/scripts/docs/as/amxts.ts +210 -0
- package/scripts/docs/as/effects.ts +1684 -0
- package/scripts/docs/as/facade.ts +3302 -0
- package/scripts/docs/as/fs.ts +173 -0
- package/scripts/docs/as/lib/check.ts +68 -0
- package/scripts/docs/as/modules/http.ts +66 -0
- package/scripts/docs/as/os.ts +16 -0
- package/scripts/docs/as/promise.ts +132 -0
- package/scripts/docs/as/promise.types.ts +63 -0
- package/scripts/docs/as/vector.ts +48 -0
- package/scripts/docs/entities.ts +2338 -0
- package/scripts/docs/events.ts +245 -0
- package/scripts/docs/game.ts +497 -0
- package/scripts/docs/messages.ts +148 -0
- package/scripts/file-contents.ts +74 -0
- package/scripts/includes.ts +134 -0
- package/scripts/player-fields.ts +866 -0
- package/scripts/plugin-cache.ts +92 -0
- package/scripts/plugin-natives.ts +1157 -0
- package/scripts/prebuilt.ts +268 -0
- package/scripts/prepare.ts +134 -0
- package/scripts/project.ts +973 -0
- package/scripts/run.ts +28 -0
- package/scripts/shared-modules.ts +906 -0
- package/scripts/system.ts +33 -0
- package/scripts/tracked-fs.ts +115 -0
- package/scripts/typed-configs.ts +788 -0
- package/scripts/ui.ts +77 -0
- package/src/cli-api.mjs +175 -0
- package/src/parser/include-parser.ts +506 -0
- package/src/system.mjs +155 -0
- package/src/testing/compile-cache.ts +31 -0
- package/src/testing/compile.ts +222 -0
- package/src/testing/coroutines.ts +191 -0
- package/src/testing/index.ts +39 -0
- package/src/testing/kits.ts +55 -0
- package/src/testing/memory.ts +125 -0
- package/src/testing/natives.ts +925 -0
- package/src/testing/server.ts +1874 -0
- package/src/testing/setup.ts +63 -0
- package/src/testing/tables.ts +139 -0
- package/src/types.ts +51 -0
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
// What `dev` rebuilds for: a source file whose contents changed.
|
|
2
|
+
//
|
|
3
|
+
// A watcher hears more than edits. An editor saves a file it did not change,
|
|
4
|
+
// a package manager writes a module package again as it was, a tool touches
|
|
5
|
+
// only a file's time - each is an event, and none is a change to build. So
|
|
6
|
+
// the files are known by a hash of what they hold, and an event counts only
|
|
7
|
+
// when that hash is not the one seen last.
|
|
8
|
+
import { createHash } from 'node:crypto';
|
|
9
|
+
import { readdirSync, readFileSync } from 'node:fs';
|
|
10
|
+
import { isAbsolute, join, relative, resolve } from 'node:path';
|
|
11
|
+
|
|
12
|
+
/** Whether `path` is `dir` or inside it. */
|
|
13
|
+
function inside(dir: string, path: string): boolean {
|
|
14
|
+
const rel = relative(dir, path);
|
|
15
|
+
return !rel.startsWith('..') && !isAbsolute(rel);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* The file a watcher of `folder` names - `file`, relative to it - when a
|
|
20
|
+
* build reads it: a .ts, not a declaration file the editor config has, and
|
|
21
|
+
* not in node_modules or the folders in `skip`. Null for any other.
|
|
22
|
+
*/
|
|
23
|
+
export function sourceIn(folder: string, file: string, skip: string[] = []): string | null {
|
|
24
|
+
const path = join(folder, file);
|
|
25
|
+
const source = file.endsWith('.ts') && !file.endsWith('.d.ts') && !file.split(/[\\/]/).includes('node_modules');
|
|
26
|
+
return source && !skip.some(dir => inside(dir, path)) ? path : null;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/** The files under `folder` sourceIn() takes; node_modules is not looked into. */
|
|
30
|
+
export function sourcesIn(folder: string, skip: string[] = []): string[] {
|
|
31
|
+
const walk = (dir: string): string[] => {
|
|
32
|
+
let entries;
|
|
33
|
+
try {
|
|
34
|
+
entries = readdirSync(join(folder, dir), { withFileTypes: true });
|
|
35
|
+
} catch {
|
|
36
|
+
return [];
|
|
37
|
+
}
|
|
38
|
+
return entries.flatMap((entry) => {
|
|
39
|
+
const file = join(dir, entry.name);
|
|
40
|
+
if (entry.isDirectory()) return entry.name === 'node_modules' ? [] : walk(file);
|
|
41
|
+
return sourceIn(folder, file, skip) ?? [];
|
|
42
|
+
});
|
|
43
|
+
};
|
|
44
|
+
return walk('');
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/** What a file holds, as a hash; null when it is not there. */
|
|
48
|
+
function contentsOf(file: string): string | null {
|
|
49
|
+
try {
|
|
50
|
+
return createHash('sha1').update(readFileSync(file)).digest('hex');
|
|
51
|
+
} catch {
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/** Files known by what they hold. */
|
|
57
|
+
export class FileContents {
|
|
58
|
+
private seen = new Map<string, string | null>();
|
|
59
|
+
|
|
60
|
+
constructor(files: string[]) {
|
|
61
|
+
for (const file of files) this.seen.set(resolve(file), contentsOf(file));
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Of these files, the ones that hold something else than when they were
|
|
66
|
+
* seen last - a new file and one gone included. Each is seen as it is now.
|
|
67
|
+
*/
|
|
68
|
+
changed(files: string[]): string[] {
|
|
69
|
+
const now = [...new Set(files.map(file => resolve(file)))].map(file => ({ file, contents: contentsOf(file) }));
|
|
70
|
+
const changed = now.filter(each => (this.seen.get(each.file) ?? null) !== each.contents);
|
|
71
|
+
for (const each of now) this.seen.set(each.file, each.contents);
|
|
72
|
+
return changed.map(each => each.file);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
// scripts/includes.ts
|
|
2
|
+
/**
|
|
3
|
+
* Where .inc files come from. The AMX Mod X distribution in amxmodx/ carries the
|
|
4
|
+
* standard set; the core's includes/ carries its own - order.txt and the
|
|
5
|
+
* contracts of the Pawn plugins the official modules stand in for - and
|
|
6
|
+
* includes/vendor/ the third-party ones the API is generated from (ReAPI and
|
|
7
|
+
* the rehlds constants, easy_http, resemiclip), which `bun run setup` fetches
|
|
8
|
+
* as includes/sources.json pins them.
|
|
9
|
+
*
|
|
10
|
+
* A project looks in its own folders first: its includes/ (the includes of
|
|
11
|
+
* the Pawn plugins it talks to), then its server's - the
|
|
12
|
+
* addons/amxmodx/scripting/include beside AMXTS_SERVER when it is there, else
|
|
13
|
+
* the ones the amxts command fetched into .amxts/include - then the core's
|
|
14
|
+
* includes/ and AMX Mod X's. The core's includes/vendor/ is the core's own:
|
|
15
|
+
* a project sees what its server has.
|
|
16
|
+
*
|
|
17
|
+
* Everything available is parsed for its natives, but the host plugin pulls only
|
|
18
|
+
* what order.txt lists: referencing a native of a module the server does not
|
|
19
|
+
* load makes AMX Mod X refuse the plugin, and the runtime goes down with it.
|
|
20
|
+
*/
|
|
21
|
+
import { realpathSync } from 'node:fs';
|
|
22
|
+
import { join, resolve } from 'node:path';
|
|
23
|
+
import process from 'node:process';
|
|
24
|
+
import { fileURLToPath } from 'node:url';
|
|
25
|
+
import { existsSync, readdirSync, readFileSync } from './tracked-fs';
|
|
26
|
+
|
|
27
|
+
const CORE = resolve(fileURLToPath(new URL('..', import.meta.url)));
|
|
28
|
+
|
|
29
|
+
/** The third-party includes the core generates the API from: `bun run setup` fetches them. */
|
|
30
|
+
export const VENDOR = join(CORE, 'includes', 'vendor');
|
|
31
|
+
|
|
32
|
+
function same(a: string, b: string): boolean {
|
|
33
|
+
try {
|
|
34
|
+
return realpathSync(a) === realpathSync(b);
|
|
35
|
+
} catch {
|
|
36
|
+
return resolve(a) === resolve(b);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/** The server's own includes: addons/amxmodx/scripting/include beside AMXTS_SERVER (addons/amxts), when it is there. */
|
|
41
|
+
export function serverIncludes(): string | null {
|
|
42
|
+
const server = process.env.AMXTS_SERVER;
|
|
43
|
+
if (!server) return null;
|
|
44
|
+
const dir = resolve(server, '..', 'amxmodx', 'scripting', 'include');
|
|
45
|
+
return existsSync(dir) ? dir : null;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/** The folders includes are looked in for a project, first to last. */
|
|
49
|
+
export function includeDirs(project = process.cwd()): string[] {
|
|
50
|
+
const own = join(project, 'includes');
|
|
51
|
+
const amxmodx = join(CORE, 'amxmodx/base/include');
|
|
52
|
+
if (same(project, CORE)) return [own, VENDOR, amxmodx];
|
|
53
|
+
const server = serverIncludes();
|
|
54
|
+
return [...new Set([own, server ?? join(project, '.amxts', 'include'), join(CORE, 'includes'), amxmodx])];
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
const DIRS = includeDirs();
|
|
58
|
+
|
|
59
|
+
function namesIn(dir: string): string[] {
|
|
60
|
+
return existsSync(dir)
|
|
61
|
+
? readdirSync(dir).filter(f => f.endsWith('.inc')).map(f => f.replace('.inc', ''))
|
|
62
|
+
: [];
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
const located = new Map<string, string>();
|
|
66
|
+
for (const dir of DIRS) {
|
|
67
|
+
for (const name of namesIn(dir)) {
|
|
68
|
+
if (!located.has(name)) located.set(name, join(dir, `${name}.inc`));
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export function listIncludes(): string[] {
|
|
73
|
+
return [...located.keys()];
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export function includePath(name: string): string {
|
|
77
|
+
const path = located.get(name);
|
|
78
|
+
if (!path) throw new Error(`include not found: ${name}`);
|
|
79
|
+
|
|
80
|
+
return path;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
export function readInclude(name: string): string {
|
|
84
|
+
return readFileSync(includePath(name), 'utf-8');
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Parses includes/order.txt. A bare name is included and (by the host
|
|
89
|
+
* generator) pulled; a line starting with `-` is a deny marker — the name
|
|
90
|
+
* still has to resolve (reapi.inc unconditionally #includes reapi_vtc,
|
|
91
|
+
* reapi_reunion and reapi_rechecker, so they must be on disk to compile it),
|
|
92
|
+
* but it is excluded from whatever build the caller pulls into a native
|
|
93
|
+
* table. A #include costs nothing; a native reference does, because AMX Mod X
|
|
94
|
+
* refuses to load a plugin whose native table names a module the server does
|
|
95
|
+
* not have loaded.
|
|
96
|
+
*/
|
|
97
|
+
export function parseOrder(content: string): { includes: string[]; denied: Set<string> } {
|
|
98
|
+
const lines = content
|
|
99
|
+
.split('\n')
|
|
100
|
+
.map(l => l.trim())
|
|
101
|
+
.filter(l => l && !l.startsWith('#'));
|
|
102
|
+
|
|
103
|
+
const includes: string[] = [];
|
|
104
|
+
const denied = new Set<string>();
|
|
105
|
+
|
|
106
|
+
for (const line of lines) {
|
|
107
|
+
if (line.startsWith('-')) {
|
|
108
|
+
denied.add(line.slice(1).replace(/\.inc$/, ''));
|
|
109
|
+
} else {
|
|
110
|
+
includes.push(line.replace(/\.inc$/, ''));
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
return { includes, denied };
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/** The listed names plus everything they #include, recursively. */
|
|
118
|
+
export function resolveTransitive(names: string[]): string[] {
|
|
119
|
+
const seen = new Set<string>();
|
|
120
|
+
const queue = [...names];
|
|
121
|
+
|
|
122
|
+
while (queue.length > 0) {
|
|
123
|
+
const name = queue.shift()!;
|
|
124
|
+
if (seen.has(name) || !located.has(name)) continue;
|
|
125
|
+
seen.add(name);
|
|
126
|
+
|
|
127
|
+
for (const line of readInclude(name).split('\n')) {
|
|
128
|
+
const match = line.match(/^\s*#include\s+[<"]([^>"]+)[>"]/);
|
|
129
|
+
if (match) queue.push(match[1]);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
return [...seen];
|
|
134
|
+
}
|