From f3d94dc8fd49d069d7b19ffde76b09c376e23bca Mon Sep 17 00:00:00 2001 From: "L. Sousa" Date: Mon, 8 Jun 2026 19:23:05 +0100 Subject: [PATCH 01/13] Lara-JS: Make the project compatible with Node.js' TS parser where only erasable syntax is allowed - Removed a couple of deprecated files. - Transformed enums into "const" declarations. - Modified the tsconfig.json files - Updated to TS 6 while I was at it. --- Lara-JS/jest/WeaverLegacyTester.ts | 2 +- Lara-JS/jest/tsconfig.json | 4 ++-- Lara-JS/package.json | 6 ++--- Lara-JS/scripts/generate-ts-joinpoints.js | 15 +++++++++--- Lara-JS/src-api/LaraJoinPoint.ts | 16 +++++++++---- Lara-JS/src-api/lara/Collections.ts | 2 +- Lara-JS/src-api/lara/Csv.ts | 2 +- Lara-JS/src-api/lara/Io.test.ts | 2 +- Lara-JS/src-api/lara/Io.ts | 2 +- Lara-JS/src-api/lara/JavaInterop.ts | 2 +- Lara-JS/src-api/lara/Strings.ts | 2 +- Lara-JS/src-api/lara/System.ts | 2 +- .../lara/benchmark/BenchmarkInstance.ts | 2 +- Lara-JS/src-api/lara/graphs/GraphEdge.ts | 9 ------- Lara-JS/src-api/lara/graphs/GraphNode.ts | 9 ------- .../src-api/lara/iterators/LineIterator.ts | 2 +- Lara-JS/src-api/lara/pass/AdapterPass.ts | 2 +- Lara-JS/src-api/lara/pass/SimplePass.ts | 2 +- Lara-JS/src-api/lara/tool/ToolUtils.ts | 2 +- Lara-JS/src-api/lara/util/DataStore.ts | 2 +- Lara-JS/src-api/lara/util/LineInserter.ts | 2 +- Lara-JS/src-api/lara/util/LocalFolder.ts | 2 +- Lara-JS/src-api/lara/util/ProcessExecutor.ts | 2 +- Lara-JS/src-api/lara/util/Replacer.ts | 2 +- Lara-JS/src-api/lara/util/TimeUnits.ts | 24 ++++++++++++------- Lara-JS/src-api/tsconfig.json | 1 + Lara-JS/src-api/weaver/Query.ts | 2 +- Lara-JS/src-api/weaver/Selector.ts | 2 +- Lara-JS/src-api/weaver/TraversalType.ts | 15 +++++++----- Lara-JS/src-api/weaver/Weaver.ts | 2 +- .../weaver/predicate/StringPredicate.ts | 5 +++- .../src-api/weaver/predicate/TypePredicate.ts | 5 +++- .../src-api/weaver/util/WeaverDataStore.ts | 3 +-- Lara-JS/src-code/FileExtensions.ts | 16 +++++++++---- Lara-JS/src-code/Weaver.ts | 2 +- Lara-JS/src-code/WeaverLauncher.ts | 6 ++--- Lara-JS/src-code/WeaverMessageFromLauncher.ts | 4 ++-- Lara-JS/src-code/tsconfig.json | 1 + Lara-JS/tsconfig.json | 8 ++++--- 39 files changed, 106 insertions(+), 85 deletions(-) delete mode 100644 Lara-JS/src-api/lara/graphs/GraphEdge.ts delete mode 100644 Lara-JS/src-api/lara/graphs/GraphNode.ts diff --git a/Lara-JS/jest/WeaverLegacyTester.ts b/Lara-JS/jest/WeaverLegacyTester.ts index c3892daf8..51294827b 100644 --- a/Lara-JS/jest/WeaverLegacyTester.ts +++ b/Lara-JS/jest/WeaverLegacyTester.ts @@ -1,5 +1,5 @@ import JavaTypes, { - JavaClasses, + type JavaClasses, } from "@specs-feup/lara/api/lara/util/JavaTypes.js"; import Weaver from "@specs-feup/lara/api/weaver/Weaver.js"; import fs from "fs"; diff --git a/Lara-JS/jest/tsconfig.json b/Lara-JS/jest/tsconfig.json index 06dbc4d49..01a34e875 100644 --- a/Lara-JS/jest/tsconfig.json +++ b/Lara-JS/jest/tsconfig.json @@ -1,6 +1,6 @@ { "extends": "../tsconfig.json", "compilerOptions": { - "noEmit": true, - }, + "noEmit": true + } } \ No newline at end of file diff --git a/Lara-JS/package.json b/Lara-JS/package.json index 6251d5b7f..b65d96548 100644 --- a/Lara-JS/package.json +++ b/Lara-JS/package.json @@ -57,7 +57,7 @@ }, "homepage": "https://github.com/specs-feup/lara-framework#readme", "engines": { - "node": ">=18.18" + "node": ">=25.0.0" }, "dependencies": { "chokidar": "^5.0.0", @@ -72,7 +72,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 +82,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/generate-ts-joinpoints.js b/Lara-JS/scripts/generate-ts-joinpoints.js index 32358807d..a892890d2 100644 --- a/Lara-JS/scripts/generate-ts-joinpoints.js +++ b/Lara-JS/scripts/generate-ts-joinpoints.js @@ -200,9 +200,18 @@ export function generateEnums(enums, outputFile) { } function generateEnum(e, outputFile) { - fs.writeSync(outputFile, `export enum ${e.name} {\n`); + 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/LaraJoinPoint.ts b/Lara-JS/src-api/LaraJoinPoint.ts index 0de111894..d5358cbc2 100644 --- a/Lara-JS/src-api/LaraJoinPoint.ts +++ b/Lara-JS/src-api/LaraJoinPoint.ts @@ -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/lara/Collections.ts b/Lara-JS/src-api/lara/Collections.ts index 46e9b038d..8364b8570 100644 --- a/Lara-JS/src-api/lara/Collections.ts +++ b/Lara-JS/src-api/lara/Collections.ts @@ -1,5 +1,5 @@ import JavaInterop from "./JavaInterop.js"; -import JavaTypes, { JavaClasses } from "./util/JavaTypes.js"; +import JavaTypes, { type JavaClasses } from "./util/JavaTypes.js"; /** * Utility methods related to Collections. diff --git a/Lara-JS/src-api/lara/Csv.ts b/Lara-JS/src-api/lara/Csv.ts index 883e96016..d92885509 100644 --- a/Lara-JS/src-api/lara/Csv.ts +++ b/Lara-JS/src-api/lara/Csv.ts @@ -1,5 +1,5 @@ import Io from "./Io.js"; -import JavaTypes, { JavaClasses } from "./util/JavaTypes.js"; +import JavaTypes, { type JavaClasses } from "./util/JavaTypes.js"; /** * Methods related with the CSV format. diff --git a/Lara-JS/src-api/lara/Io.test.ts b/Lara-JS/src-api/lara/Io.test.ts index 6ff72b8ac..16efb16bf 100644 --- a/Lara-JS/src-api/lara/Io.test.ts +++ b/Lara-JS/src-api/lara/Io.test.ts @@ -1,5 +1,5 @@ import Io from "./Io.js"; -import JavaTypes, { JavaClasses } from "./util/JavaTypes.js"; +import JavaTypes, { type JavaClasses } from "./util/JavaTypes.js"; describe("Io", () => { diff --git a/Lara-JS/src-api/lara/Io.ts b/Lara-JS/src-api/lara/Io.ts index cc923f742..bdf7fe4fb 100644 --- a/Lara-JS/src-api/lara/Io.ts +++ b/Lara-JS/src-api/lara/Io.ts @@ -1,5 +1,5 @@ import { JSONtoFile, fileToJSON } from "../core/output.js"; -import JavaTypes, { JavaClasses } from "./util/JavaTypes.js"; +import JavaTypes, { type JavaClasses } from "./util/JavaTypes.js"; import fg from "fast-glob"; import fs from "fs"; diff --git a/Lara-JS/src-api/lara/JavaInterop.ts b/Lara-JS/src-api/lara/JavaInterop.ts index 46ca579b4..d6fe9fa38 100644 --- a/Lara-JS/src-api/lara/JavaInterop.ts +++ b/Lara-JS/src-api/lara/JavaInterop.ts @@ -1,4 +1,4 @@ -import JavaTypes, { JavaClasses } from "./util/JavaTypes.js"; +import JavaTypes, { type JavaClasses } from "./util/JavaTypes.js"; export default class JavaInterop { /** diff --git a/Lara-JS/src-api/lara/Strings.ts b/Lara-JS/src-api/lara/Strings.ts index c024c980a..64f2d2411 100644 --- a/Lara-JS/src-api/lara/Strings.ts +++ b/Lara-JS/src-api/lara/Strings.ts @@ -1,4 +1,4 @@ -import JavaTypes, { JavaClasses } from "./util/JavaTypes.js"; +import JavaTypes, { type JavaClasses } from "./util/JavaTypes.js"; /** * Utility methods related to Strings. diff --git a/Lara-JS/src-api/lara/System.ts b/Lara-JS/src-api/lara/System.ts index b23a0ac08..6b5d4d81a 100644 --- a/Lara-JS/src-api/lara/System.ts +++ b/Lara-JS/src-api/lara/System.ts @@ -1,7 +1,7 @@ import Io from "./Io.js"; import Platforms from "./Platforms.js"; import { info } from "./core/LaraCore.js"; -import JavaTypes, { JavaClasses } from "./util/JavaTypes.js"; +import JavaTypes, { type JavaClasses } from "./util/JavaTypes.js"; import TimeUnits, { TimerUnit } from "./util/TimeUnits.js"; export default class System { diff --git a/Lara-JS/src-api/lara/benchmark/BenchmarkInstance.ts b/Lara-JS/src-api/lara/benchmark/BenchmarkInstance.ts index abebd221a..ef083c15a 100644 --- a/Lara-JS/src-api/lara/benchmark/BenchmarkInstance.ts +++ b/Lara-JS/src-api/lara/benchmark/BenchmarkInstance.ts @@ -1,6 +1,6 @@ import { LaraJoinPoint } from "../../LaraJoinPoint.js"; import Io from "../Io.js"; -import { JavaClasses } from "../util/JavaTypes.js"; +import { type JavaClasses } from "../util/JavaTypes.js"; import ProcessExecutor from "../util/ProcessExecutor.js"; import BenchmarkCompilationEngine from "./BenchmarkCompilationEngine.js"; 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/lara/iterators/LineIterator.ts b/Lara-JS/src-api/lara/iterators/LineIterator.ts index 5a66fbcf0..ac6cb1fe7 100644 --- a/Lara-JS/src-api/lara/iterators/LineIterator.ts +++ b/Lara-JS/src-api/lara/iterators/LineIterator.ts @@ -1,4 +1,4 @@ -import JavaTypes, { JavaClasses } from "../util/JavaTypes.js"; +import JavaTypes, { type JavaClasses } from "../util/JavaTypes.js"; import LaraIterator from "./LaraIterator.js"; /** diff --git a/Lara-JS/src-api/lara/pass/AdapterPass.ts b/Lara-JS/src-api/lara/pass/AdapterPass.ts index 624f84171..f3d449b8f 100644 --- a/Lara-JS/src-api/lara/pass/AdapterPass.ts +++ b/Lara-JS/src-api/lara/pass/AdapterPass.ts @@ -1,5 +1,5 @@ import { LaraJoinPoint } from "../../LaraJoinPoint.js"; -import TraversalType from "../../weaver/TraversalType.js"; +import { TraversalType } from "../../weaver/TraversalType.js"; import PassTransformationError from "./PassTransformationError.js"; import SimplePass from "./SimplePass.js"; import AggregatePassResult from "./results/AggregatePassResult.js"; diff --git a/Lara-JS/src-api/lara/pass/SimplePass.ts b/Lara-JS/src-api/lara/pass/SimplePass.ts index 30f264613..682a19f97 100644 --- a/Lara-JS/src-api/lara/pass/SimplePass.ts +++ b/Lara-JS/src-api/lara/pass/SimplePass.ts @@ -1,5 +1,5 @@ import { LaraJoinPoint } from "../../LaraJoinPoint.js"; -import TraversalType from "../../weaver/TraversalType.js"; +import { TraversalType } from "../../weaver/TraversalType.js"; import Pass from "./Pass.js"; import PassTransformationError from "./PassTransformationError.js"; import AggregatePassResult from "./results/AggregatePassResult.js"; diff --git a/Lara-JS/src-api/lara/tool/ToolUtils.ts b/Lara-JS/src-api/lara/tool/ToolUtils.ts index f3296478a..41335ade8 100644 --- a/Lara-JS/src-api/lara/tool/ToolUtils.ts +++ b/Lara-JS/src-api/lara/tool/ToolUtils.ts @@ -1,4 +1,4 @@ -import { JavaClasses } from "../util/JavaTypes.js"; +import { type JavaClasses } from "../util/JavaTypes.js"; import Strings from "../Strings.js"; export default class ToolUtils { diff --git a/Lara-JS/src-api/lara/util/DataStore.ts b/Lara-JS/src-api/lara/util/DataStore.ts index 0779dfad8..4ac70e3a1 100644 --- a/Lara-JS/src-api/lara/util/DataStore.ts +++ b/Lara-JS/src-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 JavaTypes, { type JavaClasses } from "./JavaTypes.js"; /** * Interface with Java class DataStore, used for storing arbitrary information. diff --git a/Lara-JS/src-api/lara/util/LineInserter.ts b/Lara-JS/src-api/lara/util/LineInserter.ts index 81452ba2a..93455804f 100644 --- a/Lara-JS/src-api/lara/util/LineInserter.ts +++ b/Lara-JS/src-api/lara/util/LineInserter.ts @@ -1,5 +1,5 @@ import LineIterator from "../iterators/LineIterator.js"; -import { JavaClasses } from "./JavaTypes.js"; +import { type JavaClasses } from "./JavaTypes.js"; /** * Helps inserting lines. diff --git a/Lara-JS/src-api/lara/util/LocalFolder.ts b/Lara-JS/src-api/lara/util/LocalFolder.ts index 4646bcab2..b2341568c 100644 --- a/Lara-JS/src-api/lara/util/LocalFolder.ts +++ b/Lara-JS/src-api/lara/util/LocalFolder.ts @@ -1,6 +1,6 @@ import { fileToJSON } from "../../core/output.js"; import Io from "../Io.js"; -import JavaTypes, { JavaClasses } from "./JavaTypes.js"; +import JavaTypes, { type JavaClasses } from "./JavaTypes.js"; import System from "../System.js"; /** diff --git a/Lara-JS/src-api/lara/util/ProcessExecutor.ts b/Lara-JS/src-api/lara/util/ProcessExecutor.ts index 9a83f6770..79866ceb9 100644 --- a/Lara-JS/src-api/lara/util/ProcessExecutor.ts +++ b/Lara-JS/src-api/lara/util/ProcessExecutor.ts @@ -1,7 +1,7 @@ import Io from "../Io.js"; import JavaInterop from "../JavaInterop.js"; import { arrayFromArgs, checkType } from "../core/LaraCore.js"; -import JavaTypes, { JavaClasses } from "./JavaTypes.js"; +import JavaTypes, { type JavaClasses } from "./JavaTypes.js"; import TimeUnits, { TimerUnit } from "./TimeUnits.js"; /** diff --git a/Lara-JS/src-api/lara/util/Replacer.ts b/Lara-JS/src-api/lara/util/Replacer.ts index ed783ce6a..08fddef10 100644 --- a/Lara-JS/src-api/lara/util/Replacer.ts +++ b/Lara-JS/src-api/lara/util/Replacer.ts @@ -1,5 +1,5 @@ import Io from "../Io.js"; -import JavaTypes, { JavaClasses } from "./JavaTypes.js"; +import JavaTypes, { type JavaClasses } from "./JavaTypes.js"; /** * Replaces strings inside a larger string. diff --git a/Lara-JS/src-api/lara/util/TimeUnits.ts b/Lara-JS/src-api/lara/util/TimeUnits.ts index 714d0e0b0..02cc48b2f 100644 --- a/Lara-JS/src-api/lara/util/TimeUnits.ts +++ b/Lara-JS/src-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/tsconfig.json b/Lara-JS/src-api/tsconfig.json index b03a6a89e..0607bd620 100644 --- a/Lara-JS/src-api/tsconfig.json +++ b/Lara-JS/src-api/tsconfig.json @@ -1,6 +1,7 @@ { "extends": "../tsconfig.json", "compilerOptions": { + "rootDir": ".", "outDir": "../api" }, "exclude": ["node_modules", "**/*.spec.ts", "**/*.test.ts"], diff --git a/Lara-JS/src-api/weaver/Query.ts b/Lara-JS/src-api/weaver/Query.ts index fd5b6fb15..b7ea0b242 100644 --- a/Lara-JS/src-api/weaver/Query.ts +++ b/Lara-JS/src-api/weaver/Query.ts @@ -4,7 +4,7 @@ import Selector, { type Filter_StringVariant, type Filter_WrapperVariant, } from "./Selector.js"; -import TraversalType from "./TraversalType.js"; +import { TraversalType } from "./TraversalType.js"; /** * Class for selection of join points. Provides an API similar to the keyword 'select'. diff --git a/Lara-JS/src-api/weaver/Selector.ts b/Lara-JS/src-api/weaver/Selector.ts index 956807d35..b2293ce62 100644 --- a/Lara-JS/src-api/weaver/Selector.ts +++ b/Lara-JS/src-api/weaver/Selector.ts @@ -7,7 +7,7 @@ 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 { TraversalType } from "./TraversalType.js"; import Weaver from "./Weaver.js"; import JpPredicate from "./predicate/JpPredicate.js"; import StringPredicate from "./predicate/StringPredicate.js"; diff --git a/Lara-JS/src-api/weaver/TraversalType.ts b/Lara-JS/src-api/weaver/TraversalType.ts index 41614aa16..cc4fb7ca2 100644 --- a/Lara-JS/src-api/weaver/TraversalType.ts +++ b/Lara-JS/src-api/weaver/TraversalType.ts @@ -1,9 +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. */ -enum TraversalType { - PREORDER = "preorder", - POSTORDER = "postorder", -} - -export default TraversalType; +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/src-api/weaver/Weaver.ts index d64b6c131..f0e2316ab 100644 --- a/Lara-JS/src-api/weaver/Weaver.ts +++ b/Lara-JS/src-api/weaver/Weaver.ts @@ -5,7 +5,7 @@ import { 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 JavaTypes, { type JavaClasses } from "../lara/util/JavaTypes.js"; import WeaverOptions from "./WeaverOptions.js"; /** diff --git a/Lara-JS/src-api/weaver/predicate/StringPredicate.ts b/Lara-JS/src-api/weaver/predicate/StringPredicate.ts index e3d98fb16..6445026a3 100644 --- a/Lara-JS/src-api/weaver/predicate/StringPredicate.ts +++ b/Lara-JS/src-api/weaver/predicate/StringPredicate.ts @@ -3,8 +3,11 @@ import JpPredicate from "./JpPredicate.js"; 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/src-api/weaver/predicate/TypePredicate.ts index 226ce0295..c683b54dc 100644 --- a/Lara-JS/src-api/weaver/predicate/TypePredicate.ts +++ b/Lara-JS/src-api/weaver/predicate/TypePredicate.ts @@ -4,8 +4,11 @@ import Weaver from "../Weaver.js"; 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/src-api/weaver/util/WeaverDataStore.ts index 87b94d293..a51d25dc8 100644 --- a/Lara-JS/src-api/weaver/util/WeaverDataStore.ts +++ b/Lara-JS/src-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 JavaTypes, { type JavaClasses } from "../../lara/util/JavaTypes.js"; /** * DataStore used in LaraI weavers. diff --git a/Lara-JS/src-code/FileExtensions.ts b/Lara-JS/src-code/FileExtensions.ts index a1e392832..4eacb7b6b 100644 --- a/Lara-JS/src-code/FileExtensions.ts +++ b/Lara-JS/src-code/FileExtensions.ts @@ -1,8 +1,14 @@ -export enum FileExtensions { - JS = ".js", - MJS = ".mjs", - CJS = ".cjs", -} +/** + * 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. diff --git a/Lara-JS/src-code/Weaver.ts b/Lara-JS/src-code/Weaver.ts index 32631982d..a74e036bc 100644 --- a/Lara-JS/src-code/Weaver.ts +++ b/Lara-JS/src-code/Weaver.ts @@ -6,7 +6,7 @@ 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 type WeaverMessageFromLauncher from "./WeaverMessageFromLauncher.js"; import assert from "assert"; let directExecution = false; diff --git a/Lara-JS/src-code/WeaverLauncher.ts b/Lara-JS/src-code/WeaverLauncher.ts index f98fcfbbb..7328b6f62 100644 --- a/Lara-JS/src-code/WeaverLauncher.ts +++ b/Lara-JS/src-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"; @@ -11,8 +11,8 @@ import { getActiveChildProcesses, listenForTerminationSignals, } from "./ChildProcessHandling.js"; -import WeaverConfiguration from "./WeaverConfiguration.js"; -import WeaverMessageFromLauncher from "./WeaverMessageFromLauncher.js"; +import type WeaverConfiguration from "./WeaverConfiguration.js"; +import type WeaverMessageFromLauncher from "./WeaverMessageFromLauncher.js"; import { Weaver } from "./Weaver.js"; diff --git a/Lara-JS/src-code/WeaverMessageFromLauncher.ts b/Lara-JS/src-code/WeaverMessageFromLauncher.ts index 17b6747cb..a54cfb571 100644 --- a/Lara-JS/src-code/WeaverMessageFromLauncher.ts +++ b/Lara-JS/src-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.js"; export default interface WeaverMessageFromLauncher { config: WeaverConfiguration; diff --git a/Lara-JS/src-code/tsconfig.json b/Lara-JS/src-code/tsconfig.json index 8061f3caf..62a2028ce 100644 --- a/Lara-JS/src-code/tsconfig.json +++ b/Lara-JS/src-code/tsconfig.json @@ -1,6 +1,7 @@ { "extends": "../tsconfig.json", "compilerOptions": { + "rootDir": ".", "outDir": "../code", "composite": true }, diff --git a/Lara-JS/tsconfig.json b/Lara-JS/tsconfig.json index f67bd95ee..4ae881b99 100644 --- a/Lara-JS/tsconfig.json +++ b/Lara-JS/tsconfig.json @@ -1,9 +1,8 @@ { "compilerOptions": { - "target": "ES2022", + //"noEmit": true, "module": "NodeNext", "declaration": true, - "outDir": "./dist", "strict": true, //"allowJs": true, //"checkJs": true, @@ -13,6 +12,9 @@ "declarationMap": true, "allowSyntheticDefaultImports": true, //"esModuleInterop": true - "types": ["node", "jest"] + "types": ["node", "jest"], + "rewriteRelativeImportExtensions": true, + "erasableSyntaxOnly": true, + "verbatimModuleSyntax": true } } From eab9feb90bd0215535ad5fef11ce876dacc4a004 Mon Sep 17 00:00:00 2001 From: "L. Sousa" Date: Mon, 8 Jun 2026 20:54:34 +0100 Subject: [PATCH 02/13] Lara-JS: Move TS files into the old JS locations. Since we do not transpile TS anymore, the sources have been moved to their old destination folders. --- Lara-JS/.gitignore | 2 -- Lara-JS/{src-api => api}/Graal.d.ts | 0 Lara-JS/{src-api => api}/LaraJoinPoint.ts | 2 +- .../LegacyIntegrationTests - API.test.ts | 2 +- .../LegacyIntegrationTests - JsEngine.test.ts | 2 +- .../LegacyIntegrationTests - Weaver.test.ts | 2 +- Lara-JS/{src-api => api}/core/output.ts | 2 +- Lara-JS/{src-api => api}/jest.config.js | 3 +-- Lara-JS/{src-api => api}/lara/Check.ts | 6 +++--- Lara-JS/{src-api => api}/lara/Collections.ts | 4 ++-- Lara-JS/{src-api => api}/lara/Csv.ts | 4 ++-- Lara-JS/{src-api => api}/lara/Debug.ts | 0 Lara-JS/{src-api => api}/lara/Io.test.ts | 4 ++-- Lara-JS/{src-api => api}/lara/Io.ts | 8 ++++---- Lara-JS/{src-api => api}/lara/JavaInterop.ts | 2 +- Lara-JS/{src-api => api}/lara/Numbers.ts | 0 Lara-JS/{src-api => api}/lara/Platforms.ts | 2 +- Lara-JS/{src-api => api}/lara/Strings.ts | 2 +- Lara-JS/{src-api => api}/lara/System.ts | 10 +++++----- .../benchmark/BenchmarkCompilationEngine.ts | 2 +- .../lara/benchmark/BenchmarkInstance.ts | 10 +++++----- .../lara/benchmark/BenchmarkSet.ts | 4 ++-- .../{src-api => api}/lara/code/EnergyBase.ts | 2 +- .../{src-api => api}/lara/code/LoggerBase.ts | 6 +++--- .../{src-api => api}/lara/code/TimerBase.ts | 4 ++-- .../{src-api => api}/lara/core/LaraCore.ts | 6 +++--- Lara-JS/{src-api => api}/lara/dse/DseLoop.ts | 6 +++--- .../{src-api => api}/lara/dse/DseValues.ts | 0 .../lara/dse/DseValuesList.ts | 4 ++-- .../{src-api => api}/lara/dse/DseValuesSet.ts | 4 ++-- .../{src-api => api}/lara/dse/DseVariant.ts | 2 +- .../lara/dse/VariableVariant.ts | 8 ++++---- .../lara/graphs/DotFormatter.ts | 4 ++-- .../{src-api => api}/lara/graphs/EdgeData.ts | 0 Lara-JS/{src-api => api}/lara/graphs/Graph.ts | 4 ++-- .../{src-api => api}/lara/graphs/Graphs.ts | 6 +++--- .../{src-api => api}/lara/graphs/NodeData.ts | 0 .../lara/iterators/LaraIterator.ts | 0 .../lara/iterators/LineIterator.ts | 4 ++-- .../lara/metrics/FileSizeMetric.ts | 8 ++++---- .../{src-api => api}/lara/metrics/Metric.ts | 6 +++--- .../lara/metrics/MetricResult.ts | 0 .../lara/mutation/IterativeMutation.ts | 6 +++--- .../lara/mutation/IterativeMutator.ts | 10 +++++----- .../lara/mutation/Mutation.ts | 4 ++-- .../lara/mutation/MutationResult.ts | 2 +- .../{src-api => api}/lara/mutation/Mutator.ts | 2 +- .../{src-api => api}/lara/pass/AdapterPass.ts | 10 +++++----- Lara-JS/{src-api => api}/lara/pass/Pass.ts | 8 ++++---- .../lara/pass/PassTransformationError.ts | 4 ++-- .../{src-api => api}/lara/pass/SimplePass.ts | 12 +++++------ .../lara/pass/composition/PassApplyArg.ts | 0 .../lara/pass/composition/Passes.ts | 8 ++++---- .../lara/pass/results/AggregatePassResult.ts | 8 ++++---- .../lara/pass/results/PassResult.ts | 4 ++-- Lara-JS/{src-api => api}/lara/tool/Tool.ts | 0 .../{src-api => api}/lara/tool/ToolUtils.ts | 4 ++-- .../{src-api => api}/lara/units/EnergyUnit.ts | 4 ++-- .../{src-api => api}/lara/units/SiModifier.ts | 2 +- Lara-JS/{src-api => api}/lara/units/SiUnit.ts | 4 ++-- .../lara/units/TimeModifier.ts | 2 +- .../{src-api => api}/lara/units/TimeUnit.ts | 4 ++-- Lara-JS/{src-api => api}/lara/units/Unit.ts | 0 .../lara/units/UnitModifier.ts | 0 .../lara/units/UnitWithModifier.ts | 4 ++-- .../lara/util/AbstractClassError.ts | 0 .../lara/util/Accumulator.test.ts | 2 +- .../{src-api => api}/lara/util/Accumulator.ts | 0 .../{src-api => api}/lara/util/Checkpoint.ts | 6 +++--- .../lara/util/Combinations.ts | 4 ++-- .../{src-api => api}/lara/util/DataStore.ts | 6 +++--- .../lara/util/IdGenerator.test.ts | 2 +- .../{src-api => api}/lara/util/IdGenerator.ts | 0 .../lara/util/JavaTypes.test.ts | 2 +- .../{src-api => api}/lara/util/JavaTypes.ts | 0 .../{src-api => api}/lara/util/JpFilter.ts | 4 ++-- .../lara/util/LineInserter.ts | 4 ++-- .../{src-api => api}/lara/util/LocalFolder.ts | 8 ++++---- .../lara/util/PredefinedStrings.ts | 2 +- .../lara/util/PrintOnce.test.ts | 2 +- .../{src-api => api}/lara/util/PrintOnce.ts | 0 .../lara/util/ProcessExecutor.ts | 10 +++++----- Lara-JS/{src-api => api}/lara/util/Random.ts | 2 +- .../{src-api => api}/lara/util/Replacer.ts | 4 ++-- .../lara/util/SequentialCombinations.ts | 2 +- .../{src-api => api}/lara/util/StringSet.ts | 0 .../{src-api => api}/lara/util/TimeUnits.ts | 0 Lara-JS/{src-api => api}/lara/util/TupleId.ts | 0 Lara-JS/{src-code => api}/tsconfig.json | 4 +--- Lara-JS/{src-api => api}/weaver/JoinPoints.ts | 6 +++--- Lara-JS/{src-api => api}/weaver/Query.ts | 8 ++++---- Lara-JS/{src-api => api}/weaver/Script.ts | 2 +- Lara-JS/{src-api => api}/weaver/Selector.ts | 20 +++++++++---------- .../{src-api => api}/weaver/TraversalType.ts | 0 Lara-JS/{src-api => api}/weaver/Weaver.ts | 12 +++++------ .../weaver/WeaverLauncherBase.ts | 2 +- .../{src-api => api}/weaver/WeaverOptions.ts | 4 ++-- .../weaver/predicate/JpPredicate.ts | 2 +- .../weaver/predicate/StringPredicate.ts | 4 ++-- .../weaver/predicate/TypePredicate.ts | 6 +++--- .../weaver/util/WeaverDataStore.ts | 6 +++--- .../ChildProcessHandling.test.ts | 2 +- .../ChildProcessHandling.ts | 0 .../{src-code => code}/FileExtensions.test.ts | 3 +-- Lara-JS/{src-code => code}/FileExtensions.ts | 0 Lara-JS/{src-code => code}/JavaError.ts | 0 Lara-JS/{src-code => code}/Weaver.ts | 6 +++--- .../{src-code => code}/WeaverConfiguration.ts | 2 +- Lara-JS/{src-code => code}/WeaverLauncher.ts | 10 +++++----- .../WeaverMessageFromLauncher.ts | 2 +- Lara-JS/{src-code => code}/jest.config.js | 0 Lara-JS/code/tsconfig.json | 7 +++++++ Lara-JS/jest.config.js | 2 +- Lara-JS/jest/WeaverLegacyTester.ts | 4 ++-- Lara-JS/jest/jestGlobalSetup.js | 2 +- Lara-JS/jest/jestGlobalTeardown.js | 2 +- Lara-JS/jest/jestHelpers.ts | 4 ++-- Lara-JS/package.json | 14 ++++++------- Lara-JS/scripts/build-LaraJoinPoint.js | 2 +- Lara-JS/scripts/build-interfaces.js | 2 +- Lara-JS/src-api/tsconfig.json | 9 --------- Lara-JS/tsconfig.json | 2 +- Lara-JS/typedoc.json | 4 ++-- 123 files changed, 227 insertions(+), 237 deletions(-) rename Lara-JS/{src-api => api}/Graal.d.ts (100%) rename Lara-JS/{src-api => api}/LaraJoinPoint.ts (99%) rename Lara-JS/{src-api => api}/LegacyIntegrationTests - API.test.ts (98%) rename Lara-JS/{src-api => api}/LegacyIntegrationTests - JsEngine.test.ts (92%) rename Lara-JS/{src-api => api}/LegacyIntegrationTests - Weaver.test.ts (88%) rename Lara-JS/{src-api => api}/core/output.ts (98%) rename Lara-JS/{src-api => api}/jest.config.js (88%) rename Lara-JS/{src-api => api}/lara/Check.ts (96%) rename Lara-JS/{src-api => api}/lara/Collections.ts (96%) rename Lara-JS/{src-api => api}/lara/Csv.ts (97%) rename Lara-JS/{src-api => api}/lara/Debug.ts (100%) rename Lara-JS/{src-api => api}/lara/Io.test.ts (92%) rename Lara-JS/{src-api => api}/lara/Io.ts (98%) rename Lara-JS/{src-api => api}/lara/JavaInterop.ts (94%) rename Lara-JS/{src-api => api}/lara/Numbers.ts (100%) rename Lara-JS/{src-api => api}/lara/Platforms.ts (97%) rename Lara-JS/{src-api => api}/lara/Strings.ts (98%) rename Lara-JS/{src-api => api}/lara/System.ts (96%) rename Lara-JS/{src-api => api}/lara/benchmark/BenchmarkCompilationEngine.ts (83%) rename Lara-JS/{src-api => api}/lara/benchmark/BenchmarkInstance.ts (97%) rename Lara-JS/{src-api => api}/lara/benchmark/BenchmarkSet.ts (96%) rename Lara-JS/{src-api => api}/lara/code/EnergyBase.ts (97%) rename Lara-JS/{src-api => api}/lara/code/LoggerBase.ts (99%) rename Lara-JS/{src-api => api}/lara/code/TimerBase.ts (95%) rename Lara-JS/{src-api => api}/lara/core/LaraCore.ts (98%) rename Lara-JS/{src-api => api}/lara/dse/DseLoop.ts (66%) rename Lara-JS/{src-api => api}/lara/dse/DseValues.ts (100%) rename Lara-JS/{src-api => api}/lara/dse/DseValuesList.ts (92%) rename Lara-JS/{src-api => api}/lara/dse/DseValuesSet.ts (95%) rename Lara-JS/{src-api => api}/lara/dse/DseVariant.ts (90%) rename Lara-JS/{src-api => api}/lara/dse/VariableVariant.ts (86%) rename Lara-JS/{src-api => api}/lara/graphs/DotFormatter.ts (97%) rename Lara-JS/{src-api => api}/lara/graphs/EdgeData.ts (100%) rename Lara-JS/{src-api => api}/lara/graphs/Graph.ts (82%) rename Lara-JS/{src-api => api}/lara/graphs/Graphs.ts (96%) rename Lara-JS/{src-api => api}/lara/graphs/NodeData.ts (100%) rename Lara-JS/{src-api => api}/lara/iterators/LaraIterator.ts (100%) rename Lara-JS/{src-api => api}/lara/iterators/LineIterator.ts (93%) rename Lara-JS/{src-api => api}/lara/metrics/FileSizeMetric.ts (78%) rename Lara-JS/{src-api => api}/lara/metrics/Metric.ts (86%) rename Lara-JS/{src-api => api}/lara/metrics/MetricResult.ts (100%) rename Lara-JS/{src-api => api}/lara/mutation/IterativeMutation.ts (80%) rename Lara-JS/{src-api => api}/lara/mutation/IterativeMutator.ts (95%) rename Lara-JS/{src-api => api}/lara/mutation/Mutation.ts (92%) rename Lara-JS/{src-api => api}/lara/mutation/MutationResult.ts (86%) rename Lara-JS/{src-api => api}/lara/mutation/Mutator.ts (98%) rename Lara-JS/{src-api => api}/lara/pass/AdapterPass.ts (89%) rename Lara-JS/{src-api => api}/lara/pass/Pass.ts (83%) rename Lara-JS/{src-api => api}/lara/pass/PassTransformationError.ts (90%) rename Lara-JS/{src-api => api}/lara/pass/SimplePass.ts (89%) rename Lara-JS/{src-api => api}/lara/pass/composition/PassApplyArg.ts (100%) rename Lara-JS/{src-api => api}/lara/pass/composition/Passes.ts (80%) rename Lara-JS/{src-api => api}/lara/pass/results/AggregatePassResult.ts (94%) rename Lara-JS/{src-api => api}/lara/pass/results/PassResult.ts (96%) rename Lara-JS/{src-api => api}/lara/tool/Tool.ts (100%) rename Lara-JS/{src-api => api}/lara/tool/ToolUtils.ts (79%) rename Lara-JS/{src-api => api}/lara/units/EnergyUnit.ts (91%) rename Lara-JS/{src-api => api}/lara/units/SiModifier.ts (96%) rename Lara-JS/{src-api => api}/lara/units/SiUnit.ts (79%) rename Lara-JS/{src-api => api}/lara/units/TimeModifier.ts (93%) rename Lara-JS/{src-api => api}/lara/units/TimeUnit.ts (95%) rename Lara-JS/{src-api => api}/lara/units/Unit.ts (100%) rename Lara-JS/{src-api => api}/lara/units/UnitModifier.ts (100%) rename Lara-JS/{src-api => api}/lara/units/UnitWithModifier.ts (95%) rename Lara-JS/{src-api => api}/lara/util/AbstractClassError.ts (100%) rename Lara-JS/{src-api => api}/lara/util/Accumulator.test.ts (98%) rename Lara-JS/{src-api => api}/lara/util/Accumulator.ts (100%) rename Lara-JS/{src-api => api}/lara/util/Checkpoint.ts (94%) rename Lara-JS/{src-api => api}/lara/util/Combinations.ts (94%) rename Lara-JS/{src-api => api}/lara/util/DataStore.ts (98%) rename Lara-JS/{src-api => api}/lara/util/IdGenerator.test.ts (95%) rename Lara-JS/{src-api => api}/lara/util/IdGenerator.ts (100%) rename Lara-JS/{src-api => api}/lara/util/JavaTypes.test.ts (95%) rename Lara-JS/{src-api => api}/lara/util/JavaTypes.ts (100%) rename Lara-JS/{src-api => api}/lara/util/JpFilter.ts (94%) rename Lara-JS/{src-api => api}/lara/util/LineInserter.ts (92%) rename Lara-JS/{src-api => api}/lara/util/LocalFolder.ts (93%) rename Lara-JS/{src-api => api}/lara/util/PredefinedStrings.ts (96%) rename Lara-JS/{src-api => api}/lara/util/PrintOnce.test.ts (92%) rename Lara-JS/{src-api => api}/lara/util/PrintOnce.ts (100%) rename Lara-JS/{src-api => api}/lara/util/ProcessExecutor.ts (96%) rename Lara-JS/{src-api => api}/lara/util/Random.ts (93%) rename Lara-JS/{src-api => api}/lara/util/Replacer.ts (90%) rename Lara-JS/{src-api => api}/lara/util/SequentialCombinations.ts (97%) rename Lara-JS/{src-api => api}/lara/util/StringSet.ts (100%) rename Lara-JS/{src-api => api}/lara/util/TimeUnits.ts (100%) rename Lara-JS/{src-api => api}/lara/util/TupleId.ts (100%) rename Lara-JS/{src-code => api}/tsconfig.json (65%) rename Lara-JS/{src-api => api}/weaver/JoinPoints.ts (96%) rename Lara-JS/{src-api => api}/weaver/Query.ts (98%) rename Lara-JS/{src-api => api}/weaver/Script.ts (96%) rename Lara-JS/{src-api => api}/weaver/Selector.ts (97%) rename Lara-JS/{src-api => api}/weaver/TraversalType.ts (100%) rename Lara-JS/{src-api => api}/weaver/Weaver.ts (96%) rename Lara-JS/{src-api => api}/weaver/WeaverLauncherBase.ts (94%) rename Lara-JS/{src-api => api}/weaver/WeaverOptions.ts (85%) rename Lara-JS/{src-api => api}/weaver/predicate/JpPredicate.ts (89%) rename Lara-JS/{src-api => api}/weaver/predicate/StringPredicate.ts (79%) rename Lara-JS/{src-api => api}/weaver/predicate/TypePredicate.ts (78%) rename Lara-JS/{src-api => api}/weaver/util/WeaverDataStore.ts (94%) rename Lara-JS/{src-code => code}/ChildProcessHandling.test.ts (98%) rename Lara-JS/{src-code => code}/ChildProcessHandling.ts (100%) rename Lara-JS/{src-code => code}/FileExtensions.test.ts (93%) rename Lara-JS/{src-code => code}/FileExtensions.ts (100%) rename Lara-JS/{src-code => code}/JavaError.ts (100%) rename Lara-JS/{src-code => code}/Weaver.ts (98%) rename Lara-JS/{src-code => code}/WeaverConfiguration.ts (94%) rename Lara-JS/{src-code => code}/WeaverLauncher.ts (97%) rename Lara-JS/{src-code => code}/WeaverMessageFromLauncher.ts (69%) rename Lara-JS/{src-code => code}/jest.config.js (100%) create mode 100644 Lara-JS/code/tsconfig.json delete mode 100644 Lara-JS/src-api/tsconfig.json 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 99% rename from Lara-JS/src-api/LaraJoinPoint.ts rename to Lara-JS/api/LaraJoinPoint.ts index d5358cbc2..fc23a25bf 100644 --- a/Lara-JS/src-api/LaraJoinPoint.ts +++ b/Lara-JS/api/LaraJoinPoint.ts @@ -4,7 +4,7 @@ /* 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. 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.js similarity index 88% rename from Lara-JS/src-api/jest.config.js rename to Lara-JS/api/jest.config.js index a95951c23..9c969e2d5 100644 --- a/Lara-JS/src-api/jest.config.js +++ b/Lara-JS/api/jest.config.js @@ -4,7 +4,7 @@ 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" @@ -21,7 +21,6 @@ const config = { setupFiles: ["@specs-feup/lara/jest/setupFiles/sharedJavaModule.js"], setupFilesAfterEnv: ["@specs-feup/lara/jest/setupFiles/importSideEffects.js"], moduleNameMapper: { - "@specs-feup/lara/api/(.+).js": "@specs-feup/lara/src-api/$1", "(.+)\\.js": "$1", }, testEnvironmentOptions: { 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 8364b8570..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, { type 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 d92885509..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, { type 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 16efb16bf..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, { type 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 bdf7fe4fb..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, { type 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 d6fe9fa38..72572ab82 100644 --- a/Lara-JS/src-api/lara/JavaInterop.ts +++ b/Lara-JS/api/lara/JavaInterop.ts @@ -1,4 +1,4 @@ -import JavaTypes, { type 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 64f2d2411..248b8a4a5 100644 --- a/Lara-JS/src-api/lara/Strings.ts +++ b/Lara-JS/api/lara/Strings.ts @@ -1,4 +1,4 @@ -import JavaTypes, { type 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 6b5d4d81a..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, { type 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 97% rename from Lara-JS/src-api/lara/benchmark/BenchmarkInstance.ts rename to Lara-JS/api/lara/benchmark/BenchmarkInstance.ts index ef083c15a..5f96bd737 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 { type 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. 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 ac6cb1fe7..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, { type 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 f3d449b8f..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 682a19f97..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 41335ade8..d08a340f5 100644 --- a/Lara-JS/src-api/lara/tool/ToolUtils.ts +++ b/Lara-JS/api/lara/tool/ToolUtils.ts @@ -1,5 +1,5 @@ -import { type 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 98% rename from Lara-JS/src-api/lara/util/Accumulator.test.ts rename to Lara-JS/api/lara/util/Accumulator.test.ts index 9877cb1d9..1c573f208 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", () => { diff --git a/Lara-JS/src-api/lara/util/Accumulator.ts b/Lara-JS/api/lara/util/Accumulator.ts similarity index 100% rename from Lara-JS/src-api/lara/util/Accumulator.ts rename to Lara-JS/api/lara/util/Accumulator.ts 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 4ac70e3a1..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, { type 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 100% rename from Lara-JS/src-api/lara/util/JavaTypes.ts rename to Lara-JS/api/lara/util/JavaTypes.ts 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 93455804f..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 { type 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 b2341568c..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, { type 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 79866ceb9..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, { type 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 08fddef10..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, { type 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 100% rename from Lara-JS/src-api/lara/util/TimeUnits.ts rename to Lara-JS/api/lara/util/TimeUnits.ts 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-code/tsconfig.json b/Lara-JS/api/tsconfig.json similarity index 65% rename from Lara-JS/src-code/tsconfig.json rename to Lara-JS/api/tsconfig.json index 62a2028ce..c72c84e90 100644 --- a/Lara-JS/src-code/tsconfig.json +++ b/Lara-JS/api/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "../tsconfig.json", "compilerOptions": { - "rootDir": ".", - "outDir": "../code", - "composite": true + "rootDir": "." }, "exclude": ["node_modules", "**/*.spec.ts", "**/*.test.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..5e5fe3a0b 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. 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 b7ea0b242..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 97% rename from Lara-JS/src-api/weaver/Selector.ts rename to Lara-JS/api/weaver/Selector.ts index b2293ce62..a0cbdfe48 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! diff --git a/Lara-JS/src-api/weaver/TraversalType.ts b/Lara-JS/api/weaver/TraversalType.ts similarity index 100% rename from Lara-JS/src-api/weaver/TraversalType.ts rename to Lara-JS/api/weaver/TraversalType.ts diff --git a/Lara-JS/src-api/weaver/Weaver.ts b/Lara-JS/api/weaver/Weaver.ts similarity index 96% rename from Lara-JS/src-api/weaver/Weaver.ts rename to Lara-JS/api/weaver/Weaver.ts index f0e2316ab..0ccf9f5d9 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, { type 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! 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/src-api/weaver/predicate/JpPredicate.ts b/Lara-JS/api/weaver/predicate/JpPredicate.ts similarity index 89% rename from Lara-JS/src-api/weaver/predicate/JpPredicate.ts rename to Lara-JS/api/weaver/predicate/JpPredicate.ts index c30f6e3d5..132c86a4e 100644 --- a/Lara-JS/src-api/weaver/predicate/JpPredicate.ts +++ b/Lara-JS/api/weaver/predicate/JpPredicate.ts @@ -1,4 +1,4 @@ -import { LaraJoinPoint } from "../../LaraJoinPoint.js"; +import { LaraJoinPoint } from "../../LaraJoinPoint.ts"; export default abstract class JpPredicate { diff --git a/Lara-JS/src-api/weaver/predicate/StringPredicate.ts b/Lara-JS/api/weaver/predicate/StringPredicate.ts similarity index 79% rename from Lara-JS/src-api/weaver/predicate/StringPredicate.ts rename to Lara-JS/api/weaver/predicate/StringPredicate.ts index 6445026a3..257d78e36 100644 --- a/Lara-JS/src-api/weaver/predicate/StringPredicate.ts +++ b/Lara-JS/api/weaver/predicate/StringPredicate.ts @@ -1,5 +1,5 @@ -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 { diff --git a/Lara-JS/src-api/weaver/predicate/TypePredicate.ts b/Lara-JS/api/weaver/predicate/TypePredicate.ts similarity index 78% rename from Lara-JS/src-api/weaver/predicate/TypePredicate.ts rename to Lara-JS/api/weaver/predicate/TypePredicate.ts index c683b54dc..f6d69ffd5 100644 --- a/Lara-JS/src-api/weaver/predicate/TypePredicate.ts +++ b/Lara-JS/api/weaver/predicate/TypePredicate.ts @@ -1,6 +1,6 @@ -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 { diff --git a/Lara-JS/src-api/weaver/util/WeaverDataStore.ts b/Lara-JS/api/weaver/util/WeaverDataStore.ts similarity index 94% rename from Lara-JS/src-api/weaver/util/WeaverDataStore.ts rename to Lara-JS/api/weaver/util/WeaverDataStore.ts index a51d25dc8..4319a981f 100644 --- a/Lara-JS/src-api/weaver/util/WeaverDataStore.ts +++ b/Lara-JS/api/weaver/util/WeaverDataStore.ts @@ -1,6 +1,6 @@ -import Io from "../../lara/Io.js"; -import DataStore from "../../lara/util/DataStore.js"; -import JavaTypes, { type JavaClasses } from "../../lara/util/JavaTypes.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/src-code/FileExtensions.ts b/Lara-JS/code/FileExtensions.ts similarity index 100% rename from Lara-JS/src-code/FileExtensions.ts rename to Lara-JS/code/FileExtensions.ts diff --git a/Lara-JS/src-code/JavaError.ts b/Lara-JS/code/JavaError.ts similarity index 100% rename from Lara-JS/src-code/JavaError.ts rename to Lara-JS/code/JavaError.ts diff --git a/Lara-JS/src-code/Weaver.ts b/Lara-JS/code/Weaver.ts similarity index 98% rename from Lara-JS/src-code/Weaver.ts rename to Lara-JS/code/Weaver.ts index a74e036bc..2f255abb7 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 type 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; 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 97% rename from Lara-JS/src-code/WeaverLauncher.ts rename to Lara-JS/code/WeaverLauncher.ts index 7328b6f62..312a97188 100644 --- a/Lara-JS/src-code/WeaverLauncher.ts +++ b/Lara-JS/code/WeaverLauncher.ts @@ -10,11 +10,11 @@ import { addActiveChildProcess, getActiveChildProcesses, listenForTerminationSignals, -} from "./ChildProcessHandling.js"; -import type WeaverConfiguration from "./WeaverConfiguration.js"; -import type 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 69% rename from Lara-JS/src-code/WeaverMessageFromLauncher.ts rename to Lara-JS/code/WeaverMessageFromLauncher.ts index a54cfb571..1e4f4c6ef 100644 --- a/Lara-JS/src-code/WeaverMessageFromLauncher.ts +++ b/Lara-JS/code/WeaverMessageFromLauncher.ts @@ -1,5 +1,5 @@ import { type Arguments } from "yargs"; -import type WeaverConfiguration from "./WeaverConfiguration.js"; +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.js similarity index 100% rename from Lara-JS/src-code/jest.config.js rename to Lara-JS/code/jest.config.js diff --git a/Lara-JS/code/tsconfig.json b/Lara-JS/code/tsconfig.json new file mode 100644 index 000000000..c72c84e90 --- /dev/null +++ b/Lara-JS/code/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "rootDir": "." + }, + "exclude": ["node_modules", "**/*.spec.ts", "**/*.test.ts"] +} diff --git a/Lara-JS/jest.config.js b/Lara-JS/jest.config.js index 416cabfaf..13cb3ec28 100644 --- a/Lara-JS/jest.config.js +++ b/Lara-JS/jest.config.js @@ -12,7 +12,7 @@ const config = { coverageReporters: ["text", "lcov"], collectCoverageFrom: ["**/*[^.d].(t|j)s"], coverageProvider: "v8", - projects: ["src-api", "src-code"], + projects: ["api", "code"], }; export default config; diff --git a/Lara-JS/jest/WeaverLegacyTester.ts b/Lara-JS/jest/WeaverLegacyTester.ts index 51294827b..5f4fe9262 100644 --- a/Lara-JS/jest/WeaverLegacyTester.ts +++ b/Lara-JS/jest/WeaverLegacyTester.ts @@ -1,7 +1,7 @@ import JavaTypes, { type JavaClasses, -} from "@specs-feup/lara/api/lara/util/JavaTypes.js"; -import Weaver from "@specs-feup/lara/api/weaver/Weaver.js"; +} 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"; diff --git a/Lara-JS/jest/jestGlobalSetup.js b/Lara-JS/jest/jestGlobalSetup.js index 864e7e8bb..09a5080c8 100644 --- a/Lara-JS/jest/jestGlobalSetup.js +++ b/Lara-JS/jest/jestGlobalSetup.js @@ -1,4 +1,4 @@ -import { Weaver } from "@specs-feup/lara/code/Weaver.js"; +import { Weaver } from "@specs-feup/lara/code/Weaver.ts"; async function oneTimeSetup(globalConfig, projectConfig) { const weaverMessageFromLauncher = { diff --git a/Lara-JS/jest/jestGlobalTeardown.js b/Lara-JS/jest/jestGlobalTeardown.js index bf203e9af..3891ecf22 100644 --- a/Lara-JS/jest/jestGlobalTeardown.js +++ b/Lara-JS/jest/jestGlobalTeardown.js @@ -1,4 +1,4 @@ -import { Weaver } from "@specs-feup/lara/code/Weaver.js"; +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..5b1c96081 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 Weaver from "@specs-feup/lara/api/weaver/Weaver.ts"; +import JavaTypes from "@specs-feup/lara/api/lara/util/JavaTypes.ts"; /** * Registers the source code that will be used by the weaver for the purpose of this test suite. diff --git a/Lara-JS/package.json b/Lara-JS/package.json index b65d96548..92180028b 100644 --- a/Lara-JS/package.json +++ b/Lara-JS/package.json @@ -11,8 +11,6 @@ "code", "jest", "scripts", - "src-api", - "src-code", ".gitignore", "eslint.config.js", "jest.config.js", @@ -26,17 +24,17 @@ "typedoc.json" ], "scripts": { - "build": "npx tsc -b src-api src-code", - "build:api": "npx tsc -b src-api", - "build:code": "npx tsc -b src-code", + "build": "npx tsc -b api code", + "build:api": "npx tsc -b api", + "build:code": "npx tsc -b code", "build:watch": "npm run build -- --watch", "lint": "eslint .", "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 --input LaraJoinPointSpecification.json --output api/LaraJoinPoint.ts" }, "repository": { "type": "git", diff --git a/Lara-JS/scripts/build-LaraJoinPoint.js b/Lara-JS/scripts/build-LaraJoinPoint.js index 55b7b13ca..23a707d4e 100644 --- a/Lara-JS/scripts/build-LaraJoinPoint.js +++ b/Lara-JS/scripts/build-LaraJoinPoint.js @@ -27,7 +27,7 @@ function buildLaraJoinPoint(inputFileName, outputFileName) { /* 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. diff --git a/Lara-JS/scripts/build-interfaces.js b/Lara-JS/scripts/build-interfaces.js index 8ec978ff6..3ed2f4685 100755 --- a/Lara-JS/scripts/build-interfaces.js +++ b/Lara-JS/scripts/build-interfaces.js @@ -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); diff --git a/Lara-JS/src-api/tsconfig.json b/Lara-JS/src-api/tsconfig.json deleted file mode 100644 index 0607bd620..000000000 --- a/Lara-JS/src-api/tsconfig.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "../tsconfig.json", - "compilerOptions": { - "rootDir": ".", - "outDir": "../api" - }, - "exclude": ["node_modules", "**/*.spec.ts", "**/*.test.ts"], - "references": [{ "path": "../src-code" }] -} diff --git a/Lara-JS/tsconfig.json b/Lara-JS/tsconfig.json index 4ae881b99..5c938d95d 100644 --- a/Lara-JS/tsconfig.json +++ b/Lara-JS/tsconfig.json @@ -1,6 +1,6 @@ { "compilerOptions": { - //"noEmit": true, + "noEmit": true, "module": "NodeNext", "declaration": true, "strict": true, diff --git a/Lara-JS/typedoc.json b/Lara-JS/typedoc.json index d9a0c80a8..84b0c7e64 100644 --- a/Lara-JS/typedoc.json +++ b/Lara-JS/typedoc.json @@ -1,5 +1,5 @@ { "extends": ["./typedoc.base.json"], - "entryPoints": ["src-api/"], - "tsconfig": "src-api/tsconfig.json", + "entryPoints": ["api/"], + "tsconfig": "api/tsconfig.json", } From d3646207efef0b6ef1ea08a8439713bac01d15a0 Mon Sep 17 00:00:00 2001 From: "L. Sousa" Date: Mon, 8 Jun 2026 22:51:23 +0100 Subject: [PATCH 03/13] Lara-JS: Refactor helper scripts to TypeScript and update file references --- Lara-JS/api/LaraJoinPoint.ts | 2 +- Lara-JS/package.json | 4 +- ...araJoinPoint.js => build-LaraJoinPoint.ts} | 14 +- ...uild-interfaces.js => build-interfaces.ts} | 18 +- ....js => convert-joinpoint-specification.ts} | 252 +++++++++--------- .../{copy-folder.js => copy-folder.ts} | 16 +- ...oinpoints.js => generate-ts-joinpoints.ts} | 24 +- 7 files changed, 165 insertions(+), 165 deletions(-) rename Lara-JS/scripts/{build-LaraJoinPoint.js => build-LaraJoinPoint.ts} (93%) rename Lara-JS/scripts/{build-interfaces.js => build-interfaces.ts} (84%) rename Lara-JS/scripts/{convert-joinpoint-specification.js => convert-joinpoint-specification.ts} (68%) rename Lara-JS/scripts/{copy-folder.js => copy-folder.ts} (90%) rename Lara-JS/scripts/{generate-ts-joinpoints.js => generate-ts-joinpoints.ts} (85%) diff --git a/Lara-JS/api/LaraJoinPoint.ts b/Lara-JS/api/LaraJoinPoint.ts index fc23a25bf..e1d7efd31 100644 --- a/Lara-JS/api/LaraJoinPoint.ts +++ b/Lara-JS/api/LaraJoinPoint.ts @@ -1,5 +1,5 @@ ////////////////////////////////////////////////////// -// This file is generated by build-LaraJoinPoint.js // +// This file is generated by build-LaraJoinPoint.ts // ////////////////////////////////////////////////////// /* eslint-disable @typescript-eslint/no-explicit-any */ diff --git a/Lara-JS/package.json b/Lara-JS/package.json index 92180028b..207b5e673 100644 --- a/Lara-JS/package.json +++ b/Lara-JS/package.json @@ -4,7 +4,7 @@ "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" }, "files": [ "api", @@ -34,7 +34,7 @@ "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 api/LaraJoinPoint.ts" + "build-interfaces": "node scripts/build-LaraJoinPoint.ts --input LaraJoinPointSpecification.json --output api/LaraJoinPoint.ts" }, "repository": { "type": "git", diff --git a/Lara-JS/scripts/build-LaraJoinPoint.js b/Lara-JS/scripts/build-LaraJoinPoint.ts similarity index 93% rename from Lara-JS/scripts/build-LaraJoinPoint.js rename to Lara-JS/scripts/build-LaraJoinPoint.ts index 23a707d4e..bbca0bce9 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,7 +22,7 @@ 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 */ @@ -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, `/** diff --git a/Lara-JS/scripts/build-interfaces.js b/Lara-JS/scripts/build-interfaces.ts similarity index 84% rename from Lara-JS/scripts/build-interfaces.js rename to Lara-JS/scripts/build-interfaces.ts index 3ed2f4685..a2ef050db 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 { @@ -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`); diff --git a/Lara-JS/scripts/convert-joinpoint-specification.js b/Lara-JS/scripts/convert-joinpoint-specification.ts similarity index 68% rename from Lara-JS/scripts/convert-joinpoint-specification.js rename to Lara-JS/scripts/convert-joinpoint-specification.ts index 47a9e469e..8a7b5386d 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 { + let typeNameSet = new Set(); + let joinpointNameSet = new Set(); + let unorderedJoinpoints: JSON_JoinpointSpecification[] = []; + let enumNameSet = new Set(); + let unorderedEnums: JSON_EnumSpecification[] = []; input.children.forEach((child) => { typeNameSet.add(child.type); @@ -22,7 +99,7 @@ export function convertSpecification(input, baseJoinPointSpec = undefined) { let joinpoints = orderJoinpoints(unorderedJoinpoints); let enums = orderJoinpoints(unorderedEnums); - let output = { + let 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[] { + let orderedNameSet = new Set(); + let blockedJpSet = new Set(); + let 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) { + let 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 { + let attributes: ConvertedAttribute[] = []; + let 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,12 +210,7 @@ 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"); @@ -167,18 +222,11 @@ function convertDeprecationNotice(notice) { 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"; } @@ -466,7 +472,7 @@ function interpretType(typeString, joinpointNameSet, enumNameSet) { } } -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 +485,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 +496,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 +508,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 90% rename from Lara-JS/scripts/copy-folder.js rename to Lara-JS/scripts/copy-folder.ts index 24457f12c..cbf193560 100644 --- a/Lara-JS/scripts/copy-folder.js +++ b/Lara-JS/scripts/copy-folder.ts @@ -45,20 +45,14 @@ if (fileURLToPath(import.meta.url) === process.argv[1]) { /** * 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: string = extension ) { - const copiedFiles = []; + const copiedFiles: string[] = []; const files = fs.readdirSync(sourceDir); fs.mkdirSync(destinationDir, { recursive: true }); diff --git a/Lara-JS/scripts/generate-ts-joinpoints.js b/Lara-JS/scripts/generate-ts-joinpoints.ts similarity index 85% rename from Lara-JS/scripts/generate-ts-joinpoints.js rename to Lara-JS/scripts/generate-ts-joinpoints.ts index a892890d2..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,13 +193,13 @@ 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) { +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. From 21addd23bb1fb4a42e146d5806b73c43b9ded8af Mon Sep 17 00:00:00 2001 From: "L. Sousa" Date: Mon, 8 Jun 2026 23:16:30 +0100 Subject: [PATCH 04/13] Lara-JS: Convert Jest configuration files to Typescript --- .../api/{jest.config.js => jest.config.ts} | 20 +++++------ .../code/{jest.config.js => jest.config.ts} | 8 ++--- Lara-JS/{jest.config.js => jest.config.ts} | 8 ++--- ...{jestEnvironment.js => jestEnvironment.ts} | 20 ++++++----- Lara-JS/jest/jestGlobalSetup.js | 26 -------------- Lara-JS/jest/jestGlobalSetup.ts | 36 +++++++++++++++++++ ...lobalTeardown.js => jestGlobalTeardown.ts} | 0 Lara-JS/jest/jestHelpers.ts | 2 +- ...ortSideEffects.js => importSideEffects.ts} | 0 ...haredJavaModule.js => sharedJavaModule.ts} | 0 10 files changed, 65 insertions(+), 55 deletions(-) rename Lara-JS/api/{jest.config.js => jest.config.ts} (66%) rename Lara-JS/code/{jest.config.js => jest.config.ts} (62%) rename Lara-JS/{jest.config.js => jest.config.ts} (84%) rename Lara-JS/jest/{jestEnvironment.js => jestEnvironment.ts} (51%) delete mode 100644 Lara-JS/jest/jestGlobalSetup.js create mode 100644 Lara-JS/jest/jestGlobalSetup.ts rename Lara-JS/jest/{jestGlobalTeardown.js => jestGlobalTeardown.ts} (100%) rename Lara-JS/jest/setupFiles/{importSideEffects.js => importSideEffects.ts} (100%) rename Lara-JS/jest/setupFiles/{sharedJavaModule.js => sharedJavaModule.ts} (100%) diff --git a/Lara-JS/api/jest.config.js b/Lara-JS/api/jest.config.ts similarity index 66% rename from Lara-JS/api/jest.config.js rename to Lara-JS/api/jest.config.ts index 9c969e2d5..11314baca 100644 --- a/Lara-JS/api/jest.config.js +++ b/Lara-JS/api/jest.config.ts @@ -1,3 +1,4 @@ +import { defineConfig } from "jest"; import path from "path"; import { fileURLToPath } from "url"; @@ -7,25 +8,22 @@ export const weaverConfig = { 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: { "(.+)\\.js": "$1", }, testEnvironmentOptions: { weaverConfig, }, -}; - -export default config; +}); diff --git a/Lara-JS/code/jest.config.js b/Lara-JS/code/jest.config.ts similarity index 62% rename from Lara-JS/code/jest.config.js rename to Lara-JS/code/jest.config.ts index f8502043b..76873b4a2 100644 --- a/Lara-JS/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/jest.config.js b/Lara-JS/jest.config.ts similarity index 84% rename from Lara-JS/jest.config.js rename to Lara-JS/jest.config.ts index 13cb3ec28..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: { @@ -13,6 +15,4 @@ const config = { collectCoverageFrom: ["**/*[^.d].(t|j)s"], coverageProvider: "v8", projects: ["api", "code"], -}; - -export default config; +}); 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 09a5080c8..000000000 --- a/Lara-JS/jest/jestGlobalSetup.js +++ /dev/null @@ -1,26 +0,0 @@ -import { Weaver } from "@specs-feup/lara/code/Weaver.ts"; - -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.ts similarity index 100% rename from Lara-JS/jest/jestGlobalTeardown.js rename to Lara-JS/jest/jestGlobalTeardown.ts diff --git a/Lara-JS/jest/jestHelpers.ts b/Lara-JS/jest/jestHelpers.ts index 5b1c96081..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.ts"; 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 100% rename from Lara-JS/jest/setupFiles/importSideEffects.js rename to Lara-JS/jest/setupFiles/importSideEffects.ts diff --git a/Lara-JS/jest/setupFiles/sharedJavaModule.js b/Lara-JS/jest/setupFiles/sharedJavaModule.ts similarity index 100% rename from Lara-JS/jest/setupFiles/sharedJavaModule.js rename to Lara-JS/jest/setupFiles/sharedJavaModule.ts From 02c84e1ef40c99fafd11f94c3bda6df1dc42e9a4 Mon Sep 17 00:00:00 2001 From: "L. Sousa" Date: Mon, 8 Jun 2026 23:41:22 +0100 Subject: [PATCH 05/13] Lara-JS: Remove unused TypeScript configuration files and simplify build script in package.json --- Lara-JS/api/tsconfig.json | 7 ------- Lara-JS/code/tsconfig.json | 7 ------- Lara-JS/jest/tsconfig.json | 6 ------ Lara-JS/package.json | 4 +--- 4 files changed, 1 insertion(+), 23 deletions(-) delete mode 100644 Lara-JS/api/tsconfig.json delete mode 100644 Lara-JS/code/tsconfig.json delete mode 100644 Lara-JS/jest/tsconfig.json diff --git a/Lara-JS/api/tsconfig.json b/Lara-JS/api/tsconfig.json deleted file mode 100644 index c72c84e90..000000000 --- a/Lara-JS/api/tsconfig.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "../tsconfig.json", - "compilerOptions": { - "rootDir": "." - }, - "exclude": ["node_modules", "**/*.spec.ts", "**/*.test.ts"] -} diff --git a/Lara-JS/code/tsconfig.json b/Lara-JS/code/tsconfig.json deleted file mode 100644 index c72c84e90..000000000 --- a/Lara-JS/code/tsconfig.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "../tsconfig.json", - "compilerOptions": { - "rootDir": "." - }, - "exclude": ["node_modules", "**/*.spec.ts", "**/*.test.ts"] -} diff --git a/Lara-JS/jest/tsconfig.json b/Lara-JS/jest/tsconfig.json deleted file mode 100644 index 01a34e875..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 207b5e673..c4d31c840 100644 --- a/Lara-JS/package.json +++ b/Lara-JS/package.json @@ -24,9 +24,7 @@ "typedoc.json" ], "scripts": { - "build": "npx tsc -b api code", - "build:api": "npx tsc -b api", - "build:code": "npx tsc -b code", + "build": "tsc", "build:watch": "npm run build -- --watch", "lint": "eslint .", "test": "cross-env NODE_OPTIONS=\"$NODE_OPTIONS --experimental-vm-modules\" jest --detectOpenHandles --forceExit", From 65fee5fca663f57cfa622d2f9a59b56bbf9018b3 Mon Sep 17 00:00:00 2001 From: "L. Sousa" Date: Tue, 9 Jun 2026 00:15:28 +0100 Subject: [PATCH 06/13] Lara-JS: Fix the linter configuration and address some linting errors and warnings --- .../api/lara/benchmark/BenchmarkInstance.ts | 1 - Lara-JS/api/lara/util/Accumulator.test.ts | 3 +- Lara-JS/api/lara/util/Accumulator.ts | 4 +-- Lara-JS/api/lara/util/JavaTypes.ts | 4 +-- Lara-JS/api/weaver/JoinPoints.ts | 1 - Lara-JS/api/weaver/Selector.ts | 1 - Lara-JS/api/weaver/Weaver.ts | 1 - Lara-JS/api/weaver/predicate/JpPredicate.ts | 8 ++--- Lara-JS/code/JavaError.ts | 1 - Lara-JS/code/Weaver.ts | 2 -- Lara-JS/eslint.config.js | 9 +----- .../convert-joinpoint-specification.ts | 30 +++++++++---------- Lara-JS/scripts/copy-folder.ts | 10 ++++--- 13 files changed, 31 insertions(+), 44 deletions(-) diff --git a/Lara-JS/api/lara/benchmark/BenchmarkInstance.ts b/Lara-JS/api/lara/benchmark/BenchmarkInstance.ts index 5f96bd737..bdc9e6465 100644 --- a/Lara-JS/api/lara/benchmark/BenchmarkInstance.ts +++ b/Lara-JS/api/lara/benchmark/BenchmarkInstance.ts @@ -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/api/lara/util/Accumulator.test.ts b/Lara-JS/api/lara/util/Accumulator.test.ts index 1c573f208..62370d0e4 100644 --- a/Lara-JS/api/lara/util/Accumulator.test.ts +++ b/Lara-JS/api/lara/util/Accumulator.test.ts @@ -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/api/lara/util/Accumulator.ts b/Lara-JS/api/lara/util/Accumulator.ts index 669983f12..12a65a775 100644 --- a/Lara-JS/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/api/lara/util/JavaTypes.ts b/Lara-JS/api/lara/util/JavaTypes.ts index c4623fd38..a02153b43 100644 --- a/Lara-JS/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/api/weaver/JoinPoints.ts b/Lara-JS/api/weaver/JoinPoints.ts index 5e5fe3a0b..c74e9c6f6 100644 --- a/Lara-JS/api/weaver/JoinPoints.ts +++ b/Lara-JS/api/weaver/JoinPoints.ts @@ -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/api/weaver/Selector.ts b/Lara-JS/api/weaver/Selector.ts index a0cbdfe48..a5e45e874 100644 --- a/Lara-JS/api/weaver/Selector.ts +++ b/Lara-JS/api/weaver/Selector.ts @@ -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/Weaver.ts b/Lara-JS/api/weaver/Weaver.ts index 0ccf9f5d9..b0bdd4366 100644 --- a/Lara-JS/api/weaver/Weaver.ts +++ b/Lara-JS/api/weaver/Weaver.ts @@ -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/api/weaver/predicate/JpPredicate.ts b/Lara-JS/api/weaver/predicate/JpPredicate.ts index 132c86a4e..a94218a6c 100644 --- a/Lara-JS/api/weaver/predicate/JpPredicate.ts +++ b/Lara-JS/api/weaver/predicate/JpPredicate.ts @@ -3,19 +3,19 @@ import { LaraJoinPoint } from "../../LaraJoinPoint.ts"; export default abstract class JpPredicate { /** - * @returns the name of the join point + * @returns The name of the join point */ abstract jpName() : string; /** - * @returns true if the underlying type is THE class LaraJoinPoint + * @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 + * @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/code/JavaError.ts b/Lara-JS/code/JavaError.ts index 698f93053..170f188a5 100644 --- a/Lara-JS/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/code/Weaver.ts b/Lara-JS/code/Weaver.ts index 2f255abb7..4cf0beed0 100644 --- a/Lara-JS/code/Weaver.ts +++ b/Lara-JS/code/Weaver.ts @@ -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/eslint.config.js b/Lara-JS/eslint.config.js index 2273574c5..414d08221 100644 --- a/Lara-JS/eslint.config.js +++ b/Lara-JS/eslint.config.js @@ -13,9 +13,6 @@ export default [ js.configs.recommended, eslintConfigPrettier, ...typescriptEslint.configs.recommended, - { - ignores: ["**/*.d.ts", "**/*.config.js"], - }, { plugins: { "@typescript-eslint": typescriptEslint.plugin, @@ -28,7 +25,7 @@ export default [ sourceType: "script", parserOptions: { - project: ["./*/tsconfig.json", "./tsconfig.*.json"], + project: ["./tsconfig.json", "./tsconfig.*.json"], tsconfigRootDir: __dirname, }, }, @@ -37,10 +34,6 @@ export default [ "tsdoc/syntax": "warn", }, }, - { - ...typescriptEslint.configs.disableTypeChecked, - files: ["scripts/**/*.js"], - }, { ...jest.configs["flat/recommended"], files: ["**/*.spec.ts", "**/*.test.ts"], diff --git a/Lara-JS/scripts/convert-joinpoint-specification.ts b/Lara-JS/scripts/convert-joinpoint-specification.ts index 8a7b5386d..d7741ecd5 100644 --- a/Lara-JS/scripts/convert-joinpoint-specification.ts +++ b/Lara-JS/scripts/convert-joinpoint-specification.ts @@ -78,11 +78,11 @@ export type ConvertedEnum = { }; export function convertSpecification(input: JSON_LanguageSpecification, baseJoinPointSpec?: ConvertedSpecification | undefined): ConvertedSpecification { - let typeNameSet = new Set(); - let joinpointNameSet = new Set(); - let unorderedJoinpoints: JSON_JoinpointSpecification[] = []; - let enumNameSet = new Set(); - let unorderedEnums: JSON_EnumSpecification[] = []; + 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); @@ -96,10 +96,10 @@ export function convertSpecification(input: JSON_LanguageSpecification, baseJoin } }); - let joinpoints = orderJoinpoints(unorderedJoinpoints); - let enums = orderJoinpoints(unorderedEnums); + const joinpoints = orderJoinpoints(unorderedJoinpoints); + const enums = orderJoinpoints(unorderedEnums); - let output: ConvertedSpecification = { + const output: ConvertedSpecification = { joinpoints: convertJoinpoints(joinpoints, joinpointNameSet, enumNameSet), enums: convertEnums(enums), importEnums: Array.isArray(input.importEnums) ? [...input.importEnums] : [], @@ -115,9 +115,9 @@ export function convertSpecification(input: JSON_LanguageSpecification, baseJoin } function orderJoinpoints(unorderedJoinpoints: T[]): T[] { - let orderedNameSet = new Set(); - let blockedJpSet = new Set(); - let joinpoints: T[] = []; + const orderedNameSet = new Set(); + const blockedJpSet = new Set(); + const joinpoints: T[] = []; unorderedJoinpoints.forEach((jp) => { if (jp.extends) { @@ -146,7 +146,7 @@ function orderJoinpoints, enumNameSet: Set) { - let convertedJoinpoints: ConvertedJoinpoint[] = []; + const convertedJoinpoints: ConvertedJoinpoint[] = []; joinpoints.forEach((jp) => { convertedJoinpoints.push( @@ -158,8 +158,8 @@ function convertJoinpoints(joinpoints: JSON_JoinpointSpecification[], joinpointN } function convertJoinpoint(jp: JSON_JoinpointSpecification, joinpointNameSet: Set, enumNameSet: Set): ConvertedJoinpoint { - let attributes: ConvertedAttribute[] = []; - let actions: ConvertedAction[] = []; + const attributes: ConvertedAttribute[] = []; + const actions: ConvertedAction[] = []; const actionNameSet = new Set(); jp.children?.forEach((child) => { @@ -215,7 +215,7 @@ function convertDeprecationNotice(notice: string | undefined): string | undefine 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]; } diff --git a/Lara-JS/scripts/copy-folder.ts b/Lara-JS/scripts/copy-folder.ts index cbf193560..98eb164d6 100644 --- a/Lara-JS/scripts/copy-folder.ts +++ 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 @@ -71,13 +71,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); From fa43cf215f3f5a11e9071a69549b647e06652b9e Mon Sep 17 00:00:00 2001 From: "L. Sousa" Date: Tue, 9 Jun 2026 00:16:47 +0100 Subject: [PATCH 07/13] Lara-JS: Fix types in the scripts' yargs calls --- Lara-JS/scripts/build-LaraJoinPoint.ts | 6 ++++-- Lara-JS/scripts/build-interfaces.ts | 7 +++++-- Lara-JS/scripts/copy-folder.ts | 15 ++++++--------- 3 files changed, 15 insertions(+), 13 deletions(-) diff --git a/Lara-JS/scripts/build-LaraJoinPoint.ts b/Lara-JS/scripts/build-LaraJoinPoint.ts index bbca0bce9..4610deb20 100644 --- a/Lara-JS/scripts/build-LaraJoinPoint.ts +++ b/Lara-JS/scripts/build-LaraJoinPoint.ts @@ -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.ts b/Lara-JS/scripts/build-interfaces.ts index a2ef050db..71faf4b18 100755 --- a/Lara-JS/scripts/build-interfaces.ts +++ b/Lara-JS/scripts/build-interfaces.ts @@ -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/copy-folder.ts b/Lara-JS/scripts/copy-folder.ts index 98eb164d6..085ead745 100644 --- a/Lara-JS/scripts/copy-folder.ts +++ b/Lara-JS/scripts/copy-folder.ts @@ -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,14 +35,9 @@ 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); } /** @@ -49,8 +46,8 @@ if (fileURLToPath(import.meta.url) === process.argv[1]) { export default function copyFolder( sourceDir: string, destinationDir: string, - extension: string, - targetExtension: string = extension + extension?: string, + targetExtension = extension, ) { const copiedFiles: string[] = []; From 40a8935555b1185c32e7d3fb21a893ffae16e497 Mon Sep 17 00:00:00 2001 From: "L. Sousa" Date: Tue, 9 Jun 2026 00:43:11 +0100 Subject: [PATCH 08/13] Lara-JS: Convert ESLint configuration to TypeScript --- Lara-JS/{eslint.config.js => eslint.config.ts} | 15 ++++++++------- Lara-JS/package.json | 2 +- 2 files changed, 9 insertions(+), 8 deletions(-) rename Lara-JS/{eslint.config.js => eslint.config.ts} (93%) diff --git a/Lara-JS/eslint.config.js b/Lara-JS/eslint.config.ts similarity index 93% rename from Lara-JS/eslint.config.js rename to Lara-JS/eslint.config.ts index 414d08221..7df9bdcf0 100644 --- a/Lara-JS/eslint.config.js +++ b/Lara-JS/eslint.config.ts @@ -1,15 +1,16 @@ -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, @@ -48,4 +49,4 @@ export default [ }, }, }, -]; +]); diff --git a/Lara-JS/package.json b/Lara-JS/package.json index c4d31c840..53a0950c2 100644 --- a/Lara-JS/package.json +++ b/Lara-JS/package.json @@ -26,7 +26,7 @@ "scripts": { "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 -- api", "test:code": "npm run test -- code", From a9e2ece48b7478839b9514784ad653ff961da6d6 Mon Sep 17 00:00:00 2001 From: "L. Sousa" Date: Tue, 9 Jun 2026 03:27:21 +0100 Subject: [PATCH 09/13] Lara-JS: Update Typedoc configuration --- Lara-JS/tsconfig.jest.json | 5 ----- Lara-JS/typedoc.config.js | 9 +++++++++ Lara-JS/typedoc.json | 5 ----- 3 files changed, 9 insertions(+), 10 deletions(-) delete mode 100644 Lara-JS/tsconfig.jest.json create mode 100644 Lara-JS/typedoc.config.js delete mode 100644 Lara-JS/typedoc.json 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/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 84b0c7e64..000000000 --- a/Lara-JS/typedoc.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "extends": ["./typedoc.base.json"], - "entryPoints": ["api/"], - "tsconfig": "api/tsconfig.json", -} From 7a32bbdfe6792aa08a51af29218b9dda213cbd1a Mon Sep 17 00:00:00 2001 From: "L. Sousa" Date: Tue, 9 Jun 2026 03:34:05 +0100 Subject: [PATCH 10/13] Lara-JS: Ignore a few Typescript compiler errors. The problem stems from the requirement of Node.js of "rewriteRelativeImportExtensions" to be "true". This causes any import that refers to the package name ("@specs-feup/lara/...") to throw a compilation error when compiling Lara-JS. However, if we rewrite them to use relative imports, the Jest config in the downstream weavers will error out. Thus, we added directives for the Typescript compiler to ignore the errors in these particular lines. The ignore directives were of the appropriate scope as to avoid compilation errors in Lara-JS and in the downstream weavers' compilations. --- Lara-JS/jest/WeaverLegacyTester.ts | 6 ++++-- Lara-JS/jest/jestGlobalSetup.ts | 1 + Lara-JS/jest/jestGlobalTeardown.ts | 1 + Lara-JS/jest/jestHelpers.ts | 2 ++ 4 files changed, 8 insertions(+), 2 deletions(-) diff --git a/Lara-JS/jest/WeaverLegacyTester.ts b/Lara-JS/jest/WeaverLegacyTester.ts index 5f4fe9262..5869ece51 100644 --- a/Lara-JS/jest/WeaverLegacyTester.ts +++ b/Lara-JS/jest/WeaverLegacyTester.ts @@ -1,11 +1,13 @@ import JavaTypes, { type JavaClasses, +// @ts-ignore } from "@specs-feup/lara/api/lara/util/JavaTypes.ts"; +import { jest } from "@jest/globals"; +// @ts-ignore 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/jestGlobalSetup.ts b/Lara-JS/jest/jestGlobalSetup.ts index d4ae593f3..1ae1f4462 100644 --- a/Lara-JS/jest/jestGlobalSetup.ts +++ b/Lara-JS/jest/jestGlobalSetup.ts @@ -1,4 +1,5 @@ import type { Config } from "@jest/types"; +// @ts-expect-error 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"; diff --git a/Lara-JS/jest/jestGlobalTeardown.ts b/Lara-JS/jest/jestGlobalTeardown.ts index 3891ecf22..30aa281f5 100644 --- a/Lara-JS/jest/jestGlobalTeardown.ts +++ b/Lara-JS/jest/jestGlobalTeardown.ts @@ -1,3 +1,4 @@ +// @ts-expect-error import { Weaver } from "@specs-feup/lara/code/Weaver.ts"; export default function () { diff --git a/Lara-JS/jest/jestHelpers.ts b/Lara-JS/jest/jestHelpers.ts index 503af5e0e..7ca31968a 100644 --- a/Lara-JS/jest/jestHelpers.ts +++ b/Lara-JS/jest/jestHelpers.ts @@ -1,4 +1,6 @@ +// @ts-ignore import JavaTypes from "@specs-feup/lara/api/lara/util/JavaTypes.ts"; +// @ts-ignore import Weaver from "@specs-feup/lara/api/weaver/Weaver.ts"; /** From 85999c8f190769c856275b6cc807507a89999b1d Mon Sep 17 00:00:00 2001 From: "L. Sousa" Date: Tue, 9 Jun 2026 16:45:04 +0100 Subject: [PATCH 11/13] Lara-JS: Add proper exports to the package and cleanup tsconfig --- Lara-JS/jest/WeaverLegacyTester.ts | 4 +-- Lara-JS/jest/jestGlobalSetup.ts | 1 - Lara-JS/jest/jestGlobalTeardown.ts | 1 - Lara-JS/jest/jestHelpers.ts | 2 -- Lara-JS/jest/setupFiles/importSideEffects.ts | 6 +++-- Lara-JS/jest/setupFiles/sharedJavaModule.ts | 6 +++-- Lara-JS/package.json | 27 ++++++++++++++++---- Lara-JS/tsconfig.json | 6 ----- 8 files changed, 31 insertions(+), 22 deletions(-) diff --git a/Lara-JS/jest/WeaverLegacyTester.ts b/Lara-JS/jest/WeaverLegacyTester.ts index 5869ece51..c428a1468 100644 --- a/Lara-JS/jest/WeaverLegacyTester.ts +++ b/Lara-JS/jest/WeaverLegacyTester.ts @@ -1,9 +1,7 @@ +import { jest } from "@jest/globals"; import JavaTypes, { type JavaClasses, -// @ts-ignore } from "@specs-feup/lara/api/lara/util/JavaTypes.ts"; -import { jest } from "@jest/globals"; -// @ts-ignore import Weaver from "@specs-feup/lara/api/weaver/Weaver.ts"; import fs from "fs"; import path from "path"; diff --git a/Lara-JS/jest/jestGlobalSetup.ts b/Lara-JS/jest/jestGlobalSetup.ts index 1ae1f4462..d4ae593f3 100644 --- a/Lara-JS/jest/jestGlobalSetup.ts +++ b/Lara-JS/jest/jestGlobalSetup.ts @@ -1,5 +1,4 @@ import type { Config } from "@jest/types"; -// @ts-expect-error 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"; diff --git a/Lara-JS/jest/jestGlobalTeardown.ts b/Lara-JS/jest/jestGlobalTeardown.ts index 30aa281f5..3891ecf22 100644 --- a/Lara-JS/jest/jestGlobalTeardown.ts +++ b/Lara-JS/jest/jestGlobalTeardown.ts @@ -1,4 +1,3 @@ -// @ts-expect-error import { Weaver } from "@specs-feup/lara/code/Weaver.ts"; export default function () { diff --git a/Lara-JS/jest/jestHelpers.ts b/Lara-JS/jest/jestHelpers.ts index 7ca31968a..503af5e0e 100644 --- a/Lara-JS/jest/jestHelpers.ts +++ b/Lara-JS/jest/jestHelpers.ts @@ -1,6 +1,4 @@ -// @ts-ignore import JavaTypes from "@specs-feup/lara/api/lara/util/JavaTypes.ts"; -// @ts-ignore import Weaver from "@specs-feup/lara/api/weaver/Weaver.ts"; /** diff --git a/Lara-JS/jest/setupFiles/importSideEffects.ts b/Lara-JS/jest/setupFiles/importSideEffects.ts index 51295b256..87874f1ec 100644 --- a/Lara-JS/jest/setupFiles/importSideEffects.ts +++ 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.ts b/Lara-JS/jest/setupFiles/sharedJavaModule.ts index 6e4c93a7e..2c0e6f0f7 100644 --- a/Lara-JS/jest/setupFiles/sharedJavaModule.ts +++ 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/package.json b/Lara-JS/package.json index 53a0950c2..ed2e0307d 100644 --- a/Lara-JS/package.json +++ b/Lara-JS/package.json @@ -4,7 +4,25 @@ "description": "A js port of the popular framework for building source-to-source compilers", "type": "module", "bin": { - "lara-build-interfaces": "scripts/build-interfaces.ts" + "lara-build-interfaces": "./scripts/build-interfaces.ts" + }, + "exports": { + "./api/*.test.ts": null, + "./api/*.config.ts": null, + "./api/*": "./api/*.ts", + "./api/*.ts": "./api/*.ts", + "./code/*.test.ts": null, + "./code/*.config.ts": null, + "./code/*": "./code/*.ts", + "./code/*.ts": "./code/*.ts", + "./jest/*.test.ts": null, + "./jest/*.config.ts": null, + "./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", @@ -12,16 +30,15 @@ "jest", "scripts", ".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": "tsc", diff --git a/Lara-JS/tsconfig.json b/Lara-JS/tsconfig.json index 5c938d95d..45c211456 100644 --- a/Lara-JS/tsconfig.json +++ b/Lara-JS/tsconfig.json @@ -4,14 +4,8 @@ "module": "NodeNext", "declaration": true, "strict": true, - //"allowJs": true, - //"checkJs": true, - "moduleResolution": "NodeNext", "isolatedModules": true, - "sourceMap": true, - "declarationMap": true, "allowSyntheticDefaultImports": true, - //"esModuleInterop": true "types": ["node", "jest"], "rewriteRelativeImportExtensions": true, "erasableSyntaxOnly": true, From e1b1c710782c857c130beddb6fe400d18fd0bdbd Mon Sep 17 00:00:00 2001 From: "L. Sousa" Date: Tue, 30 Jun 2026 03:48:22 +0100 Subject: [PATCH 12/13] Update Node.js supported versions --- Lara-JS/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Lara-JS/package.json b/Lara-JS/package.json index ed2e0307d..517273c76 100644 --- a/Lara-JS/package.json +++ b/Lara-JS/package.json @@ -70,7 +70,7 @@ }, "homepage": "https://github.com/specs-feup/lara-framework#readme", "engines": { - "node": ">=25.0.0" + "node": ">=24.0.0" }, "dependencies": { "chokidar": "^5.0.0", From 38d0c9f1381399bed6e8f315ea833f942c6885e7 Mon Sep 17 00:00:00 2001 From: "L. Sousa" Date: Sat, 5 Sep 2026 02:10:28 +0100 Subject: [PATCH 13/13] Lara-JS: Fix unreachable code and add .js subpath export compatibility Remove dead break statements flagged by SonarCloud (S1763) in convert-joinpoint-specification.ts, and add explicit .js -> .ts export patterns so legacy subpath imports like @specs-feup/lara/api/lara/util/Accumulator.js keep resolving after the native-TypeScript migration (found by Codex review). --- Lara-JS/package.json | 3 +++ Lara-JS/scripts/convert-joinpoint-specification.ts | 2 -- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/Lara-JS/package.json b/Lara-JS/package.json index 517273c76..29c947848 100644 --- a/Lara-JS/package.json +++ b/Lara-JS/package.json @@ -9,14 +9,17 @@ "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", diff --git a/Lara-JS/scripts/convert-joinpoint-specification.ts b/Lara-JS/scripts/convert-joinpoint-specification.ts index d7741ecd5..2195a25ac 100644 --- a/Lara-JS/scripts/convert-joinpoint-specification.ts +++ b/Lara-JS/scripts/convert-joinpoint-specification.ts @@ -460,7 +460,6 @@ function interpretType(typeString: string, joinpointNameSet: Set, enumNa case "Double": case "double": return "number"; - break; case "map": case "Map": case "map": @@ -468,7 +467,6 @@ function interpretType(typeString: string, joinpointNameSet: Set, enumNa return "Record"; default: return typeString.toLowerCase(); - break; } }