diff --git a/docs/esm-migration-plan.md b/docs/esm-migration-plan.md new file mode 100644 index 00000000..d2be92e1 --- /dev/null +++ b/docs/esm-migration-plan.md @@ -0,0 +1,299 @@ +# ESM Migration Plan: Add File Extensions to Imports + +## Overview + +This document outlines the plan to migrate from TypeScript's deprecated `"moduleResolution": "node"` (node10) to `"moduleResolution": "node16"` or `"nodenext"`. This change is necessary because the published ESM packages have extensionless imports that don't work correctly in modern ESM environments. + +## Issues Fixed + +This migration will resolve the following issues: + +- **#154** - Upgrade `moduleResolution` from `node` to `node16` or `nodenext` in tsconfig +- **#110** - Published ESM code has imports without file extensions +- **#64** - expressions: ERR_MODULE_NOT_FOUND attempting to run example demo script +- **#146** - Can not import `@actions/workflow-parser` + +## Problem Statement + +### Current State + +All packages use `"moduleResolution": "node"`: + +| Package | moduleResolution | TypeScript | +|---------|------------------|------------| +| expressions | `"node"` | ^4.7.4 | +| workflow-parser | `"node"` | ^4.8.4 | +| languageservice | `"node"` | ^4.8.4 | +| languageserver | `"node"` | ^4.8.4 | +| browser-playground | `"Node16"` ✅ | ^4.9.4 | + +This causes TypeScript to emit code like: +```javascript +// Published to npm - INVALID ESM +export { Expr } from "./ast"; // Missing .js extension! +``` + +### Why This Fails + +ESM in Node.js 12+ **requires** explicit file extensions. When users try to import these packages: + +```javascript +// User's code +import { Expr } from "@actions/expressions"; +``` + +Node.js fails with: +``` +Error [ERR_MODULE_NOT_FOUND]: Cannot find module '.../node_modules/@actions/expressions/dist/ast' +``` + +## Migration Strategy + +### Option A: TypeScript 5.7+ with `rewriteRelativeImportExtensions` (Recommended) + +TypeScript 5.7 introduced a new compiler option that automatically rewrites `.ts` extensions to `.js` in output: + +```jsonc +{ + "compilerOptions": { + "moduleResolution": "node16", // or "nodenext" + "rewriteRelativeImportExtensions": true + } +} +``` + +**Source code:** +```typescript +import { Expr } from "./ast.ts"; +``` + +**Compiled output:** +```javascript +export { Expr } from "./ast.js"; +``` + +**Pros:** +- Source uses `.ts` extensions (matches actual files) +- Works with Deno (which requires `.ts` extensions) +- TypeScript automatically transforms to `.js` +- Modern, forward-looking approach + +**Cons:** +- Requires TypeScript 5.7+ +- Relatively new feature +- **BUG:** See "Known Issues" section below + +### Option B: Manual `.js` Extensions + +Use `.js` extensions in source TypeScript files: + +```typescript +import { Expr } from "./ast.js"; // Points to .ts file, but use .js extension +``` + +**Pros:** +- Works with TypeScript 4.7+ (with node16 moduleResolution) +- Well-established pattern +- No post-processing needed +- Works with ts-jest without extra configuration + +**Cons:** +- Confusing - `.js` files don't exist at write time +- Doesn't work with Deno out of the box + +### Recommendation + +**Use Option B** (manual `.js` extensions). Option A with `rewriteRelativeImportExtensions` has compatibility issues with ts-jest and requires additional workarounds. + +--- + +## Known Issues and Workarounds (December 2025) + +### 1. TypeScript Version Conflicts in Monorepo + +**Problem:** The root `node_modules/typescript` was version 4.9.5 (pulled in by `ts-node` and `tsutils` dependencies), while workspace packages specified `^5.8.3`. + +**Symptoms:** +- `npx tsc --version` showed 4.9.5 +- `require('typescript').version` in ts-jest showed 5.8.3 +- Confusing build failures + +**Solution:** Add npm overrides in root `package.json`: +```json +{ + "overrides": { + "typescript": "5.8.3" + } +} +``` + +### 2. ts-jest Compatibility with TypeScript 5.9+ + +**Problem:** ts-jest 29.4.6 uses `typescript.JSDocParsingMode.ParseAll` which doesn't exist in TypeScript's ES module exports. + +**Error:** +``` +TypeError: Cannot read properties of undefined (reading 'ParseAll') +at Object. (node_modules/ts-jest/dist/compiler/ts-compiler.js:43:123) +``` + +**Root Cause:** ts-jest accesses `typescript_1.default.JSDocParsingMode.ParseAll` but TypeScript has no default export in ESM. + +**Solution:** +- Use ts-jest 29.0.3 (older version that doesn't use this API) +- OR wait for ts-jest fix +- **Stay on TypeScript 5.8.3, not 5.9+** + +### 3. TypeScript `rewriteRelativeImportExtensions` Bug with .d.ts Files + +**Problem:** TypeScript's `rewriteRelativeImportExtensions: true` correctly rewrites `.ts` → `.js` in `.js` output files, but **incorrectly keeps `.ts` extensions in `.d.ts` declaration files**. + +**Example:** +- Source: `export { Expr } from "./ast.ts";` +- Output `index.js`: `export { Expr } from "./ast.js";` ✅ Correct +- Output `index.d.ts`: `export { Expr } from "./ast.ts";` ❌ Wrong (should be `.js`) + +**Upstream Issue:** https://github.com/microsoft/TypeScript/issues/61037 (marked "Help Wanted", in Backlog, NOT FIXED as of Dec 2025) + +**Workaround:** Post-process `.d.ts` files with a script. See `script/fix-dts-extensions.cjs`. + +**Note:** Since we use Option B (manual `.js` extensions), this bug does not affect our migration. + +### 4. yaml Package Internal Types Not Exported + +**Problem:** The `yaml` package does not export internal types like `LinePos` and `NodeBase` that are used in `workflow-parser/src/workflows/yaml-object-reader.ts`. + +**Error:** +``` +error TS2305: Module '"yaml"' has no exported member 'LinePos'. +error TS2305: Module '"yaml"' has no exported member 'NodeBase'. +``` + +**Solution:** Define local type aliases in the file that uses them: +```typescript +// Local type definitions to replace yaml internal imports +type LinePos = { line: number; col: number }; +type NodeBase = { range?: [number, number, number] }; +``` + +### 5. languageserver Blocked by vscode-languageserver Dependency + +**Problem:** The `vscode-languageserver` package (v8.0.2) does not have proper ESM exports. When using `moduleResolution: "node16"`, TypeScript requires packages to have an `exports` field in `package.json` for subpath imports to work. + +**Error:** +``` +src/index.ts(6,8): error TS2307: Cannot find module 'vscode-languageserver/browser' or its corresponding type declarations. +src/connection.ts(1,43): error TS2307: Cannot find module 'vscode-languageserver/node' or its corresponding type declarations. +``` + +**Root Cause:** The `vscode-languageserver` package.json only has `main` and `browser` fields, but no `exports` field: +```json +{ + "main": "./lib/node/main.js", + "browser": { + "./lib/node/main.js": "./lib/browser/main.js" + } + // No "exports" field! +} +``` + +With `moduleResolution: "node16"`, TypeScript follows Node.js ESM resolution rules which require explicit `exports` for subpath imports like `vscode-languageserver/browser` and `vscode-languageserver/node`. + +**Status:** Verified December 2025. Version 9.0.1 is available but ESM export support is not confirmed. + +**Current Decision:** The languageserver package is **deferred** from this migration until the upstream `vscode-languageserver` package adds proper ESM exports. It will continue using the old `moduleResolution: "node"` configuration. + +**Options to resolve:** +- Wait for vscode-languageserver to add ESM exports +- Try upgrading to vscode-languageserver v9.x to see if exports were added +- Use a bundler to work around the module resolution +- Fork or patch the dependency + +--- + +## Migration Status + +| Package | Tests | ESM Status | +|---------|-------|------------| +| expressions | 1068 | ✅ Migrated | +| workflow-parser | 292 | ✅ Migrated | +| languageservice | 452 | ✅ Migrated | +| languageserver | 6 files | ⏸️ Deferred (vscode-languageserver lacks ESM exports) | + +--- + +## Required Configuration Changes + +### tsconfig.build.json (each migrated package) + +**Note:** We use **Option B** (manual `.js` extensions in source files) rather than `rewriteRelativeImportExtensions` because Option A caused ts-jest compatibility issues (tests would hang indefinitely). + +```json +{ + "compilerOptions": { + "module": "node16", + "moduleResolution": "node16", + "skipLibCheck": true, + "lib": ["ES2022"], + "target": "ES2022" + } +} +``` + +The `skipLibCheck: true` is needed to work around @types/node compatibility issues with TypeScript 5.x (TS2386 overload signature errors). +``` + +### jest.config.js (each migrated package) + +```javascript +/** @type {import('ts-jest').JestConfigWithTsJest} */ +export default { + preset: "ts-jest/presets/default-esm", + moduleNameMapper: { + "^(\\.{1,2}/.*)\\.js$": "$1", + "^(\\.{1,2}/.*)\\.ts$": "$1", + }, + transform: { + "^.+\\.tsx?$": [ + "ts-jest", + { + useESM: true, + isolatedModules: true, + }, + ], + }, + moduleFileExtensions: ["ts", "js"], +}; +``` + +### Root package.json + +```json +{ + "overrides": { + "typescript": "5.8.3" + } +} +``` + +### Each workspace package.json + +```json +{ + "devDependencies": { + "typescript": "^5.8.3", + "ts-jest": "^29.0.3" + } +} +``` + +--- + +## References + +- [TypeScript moduleResolution reference](https://www.typescriptlang.org/docs/handbook/modules/reference.html) +- [TypeScript 5.7 rewriteRelativeImportExtensions](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-5-7.html#path-rewriting-for-relative-paths) +- [TypeScript .d.ts extension bug #61037](https://github.com/microsoft/TypeScript/issues/61037) +- [Node.js ESM mandatory extensions](https://nodejs.org/api/esm.html#mandatory-file-extensions) +- [ts-jest ESM support](https://kulshekhar.github.io/ts-jest/docs/guides/esm-support) +- [Community fork that works](https://github.com/boxbuild-io/actions-languageservices/commit/077fb2b58dfd2cca3d6e3df1fdf9e26e75db24ae) diff --git a/expressions/package.json b/expressions/package.json index 78326df6..9644511b 100755 --- a/expressions/package.json +++ b/expressions/package.json @@ -60,6 +60,6 @@ "prettier": "^2.8.3", "rimraf": "^3.0.2", "ts-jest": "^29.0.3", - "typescript": "^4.7.4" + "typescript": "^5.8.3" } } diff --git a/expressions/src/ast.ts b/expressions/src/ast.ts index 51bfedc4..4357b553 100644 --- a/expressions/src/ast.ts +++ b/expressions/src/ast.ts @@ -1,5 +1,5 @@ -import {ExpressionData} from "./data"; -import {Token} from "./lexer"; +import {ExpressionData} from "./data/index.js"; +import {Token} from "./lexer.js"; export interface ExprVisitor { visitLiteral(literal: Literal): R; diff --git a/expressions/src/completion.test.ts b/expressions/src/completion.test.ts index cdcb6e87..1ece0fea 100644 --- a/expressions/src/completion.test.ts +++ b/expressions/src/completion.test.ts @@ -1,11 +1,11 @@ -import {complete, CompletionItem, trimTokenVector} from "./completion"; -import {DescriptionDictionary} from "./completion/descriptionDictionary"; -import {BooleanData} from "./data/boolean"; -import {Dictionary} from "./data/dictionary"; -import {StringData} from "./data/string"; -import {wellKnownFunctions} from "./funcs"; -import {FunctionDefinition, FunctionInfo} from "./funcs/info"; -import {Lexer, TokenType} from "./lexer"; +import {complete, CompletionItem, trimTokenVector} from "./completion.js"; +import {DescriptionDictionary} from "./completion/descriptionDictionary.js"; +import {BooleanData} from "./data/boolean.js"; +import {Dictionary} from "./data/dictionary.js"; +import {StringData} from "./data/string.js"; +import {wellKnownFunctions} from "./funcs.js"; +import {FunctionDefinition, FunctionInfo} from "./funcs/info.js"; +import {Lexer, TokenType} from "./lexer.js"; const testContext = new Dictionary( { diff --git a/expressions/src/completion.ts b/expressions/src/completion.ts index 7a29a60e..4ebafc35 100644 --- a/expressions/src/completion.ts +++ b/expressions/src/completion.ts @@ -1,11 +1,11 @@ -import {DescriptionPair} from "./completion/descriptionDictionary"; -import {Dictionary, isDictionary} from "./data/dictionary"; -import {ExpressionData} from "./data/expressiondata"; -import {Evaluator} from "./evaluator"; -import {wellKnownFunctions} from "./funcs"; -import {FunctionDefinition, FunctionInfo} from "./funcs/info"; -import {Lexer, Token, TokenType} from "./lexer"; -import {Parser} from "./parser"; +import {DescriptionPair} from "./completion/descriptionDictionary.js"; +import {Dictionary, isDictionary} from "./data/dictionary.js"; +import {ExpressionData} from "./data/expressiondata.js"; +import {Evaluator} from "./evaluator.js"; +import {wellKnownFunctions} from "./funcs.js"; +import {FunctionDefinition, FunctionInfo} from "./funcs/info.js"; +import {Lexer, Token, TokenType} from "./lexer.js"; +import {Parser} from "./parser.js"; export type CompletionItem = { label: string; diff --git a/expressions/src/completion/descriptionDictionary.test.ts b/expressions/src/completion/descriptionDictionary.test.ts index 67811f46..176fb765 100644 --- a/expressions/src/completion/descriptionDictionary.test.ts +++ b/expressions/src/completion/descriptionDictionary.test.ts @@ -1,5 +1,5 @@ -import {StringData} from "../data"; -import {DescriptionDictionary} from "./descriptionDictionary"; +import {StringData} from "../data/index.js"; +import {DescriptionDictionary} from "./descriptionDictionary.js"; describe("description dictionary", () => { it("pairs contains all values", () => { diff --git a/expressions/src/completion/descriptionDictionary.ts b/expressions/src/completion/descriptionDictionary.ts index 44b1c8eb..35ecbdb3 100644 --- a/expressions/src/completion/descriptionDictionary.ts +++ b/expressions/src/completion/descriptionDictionary.ts @@ -1,5 +1,5 @@ -import {Dictionary} from "../data/dictionary"; -import {ExpressionData, Kind, Pair} from "../data/expressiondata"; +import {Dictionary} from "../data/dictionary.js"; +import {ExpressionData, Kind, Pair} from "../data/expressiondata.js"; export type DescriptionPair = Pair & {description?: string}; diff --git a/expressions/src/data/array.ts b/expressions/src/data/array.ts index 91b1a7ef..f25ae776 100644 --- a/expressions/src/data/array.ts +++ b/expressions/src/data/array.ts @@ -1,4 +1,4 @@ -import {ExpressionData, ExpressionDataInterface, Kind, kindStr} from "./expressiondata"; +import {ExpressionData, ExpressionDataInterface, Kind, kindStr} from "./expressiondata.js"; export class Array implements ExpressionDataInterface { private v: ExpressionData[] = []; diff --git a/expressions/src/data/boolean.ts b/expressions/src/data/boolean.ts index 0a27fd64..6cdf018b 100644 --- a/expressions/src/data/boolean.ts +++ b/expressions/src/data/boolean.ts @@ -1,4 +1,4 @@ -import {ExpressionDataInterface, Kind} from "./expressiondata"; +import {ExpressionDataInterface, Kind} from "./expressiondata.js"; export class BooleanData implements ExpressionDataInterface { constructor(public readonly value: boolean) {} diff --git a/expressions/src/data/dictionary.test.ts b/expressions/src/data/dictionary.test.ts index bd09bbbd..b23437dd 100644 --- a/expressions/src/data/dictionary.test.ts +++ b/expressions/src/data/dictionary.test.ts @@ -1,5 +1,5 @@ -import {Dictionary} from "./dictionary"; -import {StringData} from "./string"; +import {Dictionary} from "./dictionary.js"; +import {StringData} from "./string.js"; describe("dictionary", () => { it("pairs contains all values", () => { diff --git a/expressions/src/data/dictionary.ts b/expressions/src/data/dictionary.ts index 7a26d275..94ec6cc4 100644 --- a/expressions/src/data/dictionary.ts +++ b/expressions/src/data/dictionary.ts @@ -1,4 +1,4 @@ -import {ExpressionData, ExpressionDataInterface, Kind, kindStr, Pair} from "./expressiondata"; +import {ExpressionData, ExpressionDataInterface, Kind, kindStr, Pair} from "./expressiondata.js"; export class Dictionary implements ExpressionDataInterface { private keys: string[] = []; diff --git a/expressions/src/data/expressiondata.ts b/expressions/src/data/expressiondata.ts index 3f5e9e44..4c621fe7 100644 --- a/expressions/src/data/expressiondata.ts +++ b/expressions/src/data/expressiondata.ts @@ -1,9 +1,9 @@ -import {Dictionary} from "./dictionary"; -import {Null} from "./null"; -import {Array} from "./array"; -import {StringData} from "./string"; -import {NumberData} from "./number"; -import {BooleanData} from "./boolean"; +import {Dictionary} from "./dictionary.js"; +import {Null} from "./null.js"; +import {Array} from "./array.js"; +import {StringData} from "./string.js"; +import {NumberData} from "./number.js"; +import {BooleanData} from "./boolean.js"; export enum Kind { String = 0, diff --git a/expressions/src/data/index.ts b/expressions/src/data/index.ts index 1c9fae90..0b99afa6 100644 --- a/expressions/src/data/index.ts +++ b/expressions/src/data/index.ts @@ -1,9 +1,9 @@ -export {Array} from "./array"; -export {BooleanData} from "./boolean"; -export {Dictionary} from "./dictionary"; -export {ExpressionData, Kind} from "./expressiondata"; -export {Null} from "./null"; -export {NumberData} from "./number"; -export {replacer} from "./replacer"; -export {reviver} from "./reviver"; -export {StringData} from "./string"; +export {Array} from "./array.js"; +export {BooleanData} from "./boolean.js"; +export {Dictionary} from "./dictionary.js"; +export {ExpressionData, Kind} from "./expressiondata.js"; +export {Null} from "./null.js"; +export {NumberData} from "./number.js"; +export {replacer} from "./replacer.js"; +export {reviver} from "./reviver.js"; +export {StringData} from "./string.js"; diff --git a/expressions/src/data/null.ts b/expressions/src/data/null.ts index 71947cb8..5478429e 100644 --- a/expressions/src/data/null.ts +++ b/expressions/src/data/null.ts @@ -1,4 +1,4 @@ -import {ExpressionDataInterface, Kind} from "./expressiondata"; +import {ExpressionDataInterface, Kind} from "./expressiondata.js"; export class Null implements ExpressionDataInterface { public readonly kind = Kind.Null; diff --git a/expressions/src/data/number.test.ts b/expressions/src/data/number.test.ts index c0e54536..fde07078 100644 --- a/expressions/src/data/number.test.ts +++ b/expressions/src/data/number.test.ts @@ -1,4 +1,4 @@ -import {NumberData} from "./number"; +import {NumberData} from "./number.js"; describe("number", () => { it("coerces to string", () => { diff --git a/expressions/src/data/number.ts b/expressions/src/data/number.ts index 095a1c12..e4acee00 100644 --- a/expressions/src/data/number.ts +++ b/expressions/src/data/number.ts @@ -1,4 +1,4 @@ -import {ExpressionDataInterface, Kind} from "./expressiondata"; +import {ExpressionDataInterface, Kind} from "./expressiondata.js"; export class NumberData implements ExpressionDataInterface { constructor(public readonly value: number) {} diff --git a/expressions/src/data/replacer.test.ts b/expressions/src/data/replacer.test.ts index a7925f9f..bbd30984 100644 --- a/expressions/src/data/replacer.test.ts +++ b/expressions/src/data/replacer.test.ts @@ -1,9 +1,9 @@ -import {Array} from "./array"; -import {Dictionary} from "./dictionary"; -import {Null} from "./null"; -import {NumberData} from "./number"; -import {replacer} from "./replacer"; -import {StringData} from "./string"; +import {Array} from "./array.js"; +import {Dictionary} from "./dictionary.js"; +import {Null} from "./null.js"; +import {NumberData} from "./number.js"; +import {replacer} from "./replacer.js"; +import {StringData} from "./string.js"; describe("replacer", () => { it("null", () => { diff --git a/expressions/src/data/replacer.ts b/expressions/src/data/replacer.ts index c73530d5..3e5e8ec6 100644 --- a/expressions/src/data/replacer.ts +++ b/expressions/src/data/replacer.ts @@ -1,9 +1,9 @@ -import {Array} from "./array"; -import {BooleanData} from "./boolean"; -import {Dictionary} from "./dictionary"; -import {Null} from "./null"; -import {NumberData} from "./number"; -import {StringData} from "./string"; +import {Array} from "./array.js"; +import {BooleanData} from "./boolean.js"; +import {Dictionary} from "./dictionary.js"; +import {Null} from "./null.js"; +import {NumberData} from "./number.js"; +import {StringData} from "./string.js"; /** * Replacer can be passed to JSON.stringify to convert an ExpressionData object into plain JSON diff --git a/expressions/src/data/reviver.test.ts b/expressions/src/data/reviver.test.ts index b69152dc..e95aacb0 100644 --- a/expressions/src/data/reviver.test.ts +++ b/expressions/src/data/reviver.test.ts @@ -1,11 +1,11 @@ -import {Array} from "./array"; -import {BooleanData} from "./boolean"; -import {Dictionary} from "./dictionary"; -import {ExpressionData} from "./expressiondata"; -import {Null} from "./null"; -import {NumberData} from "./number"; -import {reviver} from "./reviver"; -import {StringData} from "./string"; +import {Array} from "./array.js"; +import {BooleanData} from "./boolean.js"; +import {Dictionary} from "./dictionary.js"; +import {ExpressionData} from "./expressiondata.js"; +import {Null} from "./null.js"; +import {NumberData} from "./number.js"; +import {reviver} from "./reviver.js"; +import {StringData} from "./string.js"; describe("reviver", () => { const tests: { diff --git a/expressions/src/data/reviver.ts b/expressions/src/data/reviver.ts index 3838e2a6..79b8d43f 100644 --- a/expressions/src/data/reviver.ts +++ b/expressions/src/data/reviver.ts @@ -1,10 +1,10 @@ -import {Array as dArray} from "./array"; -import {BooleanData} from "./boolean"; -import {Dictionary} from "./dictionary"; -import {ExpressionData} from "./expressiondata"; -import {Null} from "./null"; -import {NumberData} from "./number"; -import {StringData} from "./string"; +import {Array as dArray} from "./array.js"; +import {BooleanData} from "./boolean.js"; +import {Dictionary} from "./dictionary.js"; +import {ExpressionData} from "./expressiondata.js"; +import {Null} from "./null.js"; +import {NumberData} from "./number.js"; +import {StringData} from "./string.js"; /** * Reviver can be passed to `JSON.parse` to convert plain JSON into an `ExpressionData` object. diff --git a/expressions/src/data/string.ts b/expressions/src/data/string.ts index 7dd6457b..8b9d2875 100644 --- a/expressions/src/data/string.ts +++ b/expressions/src/data/string.ts @@ -1,4 +1,4 @@ -import {ExpressionDataInterface, Kind} from "./expressiondata"; +import {ExpressionDataInterface, Kind} from "./expressiondata.js"; export class StringData implements ExpressionDataInterface { constructor(public readonly value: string) {} diff --git a/expressions/src/errors.ts b/expressions/src/errors.ts index 72202a96..967113fa 100644 --- a/expressions/src/errors.ts +++ b/expressions/src/errors.ts @@ -1,4 +1,4 @@ -import {Pos, Token, tokenString} from "./lexer"; +import {Pos, Token, tokenString} from "./lexer.js"; export const MAX_PARSER_DEPTH = 50; export const MAX_EXPRESSION_LENGTH = 21000; diff --git a/expressions/src/evaluator.test.ts b/expressions/src/evaluator.test.ts index e1fa8fd0..ecc75da7 100644 --- a/expressions/src/evaluator.test.ts +++ b/expressions/src/evaluator.test.ts @@ -1,8 +1,8 @@ -import * as data from "./data"; -import {ExpressionEvaluationError} from "./errors"; -import {Evaluator} from "./evaluator"; -import {Lexer} from "./lexer"; -import {Parser} from "./parser"; +import * as data from "./data/index.js"; +import {ExpressionEvaluationError} from "./errors.js"; +import {Evaluator} from "./evaluator.js"; +import {Lexer} from "./lexer.js"; +import {Parser} from "./parser.js"; describe("evaluator", () => { const lexAndParse = (input: string) => { diff --git a/expressions/src/evaluator.ts b/expressions/src/evaluator.ts index 2b4cea4b..61d3d542 100644 --- a/expressions/src/evaluator.ts +++ b/expressions/src/evaluator.ts @@ -10,14 +10,14 @@ import { Logical, Star, Unary -} from "./ast"; -import * as data from "./data"; -import {FilteredArray} from "./filtered_array"; -import {wellKnownFunctions} from "./funcs"; -import {FunctionDefinition} from "./funcs/info"; -import {idxHelper} from "./idxHelper"; -import {TokenType} from "./lexer"; -import {equals, falsy, greaterThan, lessThan, truthy} from "./result"; +} from "./ast.js"; +import * as data from "./data/index.js"; +import {FilteredArray} from "./filtered_array.js"; +import {wellKnownFunctions} from "./funcs.js"; +import {FunctionDefinition} from "./funcs/info.js"; +import {idxHelper} from "./idxHelper.js"; +import {TokenType} from "./lexer.js"; +import {equals, falsy, greaterThan, lessThan, truthy} from "./result.js"; export class Evaluator implements ExprVisitor { /** diff --git a/expressions/src/filtered_array.ts b/expressions/src/filtered_array.ts index 1d03376a..2f5c055b 100644 --- a/expressions/src/filtered_array.ts +++ b/expressions/src/filtered_array.ts @@ -1,3 +1,3 @@ -import * as data from "./data"; +import * as data from "./data/index.js"; export class FilteredArray extends data.Array {} diff --git a/expressions/src/funcs.ts b/expressions/src/funcs.ts index 082baf1f..1adad75f 100644 --- a/expressions/src/funcs.ts +++ b/expressions/src/funcs.ts @@ -1,13 +1,13 @@ -import {ErrorType, ExpressionError} from "./errors"; -import {contains} from "./funcs/contains"; -import {endswith} from "./funcs/endswith"; -import {format} from "./funcs/format"; -import {fromjson} from "./funcs/fromjson"; -import {FunctionDefinition, FunctionInfo} from "./funcs/info"; -import {join} from "./funcs/join"; -import {startswith} from "./funcs/startswith"; -import {tojson} from "./funcs/tojson"; -import {Token} from "./lexer"; +import {ErrorType, ExpressionError} from "./errors.js"; +import {contains} from "./funcs/contains.js"; +import {endswith} from "./funcs/endswith.js"; +import {format} from "./funcs/format.js"; +import {fromjson} from "./funcs/fromjson.js"; +import {FunctionDefinition, FunctionInfo} from "./funcs/info.js"; +import {join} from "./funcs/join.js"; +import {startswith} from "./funcs/startswith.js"; +import {tojson} from "./funcs/tojson.js"; +import {Token} from "./lexer.js"; export type ParseContext = { allowUnknownKeywords: boolean; diff --git a/expressions/src/funcs/contains.ts b/expressions/src/funcs/contains.ts index e21f44de..8bdf3ce6 100644 --- a/expressions/src/funcs/contains.ts +++ b/expressions/src/funcs/contains.ts @@ -1,6 +1,6 @@ -import {BooleanData, ExpressionData, Kind} from "../data"; -import {equals} from "../result"; -import {FunctionDefinition} from "./info"; +import {BooleanData, ExpressionData, Kind} from "../data/index.js"; +import {equals} from "../result.js"; +import {FunctionDefinition} from "./info.js"; export const contains: FunctionDefinition = { name: "contains", diff --git a/expressions/src/funcs/endswith.ts b/expressions/src/funcs/endswith.ts index 21c095ad..429c06dc 100644 --- a/expressions/src/funcs/endswith.ts +++ b/expressions/src/funcs/endswith.ts @@ -1,6 +1,6 @@ -import {BooleanData, ExpressionData} from "../data"; -import {toUpperSpecial} from "../result"; -import {FunctionDefinition} from "./info"; +import {BooleanData, ExpressionData} from "../data/index.js"; +import {toUpperSpecial} from "../result.js"; +import {FunctionDefinition} from "./info.js"; export const endswith: FunctionDefinition = { name: "endsWith", diff --git a/expressions/src/funcs/format.test.ts b/expressions/src/funcs/format.test.ts index d24d3fc5..97de492c 100644 --- a/expressions/src/funcs/format.test.ts +++ b/expressions/src/funcs/format.test.ts @@ -1,5 +1,5 @@ -import {Null, NumberData, StringData} from "../data"; -import {format} from "./format"; +import {Null, NumberData, StringData} from "../data/index.js"; +import {format} from "./format.js"; describe("format", () => { it("null", () => { diff --git a/expressions/src/funcs/format.ts b/expressions/src/funcs/format.ts index 93bfa5cc..8c94c566 100644 --- a/expressions/src/funcs/format.ts +++ b/expressions/src/funcs/format.ts @@ -1,5 +1,5 @@ -import {ExpressionData, StringData} from "../data"; -import {FunctionDefinition} from "./info"; +import {ExpressionData, StringData} from "../data/index.js"; +import {FunctionDefinition} from "./info.js"; export const format: FunctionDefinition = { name: "format", diff --git a/expressions/src/funcs/fromjson.ts b/expressions/src/funcs/fromjson.ts index 5eca0092..3e426ae8 100644 --- a/expressions/src/funcs/fromjson.ts +++ b/expressions/src/funcs/fromjson.ts @@ -1,7 +1,7 @@ -import {ExpressionData} from "../data"; -import {reviver} from "../data/reviver"; -import {ExpressionEvaluationError} from "../errors"; -import {FunctionDefinition} from "./info"; +import {ExpressionData} from "../data/index.js"; +import {reviver} from "../data/reviver.js"; +import {ExpressionEvaluationError} from "../errors.js"; +import {FunctionDefinition} from "./info.js"; export const fromjson: FunctionDefinition = { name: "fromJson", diff --git a/expressions/src/funcs/info.ts b/expressions/src/funcs/info.ts index b77efbe2..12c2c560 100644 --- a/expressions/src/funcs/info.ts +++ b/expressions/src/funcs/info.ts @@ -1,4 +1,4 @@ -import {ExpressionData} from "../data"; +import {ExpressionData} from "../data/index.js"; export interface FunctionInfo { name: string; diff --git a/expressions/src/funcs/join.ts b/expressions/src/funcs/join.ts index 92750aea..55eeb836 100644 --- a/expressions/src/funcs/join.ts +++ b/expressions/src/funcs/join.ts @@ -1,5 +1,5 @@ -import {ExpressionData, Kind, StringData} from "../data"; -import {FunctionDefinition} from "./info"; +import {ExpressionData, Kind, StringData} from "../data/index.js"; +import {FunctionDefinition} from "./info.js"; export const join: FunctionDefinition = { name: "join", diff --git a/expressions/src/funcs/startswith.ts b/expressions/src/funcs/startswith.ts index a45e3b44..b2743d27 100644 --- a/expressions/src/funcs/startswith.ts +++ b/expressions/src/funcs/startswith.ts @@ -1,6 +1,6 @@ -import {BooleanData, ExpressionData} from "../data"; -import {toUpperSpecial} from "../result"; -import {FunctionDefinition} from "./info"; +import {BooleanData, ExpressionData} from "../data/index.js"; +import {toUpperSpecial} from "../result.js"; +import {FunctionDefinition} from "./info.js"; export const startswith: FunctionDefinition = { name: "startsWith", diff --git a/expressions/src/funcs/tojson.ts b/expressions/src/funcs/tojson.ts index f59d52ad..83d68baa 100644 --- a/expressions/src/funcs/tojson.ts +++ b/expressions/src/funcs/tojson.ts @@ -1,6 +1,6 @@ -import {ExpressionData, StringData} from "../data"; -import {replacer} from "../data/replacer"; -import {FunctionDefinition} from "./info"; +import {ExpressionData, StringData} from "../data/index.js"; +import {replacer} from "../data/replacer.js"; +import {FunctionDefinition} from "./info.js"; export const tojson: FunctionDefinition = { name: "toJson", diff --git a/expressions/src/idxHelper.ts b/expressions/src/idxHelper.ts index e79e73f7..1346bfd3 100644 --- a/expressions/src/idxHelper.ts +++ b/expressions/src/idxHelper.ts @@ -1,4 +1,4 @@ -import {ExpressionData} from "./data"; +import {ExpressionData} from "./data/index.js"; export class idxHelper { public readonly str: string | undefined; diff --git a/expressions/src/index.ts b/expressions/src/index.ts index 72e53c3b..effcbf48 100644 --- a/expressions/src/index.ts +++ b/expressions/src/index.ts @@ -1,9 +1,9 @@ -export {Expr} from "./ast"; -export {complete, CompletionItem} from "./completion"; -export {DescriptionDictionary, DescriptionPair, isDescriptionDictionary} from "./completion/descriptionDictionary"; -export * as data from "./data"; -export {ExpressionError, ExpressionEvaluationError} from "./errors"; -export {Evaluator} from "./evaluator"; -export {wellKnownFunctions} from "./funcs"; -export {Lexer, Result} from "./lexer"; -export {Parser} from "./parser"; +export {Expr} from "./ast.js"; +export {complete, CompletionItem} from "./completion.js"; +export {DescriptionDictionary, DescriptionPair, isDescriptionDictionary} from "./completion/descriptionDictionary.js"; +export * as data from "./data/index.js"; +export {ExpressionError, ExpressionEvaluationError} from "./errors.js"; +export {Evaluator} from "./evaluator.js"; +export {wellKnownFunctions} from "./funcs.js"; +export {Lexer, Result} from "./lexer.js"; +export {Parser} from "./parser.js"; diff --git a/expressions/src/lexer.test.ts b/expressions/src/lexer.test.ts index 31455342..7a616211 100644 --- a/expressions/src/lexer.test.ts +++ b/expressions/src/lexer.test.ts @@ -1,4 +1,4 @@ -import {Lexer, Token, TokenType} from "./lexer"; +import {Lexer, Token, TokenType} from "./lexer.js"; describe("lexer", () => { const tests: { diff --git a/expressions/src/lexer.ts b/expressions/src/lexer.ts index b9fd59bb..416b7f69 100644 --- a/expressions/src/lexer.ts +++ b/expressions/src/lexer.ts @@ -1,5 +1,5 @@ -import {StringData} from "./data"; -import {MAX_EXPRESSION_LENGTH} from "./errors"; +import {StringData} from "./data/index.js"; +import {MAX_EXPRESSION_LENGTH} from "./errors.js"; export enum TokenType { UNKNOWN, diff --git a/expressions/src/parser.ts b/expressions/src/parser.ts index 6dbb5a25..965af74f 100644 --- a/expressions/src/parser.ts +++ b/expressions/src/parser.ts @@ -1,9 +1,20 @@ -import {Binary, ContextAccess, Expr, FunctionCall, Grouping, IndexAccess, Literal, Logical, Star, Unary} from "./ast"; -import * as data from "./data"; -import {ErrorType, ExpressionError, MAX_PARSER_DEPTH} from "./errors"; -import {ParseContext, validateFunction} from "./funcs"; -import {FunctionInfo} from "./funcs/info"; -import {Token, TokenType} from "./lexer"; +import { + Binary, + ContextAccess, + Expr, + FunctionCall, + Grouping, + IndexAccess, + Literal, + Logical, + Star, + Unary +} from "./ast.js"; +import * as data from "./data/index.js"; +import {ErrorType, ExpressionError, MAX_PARSER_DEPTH} from "./errors.js"; +import {ParseContext, validateFunction} from "./funcs.js"; +import {FunctionInfo} from "./funcs/info.js"; +import {Token, TokenType} from "./lexer.js"; export class Parser { private extContexts: Map; diff --git a/expressions/src/result.test.ts b/expressions/src/result.test.ts index 8c33eedf..b21a7da2 100644 --- a/expressions/src/result.test.ts +++ b/expressions/src/result.test.ts @@ -1,5 +1,5 @@ -import {BooleanData, ExpressionData, NumberData, StringData} from "./data"; -import {coerceTypes, toUpperSpecial} from "./result"; +import {BooleanData, ExpressionData, NumberData, StringData} from "./data/index.js"; +import {coerceTypes, toUpperSpecial} from "./result.js"; describe("coerceTypes", () => { const tests: { diff --git a/expressions/src/result.ts b/expressions/src/result.ts index 64b461ee..262007d2 100644 --- a/expressions/src/result.ts +++ b/expressions/src/result.ts @@ -1,4 +1,4 @@ -import * as data from "./data"; +import * as data from "./data/index.js"; export function falsy(d: data.ExpressionData): boolean { switch (d.kind) { diff --git a/expressions/src/xlang.test.ts b/expressions/src/xlang.test.ts index a7d36be1..2aac5f5d 100644 --- a/expressions/src/xlang.test.ts +++ b/expressions/src/xlang.test.ts @@ -1,14 +1,14 @@ import * as fs from "fs"; import * as path from "path"; -import {Expr} from "./ast"; -import * as data from "./data"; -import {kindStr} from "./data/expressiondata"; -import {replacer} from "./data/replacer"; -import {reviver} from "./data/reviver"; -import {ExpressionError} from "./errors"; -import {Evaluator} from "./evaluator"; -import {Lexer, Result} from "./lexer"; -import {Parser} from "./parser"; +import {Expr} from "./ast.js"; +import * as data from "./data/index.js"; +import {kindStr} from "./data/expressiondata.js"; +import {replacer} from "./data/replacer.js"; +import {reviver} from "./data/reviver.js"; +import {ExpressionError} from "./errors.js"; +import {Evaluator} from "./evaluator.js"; +import {Lexer, Result} from "./lexer.js"; +import {Parser} from "./parser.js"; interface TestResult { value: data.ExpressionData; diff --git a/expressions/tsconfig.build.json b/expressions/tsconfig.build.json index 88bdfa83..7ed02690 100644 --- a/expressions/tsconfig.build.json +++ b/expressions/tsconfig.build.json @@ -2,9 +2,12 @@ "exclude": ["./src/**/*.test.ts"], "extends": "./tsconfig.json", "compilerOptions": { + "module": "node16", + "moduleResolution": "node16", "declaration": true, "declarationMap": true, "noEmit": false, - "outDir": "./dist" + "outDir": "./dist", + "skipLibCheck": true } } diff --git a/languageservice/src/action.test.ts b/languageservice/src/action.test.ts index f06de9b2..4c3c6552 100644 --- a/languageservice/src/action.test.ts +++ b/languageservice/src/action.test.ts @@ -1,4 +1,4 @@ -import {actionIdentifier, parseActionReference as parse} from "./action"; +import {actionIdentifier, parseActionReference as parse} from "./action.js"; describe("parseActionReference", () => { it("basic action", () => { diff --git a/languageservice/src/complete.expressions.test.ts b/languageservice/src/complete.expressions.test.ts index 905d0de3..16ac5a41 100644 --- a/languageservice/src/complete.expressions.test.ts +++ b/languageservice/src/complete.expressions.test.ts @@ -1,13 +1,13 @@ /* eslint-disable @typescript-eslint/no-non-null-assertion */ import {data, DescriptionDictionary} from "@actions/expressions"; import {CompletionItem, CompletionItemKind} from "vscode-languageserver-types"; -import {complete, getExpressionInput} from "./complete"; -import {ContextProviderConfig} from "./context-providers/config"; -import {registerLogger} from "./log"; -import {getPositionFromCursor} from "./test-utils/cursor-position"; -import {TestLogger} from "./test-utils/logger"; -import {testFileProvider} from "./test-utils/test-file-provider"; -import {clearCache} from "./utils/workflow-cache"; +import {complete, getExpressionInput} from "./complete.js"; +import {ContextProviderConfig} from "./context-providers/config.js"; +import {registerLogger} from "./log.js"; +import {getPositionFromCursor} from "./test-utils/cursor-position.js"; +import {TestLogger} from "./test-utils/logger.js"; +import {testFileProvider} from "./test-utils/test-file-provider.js"; +import {clearCache} from "./utils/workflow-cache.js"; const contextProviderConfig: ContextProviderConfig = { getContext: (context: string) => { diff --git a/languageservice/src/complete.multiline-if.test.ts b/languageservice/src/complete.multiline-if.test.ts index 45944b39..a48bd9fb 100644 --- a/languageservice/src/complete.multiline-if.test.ts +++ b/languageservice/src/complete.multiline-if.test.ts @@ -1,7 +1,7 @@ -import {complete} from "./complete"; +import {complete} from "./complete.js"; import {TextDocument} from "vscode-languageserver-textdocument"; -import {clearCache} from "./utils/workflow-cache"; -import {getPositionFromCursor} from "./test-utils/cursor-position"; +import {clearCache} from "./utils/workflow-cache.js"; +import {getPositionFromCursor} from "./test-utils/cursor-position.js"; beforeEach(() => { clearCache(); diff --git a/languageservice/src/complete.reusable-workflows.test.ts b/languageservice/src/complete.reusable-workflows.test.ts index 3fde8c0b..93676006 100644 --- a/languageservice/src/complete.reusable-workflows.test.ts +++ b/languageservice/src/complete.reusable-workflows.test.ts @@ -1,8 +1,8 @@ import {CompletionItem, MarkupContent} from "vscode-languageserver-types"; -import {complete} from "./complete"; -import {getPositionFromCursor} from "./test-utils/cursor-position"; -import {testFileProvider} from "./test-utils/test-file-provider"; -import {clearCache} from "./utils/workflow-cache"; +import {complete} from "./complete.js"; +import {getPositionFromCursor} from "./test-utils/cursor-position.js"; +import {testFileProvider} from "./test-utils/test-file-provider.js"; +import {clearCache} from "./utils/workflow-cache.js"; function mapResult(result: CompletionItem[]) { return result.map(x => { diff --git a/languageservice/src/complete.test.ts b/languageservice/src/complete.test.ts index cf450955..5d56f034 100644 --- a/languageservice/src/complete.test.ts +++ b/languageservice/src/complete.test.ts @@ -1,11 +1,11 @@ /* eslint-disable @typescript-eslint/no-non-null-assertion */ import {MarkupContent, TextEdit} from "vscode-languageserver-types"; -import {complete} from "./complete"; -import {registerLogger} from "./log"; -import {getPositionFromCursor} from "./test-utils/cursor-position"; -import {TestLogger} from "./test-utils/logger"; -import {clearCache} from "./utils/workflow-cache"; -import {ValueProviderConfig, ValueProviderKind} from "./value-providers/config"; +import {complete} from "./complete.js"; +import {registerLogger} from "./log.js"; +import {getPositionFromCursor} from "./test-utils/cursor-position.js"; +import {TestLogger} from "./test-utils/logger.js"; +import {clearCache} from "./utils/workflow-cache.js"; +import {ValueProviderConfig, ValueProviderKind} from "./value-providers/config.js"; registerLogger(new TestLogger()); diff --git a/languageservice/src/complete.ts b/languageservice/src/complete.ts index 1b636a6b..e54bc0b1 100644 --- a/languageservice/src/complete.ts +++ b/languageservice/src/complete.ts @@ -11,20 +11,20 @@ import {File} from "@actions/workflow-parser/workflows/file"; import {FileProvider} from "@actions/workflow-parser/workflows/file-provider"; import {Position, TextDocument} from "vscode-languageserver-textdocument"; import {CompletionItem, CompletionItemKind, CompletionItemTag, Range, TextEdit} from "vscode-languageserver-types"; -import {ContextProviderConfig} from "./context-providers/config"; -import {getContext, Mode} from "./context-providers/default"; -import {getWorkflowContext, WorkflowContext} from "./context/workflow-context"; -import {validatorFunctions} from "./expression-validation/functions"; -import {error} from "./log"; -import {isPotentiallyExpression} from "./utils/expression-detection"; -import {findToken} from "./utils/find-token"; -import {guessIndentation} from "./utils/indentation-guesser"; -import {mapRange} from "./utils/range"; -import {isPlaceholder, transform} from "./utils/transform"; -import {fetchOrConvertWorkflowTemplate, fetchOrParseWorkflow} from "./utils/workflow-cache"; -import {Value, ValueProviderConfig} from "./value-providers/config"; -import {defaultValueProviders} from "./value-providers/default"; -import {DefinitionValueMode, definitionValues} from "./value-providers/definition"; +import {ContextProviderConfig} from "./context-providers/config.js"; +import {getContext, Mode} from "./context-providers/default.js"; +import {getWorkflowContext, WorkflowContext} from "./context/workflow-context.js"; +import {validatorFunctions} from "./expression-validation/functions.js"; +import {error} from "./log.js"; +import {isPotentiallyExpression} from "./utils/expression-detection.js"; +import {findToken} from "./utils/find-token.js"; +import {guessIndentation} from "./utils/indentation-guesser.js"; +import {mapRange} from "./utils/range.js"; +import {isPlaceholder, transform} from "./utils/transform.js"; +import {fetchOrConvertWorkflowTemplate, fetchOrParseWorkflow} from "./utils/workflow-cache.js"; +import {Value, ValueProviderConfig} from "./value-providers/config.js"; +import {defaultValueProviders} from "./value-providers/default.js"; +import {DefinitionValueMode, definitionValues} from "./value-providers/definition.js"; export function getExpressionInput(input: string, pos: number): string { // Find start marker around the cursor position diff --git a/languageservice/src/context-providers/config.ts b/languageservice/src/context-providers/config.ts index 5633af7a..b7b721e7 100644 --- a/languageservice/src/context-providers/config.ts +++ b/languageservice/src/context-providers/config.ts @@ -1,6 +1,6 @@ import {DescriptionDictionary} from "@actions/expressions"; -import {WorkflowContext} from "../context/workflow-context"; -import {Mode} from "./default"; +import {WorkflowContext} from "../context/workflow-context.js"; +import {Mode} from "./default.js"; export type ContextProviderConfig = { getContext: ( diff --git a/languageservice/src/context-providers/default.test.ts b/languageservice/src/context-providers/default.test.ts index 7557837a..472724b6 100644 --- a/languageservice/src/context-providers/default.test.ts +++ b/languageservice/src/context-providers/default.test.ts @@ -1,6 +1,6 @@ import {DescriptionDictionary} from "@actions/expressions"; -import {WorkflowContext} from "../context/workflow-context"; -import {getContext, Mode} from "./default"; +import {WorkflowContext} from "../context/workflow-context.js"; +import {getContext, Mode} from "./default.js"; describe("getContext", () => { const emptyWorkflowContext: WorkflowContext = { diff --git a/languageservice/src/context-providers/default.ts b/languageservice/src/context-providers/default.ts index 1141b226..03f74e35 100644 --- a/languageservice/src/context-providers/default.ts +++ b/languageservice/src/context-providers/default.ts @@ -1,18 +1,18 @@ import {data, DescriptionDictionary} from "@actions/expressions"; import {Kind} from "@actions/expressions/data/expressiondata"; -import {WorkflowContext} from "../context/workflow-context"; -import {ContextProviderConfig} from "./config"; -import {getDescription, RootContext} from "./descriptions"; -import {getEnvContext} from "./env"; -import {getGithubContext} from "./github"; -import {getInputsContext} from "./inputs"; -import {getJobContext} from "./job"; -import {getJobsContext} from "./jobs"; -import {getMatrixContext} from "./matrix"; -import {getNeedsContext} from "./needs"; -import {getSecretsContext} from "./secrets"; -import {getStepsContext} from "./steps"; -import {getStrategyContext} from "./strategy"; +import {WorkflowContext} from "../context/workflow-context.js"; +import {ContextProviderConfig} from "./config.js"; +import {getDescription, RootContext} from "./descriptions.js"; +import {getEnvContext} from "./env.js"; +import {getGithubContext} from "./github.js"; +import {getInputsContext} from "./inputs.js"; +import {getJobContext} from "./job.js"; +import {getJobsContext} from "./jobs.js"; +import {getMatrixContext} from "./matrix.js"; +import {getNeedsContext} from "./needs.js"; +import {getSecretsContext} from "./secrets.js"; +import {getStepsContext} from "./steps.js"; +import {getStrategyContext} from "./strategy.js"; // ContextValue is the type of the value returned by a context provider // Null indicates that the context provider doesn't have any value to provide diff --git a/languageservice/src/context-providers/env.ts b/languageservice/src/context-providers/env.ts index 89bae002..f1e3a0d8 100644 --- a/languageservice/src/context-providers/env.ts +++ b/languageservice/src/context-providers/env.ts @@ -1,7 +1,7 @@ import {data, DescriptionDictionary} from "@actions/expressions"; import {isScalar, isString} from "@actions/workflow-parser"; import {MappingToken} from "@actions/workflow-parser/templates/tokens/mapping-token"; -import {WorkflowContext} from "../context/workflow-context"; +import {WorkflowContext} from "../context/workflow-context.js"; export function getEnvContext(workflowContext: WorkflowContext): DescriptionDictionary { const d = new DescriptionDictionary(); diff --git a/languageservice/src/context-providers/events/eventPayloads.test.ts b/languageservice/src/context-providers/events/eventPayloads.test.ts index f9605ec5..d6a62654 100644 --- a/languageservice/src/context-providers/events/eventPayloads.test.ts +++ b/languageservice/src/context-providers/events/eventPayloads.test.ts @@ -1,5 +1,5 @@ import {DescriptionDictionary} from "@actions/expressions"; -import {getEventPayload, getSupportedEventTypes} from "./eventPayloads"; +import {getEventPayload, getSupportedEventTypes} from "./eventPayloads.js"; describe("eventPayloads", () => { describe("getSupportedEventTypes", () => { diff --git a/languageservice/src/context-providers/github.test.ts b/languageservice/src/context-providers/github.test.ts index dd5acf79..5580563f 100644 --- a/languageservice/src/context-providers/github.test.ts +++ b/languageservice/src/context-providers/github.test.ts @@ -1,7 +1,7 @@ -import {DescriptionDictionary, isDescriptionDictionary} from "@actions/expressions/."; -import {testGetWorkflowContext} from "../test-utils/test-workflow-context"; -import {Mode} from "./default"; -import {getGithubContext} from "./github"; +import {DescriptionDictionary, isDescriptionDictionary} from "@actions/expressions"; +import {testGetWorkflowContext} from "../test-utils/test-workflow-context.js"; +import {Mode} from "./default.js"; +import {getGithubContext} from "./github.js"; describe("github context", () => { it("single event", async () => { diff --git a/languageservice/src/context-providers/github.ts b/languageservice/src/context-providers/github.ts index c9e8367c..261e07b9 100644 --- a/languageservice/src/context-providers/github.ts +++ b/languageservice/src/context-providers/github.ts @@ -1,11 +1,11 @@ import {data, DescriptionDictionary, isDescriptionDictionary} from "@actions/expressions"; import {ExpressionData} from "@actions/expressions/data/expressiondata"; import {TypesFilterConfig} from "@actions/workflow-parser/model/workflow-template"; -import {WorkflowContext} from "../context/workflow-context"; -import {Mode} from "./default"; -import {getDescription} from "./descriptions"; -import {getEventPayload, getSupportedEventTypes} from "./events/eventPayloads"; -import {getInputsContext} from "./inputs"; +import {WorkflowContext} from "../context/workflow-context.js"; +import {Mode} from "./default.js"; +import {getDescription} from "./descriptions.js"; +import {getEventPayload, getSupportedEventTypes} from "./events/eventPayloads.js"; +import {getInputsContext} from "./inputs.js"; export function getGithubContext(workflowContext: WorkflowContext, mode: Mode): DescriptionDictionary { // https://docs.github.com/en/actions/learn-github-actions/contexts#github-context diff --git a/languageservice/src/context-providers/inputs.ts b/languageservice/src/context-providers/inputs.ts index 1a71a7d5..d1256db0 100644 --- a/languageservice/src/context-providers/inputs.ts +++ b/languageservice/src/context-providers/inputs.ts @@ -1,6 +1,6 @@ import {data, DescriptionDictionary} from "@actions/expressions"; import {InputConfig} from "@actions/workflow-parser/model/workflow-template"; -import {WorkflowContext} from "../context/workflow-context"; +import {WorkflowContext} from "../context/workflow-context.js"; export function getInputsContext(workflowContext: WorkflowContext): DescriptionDictionary { const d = new DescriptionDictionary(); diff --git a/languageservice/src/context-providers/job.ts b/languageservice/src/context-providers/job.ts index b67338a5..ac6ce212 100644 --- a/languageservice/src/context-providers/job.ts +++ b/languageservice/src/context-providers/job.ts @@ -1,7 +1,7 @@ import {data, DescriptionDictionary} from "@actions/expressions"; import {isMapping, isSequence} from "@actions/workflow-parser"; import {MappingToken} from "@actions/workflow-parser/templates/tokens/mapping-token"; -import {WorkflowContext} from "../context/workflow-context"; +import {WorkflowContext} from "../context/workflow-context.js"; export function getJobContext(workflowContext: WorkflowContext): DescriptionDictionary { // https://docs.github.com/en/actions/learn-github-actions/contexts#job-context diff --git a/languageservice/src/context-providers/jobs.ts b/languageservice/src/context-providers/jobs.ts index d8ad9565..10dabdea 100644 --- a/languageservice/src/context-providers/jobs.ts +++ b/languageservice/src/context-providers/jobs.ts @@ -1,8 +1,8 @@ import {data, DescriptionDictionary} from "@actions/expressions"; import {StringData} from "@actions/expressions/data/string"; import {MappingToken} from "@actions/workflow-parser/templates/tokens/mapping-token"; -import {WorkflowContext} from "../context/workflow-context"; -import {getDescription} from "./descriptions"; +import {WorkflowContext} from "../context/workflow-context.js"; +import {getDescription} from "./descriptions.js"; export function getJobsContext(workflowContext: WorkflowContext): DescriptionDictionary { // https://docs.github.com/en/actions/learn-github-actions/contexts#jobs-context diff --git a/languageservice/src/context-providers/matrix.test.ts b/languageservice/src/context-providers/matrix.test.ts index 03c0a564..73a61fab 100644 --- a/languageservice/src/context-providers/matrix.test.ts +++ b/languageservice/src/context-providers/matrix.test.ts @@ -6,9 +6,9 @@ import {MappingToken} from "@actions/workflow-parser/templates/tokens/mapping-to import {SequenceToken} from "@actions/workflow-parser/templates/tokens/sequence-token"; import {StringToken} from "@actions/workflow-parser/templates/tokens/string-token"; import {TemplateToken} from "@actions/workflow-parser/templates/tokens/template-token"; -import {WorkflowContext} from "../context/workflow-context"; -import {Mode} from "./default"; -import {getMatrixContext} from "./matrix"; +import {WorkflowContext} from "../context/workflow-context.js"; +import {Mode} from "./default.js"; +import {getMatrixContext} from "./matrix.js"; type MatrixMap = { [key: string]: Array | Array<{[key: string]: string}>; diff --git a/languageservice/src/context-providers/matrix.ts b/languageservice/src/context-providers/matrix.ts index 9906d4ce..9cd11395 100644 --- a/languageservice/src/context-providers/matrix.ts +++ b/languageservice/src/context-providers/matrix.ts @@ -3,8 +3,8 @@ import {isBasicExpression, isMapping, isSequence, isString} from "@actions/workf import {KeyValuePair} from "@actions/workflow-parser/templates/tokens/key-value-pair"; import {MappingToken} from "@actions/workflow-parser/templates/tokens/mapping-token"; import {SequenceToken} from "@actions/workflow-parser/templates/tokens/sequence-token"; -import {WorkflowContext} from "../context/workflow-context"; -import {ContextValue, Mode} from "./default"; +import {WorkflowContext} from "../context/workflow-context.js"; +import {ContextValue, Mode} from "./default.js"; export function getMatrixContext(workflowContext: WorkflowContext, mode: Mode): ContextValue { // https://docs.github.com/en/actions/learn-github-actions/contexts#matrix-context diff --git a/languageservice/src/context-providers/needs.test.ts b/languageservice/src/context-providers/needs.test.ts index 8cad20ae..a846db1a 100644 --- a/languageservice/src/context-providers/needs.test.ts +++ b/languageservice/src/context-providers/needs.test.ts @@ -1,8 +1,8 @@ import {DescriptionDictionary} from "@actions/expressions"; import {StringData} from "@actions/expressions/data/string"; -import {WorkflowContext} from "../context/workflow-context"; -import {testGetWorkflowContext} from "../test-utils/test-workflow-context"; -import {getNeedsContext} from "./needs"; +import {WorkflowContext} from "../context/workflow-context.js"; +import {testGetWorkflowContext} from "../test-utils/test-workflow-context.js"; +import {getNeedsContext} from "./needs.js"; describe("needs context", () => { describe("invalid workflow context", () => { diff --git a/languageservice/src/context-providers/needs.ts b/languageservice/src/context-providers/needs.ts index 95026639..cd2f447e 100644 --- a/languageservice/src/context-providers/needs.ts +++ b/languageservice/src/context-providers/needs.ts @@ -3,7 +3,7 @@ import {isMapping, isScalar, isString} from "@actions/workflow-parser"; import {isJob} from "@actions/workflow-parser/model/type-guards"; import {WorkflowJob} from "@actions/workflow-parser/model/workflow-template"; import {TemplateToken} from "@actions/workflow-parser/templates/tokens/template-token"; -import {WorkflowContext} from "../context/workflow-context"; +import {WorkflowContext} from "../context/workflow-context.js"; export function getNeedsContext(workflowContext: WorkflowContext): DescriptionDictionary { const d = new DescriptionDictionary(); diff --git a/languageservice/src/context-providers/secrets.ts b/languageservice/src/context-providers/secrets.ts index b0eae116..4f493777 100644 --- a/languageservice/src/context-providers/secrets.ts +++ b/languageservice/src/context-providers/secrets.ts @@ -1,8 +1,8 @@ import {data, DescriptionDictionary} from "@actions/expressions"; import {StringData} from "@actions/expressions/data/string"; -import {WorkflowContext} from "../context/workflow-context"; -import {Mode} from "./default"; -import {getDescription} from "./descriptions"; +import {WorkflowContext} from "../context/workflow-context.js"; +import {Mode} from "./default.js"; +import {getDescription} from "./descriptions.js"; export function getSecretsContext(workflowContext: WorkflowContext, mode: Mode): DescriptionDictionary { const d = new DescriptionDictionary({ diff --git a/languageservice/src/context-providers/steps.test.ts b/languageservice/src/context-providers/steps.test.ts index ad0795f4..4c9c688b 100644 --- a/languageservice/src/context-providers/steps.test.ts +++ b/languageservice/src/context-providers/steps.test.ts @@ -1,7 +1,7 @@ /* eslint-disable @typescript-eslint/no-non-null-assertion */ import {DescriptionDictionary, isDescriptionDictionary} from "@actions/expressions"; -import {WorkflowContext} from "../context/workflow-context"; -import {getStepsContext} from "./steps"; +import {WorkflowContext} from "../context/workflow-context.js"; +import {getStepsContext} from "./steps.js"; function createWorkflowContext(stepIds: string[], currentStepId?: string): WorkflowContext { return { diff --git a/languageservice/src/context-providers/steps.ts b/languageservice/src/context-providers/steps.ts index 8b0fe540..1f93faf4 100644 --- a/languageservice/src/context-providers/steps.ts +++ b/languageservice/src/context-providers/steps.ts @@ -1,7 +1,7 @@ import {data, DescriptionDictionary} from "@actions/expressions"; import {Step} from "@actions/workflow-parser/model/workflow-template"; -import {WorkflowContext} from "../context/workflow-context"; -import {getDescription} from "./descriptions"; +import {WorkflowContext} from "../context/workflow-context.js"; +import {getDescription} from "./descriptions.js"; export function getStepsContext(workflowContext: WorkflowContext): DescriptionDictionary { const d = new DescriptionDictionary(); diff --git a/languageservice/src/context-providers/strategy.test.ts b/languageservice/src/context-providers/strategy.test.ts index f129387a..4efc7f24 100644 --- a/languageservice/src/context-providers/strategy.test.ts +++ b/languageservice/src/context-providers/strategy.test.ts @@ -5,8 +5,8 @@ import {MappingToken} from "@actions/workflow-parser/templates/tokens/mapping-to import {NumberToken} from "@actions/workflow-parser/templates/tokens/number-token"; import {StringToken} from "@actions/workflow-parser/templates/tokens/string-token"; import {TemplateToken} from "@actions/workflow-parser/templates/tokens/template-token"; -import {WorkflowContext} from "../context/workflow-context"; -import {getStrategyContext} from "./strategy"; +import {WorkflowContext} from "../context/workflow-context.js"; +import {getStrategyContext} from "./strategy.js"; function stringToToken(value: string) { return new StringToken(undefined, undefined, value, undefined); diff --git a/languageservice/src/context-providers/strategy.ts b/languageservice/src/context-providers/strategy.ts index e89ae24f..269e84c9 100644 --- a/languageservice/src/context-providers/strategy.ts +++ b/languageservice/src/context-providers/strategy.ts @@ -1,7 +1,7 @@ import {data, DescriptionDictionary} from "@actions/expressions"; import {isMapping, isScalar, isString} from "@actions/workflow-parser"; -import {WorkflowContext} from "../context/workflow-context"; -import {scalarToData} from "../utils/scalar-to-data"; +import {WorkflowContext} from "../context/workflow-context.js"; +import {scalarToData} from "../utils/scalar-to-data.js"; // Default strategy values when no strategy block is defined const DEFAULT_STRATEGY = { diff --git a/languageservice/src/context/workflow-context.test.ts b/languageservice/src/context/workflow-context.test.ts index ad7234f1..2c275c9c 100644 --- a/languageservice/src/context/workflow-context.test.ts +++ b/languageservice/src/context/workflow-context.test.ts @@ -1,5 +1,5 @@ import {ActionStep, RunStep} from "@actions/workflow-parser/model/workflow-template"; -import {testGetWorkflowContext} from "../test-utils/test-workflow-context"; +import {testGetWorkflowContext} from "../test-utils/test-workflow-context.js"; describe("getWorkflowContext", () => { it("context for workflow", async () => { diff --git a/languageservice/src/description-providers/reusable-job-inputs.ts b/languageservice/src/description-providers/reusable-job-inputs.ts index 914e6fd3..f74c084b 100644 --- a/languageservice/src/description-providers/reusable-job-inputs.ts +++ b/languageservice/src/description-providers/reusable-job-inputs.ts @@ -1,7 +1,7 @@ import {isMapping, isString} from "@actions/workflow-parser"; import {DESCRIPTION} from "@actions/workflow-parser/templates/template-constants"; -import {WorkflowContext} from "../context/workflow-context"; -import {TokenResult} from "../utils/find-token"; +import {WorkflowContext} from "../context/workflow-context.js"; +import {TokenResult} from "../utils/find-token.js"; export function isReusableWorkflowJobInput(tokenResult: TokenResult): boolean { return ( diff --git a/languageservice/src/document-links.test.ts b/languageservice/src/document-links.test.ts index 4a41a368..3d5c2feb 100644 --- a/languageservice/src/document-links.test.ts +++ b/languageservice/src/document-links.test.ts @@ -1,6 +1,6 @@ -import {documentLinks} from "./document-links"; -import {createDocument} from "./test-utils/document"; -import {clearCache} from "./utils/workflow-cache"; +import {documentLinks} from "./document-links.js"; +import {createDocument} from "./test-utils/document.js"; +import {clearCache} from "./utils/workflow-cache.js"; beforeEach(() => { clearCache(); diff --git a/languageservice/src/document-links.ts b/languageservice/src/document-links.ts index 93f62b5f..de7a9588 100644 --- a/languageservice/src/document-links.ts +++ b/languageservice/src/document-links.ts @@ -5,9 +5,9 @@ import {parseFileReference} from "@actions/workflow-parser/workflows/file-refere import {TextDocument} from "vscode-languageserver-textdocument"; import {DocumentLink} from "vscode-languageserver-types"; import * as vscodeURI from "vscode-uri"; -import {actionUrl, parseActionReference} from "./action"; -import {mapRange} from "./utils/range"; -import {fetchOrConvertWorkflowTemplate, fetchOrParseWorkflow} from "./utils/workflow-cache"; +import {actionUrl, parseActionReference} from "./action.js"; +import {mapRange} from "./utils/range.js"; +import {fetchOrConvertWorkflowTemplate, fetchOrParseWorkflow} from "./utils/workflow-cache.js"; export async function documentLinks(document: TextDocument, workspace: string | undefined): Promise { const file: File = { diff --git a/languageservice/src/e2e.test.ts b/languageservice/src/e2e.test.ts index cfcc2821..da61cc41 100644 --- a/languageservice/src/e2e.test.ts +++ b/languageservice/src/e2e.test.ts @@ -1,9 +1,9 @@ -import {complete} from "./complete"; -import {hover} from "./hover"; -import {registerLogger} from "./log"; -import {getPositionFromCursor} from "./test-utils/cursor-position"; -import {TestLogger} from "./test-utils/logger"; -import {clearCache} from "./utils/workflow-cache"; +import {complete} from "./complete.js"; +import {hover} from "./hover.js"; +import {registerLogger} from "./log.js"; +import {getPositionFromCursor} from "./test-utils/cursor-position.js"; +import {TestLogger} from "./test-utils/logger.js"; +import {clearCache} from "./utils/workflow-cache.js"; registerLogger(new TestLogger()); diff --git a/languageservice/src/expression-hover/expression-pos.test.ts b/languageservice/src/expression-hover/expression-pos.test.ts index 47e538c4..5aaead6a 100644 --- a/languageservice/src/expression-hover/expression-pos.test.ts +++ b/languageservice/src/expression-hover/expression-pos.test.ts @@ -1,9 +1,9 @@ import {parseWorkflow} from "@actions/workflow-parser"; import {File} from "@actions/workflow-parser/workflows/file"; -import {nullTrace} from "../nulltrace"; -import {getPositionFromCursor} from "../test-utils/cursor-position"; -import {findToken} from "../utils/find-token"; -import {ExpressionPos, mapToExpressionPos} from "./expression-pos"; +import {nullTrace} from "../nulltrace.js"; +import {getPositionFromCursor} from "../test-utils/cursor-position.js"; +import {findToken} from "../utils/find-token.js"; +import {ExpressionPos, mapToExpressionPos} from "./expression-pos.js"; describe("mapToExpressionPos", () => { it("simple expression", () => { diff --git a/languageservice/src/expression-hover/expression-pos.ts b/languageservice/src/expression-hover/expression-pos.ts index 01c01562..f981d98f 100644 --- a/languageservice/src/expression-hover/expression-pos.ts +++ b/languageservice/src/expression-hover/expression-pos.ts @@ -3,8 +3,8 @@ import {ensureStatusFunction} from "@actions/workflow-parser/model/converter/if- import {TemplateToken} from "@actions/workflow-parser/templates/tokens/template-token"; import {isBasicExpression, isString} from "@actions/workflow-parser/templates/tokens/type-guards"; import {Position, Range as LSPRange} from "vscode-languageserver-textdocument"; -import {mapRange} from "../utils/range"; -import {posWithinRange} from "./pos-range"; +import {mapRange} from "../utils/range.js"; +import {posWithinRange} from "./pos-range.js"; export type ExpressionPos = { /** The expression that includes the position */ diff --git a/languageservice/src/expression-hover/visitor.test.ts b/languageservice/src/expression-hover/visitor.test.ts index 1c8a0907..5c48e85d 100644 --- a/languageservice/src/expression-hover/visitor.test.ts +++ b/languageservice/src/expression-hover/visitor.test.ts @@ -2,13 +2,13 @@ import {data, DescriptionDictionary, Lexer, Parser} from "@actions/expressions"; import {convertWorkflowTemplate, parseWorkflow} from "@actions/workflow-parser"; import {ErrorPolicy} from "@actions/workflow-parser/model/convert"; import {File} from "@actions/workflow-parser/workflows/file"; -import {ContextProviderConfig} from "../context-providers/config"; -import {getContext, Mode} from "../context-providers/default"; -import {getWorkflowContext} from "../context/workflow-context"; -import {validatorFunctions} from "../expression-validation/functions"; -import {nullTrace} from "../nulltrace"; -import {getPositionFromCursor} from "../test-utils/cursor-position"; -import {HoverVisitor} from "./visitor"; +import {ContextProviderConfig} from "../context-providers/config.js"; +import {getContext, Mode} from "../context-providers/default.js"; +import {getWorkflowContext} from "../context/workflow-context.js"; +import {validatorFunctions} from "../expression-validation/functions.js"; +import {nullTrace} from "../nulltrace.js"; +import {getPositionFromCursor} from "../test-utils/cursor-position.js"; +import {HoverVisitor} from "./visitor.js"; const contextProviderConfig: ContextProviderConfig = { getContext: (context: string) => { diff --git a/languageservice/src/expression-hover/visitor.ts b/languageservice/src/expression-hover/visitor.ts index a2459ca0..dbc1e7b3 100644 --- a/languageservice/src/expression-hover/visitor.ts +++ b/languageservice/src/expression-hover/visitor.ts @@ -13,7 +13,7 @@ import { } from "@actions/expressions/ast"; import {FunctionDefinition} from "@actions/expressions/funcs/info"; import {Pos, Range} from "@actions/expressions/lexer"; -import {posWithinRange} from "./pos-range"; +import {posWithinRange} from "./pos-range.js"; export type HoverResult = | undefined diff --git a/languageservice/src/expression-validation/evaluator.ts b/languageservice/src/expression-validation/evaluator.ts index 28a7afe9..3fcbc9c1 100644 --- a/languageservice/src/expression-validation/evaluator.ts +++ b/languageservice/src/expression-validation/evaluator.ts @@ -3,7 +3,7 @@ import {Expr, Logical} from "@actions/expressions/ast"; import {ExpressionData} from "@actions/expressions/data/expressiondata"; import {TokenType} from "@actions/expressions/lexer"; import {falsy, truthy} from "@actions/expressions/result"; -import {AccessError} from "./error-dictionary"; +import {AccessError} from "./error-dictionary.js"; export type ValidationError = { message: string; diff --git a/languageservice/src/hover.expressions.test.ts b/languageservice/src/hover.expressions.test.ts index a0b556f3..5b1b8a60 100644 --- a/languageservice/src/hover.expressions.test.ts +++ b/languageservice/src/hover.expressions.test.ts @@ -1,12 +1,12 @@ import {data, DescriptionDictionary} from "@actions/expressions"; import {format} from "@actions/expressions/funcs/format"; import {Hover} from "vscode-languageserver-types"; -import {ContextProviderConfig} from "./context-providers/config"; -import {hover} from "./hover"; -import {registerLogger} from "./log"; -import {getPositionFromCursor} from "./test-utils/cursor-position"; -import {TestLogger} from "./test-utils/logger"; -import {clearCache} from "./utils/workflow-cache"; +import {ContextProviderConfig} from "./context-providers/config.js"; +import {hover} from "./hover.js"; +import {registerLogger} from "./log.js"; +import {getPositionFromCursor} from "./test-utils/cursor-position.js"; +import {TestLogger} from "./test-utils/logger.js"; +import {clearCache} from "./utils/workflow-cache.js"; const contextProviderConfig: ContextProviderConfig = { getContext: (context: string) => { diff --git a/languageservice/src/hover.reusable-workflow.test.ts b/languageservice/src/hover.reusable-workflow.test.ts index d31330d5..7787df0f 100644 --- a/languageservice/src/hover.reusable-workflow.test.ts +++ b/languageservice/src/hover.reusable-workflow.test.ts @@ -1,7 +1,7 @@ -import {hover} from "./hover"; -import {testHoverConfig} from "./hover.test"; -import {getPositionFromCursor} from "./test-utils/cursor-position"; -import {clearCache} from "./utils/workflow-cache"; +import {hover} from "./hover.js"; +import {testHoverConfig} from "./hover.test.js"; +import {getPositionFromCursor} from "./test-utils/cursor-position.js"; +import {clearCache} from "./utils/workflow-cache.js"; beforeEach(() => { clearCache(); diff --git a/languageservice/src/hover.test.ts b/languageservice/src/hover.test.ts index b49ae0d8..ef0908dc 100644 --- a/languageservice/src/hover.test.ts +++ b/languageservice/src/hover.test.ts @@ -1,8 +1,8 @@ import {isString} from "@actions/workflow-parser"; -import {DescriptionProvider, hover, HoverConfig} from "./hover"; -import {getPositionFromCursor} from "./test-utils/cursor-position"; -import {testFileProvider} from "./test-utils/test-file-provider"; -import {clearCache} from "./utils/workflow-cache"; +import {DescriptionProvider, hover, HoverConfig} from "./hover.js"; +import {getPositionFromCursor} from "./test-utils/cursor-position.js"; +import {testFileProvider} from "./test-utils/test-file-provider.js"; +import {clearCache} from "./utils/workflow-cache.js"; export function testHoverConfig(tokenValue: string, tokenKey: string, description?: string) { return { diff --git a/languageservice/src/hover.ts b/languageservice/src/hover.ts index 2102ced6..2699a755 100644 --- a/languageservice/src/hover.ts +++ b/languageservice/src/hover.ts @@ -9,21 +9,21 @@ import {File} from "@actions/workflow-parser/workflows/file"; import {FileProvider} from "@actions/workflow-parser/workflows/file-provider"; import {Position, TextDocument} from "vscode-languageserver-textdocument"; import {Hover} from "vscode-languageserver-types"; -import {ContextProviderConfig} from "./context-providers/config"; -import {getContext, Mode} from "./context-providers/default"; -import {getFunctionDescription} from "./context-providers/descriptions"; -import {getWorkflowContext, WorkflowContext} from "./context/workflow-context"; +import {ContextProviderConfig} from "./context-providers/config.js"; +import {getContext, Mode} from "./context-providers/default.js"; +import {getFunctionDescription} from "./context-providers/descriptions.js"; +import {getWorkflowContext, WorkflowContext} from "./context/workflow-context.js"; import { getReusableWorkflowInputDescription, isReusableWorkflowJobInput -} from "./description-providers/reusable-job-inputs"; -import {ExpressionPos, mapToExpressionPos} from "./expression-hover/expression-pos"; -import {HoverVisitor} from "./expression-hover/visitor"; -import {info} from "./log"; -import {isPotentiallyExpression} from "./utils/expression-detection"; -import {findToken} from "./utils/find-token"; -import {mapRange} from "./utils/range"; -import {fetchOrConvertWorkflowTemplate, fetchOrParseWorkflow} from "./utils/workflow-cache"; +} from "./description-providers/reusable-job-inputs.js"; +import {ExpressionPos, mapToExpressionPos} from "./expression-hover/expression-pos.js"; +import {HoverVisitor} from "./expression-hover/visitor.js"; +import {info} from "./log.js"; +import {isPotentiallyExpression} from "./utils/expression-detection.js"; +import {findToken} from "./utils/find-token.js"; +import {mapRange} from "./utils/range.js"; +import {fetchOrConvertWorkflowTemplate, fetchOrParseWorkflow} from "./utils/workflow-cache.js"; export type HoverConfig = { descriptionProvider?: DescriptionProvider; diff --git a/languageservice/src/index.ts b/languageservice/src/index.ts index c96eb204..a8efda3d 100644 --- a/languageservice/src/index.ts +++ b/languageservice/src/index.ts @@ -1,7 +1,7 @@ -export {complete} from "./complete"; -export {ContextProviderConfig} from "./context-providers/config"; -export {documentLinks} from "./document-links"; -export {hover} from "./hover"; -export {Logger, LogLevel, registerLogger, setLogLevel} from "./log"; -export {validate, ValidationConfig, ActionsMetadataProvider} from "./validate"; -export {ValueProviderConfig, ValueProviderKind} from "./value-providers/config"; +export {complete} from "./complete.js"; +export {ContextProviderConfig} from "./context-providers/config.js"; +export {documentLinks} from "./document-links.js"; +export {hover} from "./hover.js"; +export {Logger, LogLevel, registerLogger, setLogLevel} from "./log.js"; +export {validate, ValidationConfig, ActionsMetadataProvider} from "./validate.js"; +export {ValueProviderConfig, ValueProviderKind} from "./value-providers/config.js"; diff --git a/languageservice/src/test-utils/cursor-position.test.ts b/languageservice/src/test-utils/cursor-position.test.ts index 277b1b61..6df427eb 100644 --- a/languageservice/src/test-utils/cursor-position.test.ts +++ b/languageservice/src/test-utils/cursor-position.test.ts @@ -1,5 +1,5 @@ -import {clearCache} from "../utils/workflow-cache"; -import {getPositionFromCursor} from "./cursor-position"; +import {clearCache} from "../utils/workflow-cache.js"; +import {getPositionFromCursor} from "./cursor-position.js"; beforeEach(() => { clearCache(); diff --git a/languageservice/src/test-utils/cursor-position.ts b/languageservice/src/test-utils/cursor-position.ts index c26c0e1b..abcd96ee 100644 --- a/languageservice/src/test-utils/cursor-position.ts +++ b/languageservice/src/test-utils/cursor-position.ts @@ -1,5 +1,5 @@ import {Position, TextDocument} from "vscode-languageserver-textdocument"; -import {createDocument} from "./document"; +import {createDocument} from "./document.js"; /** * Calculates the position of the cursor and the document without that cursor diff --git a/languageservice/src/test-utils/logger.ts b/languageservice/src/test-utils/logger.ts index 4a3a75f4..42c52df8 100644 --- a/languageservice/src/test-utils/logger.ts +++ b/languageservice/src/test-utils/logger.ts @@ -1,4 +1,4 @@ -import {Logger} from "../log"; +import {Logger} from "../log.js"; export class TestLogger implements Logger { error(message: string): void { diff --git a/languageservice/src/test-utils/test-workflow-context.ts b/languageservice/src/test-utils/test-workflow-context.ts index 5d00725e..6fa7cbcf 100644 --- a/languageservice/src/test-utils/test-workflow-context.ts +++ b/languageservice/src/test-utils/test-workflow-context.ts @@ -1,9 +1,9 @@ import {convertWorkflowTemplate, parseWorkflow, WorkflowTemplate} from "@actions/workflow-parser"; -import {getWorkflowContext, WorkflowContext} from "../context/workflow-context"; -import {nullTrace} from "../nulltrace"; -import {findToken} from "../utils/find-token"; -import {getPositionFromCursor} from "./cursor-position"; -import {testFileProvider} from "./test-file-provider"; +import {getWorkflowContext, WorkflowContext} from "../context/workflow-context.js"; +import {nullTrace} from "../nulltrace.js"; +import {findToken} from "../utils/find-token.js"; +import {getPositionFromCursor} from "./cursor-position.js"; +import {testFileProvider} from "./test-file-provider.js"; export async function testGetWorkflowContext(input: string): Promise { const [textDocument, pos] = getPositionFromCursor(input); diff --git a/languageservice/src/utils/find-token.test.ts b/languageservice/src/utils/find-token.test.ts index ff792b10..3ae00dea 100644 --- a/languageservice/src/utils/find-token.test.ts +++ b/languageservice/src/utils/find-token.test.ts @@ -1,9 +1,9 @@ import {isScalar, parseWorkflow} from "@actions/workflow-parser"; import {TemplateToken} from "@actions/workflow-parser/templates/tokens/template-token"; import {TokenType} from "@actions/workflow-parser/templates/tokens/types"; -import {nullTrace} from "../nulltrace"; -import {getPositionFromCursor} from "../test-utils/cursor-position"; -import {findToken} from "./find-token"; +import {nullTrace} from "../nulltrace.js"; +import {getPositionFromCursor} from "../test-utils/cursor-position.js"; +import {findToken} from "./find-token.js"; type testTokenInfo = [definitionKey: string | null, tokenType: TokenType, literalValue?: string]; diff --git a/languageservice/src/utils/transform.test.ts b/languageservice/src/utils/transform.test.ts index db91c603..8499a849 100644 --- a/languageservice/src/utils/transform.test.ts +++ b/languageservice/src/utils/transform.test.ts @@ -1,5 +1,5 @@ -import {getPositionFromCursor} from "../test-utils/cursor-position"; -import {transform} from "./transform"; +import {getPositionFromCursor} from "../test-utils/cursor-position.js"; +import {transform} from "./transform.js"; describe("transform", () => { it("adds : at end of line", () => { diff --git a/languageservice/src/utils/workflow-cache.ts b/languageservice/src/utils/workflow-cache.ts index d69ed515..36850ff0 100644 --- a/languageservice/src/utils/workflow-cache.ts +++ b/languageservice/src/utils/workflow-cache.ts @@ -4,8 +4,8 @@ import {TemplateContext} from "@actions/workflow-parser/templates/template-conte import {TemplateToken} from "@actions/workflow-parser/templates/tokens/template-token"; import {File} from "@actions/workflow-parser/workflows/file"; -import {CompletionConfig} from "../complete"; -import {nullTrace} from "../nulltrace"; +import {CompletionConfig} from "../complete.js"; +import {nullTrace} from "../nulltrace.js"; const parsedWorkflowCache = new Map(); const workflowTemplateCache = new Map(); diff --git a/languageservice/src/validate-action.ts b/languageservice/src/validate-action.ts index c0654340..6ad11850 100644 --- a/languageservice/src/validate-action.ts +++ b/languageservice/src/validate-action.ts @@ -4,9 +4,9 @@ import {Step} from "@actions/workflow-parser/model/workflow-template"; import {ScalarToken} from "@actions/workflow-parser/templates/tokens/scalar-token"; import {TemplateToken} from "@actions/workflow-parser/templates/tokens/template-token"; import {Diagnostic, DiagnosticSeverity} from "vscode-languageserver-types"; -import {parseActionReference} from "./action"; -import {mapRange} from "./utils/range"; -import {ValidationConfig} from "./validate"; +import {parseActionReference} from "./action.js"; +import {mapRange} from "./utils/range.js"; +import {ValidationConfig} from "./validate.js"; export async function validateAction( diagnostics: Diagnostic[], diff --git a/languageservice/src/validate.actions.test.ts b/languageservice/src/validate.actions.test.ts index c8fb4bf0..46a39a90 100644 --- a/languageservice/src/validate.actions.test.ts +++ b/languageservice/src/validate.actions.test.ts @@ -1,11 +1,11 @@ import {DiagnosticSeverity} from "vscode-languageserver-types"; -import {ActionMetadata, ActionReference} from "./action"; -import {registerLogger} from "./log"; -import {createDocument} from "./test-utils/document"; -import {TestLogger} from "./test-utils/logger"; -import {validate, ValidationConfig} from "./validate"; -import {ValueProviderKind} from "./value-providers/config"; -import {clearCache} from "./utils/workflow-cache"; +import {ActionMetadata, ActionReference} from "./action.js"; +import {registerLogger} from "./log.js"; +import {createDocument} from "./test-utils/document.js"; +import {TestLogger} from "./test-utils/logger.js"; +import {validate, ValidationConfig} from "./validate.js"; +import {ValueProviderKind} from "./value-providers/config.js"; +import {clearCache} from "./utils/workflow-cache.js"; registerLogger(new TestLogger()); diff --git a/languageservice/src/validate.concurrency.test.ts b/languageservice/src/validate.concurrency.test.ts index 9bbccecd..dae1a6bf 100644 --- a/languageservice/src/validate.concurrency.test.ts +++ b/languageservice/src/validate.concurrency.test.ts @@ -1,7 +1,7 @@ import {DiagnosticSeverity} from "vscode-languageserver-types"; -import {validate} from "./validate"; -import {createDocument} from "./test-utils/document"; -import {clearCache} from "./utils/workflow-cache"; +import {validate} from "./validate.js"; +import {createDocument} from "./test-utils/document.js"; +import {clearCache} from "./utils/workflow-cache.js"; beforeEach(() => { clearCache(); diff --git a/languageservice/src/validate.expressions-literal-text.test.ts b/languageservice/src/validate.expressions-literal-text.test.ts index dabc8a09..e6f4084c 100644 --- a/languageservice/src/validate.expressions-literal-text.test.ts +++ b/languageservice/src/validate.expressions-literal-text.test.ts @@ -1,9 +1,9 @@ import {DiagnosticSeverity} from "vscode-languageserver-types"; -import {registerLogger} from "./log"; -import {createDocument} from "./test-utils/document"; -import {TestLogger} from "./test-utils/logger"; -import {clearCache} from "./utils/workflow-cache"; -import {validate} from "./validate"; +import {registerLogger} from "./log.js"; +import {createDocument} from "./test-utils/document.js"; +import {TestLogger} from "./test-utils/logger.js"; +import {clearCache} from "./utils/workflow-cache.js"; +import {validate} from "./validate.js"; registerLogger(new TestLogger()); diff --git a/languageservice/src/validate.expressions.test.ts b/languageservice/src/validate.expressions.test.ts index abfc7709..6b5bc5d0 100644 --- a/languageservice/src/validate.expressions.test.ts +++ b/languageservice/src/validate.expressions.test.ts @@ -1,11 +1,11 @@ -import {DescriptionDictionary} from "@actions/expressions/."; +import {DescriptionDictionary} from "@actions/expressions"; import {DiagnosticSeverity} from "vscode-languageserver-types"; -import {ContextProviderConfig} from "./context-providers/config"; -import {registerLogger} from "./log"; -import {createDocument} from "./test-utils/document"; -import {TestLogger} from "./test-utils/logger"; -import {clearCache} from "./utils/workflow-cache"; -import {validate, ValidationConfig} from "./validate"; +import {ContextProviderConfig} from "./context-providers/config.js"; +import {registerLogger} from "./log.js"; +import {createDocument} from "./test-utils/document.js"; +import {TestLogger} from "./test-utils/logger.js"; +import {clearCache} from "./utils/workflow-cache.js"; +import {validate, ValidationConfig} from "./validate.js"; registerLogger(new TestLogger()); diff --git a/languageservice/src/validate.incomplete-context.test.ts b/languageservice/src/validate.incomplete-context.test.ts index f1185283..66d828e0 100644 --- a/languageservice/src/validate.incomplete-context.test.ts +++ b/languageservice/src/validate.incomplete-context.test.ts @@ -9,9 +9,9 @@ * to fetch secrets/vars are not possible. */ -import {validate} from "./validate"; -import {createDocument} from "./test-utils/document"; -import {clearCache} from "./utils/workflow-cache"; +import {validate} from "./validate.js"; +import {createDocument} from "./test-utils/document.js"; +import {clearCache} from "./utils/workflow-cache.js"; beforeEach(() => { clearCache(); diff --git a/languageservice/src/validate.test.ts b/languageservice/src/validate.test.ts index 8e5865cd..cac98deb 100644 --- a/languageservice/src/validate.test.ts +++ b/languageservice/src/validate.test.ts @@ -1,9 +1,9 @@ import {Diagnostic, DiagnosticSeverity} from "vscode-languageserver-types"; -import {createDocument} from "./test-utils/document"; -import {validate} from "./validate"; -import {defaultValueProviders} from "./value-providers/default"; -import {clearCache} from "./utils/workflow-cache"; -import {ValueProviderConfig, ValueProviderKind} from "./value-providers/config"; +import {createDocument} from "./test-utils/document.js"; +import {validate} from "./validate.js"; +import {defaultValueProviders} from "./value-providers/default.js"; +import {clearCache} from "./utils/workflow-cache.js"; +import {ValueProviderConfig, ValueProviderKind} from "./value-providers/config.js"; beforeEach(() => { clearCache(); diff --git a/languageservice/src/validate.ts b/languageservice/src/validate.ts index 9f249763..ba269045 100644 --- a/languageservice/src/validate.ts +++ b/languageservice/src/validate.ts @@ -13,20 +13,20 @@ import {File} from "@actions/workflow-parser/workflows/file"; import {FileProvider} from "@actions/workflow-parser/workflows/file-provider"; import {TextDocument} from "vscode-languageserver-textdocument"; import {Diagnostic, DiagnosticSeverity, URI} from "vscode-languageserver-types"; -import {ActionMetadata, ActionReference} from "./action"; -import {ContextProviderConfig} from "./context-providers/config"; -import {Mode, getContext} from "./context-providers/default"; -import {WorkflowContext, getWorkflowContext} from "./context/workflow-context"; -import {wrapDictionary} from "./expression-validation/error-dictionary"; -import {ValidationEvaluator} from "./expression-validation/evaluator"; -import {validatorFunctions} from "./expression-validation/functions"; -import {error} from "./log"; -import {findToken} from "./utils/find-token"; -import {mapRange} from "./utils/range"; -import {fetchOrConvertWorkflowTemplate, fetchOrParseWorkflow} from "./utils/workflow-cache"; -import {validateAction} from "./validate-action"; -import {ValueProviderConfig, ValueProviderKind} from "./value-providers/config"; -import {defaultValueProviders} from "./value-providers/default"; +import {ActionMetadata, ActionReference} from "./action.js"; +import {ContextProviderConfig} from "./context-providers/config.js"; +import {Mode, getContext} from "./context-providers/default.js"; +import {WorkflowContext, getWorkflowContext} from "./context/workflow-context.js"; +import {wrapDictionary} from "./expression-validation/error-dictionary.js"; +import {ValidationEvaluator} from "./expression-validation/evaluator.js"; +import {validatorFunctions} from "./expression-validation/functions.js"; +import {error} from "./log.js"; +import {findToken} from "./utils/find-token.js"; +import {mapRange} from "./utils/range.js"; +import {fetchOrConvertWorkflowTemplate, fetchOrParseWorkflow} from "./utils/workflow-cache.js"; +import {validateAction} from "./validate-action.js"; +import {ValueProviderConfig, ValueProviderKind} from "./value-providers/config.js"; +import {defaultValueProviders} from "./value-providers/default.js"; const CRON_SCHEDULE_DOCS_URL = "https://docs.github.com/actions/using-workflows/workflow-syntax-for-github-actions#onschedule"; diff --git a/languageservice/src/validate.uses-format.test.ts b/languageservice/src/validate.uses-format.test.ts index dad042e0..b4fec047 100644 --- a/languageservice/src/validate.uses-format.test.ts +++ b/languageservice/src/validate.uses-format.test.ts @@ -1,7 +1,7 @@ import {DiagnosticSeverity} from "vscode-languageserver-types"; -import {validate} from "./validate"; -import {createDocument} from "./test-utils/document"; -import {clearCache} from "./utils/workflow-cache"; +import {validate} from "./validate.js"; +import {createDocument} from "./test-utils/document.js"; +import {clearCache} from "./utils/workflow-cache.js"; beforeEach(() => { clearCache(); diff --git a/languageservice/src/validate.workflow-references.test.ts b/languageservice/src/validate.workflow-references.test.ts index 6932fa94..558da982 100644 --- a/languageservice/src/validate.workflow-references.test.ts +++ b/languageservice/src/validate.workflow-references.test.ts @@ -1,7 +1,7 @@ -import {createDocument} from "./test-utils/document"; -import {testFileProvider} from "./test-utils/test-file-provider"; -import {clearCache} from "./utils/workflow-cache"; -import {validate} from "./validate"; +import {createDocument} from "./test-utils/document.js"; +import {testFileProvider} from "./test-utils/test-file-provider.js"; +import {clearCache} from "./utils/workflow-cache.js"; +import {validate} from "./validate.js"; beforeEach(() => { clearCache(); diff --git a/languageservice/src/validate.yaml-anchors.test.ts b/languageservice/src/validate.yaml-anchors.test.ts index 6920b1a8..acbb6079 100644 --- a/languageservice/src/validate.yaml-anchors.test.ts +++ b/languageservice/src/validate.yaml-anchors.test.ts @@ -1,6 +1,6 @@ -import {validate} from "./validate"; -import {createDocument} from "./test-utils/document"; -import {clearCache} from "./utils/workflow-cache"; +import {validate} from "./validate.js"; +import {createDocument} from "./test-utils/document.js"; +import {clearCache} from "./utils/workflow-cache.js"; beforeEach(() => { clearCache(); diff --git a/languageservice/src/value-providers/config.ts b/languageservice/src/value-providers/config.ts index c8f90dda..c1a7d5d4 100644 --- a/languageservice/src/value-providers/config.ts +++ b/languageservice/src/value-providers/config.ts @@ -1,4 +1,4 @@ -import {WorkflowContext} from "../context/workflow-context"; +import {WorkflowContext} from "../context/workflow-context.js"; export interface Value { /** Label of this value */ diff --git a/languageservice/src/value-providers/default.ts b/languageservice/src/value-providers/default.ts index a5eb6436..bacbc050 100644 --- a/languageservice/src/value-providers/default.ts +++ b/languageservice/src/value-providers/default.ts @@ -1,8 +1,8 @@ -import {ValueProviderConfig, ValueProviderKind} from "./config"; -import {needs} from "./needs"; -import {reusableJobInputs} from "./reusable-job-inputs"; -import {reusableJobSecrets} from "./reusable-job-secrets"; -import {stringsToValues} from "./strings-to-values"; +import {ValueProviderConfig, ValueProviderKind} from "./config.js"; +import {needs} from "./needs.js"; +import {reusableJobInputs} from "./reusable-job-inputs.js"; +import {reusableJobSecrets} from "./reusable-job-secrets.js"; +import {stringsToValues} from "./strings-to-values.js"; export const DEFAULT_RUNNER_LABELS = [ "ubuntu-latest", diff --git a/languageservice/src/value-providers/definition.ts b/languageservice/src/value-providers/definition.ts index 40c6ab0f..2b16f3e8 100644 --- a/languageservice/src/value-providers/definition.ts +++ b/languageservice/src/value-providers/definition.ts @@ -6,8 +6,8 @@ import {OneOfDefinition} from "@actions/workflow-parser/templates/schema/one-of- import {SequenceDefinition} from "@actions/workflow-parser/templates/schema/sequence-definition"; import {StringDefinition} from "@actions/workflow-parser/templates/schema/string-definition"; import {getWorkflowSchema} from "@actions/workflow-parser/workflows/workflow-schema"; -import {Value} from "./config"; -import {stringsToValues} from "./strings-to-values"; +import {Value} from "./config.js"; +import {stringsToValues} from "./strings-to-values.js"; export enum DefinitionValueMode { /** diff --git a/languageservice/src/value-providers/needs.ts b/languageservice/src/value-providers/needs.ts index 9d052724..e51c2999 100644 --- a/languageservice/src/value-providers/needs.ts +++ b/languageservice/src/value-providers/needs.ts @@ -1,5 +1,5 @@ -import {WorkflowContext} from "../context/workflow-context"; -import {Value} from "./config"; +import {WorkflowContext} from "../context/workflow-context.js"; +import {Value} from "./config.js"; export function needs(context: WorkflowContext): Value[] { if (!context.template) { diff --git a/languageservice/src/value-providers/reusable-job-inputs.ts b/languageservice/src/value-providers/reusable-job-inputs.ts index e5b1fbae..ecf7f1e1 100644 --- a/languageservice/src/value-providers/reusable-job-inputs.ts +++ b/languageservice/src/value-providers/reusable-job-inputs.ts @@ -1,7 +1,7 @@ import {TemplateToken} from "@actions/workflow-parser/templates/tokens/template-token"; import {isMapping, isString} from "@actions/workflow-parser/templates/tokens/type-guards"; -import {WorkflowContext} from "../context/workflow-context"; -import {Value} from "./config"; +import {WorkflowContext} from "../context/workflow-context.js"; +import {Value} from "./config.js"; export function reusableJobInputs(context: WorkflowContext): Value[] { if (!context.reusableWorkflowJob?.["input-definitions"]) { diff --git a/languageservice/src/value-providers/reusable-job-secrets.ts b/languageservice/src/value-providers/reusable-job-secrets.ts index 64083a37..148df034 100644 --- a/languageservice/src/value-providers/reusable-job-secrets.ts +++ b/languageservice/src/value-providers/reusable-job-secrets.ts @@ -1,7 +1,7 @@ import {TemplateToken} from "@actions/workflow-parser/templates/tokens/template-token"; import {isMapping, isString} from "@actions/workflow-parser/templates/tokens/type-guards"; -import {WorkflowContext} from "../context/workflow-context"; -import {Value} from "./config"; +import {WorkflowContext} from "../context/workflow-context.js"; +import {Value} from "./config.js"; export function reusableJobSecrets(context: WorkflowContext, existingValues?: Set): Value[] { if (!context.reusableWorkflowJob) { diff --git a/languageservice/src/value-providers/strings-to-values.ts b/languageservice/src/value-providers/strings-to-values.ts index ff95f87d..b066e10b 100644 --- a/languageservice/src/value-providers/strings-to-values.ts +++ b/languageservice/src/value-providers/strings-to-values.ts @@ -1,4 +1,4 @@ -import {Value} from "./config"; +import {Value} from "./config.js"; export function stringsToValues(labels: string[]): Value[] { return labels.map(x => ({label: x})); diff --git a/languageservice/tsconfig.build.json b/languageservice/tsconfig.build.json index 61c74a35..7381b7ad 100644 --- a/languageservice/tsconfig.build.json +++ b/languageservice/tsconfig.build.json @@ -2,9 +2,12 @@ "exclude": ["./src/**/*.test.ts", "./src/test-utils"], "extends": "./tsconfig.json", "compilerOptions": { + "module": "node16", + "moduleResolution": "node16", "declaration": true, "declarationMap": true, "noEmit": false, - "outDir": "./dist" + "outDir": "./dist", + "skipLibCheck": true } } diff --git a/package-lock.json b/package-lock.json index 783a235e..1e4d65a9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,8 @@ "./languageserver" ], "devDependencies": { - "lerna": "^8.2.2" + "lerna": "^8.2.2", + "typescript": "5.8.3" } }, "actions-expressions": { @@ -148,7 +149,7 @@ "prettier": "^2.8.3", "rimraf": "^3.0.2", "ts-jest": "^29.0.3", - "typescript": "^4.7.4" + "typescript": "^5.8.3" }, "engines": { "node": ">= 18" @@ -918,6 +919,20 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "languageserver/node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, "languageserver/node_modules/universal-user-agent": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-7.0.2.tgz", @@ -1194,6 +1209,20 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "languageservice/node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, "node_modules/@actions/expressions": { "resolved": "expressions", "link": true @@ -9436,21 +9465,6 @@ "node": ">=10" } }, - "node_modules/lerna/node_modules/typescript": { - "version": "5.8.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.2.tgz", - "integrity": "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==", - "dev": true, - "license": "Apache-2.0", - "peer": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, "node_modules/lerna/node_modules/write-file-atomic": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", @@ -12812,9 +12826,9 @@ "license": "MIT" }, "node_modules/typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", "dev": true, "license": "Apache-2.0", "bin": { @@ -12822,7 +12836,7 @@ "tsserver": "bin/tsserver" }, "engines": { - "node": ">=4.2.0" + "node": ">=14.17" } }, "node_modules/uglify-js": { @@ -13366,6 +13380,20 @@ "engines": { "node": ">= 18" } + }, + "workflow-parser/node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } } } } diff --git a/package.json b/package.json index 96bf8161..ab52d643 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,10 @@ "./languageserver" ], "devDependencies": { - "lerna": "^8.2.2" + "lerna": "^8.2.2", + "typescript": "5.8.3" + }, + "overrides": { + "typescript": "$typescript" } } diff --git a/workflow-parser/src/expressions.test.ts b/workflow-parser/src/expressions.test.ts index 01758fec..1feca027 100644 --- a/workflow-parser/src/expressions.test.ts +++ b/workflow-parser/src/expressions.test.ts @@ -1,8 +1,8 @@ /* eslint-disable @typescript-eslint/no-non-null-assertion */ -import {StringToken} from "./templates/tokens"; -import {isBasicExpression, isString} from "./templates/tokens/type-guards"; -import {nullTrace} from "./test-utils/null-trace"; -import {parseWorkflow} from "./workflows/workflow-parser"; +import {StringToken} from "./templates/tokens/index.js"; +import {isBasicExpression, isString} from "./templates/tokens/type-guards.js"; +import {nullTrace} from "./test-utils/null-trace.js"; +import {parseWorkflow} from "./workflows/workflow-parser.js"; describe("Workflow Expression Parsing", () => { it("preserves original expressions when building format", () => { diff --git a/workflow-parser/src/index.test.ts b/workflow-parser/src/index.test.ts index ba2b6540..8fa64d7c 100644 --- a/workflow-parser/src/index.test.ts +++ b/workflow-parser/src/index.test.ts @@ -1,6 +1,6 @@ -import {TemplateValidationError} from "./templates/template-validation-error"; -import {nullTrace} from "./test-utils/null-trace"; -import {parseWorkflow} from "./workflows/workflow-parser"; +import {TemplateValidationError} from "./templates/template-validation-error.js"; +import {nullTrace} from "./test-utils/null-trace.js"; +import {parseWorkflow} from "./workflows/workflow-parser.js"; describe("parseWorkflow", () => { it("parses valid workflow", () => { diff --git a/workflow-parser/src/index.ts b/workflow-parser/src/index.ts index 6dcfc868..0d3b3cec 100644 --- a/workflow-parser/src/index.ts +++ b/workflow-parser/src/index.ts @@ -1,5 +1,5 @@ -export {convertWorkflowTemplate} from "./model/convert"; -export {WorkflowTemplate} from "./model/workflow-template"; -export * from "./templates/tokens/type-guards"; -export {NoOperationTraceWriter, TraceWriter} from "./templates/trace-writer"; -export {parseWorkflow, ParseWorkflowResult} from "./workflows/workflow-parser"; +export {convertWorkflowTemplate} from "./model/convert.js"; +export {WorkflowTemplate} from "./model/workflow-template.js"; +export * from "./templates/tokens/type-guards.js"; +export {NoOperationTraceWriter, TraceWriter} from "./templates/trace-writer.js"; +export {parseWorkflow, ParseWorkflowResult} from "./workflows/workflow-parser.js"; diff --git a/workflow-parser/src/model/convert.test.ts b/workflow-parser/src/model/convert.test.ts index d15584d2..3d92f4a7 100644 --- a/workflow-parser/src/model/convert.test.ts +++ b/workflow-parser/src/model/convert.test.ts @@ -1,7 +1,7 @@ /* eslint-disable @typescript-eslint/no-non-null-assertion */ -import {nullTrace} from "../test-utils/null-trace"; -import {parseWorkflow} from "../workflows/workflow-parser"; -import {convertWorkflowTemplate, ErrorPolicy} from "./convert"; +import {nullTrace} from "../test-utils/null-trace.js"; +import {parseWorkflow} from "../workflows/workflow-parser.js"; +import {convertWorkflowTemplate, ErrorPolicy} from "./convert.js"; function serializeTemplate(template: unknown): unknown { return JSON.parse(JSON.stringify(template)); diff --git a/workflow-parser/src/model/convert.ts b/workflow-parser/src/model/convert.ts index 47e93734..afc14d45 100644 --- a/workflow-parser/src/model/convert.ts +++ b/workflow-parser/src/model/convert.ts @@ -1,15 +1,15 @@ -import {TemplateContext} from "../templates/template-context"; -import {TemplateToken, TemplateTokenError} from "../templates/tokens/template-token"; -import {FileProvider} from "../workflows/file-provider"; -import {parseFileReference} from "../workflows/file-reference"; -import {parseWorkflow} from "../workflows/workflow-parser"; -import {convertConcurrency} from "./converter/concurrency"; -import {convertOn} from "./converter/events"; -import {handleTemplateTokenErrors} from "./converter/handle-errors"; -import {convertJobs} from "./converter/jobs"; -import {convertReferencedWorkflow} from "./converter/referencedWorkflow"; -import {isReusableWorkflowJob} from "./type-guards"; -import {WorkflowTemplate} from "./workflow-template"; +import {TemplateContext} from "../templates/template-context.js"; +import {TemplateToken, TemplateTokenError} from "../templates/tokens/template-token.js"; +import {FileProvider} from "../workflows/file-provider.js"; +import {parseFileReference} from "../workflows/file-reference.js"; +import {parseWorkflow} from "../workflows/workflow-parser.js"; +import {convertConcurrency} from "./converter/concurrency.js"; +import {convertOn} from "./converter/events.js"; +import {handleTemplateTokenErrors} from "./converter/handle-errors.js"; +import {convertJobs} from "./converter/jobs.js"; +import {convertReferencedWorkflow} from "./converter/referencedWorkflow.js"; +import {isReusableWorkflowJob} from "./type-guards.js"; +import {WorkflowTemplate} from "./workflow-template.js"; export enum ErrorPolicy { ReturnErrorsOnly, diff --git a/workflow-parser/src/model/converter/concurrency.ts b/workflow-parser/src/model/converter/concurrency.ts index d240ddaa..132bd561 100644 --- a/workflow-parser/src/model/converter/concurrency.ts +++ b/workflow-parser/src/model/converter/concurrency.ts @@ -1,7 +1,7 @@ -import {TemplateContext} from "../../templates/template-context"; -import {TemplateToken} from "../../templates/tokens/template-token"; -import {isString} from "../../templates/tokens/type-guards"; -import {ConcurrencySetting} from "../workflow-template"; +import {TemplateContext} from "../../templates/template-context.js"; +import {TemplateToken} from "../../templates/tokens/template-token.js"; +import {isString} from "../../templates/tokens/type-guards.js"; +import {ConcurrencySetting} from "../workflow-template.js"; export function convertConcurrency(context: TemplateContext, token: TemplateToken): ConcurrencySetting { const result: ConcurrencySetting = {}; diff --git a/workflow-parser/src/model/converter/container.ts b/workflow-parser/src/model/converter/container.ts index a9fea789..4c4bf79e 100644 --- a/workflow-parser/src/model/converter/container.ts +++ b/workflow-parser/src/model/converter/container.ts @@ -1,7 +1,7 @@ -import {TemplateContext} from "../../templates/template-context"; -import {MappingToken, SequenceToken, StringToken, TemplateToken} from "../../templates/tokens"; -import {isString} from "../../templates/tokens/type-guards"; -import {Container, Credential} from "../workflow-template"; +import {TemplateContext} from "../../templates/template-context.js"; +import {MappingToken, SequenceToken, StringToken, TemplateToken} from "../../templates/tokens/index.js"; +import {isString} from "../../templates/tokens/type-guards.js"; +import {Container, Credential} from "../workflow-template.js"; export function convertToJobContainer(context: TemplateContext, container: TemplateToken): Container | undefined { let image: StringToken | undefined; diff --git a/workflow-parser/src/model/converter/cron.test.ts b/workflow-parser/src/model/converter/cron.test.ts index f8ef4dfd..6cce87c8 100644 --- a/workflow-parser/src/model/converter/cron.test.ts +++ b/workflow-parser/src/model/converter/cron.test.ts @@ -1,4 +1,4 @@ -import {isValidCron, getCronDescription, hasCronIntervalLessThan5Minutes} from "./cron"; +import {isValidCron, getCronDescription, hasCronIntervalLessThan5Minutes} from "./cron.js"; describe("cron", () => { describe("valid cron", () => { diff --git a/workflow-parser/src/model/converter/cron.ts b/workflow-parser/src/model/converter/cron.ts index 41062f03..eaf7dce2 100644 --- a/workflow-parser/src/model/converter/cron.ts +++ b/workflow-parser/src/model/converter/cron.ts @@ -1,6 +1,6 @@ import cronstrue from "cronstrue"; -import {MONTH_RANGE, HOUR_RANGE, MINUTE_RANGE, DOM_RANGE, DOW_RANGE} from "./cron-constants"; +import {MONTH_RANGE, HOUR_RANGE, MINUTE_RANGE, DOM_RANGE, DOW_RANGE} from "./cron-constants.js"; type Range = { min: number; diff --git a/workflow-parser/src/model/converter/events.ts b/workflow-parser/src/model/converter/events.ts index f2b58418..965d4d13 100644 --- a/workflow-parser/src/model/converter/events.ts +++ b/workflow-parser/src/model/converter/events.ts @@ -1,9 +1,9 @@ -import {TemplateContext} from "../../templates/template-context"; -import {MappingToken} from "../../templates/tokens/mapping-token"; -import {SequenceToken} from "../../templates/tokens/sequence-token"; -import {TemplateToken} from "../../templates/tokens/template-token"; -import {isLiteral, isMapping, isSequence, isString} from "../../templates/tokens/type-guards"; -import {TokenType} from "../../templates/tokens/types"; +import {TemplateContext} from "../../templates/template-context.js"; +import {MappingToken} from "../../templates/tokens/mapping-token.js"; +import {SequenceToken} from "../../templates/tokens/sequence-token.js"; +import {TemplateToken} from "../../templates/tokens/template-token.js"; +import {isLiteral, isMapping, isSequence, isString} from "../../templates/tokens/type-guards.js"; +import {TokenType} from "../../templates/tokens/types.js"; import { BranchFilterConfig, EventsConfig, @@ -14,11 +14,11 @@ import { TypesFilterConfig, VersionsFilterConfig, WorkflowFilterConfig -} from "../workflow-template"; -import {isValidCron} from "./cron"; -import {convertStringList} from "./string-list"; -import {convertEventWorkflowCall} from "./workflow-call"; -import {convertEventWorkflowDispatchInputs} from "./workflow-dispatch"; +} from "../workflow-template.js"; +import {isValidCron} from "./cron.js"; +import {convertStringList} from "./string-list.js"; +import {convertEventWorkflowCall} from "./workflow-call.js"; +import {convertEventWorkflowDispatchInputs} from "./workflow-dispatch.js"; export function convertOn(context: TemplateContext, token: TemplateToken): EventsConfig { if (isLiteral(token)) { diff --git a/workflow-parser/src/model/converter/handle-errors.ts b/workflow-parser/src/model/converter/handle-errors.ts index a1f2a3bf..c19b3e72 100644 --- a/workflow-parser/src/model/converter/handle-errors.ts +++ b/workflow-parser/src/model/converter/handle-errors.ts @@ -1,5 +1,5 @@ -import {TemplateContext} from "../../templates/template-context"; -import {TemplateToken, TemplateTokenError} from "../../templates/tokens/template-token"; +import {TemplateContext} from "../../templates/template-context.js"; +import {TemplateToken, TemplateTokenError} from "../../templates/tokens/template-token.js"; export function handleTemplateTokenErrors( root: TemplateToken, diff --git a/workflow-parser/src/model/converter/id-builder.test.ts b/workflow-parser/src/model/converter/id-builder.test.ts index 96b73ce6..e0c4fd1d 100644 --- a/workflow-parser/src/model/converter/id-builder.test.ts +++ b/workflow-parser/src/model/converter/id-builder.test.ts @@ -1,4 +1,4 @@ -import {IdBuilder} from "./id-builder"; +import {IdBuilder} from "./id-builder.js"; function build(...segments: string[]): string { const builder = new IdBuilder(); diff --git a/workflow-parser/src/model/converter/if-condition.ts b/workflow-parser/src/model/converter/if-condition.ts index 66dbb182..6914d3d7 100644 --- a/workflow-parser/src/model/converter/if-condition.ts +++ b/workflow-parser/src/model/converter/if-condition.ts @@ -1,9 +1,9 @@ import {Lexer, Parser} from "@actions/expressions"; import {Binary, Expr, FunctionCall, Grouping, IndexAccess, Logical, Unary} from "@actions/expressions/ast"; -import {DefinitionInfo} from "../../templates/schema/definition-info"; -import {splitAllowedContext} from "../../templates/allowed-context"; -import {TemplateContext} from "../../templates/template-context"; -import {BasicExpressionToken, ExpressionToken, TemplateToken} from "../../templates/tokens"; +import {DefinitionInfo} from "../../templates/schema/definition-info.js"; +import {splitAllowedContext} from "../../templates/allowed-context.js"; +import {TemplateContext} from "../../templates/template-context.js"; +import {BasicExpressionToken, ExpressionToken, TemplateToken} from "../../templates/tokens/index.js"; /** * Ensures a condition expression contains a status function call. diff --git a/workflow-parser/src/model/converter/job.ts b/workflow-parser/src/model/converter/job.ts index c3081f39..514de15a 100644 --- a/workflow-parser/src/model/converter/job.ts +++ b/workflow-parser/src/model/converter/job.ts @@ -1,15 +1,21 @@ -import {TemplateContext} from "../../templates/template-context"; -import {BasicExpressionToken, MappingToken, ScalarToken, StringToken, TemplateToken} from "../../templates/tokens"; -import {isSequence, isString} from "../../templates/tokens/type-guards"; -import {Step, WorkflowJob} from "../workflow-template"; -import {convertToIfCondition} from "./if-condition"; -import {convertConcurrency} from "./concurrency"; -import {convertToJobContainer, convertToJobServices} from "./container"; -import {handleTemplateTokenErrors} from "./handle-errors"; -import {IdBuilder} from "./id-builder"; -import {convertToActionsEnvironmentRef} from "./job/environment"; -import {convertRunsOn} from "./job/runs-on"; -import {convertSteps} from "./steps"; +import {TemplateContext} from "../../templates/template-context.js"; +import { + BasicExpressionToken, + MappingToken, + ScalarToken, + StringToken, + TemplateToken +} from "../../templates/tokens/index.js"; +import {isSequence, isString} from "../../templates/tokens/type-guards.js"; +import {Step, WorkflowJob} from "../workflow-template.js"; +import {convertToIfCondition} from "./if-condition.js"; +import {convertConcurrency} from "./concurrency.js"; +import {convertToJobContainer, convertToJobServices} from "./container.js"; +import {handleTemplateTokenErrors} from "./handle-errors.js"; +import {IdBuilder} from "./id-builder.js"; +import {convertToActionsEnvironmentRef} from "./job/environment.js"; +import {convertRunsOn} from "./job/runs-on.js"; +import {convertSteps} from "./steps.js"; export function convertJob(context: TemplateContext, jobKey: StringToken, token: MappingToken): WorkflowJob { const error = new IdBuilder().tryAddKnownId(jobKey.value); diff --git a/workflow-parser/src/model/converter/job/environment.ts b/workflow-parser/src/model/converter/job/environment.ts index 51532453..8da87cf0 100644 --- a/workflow-parser/src/model/converter/job/environment.ts +++ b/workflow-parser/src/model/converter/job/environment.ts @@ -1,7 +1,7 @@ -import {TemplateContext} from "../../../templates/template-context"; -import {TemplateToken} from "../../../templates/tokens/template-token"; -import {isScalar} from "../../../templates/tokens/type-guards"; -import {ActionsEnvironmentReference} from "../../workflow-template"; +import {TemplateContext} from "../../../templates/template-context.js"; +import {TemplateToken} from "../../../templates/tokens/template-token.js"; +import {isScalar} from "../../../templates/tokens/type-guards.js"; +import {ActionsEnvironmentReference} from "../../workflow-template.js"; export function convertToActionsEnvironmentRef( context: TemplateContext, diff --git a/workflow-parser/src/model/converter/job/inputs.ts b/workflow-parser/src/model/converter/job/inputs.ts index a72fe063..6753e3de 100644 --- a/workflow-parser/src/model/converter/job/inputs.ts +++ b/workflow-parser/src/model/converter/job/inputs.ts @@ -1,6 +1,6 @@ -import {TemplateContext} from "../../../templates/template-context"; -import {MappingToken, TemplateToken} from "../../../templates/tokens"; -import {ReusableWorkflowJob} from "../../workflow-template"; +import {TemplateContext} from "../../../templates/template-context.js"; +import {MappingToken, TemplateToken} from "../../../templates/tokens/index.js"; +import {ReusableWorkflowJob} from "../../workflow-template.js"; type TokenMap = Map; diff --git a/workflow-parser/src/model/converter/job/runs-on.ts b/workflow-parser/src/model/converter/job/runs-on.ts index c96da912..a891df64 100644 --- a/workflow-parser/src/model/converter/job/runs-on.ts +++ b/workflow-parser/src/model/converter/job/runs-on.ts @@ -1,6 +1,6 @@ -import {TemplateContext} from "../../../templates/template-context"; -import {TemplateToken} from "../../../templates/tokens"; -import {isMapping, isString, isSequence} from "../../../templates/tokens/type-guards"; +import {TemplateContext} from "../../../templates/template-context.js"; +import {TemplateToken} from "../../../templates/tokens/index.js"; +import {isMapping, isString, isSequence} from "../../../templates/tokens/type-guards.js"; type RunsOn = { labels: Set; diff --git a/workflow-parser/src/model/converter/job/secrets.ts b/workflow-parser/src/model/converter/job/secrets.ts index 31a1d967..ee487380 100644 --- a/workflow-parser/src/model/converter/job/secrets.ts +++ b/workflow-parser/src/model/converter/job/secrets.ts @@ -1,7 +1,7 @@ -import {TemplateContext} from "../../../templates/template-context"; -import {NullToken} from "../../../templates/tokens"; -import {ReusableWorkflowJob} from "../../workflow-template"; -import {createTokenMap} from "./inputs"; +import {TemplateContext} from "../../../templates/template-context.js"; +import {NullToken} from "../../../templates/tokens/index.js"; +import {ReusableWorkflowJob} from "../../workflow-template.js"; +import {createTokenMap} from "./inputs.js"; export function convertWorkflowJobSecrets(context: TemplateContext, job: ReusableWorkflowJob) { // No validation if job passes all secrets diff --git a/workflow-parser/src/model/converter/jobs.ts b/workflow-parser/src/model/converter/jobs.ts index b07e3685..6c09107f 100644 --- a/workflow-parser/src/model/converter/jobs.ts +++ b/workflow-parser/src/model/converter/jobs.ts @@ -1,10 +1,10 @@ -import {TemplateContext} from "../../templates/template-context"; -import {StringToken} from "../../templates/tokens"; -import {TemplateToken} from "../../templates/tokens/template-token"; -import {isMapping} from "../../templates/tokens/type-guards"; -import {WorkflowJob} from "../workflow-template"; -import {handleTemplateTokenErrors} from "./handle-errors"; -import {convertJob} from "./job"; +import {TemplateContext} from "../../templates/template-context.js"; +import {StringToken} from "../../templates/tokens/index.js"; +import {TemplateToken} from "../../templates/tokens/template-token.js"; +import {isMapping} from "../../templates/tokens/type-guards.js"; +import {WorkflowJob} from "../workflow-template.js"; +import {handleTemplateTokenErrors} from "./handle-errors.js"; +import {convertJob} from "./job.js"; type nodeInfo = { name: string; diff --git a/workflow-parser/src/model/converter/referencedWorkflow.ts b/workflow-parser/src/model/converter/referencedWorkflow.ts index 00a1627b..9c25e674 100644 --- a/workflow-parser/src/model/converter/referencedWorkflow.ts +++ b/workflow-parser/src/model/converter/referencedWorkflow.ts @@ -1,11 +1,11 @@ -import {TemplateContext} from "../../templates/template-context"; -import {TemplateToken} from "../../templates/tokens"; -import {TokenType} from "../../templates/tokens/types"; -import {ReusableWorkflowJob} from "../workflow-template"; -import {handleTemplateTokenErrors} from "./handle-errors"; -import {convertWorkflowJobInputs} from "./job/inputs"; -import {convertWorkflowJobSecrets} from "./job/secrets"; -import {convertJobs} from "./jobs"; +import {TemplateContext} from "../../templates/template-context.js"; +import {TemplateToken} from "../../templates/tokens/index.js"; +import {TokenType} from "../../templates/tokens/types.js"; +import {ReusableWorkflowJob} from "../workflow-template.js"; +import {handleTemplateTokenErrors} from "./handle-errors.js"; +import {convertWorkflowJobInputs} from "./job/inputs.js"; +import {convertWorkflowJobSecrets} from "./job/secrets.js"; +import {convertJobs} from "./jobs.js"; export function convertReferencedWorkflow( context: TemplateContext, diff --git a/workflow-parser/src/model/converter/steps.ts b/workflow-parser/src/model/converter/steps.ts index 4745949f..ba60623a 100644 --- a/workflow-parser/src/model/converter/steps.ts +++ b/workflow-parser/src/model/converter/steps.ts @@ -1,11 +1,17 @@ -import {TemplateContext} from "../../templates/template-context"; -import {BasicExpressionToken, MappingToken, ScalarToken, StringToken, TemplateToken} from "../../templates/tokens"; -import {isSequence} from "../../templates/tokens/type-guards"; -import {isActionStep} from "../type-guards"; -import {convertToIfCondition} from "./if-condition"; -import {ActionStep, Step} from "../workflow-template"; -import {handleTemplateTokenErrors} from "./handle-errors"; -import {IdBuilder} from "./id-builder"; +import {TemplateContext} from "../../templates/template-context.js"; +import { + BasicExpressionToken, + MappingToken, + ScalarToken, + StringToken, + TemplateToken +} from "../../templates/tokens/index.js"; +import {isSequence} from "../../templates/tokens/type-guards.js"; +import {isActionStep} from "../type-guards.js"; +import {convertToIfCondition} from "./if-condition.js"; +import {ActionStep, Step} from "../workflow-template.js"; +import {handleTemplateTokenErrors} from "./handle-errors.js"; +import {IdBuilder} from "./id-builder.js"; export function convertSteps(context: TemplateContext, steps: TemplateToken): Step[] { if (!isSequence(steps)) { diff --git a/workflow-parser/src/model/converter/string-list.ts b/workflow-parser/src/model/converter/string-list.ts index b0c0026c..b751d7e4 100644 --- a/workflow-parser/src/model/converter/string-list.ts +++ b/workflow-parser/src/model/converter/string-list.ts @@ -1,4 +1,4 @@ -import {SequenceToken} from "../../templates/tokens/sequence-token"; +import {SequenceToken} from "../../templates/tokens/sequence-token.js"; export function convertStringList(name: string, token: SequenceToken): string[] { const result = [] as string[]; diff --git a/workflow-parser/src/model/converter/workflow-call.ts b/workflow-parser/src/model/converter/workflow-call.ts index bf204ea7..31114f31 100644 --- a/workflow-parser/src/model/converter/workflow-call.ts +++ b/workflow-parser/src/model/converter/workflow-call.ts @@ -1,9 +1,9 @@ -import {TemplateContext} from "../../templates/template-context"; -import {MappingToken, TemplateToken} from "../../templates/tokens"; -import {isMapping} from "../../templates/tokens/type-guards"; -import {SecretConfig, WorkflowCallConfig, InputConfig, InputType} from "../workflow-template"; -import {convertStringList} from "./string-list"; -import {ScalarToken} from "../../templates/tokens/scalar-token"; +import {TemplateContext} from "../../templates/template-context.js"; +import {MappingToken, TemplateToken} from "../../templates/tokens/index.js"; +import {isMapping} from "../../templates/tokens/type-guards.js"; +import {SecretConfig, WorkflowCallConfig, InputConfig, InputType} from "../workflow-template.js"; +import {convertStringList} from "./string-list.js"; +import {ScalarToken} from "../../templates/tokens/scalar-token.js"; export function convertEventWorkflowCall(context: TemplateContext, token: MappingToken): WorkflowCallConfig { const result: WorkflowCallConfig = {}; diff --git a/workflow-parser/src/model/converter/workflow-dispatch.ts b/workflow-parser/src/model/converter/workflow-dispatch.ts index 922b1911..f43c8565 100644 --- a/workflow-parser/src/model/converter/workflow-dispatch.ts +++ b/workflow-parser/src/model/converter/workflow-dispatch.ts @@ -1,8 +1,8 @@ -import {TemplateContext} from "../../templates/template-context"; -import {MappingToken} from "../../templates/tokens/mapping-token"; -import {ScalarToken} from "../../templates/tokens/scalar-token"; -import {InputConfig, InputType, WorkflowDispatchConfig} from "../workflow-template"; -import {convertStringList} from "./string-list"; +import {TemplateContext} from "../../templates/template-context.js"; +import {MappingToken} from "../../templates/tokens/mapping-token.js"; +import {ScalarToken} from "../../templates/tokens/scalar-token.js"; +import {InputConfig, InputType, WorkflowDispatchConfig} from "../workflow-template.js"; +import {convertStringList} from "./string-list.js"; export function convertEventWorkflowDispatchInputs( context: TemplateContext, diff --git a/workflow-parser/src/model/type-guards.ts b/workflow-parser/src/model/type-guards.ts index 60923f23..667636f5 100644 --- a/workflow-parser/src/model/type-guards.ts +++ b/workflow-parser/src/model/type-guards.ts @@ -1,4 +1,4 @@ -import {ActionStep, Job, ReusableWorkflowJob, RunStep, Step, WorkflowJob} from "./workflow-template"; +import {ActionStep, Job, ReusableWorkflowJob, RunStep, Step, WorkflowJob} from "./workflow-template.js"; export function isRunStep(step: Step): step is RunStep { return (step as RunStep).run !== undefined; diff --git a/workflow-parser/src/model/workflow-template.ts b/workflow-parser/src/model/workflow-template.ts index 448b67df..9fd78d26 100644 --- a/workflow-parser/src/model/workflow-template.ts +++ b/workflow-parser/src/model/workflow-template.ts @@ -5,7 +5,7 @@ import { SequenceToken, StringToken, TemplateToken -} from "../templates/tokens"; +} from "../templates/tokens/index.js"; export type WorkflowTemplate = { events: EventsConfig; diff --git a/workflow-parser/src/templates/allowed-context.ts b/workflow-parser/src/templates/allowed-context.ts index 3473f293..fe340bb1 100644 --- a/workflow-parser/src/templates/allowed-context.ts +++ b/workflow-parser/src/templates/allowed-context.ts @@ -1,5 +1,5 @@ import {FunctionInfo} from "@actions/expressions/funcs/info"; -import {MAX_CONSTANT} from "./template-constants"; +import {MAX_CONSTANT} from "./template-constants.js"; export function splitAllowedContext(allowedContext: string[]): { namedContexts: string[]; diff --git a/workflow-parser/src/templates/json-object-reader.ts b/workflow-parser/src/templates/json-object-reader.ts index aa53aaf5..89b8052f 100644 --- a/workflow-parser/src/templates/json-object-reader.ts +++ b/workflow-parser/src/templates/json-object-reader.ts @@ -1,6 +1,14 @@ -import {ObjectReader} from "./object-reader"; -import {EventType, ParseEvent} from "./parse-event"; -import {LiteralToken, SequenceToken, MappingToken, NullToken, BooleanToken, NumberToken, StringToken} from "./tokens"; +import {ObjectReader} from "./object-reader.js"; +import {EventType, ParseEvent} from "./parse-event.js"; +import { + LiteralToken, + SequenceToken, + MappingToken, + NullToken, + BooleanToken, + NumberToken, + StringToken +} from "./tokens/index.js"; export class JSONObjectReader implements ObjectReader { private readonly _fileId: number | undefined; diff --git a/workflow-parser/src/templates/object-reader.ts b/workflow-parser/src/templates/object-reader.ts index 1b40439c..2cf916ca 100644 --- a/workflow-parser/src/templates/object-reader.ts +++ b/workflow-parser/src/templates/object-reader.ts @@ -1,4 +1,4 @@ -import {LiteralToken, SequenceToken, MappingToken} from "./tokens"; +import {LiteralToken, SequenceToken, MappingToken} from "./tokens/index.js"; /** * Interface for reading a source object (or file). diff --git a/workflow-parser/src/templates/parse-event.ts b/workflow-parser/src/templates/parse-event.ts index 0808f713..6e5ac15b 100644 --- a/workflow-parser/src/templates/parse-event.ts +++ b/workflow-parser/src/templates/parse-event.ts @@ -1,4 +1,4 @@ -import {TemplateToken} from "./tokens"; +import {TemplateToken} from "./tokens/index.js"; export class ParseEvent { public readonly type: EventType; diff --git a/workflow-parser/src/templates/schema/boolean-definition.ts b/workflow-parser/src/templates/schema/boolean-definition.ts index 2c1a6eb5..5a987e9d 100644 --- a/workflow-parser/src/templates/schema/boolean-definition.ts +++ b/workflow-parser/src/templates/schema/boolean-definition.ts @@ -1,8 +1,8 @@ -import {DEFINITION, BOOLEAN} from "../template-constants"; -import {MappingToken, LiteralToken} from "../tokens"; -import {TokenType} from "../tokens/types"; -import {DefinitionType} from "./definition-type"; -import {ScalarDefinition} from "./scalar-definition"; +import {DEFINITION, BOOLEAN} from "../template-constants.js"; +import {MappingToken, LiteralToken} from "../tokens/index.js"; +import {TokenType} from "../tokens/types.js"; +import {DefinitionType} from "./definition-type.js"; +import {ScalarDefinition} from "./scalar-definition.js"; export class BooleanDefinition extends ScalarDefinition { public constructor(key: string, definition?: MappingToken) { diff --git a/workflow-parser/src/templates/schema/definition-info.ts b/workflow-parser/src/templates/schema/definition-info.ts index 61b290ae..a20ba7a2 100644 --- a/workflow-parser/src/templates/schema/definition-info.ts +++ b/workflow-parser/src/templates/schema/definition-info.ts @@ -1,7 +1,7 @@ -import {TemplateSchema} from "."; -import {Definition} from "./definition"; -import {DefinitionType} from "./definition-type"; -import {ScalarDefinition} from "./scalar-definition"; +import {TemplateSchema} from "./index.js"; +import {Definition} from "./definition.js"; +import {DefinitionType} from "./definition-type.js"; +import {ScalarDefinition} from "./scalar-definition.js"; export class DefinitionInfo { private readonly _schema: TemplateSchema; diff --git a/workflow-parser/src/templates/schema/definition.ts b/workflow-parser/src/templates/schema/definition.ts index bef24dd6..03d1a085 100644 --- a/workflow-parser/src/templates/schema/definition.ts +++ b/workflow-parser/src/templates/schema/definition.ts @@ -1,7 +1,7 @@ -import {CONTEXT, DEFINITION, DESCRIPTION} from "../template-constants"; -import {MappingToken} from "../tokens"; -import {DefinitionType} from "./definition-type"; -import {TemplateSchema} from "./template-schema"; +import {CONTEXT, DEFINITION, DESCRIPTION} from "../template-constants.js"; +import {MappingToken} from "../tokens/index.js"; +import {DefinitionType} from "./definition-type.js"; +import {TemplateSchema} from "./template-schema.js"; /** * Defines the allowable schema for a user defined type diff --git a/workflow-parser/src/templates/schema/index.ts b/workflow-parser/src/templates/schema/index.ts index 2460333c..12c7baa2 100644 --- a/workflow-parser/src/templates/schema/index.ts +++ b/workflow-parser/src/templates/schema/index.ts @@ -1 +1 @@ -export {TemplateSchema} from "./template-schema"; +export {TemplateSchema} from "./template-schema.js"; diff --git a/workflow-parser/src/templates/schema/mapping-definition.ts b/workflow-parser/src/templates/schema/mapping-definition.ts index e364b0e7..327533ad 100644 --- a/workflow-parser/src/templates/schema/mapping-definition.ts +++ b/workflow-parser/src/templates/schema/mapping-definition.ts @@ -1,9 +1,9 @@ -import {TemplateSchema} from "./template-schema"; -import {DEFINITION, MAPPING, PROPERTIES, LOOSE_KEY_TYPE, LOOSE_VALUE_TYPE} from "../template-constants"; -import {MappingToken} from "../tokens"; -import {Definition} from "./definition"; -import {DefinitionType} from "./definition-type"; -import {PropertyDefinition} from "./property-definition"; +import {TemplateSchema} from "./template-schema.js"; +import {DEFINITION, MAPPING, PROPERTIES, LOOSE_KEY_TYPE, LOOSE_VALUE_TYPE} from "../template-constants.js"; +import {MappingToken} from "../tokens/index.js"; +import {Definition} from "./definition.js"; +import {DefinitionType} from "./definition-type.js"; +import {PropertyDefinition} from "./property-definition.js"; export class MappingDefinition extends Definition { public readonly properties: {[key: string]: PropertyDefinition} = {}; diff --git a/workflow-parser/src/templates/schema/null-definition.ts b/workflow-parser/src/templates/schema/null-definition.ts index f410aae9..757b9dff 100644 --- a/workflow-parser/src/templates/schema/null-definition.ts +++ b/workflow-parser/src/templates/schema/null-definition.ts @@ -1,8 +1,8 @@ -import {DEFINITION, NULL} from "../template-constants"; -import {MappingToken, LiteralToken} from "../tokens"; -import {DefinitionType} from "./definition-type"; -import {ScalarDefinition} from "./scalar-definition"; -import {TokenType} from "../tokens/types"; +import {DEFINITION, NULL} from "../template-constants.js"; +import {MappingToken, LiteralToken} from "../tokens/index.js"; +import {DefinitionType} from "./definition-type.js"; +import {ScalarDefinition} from "./scalar-definition.js"; +import {TokenType} from "../tokens/types.js"; export class NullDefinition extends ScalarDefinition { public constructor(key: string, definition?: MappingToken) { diff --git a/workflow-parser/src/templates/schema/number-definition.ts b/workflow-parser/src/templates/schema/number-definition.ts index 002374d1..8caff201 100644 --- a/workflow-parser/src/templates/schema/number-definition.ts +++ b/workflow-parser/src/templates/schema/number-definition.ts @@ -1,8 +1,8 @@ -import {DEFINITION, NUMBER} from "../template-constants"; -import {MappingToken, LiteralToken} from "../tokens"; -import {DefinitionType} from "./definition-type"; -import {ScalarDefinition} from "./scalar-definition"; -import {TokenType} from "../tokens/types"; +import {DEFINITION, NUMBER} from "../template-constants.js"; +import {MappingToken, LiteralToken} from "../tokens/index.js"; +import {DefinitionType} from "./definition-type.js"; +import {ScalarDefinition} from "./scalar-definition.js"; +import {TokenType} from "../tokens/types.js"; export class NumberDefinition extends ScalarDefinition { public constructor(key: string, definition?: MappingToken) { diff --git a/workflow-parser/src/templates/schema/one-of-definition.ts b/workflow-parser/src/templates/schema/one-of-definition.ts index ab2fd997..0709ea1c 100644 --- a/workflow-parser/src/templates/schema/one-of-definition.ts +++ b/workflow-parser/src/templates/schema/one-of-definition.ts @@ -1,4 +1,4 @@ -import {TemplateSchema} from "./template-schema"; +import {TemplateSchema} from "./template-schema.js"; import { DEFINITION, ONE_OF, @@ -10,17 +10,17 @@ import { CONSTANT, LOOSE_KEY_TYPE, ALLOWED_VALUES -} from "../template-constants"; -import {MappingToken} from "../tokens"; -import {BooleanDefinition} from "./boolean-definition"; -import {Definition} from "./definition"; -import {DefinitionType} from "./definition-type"; -import {MappingDefinition} from "./mapping-definition"; -import {NullDefinition} from "./null-definition"; -import {NumberDefinition} from "./number-definition"; -import {SequenceDefinition} from "./sequence-definition"; -import {StringDefinition} from "./string-definition"; -import {PropertyDefinition} from "./property-definition"; +} from "../template-constants.js"; +import {MappingToken} from "../tokens/index.js"; +import {BooleanDefinition} from "./boolean-definition.js"; +import {Definition} from "./definition.js"; +import {DefinitionType} from "./definition-type.js"; +import {MappingDefinition} from "./mapping-definition.js"; +import {NullDefinition} from "./null-definition.js"; +import {NumberDefinition} from "./number-definition.js"; +import {SequenceDefinition} from "./sequence-definition.js"; +import {StringDefinition} from "./string-definition.js"; +import {PropertyDefinition} from "./property-definition.js"; /** * Must resolve to exactly one of the referenced definitions diff --git a/workflow-parser/src/templates/schema/property-definition.ts b/workflow-parser/src/templates/schema/property-definition.ts index 0d8bf0a6..56a9a9a2 100644 --- a/workflow-parser/src/templates/schema/property-definition.ts +++ b/workflow-parser/src/templates/schema/property-definition.ts @@ -1,6 +1,6 @@ -import {MAPPING_PROPERTY_VALUE, TYPE, REQUIRED, DESCRIPTION} from "../template-constants"; -import {TemplateToken, StringToken} from "../tokens"; -import {TokenType} from "../tokens/types"; +import {MAPPING_PROPERTY_VALUE, TYPE, REQUIRED, DESCRIPTION} from "../template-constants.js"; +import {TemplateToken, StringToken} from "../tokens/index.js"; +import {TokenType} from "../tokens/types.js"; export class PropertyDefinition { public readonly type: string = ""; diff --git a/workflow-parser/src/templates/schema/scalar-definition.ts b/workflow-parser/src/templates/schema/scalar-definition.ts index bacb2f3a..e25940d6 100644 --- a/workflow-parser/src/templates/schema/scalar-definition.ts +++ b/workflow-parser/src/templates/schema/scalar-definition.ts @@ -1,5 +1,5 @@ -import {LiteralToken, MappingToken} from "../tokens"; -import {Definition} from "./definition"; +import {LiteralToken, MappingToken} from "../tokens/index.js"; +import {Definition} from "./definition.js"; export abstract class ScalarDefinition extends Definition { public constructor(key: string, definition?: MappingToken) { diff --git a/workflow-parser/src/templates/schema/sequence-definition.ts b/workflow-parser/src/templates/schema/sequence-definition.ts index 448aec86..2e905bc6 100644 --- a/workflow-parser/src/templates/schema/sequence-definition.ts +++ b/workflow-parser/src/templates/schema/sequence-definition.ts @@ -1,8 +1,8 @@ -import {DEFINITION, SEQUENCE, ITEM_TYPE} from "../template-constants"; -import {MappingToken} from "../tokens"; -import {Definition} from "./definition"; -import {DefinitionType} from "./definition-type"; -import {TemplateSchema} from "./template-schema"; +import {DEFINITION, SEQUENCE, ITEM_TYPE} from "../template-constants.js"; +import {MappingToken} from "../tokens/index.js"; +import {Definition} from "./definition.js"; +import {DefinitionType} from "./definition-type.js"; +import {TemplateSchema} from "./template-schema.js"; export class SequenceDefinition extends Definition { public itemType = ""; diff --git a/workflow-parser/src/templates/schema/string-definition.ts b/workflow-parser/src/templates/schema/string-definition.ts index 48edb14b..0732b05e 100644 --- a/workflow-parser/src/templates/schema/string-definition.ts +++ b/workflow-parser/src/templates/schema/string-definition.ts @@ -1,8 +1,8 @@ -import {CONSTANT, DEFINITION, IGNORE_CASE, IS_EXPRESSION, REQUIRE_NON_EMPTY, STRING} from "../template-constants"; -import {LiteralToken, MappingToken, StringToken} from "../tokens"; -import {TokenType} from "../tokens/types"; -import {DefinitionType} from "./definition-type"; -import {ScalarDefinition} from "./scalar-definition"; +import {CONSTANT, DEFINITION, IGNORE_CASE, IS_EXPRESSION, REQUIRE_NON_EMPTY, STRING} from "../template-constants.js"; +import {LiteralToken, MappingToken, StringToken} from "../tokens/index.js"; +import {TokenType} from "../tokens/types.js"; +import {DefinitionType} from "./definition-type.js"; +import {ScalarDefinition} from "./scalar-definition.js"; export class StringDefinition extends ScalarDefinition { public constant = ""; diff --git a/workflow-parser/src/templates/schema/template-schema.ts b/workflow-parser/src/templates/schema/template-schema.ts index ca78670e..c6d78ddc 100644 --- a/workflow-parser/src/templates/schema/template-schema.ts +++ b/workflow-parser/src/templates/schema/template-schema.ts @@ -1,5 +1,5 @@ -import {TokenType} from "../../templates/tokens/types"; -import {ObjectReader} from "../object-reader"; +import {TokenType} from "../../templates/tokens/types.js"; +import {ObjectReader} from "../object-reader.js"; import { ALLOWED_VALUES, ANY, @@ -43,22 +43,22 @@ import { TEMPLATE_SCHEMA, TYPE, VERSION -} from "../template-constants"; -import {TemplateContext, TemplateValidationErrors} from "../template-context"; -import {readTemplate} from "../template-reader"; -import {MappingToken, SequenceToken, StringToken} from "../tokens"; -import {NoOperationTraceWriter} from "../trace-writer"; -import {BooleanDefinition} from "./boolean-definition"; -import {Definition} from "./definition"; -import {DefinitionType} from "./definition-type"; -import {MappingDefinition} from "./mapping-definition"; -import {NullDefinition} from "./null-definition"; -import {NumberDefinition} from "./number-definition"; -import {OneOfDefinition} from "./one-of-definition"; -import {PropertyDefinition} from "./property-definition"; -import {ScalarDefinition} from "./scalar-definition"; -import {SequenceDefinition} from "./sequence-definition"; -import {StringDefinition} from "./string-definition"; +} from "../template-constants.js"; +import {TemplateContext, TemplateValidationErrors} from "../template-context.js"; +import {readTemplate} from "../template-reader.js"; +import {MappingToken, SequenceToken, StringToken} from "../tokens/index.js"; +import {NoOperationTraceWriter} from "../trace-writer.js"; +import {BooleanDefinition} from "./boolean-definition.js"; +import {Definition} from "./definition.js"; +import {DefinitionType} from "./definition-type.js"; +import {MappingDefinition} from "./mapping-definition.js"; +import {NullDefinition} from "./null-definition.js"; +import {NumberDefinition} from "./number-definition.js"; +import {OneOfDefinition} from "./one-of-definition.js"; +import {PropertyDefinition} from "./property-definition.js"; +import {ScalarDefinition} from "./scalar-definition.js"; +import {SequenceDefinition} from "./sequence-definition.js"; +import {StringDefinition} from "./string-definition.js"; /** * This models the root schema object and contains definitions diff --git a/workflow-parser/src/templates/template-context.ts b/workflow-parser/src/templates/template-context.ts index a1a8f9dc..0fd4e7ad 100644 --- a/workflow-parser/src/templates/template-context.ts +++ b/workflow-parser/src/templates/template-context.ts @@ -1,10 +1,10 @@ import {FunctionInfo} from "@actions/expressions/funcs/info"; -import {TemplateSchema} from "./schema/template-schema"; -import {TemplateValidationError} from "./template-validation-error"; -import {TemplateToken} from "./tokens"; -import {TokenRange} from "./tokens/token-range"; -import {TraceWriter} from "./trace-writer"; +import {TemplateSchema} from "./schema/template-schema.js"; +import {TemplateValidationError} from "./template-validation-error.js"; +import {TemplateToken} from "./tokens/index.js"; +import {TokenRange} from "./tokens/token-range.js"; +import {TraceWriter} from "./trace-writer.js"; /** * Context object that is flowed through while loading and evaluating object templates */ diff --git a/workflow-parser/src/templates/template-reader.ts b/workflow-parser/src/templates/template-reader.ts index 44bce6fb..462dcb97 100644 --- a/workflow-parser/src/templates/template-reader.ts +++ b/workflow-parser/src/templates/template-reader.ts @@ -1,15 +1,15 @@ // template-reader *just* does schema validation /* eslint-disable @typescript-eslint/no-non-null-assertion */ -import {ObjectReader} from "./object-reader"; -import {TemplateSchema} from "./schema"; -import {DefinitionInfo} from "./schema/definition-info"; -import {DefinitionType} from "./schema/definition-type"; -import {MappingDefinition} from "./schema/mapping-definition"; -import {ScalarDefinition} from "./schema/scalar-definition"; -import {SequenceDefinition} from "./schema/sequence-definition"; -import {ANY, CLOSE_EXPRESSION, INSERT_DIRECTIVE, OPEN_EXPRESSION} from "./template-constants"; -import {TemplateContext} from "./template-context"; +import {ObjectReader} from "./object-reader.js"; +import {TemplateSchema} from "./schema/index.js"; +import {DefinitionInfo} from "./schema/definition-info.js"; +import {DefinitionType} from "./schema/definition-type.js"; +import {MappingDefinition} from "./schema/mapping-definition.js"; +import {ScalarDefinition} from "./schema/scalar-definition.js"; +import {SequenceDefinition} from "./schema/sequence-definition.js"; +import {ANY, CLOSE_EXPRESSION, INSERT_DIRECTIVE, OPEN_EXPRESSION} from "./template-constants.js"; +import {TemplateContext} from "./template-context.js"; import { BasicExpressionToken, ExpressionToken, @@ -19,10 +19,10 @@ import { ScalarToken, StringToken, TemplateToken -} from "./tokens"; -import {TokenRange} from "./tokens/token-range"; -import {isString} from "./tokens/type-guards"; -import {TokenType} from "./tokens/types"; +} from "./tokens/index.js"; +import {TokenRange} from "./tokens/token-range.js"; +import {isString} from "./tokens/type-guards.js"; +import {TokenType} from "./tokens/types.js"; const WHITESPACE_PATTERN = /\s/; diff --git a/workflow-parser/src/templates/template-validation-error.ts b/workflow-parser/src/templates/template-validation-error.ts index 06a35c43..4ffa04f4 100644 --- a/workflow-parser/src/templates/template-validation-error.ts +++ b/workflow-parser/src/templates/template-validation-error.ts @@ -1,4 +1,4 @@ -import {TokenRange} from "./tokens/token-range"; +import {TokenRange} from "./tokens/token-range.js"; /** * Provides information about an error which occurred during validation diff --git a/workflow-parser/src/templates/tokens/basic-expression-token.ts b/workflow-parser/src/templates/tokens/basic-expression-token.ts index 01c7a448..e264c938 100644 --- a/workflow-parser/src/templates/tokens/basic-expression-token.ts +++ b/workflow-parser/src/templates/tokens/basic-expression-token.ts @@ -1,12 +1,12 @@ -import {DefinitionInfo} from "../schema/definition-info"; +import {DefinitionInfo} from "../schema/definition-info.js"; -import {CLOSE_EXPRESSION, OPEN_EXPRESSION} from "../template-constants"; -import {ExpressionToken} from "./expression-token"; -import {ScalarToken} from "./scalar-token"; -import {SerializedExpressionToken} from "./serialization"; -import {TemplateToken} from "./template-token"; -import {TokenRange} from "./token-range"; -import {TokenType} from "./types"; +import {CLOSE_EXPRESSION, OPEN_EXPRESSION} from "../template-constants.js"; +import {ExpressionToken} from "./expression-token.js"; +import {ScalarToken} from "./scalar-token.js"; +import {SerializedExpressionToken} from "./serialization.js"; +import {TemplateToken} from "./template-token.js"; +import {TokenRange} from "./token-range.js"; +import {TokenType} from "./types.js"; export class BasicExpressionToken extends ExpressionToken { private readonly expr: string; diff --git a/workflow-parser/src/templates/tokens/boolean-token.ts b/workflow-parser/src/templates/tokens/boolean-token.ts index 8edc342b..a4c7d34c 100644 --- a/workflow-parser/src/templates/tokens/boolean-token.ts +++ b/workflow-parser/src/templates/tokens/boolean-token.ts @@ -1,7 +1,7 @@ -import {LiteralToken, TemplateToken} from "."; -import {DefinitionInfo} from "../schema/definition-info"; -import {TokenRange} from "./token-range"; -import {TokenType} from "./types"; +import {LiteralToken, TemplateToken} from "./index.js"; +import {DefinitionInfo} from "../schema/definition-info.js"; +import {TokenRange} from "./token-range.js"; +import {TokenType} from "./types.js"; export class BooleanToken extends LiteralToken { private readonly bool: boolean; diff --git a/workflow-parser/src/templates/tokens/expression-token.ts b/workflow-parser/src/templates/tokens/expression-token.ts index db97e66a..14d6d156 100644 --- a/workflow-parser/src/templates/tokens/expression-token.ts +++ b/workflow-parser/src/templates/tokens/expression-token.ts @@ -1,8 +1,8 @@ import {Lexer, Parser} from "@actions/expressions"; -import {splitAllowedContext} from "../allowed-context"; -import {DefinitionInfo} from "../schema/definition-info"; -import {ScalarToken} from "./scalar-token"; -import {TokenRange} from "./token-range"; +import {splitAllowedContext} from "../allowed-context.js"; +import {DefinitionInfo} from "../schema/definition-info.js"; +import {ScalarToken} from "./scalar-token.js"; +import {TokenRange} from "./token-range.js"; export abstract class ExpressionToken extends ScalarToken { public readonly directive: string | undefined; diff --git a/workflow-parser/src/templates/tokens/index.ts b/workflow-parser/src/templates/tokens/index.ts index b69fd133..1202fa4b 100644 --- a/workflow-parser/src/templates/tokens/index.ts +++ b/workflow-parser/src/templates/tokens/index.ts @@ -1,13 +1,13 @@ -export {TemplateToken} from "./template-token"; -export {ScalarToken} from "./scalar-token"; -export {LiteralToken} from "./literal-token"; -export {StringToken} from "./string-token"; -export {NumberToken} from "./number-token"; -export {BooleanToken} from "./boolean-token"; -export {NullToken} from "./null-token"; -export {KeyValuePair} from "./key-value-pair"; -export {SequenceToken} from "./sequence-token"; -export {MappingToken} from "./mapping-token"; -export {ExpressionToken} from "./expression-token"; -export {BasicExpressionToken} from "./basic-expression-token"; -export {InsertExpressionToken} from "./insert-expression-token"; +export {TemplateToken} from "./template-token.js"; +export {ScalarToken} from "./scalar-token.js"; +export {LiteralToken} from "./literal-token.js"; +export {StringToken} from "./string-token.js"; +export {NumberToken} from "./number-token.js"; +export {BooleanToken} from "./boolean-token.js"; +export {NullToken} from "./null-token.js"; +export {KeyValuePair} from "./key-value-pair.js"; +export {SequenceToken} from "./sequence-token.js"; +export {MappingToken} from "./mapping-token.js"; +export {ExpressionToken} from "./expression-token.js"; +export {BasicExpressionToken} from "./basic-expression-token.js"; +export {InsertExpressionToken} from "./insert-expression-token.js"; diff --git a/workflow-parser/src/templates/tokens/insert-expression-token.ts b/workflow-parser/src/templates/tokens/insert-expression-token.ts index 281ce720..eee18dc4 100644 --- a/workflow-parser/src/templates/tokens/insert-expression-token.ts +++ b/workflow-parser/src/templates/tokens/insert-expression-token.ts @@ -1,9 +1,9 @@ -import {TemplateToken, ScalarToken, ExpressionToken} from "."; -import {DefinitionInfo} from "../schema/definition-info"; -import {INSERT_DIRECTIVE, OPEN_EXPRESSION, CLOSE_EXPRESSION} from "../template-constants"; -import {SerializedExpressionToken} from "./serialization"; -import {TokenRange} from "./token-range"; -import {TokenType} from "./types"; +import {TemplateToken, ScalarToken, ExpressionToken} from "./index.js"; +import {DefinitionInfo} from "../schema/definition-info.js"; +import {INSERT_DIRECTIVE, OPEN_EXPRESSION, CLOSE_EXPRESSION} from "../template-constants.js"; +import {SerializedExpressionToken} from "./serialization.js"; +import {TokenRange} from "./token-range.js"; +import {TokenType} from "./types.js"; export class InsertExpressionToken extends ExpressionToken { public constructor( diff --git a/workflow-parser/src/templates/tokens/key-value-pair.ts b/workflow-parser/src/templates/tokens/key-value-pair.ts index 82a8de41..1890118d 100644 --- a/workflow-parser/src/templates/tokens/key-value-pair.ts +++ b/workflow-parser/src/templates/tokens/key-value-pair.ts @@ -1,5 +1,5 @@ -import {ScalarToken} from "./scalar-token"; -import {TemplateToken} from "./template-token"; +import {ScalarToken} from "./scalar-token.js"; +import {TemplateToken} from "./template-token.js"; export class KeyValuePair { public readonly key: ScalarToken; diff --git a/workflow-parser/src/templates/tokens/literal-token.ts b/workflow-parser/src/templates/tokens/literal-token.ts index 9ad03c0e..0d8b49a0 100644 --- a/workflow-parser/src/templates/tokens/literal-token.ts +++ b/workflow-parser/src/templates/tokens/literal-token.ts @@ -1,6 +1,6 @@ -import {DefinitionInfo} from "../schema/definition-info"; -import {ScalarToken} from "./scalar-token"; -import {TokenRange} from "./token-range"; +import {DefinitionInfo} from "../schema/definition-info.js"; +import {ScalarToken} from "./scalar-token.js"; +import {TokenRange} from "./token-range.js"; export abstract class LiteralToken extends ScalarToken { public constructor( diff --git a/workflow-parser/src/templates/tokens/mapping-token.ts b/workflow-parser/src/templates/tokens/mapping-token.ts index 6f1d4113..094bd887 100644 --- a/workflow-parser/src/templates/tokens/mapping-token.ts +++ b/workflow-parser/src/templates/tokens/mapping-token.ts @@ -1,8 +1,8 @@ -import {TemplateToken, KeyValuePair, ScalarToken} from "."; -import {DefinitionInfo} from "../schema/definition-info"; -import {MapItem, SerializedToken} from "./serialization"; -import {TokenRange} from "./token-range"; -import {TokenType} from "./types"; +import {TemplateToken, KeyValuePair, ScalarToken} from "./index.js"; +import {DefinitionInfo} from "../schema/definition-info.js"; +import {MapItem, SerializedToken} from "./serialization.js"; +import {TokenRange} from "./token-range.js"; +import {TokenType} from "./types.js"; export class MappingToken extends TemplateToken { private readonly map: KeyValuePair[] = []; diff --git a/workflow-parser/src/templates/tokens/null-token.ts b/workflow-parser/src/templates/tokens/null-token.ts index 11fabda5..4606a41d 100644 --- a/workflow-parser/src/templates/tokens/null-token.ts +++ b/workflow-parser/src/templates/tokens/null-token.ts @@ -1,7 +1,7 @@ -import {LiteralToken, TemplateToken} from "."; -import {DefinitionInfo} from "../schema/definition-info"; -import {TokenRange} from "./token-range"; -import {TokenType} from "./types"; +import {LiteralToken, TemplateToken} from "./index.js"; +import {DefinitionInfo} from "../schema/definition-info.js"; +import {TokenRange} from "./token-range.js"; +import {TokenType} from "./types.js"; export class NullToken extends LiteralToken { public constructor( diff --git a/workflow-parser/src/templates/tokens/number-token.ts b/workflow-parser/src/templates/tokens/number-token.ts index 1f0c8b22..d17a8bb4 100644 --- a/workflow-parser/src/templates/tokens/number-token.ts +++ b/workflow-parser/src/templates/tokens/number-token.ts @@ -1,7 +1,7 @@ -import {LiteralToken, TemplateToken} from "."; -import {DefinitionInfo} from "../schema/definition-info"; -import {TokenRange} from "./token-range"; -import {TokenType} from "./types"; +import {LiteralToken, TemplateToken} from "./index.js"; +import {DefinitionInfo} from "../schema/definition-info.js"; +import {TokenRange} from "./token-range.js"; +import {TokenType} from "./types.js"; export class NumberToken extends LiteralToken { private readonly num: number; diff --git a/workflow-parser/src/templates/tokens/scalar-token.ts b/workflow-parser/src/templates/tokens/scalar-token.ts index e8ab08eb..0579343f 100644 --- a/workflow-parser/src/templates/tokens/scalar-token.ts +++ b/workflow-parser/src/templates/tokens/scalar-token.ts @@ -1,6 +1,6 @@ -import {DefinitionInfo} from "../schema/definition-info"; -import {TemplateToken} from "./template-token"; -import {TokenRange} from "./token-range"; +import {DefinitionInfo} from "../schema/definition-info.js"; +import {TemplateToken} from "./template-token.js"; +import {TokenRange} from "./token-range.js"; /** * Base class for everything that is not a mapping or sequence diff --git a/workflow-parser/src/templates/tokens/sequence-token.ts b/workflow-parser/src/templates/tokens/sequence-token.ts index 38bcdd6a..6481a057 100644 --- a/workflow-parser/src/templates/tokens/sequence-token.ts +++ b/workflow-parser/src/templates/tokens/sequence-token.ts @@ -1,8 +1,8 @@ -import {TemplateToken} from "."; -import {DefinitionInfo} from "../schema/definition-info"; -import {SerializedSequenceToken} from "./serialization"; -import {TokenRange} from "./token-range"; -import {TokenType} from "./types"; +import {TemplateToken} from "./index.js"; +import {DefinitionInfo} from "../schema/definition-info.js"; +import {SerializedSequenceToken} from "./serialization.js"; +import {TokenRange} from "./token-range.js"; +import {TokenType} from "./types.js"; export class SequenceToken extends TemplateToken { private readonly seq: TemplateToken[] = []; diff --git a/workflow-parser/src/templates/tokens/serialization.ts b/workflow-parser/src/templates/tokens/serialization.ts index 3e10bbf0..7f1ab9ef 100644 --- a/workflow-parser/src/templates/tokens/serialization.ts +++ b/workflow-parser/src/templates/tokens/serialization.ts @@ -1,6 +1,6 @@ -import {ScalarToken} from "./scalar-token"; -import {TemplateToken} from "./template-token"; -import {TokenType} from "./types"; +import {ScalarToken} from "./scalar-token.js"; +import {TemplateToken} from "./template-token.js"; +import {TokenType} from "./types.js"; export type MapItem = { Key: ScalarToken; diff --git a/workflow-parser/src/templates/tokens/string-token.ts b/workflow-parser/src/templates/tokens/string-token.ts index bc32d654..998ddab8 100644 --- a/workflow-parser/src/templates/tokens/string-token.ts +++ b/workflow-parser/src/templates/tokens/string-token.ts @@ -1,7 +1,7 @@ -import {LiteralToken, TemplateToken} from "."; -import {DefinitionInfo} from "../schema/definition-info"; -import {TokenRange} from "./token-range"; -import {TokenType} from "./types"; +import {LiteralToken, TemplateToken} from "./index.js"; +import {DefinitionInfo} from "../schema/definition-info.js"; +import {TokenRange} from "./token-range.js"; +import {TokenType} from "./types.js"; export class StringToken extends LiteralToken { public readonly value: string; diff --git a/workflow-parser/src/templates/tokens/template-token.test.ts b/workflow-parser/src/templates/tokens/template-token.test.ts index a0acdcf9..79e3680b 100644 --- a/workflow-parser/src/templates/tokens/template-token.test.ts +++ b/workflow-parser/src/templates/tokens/template-token.test.ts @@ -1,8 +1,8 @@ /* eslint-disable @typescript-eslint/no-non-null-assertion, @typescript-eslint/no-unnecessary-type-assertion */ -import {nullTrace} from "../../test-utils/null-trace"; -import {parseWorkflow} from "../../workflows/workflow-parser"; -import {StringToken} from "./string-token"; -import {TemplateToken} from "./template-token"; +import {nullTrace} from "../../test-utils/null-trace.js"; +import {parseWorkflow} from "../../workflows/workflow-parser.js"; +import {StringToken} from "./string-token.js"; +import {TemplateToken} from "./template-token.js"; describe("traverse", () => { it("returns parent token and key", () => { diff --git a/workflow-parser/src/templates/tokens/template-token.ts b/workflow-parser/src/templates/tokens/template-token.ts index 9aab233e..36f067e3 100644 --- a/workflow-parser/src/templates/tokens/template-token.ts +++ b/workflow-parser/src/templates/tokens/template-token.ts @@ -1,11 +1,11 @@ -import {BooleanToken, MappingToken, NullToken, NumberToken, ScalarToken, SequenceToken, StringToken} from "."; -import {Definition} from "../schema/definition"; -import {DefinitionInfo} from "../schema/definition-info"; -import {PropertyDefinition} from "../schema/property-definition"; -import {SerializedToken} from "./serialization"; -import {TokenRange} from "./token-range"; -import {TraversalState} from "./traversal-state"; -import {TokenType, tokenTypeName} from "./types"; +import {BooleanToken, MappingToken, NullToken, NumberToken, ScalarToken, SequenceToken, StringToken} from "./index.js"; +import {Definition} from "../schema/definition.js"; +import {DefinitionInfo} from "../schema/definition-info.js"; +import {PropertyDefinition} from "../schema/property-definition.js"; +import {SerializedToken} from "./serialization.js"; +import {TokenRange} from "./token-range.js"; +import {TraversalState} from "./traversal-state.js"; +import {TokenType, tokenTypeName} from "./types.js"; export class TemplateTokenError extends Error { constructor(message: string, public readonly token?: TemplateToken) { diff --git a/workflow-parser/src/templates/tokens/traversal-state.ts b/workflow-parser/src/templates/tokens/traversal-state.ts index 00573038..523e980b 100644 --- a/workflow-parser/src/templates/tokens/traversal-state.ts +++ b/workflow-parser/src/templates/tokens/traversal-state.ts @@ -1,7 +1,7 @@ -import {TemplateToken} from "."; -import {MappingToken} from "./mapping-token"; -import {SequenceToken} from "./sequence-token"; -import {TokenType} from "./types"; +import {TemplateToken} from "./index.js"; +import {MappingToken} from "./mapping-token.js"; +import {SequenceToken} from "./sequence-token.js"; +import {TokenType} from "./types.js"; export class TraversalState { private readonly _token: TemplateToken; diff --git a/workflow-parser/src/templates/tokens/type-guards.ts b/workflow-parser/src/templates/tokens/type-guards.ts index cf2b4356..1ef38a65 100644 --- a/workflow-parser/src/templates/tokens/type-guards.ts +++ b/workflow-parser/src/templates/tokens/type-guards.ts @@ -1,13 +1,13 @@ -import {BasicExpressionToken} from "./basic-expression-token"; -import {BooleanToken} from "./boolean-token"; -import {LiteralToken} from "./literal-token"; -import {MappingToken} from "./mapping-token"; -import {NumberToken} from "./number-token"; -import {ScalarToken} from "./scalar-token"; -import {SequenceToken} from "./sequence-token"; -import {StringToken} from "./string-token"; -import {TemplateToken} from "./template-token"; -import {TokenType} from "./types"; +import {BasicExpressionToken} from "./basic-expression-token.js"; +import {BooleanToken} from "./boolean-token.js"; +import {LiteralToken} from "./literal-token.js"; +import {MappingToken} from "./mapping-token.js"; +import {NumberToken} from "./number-token.js"; +import {ScalarToken} from "./scalar-token.js"; +import {SequenceToken} from "./sequence-token.js"; +import {StringToken} from "./string-token.js"; +import {TemplateToken} from "./template-token.js"; +import {TokenType} from "./types.js"; export function isLiteral(t: TemplateToken): t is LiteralToken { return t.isLiteral; diff --git a/workflow-parser/src/test-utils/null-trace.ts b/workflow-parser/src/test-utils/null-trace.ts index b291500b..e97715bf 100644 --- a/workflow-parser/src/test-utils/null-trace.ts +++ b/workflow-parser/src/test-utils/null-trace.ts @@ -1,3 +1,3 @@ -import {NoOperationTraceWriter} from "../templates/trace-writer"; +import {NoOperationTraceWriter} from "../templates/trace-writer.js"; export const nullTrace = new NoOperationTraceWriter(); diff --git a/workflow-parser/src/workflows/file-provider.ts b/workflow-parser/src/workflows/file-provider.ts index 097d4649..b5ad800b 100644 --- a/workflow-parser/src/workflows/file-provider.ts +++ b/workflow-parser/src/workflows/file-provider.ts @@ -1,5 +1,5 @@ -import {File} from "./file"; -import {FileReference} from "./file-reference"; +import {File} from "./file.js"; +import {FileReference} from "./file-reference.js"; export interface FileProvider { getFileContent(ref: FileReference): Promise; diff --git a/workflow-parser/src/workflows/file-reference.test.ts b/workflow-parser/src/workflows/file-reference.test.ts index f1cff01d..6a47d76b 100644 --- a/workflow-parser/src/workflows/file-reference.test.ts +++ b/workflow-parser/src/workflows/file-reference.test.ts @@ -1,4 +1,4 @@ -import {parseFileReference} from "./file-reference"; +import {parseFileReference} from "./file-reference.js"; describe("parseFileReference", () => { it("parses local file reference", () => { diff --git a/workflow-parser/src/workflows/workflow-parser.test.ts b/workflow-parser/src/workflows/workflow-parser.test.ts index a4d587a9..a8590ca8 100644 --- a/workflow-parser/src/workflows/workflow-parser.test.ts +++ b/workflow-parser/src/workflows/workflow-parser.test.ts @@ -1,5 +1,5 @@ -import {parseWorkflow} from "./workflow-parser"; -import {nullTrace} from "../test-utils/null-trace"; +import {parseWorkflow} from "./workflow-parser.js"; +import {nullTrace} from "../test-utils/null-trace.js"; it("The template is not read when there are YAML errors", () => { const content = ` diff --git a/workflow-parser/src/workflows/workflow-parser.ts b/workflow-parser/src/workflows/workflow-parser.ts index 1710a3e0..e2b1c5c6 100644 --- a/workflow-parser/src/workflows/workflow-parser.ts +++ b/workflow-parser/src/workflows/workflow-parser.ts @@ -1,11 +1,11 @@ -import {TemplateContext, TemplateValidationErrors} from "../templates/template-context"; -import * as templateReader from "../templates/template-reader"; -import {TemplateToken} from "../templates/tokens/template-token"; -import {TraceWriter} from "../templates/trace-writer"; -import {File} from "./file"; -import {WORKFLOW_ROOT} from "./workflow-constants"; -import {getWorkflowSchema} from "./workflow-schema"; -import {YamlObjectReader} from "./yaml-object-reader"; +import {TemplateContext, TemplateValidationErrors} from "../templates/template-context.js"; +import * as templateReader from "../templates/template-reader.js"; +import {TemplateToken} from "../templates/tokens/template-token.js"; +import {TraceWriter} from "../templates/trace-writer.js"; +import {File} from "./file.js"; +import {WORKFLOW_ROOT} from "./workflow-constants.js"; +import {getWorkflowSchema} from "./workflow-schema.js"; +import {YamlObjectReader} from "./yaml-object-reader.js"; export interface ParseWorkflowResult { context: TemplateContext; value: TemplateToken | undefined; diff --git a/workflow-parser/src/workflows/workflow-schema.ts b/workflow-parser/src/workflows/workflow-schema.ts index 5ffe5b0d..8cd3625f 100644 --- a/workflow-parser/src/workflows/workflow-schema.ts +++ b/workflow-parser/src/workflows/workflow-schema.ts @@ -1,5 +1,5 @@ -import {JSONObjectReader} from "../templates/json-object-reader"; -import {TemplateSchema} from "../templates/schema"; +import {JSONObjectReader} from "../templates/json-object-reader.js"; +import {TemplateSchema} from "../templates/schema/index.js"; import WorkflowSchema from "../workflow-v1.0.min.json"; let schema: TemplateSchema; diff --git a/workflow-parser/src/workflows/yaml-object-reader.test.ts b/workflow-parser/src/workflows/yaml-object-reader.test.ts index 9b767efe..9279656f 100644 --- a/workflow-parser/src/workflows/yaml-object-reader.test.ts +++ b/workflow-parser/src/workflows/yaml-object-reader.test.ts @@ -1,10 +1,10 @@ -import {TemplateContext, TemplateValidationErrors} from "../templates/template-context"; -import {TemplateToken} from "../templates/tokens"; -import {TokenType} from "../templates/tokens/types"; -import {nullTrace} from "../test-utils/null-trace"; -import {parseWorkflow} from "./workflow-parser"; -import {getWorkflowSchema} from "./workflow-schema"; -import {YamlObjectReader} from "./yaml-object-reader"; +import {TemplateContext, TemplateValidationErrors} from "../templates/template-context.js"; +import {TemplateToken} from "../templates/tokens/index.js"; +import {TokenType} from "../templates/tokens/types.js"; +import {nullTrace} from "../test-utils/null-trace.js"; +import {parseWorkflow} from "./workflow-parser.js"; +import {getWorkflowSchema} from "./workflow-schema.js"; +import {YamlObjectReader} from "./yaml-object-reader.js"; describe("getLiteralToken", () => { it("non-zero number", () => { diff --git a/workflow-parser/src/workflows/yaml-object-reader.ts b/workflow-parser/src/workflows/yaml-object-reader.ts index dc8fbfb2..eb0d76e5 100644 --- a/workflow-parser/src/workflows/yaml-object-reader.ts +++ b/workflow-parser/src/workflows/yaml-object-reader.ts @@ -11,10 +11,8 @@ import { Scalar } from "yaml"; import type {Document} from "yaml"; -import type {LinePos} from "yaml/dist/errors"; -import type {NodeBase} from "yaml/dist/nodes/Node"; -import {ObjectReader} from "../templates/object-reader"; -import {EventType, ParseEvent} from "../templates/parse-event"; +import {ObjectReader} from "../templates/object-reader.js"; +import {EventType, ParseEvent} from "../templates/parse-event.js"; import { BooleanToken, LiteralToken, @@ -23,8 +21,12 @@ import { NumberToken, SequenceToken, StringToken -} from "../templates/tokens/index"; -import {Position, TokenRange} from "../templates/tokens/token-range"; +} from "../templates/tokens/index.js"; +import {Position, TokenRange} from "../templates/tokens/token-range.js"; + +// Internal yaml types - defined locally since yaml package doesn't export them +type LinePos = {line: number; col: number}; +type NodeBase = {range?: [number, number, number] | null}; export type YamlError = { message: string; diff --git a/workflow-parser/src/xlang.test.ts b/workflow-parser/src/xlang.test.ts index c07bdbc6..5b4f76e8 100644 --- a/workflow-parser/src/xlang.test.ts +++ b/workflow-parser/src/xlang.test.ts @@ -1,12 +1,12 @@ import * as fs from "fs"; import * as path from "path"; import * as YAML from "yaml"; -import {convertWorkflowTemplate} from "./model/convert"; -import {NoOperationTraceWriter} from "./templates/trace-writer"; -import {File} from "./workflows/file"; -import {FileProvider} from "./workflows/file-provider"; -import {fileIdentifier, FileReference} from "./workflows/file-reference"; -import {parseWorkflow} from "./workflows/workflow-parser"; +import {convertWorkflowTemplate} from "./model/convert.js"; +import {NoOperationTraceWriter} from "./templates/trace-writer.js"; +import {File} from "./workflows/file.js"; +import {FileProvider} from "./workflows/file-provider.js"; +import {fileIdentifier, FileReference} from "./workflows/file-reference.js"; +import {parseWorkflow} from "./workflows/workflow-parser.js"; interface TestOptions { "include-source"?: boolean; diff --git a/workflow-parser/tsconfig.build.json b/workflow-parser/tsconfig.build.json index 88bdfa83..7ed02690 100644 --- a/workflow-parser/tsconfig.build.json +++ b/workflow-parser/tsconfig.build.json @@ -2,9 +2,12 @@ "exclude": ["./src/**/*.test.ts"], "extends": "./tsconfig.json", "compilerOptions": { + "module": "node16", + "moduleResolution": "node16", "declaration": true, "declarationMap": true, "noEmit": false, - "outDir": "./dist" + "outDir": "./dist", + "skipLibCheck": true } }