ticbuild 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/.attachments/support_me_on_kofi_beige.png +0 -0
- package/.env.example +3 -0
- package/.prettierignore +10 -0
- package/LICENSE +15 -0
- package/README.md +429 -0
- package/debug/obj/resolvedManifest.ticbuild.jsonc +108 -0
- package/dist/backend/ImportedResource.d.ts +11 -0
- package/dist/backend/ImportedResource.d.ts.map +1 -0
- package/dist/backend/ImportedResource.js +53 -0
- package/dist/backend/ImportedResource.js.map +1 -0
- package/dist/backend/ImportedResourceTypes.d.ts +24 -0
- package/dist/backend/ImportedResourceTypes.d.ts.map +1 -0
- package/dist/backend/ImportedResourceTypes.js +35 -0
- package/dist/backend/ImportedResourceTypes.js.map +1 -0
- package/dist/backend/codeBanking.test.d.ts +2 -0
- package/dist/backend/codeBanking.test.d.ts.map +1 -0
- package/dist/backend/codeBanking.test.js.map +1 -0
- package/dist/backend/importResources.d.ts +4 -0
- package/dist/backend/importResources.d.ts.map +1 -0
- package/dist/backend/importResources.js +58 -0
- package/dist/backend/importResources.js.map +1 -0
- package/dist/backend/importUtils.d.ts +14 -0
- package/dist/backend/importUtils.d.ts.map +1 -0
- package/dist/backend/importUtils.js +77 -0
- package/dist/backend/importUtils.js.map +1 -0
- package/dist/backend/importers/LuaCodeImporter.d.ts +47 -0
- package/dist/backend/importers/LuaCodeImporter.d.ts.map +1 -0
- package/dist/backend/importers/LuaCodeImporter.js +196 -0
- package/dist/backend/importers/LuaCodeImporter.js.map +1 -0
- package/dist/backend/importers/LuaCodeImporter.test.d.ts +2 -0
- package/dist/backend/importers/LuaCodeImporter.test.d.ts.map +1 -0
- package/dist/backend/importers/LuaCodeImporter.test.js.map +1 -0
- package/dist/backend/importers/binaryResourceImporter.d.ts +22 -0
- package/dist/backend/importers/binaryResourceImporter.d.ts.map +1 -0
- package/dist/backend/importers/binaryResourceImporter.js +53 -0
- package/dist/backend/importers/binaryResourceImporter.js.map +1 -0
- package/dist/backend/importers/luaImporter.d.ts +1 -0
- package/dist/backend/importers/luaImporter.d.ts.map +1 -0
- package/dist/backend/importers/luaImporter.js +3 -0
- package/dist/backend/importers/luaImporter.js.map +1 -0
- package/dist/backend/importers/textResourceImporter.d.ts +23 -0
- package/dist/backend/importers/textResourceImporter.d.ts.map +1 -0
- package/dist/backend/importers/textResourceImporter.js +55 -0
- package/dist/backend/importers/textResourceImporter.js.map +1 -0
- package/dist/backend/importers/tic80CartImporter.d.ts +21 -0
- package/dist/backend/importers/tic80CartImporter.d.ts.map +1 -0
- package/dist/backend/importers/tic80CartImporter.js +96 -0
- package/dist/backend/importers/tic80CartImporter.js.map +1 -0
- package/dist/backend/loadAllImports.d.ts +1 -0
- package/dist/backend/loadAllImports.d.ts.map +1 -0
- package/dist/backend/loadAllImports.js +3 -0
- package/dist/backend/loadAllImports.js.map +1 -0
- package/dist/backend/luaBinaryEncoding.d.ts +6 -0
- package/dist/backend/luaBinaryEncoding.d.ts.map +1 -0
- package/dist/backend/luaBinaryEncoding.js +94 -0
- package/dist/backend/luaBinaryEncoding.js.map +1 -0
- package/dist/backend/luaPreprocessor.d.ts +8 -0
- package/dist/backend/luaPreprocessor.d.ts.map +1 -0
- package/dist/backend/luaPreprocessor.js +862 -0
- package/dist/backend/luaPreprocessor.js.map +1 -0
- package/dist/backend/luaPreprocessor.test.d.ts +2 -0
- package/dist/backend/luaPreprocessor.test.d.ts.map +1 -0
- package/dist/backend/luaPreprocessor.test.js.map +1 -0
- package/dist/backend/manifestLoader.d.ts +19 -0
- package/dist/backend/manifestLoader.d.ts.map +1 -0
- package/dist/backend/manifestLoader.js +142 -0
- package/dist/backend/manifestLoader.js.map +1 -0
- package/dist/backend/manifestLoader.test.d.ts +2 -0
- package/dist/backend/manifestLoader.test.d.ts.map +1 -0
- package/dist/backend/manifestLoader.test.js.map +1 -0
- package/dist/backend/manifestTypes.d.ts +454 -0
- package/dist/backend/manifestTypes.d.ts.map +1 -0
- package/dist/backend/manifestTypes.js +28 -0
- package/dist/backend/manifestTypes.js.map +1 -0
- package/dist/backend/project.d.ts +24 -0
- package/dist/backend/project.d.ts.map +1 -0
- package/dist/backend/project.js +159 -0
- package/dist/backend/project.js.map +1 -0
- package/dist/backend/projectCore.d.ts +34 -0
- package/dist/backend/projectCore.d.ts.map +1 -0
- package/dist/backend/projectCore.js +226 -0
- package/dist/backend/projectCore.js.map +1 -0
- package/dist/backend/tic80Resolver.d.ts +6 -0
- package/dist/backend/tic80Resolver.d.ts.map +1 -0
- package/dist/backend/tic80Resolver.js +66 -0
- package/dist/backend/tic80Resolver.js.map +1 -0
- package/dist/buildInfo.d.ts +9 -0
- package/dist/buildInfo.d.ts.map +1 -0
- package/dist/buildInfo.js +13 -0
- package/dist/buildInfo.js.map +1 -0
- package/dist/frontend/build.d.ts +3 -0
- package/dist/frontend/build.d.ts.map +1 -0
- package/dist/frontend/build.js +8 -0
- package/dist/frontend/build.js.map +1 -0
- package/dist/frontend/codeBankWarnings.test.d.ts +2 -0
- package/dist/frontend/codeBankWarnings.test.d.ts.map +1 -0
- package/dist/frontend/codeBankWarnings.test.js.map +1 -0
- package/dist/frontend/core.d.ts +3 -0
- package/dist/frontend/core.d.ts.map +1 -0
- package/dist/frontend/core.js +259 -0
- package/dist/frontend/core.js.map +1 -0
- package/dist/frontend/init.d.ts +7 -0
- package/dist/frontend/init.d.ts.map +1 -0
- package/dist/frontend/init.js +95 -0
- package/dist/frontend/init.js.map +1 -0
- package/dist/frontend/parseOptions.d.ts +7 -0
- package/dist/frontend/parseOptions.d.ts.map +1 -0
- package/dist/frontend/parseOptions.js +68 -0
- package/dist/frontend/parseOptions.js.map +1 -0
- package/dist/frontend/run.d.ts +3 -0
- package/dist/frontend/run.d.ts.map +1 -0
- package/dist/frontend/run.js +63 -0
- package/dist/frontend/run.js.map +1 -0
- package/dist/frontend/watch.d.ts +3 -0
- package/dist/frontend/watch.d.ts.map +1 -0
- package/dist/frontend/watch.js +208 -0
- package/dist/frontend/watch.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +191 -0
- package/dist/index.js.map +1 -0
- package/dist/obj/resolvedManifest.ticbuild.jsonc +110 -0
- package/dist/obj/variables.json +19 -0
- package/dist/utils/algorithms.d.ts +4 -0
- package/dist/utils/algorithms.d.ts.map +1 -0
- package/dist/utils/algorithms.js +15 -0
- package/dist/utils/algorithms.js.map +1 -0
- package/dist/utils/algorithms.test.d.ts +2 -0
- package/dist/utils/algorithms.test.d.ts.map +1 -0
- package/dist/utils/algorithms.test.js.map +1 -0
- package/dist/utils/bin.d.ts +4 -0
- package/dist/utils/bin.d.ts.map +1 -0
- package/dist/utils/bin.js +16 -0
- package/dist/utils/bin.js.map +1 -0
- package/dist/utils/charMap.d.ts +28 -0
- package/dist/utils/charMap.d.ts.map +1 -0
- package/dist/utils/charMap.js +31 -0
- package/dist/utils/charMap.js.map +1 -0
- package/dist/utils/console.d.ts +10 -0
- package/dist/utils/console.d.ts.map +1 -0
- package/dist/utils/console.js +66 -0
- package/dist/utils/console.js.map +1 -0
- package/dist/utils/encoding/b85.d.ts +5 -0
- package/dist/utils/encoding/b85.d.ts.map +1 -0
- package/dist/utils/encoding/b85.js +136 -0
- package/dist/utils/encoding/b85.js.map +1 -0
- package/dist/utils/encoding/codecRegistry.d.ts +333 -0
- package/dist/utils/encoding/codecRegistry.d.ts.map +1 -0
- package/dist/utils/encoding/codecRegistry.js +81 -0
- package/dist/utils/encoding/codecRegistry.js.map +1 -0
- package/dist/utils/encoding/hex.d.ts +3 -0
- package/dist/utils/encoding/hex.d.ts.map +1 -0
- package/dist/utils/encoding/hex.js +30 -0
- package/dist/utils/encoding/hex.js.map +1 -0
- package/dist/utils/encoding/lz.d.ts +12 -0
- package/dist/utils/encoding/lz.d.ts.map +1 -0
- package/dist/utils/encoding/lz.js +271 -0
- package/dist/utils/encoding/lz.js.map +1 -0
- package/dist/utils/enum.d.ts +45 -0
- package/dist/utils/enum.d.ts.map +1 -0
- package/dist/utils/enum.js +135 -0
- package/dist/utils/enum.js.map +1 -0
- package/dist/utils/errorHandling.d.ts +13 -0
- package/dist/utils/errorHandling.d.ts.map +1 -0
- package/dist/utils/errorHandling.js +18 -0
- package/dist/utils/errorHandling.js.map +1 -0
- package/dist/utils/fileSystem.d.ts +16 -0
- package/dist/utils/fileSystem.d.ts.map +1 -0
- package/dist/utils/fileSystem.js +161 -0
- package/dist/utils/fileSystem.js.map +1 -0
- package/dist/utils/help.d.ts +7 -0
- package/dist/utils/help.d.ts.map +1 -0
- package/dist/utils/help.js +87 -0
- package/dist/utils/help.js.map +1 -0
- package/dist/utils/lua/luaUtils.d.ts +1 -0
- package/dist/utils/lua/luaUtils.d.ts.map +1 -0
- package/dist/utils/lua/luaUtils.js +3 -0
- package/dist/utils/lua/luaUtils.js.map +1 -0
- package/dist/utils/lua/lua_alias_expressions.d.ts +20 -0
- package/dist/utils/lua/lua_alias_expressions.d.ts.map +1 -0
- package/dist/utils/lua/lua_alias_expressions.js +233 -0
- package/dist/utils/lua/lua_alias_expressions.js.map +1 -0
- package/dist/utils/lua/lua_alias_literals.d.ts +20 -0
- package/dist/utils/lua/lua_alias_literals.d.ts.map +1 -0
- package/dist/utils/lua/lua_alias_literals.js +165 -0
- package/dist/utils/lua/lua_alias_literals.js.map +1 -0
- package/dist/utils/lua/lua_alias_shared.d.ts +31 -0
- package/dist/utils/lua/lua_alias_shared.d.ts.map +1 -0
- package/dist/utils/lua/lua_alias_shared.js +415 -0
- package/dist/utils/lua/lua_alias_shared.js.map +1 -0
- package/dist/utils/lua/lua_ast.d.ts +9 -0
- package/dist/utils/lua/lua_ast.d.ts.map +1 -0
- package/dist/utils/lua/lua_ast.js +90 -0
- package/dist/utils/lua/lua_ast.js.map +1 -0
- package/dist/utils/lua/lua_fundamentals.d.ts +14 -0
- package/dist/utils/lua/lua_fundamentals.d.ts.map +1 -0
- package/dist/utils/lua/lua_fundamentals.js +93 -0
- package/dist/utils/lua/lua_fundamentals.js.map +1 -0
- package/dist/utils/lua/lua_pack_locals.d.ts +3 -0
- package/dist/utils/lua/lua_pack_locals.d.ts.map +1 -0
- package/dist/utils/lua/lua_pack_locals.js +206 -0
- package/dist/utils/lua/lua_pack_locals.js.map +1 -0
- package/dist/utils/lua/lua_processor.d.ts +65 -0
- package/dist/utils/lua/lua_processor.d.ts.map +1 -0
- package/dist/utils/lua/lua_processor.js +1153 -0
- package/dist/utils/lua/lua_processor.js.map +1 -0
- package/dist/utils/lua/lua_processor.test.d.ts +2 -0
- package/dist/utils/lua/lua_processor.test.d.ts.map +1 -0
- package/dist/utils/lua/lua_processor.test.js.map +1 -0
- package/dist/utils/lua/lua_remove_unused_functions.d.ts +6 -0
- package/dist/utils/lua/lua_remove_unused_functions.d.ts.map +1 -0
- package/dist/utils/lua/lua_remove_unused_functions.js +474 -0
- package/dist/utils/lua/lua_remove_unused_functions.js.map +1 -0
- package/dist/utils/lua/lua_remove_unused_locals.d.ts +3 -0
- package/dist/utils/lua/lua_remove_unused_locals.d.ts.map +1 -0
- package/dist/utils/lua/lua_remove_unused_locals.js +303 -0
- package/dist/utils/lua/lua_remove_unused_locals.js.map +1 -0
- package/dist/utils/lua/lua_rename_allowed_table_keys.d.ts +3 -0
- package/dist/utils/lua/lua_rename_allowed_table_keys.d.ts.map +1 -0
- package/dist/utils/lua/lua_rename_allowed_table_keys.js +157 -0
- package/dist/utils/lua/lua_rename_allowed_table_keys.js.map +1 -0
- package/dist/utils/lua/lua_rename_table_fields.d.ts +3 -0
- package/dist/utils/lua/lua_rename_table_fields.d.ts.map +1 -0
- package/dist/utils/lua/lua_rename_table_fields.js +427 -0
- package/dist/utils/lua/lua_rename_table_fields.js.map +1 -0
- package/dist/utils/lua/lua_renamer.d.ts +3 -0
- package/dist/utils/lua/lua_renamer.d.ts.map +1 -0
- package/dist/utils/lua/lua_renamer.js +229 -0
- package/dist/utils/lua/lua_renamer.js.map +1 -0
- package/dist/utils/lua/lua_simplify.d.ts +3 -0
- package/dist/utils/lua/lua_simplify.d.ts.map +1 -0
- package/dist/utils/lua/lua_simplify.js +541 -0
- package/dist/utils/lua/lua_simplify.js.map +1 -0
- package/dist/utils/lua/lua_utils.d.ts +13 -0
- package/dist/utils/lua/lua_utils.d.ts.map +1 -0
- package/dist/utils/lua/lua_utils.js +58 -0
- package/dist/utils/lua/lua_utils.js.map +1 -0
- package/dist/utils/math.d.ts +2 -0
- package/dist/utils/math.d.ts.map +1 -0
- package/dist/utils/math.js +7 -0
- package/dist/utils/math.js.map +1 -0
- package/dist/utils/math.test.d.ts +2 -0
- package/dist/utils/math.test.d.ts.map +1 -0
- package/dist/utils/math.test.js.map +1 -0
- package/dist/utils/templates.d.ts +3 -0
- package/dist/utils/templates.d.ts.map +1 -0
- package/dist/utils/templates.js +57 -0
- package/dist/utils/templates.js.map +1 -0
- package/dist/utils/tic80/bankSupport.test.d.ts +2 -0
- package/dist/utils/tic80/bankSupport.test.d.ts.map +1 -0
- package/dist/utils/tic80/bankSupport.test.js.map +1 -0
- package/dist/utils/tic80/cartLoader.d.ts +3 -0
- package/dist/utils/tic80/cartLoader.d.ts.map +1 -0
- package/dist/utils/tic80/cartLoader.js +54 -0
- package/dist/utils/tic80/cartLoader.js.map +1 -0
- package/dist/utils/tic80/cartWriter.d.ts +5 -0
- package/dist/utils/tic80/cartWriter.d.ts.map +1 -0
- package/dist/utils/tic80/cartWriter.js +95 -0
- package/dist/utils/tic80/cartWriter.js.map +1 -0
- package/dist/utils/tic80/launch.d.ts +4 -0
- package/dist/utils/tic80/launch.d.ts.map +1 -0
- package/dist/utils/tic80/launch.js +36 -0
- package/dist/utils/tic80/launch.js.map +1 -0
- package/dist/utils/tic80/tic80.d.ts +1149 -0
- package/dist/utils/tic80/tic80.d.ts.map +1 -0
- package/dist/utils/tic80/tic80.js +114 -0
- package/dist/utils/tic80/tic80.js.map +1 -0
- package/dist/utils/utils.d.ts +13 -0
- package/dist/utils/utils.d.ts.map +1 -0
- package/dist/utils/utils.js +109 -0
- package/dist/utils/utils.js.map +1 -0
- package/dist/utils/versionString.d.ts +12 -0
- package/dist/utils/versionString.d.ts.map +1 -0
- package/dist/utils/versionString.js +33 -0
- package/dist/utils/versionString.js.map +1 -0
- package/dist/utils/windowPosition.d.ts +10 -0
- package/dist/utils/windowPosition.d.ts.map +1 -0
- package/dist/utils/windowPosition.js +222 -0
- package/dist/utils/windowPosition.js.map +1 -0
- package/example.ticbuild.jsonc +94 -0
- package/package.json +51 -0
- package/templates/help/build.txt +23 -0
- package/templates/help/init.txt +23 -0
- package/templates/help/main.txt +41 -0
- package/templates/help/run.txt +22 -0
- package/templates/help/tic80.txt +8 -0
- package/templates/help/watch.txt +24 -0
- package/templates/minimal/project.ticbuild.jsonc +43 -0
- package/ticbuild-1.0.0.tgz +0 -0
- package/ticbuild.schema.json +327 -0
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ok = ok;
|
|
4
|
+
exports.err = err;
|
|
5
|
+
exports.assert = assert;
|
|
6
|
+
function ok(value) {
|
|
7
|
+
return { ok: true, value };
|
|
8
|
+
}
|
|
9
|
+
function err(error) {
|
|
10
|
+
return { ok: false, error };
|
|
11
|
+
}
|
|
12
|
+
function assert(condition = true, message = "Assertion failed") {
|
|
13
|
+
if (!condition) {
|
|
14
|
+
console.error("Assertion failed:", message);
|
|
15
|
+
throw new Error(message);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=errorHandling.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errorHandling.js","sourceRoot":"","sources":["../../src/utils/errorHandling.ts"],"names":[],"mappings":";;AAYA,gBAEC;AAED,kBAEC;AAED,wBAKC;AAbD,SAAgB,EAAE,CAAI,KAAQ;IAC5B,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AAC7B,CAAC;AAED,SAAgB,GAAG,CAAY,KAAa;IAC1C,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AAC9B,CAAC;AAED,SAAgB,MAAM,CAAC,YAAqB,IAAI,EAAE,UAAkB,kBAAkB;IACpF,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC;QAC5C,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export declare function resolvePath(basePath: string, relativePath: string): string;
|
|
2
|
+
export declare function fileExists(filePath: string): boolean;
|
|
3
|
+
export declare function ensureDir(dirPath: string): void;
|
|
4
|
+
export declare function readTextFileAsync(filePath: string, encoding?: BufferEncoding): Promise<string>;
|
|
5
|
+
export declare function readBinaryFileAsync(filePath: string): Promise<Uint8Array>;
|
|
6
|
+
export declare function writeTextFile(filePath: string, content: string, encoding?: BufferEncoding): Promise<void>;
|
|
7
|
+
export declare function writeBinaryFile(filePath: string, data: Uint8Array): Promise<void>;
|
|
8
|
+
export declare function findExecutableInPath(executable: string): string | undefined;
|
|
9
|
+
export declare function isAbsolutePath(p: string): boolean;
|
|
10
|
+
export declare function joinPathParts(pathParts: string[]): string;
|
|
11
|
+
export declare function isDirectory(p: string): boolean;
|
|
12
|
+
export declare function canonicalizePath(p: string): string;
|
|
13
|
+
export declare function resolveFileWithSearchPaths(filePath: string, baseDir: string, additionalDirs?: string[]): string | null;
|
|
14
|
+
export declare function copyFile(sourcePath: string, targetPath: string, force: boolean): void;
|
|
15
|
+
export declare function isDirectoryEmpty(dirPath: string): boolean;
|
|
16
|
+
//# sourceMappingURL=fileSystem.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fileSystem.d.ts","sourceRoot":"","sources":["../../src/utils/fileSystem.ts"],"names":[],"mappings":"AAGA,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAE1E;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAMpD;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAI/C;AAED,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAEpG;AAED,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAG/E;AAED,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/G;AAED,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAEvF;AAED,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAiB3E;AAED,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAEjD;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,CAEzD;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAO9C;AAID,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAElD;AASD,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,cAAc,CAAC,EAAE,MAAM,EAAE,GACxB,MAAM,GAAG,IAAI,CAwBf;AAED,wBAAgB,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAOrF;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAMzD"}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.resolvePath = resolvePath;
|
|
37
|
+
exports.fileExists = fileExists;
|
|
38
|
+
exports.ensureDir = ensureDir;
|
|
39
|
+
exports.readTextFileAsync = readTextFileAsync;
|
|
40
|
+
exports.readBinaryFileAsync = readBinaryFileAsync;
|
|
41
|
+
exports.writeTextFile = writeTextFile;
|
|
42
|
+
exports.writeBinaryFile = writeBinaryFile;
|
|
43
|
+
exports.findExecutableInPath = findExecutableInPath;
|
|
44
|
+
exports.isAbsolutePath = isAbsolutePath;
|
|
45
|
+
exports.joinPathParts = joinPathParts;
|
|
46
|
+
exports.isDirectory = isDirectory;
|
|
47
|
+
exports.canonicalizePath = canonicalizePath;
|
|
48
|
+
exports.resolveFileWithSearchPaths = resolveFileWithSearchPaths;
|
|
49
|
+
exports.copyFile = copyFile;
|
|
50
|
+
exports.isDirectoryEmpty = isDirectoryEmpty;
|
|
51
|
+
const fs = __importStar(require("fs"));
|
|
52
|
+
const path = __importStar(require("path"));
|
|
53
|
+
function resolvePath(basePath, relativePath) {
|
|
54
|
+
return path.resolve(path.dirname(basePath), relativePath);
|
|
55
|
+
}
|
|
56
|
+
function fileExists(filePath) {
|
|
57
|
+
try {
|
|
58
|
+
return fs.existsSync(filePath);
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
function ensureDir(dirPath) {
|
|
65
|
+
if (!fs.existsSync(dirPath)) {
|
|
66
|
+
fs.mkdirSync(dirPath, { recursive: true });
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
async function readTextFileAsync(filePath, encoding) {
|
|
70
|
+
return fs.promises.readFile(filePath, encoding || "utf-8");
|
|
71
|
+
}
|
|
72
|
+
async function readBinaryFileAsync(filePath) {
|
|
73
|
+
const data = await fs.promises.readFile(filePath);
|
|
74
|
+
return new Uint8Array(data);
|
|
75
|
+
}
|
|
76
|
+
async function writeTextFile(filePath, content, encoding) {
|
|
77
|
+
await fs.promises.writeFile(filePath, content, { encoding: encoding || "utf-8" });
|
|
78
|
+
}
|
|
79
|
+
async function writeBinaryFile(filePath, data) {
|
|
80
|
+
await fs.promises.writeFile(filePath, Buffer.from(data));
|
|
81
|
+
}
|
|
82
|
+
function findExecutableInPath(executable) {
|
|
83
|
+
const pathEnv = process.env.PATH || "";
|
|
84
|
+
const pathSeparator = process.platform === "win32" ? ";" : ":";
|
|
85
|
+
const paths = pathEnv.split(pathSeparator);
|
|
86
|
+
const exeExtensions = process.platform === "win32" ? [".exe", ".cmd", ".bat", ""] : [""];
|
|
87
|
+
for (const dir of paths) {
|
|
88
|
+
for (const ext of exeExtensions) {
|
|
89
|
+
const fullPath = path.join(dir, executable + ext);
|
|
90
|
+
if (fileExists(fullPath)) {
|
|
91
|
+
return fullPath;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return undefined;
|
|
96
|
+
}
|
|
97
|
+
function isAbsolutePath(p) {
|
|
98
|
+
return path.isAbsolute(p);
|
|
99
|
+
}
|
|
100
|
+
function joinPathParts(pathParts) {
|
|
101
|
+
return path.join(...pathParts);
|
|
102
|
+
}
|
|
103
|
+
function isDirectory(p) {
|
|
104
|
+
try {
|
|
105
|
+
const stats = fs.statSync(p);
|
|
106
|
+
return stats.isDirectory();
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
return false;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
// Normalizes a path to its canonical form
|
|
113
|
+
// (e.g., resolves .. and . segments, uses consistent separators)
|
|
114
|
+
function canonicalizePath(p) {
|
|
115
|
+
return path.normalize(p);
|
|
116
|
+
}
|
|
117
|
+
// Resolves a file path by searching in a base directory and additional search directories.
|
|
118
|
+
// Returns the first matching file found, or null if not found.
|
|
119
|
+
//
|
|
120
|
+
// filePath - The file path to resolve (can be relative or absolute)
|
|
121
|
+
// baseDir - The base directory to search in first
|
|
122
|
+
// additionalDirs - Additional directories to search (relative to baseDir)
|
|
123
|
+
// returns The absolute path to the file if found, or null
|
|
124
|
+
function resolveFileWithSearchPaths(filePath, baseDir, additionalDirs) {
|
|
125
|
+
// If absolute path, check if it exists
|
|
126
|
+
if (isAbsolutePath(filePath)) {
|
|
127
|
+
return fileExists(filePath) ? canonicalizePath(filePath) : null;
|
|
128
|
+
}
|
|
129
|
+
// Try base directory first
|
|
130
|
+
const baseCandidate = path.join(baseDir, filePath);
|
|
131
|
+
if (fileExists(baseCandidate)) {
|
|
132
|
+
return canonicalizePath(baseCandidate);
|
|
133
|
+
}
|
|
134
|
+
// Try additional search directories
|
|
135
|
+
if (additionalDirs) {
|
|
136
|
+
for (const searchDir of additionalDirs) {
|
|
137
|
+
const absoluteSearchDir = isAbsolutePath(searchDir) ? searchDir : path.join(baseDir, searchDir);
|
|
138
|
+
const candidate = path.join(absoluteSearchDir, filePath);
|
|
139
|
+
if (fileExists(candidate)) {
|
|
140
|
+
return canonicalizePath(candidate);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
return null;
|
|
145
|
+
}
|
|
146
|
+
function copyFile(sourcePath, targetPath, force) {
|
|
147
|
+
if (!force && fileExists(targetPath)) {
|
|
148
|
+
throw new Error(`File already exists: ${targetPath} (use --force to overwrite)`);
|
|
149
|
+
}
|
|
150
|
+
const content = fs.readFileSync(sourcePath, "utf-8");
|
|
151
|
+
ensureDir(path.dirname(targetPath));
|
|
152
|
+
fs.writeFileSync(targetPath, content, "utf-8");
|
|
153
|
+
}
|
|
154
|
+
function isDirectoryEmpty(dirPath) {
|
|
155
|
+
if (!fs.existsSync(dirPath)) {
|
|
156
|
+
return true;
|
|
157
|
+
}
|
|
158
|
+
const entries = fs.readdirSync(dirPath);
|
|
159
|
+
return entries.length === 0;
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=fileSystem.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fileSystem.js","sourceRoot":"","sources":["../../src/utils/fileSystem.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA,kCAEC;AAED,gCAMC;AAED,8BAIC;AAED,8CAEC;AAED,kDAGC;AAED,sCAEC;AAED,0CAEC;AAED,oDAiBC;AAED,wCAEC;AAED,sCAEC;AAED,kCAOC;AAID,4CAEC;AASD,gEA4BC;AAED,4BAOC;AAED,4CAMC;AApID,uCAAyB;AACzB,2CAA6B;AAE7B,SAAgB,WAAW,CAAC,QAAgB,EAAE,YAAoB;IAChE,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAC,CAAC;AAC5D,CAAC;AAED,SAAgB,UAAU,CAAC,QAAgB;IACzC,IAAI,CAAC;QACH,OAAO,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IACjC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAgB,SAAS,CAAC,OAAe;IACvC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,iBAAiB,CAAC,QAAgB,EAAE,QAAyB;IACjF,OAAO,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,IAAI,OAAO,CAAC,CAAC;AAC7D,CAAC;AAEM,KAAK,UAAU,mBAAmB,CAAC,QAAgB;IACxD,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAClD,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;AAC9B,CAAC;AAEM,KAAK,UAAU,aAAa,CAAC,QAAgB,EAAE,OAAe,EAAE,QAAyB;IAC9F,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,QAAQ,IAAI,OAAO,EAAE,CAAC,CAAC;AACpF,CAAC;AAEM,KAAK,UAAU,eAAe,CAAC,QAAgB,EAAE,IAAgB;IACtE,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,SAAgB,oBAAoB,CAAC,UAAkB;IACrD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;IACvC,MAAM,aAAa,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IAC/D,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IAE3C,MAAM,aAAa,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAEzF,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;YAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,GAAG,GAAG,CAAC,CAAC;YAClD,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACzB,OAAO,QAAQ,CAAC;YAClB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAgB,cAAc,CAAC,CAAS;IACtC,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAC5B,CAAC;AAED,SAAgB,aAAa,CAAC,SAAmB;IAC/C,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC;AACjC,CAAC;AAED,SAAgB,WAAW,CAAC,CAAS;IACnC,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC7B,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,0CAA0C;AAC1C,iEAAiE;AACjE,SAAgB,gBAAgB,CAAC,CAAS;IACxC,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAC3B,CAAC;AAED,2FAA2F;AAC3F,+DAA+D;AAC/D,EAAE;AACF,oEAAoE;AACpE,kDAAkD;AAClD,0EAA0E;AAC1E,0DAA0D;AAC1D,SAAgB,0BAA0B,CACxC,QAAgB,EAChB,OAAe,EACf,cAAyB;IAEzB,uCAAuC;IACvC,IAAI,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAClE,CAAC;IAED,2BAA2B;IAC3B,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACnD,IAAI,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAC9B,OAAO,gBAAgB,CAAC,aAAa,CAAC,CAAC;IACzC,CAAC;IAED,oCAAoC;IACpC,IAAI,cAAc,EAAE,CAAC;QACnB,KAAK,MAAM,SAAS,IAAI,cAAc,EAAE,CAAC;YACvC,MAAM,iBAAiB,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YAChG,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;YACzD,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC1B,OAAO,gBAAgB,CAAC,SAAS,CAAC,CAAC;YACrC,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAgB,QAAQ,CAAC,UAAkB,EAAE,UAAkB,EAAE,KAAc;IAC7E,IAAI,CAAC,KAAK,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,wBAAwB,UAAU,6BAA6B,CAAC,CAAC;IACnF,CAAC;IACD,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACrD,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;IACpC,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AACjD,CAAC;AAED,SAAgB,gBAAgB,CAAC,OAAe;IAC9C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACxC,OAAO,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC;AAC9B,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare function printMainHelp(): void;
|
|
2
|
+
export declare function printBuildHelp(): void;
|
|
3
|
+
export declare function printRunHelp(): void;
|
|
4
|
+
export declare function printWatchHelp(): void;
|
|
5
|
+
export declare function printInitHelp(): void;
|
|
6
|
+
export declare function printTic80Help(): void;
|
|
7
|
+
//# sourceMappingURL=help.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../src/utils/help.ts"],"names":[],"mappings":"AAwBA,wBAAgB,aAAa,IAAI,IAAI,CAGpC;AAED,wBAAgB,cAAc,IAAI,IAAI,CAGrC;AAED,wBAAgB,YAAY,IAAI,IAAI,CAGnC;AAED,wBAAgB,cAAc,IAAI,IAAI,CAGrC;AAED,wBAAgB,aAAa,IAAI,IAAI,CAGpC;AAED,wBAAgB,cAAc,IAAI,IAAI,CAGrC"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.printMainHelp = printMainHelp;
|
|
37
|
+
exports.printBuildHelp = printBuildHelp;
|
|
38
|
+
exports.printRunHelp = printRunHelp;
|
|
39
|
+
exports.printWatchHelp = printWatchHelp;
|
|
40
|
+
exports.printInitHelp = printInitHelp;
|
|
41
|
+
exports.printTic80Help = printTic80Help;
|
|
42
|
+
const fs = __importStar(require("node:fs"));
|
|
43
|
+
const path = __importStar(require("node:path"));
|
|
44
|
+
const buildInfo_1 = require("../buildInfo");
|
|
45
|
+
const versionString_1 = require("./versionString");
|
|
46
|
+
const templates_1 = require("./templates");
|
|
47
|
+
function loadHelpTemplate(templateName) {
|
|
48
|
+
const templatePath = path.resolve(__dirname, "..", "..", "templates", "help", `${templateName}.txt`);
|
|
49
|
+
if (!fs.existsSync(templatePath)) {
|
|
50
|
+
throw new Error(`Help template not found: ${templatePath}`);
|
|
51
|
+
}
|
|
52
|
+
return fs.readFileSync(templatePath, "utf-8");
|
|
53
|
+
}
|
|
54
|
+
function renderHelpTemplate(templateName) {
|
|
55
|
+
const template = loadHelpTemplate(templateName);
|
|
56
|
+
const variables = {
|
|
57
|
+
VERSION: (0, versionString_1.getBuildVersionTag)(buildInfo_1.buildInfo),
|
|
58
|
+
COMMIT_HASH: buildInfo_1.buildInfo.commitHash || "unknown",
|
|
59
|
+
BUILD_DATE: buildInfo_1.buildInfo.buildDate || "unknown",
|
|
60
|
+
};
|
|
61
|
+
return (0, templates_1.applyTemplateVariables)(template, variables);
|
|
62
|
+
}
|
|
63
|
+
function printMainHelp() {
|
|
64
|
+
const help = renderHelpTemplate("main");
|
|
65
|
+
console.log(help);
|
|
66
|
+
}
|
|
67
|
+
function printBuildHelp() {
|
|
68
|
+
const help = renderHelpTemplate("build");
|
|
69
|
+
console.log(help);
|
|
70
|
+
}
|
|
71
|
+
function printRunHelp() {
|
|
72
|
+
const help = renderHelpTemplate("run");
|
|
73
|
+
console.log(help);
|
|
74
|
+
}
|
|
75
|
+
function printWatchHelp() {
|
|
76
|
+
const help = renderHelpTemplate("watch");
|
|
77
|
+
console.log(help);
|
|
78
|
+
}
|
|
79
|
+
function printInitHelp() {
|
|
80
|
+
const help = renderHelpTemplate("init");
|
|
81
|
+
console.log(help);
|
|
82
|
+
}
|
|
83
|
+
function printTic80Help() {
|
|
84
|
+
const help = renderHelpTemplate("tic80");
|
|
85
|
+
console.log(help);
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=help.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"help.js","sourceRoot":"","sources":["../../src/utils/help.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwBA,sCAGC;AAED,wCAGC;AAED,oCAGC;AAED,wCAGC;AAED,sCAGC;AAED,wCAGC;AApDD,4CAA8B;AAC9B,gDAAkC;AAClC,4CAAyC;AACzC,mDAAqD;AACrD,2CAAqD;AAErD,SAAS,gBAAgB,CAAC,YAAoB;IAC5C,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,YAAY,MAAM,CAAC,CAAC;IACrG,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,4BAA4B,YAAY,EAAE,CAAC,CAAC;IAC9D,CAAC;IACD,OAAO,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;AAChD,CAAC;AAED,SAAS,kBAAkB,CAAC,YAAoB;IAC9C,MAAM,QAAQ,GAAG,gBAAgB,CAAC,YAAY,CAAC,CAAC;IAChD,MAAM,SAAS,GAA2B;QACxC,OAAO,EAAE,IAAA,kCAAkB,EAAC,qBAAS,CAAC;QACtC,WAAW,EAAE,qBAAS,CAAC,UAAU,IAAI,SAAS;QAC9C,UAAU,EAAE,qBAAS,CAAC,SAAS,IAAI,SAAS;KAC7C,CAAC;IACF,OAAO,IAAA,kCAAsB,EAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;AACrD,CAAC;AAED,SAAgB,aAAa;IAC3B,MAAM,IAAI,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACpB,CAAC;AAED,SAAgB,cAAc;IAC5B,MAAM,IAAI,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACpB,CAAC;AAED,SAAgB,YAAY;IAC1B,MAAM,IAAI,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;IACvC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACpB,CAAC;AAED,SAAgB,cAAc;IAC5B,MAAM,IAAI,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACpB,CAAC;AAED,SAAgB,aAAa;IAC3B,MAAM,IAAI,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACpB,CAAC;AAED,SAAgB,cAAc;IAC5B,MAAM,IAAI,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACpB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=luaUtils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"luaUtils.d.ts","sourceRoot":"","sources":["../../../src/utils/lua/luaUtils.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"luaUtils.js","sourceRoot":"","sources":["../../../src/utils/lua/luaUtils.ts"],"names":[],"mappings":";AAAA,yEAAyE"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import * as luaparse from "luaparse";
|
|
2
|
+
/**
|
|
3
|
+
* Alias repeated expressions in the AST
|
|
4
|
+
*
|
|
5
|
+
* This optimization finds expressions that are used multiple times (like math.cos, string.sub)
|
|
6
|
+
* and creates local aliases for them to reduce code size. Aliases are declared in the highest
|
|
7
|
+
* scope where they are used.
|
|
8
|
+
*
|
|
9
|
+
* Example:
|
|
10
|
+
* local x = math.cos(1) + math.cos(2) + math.cos(3)
|
|
11
|
+
* local y = math.sin(1) + math.sin(2) + math.sin(3)
|
|
12
|
+
*
|
|
13
|
+
* Becomes:
|
|
14
|
+
* local _a = math.cos
|
|
15
|
+
* local _b = math.sin
|
|
16
|
+
* local x = _a(1) + _a(2) + _a(3)
|
|
17
|
+
* local y = _b(1) + _b(2) + _b(3)
|
|
18
|
+
*/
|
|
19
|
+
export declare function aliasRepeatedExpressionsInAST(ast: luaparse.Chunk): luaparse.Chunk;
|
|
20
|
+
//# sourceMappingURL=lua_alias_expressions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lua_alias_expressions.d.ts","sourceRoot":"","sources":["../../../src/utils/lua/lua_alias_expressions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,UAAU,CAAC;AAsPrC;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,6BAA6B,CAAC,GAAG,EAAE,QAAQ,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAejF"}
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.aliasRepeatedExpressionsInAST = aliasRepeatedExpressionsInAST;
|
|
4
|
+
const lua_alias_shared_1 = require("./lua_alias_shared");
|
|
5
|
+
// ============================================================================
|
|
6
|
+
// Expression Aliasing - Create local aliases for repeated expressions
|
|
7
|
+
// ============================================================================
|
|
8
|
+
// Configuration
|
|
9
|
+
const EXPR_ALIAS_PREFIX = "_"; // Prefix for generated alias names
|
|
10
|
+
const SAFE_GLOBAL_BASES = new Set(["math", "string", "table", "utf8", "bit", "bit32", "coroutine"]);
|
|
11
|
+
const SAFE_GLOBAL_FUNCS = new Set([
|
|
12
|
+
// TIC-80 API (pure or stable references)
|
|
13
|
+
"peek", "poke", "peek4", "poke4", "memcpy", "memset", "pmem", "mget", "mset", "sfx", "music",
|
|
14
|
+
"map", "spr", "circ", "circb", "rect", "rectb", "tri", "line", "pix", "clip", "btn",
|
|
15
|
+
"btnp", "key", "keyp", "mouse", "time", "tstamp", "sync", "trace", "exit",
|
|
16
|
+
]);
|
|
17
|
+
//type StringLiteralNode = luaparse.StringLiteral&{value?: string | null};
|
|
18
|
+
function baseIsSafeGlobal(expr) {
|
|
19
|
+
return expr.type === "Identifier" && SAFE_GLOBAL_BASES.has(expr.name);
|
|
20
|
+
}
|
|
21
|
+
// Serialize an expression to a string key for comparison
|
|
22
|
+
function serializeExpression(node) {
|
|
23
|
+
if (!node)
|
|
24
|
+
return null;
|
|
25
|
+
switch (node.type) {
|
|
26
|
+
case "Identifier":
|
|
27
|
+
if (!SAFE_GLOBAL_FUNCS.has(node.name))
|
|
28
|
+
return null;
|
|
29
|
+
return `id:${node.name}`;
|
|
30
|
+
case "MemberExpression": {
|
|
31
|
+
if (!baseIsSafeGlobal(node.base))
|
|
32
|
+
return null;
|
|
33
|
+
const baseName = node.base.name;
|
|
34
|
+
const id = node.identifier;
|
|
35
|
+
let identifier = null;
|
|
36
|
+
if (id) {
|
|
37
|
+
if (id.type === "Identifier")
|
|
38
|
+
identifier = id.name;
|
|
39
|
+
else
|
|
40
|
+
identifier = serializeExpression(id);
|
|
41
|
+
}
|
|
42
|
+
if (!identifier)
|
|
43
|
+
return null;
|
|
44
|
+
return `member:${baseName}.${identifier}`;
|
|
45
|
+
}
|
|
46
|
+
case "IndexExpression": {
|
|
47
|
+
if (!baseIsSafeGlobal(node.base))
|
|
48
|
+
return null;
|
|
49
|
+
const base = node.base.name;
|
|
50
|
+
const index = serializeExpression(node.index);
|
|
51
|
+
if (!base || !index)
|
|
52
|
+
return null;
|
|
53
|
+
return `index:${base}[${index}]`;
|
|
54
|
+
}
|
|
55
|
+
case "StringLiteral": {
|
|
56
|
+
const strNode = node;
|
|
57
|
+
const raw = strNode.raw ?? (strNode.value != null ? JSON.stringify(strNode.value) : "\"\"");
|
|
58
|
+
return `str:${raw}`;
|
|
59
|
+
}
|
|
60
|
+
case "NumericLiteral":
|
|
61
|
+
return `num:${node.value}`;
|
|
62
|
+
case "BooleanLiteral":
|
|
63
|
+
return `bool:${node.value}`;
|
|
64
|
+
case "NilLiteral":
|
|
65
|
+
return "nil";
|
|
66
|
+
default:
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
// Check if an expression is worth aliasing
|
|
71
|
+
function isAliasableExpression(node) {
|
|
72
|
+
if (!node)
|
|
73
|
+
return false;
|
|
74
|
+
switch (node.type) {
|
|
75
|
+
case "Identifier":
|
|
76
|
+
return SAFE_GLOBAL_FUNCS.has(node.name);
|
|
77
|
+
case "MemberExpression":
|
|
78
|
+
// Only alias safe global library member access (e.g., math.cos)
|
|
79
|
+
return baseIsSafeGlobal(node.base);
|
|
80
|
+
case "IndexExpression":
|
|
81
|
+
// Only alias safe global library index access (e.g., math["cos"])
|
|
82
|
+
return baseIsSafeGlobal(node.base);
|
|
83
|
+
// Don't alias literals
|
|
84
|
+
case "StringLiteral":
|
|
85
|
+
case "NumericLiteral":
|
|
86
|
+
case "BooleanLiteral":
|
|
87
|
+
case "NilLiteral":
|
|
88
|
+
return false;
|
|
89
|
+
default:
|
|
90
|
+
return false;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
function expressionTextLength(node) {
|
|
94
|
+
if (!node)
|
|
95
|
+
return Number.POSITIVE_INFINITY;
|
|
96
|
+
switch (node.type) {
|
|
97
|
+
case "Identifier":
|
|
98
|
+
return node.name.length;
|
|
99
|
+
case "MemberExpression": {
|
|
100
|
+
const id = node.identifier;
|
|
101
|
+
const idLen = id?.type === "Identifier" ? id.name.length : expressionTextLength(id);
|
|
102
|
+
return expressionTextLength(node.base) + 1 + idLen; // base . id
|
|
103
|
+
}
|
|
104
|
+
case "IndexExpression": {
|
|
105
|
+
return expressionTextLength(node.base) + 2 + expressionTextLength(node.index); // base[index]
|
|
106
|
+
}
|
|
107
|
+
case "StringLiteral": {
|
|
108
|
+
const strNode = node;
|
|
109
|
+
if (strNode.raw)
|
|
110
|
+
return strNode.raw.length;
|
|
111
|
+
if (typeof strNode.value === "string")
|
|
112
|
+
return strNode.value.length + 2; // quotes
|
|
113
|
+
return 2;
|
|
114
|
+
}
|
|
115
|
+
case "NumericLiteral":
|
|
116
|
+
return node.raw?.length || String(node.value).length;
|
|
117
|
+
case "BooleanLiteral":
|
|
118
|
+
return node.value ? 4 : 5;
|
|
119
|
+
case "NilLiteral":
|
|
120
|
+
return 3;
|
|
121
|
+
default:
|
|
122
|
+
return Number.POSITIVE_INFINITY;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
function shouldAliasExpression(info) {
|
|
126
|
+
const exprCost = expressionTextLength(info.node);
|
|
127
|
+
if (!Number.isFinite(exprCost))
|
|
128
|
+
return false;
|
|
129
|
+
const aliasNameLength = info.aliasName?.length ?? (EXPR_ALIAS_PREFIX.length + 1); // e.g., _a
|
|
130
|
+
const declarationCost = 6 + aliasNameLength + exprCost; // "local " + name + "=" + expr
|
|
131
|
+
const useCost = aliasNameLength;
|
|
132
|
+
const aliasTotal = declarationCost + useCost * info.count;
|
|
133
|
+
const noAliasTotal = exprCost * info.count;
|
|
134
|
+
return aliasTotal < noAliasTotal;
|
|
135
|
+
}
|
|
136
|
+
// Recursively replace expressions with aliases
|
|
137
|
+
function replaceExpression(node, tracker) {
|
|
138
|
+
if (!node)
|
|
139
|
+
return node;
|
|
140
|
+
const key = serializeExpression(node);
|
|
141
|
+
if (key) {
|
|
142
|
+
const alias = tracker.getAlias(key);
|
|
143
|
+
if (alias) {
|
|
144
|
+
return {
|
|
145
|
+
type: "Identifier",
|
|
146
|
+
name: alias,
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
// Recursively replace in child expressions
|
|
151
|
+
switch (node.type) {
|
|
152
|
+
case "BinaryExpression":
|
|
153
|
+
case "LogicalExpression":
|
|
154
|
+
node.left = replaceExpression(node.left, tracker);
|
|
155
|
+
node.right = replaceExpression(node.right, tracker);
|
|
156
|
+
break;
|
|
157
|
+
case "UnaryExpression":
|
|
158
|
+
node.argument = replaceExpression(node.argument, tracker);
|
|
159
|
+
break;
|
|
160
|
+
case "CallExpression":
|
|
161
|
+
node.base = replaceExpression(node.base, tracker);
|
|
162
|
+
if (node.arguments) {
|
|
163
|
+
node.arguments = node.arguments.map(arg => replaceExpression(arg, tracker));
|
|
164
|
+
}
|
|
165
|
+
break;
|
|
166
|
+
case "TableCallExpression":
|
|
167
|
+
node.base = replaceExpression(node.base, tracker);
|
|
168
|
+
node.arguments = replaceExpression(node.arguments, tracker);
|
|
169
|
+
break;
|
|
170
|
+
case "StringCallExpression":
|
|
171
|
+
node.base = replaceExpression(node.base, tracker);
|
|
172
|
+
break;
|
|
173
|
+
case "MemberExpression":
|
|
174
|
+
// Don't replace the base if this whole expression is being aliased
|
|
175
|
+
if (!serializeExpression(node) || !tracker.getAlias(serializeExpression(node))) {
|
|
176
|
+
node.base = replaceExpression(node.base, tracker);
|
|
177
|
+
}
|
|
178
|
+
break;
|
|
179
|
+
case "IndexExpression":
|
|
180
|
+
// Don't replace base/index if this whole expression is being aliased
|
|
181
|
+
if (!serializeExpression(node) || !tracker.getAlias(serializeExpression(node))) {
|
|
182
|
+
node.base = replaceExpression(node.base, tracker);
|
|
183
|
+
node.index = replaceExpression(node.index, tracker);
|
|
184
|
+
}
|
|
185
|
+
break;
|
|
186
|
+
case "TableConstructorExpression":
|
|
187
|
+
if (node.fields) {
|
|
188
|
+
node.fields.forEach((field) => {
|
|
189
|
+
if (field.type === "TableKey" || field.type === "TableKeyString") {
|
|
190
|
+
if (field.key)
|
|
191
|
+
field.key = replaceExpression(field.key, tracker);
|
|
192
|
+
}
|
|
193
|
+
if (field.value)
|
|
194
|
+
field.value = replaceExpression(field.value, tracker);
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
break;
|
|
198
|
+
}
|
|
199
|
+
return node;
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Alias repeated expressions in the AST
|
|
203
|
+
*
|
|
204
|
+
* This optimization finds expressions that are used multiple times (like math.cos, string.sub)
|
|
205
|
+
* and creates local aliases for them to reduce code size. Aliases are declared in the highest
|
|
206
|
+
* scope where they are used.
|
|
207
|
+
*
|
|
208
|
+
* Example:
|
|
209
|
+
* local x = math.cos(1) + math.cos(2) + math.cos(3)
|
|
210
|
+
* local y = math.sin(1) + math.sin(2) + math.sin(3)
|
|
211
|
+
*
|
|
212
|
+
* Becomes:
|
|
213
|
+
* local _a = math.cos
|
|
214
|
+
* local _b = math.sin
|
|
215
|
+
* local x = _a(1) + _a(2) + _a(3)
|
|
216
|
+
* local y = _b(1) + _b(2) + _b(3)
|
|
217
|
+
*/
|
|
218
|
+
function aliasRepeatedExpressionsInAST(ast) {
|
|
219
|
+
const strategy = {
|
|
220
|
+
prefix: EXPR_ALIAS_PREFIX,
|
|
221
|
+
serialize: (node) => {
|
|
222
|
+
if (!node)
|
|
223
|
+
return null;
|
|
224
|
+
if (!isAliasableExpression(node))
|
|
225
|
+
return null;
|
|
226
|
+
return serializeExpression(node);
|
|
227
|
+
},
|
|
228
|
+
shouldAlias: shouldAliasExpression,
|
|
229
|
+
replaceExpression,
|
|
230
|
+
};
|
|
231
|
+
return (0, lua_alias_shared_1.runAliasPass)(ast, strategy);
|
|
232
|
+
}
|
|
233
|
+
//# sourceMappingURL=lua_alias_expressions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lua_alias_expressions.js","sourceRoot":"","sources":["../../../src/utils/lua/lua_alias_expressions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import * as luaparse from "luaparse";
|
|
2
|
+
/**
|
|
3
|
+
* Alias repeated literal values in the AST
|
|
4
|
+
*
|
|
5
|
+
* This optimization finds literal values (strings, numbers) that are used multiple times
|
|
6
|
+
* and creates local aliases for them to reduce code size.
|
|
7
|
+
*
|
|
8
|
+
* Example:
|
|
9
|
+
* local x = "hello" .. "world"
|
|
10
|
+
* local y = "hello" .. "test"
|
|
11
|
+
* local z = "hello" .. "demo"
|
|
12
|
+
*
|
|
13
|
+
* Becomes:
|
|
14
|
+
* local La = "hello"
|
|
15
|
+
* local x = La .. "world"
|
|
16
|
+
* local y = La .. "test"
|
|
17
|
+
* local z = La .. "demo"
|
|
18
|
+
*/
|
|
19
|
+
export declare function aliasLiteralsInAST(ast: luaparse.Chunk): luaparse.Chunk;
|
|
20
|
+
//# sourceMappingURL=lua_alias_literals.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lua_alias_literals.d.ts","sourceRoot":"","sources":["../../../src/utils/lua/lua_alias_literals.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,UAAU,CAAC;AAqKrC;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,QAAQ,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAStE"}
|