diff --git a/Lara-JS/.gitignore b/Lara-JS/.gitignore index e258f446e..91765175e 100644 --- a/Lara-JS/.gitignore +++ b/Lara-JS/.gitignore @@ -1,7 +1,5 @@ ##### User-added ##### woven_code/ -/api/ -/code/ package-lock.json docs/ java-binaries diff --git a/Lara-JS/src-api/Graal.d.ts b/Lara-JS/api/Graal.d.ts similarity index 100% rename from Lara-JS/src-api/Graal.d.ts rename to Lara-JS/api/Graal.d.ts diff --git a/Lara-JS/src-api/LaraJoinPoint.ts b/Lara-JS/api/LaraJoinPoint.ts similarity index 94% rename from Lara-JS/src-api/LaraJoinPoint.ts rename to Lara-JS/api/LaraJoinPoint.ts index 0de111894..e1d7efd31 100644 --- a/Lara-JS/src-api/LaraJoinPoint.ts +++ b/Lara-JS/api/LaraJoinPoint.ts @@ -1,10 +1,10 @@ ////////////////////////////////////////////////////// -// This file is generated by build-LaraJoinPoint.js // +// This file is generated by build-LaraJoinPoint.ts // ////////////////////////////////////////////////////// /* eslint-disable @typescript-eslint/no-explicit-any */ -import JavaTypes from "./lara/util/JavaTypes.js"; +import JavaTypes from "./lara/util/JavaTypes.ts"; /** * Type for type equality assertion. If T is equal to U, return Y, otherwise return N. @@ -125,11 +125,17 @@ export class LaraJoinPoint { toString(): string { return wrapJoinPoint(this._javaObject.toString()); } } -export enum InsertPosition { - before = "before", - after = "after", - replace = "replace", -} +/** + * This is supposed to be an enum, but Node.js v25 does bot support TS' enums, only erasable-syntax. + * Revert to an enum when Node.js supports it, or when we move to a different engine that supports it. + * This and the "type" declaration below. + */ +export const InsertPosition = { + before: "before", + after: "after", + replace: "replace", +} as const; +export type InsertPosition = typeof InsertPosition[keyof typeof InsertPosition]; /** * Converts Java join point objects to TypeScript objects. diff --git a/Lara-JS/src-api/LegacyIntegrationTests - API.test.ts b/Lara-JS/api/LegacyIntegrationTests - API.test.ts similarity index 98% rename from Lara-JS/src-api/LegacyIntegrationTests - API.test.ts rename to Lara-JS/api/LegacyIntegrationTests - API.test.ts index 1f38171b7..d51fe65b9 100644 --- a/Lara-JS/src-api/LegacyIntegrationTests - API.test.ts +++ b/Lara-JS/api/LegacyIntegrationTests - API.test.ts @@ -1,4 +1,4 @@ -import { WeaverLegacyTester } from "../jest/WeaverLegacyTester.js"; +import { WeaverLegacyTester } from "../jest/WeaverLegacyTester.ts"; import path from "path"; /* eslint-disable jest/expect-expect */ diff --git a/Lara-JS/src-api/LegacyIntegrationTests - JsEngine.test.ts b/Lara-JS/api/LegacyIntegrationTests - JsEngine.test.ts similarity index 92% rename from Lara-JS/src-api/LegacyIntegrationTests - JsEngine.test.ts rename to Lara-JS/api/LegacyIntegrationTests - JsEngine.test.ts index ce1d16702..eb1c1c565 100644 --- a/Lara-JS/src-api/LegacyIntegrationTests - JsEngine.test.ts +++ b/Lara-JS/api/LegacyIntegrationTests - JsEngine.test.ts @@ -1,4 +1,4 @@ -import { WeaverLegacyTester } from "../jest/WeaverLegacyTester.js"; +import { WeaverLegacyTester } from "../jest/WeaverLegacyTester.ts"; import path from "path"; /* eslint-disable jest/expect-expect */ diff --git a/Lara-JS/src-api/LegacyIntegrationTests - Weaver.test.ts b/Lara-JS/api/LegacyIntegrationTests - Weaver.test.ts similarity index 88% rename from Lara-JS/src-api/LegacyIntegrationTests - Weaver.test.ts rename to Lara-JS/api/LegacyIntegrationTests - Weaver.test.ts index f5378c291..d6810eabf 100644 --- a/Lara-JS/src-api/LegacyIntegrationTests - Weaver.test.ts +++ b/Lara-JS/api/LegacyIntegrationTests - Weaver.test.ts @@ -1,4 +1,4 @@ -import { WeaverLegacyTester } from "../jest/WeaverLegacyTester.js"; +import { WeaverLegacyTester } from "../jest/WeaverLegacyTester.ts"; import path from "path"; /* eslint-disable jest/expect-expect */ diff --git a/Lara-JS/src-api/core/output.ts b/Lara-JS/api/core/output.ts similarity index 98% rename from Lara-JS/src-api/core/output.ts rename to Lara-JS/api/core/output.ts index c908bcd1c..0d2e3261c 100644 --- a/Lara-JS/src-api/core/output.ts +++ b/Lara-JS/api/core/output.ts @@ -1,4 +1,4 @@ -import JavaTypes from "../lara/util/JavaTypes.js"; +import JavaTypes from "../lara/util/JavaTypes.ts"; /** * Prints a message to the standard output. diff --git a/Lara-JS/src-api/jest.config.js b/Lara-JS/api/jest.config.ts similarity index 59% rename from Lara-JS/src-api/jest.config.js rename to Lara-JS/api/jest.config.ts index a95951c23..11314baca 100644 --- a/Lara-JS/src-api/jest.config.js +++ b/Lara-JS/api/jest.config.ts @@ -1,32 +1,29 @@ +import { defineConfig } from "jest"; import path from "path"; import { fileURLToPath } from "url"; export const weaverConfig = { weaverName: "DefaultWeaver", weaverPrettyName: "Default Weaver", - weaverFileName: "@specs-feup/lara/code/Weaver.js", + weaverFileName: "@specs-feup/lara/code/Weaver.ts", jarPath: path.join( path.dirname(path.dirname(path.dirname(fileURLToPath(import.meta.url)))), - "./DefaultWeaver/build/install/DefaultWeaver" + "./DefaultWeaver/build/install/DefaultWeaver", ), javaWeaverQualifiedName: "org.lara.interpreter.weaver.defaultweaver.DWWeaver", }; - -const config = { +export default defineConfig({ preset: "ts-jest/presets/default-esm", - testEnvironment: "@specs-feup/lara/jest/jestEnvironment.js", - globalSetup: "@specs-feup/lara/jest/jestGlobalSetup.js", - globalTeardown: "@specs-feup/lara/jest/jestGlobalTeardown.js", - setupFiles: ["@specs-feup/lara/jest/setupFiles/sharedJavaModule.js"], - setupFilesAfterEnv: ["@specs-feup/lara/jest/setupFiles/importSideEffects.js"], + testEnvironment: "@specs-feup/lara/jest/jestEnvironment.ts", + globalSetup: "@specs-feup/lara/jest/jestGlobalSetup.ts", + globalTeardown: "@specs-feup/lara/jest/jestGlobalTeardown.ts", + setupFiles: ["@specs-feup/lara/jest/setupFiles/sharedJavaModule.ts"], + setupFilesAfterEnv: ["@specs-feup/lara/jest/setupFiles/importSideEffects.ts"], moduleNameMapper: { - "@specs-feup/lara/api/(.+).js": "@specs-feup/lara/src-api/$1", "(.+)\\.js": "$1", }, testEnvironmentOptions: { weaverConfig, }, -}; - -export default config; +}); diff --git a/Lara-JS/src-api/lara/Check.ts b/Lara-JS/api/lara/Check.ts similarity index 96% rename from Lara-JS/src-api/lara/Check.ts rename to Lara-JS/api/lara/Check.ts index 188bee7af..dc75d4f64 100644 --- a/Lara-JS/src-api/lara/Check.ts +++ b/Lara-JS/api/lara/Check.ts @@ -1,6 +1,6 @@ -import { LaraJoinPoint } from "../LaraJoinPoint.js"; -import * as LaraCore from "./core/LaraCore.js"; -import JavaTypes from "./util/JavaTypes.js"; +import { LaraJoinPoint } from "../LaraJoinPoint.ts"; +import * as LaraCore from "./core/LaraCore.ts"; +import JavaTypes from "./util/JavaTypes.ts"; /** * Utility methods to check preconditions. diff --git a/Lara-JS/src-api/lara/Collections.ts b/Lara-JS/api/lara/Collections.ts similarity index 96% rename from Lara-JS/src-api/lara/Collections.ts rename to Lara-JS/api/lara/Collections.ts index 46e9b038d..bbc1bc137 100644 --- a/Lara-JS/src-api/lara/Collections.ts +++ b/Lara-JS/api/lara/Collections.ts @@ -1,5 +1,5 @@ -import JavaInterop from "./JavaInterop.js"; -import JavaTypes, { JavaClasses } from "./util/JavaTypes.js"; +import JavaInterop from "./JavaInterop.ts"; +import JavaTypes, { type JavaClasses } from "./util/JavaTypes.ts"; /** * Utility methods related to Collections. diff --git a/Lara-JS/src-api/lara/Csv.ts b/Lara-JS/api/lara/Csv.ts similarity index 97% rename from Lara-JS/src-api/lara/Csv.ts rename to Lara-JS/api/lara/Csv.ts index 883e96016..20b3978f0 100644 --- a/Lara-JS/src-api/lara/Csv.ts +++ b/Lara-JS/api/lara/Csv.ts @@ -1,5 +1,5 @@ -import Io from "./Io.js"; -import JavaTypes, { JavaClasses } from "./util/JavaTypes.js"; +import Io from "./Io.ts"; +import JavaTypes, { type JavaClasses } from "./util/JavaTypes.ts"; /** * Methods related with the CSV format. diff --git a/Lara-JS/src-api/lara/Debug.ts b/Lara-JS/api/lara/Debug.ts similarity index 100% rename from Lara-JS/src-api/lara/Debug.ts rename to Lara-JS/api/lara/Debug.ts diff --git a/Lara-JS/src-api/lara/Io.test.ts b/Lara-JS/api/lara/Io.test.ts similarity index 92% rename from Lara-JS/src-api/lara/Io.test.ts rename to Lara-JS/api/lara/Io.test.ts index 6ff72b8ac..dcfd56631 100644 --- a/Lara-JS/src-api/lara/Io.test.ts +++ b/Lara-JS/api/lara/Io.test.ts @@ -1,5 +1,5 @@ -import Io from "./Io.js"; -import JavaTypes, { JavaClasses } from "./util/JavaTypes.js"; +import Io from "./Io.ts"; +import { type JavaClasses } from "./util/JavaTypes.ts"; describe("Io", () => { diff --git a/Lara-JS/src-api/lara/Io.ts b/Lara-JS/api/lara/Io.ts similarity index 98% rename from Lara-JS/src-api/lara/Io.ts rename to Lara-JS/api/lara/Io.ts index cc923f742..09ba4acf4 100644 --- a/Lara-JS/src-api/lara/Io.ts +++ b/Lara-JS/api/lara/Io.ts @@ -1,5 +1,5 @@ -import { JSONtoFile, fileToJSON } from "../core/output.js"; -import JavaTypes, { JavaClasses } from "./util/JavaTypes.js"; +import { JSONtoFile, fileToJSON } from "../core/output.ts"; +import JavaTypes, { type JavaClasses } from "./util/JavaTypes.ts"; import fg from "fast-glob"; import fs from "fs"; @@ -351,7 +351,7 @@ export default class Io { } /** - * @deprecated Use JSONtoFile from api/core/output.js instead + * @deprecated Use JSONtoFile from api/core/output.ts instead */ static writeJson(path: string, object: T) { JSONtoFile(path, object); @@ -518,7 +518,7 @@ export default class Io { * If it is a string but does not end in json, assume it is a stringified object. * Otherwise, returns the object as it is. * - * @deprecated Use JSON.parse() instead or fileToJSON from api/core/output.js + * @deprecated Use JSON.parse() instead or fileToJSON from api/core/output.ts */ static jsonObject(value: T): T | string { if (typeof value === "string") { diff --git a/Lara-JS/src-api/lara/JavaInterop.ts b/Lara-JS/api/lara/JavaInterop.ts similarity index 94% rename from Lara-JS/src-api/lara/JavaInterop.ts rename to Lara-JS/api/lara/JavaInterop.ts index 46ca579b4..72572ab82 100644 --- a/Lara-JS/src-api/lara/JavaInterop.ts +++ b/Lara-JS/api/lara/JavaInterop.ts @@ -1,4 +1,4 @@ -import JavaTypes, { JavaClasses } from "./util/JavaTypes.js"; +import JavaTypes, { type JavaClasses } from "./util/JavaTypes.ts"; export default class JavaInterop { /** diff --git a/Lara-JS/src-api/lara/Numbers.ts b/Lara-JS/api/lara/Numbers.ts similarity index 100% rename from Lara-JS/src-api/lara/Numbers.ts rename to Lara-JS/api/lara/Numbers.ts diff --git a/Lara-JS/src-api/lara/Platforms.ts b/Lara-JS/api/lara/Platforms.ts similarity index 97% rename from Lara-JS/src-api/lara/Platforms.ts rename to Lara-JS/api/lara/Platforms.ts index 5faa522eb..d3a73d198 100644 --- a/Lara-JS/src-api/lara/Platforms.ts +++ b/Lara-JS/api/lara/Platforms.ts @@ -1,4 +1,4 @@ -import JavaTypes from "./util/JavaTypes.js"; +import JavaTypes from "./util/JavaTypes.ts"; /** * Information about the current platform (e.g., if it is Linux, Windows or Mac) diff --git a/Lara-JS/src-api/lara/Strings.ts b/Lara-JS/api/lara/Strings.ts similarity index 98% rename from Lara-JS/src-api/lara/Strings.ts rename to Lara-JS/api/lara/Strings.ts index c024c980a..248b8a4a5 100644 --- a/Lara-JS/src-api/lara/Strings.ts +++ b/Lara-JS/api/lara/Strings.ts @@ -1,4 +1,4 @@ -import JavaTypes, { JavaClasses } from "./util/JavaTypes.js"; +import JavaTypes, { type JavaClasses } from "./util/JavaTypes.ts"; /** * Utility methods related to Strings. diff --git a/Lara-JS/src-api/lara/System.ts b/Lara-JS/api/lara/System.ts similarity index 96% rename from Lara-JS/src-api/lara/System.ts rename to Lara-JS/api/lara/System.ts index b23a0ac08..0e24c375d 100644 --- a/Lara-JS/src-api/lara/System.ts +++ b/Lara-JS/api/lara/System.ts @@ -1,8 +1,8 @@ -import Io from "./Io.js"; -import Platforms from "./Platforms.js"; -import { info } from "./core/LaraCore.js"; -import JavaTypes, { JavaClasses } from "./util/JavaTypes.js"; -import TimeUnits, { TimerUnit } from "./util/TimeUnits.js"; +import Io from "./Io.ts"; +import Platforms from "./Platforms.ts"; +import { info } from "./core/LaraCore.ts"; +import JavaTypes, { type JavaClasses } from "./util/JavaTypes.ts"; +import TimeUnits, { TimerUnit } from "./util/TimeUnits.ts"; export default class System { static getExecutableFile( diff --git a/Lara-JS/src-api/lara/benchmark/BenchmarkCompilationEngine.ts b/Lara-JS/api/lara/benchmark/BenchmarkCompilationEngine.ts similarity index 83% rename from Lara-JS/src-api/lara/benchmark/BenchmarkCompilationEngine.ts rename to Lara-JS/api/lara/benchmark/BenchmarkCompilationEngine.ts index 0669a26f7..0913c1219 100644 --- a/Lara-JS/src-api/lara/benchmark/BenchmarkCompilationEngine.ts +++ b/Lara-JS/api/lara/benchmark/BenchmarkCompilationEngine.ts @@ -1,4 +1,4 @@ -import Tool from "../tool/Tool.js"; +import Tool from "../tool/Tool.ts"; export default abstract class BenchmarkCompilationEngine extends Tool { constructor(name: string, disableWeaving: boolean = false) { diff --git a/Lara-JS/src-api/lara/benchmark/BenchmarkInstance.ts b/Lara-JS/api/lara/benchmark/BenchmarkInstance.ts similarity index 96% rename from Lara-JS/src-api/lara/benchmark/BenchmarkInstance.ts rename to Lara-JS/api/lara/benchmark/BenchmarkInstance.ts index abebd221a..bdc9e6465 100644 --- a/Lara-JS/src-api/lara/benchmark/BenchmarkInstance.ts +++ b/Lara-JS/api/lara/benchmark/BenchmarkInstance.ts @@ -1,8 +1,8 @@ -import { LaraJoinPoint } from "../../LaraJoinPoint.js"; -import Io from "../Io.js"; -import { JavaClasses } from "../util/JavaTypes.js"; -import ProcessExecutor from "../util/ProcessExecutor.js"; -import BenchmarkCompilationEngine from "./BenchmarkCompilationEngine.js"; +import { LaraJoinPoint } from "../../LaraJoinPoint.ts"; +import Io from "../Io.ts"; +import { type JavaClasses } from "../util/JavaTypes.ts"; +import ProcessExecutor from "../util/ProcessExecutor.ts"; +import BenchmarkCompilationEngine from "./BenchmarkCompilationEngine.ts"; /** * Represents a set of BenchmarkInstances. @@ -199,7 +199,6 @@ export default abstract class BenchmarkInstance { } this.currentExecutor.execute( - // eslint-disable-next-line @typescript-eslint/no-unsafe-call this.currentExecutable.getAbsolutePath() ); } diff --git a/Lara-JS/src-api/lara/benchmark/BenchmarkSet.ts b/Lara-JS/api/lara/benchmark/BenchmarkSet.ts similarity index 96% rename from Lara-JS/src-api/lara/benchmark/BenchmarkSet.ts rename to Lara-JS/api/lara/benchmark/BenchmarkSet.ts index 38e16c3cc..6c796a1b5 100644 --- a/Lara-JS/src-api/lara/benchmark/BenchmarkSet.ts +++ b/Lara-JS/api/lara/benchmark/BenchmarkSet.ts @@ -1,5 +1,5 @@ -import ProcessExecutor from "../util/ProcessExecutor.js"; -import BenchmarkInstance from "./BenchmarkInstance.js"; +import ProcessExecutor from "../util/ProcessExecutor.ts"; +import BenchmarkInstance from "./BenchmarkInstance.ts"; /** * Represents a set of BenchmarkInstances. diff --git a/Lara-JS/src-api/lara/code/EnergyBase.ts b/Lara-JS/api/lara/code/EnergyBase.ts similarity index 97% rename from Lara-JS/src-api/lara/code/EnergyBase.ts rename to Lara-JS/api/lara/code/EnergyBase.ts index 7dd513517..76d14bbf6 100644 --- a/Lara-JS/src-api/lara/code/EnergyBase.ts +++ b/Lara-JS/api/lara/code/EnergyBase.ts @@ -1,4 +1,4 @@ -import { LaraJoinPoint } from "../../LaraJoinPoint.js"; +import { LaraJoinPoint } from "../../LaraJoinPoint.ts"; /** * Class that measures the energy spent when executing a section of code. diff --git a/Lara-JS/src-api/lara/code/LoggerBase.ts b/Lara-JS/api/lara/code/LoggerBase.ts similarity index 99% rename from Lara-JS/src-api/lara/code/LoggerBase.ts rename to Lara-JS/api/lara/code/LoggerBase.ts index faccc070c..13f8fc0d1 100644 --- a/Lara-JS/src-api/lara/code/LoggerBase.ts +++ b/Lara-JS/api/lara/code/LoggerBase.ts @@ -1,6 +1,6 @@ -import { InsertPosition, LaraJoinPoint } from "../../LaraJoinPoint.js"; -import JoinPoints from "../../weaver/JoinPoints.js"; -import { isJoinPoint } from "../core/LaraCore.js"; +import { InsertPosition, LaraJoinPoint } from "../../LaraJoinPoint.ts"; +import JoinPoints from "../../weaver/JoinPoints.ts"; +import { isJoinPoint } from "../core/LaraCore.ts"; type ElementType = { content: string | number; type: number }; diff --git a/Lara-JS/src-api/lara/code/TimerBase.ts b/Lara-JS/api/lara/code/TimerBase.ts similarity index 95% rename from Lara-JS/src-api/lara/code/TimerBase.ts rename to Lara-JS/api/lara/code/TimerBase.ts index 8f442cefe..1e85ba6f0 100644 --- a/Lara-JS/src-api/lara/code/TimerBase.ts +++ b/Lara-JS/api/lara/code/TimerBase.ts @@ -1,5 +1,5 @@ -import { LaraJoinPoint } from "../../LaraJoinPoint.js"; -import TimeUnits, { TimerUnit } from "../util/TimeUnits.js"; +import { LaraJoinPoint } from "../../LaraJoinPoint.ts"; +import TimeUnits, { TimerUnit } from "../util/TimeUnits.ts"; /** * Timer object, for timing sections of code. diff --git a/Lara-JS/src-api/lara/core/LaraCore.ts b/Lara-JS/api/lara/core/LaraCore.ts similarity index 98% rename from Lara-JS/src-api/lara/core/LaraCore.ts rename to Lara-JS/api/lara/core/LaraCore.ts index 615eea62a..1a20d4c9d 100644 --- a/Lara-JS/src-api/lara/core/LaraCore.ts +++ b/Lara-JS/api/lara/core/LaraCore.ts @@ -1,6 +1,6 @@ -import { LaraJoinPoint } from "../../LaraJoinPoint.js"; -import { object2string } from "../../core/output.js"; -import JavaTypes from "../util/JavaTypes.js"; +import { LaraJoinPoint } from "../../LaraJoinPoint.ts"; +import { object2string } from "../../core/output.ts"; +import JavaTypes from "../util/JavaTypes.ts"; export let LARA_DEBUG = false; diff --git a/Lara-JS/src-api/lara/dse/DseLoop.ts b/Lara-JS/api/lara/dse/DseLoop.ts similarity index 66% rename from Lara-JS/src-api/lara/dse/DseLoop.ts rename to Lara-JS/api/lara/dse/DseLoop.ts index 7302f12ce..4f67710f4 100644 --- a/Lara-JS/src-api/lara/dse/DseLoop.ts +++ b/Lara-JS/api/lara/dse/DseLoop.ts @@ -1,6 +1,6 @@ -import { LaraJoinPoint } from "../../LaraJoinPoint.js"; -import Metric from "../metrics/Metric.js"; -import DseVariant from "./DseVariant.js"; +import { LaraJoinPoint } from "../../LaraJoinPoint.ts"; +import Metric from "../metrics/Metric.ts"; +import DseVariant from "./DseVariant.ts"; /** * Performs Design-Space Exploration. diff --git a/Lara-JS/src-api/lara/dse/DseValues.ts b/Lara-JS/api/lara/dse/DseValues.ts similarity index 100% rename from Lara-JS/src-api/lara/dse/DseValues.ts rename to Lara-JS/api/lara/dse/DseValues.ts diff --git a/Lara-JS/src-api/lara/dse/DseValuesList.ts b/Lara-JS/api/lara/dse/DseValuesList.ts similarity index 92% rename from Lara-JS/src-api/lara/dse/DseValuesList.ts rename to Lara-JS/api/lara/dse/DseValuesList.ts index 7d55cb9db..c1f6b8f15 100644 --- a/Lara-JS/src-api/lara/dse/DseValuesList.ts +++ b/Lara-JS/api/lara/dse/DseValuesList.ts @@ -1,5 +1,5 @@ -import { arrayFromArgs } from "../core/LaraCore.js"; -import DseValues from "./DseValues.js"; +import { arrayFromArgs } from "../core/LaraCore.ts"; +import DseValues from "./DseValues.ts"; type T = any; diff --git a/Lara-JS/src-api/lara/dse/DseValuesSet.ts b/Lara-JS/api/lara/dse/DseValuesSet.ts similarity index 95% rename from Lara-JS/src-api/lara/dse/DseValuesSet.ts rename to Lara-JS/api/lara/dse/DseValuesSet.ts index 2ed53cf08..0110aa409 100644 --- a/Lara-JS/src-api/lara/dse/DseValuesSet.ts +++ b/Lara-JS/api/lara/dse/DseValuesSet.ts @@ -1,5 +1,5 @@ -import { arrayFromArgs } from "../core/LaraCore.js"; -import DseValues from "./DseValues.js"; +import { arrayFromArgs } from "../core/LaraCore.ts"; +import DseValues from "./DseValues.ts"; type T = any; diff --git a/Lara-JS/src-api/lara/dse/DseVariant.ts b/Lara-JS/api/lara/dse/DseVariant.ts similarity index 90% rename from Lara-JS/src-api/lara/dse/DseVariant.ts rename to Lara-JS/api/lara/dse/DseVariant.ts index 3904106c7..54965aa81 100644 --- a/Lara-JS/src-api/lara/dse/DseVariant.ts +++ b/Lara-JS/api/lara/dse/DseVariant.ts @@ -1,4 +1,4 @@ -import DseValues from "./DseValues.js"; +import DseValues from "./DseValues.ts"; /** * Represents a variant of the DSE. diff --git a/Lara-JS/src-api/lara/dse/VariableVariant.ts b/Lara-JS/api/lara/dse/VariableVariant.ts similarity index 86% rename from Lara-JS/src-api/lara/dse/VariableVariant.ts rename to Lara-JS/api/lara/dse/VariableVariant.ts index a67d6b9ba..2ef317a14 100644 --- a/Lara-JS/src-api/lara/dse/VariableVariant.ts +++ b/Lara-JS/api/lara/dse/VariableVariant.ts @@ -1,7 +1,7 @@ -import { arrayFromArgs } from "../core/LaraCore.js"; -import DseValues from "./DseValues.js"; -import DseValuesList from "./DseValuesList.js"; -import DseVariant from "./DseVariant.js"; +import { arrayFromArgs } from "../core/LaraCore.ts"; +import DseValues from "./DseValues.ts"; +import DseValuesList from "./DseValuesList.ts"; +import DseVariant from "./DseVariant.ts"; type T = any; diff --git a/Lara-JS/src-api/lara/graphs/DotFormatter.ts b/Lara-JS/api/lara/graphs/DotFormatter.ts similarity index 97% rename from Lara-JS/src-api/lara/graphs/DotFormatter.ts rename to Lara-JS/api/lara/graphs/DotFormatter.ts index d9f322160..cbccf21f3 100644 --- a/Lara-JS/src-api/lara/graphs/DotFormatter.ts +++ b/Lara-JS/api/lara/graphs/DotFormatter.ts @@ -1,6 +1,6 @@ import cytoscape from "cytoscape"; -import NodeData from "./NodeData.js"; -import EdgeData from "./EdgeData.js"; +import NodeData from "./NodeData.ts"; +import EdgeData from "./EdgeData.ts"; export interface NodeAttribute { attr: string; diff --git a/Lara-JS/src-api/lara/graphs/EdgeData.ts b/Lara-JS/api/lara/graphs/EdgeData.ts similarity index 100% rename from Lara-JS/src-api/lara/graphs/EdgeData.ts rename to Lara-JS/api/lara/graphs/EdgeData.ts diff --git a/Lara-JS/src-api/lara/graphs/Graph.ts b/Lara-JS/api/lara/graphs/Graph.ts similarity index 82% rename from Lara-JS/src-api/lara/graphs/Graph.ts rename to Lara-JS/api/lara/graphs/Graph.ts index f9d004190..fb86c48f7 100644 --- a/Lara-JS/src-api/lara/graphs/Graph.ts +++ b/Lara-JS/api/lara/graphs/Graph.ts @@ -1,6 +1,6 @@ import cytoscape from "cytoscape"; -import DotFormatter from "./DotFormatter.js"; -import Graphs from "./Graphs.js"; +import DotFormatter from "./DotFormatter.ts"; +import Graphs from "./Graphs.ts"; export default class Graph { /** diff --git a/Lara-JS/src-api/lara/graphs/Graphs.ts b/Lara-JS/api/lara/graphs/Graphs.ts similarity index 96% rename from Lara-JS/src-api/lara/graphs/Graphs.ts rename to Lara-JS/api/lara/graphs/Graphs.ts index 96bddeb3c..bbd5bd0c0 100644 --- a/Lara-JS/src-api/lara/graphs/Graphs.ts +++ b/Lara-JS/api/lara/graphs/Graphs.ts @@ -1,6 +1,6 @@ -import DotFormatter from "./DotFormatter.js"; -import EdgeData from "./EdgeData.js"; -import NodeData from "./NodeData.js"; +import DotFormatter from "./DotFormatter.ts"; +import EdgeData from "./EdgeData.ts"; +import NodeData from "./NodeData.ts"; import cytoscape from "cytoscape"; diff --git a/Lara-JS/src-api/lara/graphs/NodeData.ts b/Lara-JS/api/lara/graphs/NodeData.ts similarity index 100% rename from Lara-JS/src-api/lara/graphs/NodeData.ts rename to Lara-JS/api/lara/graphs/NodeData.ts diff --git a/Lara-JS/src-api/lara/iterators/LaraIterator.ts b/Lara-JS/api/lara/iterators/LaraIterator.ts similarity index 100% rename from Lara-JS/src-api/lara/iterators/LaraIterator.ts rename to Lara-JS/api/lara/iterators/LaraIterator.ts diff --git a/Lara-JS/src-api/lara/iterators/LineIterator.ts b/Lara-JS/api/lara/iterators/LineIterator.ts similarity index 93% rename from Lara-JS/src-api/lara/iterators/LineIterator.ts rename to Lara-JS/api/lara/iterators/LineIterator.ts index 5a66fbcf0..626c96def 100644 --- a/Lara-JS/src-api/lara/iterators/LineIterator.ts +++ b/Lara-JS/api/lara/iterators/LineIterator.ts @@ -1,5 +1,5 @@ -import JavaTypes, { JavaClasses } from "../util/JavaTypes.js"; -import LaraIterator from "./LaraIterator.js"; +import JavaTypes, { type JavaClasses } from "../util/JavaTypes.ts"; +import LaraIterator from "./LaraIterator.ts"; /** * Iterates over a sequence of lines. diff --git a/Lara-JS/src-api/lara/metrics/FileSizeMetric.ts b/Lara-JS/api/lara/metrics/FileSizeMetric.ts similarity index 78% rename from Lara-JS/src-api/lara/metrics/FileSizeMetric.ts rename to Lara-JS/api/lara/metrics/FileSizeMetric.ts index 2292707e4..2034dca6c 100644 --- a/Lara-JS/src-api/lara/metrics/FileSizeMetric.ts +++ b/Lara-JS/api/lara/metrics/FileSizeMetric.ts @@ -1,7 +1,7 @@ -import { LaraJoinPoint } from "../../LaraJoinPoint.js"; -import ProcessExecutor from "../util/ProcessExecutor.js"; -import Metric from "./Metric.js"; -import MetricResult from "./MetricResult.js"; +import { LaraJoinPoint } from "../../LaraJoinPoint.ts"; +import ProcessExecutor from "../util/ProcessExecutor.ts"; +import Metric from "./Metric.ts"; +import MetricResult from "./MetricResult.ts"; /** * Measures the size of the compiled executable. diff --git a/Lara-JS/src-api/lara/metrics/Metric.ts b/Lara-JS/api/lara/metrics/Metric.ts similarity index 86% rename from Lara-JS/src-api/lara/metrics/Metric.ts rename to Lara-JS/api/lara/metrics/Metric.ts index e8da00be2..6cd347345 100644 --- a/Lara-JS/src-api/lara/metrics/Metric.ts +++ b/Lara-JS/api/lara/metrics/Metric.ts @@ -1,6 +1,6 @@ -import { LaraJoinPoint } from "../../LaraJoinPoint.js"; -import ProcessExecutor from "../util/ProcessExecutor.js"; -import MetricResult from "./MetricResult.js"; +import { LaraJoinPoint } from "../../LaraJoinPoint.ts"; +import ProcessExecutor from "../util/ProcessExecutor.ts"; +import MetricResult from "./MetricResult.ts"; /** * Reprents a metric we want to extract. diff --git a/Lara-JS/src-api/lara/metrics/MetricResult.ts b/Lara-JS/api/lara/metrics/MetricResult.ts similarity index 100% rename from Lara-JS/src-api/lara/metrics/MetricResult.ts rename to Lara-JS/api/lara/metrics/MetricResult.ts diff --git a/Lara-JS/src-api/lara/mutation/IterativeMutation.ts b/Lara-JS/api/lara/mutation/IterativeMutation.ts similarity index 80% rename from Lara-JS/src-api/lara/mutation/IterativeMutation.ts rename to Lara-JS/api/lara/mutation/IterativeMutation.ts index d65938daa..9299a47da 100644 --- a/Lara-JS/src-api/lara/mutation/IterativeMutation.ts +++ b/Lara-JS/api/lara/mutation/IterativeMutation.ts @@ -1,6 +1,6 @@ -import { LaraJoinPoint } from "../../LaraJoinPoint.js"; -import Mutation from "./Mutation.js"; -import MutationResult from "./MutationResult.js"; +import { LaraJoinPoint } from "../../LaraJoinPoint.ts"; +import Mutation from "./Mutation.ts"; +import MutationResult from "./MutationResult.ts"; /** * Abstract mutation class that implements .getMutants(), but makes function Mutation.mutate($jp) abstract. Allows more efficient, generator-based Mutation implementations. diff --git a/Lara-JS/src-api/lara/mutation/IterativeMutator.ts b/Lara-JS/api/lara/mutation/IterativeMutator.ts similarity index 95% rename from Lara-JS/src-api/lara/mutation/IterativeMutator.ts rename to Lara-JS/api/lara/mutation/IterativeMutator.ts index 43d667f39..695c782d9 100644 --- a/Lara-JS/src-api/lara/mutation/IterativeMutator.ts +++ b/Lara-JS/api/lara/mutation/IterativeMutator.ts @@ -1,8 +1,8 @@ -import { InsertPosition, LaraJoinPoint } from "../../LaraJoinPoint.js"; -import { arrayFromArgs } from "../core/LaraCore.js"; -import Mutation from "./Mutation.js"; -import MutationResult from "./MutationResult.js"; -import Mutator from "./Mutator.js"; +import { InsertPosition, LaraJoinPoint } from "../../LaraJoinPoint.ts"; +import { arrayFromArgs } from "../core/LaraCore.ts"; +import Mutation from "./Mutation.ts"; +import MutationResult from "./MutationResult.ts"; +import Mutator from "./Mutator.ts"; /** * Iterative mutator, allows to perform one mutation at a time, and restore the code before each mutation. diff --git a/Lara-JS/src-api/lara/mutation/Mutation.ts b/Lara-JS/api/lara/mutation/Mutation.ts similarity index 92% rename from Lara-JS/src-api/lara/mutation/Mutation.ts rename to Lara-JS/api/lara/mutation/Mutation.ts index 9563a2ff4..ed1f18b12 100644 --- a/Lara-JS/src-api/lara/mutation/Mutation.ts +++ b/Lara-JS/api/lara/mutation/Mutation.ts @@ -1,5 +1,5 @@ -import { LaraJoinPoint } from "../../LaraJoinPoint.js"; -import MutationResult from "./MutationResult.js"; +import { LaraJoinPoint } from "../../LaraJoinPoint.ts"; +import MutationResult from "./MutationResult.ts"; /** * Base class that represents a code mutation. diff --git a/Lara-JS/src-api/lara/mutation/MutationResult.ts b/Lara-JS/api/lara/mutation/MutationResult.ts similarity index 86% rename from Lara-JS/src-api/lara/mutation/MutationResult.ts rename to Lara-JS/api/lara/mutation/MutationResult.ts index e60e80d58..20dfde9f2 100644 --- a/Lara-JS/src-api/lara/mutation/MutationResult.ts +++ b/Lara-JS/api/lara/mutation/MutationResult.ts @@ -1,4 +1,4 @@ -import { LaraJoinPoint } from "../../LaraJoinPoint.js"; +import { LaraJoinPoint } from "../../LaraJoinPoint.ts"; /** * Contains the results of a single mutation. diff --git a/Lara-JS/src-api/lara/mutation/Mutator.ts b/Lara-JS/api/lara/mutation/Mutator.ts similarity index 98% rename from Lara-JS/src-api/lara/mutation/Mutator.ts rename to Lara-JS/api/lara/mutation/Mutator.ts index 2e490fd30..ff43f5257 100644 --- a/Lara-JS/src-api/lara/mutation/Mutator.ts +++ b/Lara-JS/api/lara/mutation/Mutator.ts @@ -1,4 +1,4 @@ -import { LaraJoinPoint } from "../../LaraJoinPoint.js"; +import { LaraJoinPoint } from "../../LaraJoinPoint.ts"; /** * Base class that represents a code mutator. diff --git a/Lara-JS/src-api/lara/pass/AdapterPass.ts b/Lara-JS/api/lara/pass/AdapterPass.ts similarity index 89% rename from Lara-JS/src-api/lara/pass/AdapterPass.ts rename to Lara-JS/api/lara/pass/AdapterPass.ts index 624f84171..789d610fc 100644 --- a/Lara-JS/src-api/lara/pass/AdapterPass.ts +++ b/Lara-JS/api/lara/pass/AdapterPass.ts @@ -1,8 +1,8 @@ -import { LaraJoinPoint } from "../../LaraJoinPoint.js"; -import TraversalType from "../../weaver/TraversalType.js"; -import PassTransformationError from "./PassTransformationError.js"; -import SimplePass from "./SimplePass.js"; -import AggregatePassResult from "./results/AggregatePassResult.js"; +import { LaraJoinPoint } from "../../LaraJoinPoint.ts"; +import { TraversalType } from "../../weaver/TraversalType.ts"; +import PassTransformationError from "./PassTransformationError.ts"; +import SimplePass from "./SimplePass.ts"; +import AggregatePassResult from "./results/AggregatePassResult.ts"; /** * Helper class to wrap existing code into a Lara transformation pass. diff --git a/Lara-JS/src-api/lara/pass/Pass.ts b/Lara-JS/api/lara/pass/Pass.ts similarity index 83% rename from Lara-JS/src-api/lara/pass/Pass.ts rename to Lara-JS/api/lara/pass/Pass.ts index 25351947e..b23055060 100644 --- a/Lara-JS/src-api/lara/pass/Pass.ts +++ b/Lara-JS/api/lara/pass/Pass.ts @@ -1,7 +1,7 @@ -import { LaraJoinPoint } from "../../LaraJoinPoint.js"; -import Query from "../../weaver/Query.js"; -import { debug } from "../core/LaraCore.js"; -import PassResult from "./results/PassResult.js"; +import { LaraJoinPoint } from "../../LaraJoinPoint.ts"; +import Query from "../../weaver/Query.ts"; +import { debug } from "../core/LaraCore.ts"; +import PassResult from "./results/PassResult.ts"; /** * Represents a Lara transformation pass. diff --git a/Lara-JS/src-api/lara/pass/PassTransformationError.ts b/Lara-JS/api/lara/pass/PassTransformationError.ts similarity index 90% rename from Lara-JS/src-api/lara/pass/PassTransformationError.ts rename to Lara-JS/api/lara/pass/PassTransformationError.ts index c7e93ed1d..8936ed564 100644 --- a/Lara-JS/src-api/lara/pass/PassTransformationError.ts +++ b/Lara-JS/api/lara/pass/PassTransformationError.ts @@ -1,5 +1,5 @@ -import { LaraJoinPoint } from "../../LaraJoinPoint.js"; -import Pass from "./Pass.js"; +import { LaraJoinPoint } from "../../LaraJoinPoint.ts"; +import Pass from "./Pass.ts"; export default class PassTransformationError extends Error { name = "PassTransformationError"; diff --git a/Lara-JS/src-api/lara/pass/SimplePass.ts b/Lara-JS/api/lara/pass/SimplePass.ts similarity index 89% rename from Lara-JS/src-api/lara/pass/SimplePass.ts rename to Lara-JS/api/lara/pass/SimplePass.ts index 30f264613..e6d6614e4 100644 --- a/Lara-JS/src-api/lara/pass/SimplePass.ts +++ b/Lara-JS/api/lara/pass/SimplePass.ts @@ -1,9 +1,9 @@ -import { LaraJoinPoint } from "../../LaraJoinPoint.js"; -import TraversalType from "../../weaver/TraversalType.js"; -import Pass from "./Pass.js"; -import PassTransformationError from "./PassTransformationError.js"; -import AggregatePassResult from "./results/AggregatePassResult.js"; -import PassResult from "./results/PassResult.js"; +import { LaraJoinPoint } from "../../LaraJoinPoint.ts"; +import { TraversalType } from "../../weaver/TraversalType.ts"; +import Pass from "./Pass.ts"; +import PassTransformationError from "./PassTransformationError.ts"; +import AggregatePassResult from "./results/AggregatePassResult.ts"; +import PassResult from "./results/PassResult.ts"; /** * Represents a Lara transformation pass. diff --git a/Lara-JS/src-api/lara/pass/composition/PassApplyArg.ts b/Lara-JS/api/lara/pass/composition/PassApplyArg.ts similarity index 100% rename from Lara-JS/src-api/lara/pass/composition/PassApplyArg.ts rename to Lara-JS/api/lara/pass/composition/PassApplyArg.ts diff --git a/Lara-JS/src-api/lara/pass/composition/Passes.ts b/Lara-JS/api/lara/pass/composition/Passes.ts similarity index 80% rename from Lara-JS/src-api/lara/pass/composition/Passes.ts rename to Lara-JS/api/lara/pass/composition/Passes.ts index a626f5664..dde5dbaf9 100644 --- a/Lara-JS/src-api/lara/pass/composition/Passes.ts +++ b/Lara-JS/api/lara/pass/composition/Passes.ts @@ -1,7 +1,7 @@ -import { LaraJoinPoint } from "../../../LaraJoinPoint.js"; -import { arrayFromArgs } from "../../core/LaraCore.js"; -import Pass from "../Pass.js"; -import PassResult from "../results/PassResult.js"; +import { LaraJoinPoint } from "../../../LaraJoinPoint.ts"; +import { arrayFromArgs } from "../../core/LaraCore.ts"; +import Pass from "../Pass.ts"; +import PassResult from "../results/PassResult.ts"; /** * @deprecated Use AdapterPass instead diff --git a/Lara-JS/src-api/lara/pass/results/AggregatePassResult.ts b/Lara-JS/api/lara/pass/results/AggregatePassResult.ts similarity index 94% rename from Lara-JS/src-api/lara/pass/results/AggregatePassResult.ts rename to Lara-JS/api/lara/pass/results/AggregatePassResult.ts index 9508d784d..cc0e25b0c 100644 --- a/Lara-JS/src-api/lara/pass/results/AggregatePassResult.ts +++ b/Lara-JS/api/lara/pass/results/AggregatePassResult.ts @@ -1,7 +1,7 @@ -import { LaraJoinPoint } from "../../../LaraJoinPoint.js"; -import Pass from "../Pass.js"; -import PassTransformationError from "../PassTransformationError.js"; -import PassResult from "./PassResult.js"; +import { LaraJoinPoint } from "../../../LaraJoinPoint.ts"; +import Pass from "../Pass.ts"; +import PassTransformationError from "../PassTransformationError.ts"; +import PassResult from "./PassResult.ts"; export default class AggregatePassResult extends PassResult { /** diff --git a/Lara-JS/src-api/lara/pass/results/PassResult.ts b/Lara-JS/api/lara/pass/results/PassResult.ts similarity index 96% rename from Lara-JS/src-api/lara/pass/results/PassResult.ts rename to Lara-JS/api/lara/pass/results/PassResult.ts index c3bb77394..6e7fbeec6 100644 --- a/Lara-JS/src-api/lara/pass/results/PassResult.ts +++ b/Lara-JS/api/lara/pass/results/PassResult.ts @@ -1,5 +1,5 @@ -import { LaraJoinPoint } from "../../../LaraJoinPoint.js"; -import Pass from "../Pass.js"; +import { LaraJoinPoint } from "../../../LaraJoinPoint.ts"; +import Pass from "../Pass.ts"; /** * The result of a Lara transformation pass diff --git a/Lara-JS/src-api/lara/tool/Tool.ts b/Lara-JS/api/lara/tool/Tool.ts similarity index 100% rename from Lara-JS/src-api/lara/tool/Tool.ts rename to Lara-JS/api/lara/tool/Tool.ts diff --git a/Lara-JS/src-api/lara/tool/ToolUtils.ts b/Lara-JS/api/lara/tool/ToolUtils.ts similarity index 79% rename from Lara-JS/src-api/lara/tool/ToolUtils.ts rename to Lara-JS/api/lara/tool/ToolUtils.ts index f3296478a..d08a340f5 100644 --- a/Lara-JS/src-api/lara/tool/ToolUtils.ts +++ b/Lara-JS/api/lara/tool/ToolUtils.ts @@ -1,5 +1,5 @@ -import { JavaClasses } from "../util/JavaTypes.js"; -import Strings from "../Strings.js"; +import { type JavaClasses } from "../util/JavaTypes.ts"; +import Strings from "../Strings.ts"; export default class ToolUtils { static parsePath(path: string | JavaClasses.File): string { diff --git a/Lara-JS/src-api/lara/units/EnergyUnit.ts b/Lara-JS/api/lara/units/EnergyUnit.ts similarity index 91% rename from Lara-JS/src-api/lara/units/EnergyUnit.ts rename to Lara-JS/api/lara/units/EnergyUnit.ts index fad4ceee8..f41582c75 100644 --- a/Lara-JS/src-api/lara/units/EnergyUnit.ts +++ b/Lara-JS/api/lara/units/EnergyUnit.ts @@ -1,5 +1,5 @@ -import SiUnit from "./SiUnit.js"; -import SiModifier from "./SiModifier.js"; +import SiUnit from "./SiUnit.ts"; +import SiModifier from "./SiModifier.ts"; /** * ! If you are ever in need of using this class, please PLEASE refactor it. diff --git a/Lara-JS/src-api/lara/units/SiModifier.ts b/Lara-JS/api/lara/units/SiModifier.ts similarity index 96% rename from Lara-JS/src-api/lara/units/SiModifier.ts rename to Lara-JS/api/lara/units/SiModifier.ts index 5f9b88dda..a1946a052 100644 --- a/Lara-JS/src-api/lara/units/SiModifier.ts +++ b/Lara-JS/api/lara/units/SiModifier.ts @@ -1,4 +1,4 @@ -import UnitModifier from "./UnitModifier.js"; +import UnitModifier from "./UnitModifier.ts"; /** * ! If you are ever in need of using this class, please PLEASE refactor it. diff --git a/Lara-JS/src-api/lara/units/SiUnit.ts b/Lara-JS/api/lara/units/SiUnit.ts similarity index 79% rename from Lara-JS/src-api/lara/units/SiUnit.ts rename to Lara-JS/api/lara/units/SiUnit.ts index 4a8fd2e61..156d244ee 100644 --- a/Lara-JS/src-api/lara/units/SiUnit.ts +++ b/Lara-JS/api/lara/units/SiUnit.ts @@ -1,5 +1,5 @@ -import UnitWithModifier from "./UnitWithModifier.js"; -import SiModifier from "./SiModifier.js"; +import UnitWithModifier from "./UnitWithModifier.ts"; +import SiModifier from "./SiModifier.ts"; /** * ! If you are ever in need of using this class, please PLEASE refactor it. diff --git a/Lara-JS/src-api/lara/units/TimeModifier.ts b/Lara-JS/api/lara/units/TimeModifier.ts similarity index 93% rename from Lara-JS/src-api/lara/units/TimeModifier.ts rename to Lara-JS/api/lara/units/TimeModifier.ts index 2df86a7ac..b51f1ad26 100644 --- a/Lara-JS/src-api/lara/units/TimeModifier.ts +++ b/Lara-JS/api/lara/units/TimeModifier.ts @@ -1,4 +1,4 @@ -import SiModifier from "./SiModifier.js"; +import SiModifier from "./SiModifier.ts"; /** * ! If you are ever in need of using this class, please PLEASE refactor it. diff --git a/Lara-JS/src-api/lara/units/TimeUnit.ts b/Lara-JS/api/lara/units/TimeUnit.ts similarity index 95% rename from Lara-JS/src-api/lara/units/TimeUnit.ts rename to Lara-JS/api/lara/units/TimeUnit.ts index c44737efb..dd82ce50b 100644 --- a/Lara-JS/src-api/lara/units/TimeUnit.ts +++ b/Lara-JS/api/lara/units/TimeUnit.ts @@ -1,5 +1,5 @@ -import SiUnit from "./SiUnit.js"; -import TimeModifier from "./TimeModifier.js"; +import SiUnit from "./SiUnit.ts"; +import TimeModifier from "./TimeModifier.ts"; /** * ! If you are ever in need of using this class, please PLEASE refactor it. diff --git a/Lara-JS/src-api/lara/units/Unit.ts b/Lara-JS/api/lara/units/Unit.ts similarity index 100% rename from Lara-JS/src-api/lara/units/Unit.ts rename to Lara-JS/api/lara/units/Unit.ts diff --git a/Lara-JS/src-api/lara/units/UnitModifier.ts b/Lara-JS/api/lara/units/UnitModifier.ts similarity index 100% rename from Lara-JS/src-api/lara/units/UnitModifier.ts rename to Lara-JS/api/lara/units/UnitModifier.ts diff --git a/Lara-JS/src-api/lara/units/UnitWithModifier.ts b/Lara-JS/api/lara/units/UnitWithModifier.ts similarity index 95% rename from Lara-JS/src-api/lara/units/UnitWithModifier.ts rename to Lara-JS/api/lara/units/UnitWithModifier.ts index 01cc4e826..0b02a3857 100644 --- a/Lara-JS/src-api/lara/units/UnitWithModifier.ts +++ b/Lara-JS/api/lara/units/UnitWithModifier.ts @@ -1,5 +1,5 @@ -import Unit from "./Unit.js"; -import UnitModifier from "./UnitModifier.js"; +import Unit from "./Unit.ts"; +import UnitModifier from "./UnitModifier.ts"; /** * ! If you are ever in need of using this class, please PLEASE refactor it. diff --git a/Lara-JS/src-api/lara/util/AbstractClassError.ts b/Lara-JS/api/lara/util/AbstractClassError.ts similarity index 100% rename from Lara-JS/src-api/lara/util/AbstractClassError.ts rename to Lara-JS/api/lara/util/AbstractClassError.ts diff --git a/Lara-JS/src-api/lara/util/Accumulator.test.ts b/Lara-JS/api/lara/util/Accumulator.test.ts similarity index 93% rename from Lara-JS/src-api/lara/util/Accumulator.test.ts rename to Lara-JS/api/lara/util/Accumulator.test.ts index 9877cb1d9..62370d0e4 100644 --- a/Lara-JS/src-api/lara/util/Accumulator.test.ts +++ b/Lara-JS/api/lara/util/Accumulator.test.ts @@ -1,4 +1,4 @@ -import Accumulator from "./Accumulator.js"; +import Accumulator from "./Accumulator.ts"; describe("Accumulator", () => { describe("add", () => { @@ -16,7 +16,7 @@ describe("Accumulator", () => { const acc = new Accumulator; expect(acc.get("step1")).toBe(0); }); - it("is 0 for step1 after adding an array with a step1 and a step2 and 1 for tuple step1,step2 ", () => { + it("is 0 for step1 after adding an array with a step1 and a step2 and 1 for tuple step1,step2", () => { const acc = new Accumulator; acc.add("step1", "step2"); expect(acc.get("step1")).toBe(0); @@ -70,7 +70,6 @@ describe("Accumulator", () => { acc.add("step1","step2"); acc.add("step1"); acc.add(["step1","step2"]); - const res = [["step1"],["step1","step2"]]; expect(acc.keys()[0]).toStrictEqual(["step1"]); expect(acc.keys()[1]).toStrictEqual(["step1", "step2"]); }) diff --git a/Lara-JS/src-api/lara/util/Accumulator.ts b/Lara-JS/api/lara/util/Accumulator.ts similarity index 97% rename from Lara-JS/src-api/lara/util/Accumulator.ts rename to Lara-JS/api/lara/util/Accumulator.ts index 669983f12..12a65a775 100644 --- a/Lara-JS/src-api/lara/util/Accumulator.ts +++ b/Lara-JS/api/lara/util/Accumulator.ts @@ -71,7 +71,7 @@ export default class Accumulator { } copy(...args: any) { - let copy: Accumulator = new Accumulator(); + const copy: Accumulator = new Accumulator(); for (const key of this.keys()) { const value: number = this.get(key); @@ -125,7 +125,7 @@ export default class Accumulator { throw "Accumulator._parseArguments: Expected arguments to have length 1"; } - let functionArguments = args[0]; + const functionArguments = args[0]; // If one argument and array, return it if ( diff --git a/Lara-JS/src-api/lara/util/Checkpoint.ts b/Lara-JS/api/lara/util/Checkpoint.ts similarity index 94% rename from Lara-JS/src-api/lara/util/Checkpoint.ts rename to Lara-JS/api/lara/util/Checkpoint.ts index f9cba7fae..ef5fedda2 100644 --- a/Lara-JS/src-api/lara/util/Checkpoint.ts +++ b/Lara-JS/api/lara/util/Checkpoint.ts @@ -1,6 +1,6 @@ -import Io from "../Io.js"; -import JavaTypes from "./JavaTypes.js"; -import TimeUnits, { TimerUnit } from "./TimeUnits.js"; +import Io from "../Io.ts"; +import JavaTypes from "./JavaTypes.ts"; +import TimeUnits, { TimerUnit } from "./TimeUnits.ts"; /** * Allows checkpointing of generic objects. diff --git a/Lara-JS/src-api/lara/util/Combinations.ts b/Lara-JS/api/lara/util/Combinations.ts similarity index 94% rename from Lara-JS/src-api/lara/util/Combinations.ts rename to Lara-JS/api/lara/util/Combinations.ts index 775bf009c..31422d33f 100644 --- a/Lara-JS/src-api/lara/util/Combinations.ts +++ b/Lara-JS/api/lara/util/Combinations.ts @@ -1,5 +1,5 @@ -import Numbers from "../Numbers.js"; -import SequentialCombinations from "./SequentialCombinations.js"; +import Numbers from "../Numbers.ts"; +import SequentialCombinations from "./SequentialCombinations.ts"; /** * Generates sequential sequences of combinations, according to the given number of elements. diff --git a/Lara-JS/src-api/lara/util/DataStore.ts b/Lara-JS/api/lara/util/DataStore.ts similarity index 98% rename from Lara-JS/src-api/lara/util/DataStore.ts rename to Lara-JS/api/lara/util/DataStore.ts index 0779dfad8..c59924741 100644 --- a/Lara-JS/src-api/lara/util/DataStore.ts +++ b/Lara-JS/api/lara/util/DataStore.ts @@ -1,6 +1,6 @@ -import Io from "../Io.js"; -import { info } from "../core/LaraCore.js"; -import JavaTypes, { JavaClasses } from "./JavaTypes.js"; +import Io from "../Io.ts"; +import { info } from "../core/LaraCore.ts"; +import JavaTypes, { type JavaClasses } from "./JavaTypes.ts"; /** * Interface with Java class DataStore, used for storing arbitrary information. diff --git a/Lara-JS/src-api/lara/util/IdGenerator.test.ts b/Lara-JS/api/lara/util/IdGenerator.test.ts similarity index 95% rename from Lara-JS/src-api/lara/util/IdGenerator.test.ts rename to Lara-JS/api/lara/util/IdGenerator.test.ts index 614ebbf7e..da7e0191f 100644 --- a/Lara-JS/src-api/lara/util/IdGenerator.test.ts +++ b/Lara-JS/api/lara/util/IdGenerator.test.ts @@ -1,4 +1,4 @@ -import IdGenerator, { IdGeneratorClass } from "./IdGenerator.js"; +import IdGenerator, { IdGeneratorClass } from "./IdGenerator.ts"; describe("IdGenerator", () => { describe("IdGenerator", () => { diff --git a/Lara-JS/src-api/lara/util/IdGenerator.ts b/Lara-JS/api/lara/util/IdGenerator.ts similarity index 100% rename from Lara-JS/src-api/lara/util/IdGenerator.ts rename to Lara-JS/api/lara/util/IdGenerator.ts diff --git a/Lara-JS/src-api/lara/util/JavaTypes.test.ts b/Lara-JS/api/lara/util/JavaTypes.test.ts similarity index 95% rename from Lara-JS/src-api/lara/util/JavaTypes.test.ts rename to Lara-JS/api/lara/util/JavaTypes.test.ts index a2ffb8e29..12423c914 100644 --- a/Lara-JS/src-api/lara/util/JavaTypes.test.ts +++ b/Lara-JS/api/lara/util/JavaTypes.test.ts @@ -1,4 +1,4 @@ -import JavaTypes from "./JavaTypes.js"; +import JavaTypes from "./JavaTypes.ts"; describe("JavaTypes", () => { describe("getLaraI", () => { diff --git a/Lara-JS/src-api/lara/util/JavaTypes.ts b/Lara-JS/api/lara/util/JavaTypes.ts similarity index 97% rename from Lara-JS/src-api/lara/util/JavaTypes.ts rename to Lara-JS/api/lara/util/JavaTypes.ts index c4623fd38..a02153b43 100644 --- a/Lara-JS/src-api/lara/util/JavaTypes.ts +++ b/Lara-JS/api/lara/util/JavaTypes.ts @@ -10,7 +10,7 @@ export namespace JavaClasses { [key: string]: any; } - /* eslint-disable @typescript-eslint/no-empty-interface, @typescript-eslint/no-empty-object-type */ + /* eslint-disable @typescript-eslint/no-empty-object-type */ export interface LaraI extends JavaClass {} export interface LaraApiTools extends JavaClass {} export interface LaraSystemTools extends JavaClass { @@ -71,7 +71,7 @@ export namespace JavaClasses { } export interface ProgressCounter extends JavaClasses.JavaClass {} export interface LineStream extends JavaClasses.JavaClass {} - /* eslint-enable @typescript-eslint/no-empty-interface, @typescript-eslint/no-empty-object-type */ + /* eslint-enable @typescript-eslint/no-empty-object-type */ } export default class JavaTypes { diff --git a/Lara-JS/src-api/lara/util/JpFilter.ts b/Lara-JS/api/lara/util/JpFilter.ts similarity index 94% rename from Lara-JS/src-api/lara/util/JpFilter.ts rename to Lara-JS/api/lara/util/JpFilter.ts index d14197d53..306ee0099 100644 --- a/Lara-JS/src-api/lara/util/JpFilter.ts +++ b/Lara-JS/api/lara/util/JpFilter.ts @@ -1,5 +1,5 @@ -import { LaraJoinPoint } from "../../LaraJoinPoint.js"; -import { laraGetter } from "../core/LaraCore.js"; +import { LaraJoinPoint } from "../../LaraJoinPoint.ts"; +import { laraGetter } from "../core/LaraCore.ts"; type JpFilterTypes = | RegExp diff --git a/Lara-JS/src-api/lara/util/LineInserter.ts b/Lara-JS/api/lara/util/LineInserter.ts similarity index 92% rename from Lara-JS/src-api/lara/util/LineInserter.ts rename to Lara-JS/api/lara/util/LineInserter.ts index 81452ba2a..b0c91dc06 100644 --- a/Lara-JS/src-api/lara/util/LineInserter.ts +++ b/Lara-JS/api/lara/util/LineInserter.ts @@ -1,5 +1,5 @@ -import LineIterator from "../iterators/LineIterator.js"; -import { JavaClasses } from "./JavaTypes.js"; +import LineIterator from "../iterators/LineIterator.ts"; +import { type JavaClasses } from "./JavaTypes.ts"; /** * Helps inserting lines. diff --git a/Lara-JS/src-api/lara/util/LocalFolder.ts b/Lara-JS/api/lara/util/LocalFolder.ts similarity index 93% rename from Lara-JS/src-api/lara/util/LocalFolder.ts rename to Lara-JS/api/lara/util/LocalFolder.ts index 4646bcab2..96b241499 100644 --- a/Lara-JS/src-api/lara/util/LocalFolder.ts +++ b/Lara-JS/api/lara/util/LocalFolder.ts @@ -1,7 +1,7 @@ -import { fileToJSON } from "../../core/output.js"; -import Io from "../Io.js"; -import JavaTypes, { JavaClasses } from "./JavaTypes.js"; -import System from "../System.js"; +import { fileToJSON } from "../../core/output.ts"; +import Io from "../Io.ts"; +import JavaTypes, { type JavaClasses } from "./JavaTypes.ts"; +import System from "../System.ts"; /** * Provides access to files in a specific folder. diff --git a/Lara-JS/src-api/lara/util/PredefinedStrings.ts b/Lara-JS/api/lara/util/PredefinedStrings.ts similarity index 96% rename from Lara-JS/src-api/lara/util/PredefinedStrings.ts rename to Lara-JS/api/lara/util/PredefinedStrings.ts index fbbd76cf2..3c5211c1a 100644 --- a/Lara-JS/src-api/lara/util/PredefinedStrings.ts +++ b/Lara-JS/api/lara/util/PredefinedStrings.ts @@ -1,4 +1,4 @@ -import { arrayFromArgs } from "../core/LaraCore.js"; +import { arrayFromArgs } from "../core/LaraCore.ts"; /** * Represents a set of predefined strings. diff --git a/Lara-JS/src-api/lara/util/PrintOnce.test.ts b/Lara-JS/api/lara/util/PrintOnce.test.ts similarity index 92% rename from Lara-JS/src-api/lara/util/PrintOnce.test.ts rename to Lara-JS/api/lara/util/PrintOnce.test.ts index bb271d851..36b9a0f18 100644 --- a/Lara-JS/src-api/lara/util/PrintOnce.test.ts +++ b/Lara-JS/api/lara/util/PrintOnce.test.ts @@ -1,4 +1,4 @@ -import PrintOnce from "./PrintOnce.js" +import PrintOnce from "./PrintOnce.ts" describe("PrintOnce", () => { describe("message", () => { diff --git a/Lara-JS/src-api/lara/util/PrintOnce.ts b/Lara-JS/api/lara/util/PrintOnce.ts similarity index 100% rename from Lara-JS/src-api/lara/util/PrintOnce.ts rename to Lara-JS/api/lara/util/PrintOnce.ts diff --git a/Lara-JS/src-api/lara/util/ProcessExecutor.ts b/Lara-JS/api/lara/util/ProcessExecutor.ts similarity index 96% rename from Lara-JS/src-api/lara/util/ProcessExecutor.ts rename to Lara-JS/api/lara/util/ProcessExecutor.ts index 9a83f6770..70c1e7c4c 100644 --- a/Lara-JS/src-api/lara/util/ProcessExecutor.ts +++ b/Lara-JS/api/lara/util/ProcessExecutor.ts @@ -1,8 +1,8 @@ -import Io from "../Io.js"; -import JavaInterop from "../JavaInterop.js"; -import { arrayFromArgs, checkType } from "../core/LaraCore.js"; -import JavaTypes, { JavaClasses } from "./JavaTypes.js"; -import TimeUnits, { TimerUnit } from "./TimeUnits.js"; +import Io from "../Io.ts"; +import JavaInterop from "../JavaInterop.ts"; +import { arrayFromArgs, checkType } from "../core/LaraCore.ts"; +import JavaTypes, { type JavaClasses } from "./JavaTypes.ts"; +import TimeUnits, { TimerUnit } from "./TimeUnits.ts"; /** * Launches processes. diff --git a/Lara-JS/src-api/lara/util/Random.ts b/Lara-JS/api/lara/util/Random.ts similarity index 93% rename from Lara-JS/src-api/lara/util/Random.ts rename to Lara-JS/api/lara/util/Random.ts index e57a8bd75..019add1c6 100644 --- a/Lara-JS/src-api/lara/util/Random.ts +++ b/Lara-JS/api/lara/util/Random.ts @@ -1,4 +1,4 @@ -import JavaTypes from "./JavaTypes.js"; +import JavaTypes from "./JavaTypes.ts"; /** * Can generate random numbers from a user-defined seed. diff --git a/Lara-JS/src-api/lara/util/Replacer.ts b/Lara-JS/api/lara/util/Replacer.ts similarity index 90% rename from Lara-JS/src-api/lara/util/Replacer.ts rename to Lara-JS/api/lara/util/Replacer.ts index ed783ce6a..23d433ceb 100644 --- a/Lara-JS/src-api/lara/util/Replacer.ts +++ b/Lara-JS/api/lara/util/Replacer.ts @@ -1,5 +1,5 @@ -import Io from "../Io.js"; -import JavaTypes, { JavaClasses } from "./JavaTypes.js"; +import Io from "../Io.ts"; +import JavaTypes, { type JavaClasses } from "./JavaTypes.ts"; /** * Replaces strings inside a larger string. diff --git a/Lara-JS/src-api/lara/util/SequentialCombinations.ts b/Lara-JS/api/lara/util/SequentialCombinations.ts similarity index 97% rename from Lara-JS/src-api/lara/util/SequentialCombinations.ts rename to Lara-JS/api/lara/util/SequentialCombinations.ts index 2d334d717..072bddec0 100644 --- a/Lara-JS/src-api/lara/util/SequentialCombinations.ts +++ b/Lara-JS/api/lara/util/SequentialCombinations.ts @@ -1,4 +1,4 @@ -import Numbers from "../Numbers.js"; +import Numbers from "../Numbers.ts"; /** * Generates sequential sequences of combinations, according to the given number of elements. diff --git a/Lara-JS/src-api/lara/util/StringSet.ts b/Lara-JS/api/lara/util/StringSet.ts similarity index 100% rename from Lara-JS/src-api/lara/util/StringSet.ts rename to Lara-JS/api/lara/util/StringSet.ts diff --git a/Lara-JS/src-api/lara/util/TimeUnits.ts b/Lara-JS/api/lara/util/TimeUnits.ts similarity index 81% rename from Lara-JS/src-api/lara/util/TimeUnits.ts rename to Lara-JS/api/lara/util/TimeUnits.ts index 714d0e0b0..02cc48b2f 100644 --- a/Lara-JS/src-api/lara/util/TimeUnits.ts +++ b/Lara-JS/api/lara/util/TimeUnits.ts @@ -5,15 +5,21 @@ interface TimerUnitI { magnitudeFactorNanoseconds: number; } -export enum TimerUnit { - NANOSECONDS = 1, - MICROSECONDS = 2, - MILLISECONDS = 3, - SECONDS = 4, - MINUTES = 5, - HOURS = 6, - DAYS = 7, -} +/** + * This is supposed to be an enum, but Node.js v25 does bot support TS' enums, only erasable-syntax. + * Revert to an enum when Node.js supports it, or when we move to a different engine that supports it. + * This and the "type" declaration below. + */ +export const TimerUnit = { + NANOSECONDS: 1, + MICROSECONDS: 2, + MILLISECONDS: 3, + SECONDS: 4, + MINUTES: 5, + HOURS: 6, + DAYS: 7, +} as const; +export type TimerUnit = typeof TimerUnit[keyof typeof TimerUnit]; const timerUnitData: Record = { [TimerUnit.NANOSECONDS]: { diff --git a/Lara-JS/src-api/lara/util/TupleId.ts b/Lara-JS/api/lara/util/TupleId.ts similarity index 100% rename from Lara-JS/src-api/lara/util/TupleId.ts rename to Lara-JS/api/lara/util/TupleId.ts diff --git a/Lara-JS/src-api/weaver/JoinPoints.ts b/Lara-JS/api/weaver/JoinPoints.ts similarity index 96% rename from Lara-JS/src-api/weaver/JoinPoints.ts rename to Lara-JS/api/weaver/JoinPoints.ts index 29ee5da65..c74e9c6f6 100644 --- a/Lara-JS/src-api/weaver/JoinPoints.ts +++ b/Lara-JS/api/weaver/JoinPoints.ts @@ -1,6 +1,6 @@ -import { LaraJoinPoint, wrapJoinPoint } from "../LaraJoinPoint.js"; -import Weaver from "./Weaver.js"; -import JpPredicate from "./predicate/JpPredicate.js"; +import { LaraJoinPoint, wrapJoinPoint } from "../LaraJoinPoint.ts"; +import Weaver from "./Weaver.ts"; +import JpPredicate from "./predicate/JpPredicate.ts"; /** * Object which provides low-level join point-related methods. @@ -180,7 +180,6 @@ export default class JoinPoints { for (let obj = $jp; obj !== null; obj = Object.getPrototypeOf(obj)) { const descriptor = Object.getOwnPropertyDescriptor(obj, property); if (descriptor !== undefined) { - let attributeValue: any = undefined; if (Object.getOwnPropertyDescriptor(descriptor, "get")) { return descriptor.get?.call?.($jp); } else if (Object.getOwnPropertyDescriptor(descriptor, "value")) { diff --git a/Lara-JS/src-api/weaver/Query.ts b/Lara-JS/api/weaver/Query.ts similarity index 98% rename from Lara-JS/src-api/weaver/Query.ts rename to Lara-JS/api/weaver/Query.ts index fd5b6fb15..3705dc3c5 100644 --- a/Lara-JS/src-api/weaver/Query.ts +++ b/Lara-JS/api/weaver/Query.ts @@ -1,10 +1,10 @@ -import { LaraJoinPoint } from "../LaraJoinPoint.js"; -import JoinPoints from "./JoinPoints.js"; +import { LaraJoinPoint } from "../LaraJoinPoint.ts"; +import JoinPoints from "./JoinPoints.ts"; import Selector, { type Filter_StringVariant, type Filter_WrapperVariant, -} from "./Selector.js"; -import TraversalType from "./TraversalType.js"; +} from "./Selector.ts"; +import { TraversalType } from "./TraversalType.ts"; /** * Class for selection of join points. Provides an API similar to the keyword 'select'. diff --git a/Lara-JS/src-api/weaver/Script.ts b/Lara-JS/api/weaver/Script.ts similarity index 96% rename from Lara-JS/src-api/weaver/Script.ts rename to Lara-JS/api/weaver/Script.ts index ed942d506..018693a16 100644 --- a/Lara-JS/src-api/weaver/Script.ts +++ b/Lara-JS/api/weaver/Script.ts @@ -1,4 +1,4 @@ -import Weaver from "./Weaver.js"; +import Weaver from "./Weaver.ts"; /** * Utility methods related to execution of scripts in a LARA environment. diff --git a/Lara-JS/src-api/weaver/Selector.ts b/Lara-JS/api/weaver/Selector.ts similarity index 96% rename from Lara-JS/src-api/weaver/Selector.ts rename to Lara-JS/api/weaver/Selector.ts index 956807d35..a5e45e874 100644 --- a/Lara-JS/src-api/weaver/Selector.ts +++ b/Lara-JS/api/weaver/Selector.ts @@ -2,16 +2,16 @@ import { LaraJoinPoint, type NameFromWrapperClass, type DefaultAttribute, -} from "../LaraJoinPoint.js"; -import { laraGetter } from "../lara/core/LaraCore.js"; -import Accumulator from "../lara/util/Accumulator.js"; -import { type JpFilterRules } from "../lara/util/JpFilter.js"; -import JoinPoints from "./JoinPoints.js"; -import TraversalType from "./TraversalType.js"; -import Weaver from "./Weaver.js"; -import JpPredicate from "./predicate/JpPredicate.js"; -import StringPredicate from "./predicate/StringPredicate.js"; -import TypePredicate from "./predicate/TypePredicate.js"; +} from "../LaraJoinPoint.ts"; +import { laraGetter } from "../lara/core/LaraCore.ts"; +import Accumulator from "../lara/util/Accumulator.ts"; +import { type JpFilterRules } from "../lara/util/JpFilter.ts"; +import JoinPoints from "./JoinPoints.ts"; +import { TraversalType } from "./TraversalType.ts"; +import Weaver from "./Weaver.ts"; +import JpPredicate from "./predicate/JpPredicate.ts"; +import StringPredicate from "./predicate/StringPredicate.ts"; +import TypePredicate from "./predicate/TypePredicate.ts"; /** * @internal Lara Common Language dirty hack. IMPROPER USAGE WILL BREAK THE WHOLE WEAVER! @@ -318,7 +318,6 @@ export default class Selector< break; default: throw new Error( - // eslint-disable-next-line @typescript-eslint/restrict-template-expressions `Traversal type not implemented: ${traversal}` ); } diff --git a/Lara-JS/api/weaver/TraversalType.ts b/Lara-JS/api/weaver/TraversalType.ts new file mode 100644 index 000000000..cc4fb7ca2 --- /dev/null +++ b/Lara-JS/api/weaver/TraversalType.ts @@ -0,0 +1,12 @@ +/** + * Enumeration of AST traversal types. + * + * This is supposed to be an enum, but Node.js v25 does bot support TS' enums, only erasable-syntax. + * Revert to an enum when Node.js supports it, or when we move to a different engine that supports it. + * This and the "type" declaration below. + */ +export const TraversalType = { + PREORDER: "preorder", + POSTORDER: "postorder", +} as const; +export type TraversalType = typeof TraversalType[keyof typeof TraversalType]; diff --git a/Lara-JS/src-api/weaver/Weaver.ts b/Lara-JS/api/weaver/Weaver.ts similarity index 93% rename from Lara-JS/src-api/weaver/Weaver.ts rename to Lara-JS/api/weaver/Weaver.ts index d64b6c131..b0bdd4366 100644 --- a/Lara-JS/src-api/weaver/Weaver.ts +++ b/Lara-JS/api/weaver/Weaver.ts @@ -1,12 +1,12 @@ import { LaraJoinPoint, getJoinpointMappers, -} from "../LaraJoinPoint.js"; -import Io from "../lara/Io.js"; -import JavaInterop from "../lara/JavaInterop.js"; -import DataStore from "../lara/util/DataStore.js"; -import JavaTypes, { JavaClasses } from "../lara/util/JavaTypes.js"; -import WeaverOptions from "./WeaverOptions.js"; +} from "../LaraJoinPoint.ts"; +import Io from "../lara/Io.ts"; +import JavaInterop from "../lara/JavaInterop.ts"; +import DataStore from "../lara/util/DataStore.ts"; +import JavaTypes, { type JavaClasses } from "../lara/util/JavaTypes.ts"; +import WeaverOptions from "./WeaverOptions.ts"; /** * @internal Lara Common Language dirty hack. IMPROPER USAGE WILL BREAK THE WHOLE WEAVER! @@ -207,7 +207,6 @@ export default class Weaver { } static get laraArgs(): any { - // eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access const datastore = new DataStore(Weaver.getWeaverEngine().getData().get()); let jsonString = datastore.get( JavaTypes.LaraiKeys.ASPECT_ARGS as string diff --git a/Lara-JS/src-api/weaver/WeaverLauncherBase.ts b/Lara-JS/api/weaver/WeaverLauncherBase.ts similarity index 94% rename from Lara-JS/src-api/weaver/WeaverLauncherBase.ts rename to Lara-JS/api/weaver/WeaverLauncherBase.ts index 19e3c934e..066ddea1d 100644 --- a/Lara-JS/src-api/weaver/WeaverLauncherBase.ts +++ b/Lara-JS/api/weaver/WeaverLauncherBase.ts @@ -1,4 +1,4 @@ -import WeaverOptions from "./WeaverOptions.js"; +import WeaverOptions from "./WeaverOptions.ts"; /** * Object for launching weaver instances. diff --git a/Lara-JS/src-api/weaver/WeaverOptions.ts b/Lara-JS/api/weaver/WeaverOptions.ts similarity index 85% rename from Lara-JS/src-api/weaver/WeaverOptions.ts rename to Lara-JS/api/weaver/WeaverOptions.ts index 52ad88698..42963791c 100644 --- a/Lara-JS/src-api/weaver/WeaverOptions.ts +++ b/Lara-JS/api/weaver/WeaverOptions.ts @@ -1,5 +1,5 @@ -import Weaver from "./Weaver.js"; -import WeaverDataStore from "./util/WeaverDataStore.js"; +import Weaver from "./Weaver.ts"; +import WeaverDataStore from "./util/WeaverDataStore.ts"; /** * Contains configuration-related methods of the weaver. diff --git a/Lara-JS/api/weaver/predicate/JpPredicate.ts b/Lara-JS/api/weaver/predicate/JpPredicate.ts new file mode 100644 index 000000000..a94218a6c --- /dev/null +++ b/Lara-JS/api/weaver/predicate/JpPredicate.ts @@ -0,0 +1,21 @@ +import { LaraJoinPoint } from "../../LaraJoinPoint.ts"; + +export default abstract class JpPredicate { + + /** + * @returns The name of the join point + */ + abstract jpName() : string; + + /** + * @returns True if the underlying type is THE class LaraJoinPoint + */ + abstract isLaraJoinPoint() : boolean; + + /** + * + * @param jp - The join point we want to test + * @returns True if the join point is accepted by this predicate + */ + abstract isInstance(jp: T):boolean +} \ No newline at end of file diff --git a/Lara-JS/src-api/weaver/predicate/StringPredicate.ts b/Lara-JS/api/weaver/predicate/StringPredicate.ts similarity index 62% rename from Lara-JS/src-api/weaver/predicate/StringPredicate.ts rename to Lara-JS/api/weaver/predicate/StringPredicate.ts index e3d98fb16..257d78e36 100644 --- a/Lara-JS/src-api/weaver/predicate/StringPredicate.ts +++ b/Lara-JS/api/weaver/predicate/StringPredicate.ts @@ -1,10 +1,13 @@ -import { LaraJoinPoint } from "../../LaraJoinPoint.js"; -import JpPredicate from "./JpPredicate.js"; +import { LaraJoinPoint } from "../../LaraJoinPoint.ts"; +import JpPredicate from "./JpPredicate.ts"; export default class StringPredicate extends JpPredicate { - constructor(private name: string) { + private name: string; + + constructor(name: string) { super(); + this.name = name; } jpName(): string { diff --git a/Lara-JS/src-api/weaver/predicate/TypePredicate.ts b/Lara-JS/api/weaver/predicate/TypePredicate.ts similarity index 66% rename from Lara-JS/src-api/weaver/predicate/TypePredicate.ts rename to Lara-JS/api/weaver/predicate/TypePredicate.ts index 226ce0295..f6d69ffd5 100644 --- a/Lara-JS/src-api/weaver/predicate/TypePredicate.ts +++ b/Lara-JS/api/weaver/predicate/TypePredicate.ts @@ -1,11 +1,14 @@ -import { LaraJoinPoint } from "../../LaraJoinPoint.js"; -import JpPredicate from "./JpPredicate.js"; -import Weaver from "../Weaver.js"; +import { LaraJoinPoint } from "../../LaraJoinPoint.ts"; +import JpPredicate from "./JpPredicate.ts"; +import Weaver from "../Weaver.ts"; export default class TypePredicate extends JpPredicate { - constructor(private type: T) { + private type: T; + + constructor(type: T) { super(); + this.type = type; } jpName(): string { diff --git a/Lara-JS/src-api/weaver/util/WeaverDataStore.ts b/Lara-JS/api/weaver/util/WeaverDataStore.ts similarity index 90% rename from Lara-JS/src-api/weaver/util/WeaverDataStore.ts rename to Lara-JS/api/weaver/util/WeaverDataStore.ts index 87b94d293..4319a981f 100644 --- a/Lara-JS/src-api/weaver/util/WeaverDataStore.ts +++ b/Lara-JS/api/weaver/util/WeaverDataStore.ts @@ -1,7 +1,6 @@ -import Io from "../../lara/Io.js"; -import DataStore from "../../lara/util/DataStore.js"; -import JavaTypes, { JavaClasses } from "../../lara/util/JavaTypes.js"; -import Weaver from "../Weaver.js"; +import Io from "../../lara/Io.ts"; +import DataStore from "../../lara/util/DataStore.ts"; +import JavaTypes, { type JavaClasses } from "../../lara/util/JavaTypes.ts"; /** * DataStore used in LaraI weavers. diff --git a/Lara-JS/src-code/ChildProcessHandling.test.ts b/Lara-JS/code/ChildProcessHandling.test.ts similarity index 98% rename from Lara-JS/src-code/ChildProcessHandling.test.ts rename to Lara-JS/code/ChildProcessHandling.test.ts index 1682c4da4..74af93916 100644 --- a/Lara-JS/src-code/ChildProcessHandling.test.ts +++ b/Lara-JS/code/ChildProcessHandling.test.ts @@ -3,7 +3,7 @@ import { addActiveChildProcess, handleExit, getActiveChildProcesses, -} from "./ChildProcessHandling.js"; +} from "./ChildProcessHandling.ts"; describe("ChildProcessHandling", () => { describe("addActiveChildProcess", () => { diff --git a/Lara-JS/src-code/ChildProcessHandling.ts b/Lara-JS/code/ChildProcessHandling.ts similarity index 100% rename from Lara-JS/src-code/ChildProcessHandling.ts rename to Lara-JS/code/ChildProcessHandling.ts diff --git a/Lara-JS/src-code/FileExtensions.test.ts b/Lara-JS/code/FileExtensions.test.ts similarity index 93% rename from Lara-JS/src-code/FileExtensions.test.ts rename to Lara-JS/code/FileExtensions.test.ts index 29fe5f576..7b0785d09 100644 --- a/Lara-JS/src-code/FileExtensions.test.ts +++ b/Lara-JS/code/FileExtensions.test.ts @@ -1,5 +1,4 @@ -import { jest } from "@jest/globals"; -import { isValidFileExtension, FileExtensions } from "./FileExtensions.js"; +import { isValidFileExtension, FileExtensions } from "./FileExtensions.ts"; describe("FileExtensions", () => { describe("isValidFileExtension", () => { diff --git a/Lara-JS/code/FileExtensions.ts b/Lara-JS/code/FileExtensions.ts new file mode 100644 index 000000000..4eacb7b6b --- /dev/null +++ b/Lara-JS/code/FileExtensions.ts @@ -0,0 +1,21 @@ +/** + * This is supposed to be an enum, but Node.js v25 does bot support TS' enums, only erasable-syntax. + * Revert to an enum when Node.js supports it, or when we move to a different engine that supports it. + * This and the "type" declaration below. + */ +export const FileExtensions = { + JS: ".js", + MJS: ".mjs", + CJS: ".cjs", +} as const; +export type FileExtensions = typeof FileExtensions[keyof typeof FileExtensions]; + +/** + * Checks if a file extension is valid. + * + * @param extension - The file extension to check. + * @returns `true` if the file extension is valid, `false` otherwise. + */ +export const isValidFileExtension = (extension: string): boolean => { + return Object.values(FileExtensions).includes(extension as FileExtensions); +}; diff --git a/Lara-JS/src-code/JavaError.ts b/Lara-JS/code/JavaError.ts similarity index 82% rename from Lara-JS/src-code/JavaError.ts rename to Lara-JS/code/JavaError.ts index 698f93053..170f188a5 100644 --- a/Lara-JS/src-code/JavaError.ts +++ b/Lara-JS/code/JavaError.ts @@ -9,6 +9,5 @@ export default interface JavaError { // eslint-disable-next-line @typescript-eslint/no-explicit-any export function isJavaError(obj: any): obj is JavaError { - // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access return obj.cause != undefined; } diff --git a/Lara-JS/src-code/Weaver.ts b/Lara-JS/code/Weaver.ts similarity index 95% rename from Lara-JS/src-code/Weaver.ts rename to Lara-JS/code/Weaver.ts index 32631982d..4cf0beed0 100644 --- a/Lara-JS/src-code/Weaver.ts +++ b/Lara-JS/code/Weaver.ts @@ -4,9 +4,9 @@ import EventEmitter from "events"; import java from "java"; import Debug from "debug"; import { fileURLToPath, pathToFileURL } from "url"; -import { isJavaError } from "./JavaError.js"; -import { isValidFileExtension } from "./FileExtensions.js"; -import WeaverMessageFromLauncher from "./WeaverMessageFromLauncher.js"; +import { isJavaError } from "./JavaError.ts"; +import { isValidFileExtension } from "./FileExtensions.ts"; +import type WeaverMessageFromLauncher from "./WeaverMessageFromLauncher.ts"; import assert from "assert"; let directExecution = false; @@ -159,7 +159,6 @@ export class Weaver { } static start() { - // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access Weaver.javaWeaver.run(Weaver.datastore); } @@ -217,7 +216,6 @@ export class Weaver { static shutdown() { Weaver.debug("Exiting..."); - // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call Weaver.javaWeaver.end(); } } diff --git a/Lara-JS/src-code/WeaverConfiguration.ts b/Lara-JS/code/WeaverConfiguration.ts similarity index 94% rename from Lara-JS/src-code/WeaverConfiguration.ts rename to Lara-JS/code/WeaverConfiguration.ts index 77fed7965..b8fa830d3 100644 --- a/Lara-JS/src-code/WeaverConfiguration.ts +++ b/Lara-JS/code/WeaverConfiguration.ts @@ -31,7 +31,7 @@ export default interface WeaverConfiguration { * This is useful for registering the joinpoint mappers for the weaver. * Files must be importable using the ES6 import syntax. * - * @example ["@specs-feup/clava/api/Joinpoints.js"] + * @example ["@specs-feup/clava/api/Joinpoints.ts"] */ importForSideEffects?: string[]; } diff --git a/Lara-JS/src-code/WeaverLauncher.ts b/Lara-JS/code/WeaverLauncher.ts similarity index 96% rename from Lara-JS/src-code/WeaverLauncher.ts rename to Lara-JS/code/WeaverLauncher.ts index f98fcfbbb..312a97188 100644 --- a/Lara-JS/src-code/WeaverLauncher.ts +++ b/Lara-JS/code/WeaverLauncher.ts @@ -1,5 +1,5 @@ import Debug from "debug"; -import yargs, { Arguments } from "yargs"; +import yargs, { type Arguments } from "yargs"; import * as path from "path"; import * as chokidar from "chokidar"; import { hideBin } from "yargs/helpers"; @@ -10,11 +10,11 @@ import { addActiveChildProcess, getActiveChildProcesses, listenForTerminationSignals, -} from "./ChildProcessHandling.js"; -import WeaverConfiguration from "./WeaverConfiguration.js"; -import WeaverMessageFromLauncher from "./WeaverMessageFromLauncher.js"; +} from "./ChildProcessHandling.ts"; +import type WeaverConfiguration from "./WeaverConfiguration.ts"; +import type WeaverMessageFromLauncher from "./WeaverMessageFromLauncher.ts"; -import { Weaver } from "./Weaver.js"; +import { Weaver } from "./Weaver.ts"; listenForTerminationSignals(); @@ -146,7 +146,7 @@ export default class WeaverLauncher { const weaverScript = this.config.weaverFileName ? fileURLToPath(import.meta.resolve(this.config.weaverFileName)) - : path.join(dirname(fileURLToPath(import.meta.url)), "Weaver.js"); + : path.join(dirname(fileURLToPath(import.meta.url)), "Weaver.ts"); this.debug("Launcher weaver using the script '" + weaverScript + "'"); diff --git a/Lara-JS/src-code/WeaverMessageFromLauncher.ts b/Lara-JS/code/WeaverMessageFromLauncher.ts similarity index 50% rename from Lara-JS/src-code/WeaverMessageFromLauncher.ts rename to Lara-JS/code/WeaverMessageFromLauncher.ts index 17b6747cb..1e4f4c6ef 100644 --- a/Lara-JS/src-code/WeaverMessageFromLauncher.ts +++ b/Lara-JS/code/WeaverMessageFromLauncher.ts @@ -1,5 +1,5 @@ -import { Arguments } from "yargs"; -import WeaverConfiguration from "./WeaverConfiguration.js"; +import { type Arguments } from "yargs"; +import type WeaverConfiguration from "./WeaverConfiguration.ts"; export default interface WeaverMessageFromLauncher { config: WeaverConfiguration; diff --git a/Lara-JS/src-code/jest.config.js b/Lara-JS/code/jest.config.ts similarity index 62% rename from Lara-JS/src-code/jest.config.js rename to Lara-JS/code/jest.config.ts index f8502043b..76873b4a2 100644 --- a/Lara-JS/src-code/jest.config.js +++ b/Lara-JS/code/jest.config.ts @@ -1,9 +1,9 @@ -const config = { +import { defineConfig } from "jest"; + +export default defineConfig({ preset: "ts-jest/presets/default-esm", testEnvironment: "node", moduleNameMapper: { "(.+)\\.js": "$1", }, -}; - -export default config; +}); diff --git a/Lara-JS/eslint.config.js b/Lara-JS/eslint.config.ts similarity index 81% rename from Lara-JS/eslint.config.js rename to Lara-JS/eslint.config.ts index 2273574c5..7df9bdcf0 100644 --- a/Lara-JS/eslint.config.js +++ b/Lara-JS/eslint.config.ts @@ -1,21 +1,19 @@ -import { fileURLToPath } from "url"; -import { dirname } from "path"; -import typescriptEslint from "typescript-eslint"; -import tsdoc from "eslint-plugin-tsdoc"; -import jest from "eslint-plugin-jest"; import js from "@eslint/js"; import eslintConfigPrettier from "eslint-config-prettier"; +import jest from "eslint-plugin-jest"; +import tsdoc from "eslint-plugin-tsdoc"; +import { defineConfig } from "eslint/config"; +import { dirname } from "path"; +import typescriptEslint from "typescript-eslint"; +import { fileURLToPath } from "url"; const __filename = fileURLToPath(import.meta.url); const __dirname = dirname(__filename); -export default [ +export default defineConfig([ js.configs.recommended, eslintConfigPrettier, ...typescriptEslint.configs.recommended, - { - ignores: ["**/*.d.ts", "**/*.config.js"], - }, { plugins: { "@typescript-eslint": typescriptEslint.plugin, @@ -28,7 +26,7 @@ export default [ sourceType: "script", parserOptions: { - project: ["./*/tsconfig.json", "./tsconfig.*.json"], + project: ["./tsconfig.json", "./tsconfig.*.json"], tsconfigRootDir: __dirname, }, }, @@ -37,10 +35,6 @@ export default [ "tsdoc/syntax": "warn", }, }, - { - ...typescriptEslint.configs.disableTypeChecked, - files: ["scripts/**/*.js"], - }, { ...jest.configs["flat/recommended"], files: ["**/*.spec.ts", "**/*.test.ts"], @@ -55,4 +49,4 @@ export default [ }, }, }, -]; +]); diff --git a/Lara-JS/jest.config.js b/Lara-JS/jest.config.ts similarity index 77% rename from Lara-JS/jest.config.js rename to Lara-JS/jest.config.ts index 416cabfaf..3036d5e59 100644 --- a/Lara-JS/jest.config.js +++ b/Lara-JS/jest.config.ts @@ -1,4 +1,6 @@ -const config = { +import { defineConfig } from "jest"; + +export default defineConfig({ preset: "ts-jest/presets/default-esm", testEnvironment: "node", moduleNameMapper: { @@ -12,7 +14,5 @@ const config = { coverageReporters: ["text", "lcov"], collectCoverageFrom: ["**/*[^.d].(t|j)s"], coverageProvider: "v8", - projects: ["src-api", "src-code"], -}; - -export default config; + projects: ["api", "code"], +}); diff --git a/Lara-JS/jest/WeaverLegacyTester.ts b/Lara-JS/jest/WeaverLegacyTester.ts index c3892daf8..c428a1468 100644 --- a/Lara-JS/jest/WeaverLegacyTester.ts +++ b/Lara-JS/jest/WeaverLegacyTester.ts @@ -1,11 +1,11 @@ +import { jest } from "@jest/globals"; import JavaTypes, { - JavaClasses, -} from "@specs-feup/lara/api/lara/util/JavaTypes.js"; -import Weaver from "@specs-feup/lara/api/weaver/Weaver.js"; + type JavaClasses, +} from "@specs-feup/lara/api/lara/util/JavaTypes.ts"; +import Weaver from "@specs-feup/lara/api/weaver/Weaver.ts"; import fs from "fs"; -import util from "util"; -import { jest } from "@jest/globals"; import path from "path"; +import util from "util"; afterAll(() => { const javaWeaver = Weaver.getWeaverEngine(); diff --git a/Lara-JS/jest/jestEnvironment.js b/Lara-JS/jest/jestEnvironment.ts similarity index 51% rename from Lara-JS/jest/jestEnvironment.js rename to Lara-JS/jest/jestEnvironment.ts index 0c6aeed44..a9cde408a 100644 --- a/Lara-JS/jest/jestEnvironment.js +++ b/Lara-JS/jest/jestEnvironment.ts @@ -1,14 +1,20 @@ -import { TestEnvironment } from "jest-environment-node"; +import type { + EnvironmentContext, + JestEnvironmentConfig, +} from "@jest/environment"; +import type WeaverConfiguration from "@specs-feup/lara/code/WeaverConfiguration.ts"; import java from "java"; +import { TestEnvironment } from "jest-environment-node"; export default class LaraWeaverEnvironment extends TestEnvironment { - constructor(config, context) { + private weaverConfig: WeaverConfiguration; + + constructor(config: JestEnvironmentConfig, context: EnvironmentContext) { super(config, context); - this.weaverConfig = config?.projectConfig?.testEnvironmentOptions?.weaverConfig; + this.weaverConfig = config.projectConfig.testEnvironmentOptions + .weaverConfig as WeaverConfiguration; } - weaverConfig; - async setup() { await super.setup(); this.global.__SHARED_MODULE__ = java; @@ -19,8 +25,4 @@ export default class LaraWeaverEnvironment extends TestEnvironment { async teardown() { await super.teardown(); } - - runScript(script) { - return super.runScript(script); - } } diff --git a/Lara-JS/jest/jestGlobalSetup.js b/Lara-JS/jest/jestGlobalSetup.js deleted file mode 100644 index 864e7e8bb..000000000 --- a/Lara-JS/jest/jestGlobalSetup.js +++ /dev/null @@ -1,26 +0,0 @@ -import { Weaver } from "@specs-feup/lara/code/Weaver.js"; - -async function oneTimeSetup(globalConfig, projectConfig) { - const weaverMessageFromLauncher = { - args: { - _: [], - $0: "", - }, - config: projectConfig.testEnvironmentOptions.weaverConfig, - }; - - await Weaver.setupWeaver( - weaverMessageFromLauncher.args, - weaverMessageFromLauncher.config - ); -} - -let setupDone = false; - -export default async function (globalConfig, projectConfig) { - if (!setupDone) { - await oneTimeSetup(globalConfig, projectConfig); - setupDone = true; - } - Weaver.start(); -} diff --git a/Lara-JS/jest/jestGlobalSetup.ts b/Lara-JS/jest/jestGlobalSetup.ts new file mode 100644 index 000000000..d4ae593f3 --- /dev/null +++ b/Lara-JS/jest/jestGlobalSetup.ts @@ -0,0 +1,36 @@ +import type { Config } from "@jest/types"; +import { Weaver } from "@specs-feup/lara/code/Weaver.ts"; +import type WeaverMessageFromLauncher from "@specs-feup/lara/code/WeaverMessageFromLauncher.ts"; +import type WeaverConfiguration from "../code/WeaverConfiguration.ts"; + +async function oneTimeSetup( + globalConfig: Config.GlobalConfig, + projectConfig: Config.ProjectConfig, +) { + const weaverMessageFromLauncher: WeaverMessageFromLauncher = { + args: { + _: [], + $0: "", + }, + config: projectConfig.testEnvironmentOptions + .weaverConfig as WeaverConfiguration, + }; + + await Weaver.setupWeaver( + weaverMessageFromLauncher.args, + weaverMessageFromLauncher.config, + ); +} + +let setupDone = false; + +export default async function ( + globalConfig: Config.GlobalConfig, + projectConfig: Config.ProjectConfig, +) { + if (!setupDone) { + await oneTimeSetup(globalConfig, projectConfig); + setupDone = true; + } + Weaver.start(); +} diff --git a/Lara-JS/jest/jestGlobalTeardown.js b/Lara-JS/jest/jestGlobalTeardown.js deleted file mode 100644 index bf203e9af..000000000 --- a/Lara-JS/jest/jestGlobalTeardown.js +++ /dev/null @@ -1,5 +0,0 @@ -import { Weaver } from "@specs-feup/lara/code/Weaver.js"; - -export default function () { - Weaver.shutdown(); -} diff --git a/Lara-JS/jest/jestGlobalTeardown.ts b/Lara-JS/jest/jestGlobalTeardown.ts new file mode 100644 index 000000000..3891ecf22 --- /dev/null +++ b/Lara-JS/jest/jestGlobalTeardown.ts @@ -0,0 +1,5 @@ +import { Weaver } from "@specs-feup/lara/code/Weaver.ts"; + +export default function () { + Weaver.shutdown(); +} diff --git a/Lara-JS/jest/jestHelpers.ts b/Lara-JS/jest/jestHelpers.ts index 4424663b9..503af5e0e 100644 --- a/Lara-JS/jest/jestHelpers.ts +++ b/Lara-JS/jest/jestHelpers.ts @@ -1,5 +1,5 @@ -import Weaver from "@specs-feup/lara/api/weaver/Weaver.js"; -import JavaTypes from "@specs-feup/lara/api/lara/util/JavaTypes.js"; +import JavaTypes from "@specs-feup/lara/api/lara/util/JavaTypes.ts"; +import Weaver from "@specs-feup/lara/api/weaver/Weaver.ts"; /** * Registers the source code that will be used by the weaver for the purpose of this test suite. diff --git a/Lara-JS/jest/setupFiles/importSideEffects.js b/Lara-JS/jest/setupFiles/importSideEffects.ts similarity index 82% rename from Lara-JS/jest/setupFiles/importSideEffects.js rename to Lara-JS/jest/setupFiles/importSideEffects.ts index 51295b256..87874f1ec 100644 --- a/Lara-JS/jest/setupFiles/importSideEffects.js +++ b/Lara-JS/jest/setupFiles/importSideEffects.ts @@ -1,10 +1,12 @@ -/* global globalThis */ - // Take a look at https://github.com/specs-feup/lara-framework/issues/93 for context. // This file is executed after the test environment is set up, so we can access // global variables set in the test environment. +declare global { + var __LARA_IMPORT_FOR_SIDE_EFFECTS__: string[] | undefined; +} + const importForSideEffects = globalThis.__LARA_IMPORT_FOR_SIDE_EFFECTS__ ?? []; for (const specifier of importForSideEffects) { diff --git a/Lara-JS/jest/setupFiles/sharedJavaModule.js b/Lara-JS/jest/setupFiles/sharedJavaModule.ts similarity index 57% rename from Lara-JS/jest/setupFiles/sharedJavaModule.js rename to Lara-JS/jest/setupFiles/sharedJavaModule.ts index 6e4c93a7e..2c0e6f0f7 100644 --- a/Lara-JS/jest/setupFiles/sharedJavaModule.js +++ b/Lara-JS/jest/setupFiles/sharedJavaModule.ts @@ -1,5 +1,7 @@ -/* global global */ - import { jest } from "@jest/globals"; +declare global { + var __SHARED_MODULE__: typeof import("java"); +} + jest.mock("java", () => global.__SHARED_MODULE__); diff --git a/Lara-JS/jest/tsconfig.json b/Lara-JS/jest/tsconfig.json deleted file mode 100644 index 06dbc4d49..000000000 --- a/Lara-JS/jest/tsconfig.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "extends": "../tsconfig.json", - "compilerOptions": { - "noEmit": true, - }, -} \ No newline at end of file diff --git a/Lara-JS/package.json b/Lara-JS/package.json index 6251d5b7f..29c947848 100644 --- a/Lara-JS/package.json +++ b/Lara-JS/package.json @@ -4,39 +4,55 @@ "description": "A js port of the popular framework for building source-to-source compilers", "type": "module", "bin": { - "lara-build-interfaces": "scripts/build-interfaces.js" + "lara-build-interfaces": "./scripts/build-interfaces.ts" + }, + "exports": { + "./api/*.test.ts": null, + "./api/*.config.ts": null, + "./api/*.js": "./api/*.ts", + "./api/*": "./api/*.ts", + "./api/*.ts": "./api/*.ts", + "./code/*.test.ts": null, + "./code/*.config.ts": null, + "./code/*.js": "./code/*.ts", + "./code/*": "./code/*.ts", + "./code/*.ts": "./code/*.ts", + "./jest/*.test.ts": null, + "./jest/*.config.ts": null, + "./jest/*.js": "./jest/*.ts", + "./jest/*": "./jest/*.ts", + "./jest/*.ts": "./jest/*.ts", + "./eslint.config.ts": "./eslint.config.ts", + "./jest.config.ts": "./jest.config.ts", + "./LaraJoinPointSpecification.json": "./LaraJoinPointSpecification.json", + "./typedoc.base.json": "./typedoc.base.json" }, "files": [ "api", "code", "jest", "scripts", - "src-api", - "src-code", ".gitignore", - "eslint.config.js", - "jest.config.js", + "eslint.config.ts", + "jest.config.ts", "LaraJoinPointSpecification.json", "LICENSE", "package.json", "README.md", - "tsconfig.jest.json", "tsconfig.json", "typedoc.base.json", - "typedoc.json" + "typedoc.config.js" ], "scripts": { - "build": "npx tsc -b src-api src-code", - "build:api": "npx tsc -b src-api", - "build:code": "npx tsc -b src-code", + "build": "tsc", "build:watch": "npm run build -- --watch", - "lint": "eslint .", + "lint": "eslint --flag unstable_native_nodejs_ts_config .", "test": "cross-env NODE_OPTIONS=\"$NODE_OPTIONS --experimental-vm-modules\" jest --detectOpenHandles --forceExit", - "test:api": "npm run test -- src-api", - "test:code": "npm run test -- src-code", + "test:api": "npm run test -- api", + "test:code": "npm run test -- code", "test:cov": "npm run test -- --coverage", "test:watch": "npm run test -- --watch", - "build-interfaces": "node scripts/build-LaraJoinPoint --input LaraJoinPointSpecification.json --output src-api/LaraJoinPoint.ts" + "build-interfaces": "node scripts/build-LaraJoinPoint.ts --input LaraJoinPointSpecification.json --output api/LaraJoinPoint.ts" }, "repository": { "type": "git", @@ -57,7 +73,7 @@ }, "homepage": "https://github.com/specs-feup/lara-framework#readme", "engines": { - "node": ">=18.18" + "node": ">=24.0.0" }, "dependencies": { "chokidar": "^5.0.0", @@ -72,7 +88,7 @@ "@jest/globals": "^30.2.0", "@types/debug": "^4.1.12", "@types/jest": "^30.0.0", - "@types/node": "^20.14.10", + "@types/node": "^25.0.0", "@types/yargs": "^17.0.35", "cross-env": "^10.1.0", "eslint": "^9.39.2", @@ -82,7 +98,7 @@ "jest": "^30.2.0", "node-notifier": "^10.0.1", "ts-jest": "^29.4.6", - "typescript": "^5.9.3", + "typescript": "^6.0.3", "typescript-eslint": "^8.52.0" } } diff --git a/Lara-JS/scripts/build-LaraJoinPoint.js b/Lara-JS/scripts/build-LaraJoinPoint.ts similarity index 91% rename from Lara-JS/scripts/build-LaraJoinPoint.js rename to Lara-JS/scripts/build-LaraJoinPoint.ts index 55b7b13ca..4610deb20 100644 --- a/Lara-JS/scripts/build-LaraJoinPoint.js +++ b/Lara-JS/scripts/build-LaraJoinPoint.ts @@ -3,12 +3,12 @@ import fs from "fs"; import yargs from "yargs"; import { hideBin } from "yargs/helpers"; -import { convertSpecification } from "./convert-joinpoint-specification.js"; +import { convertSpecification, type ConvertedJoinpoint, type JSON_LanguageSpecification } from "./convert-joinpoint-specification.ts"; -import { generateJoinpoints, generateEnums } from "./generate-ts-joinpoints.js"; +import { generateJoinpoints, generateEnums } from "./generate-ts-joinpoints.ts"; -function buildLaraJoinPoint(inputFileName, outputFileName) { - console.log("Hello from build-LaraJoinPoint.js"); +function buildLaraJoinPoint(inputFileName: string, outputFileName: string) { + console.log("Hello from build-LaraJoinPoint.ts"); console.log("inputFile:", inputFileName); console.log("outputFile:", outputFileName); @@ -22,12 +22,12 @@ function buildLaraJoinPoint(inputFileName, outputFileName) { fs.writeSync( outputFile, `////////////////////////////////////////////////////// -// This file is generated by build-LaraJoinPoint.js // +// This file is generated by build-LaraJoinPoint.ts // ////////////////////////////////////////////////////// /* eslint-disable @typescript-eslint/no-explicit-any */ -import JavaTypes from "./lara/util/JavaTypes.js"; +import JavaTypes from "./lara/util/JavaTypes.ts"; /** * Type for type equality assertion. If T is equal to U, return Y, otherwise return N. @@ -77,7 +77,7 @@ export type NameFromWrapperClass = NameFromWrapp fs.closeSync(outputFile); } -function promoteToStringFromAttributeToAction(specification) { +function promoteToStringFromAttributeToAction(specification: JSON_LanguageSpecification) { specification.children?.forEach((child) => { if (child.type === "joinpoint") { child.children?.forEach((member) => { @@ -93,7 +93,7 @@ function promoteToStringFromAttributeToAction(specification) { }); } -function generateJoinpointWrapper(joinpoints, outputFile) { +function generateJoinpointWrapper(joinpoints: ConvertedJoinpoint[], outputFile: number) { fs.writeSync( outputFile, `/** @@ -280,15 +280,17 @@ const args = yargs(hideBin(process.argv)) alias: "input", describe: "Path to JSON config file", type: "string", + demandOption: true, }) .option("o", { alias: "output", describe: "Path to the output file", type: "string", + demandOption: true, }) .help() .showHelpOnFail(true) .strict() - .parse(); + .parseSync(); -buildLaraJoinPoint(args.input, args.output); +buildLaraJoinPoint(args.i, args.o); diff --git a/Lara-JS/scripts/build-interfaces.js b/Lara-JS/scripts/build-interfaces.ts similarity index 80% rename from Lara-JS/scripts/build-interfaces.js rename to Lara-JS/scripts/build-interfaces.ts index 8ec978ff6..71faf4b18 100755 --- a/Lara-JS/scripts/build-interfaces.js +++ b/Lara-JS/scripts/build-interfaces.ts @@ -3,16 +3,16 @@ import fs from "fs"; import yargs from "yargs"; import { hideBin } from "yargs/helpers"; -import { convertSpecification } from "./convert-joinpoint-specification.js"; +import { convertSpecification, type ConvertedEnum, type ConvertedJoinpoint } from "./convert-joinpoint-specification.ts"; -import { generateJoinpoints, generateEnums } from "./generate-ts-joinpoints.js"; +import { generateJoinpoints, generateEnums } from "./generate-ts-joinpoints.ts"; async function buildInterfaces( - inputFileName, - laraJoinPointSpecificationImportPath, - outputFileName + inputFileName: string, + laraJoinPointSpecificationImportPath: string, + outputFileName: string ) { - console.log("Hello from build-interfaces.js"); + console.log("Hello from build-interfaces.ts"); console.log("inputFile:", inputFileName); console.log( "LaraJoinPointSpecificationFile: ", @@ -45,7 +45,7 @@ async function buildInterfaces( fs.writeSync( outputFile, `/////////////////////////////////////////////////// -// This file is generated by build-interfaces.js // +// This file is generated by build-interfaces.ts // /////////////////////////////////////////////////// import { @@ -54,7 +54,7 @@ import { wrapJoinPoint, unwrapJoinPoint, ${importedEnums.map((name) => ` ${name},`).join("\n")} -} from "@specs-feup/lara/api/LaraJoinPoint.js";\n\n` +} from "@specs-feup/lara/api/LaraJoinPoint.ts";\n\n` ); generateDefaultAttributeMappers(specification.joinpoints, outputFile); @@ -74,7 +74,7 @@ ${importedEnums.map((name) => ` ${name},`).join("\n")} fs.closeSync(outputFile); } -function generateJoinpointMappers(joinpoints, enums, outputFile) { +function generateJoinpointMappers(joinpoints: ConvertedJoinpoint[], enums: ConvertedEnum[], outputFile: number) { fs.writeSync(outputFile, `const JoinpointMapper = {\n`); for (const jp of joinpoints) { fs.writeSync(outputFile, ` ${jp.originalName}: ${jp.name},\n`); @@ -91,7 +91,7 @@ if (!registered) { ); } -function generateDefaultAttributeMappers(joinpoints, outputFile) { +function generateDefaultAttributeMappers(joinpoints: ConvertedJoinpoint[], outputFile: number) { fs.writeSync(outputFile, `type PrivateMapper = {\n`); for (const jp of joinpoints) { fs.writeSync(outputFile, ` "${jp.name}": typeof ${jp.name},\n`); @@ -113,20 +113,23 @@ const args = yargs(hideBin(process.argv)) alias: "input", describe: "Path to JSON config file", type: "string", + demandOption: true, }) .option("l", { alias: "lara", describe: "Path to JSON config file that describes LaraJoinPoint", type: "string", + demandOption: true, }) .option("o", { alias: "output", describe: "Path to the output file", type: "string", + demandOption: true, }) .help() .showHelpOnFail(true) .strict() - .parse(); + .parseSync(); -await buildInterfaces(args.input, args.lara, args.output); +await buildInterfaces(args.i, args.l, args.o); diff --git a/Lara-JS/scripts/convert-joinpoint-specification.js b/Lara-JS/scripts/convert-joinpoint-specification.ts similarity index 67% rename from Lara-JS/scripts/convert-joinpoint-specification.js rename to Lara-JS/scripts/convert-joinpoint-specification.ts index 47a9e469e..2195a25ac 100644 --- a/Lara-JS/scripts/convert-joinpoint-specification.js +++ b/Lara-JS/scripts/convert-joinpoint-specification.ts @@ -1,11 +1,88 @@ #!/usr/bin/env node -export function convertSpecification(input, baseJoinPointSpec = undefined) { - let typeNameSet = new Set(); - let joinpointNameSet = new Set(); - let unorderedJoinpoints = []; - let enumNameSet = new Set(); - let unorderedEnums = []; +export type JSON_LanguageSpecification = { + root: string; + rootAlias: string; + importEnums?: string[]; + children: (JSON_JoinpointSpecification | JSON_EnumSpecification)[]; +}; + +type JSON_JoinpointSpecification = { + type: "joinpoint"; + name: string; + extends: string; + defaultAttr?: string; + tooltip?: string; + children?: JSON_JoinpointMemberSpecification[]; +}; + +type JSON_JoinpointMemberSpecification = { + type: "attribute" | "action"; + tooltip?: string; + children: JSON_ParameterSpecification[]; +}; + +type JSON_ParameterSpecification = { + name: string; + type: string; + defaultValue: string; +} + +type JSON_EnumSpecification = { + type: "enum"; + name: string; + extends?: string; + children: { value: string }[]; +}; + +export type ConvertedSpecification = { + joinpoints: ConvertedJoinpoint[]; + enums: ConvertedEnum[]; + importEnums: string[]; +}; + +export type ConvertedJoinpoint = { + name: string; + originalName: string; + tooltip?: string; + extends?: string; + attributes: ConvertedAttribute[]; + actions: ConvertedAction[]; + defaultAttribute?: string; +}; + +export type ConvertedAttribute = { + name: string; + type: string; + tooltip?: string; +}; + +export type ConvertedAction = { + name: string; + tooltip?: string; + returnType: string; + parameters: ConvertedParameter[]; + overloads: ConvertedAction[]; +}; + +export type ConvertedParameter = { + name: string; + type: string; + default: string; +}; + +export type ConvertedEnum = { + name: string; + extends?: string; + entries: string[]; +}; + +export function convertSpecification(input: JSON_LanguageSpecification, baseJoinPointSpec?: ConvertedSpecification | undefined): ConvertedSpecification { + const typeNameSet = new Set(); + const joinpointNameSet = new Set(); + const unorderedJoinpoints: JSON_JoinpointSpecification[] = []; + const enumNameSet = new Set(); + const unorderedEnums: JSON_EnumSpecification[] = []; input.children.forEach((child) => { typeNameSet.add(child.type); @@ -19,10 +96,10 @@ export function convertSpecification(input, baseJoinPointSpec = undefined) { } }); - let joinpoints = orderJoinpoints(unorderedJoinpoints); - let enums = orderJoinpoints(unorderedEnums); + const joinpoints = orderJoinpoints(unorderedJoinpoints); + const enums = orderJoinpoints(unorderedEnums); - let output = { + const output: ConvertedSpecification = { joinpoints: convertJoinpoints(joinpoints, joinpointNameSet, enumNameSet), enums: convertEnums(enums), importEnums: Array.isArray(input.importEnums) ? [...input.importEnums] : [], @@ -37,10 +114,10 @@ export function convertSpecification(input, baseJoinPointSpec = undefined) { return output; } -function orderJoinpoints(unorderedJoinpoints) { - let orderedNameSet = new Set(); - let blockedJpSet = new Set(); - let joinpoints = []; +function orderJoinpoints(unorderedJoinpoints: T[]): T[] { + const orderedNameSet = new Set(); + const blockedJpSet = new Set(); + const joinpoints: T[] = []; unorderedJoinpoints.forEach((jp) => { if (jp.extends) { @@ -57,7 +134,7 @@ function orderJoinpoints(unorderedJoinpoints) { }); while (blockedJpSet.size > 0) { blockedJpSet.forEach((jp) => { - if (orderedNameSet.has(jp.extends)) { + if (jp.extends && orderedNameSet.has(jp.extends)) { joinpoints.push(jp); orderedNameSet.add(jp.name); blockedJpSet.delete(jp); @@ -68,15 +145,8 @@ function orderJoinpoints(unorderedJoinpoints) { return joinpoints; } -/** - * - * @param {*} joinpoints - * @param {Set} joinpointNameSet - * @param {Set} enumNameSet - * @returns {ReturnType[]} - */ -function convertJoinpoints(joinpoints, joinpointNameSet, enumNameSet) { - let convertedJoinpoints = []; +function convertJoinpoints(joinpoints: JSON_JoinpointSpecification[], joinpointNameSet: Set, enumNameSet: Set) { + const convertedJoinpoints: ConvertedJoinpoint[] = []; joinpoints.forEach((jp) => { convertedJoinpoints.push( @@ -87,17 +157,10 @@ function convertJoinpoints(joinpoints, joinpointNameSet, enumNameSet) { return convertedJoinpoints; } -/** - * - * @param {*} jp - * @param {Set} joinpointNameSet - * @param {Set} enumNameSet - * @returns { { name: string, originalName: string, tooltip: string, extends: string | undefined, attributes: ReturnType[], actions: { name: string, tooltip: string, returnType: string, parameters: ReturnType[], overloads: never[] }[] }, defaultAttribute: string | undefined } - */ -function convertJoinpoint(jp, joinpointNameSet, enumNameSet) { - let attributes = []; - let actions = []; - const actionNameSet = new Set(); +function convertJoinpoint(jp: JSON_JoinpointSpecification, joinpointNameSet: Set, enumNameSet: Set): ConvertedJoinpoint { + const attributes: ConvertedAttribute[] = []; + const actions: ConvertedAction[] = []; + const actionNameSet = new Set(); jp.children?.forEach((child) => { switch (child.type) { @@ -125,11 +188,8 @@ function convertJoinpoint(jp, joinpointNameSet, enumNameSet) { actionNameSet ); break; - case "select": - // Do nothing - break; default: - console.log("Unknown child type:", child.type); + console.log("Unknown child type:", (child as { type: string }).type); } }); @@ -150,35 +210,23 @@ function convertJoinpoint(jp, joinpointNameSet, enumNameSet) { }; } -/** - * - * @param {string} notice - * @returns {string} - */ -function convertDeprecationNotice(notice) { +function convertDeprecationNotice(notice: string | undefined): string | undefined { if (notice?.includes("DEPRECATED")) { notice = notice.replace("[DEPRECATED:", "@deprecated"); notice = notice.replace("DEPRECATED:", "@deprecated"); - let splitTooltip = notice.split("]"); + const splitTooltip = notice.split("]"); notice = splitTooltip.slice(1).join("]") + "\n\n" + splitTooltip[0]; } return capitalizeFirstLetter(notice)?.trim(); } -/** - * - * @param {*} attributeObject - * @param {Set} joinpointNameSet - * @param {Set} enumNameSet - * @returns { { name: string, type: string, default: string } } - */ function convertJoinpointAttribute( - attributeObject, - joinpointNameSet, - enumNameSet -) { + attributeObject: JSON_JoinpointMemberSpecification, + joinpointNameSet: Set, + enumNameSet: Set +): ConvertedAttribute { const attribute = attributeObject.children[0]; return { @@ -188,18 +236,11 @@ function convertJoinpointAttribute( }; } -/** - * - * @param {*} parameterObject - * @param {Set} joinpointNameSet - * @param {Set} enumNameSet - * @returns { { name: string, type: string, default: string } } - */ function convertJoinpointActionParameter( - parameterObject, - joinpointNameSet, - enumNameSet -) { + parameterObject: JSON_ParameterSpecification, + joinpointNameSet: Set, + enumNameSet: Set +): ConvertedParameter { const type = interpretType( parameterObject.type, joinpointNameSet, @@ -214,7 +255,7 @@ function convertJoinpointActionParameter( parameterName = "elseStatement"; } - let defaultValue = parameterObject.defaultValue; + let defaultValue: string | undefined = parameterObject.defaultValue; if (defaultValue === "") { defaultValue = undefined; } @@ -226,24 +267,14 @@ function convertJoinpointActionParameter( }; } -/** - * - * @param {Object} actionObject - * @param {Set} joinpointNameSet - * @param {Set} enumNameSet - * @param {Object[]} actions - * @param {Set} actionNameSet - * @param {string} [overrideName=null] - * @returns - */ function convertJoinpointAction( - actionObject, - joinpointNameSet, - enumNameSet, - actions, - actionNameSet, - overrideName = null -) { + actionObject: JSON_JoinpointMemberSpecification, + joinpointNameSet: Set, + enumNameSet: Set, + actions: ConvertedAction[], + actionNameSet: Set, + overrideName: string | null = null +): void { const action = actionObject.children[0]; const actionName = overrideName ?? action.name; @@ -327,27 +358,11 @@ function convertJoinpointAction( actions.push(convertedAction); } -/** - * - * @param {Object[]} enums - * @returns {(ReturnType)[]} - */ -function convertEnums(enums) { - let convertedEnums = []; - - enums.forEach((enumObj) => { - convertedEnums.push(convertEnum(enumObj)); - }); - - return convertedEnums; +function convertEnums(enums: JSON_EnumSpecification[]) { + return enums.map((enumObj) => convertEnum(enumObj)); } -/** - * - * @param {Object} e - * @returns { {name: string, extends: string, entries: string[]} } - */ -function convertEnum(e) { +function convertEnum(e: JSON_EnumSpecification): ConvertedEnum { return { name: e.name, extends: e.extends, @@ -359,11 +374,11 @@ function convertEnum(e) { /** * Splits `text` on `separator` occurrences that are not nested inside <> or []. - * @param {string} text - * @param {string} separator - * @returns {string[]} + * @param text + * @param separator + * @returns */ -function splitTopLevel(text, separator) { +function splitTopLevel(text: string, separator: string): string[] { const parts = []; let depth = 0; let current = ""; @@ -384,24 +399,15 @@ function splitTopLevel(text, separator) { return parts; } -/** - * - * @param {string} string - * @returns {string} - */ -export function capitalizeFirstLetter(string) { +export function capitalizeFirstLetter(string: string): string; +export function capitalizeFirstLetter(string: undefined): undefined; +export function capitalizeFirstLetter(string: string | undefined): string | undefined; +export function capitalizeFirstLetter(string: string | undefined): string | undefined { if (!string) return string; return string.charAt(0).toUpperCase() + string.slice(1); } -/** - * - * @param {string} typeString - * @param {Set} joinpointNameSet - * @param {Set} enumNameSet - * @returns {string} - */ -function interpretType(typeString, joinpointNameSet, enumNameSet) { +function interpretType(typeString: string, joinpointNameSet: Set, enumNameSet: Set): string { if (typeString === "?") { return "any"; } @@ -454,7 +460,6 @@ function interpretType(typeString, joinpointNameSet, enumNameSet) { case "Double": case "double": return "number"; - break; case "map": case "Map": case "map": @@ -462,11 +467,10 @@ function interpretType(typeString, joinpointNameSet, enumNameSet) { return "Record"; default: return typeString.toLowerCase(); - break; } } -function deduplicateJoinpoints(joinpoints, baseJoinPointSpec = undefined) { +function deduplicateJoinpoints(joinpoints: ConvertedJoinpoint[], baseJoinPointSpec?: ConvertedSpecification | undefined) { for (const joinpoint of joinpoints) { // Find the parent joinpoint let parentJoinpoint = joinpoints.find( @@ -479,7 +483,7 @@ function deduplicateJoinpoints(joinpoints, baseJoinPointSpec = undefined) { } while (parentJoinpoint) { - for (const attributeIndex in joinpoint.attributes) { + for (let attributeIndex = 0; attributeIndex < joinpoint.attributes.length; attributeIndex++) { for (const parentAttribute of parentJoinpoint.attributes) { if ( JSON.stringify(joinpoint.attributes[attributeIndex]) === @@ -490,7 +494,7 @@ function deduplicateJoinpoints(joinpoints, baseJoinPointSpec = undefined) { } } - for (const actionIndex in joinpoint.actions) { + for (let actionIndex = 0; actionIndex < joinpoint.actions.length; actionIndex++) { for (const parentAction of parentJoinpoint.actions) { if ( JSON.stringify(joinpoint.actions[actionIndex]) === @@ -502,7 +506,7 @@ function deduplicateJoinpoints(joinpoints, baseJoinPointSpec = undefined) { } parentJoinpoint = joinpoints.find( - (jp) => jp.name === parentJoinpoint.extends + (jp) => jp.name === parentJoinpoint!.extends ); } } diff --git a/Lara-JS/scripts/copy-folder.js b/Lara-JS/scripts/copy-folder.ts similarity index 78% rename from Lara-JS/scripts/copy-folder.js rename to Lara-JS/scripts/copy-folder.ts index 24457f12c..085ead745 100644 --- a/Lara-JS/scripts/copy-folder.js +++ b/Lara-JS/scripts/copy-folder.ts @@ -2,9 +2,9 @@ import fs from "fs"; import path from "path"; +import { fileURLToPath } from "url"; import yargs from "yargs"; import { hideBin } from "yargs/helpers"; -import { fileURLToPath } from "url"; if (fileURLToPath(import.meta.url) === process.argv[1]) { // This script is being executed directly @@ -14,11 +14,13 @@ if (fileURLToPath(import.meta.url) === process.argv[1]) { alias: "inputFolder", describe: "Path to the source folder", type: "string", + demandOption: true, }) .option("o", { alias: "outputFolder", describe: "Path to the destination folder", type: "string", + demandOption: true, }) .option("e", { alias: "extension", @@ -33,32 +35,21 @@ if (fileURLToPath(import.meta.url) === process.argv[1]) { .help() .showHelpOnFail(true) .strict() - .parse(); + .parseSync(); - copyFolder( - args.inputFolder, - args.outputFolder, - args.extension, - args.newExtension - ); + copyFolder(args.i, args.o, args.e, args.newExtension); } /** * Copied files will have .mjs extension. - * - * @param {string} sourceDir - * @param {string} destinationDir - * @param {RegExp} extension - * @param {RegExp} targetExtension - * @returns */ export default function copyFolder( - sourceDir, - destinationDir, - extension, - targetExtension = extension + sourceDir: string, + destinationDir: string, + extension?: string, + targetExtension = extension, ) { - const copiedFiles = []; + const copiedFiles: string[] = []; const files = fs.readdirSync(sourceDir); fs.mkdirSync(destinationDir, { recursive: true }); @@ -77,13 +68,15 @@ export default function copyFolder( sourcePath, newDestinationDir, extension, - targetExtension + targetExtension, ); copiedFiles.push(...subDirectoryCopiedFiles); } else if (extension === undefined || file.endsWith(extension)) { - const targetFileName = extension === undefined ? file : - file.substring(0, file.length - extension.length) + targetExtension; + const targetFileName = + extension === undefined + ? file + : file.substring(0, file.length - extension.length) + targetExtension; const destinationPath = path.join(destinationDir, targetFileName); diff --git a/Lara-JS/scripts/generate-ts-joinpoints.js b/Lara-JS/scripts/generate-ts-joinpoints.ts similarity index 77% rename from Lara-JS/scripts/generate-ts-joinpoints.js rename to Lara-JS/scripts/generate-ts-joinpoints.ts index 32358807d..9d6dbe111 100644 --- a/Lara-JS/scripts/generate-ts-joinpoints.js +++ b/Lara-JS/scripts/generate-ts-joinpoints.ts @@ -1,13 +1,13 @@ import fs from "fs"; -import { capitalizeFirstLetter } from "./convert-joinpoint-specification.js"; +import { capitalizeFirstLetter, type ConvertedAction, type ConvertedAttribute, type ConvertedEnum, type ConvertedJoinpoint } from "./convert-joinpoint-specification.ts"; -export function generateJoinpoints(joinpoints, outputFile) { +export function generateJoinpoints(joinpoints: ConvertedJoinpoint[], outputFile: number) { for (const jp of joinpoints) { generateJoinpoint(jp, outputFile, joinpoints); } } -function generateJoinpoint(jp, outputFile, joinpoints) { +function generateJoinpoint(jp: ConvertedJoinpoint, outputFile: number, joinpoints: ConvertedJoinpoint[]) { fs.writeSync( outputFile, `${generateDocumentation(jp.tooltip)}export class ${jp.name}${ @@ -66,14 +66,14 @@ function generateJoinpoint(jp, outputFile, joinpoints) { fs.writeSync(outputFile, `}\n\n`); } -function generateDocumentation(tooltip) { +function generateDocumentation(tooltip: string | undefined): string { if (!tooltip) { return ""; } return ` /**\n * ${tooltip.split("\n").join("\n * ")}\n */\n`; } -function escapeJavaReservedKeywords(name) { +function escapeJavaReservedKeywords(name: string): string { const reservedKeywords = new Set([ "abstract", "assert", "boolean", "break", "byte", "case", "catch", "char", "class", "const", "continue", "default", "do", "double", "else", "enum", @@ -91,7 +91,7 @@ function escapeJavaReservedKeywords(name) { return name; } -function generateJoinpointAttribute(attribute, outputFile, joinpointActions) { +function generateJoinpointAttribute(attribute: ConvertedAttribute, outputFile: number, joinpointActions: ConvertedAction[]) { if (attribute.name === "data") { fs.writeSync( outputFile, @@ -120,7 +120,7 @@ function generateJoinpointAttribute(attribute, outputFile, joinpointActions) { setterActions = setterActions[0].overloads.filter((overload) => { const requiredParameters = overload.parameters.reduce( (acc, parameter) => { - if (parameter.defaultValue === undefined) { + if (parameter.default === undefined) { return acc + 1; } return acc; @@ -137,7 +137,7 @@ function generateJoinpointAttribute(attribute, outputFile, joinpointActions) { } const setterParameterType = setterActions - .reduce((type, action) => { + .reduce((type: string[], action) => { if (action.parameters.length) { type.push(action.parameters[0].type); } @@ -155,7 +155,7 @@ function generateJoinpointAttribute(attribute, outputFile, joinpointActions) { ); } -function generateJoinpointActionParameters(action) { +function generateJoinpointActionParameters(action: ConvertedAction): string { return action.parameters .map((parameter) => { let paramStr = parameter.name; @@ -173,7 +173,7 @@ function generateJoinpointActionParameters(action) { .join(", "); } -function generateJoinpointAction(action, outputFile, joinpoints) { +function generateJoinpointAction(action: ConvertedAction, outputFile: number, joinpoints: ConvertedJoinpoint[]) { const parameters = generateJoinpointActionParameters(action); const callParameters = action.parameters @@ -193,16 +193,25 @@ function generateJoinpointAction(action, outputFile, joinpoints) { ); } -export function generateEnums(enums, outputFile) { +export function generateEnums(enums: ConvertedEnum[], outputFile: number) { for (const e of enums) { generateEnum(e, outputFile); } } -function generateEnum(e, outputFile) { - fs.writeSync(outputFile, `export enum ${e.name} {\n`); +function generateEnum(e: ConvertedEnum, outputFile: number) { + fs.writeSync(outputFile, `/** + * This is supposed to be an enum, but Node.js v25 does bot support TS' enums, only erasable-syntax. + * Revert to an enum when Node.js supports it, or when we move to a different engine that supports it. + * This and the "type" declaration below. + */\n`); + fs.writeSync(outputFile, `export const ${e.name} = {\n`); e.entries.forEach((entry) => { - fs.writeSync(outputFile, ` ${entry} = "${entry.toLowerCase()}",\n`); + fs.writeSync(outputFile, ` ${entry}: "${entry.toLowerCase()}",\n`); }); - fs.writeSync(outputFile, `}\n\n`); + fs.writeSync(outputFile, `} as const;\n`); + fs.writeSync( + outputFile, + `export type ${e.name} = typeof ${e.name}[keyof typeof ${e.name}];\n\n` + ); } diff --git a/Lara-JS/src-api/lara/graphs/GraphEdge.ts b/Lara-JS/src-api/lara/graphs/GraphEdge.ts deleted file mode 100644 index 5b932b483..000000000 --- a/Lara-JS/src-api/lara/graphs/GraphEdge.ts +++ /dev/null @@ -1,9 +0,0 @@ -import EdgeData from "./EdgeData.js"; - -/** - * Base class for graph edges. - * - * @deprecated use lara.graphs.EdgeData instead - */ -type GraphEdge = EdgeData; -export default GraphEdge; diff --git a/Lara-JS/src-api/lara/graphs/GraphNode.ts b/Lara-JS/src-api/lara/graphs/GraphNode.ts deleted file mode 100644 index 786ca20c3..000000000 --- a/Lara-JS/src-api/lara/graphs/GraphNode.ts +++ /dev/null @@ -1,9 +0,0 @@ -import NodeData from "./NodeData.js"; - -/** - * Base class for graph nodes. - * - * @deprecated use lara.graphs.NodeData instead - */ -type GraphNode = NodeData; -export default GraphNode; diff --git a/Lara-JS/src-api/tsconfig.json b/Lara-JS/src-api/tsconfig.json deleted file mode 100644 index b03a6a89e..000000000 --- a/Lara-JS/src-api/tsconfig.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": "../tsconfig.json", - "compilerOptions": { - "outDir": "../api" - }, - "exclude": ["node_modules", "**/*.spec.ts", "**/*.test.ts"], - "references": [{ "path": "../src-code" }] -} diff --git a/Lara-JS/src-api/weaver/TraversalType.ts b/Lara-JS/src-api/weaver/TraversalType.ts deleted file mode 100644 index 41614aa16..000000000 --- a/Lara-JS/src-api/weaver/TraversalType.ts +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Enumeration of AST traversal types. - */ -enum TraversalType { - PREORDER = "preorder", - POSTORDER = "postorder", -} - -export default TraversalType; diff --git a/Lara-JS/src-api/weaver/predicate/JpPredicate.ts b/Lara-JS/src-api/weaver/predicate/JpPredicate.ts deleted file mode 100644 index c30f6e3d5..000000000 --- a/Lara-JS/src-api/weaver/predicate/JpPredicate.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { LaraJoinPoint } from "../../LaraJoinPoint.js"; - -export default abstract class JpPredicate { - - /** - * @returns the name of the join point - */ - abstract jpName() : string; - - /** - * @returns true if the underlying type is THE class LaraJoinPoint - */ - abstract isLaraJoinPoint() : boolean; - - /** - * - * @param jp the join point we want to test - * @returns true if the join point is accepted by this predicate - */ - abstract isInstance(jp: T):boolean -} \ No newline at end of file diff --git a/Lara-JS/src-code/FileExtensions.ts b/Lara-JS/src-code/FileExtensions.ts deleted file mode 100644 index a1e392832..000000000 --- a/Lara-JS/src-code/FileExtensions.ts +++ /dev/null @@ -1,15 +0,0 @@ -export enum FileExtensions { - JS = ".js", - MJS = ".mjs", - CJS = ".cjs", -} - -/** - * Checks if a file extension is valid. - * - * @param extension - The file extension to check. - * @returns `true` if the file extension is valid, `false` otherwise. - */ -export const isValidFileExtension = (extension: string): boolean => { - return Object.values(FileExtensions).includes(extension as FileExtensions); -}; diff --git a/Lara-JS/src-code/tsconfig.json b/Lara-JS/src-code/tsconfig.json deleted file mode 100644 index 8061f3caf..000000000 --- a/Lara-JS/src-code/tsconfig.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": "../tsconfig.json", - "compilerOptions": { - "outDir": "../code", - "composite": true - }, - "exclude": ["node_modules", "**/*.spec.ts", "**/*.test.ts"] -} diff --git a/Lara-JS/tsconfig.jest.json b/Lara-JS/tsconfig.jest.json deleted file mode 100644 index dd7eedda3..000000000 --- a/Lara-JS/tsconfig.jest.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "extends": "./tsconfig.json", - "include": ["**/*.spec.ts", "**/*.test.ts"], - "exclude": ["node_modules"] -} diff --git a/Lara-JS/tsconfig.json b/Lara-JS/tsconfig.json index f67bd95ee..45c211456 100644 --- a/Lara-JS/tsconfig.json +++ b/Lara-JS/tsconfig.json @@ -1,18 +1,14 @@ { "compilerOptions": { - "target": "ES2022", + "noEmit": true, "module": "NodeNext", "declaration": true, - "outDir": "./dist", "strict": true, - //"allowJs": true, - //"checkJs": true, - "moduleResolution": "NodeNext", "isolatedModules": true, - "sourceMap": true, - "declarationMap": true, "allowSyntheticDefaultImports": true, - //"esModuleInterop": true - "types": ["node", "jest"] + "types": ["node", "jest"], + "rewriteRelativeImportExtensions": true, + "erasableSyntaxOnly": true, + "verbatimModuleSyntax": true } } diff --git a/Lara-JS/typedoc.config.js b/Lara-JS/typedoc.config.js new file mode 100644 index 000000000..fd50edfe6 --- /dev/null +++ b/Lara-JS/typedoc.config.js @@ -0,0 +1,9 @@ +import { fileURLToPath } from "url"; + +export default { + extends: [ + fileURLToPath(import.meta.resolve("@specs-feup/lara/typedoc.base.json")), + ], + entryPoints: ["api/"], + tsconfig: "tsconfig.json", +} diff --git a/Lara-JS/typedoc.json b/Lara-JS/typedoc.json deleted file mode 100644 index d9a0c80a8..000000000 --- a/Lara-JS/typedoc.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "extends": ["./typedoc.base.json"], - "entryPoints": ["src-api/"], - "tsconfig": "src-api/tsconfig.json", -}