diff --git a/.eslintrc.json b/.eslintrc.json index 585cb984..76fdd603 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -11,7 +11,36 @@ "@typescript-eslint/no-namespace": "off", "@typescript-eslint/no-empty-object-type": "off", "no-console": "warn", - "require-yield": "off" + "require-yield": "off", + "no-restricted-imports": [ + "error", + { + "patterns": [ + { + "group": ["../types/*/index*", "../types/*/index"], + "message": "Use #types/* alias instead of relative imports" + }, + { + "group": [ + "../materials/*", + "../data/*", + "../pointer/*", + "../program/*", + "../type/*" + ], + "message": "Use #types/* alias instead of relative imports" + }, + { + "group": ["../../test/*", "../../../test/*"], + "message": "Use #test/* alias instead of relative imports" + }, + { + "group": ["../describe*"], + "message": "Use #describe alias instead of relative imports" + } + ] + } + ] }, "env": { "node": true, diff --git a/packages/format/package.json b/packages/format/package.json index c9bec377..2738fe9a 100644 --- a/packages/format/package.json +++ b/packages/format/package.json @@ -9,6 +9,41 @@ "files": [ "dist" ], + "imports": { + "#describe": { + "types": "./src/describe.ts", + "default": "./dist/src/describe.js" + }, + "#schemas": { + "types": "./src/schemas/index.ts", + "default": "./dist/src/schemas/index.js" + }, + "#types": { + "types": "./src/types/index.ts", + "default": "./dist/src/types/index.js" + }, + "#types/data": { + "types": "./src/types/data/index.ts", + "default": "./dist/src/types/data/index.js" + }, + "#types/materials": { + "types": "./src/types/materials/index.ts", + "default": "./dist/src/types/materials/index.js" + }, + "#types/pointer": { + "types": "./src/types/pointer/index.ts", + "default": "./dist/src/types/pointer/index.js" + }, + "#types/program": { + "types": "./src/types/program/index.ts", + "default": "./dist/src/types/program/index.js" + }, + "#types/type": { + "types": "./src/types/type/index.ts", + "default": "./dist/src/types/type/index.js" + }, + "#test/*": "./test/*.ts" + }, "scripts": { "prepare:yamls": "node ./bin/generate-schema-yamls.js", "prepare": "yarn prepare:yamls && tsc", diff --git a/packages/format/src/index.ts b/packages/format/src/index.ts index 45840f0f..e39b6f9b 100644 --- a/packages/format/src/index.ts +++ b/packages/format/src/index.ts @@ -1,4 +1,4 @@ -export * from "./describe.js"; -export { schemas, schemaIds, type Schema } from "./schemas/index.js"; +export * from "#describe"; +export { schemas, schemaIds, type Schema } from "#schemas"; -export * from "./types/index.js"; +export * from "#types"; diff --git a/packages/format/src/schemas/examples.test.ts b/packages/format/src/schemas/examples.test.ts index a8224dbe..0b77fbd0 100644 --- a/packages/format/src/schemas/examples.test.ts +++ b/packages/format/src/schemas/examples.test.ts @@ -1,11 +1,11 @@ import { expect, describe, it } from "vitest"; -import { schemaExtensions } from "../../test/extensions.js"; +import { schemaExtensions } from "#test/extensions"; import { schemas } from "./index.js"; -import type { JSONSchema } from "../describe.js"; +import type { JSONSchema } from "#describe"; // loads schemas into global hyperjump json schema validator -import "../../test/hyperjump.js"; +import "#test/hyperjump"; const idsOfSchemasAllowedToOmitExamples = new Set([ "schema:ethdebug/format/type", diff --git a/packages/format/src/schemas/index.ts b/packages/format/src/schemas/index.ts index f1f9b2bd..fc62290f 100644 --- a/packages/format/src/schemas/index.ts +++ b/packages/format/src/schemas/index.ts @@ -1,4 +1,4 @@ -import { describeSchema } from "../describe.js"; +import { describeSchema } from "#describe"; import { schemaYamls } from "./yamls.js"; export type { Schema } from "./yamls.js"; diff --git a/packages/format/src/schemas/validity.test.ts b/packages/format/src/schemas/validity.test.ts index 109876f8..7d4fe72e 100644 --- a/packages/format/src/schemas/validity.test.ts +++ b/packages/format/src/schemas/validity.test.ts @@ -8,7 +8,7 @@ import { import { schemas } from "./index.js"; // loads schemas into global hyperjump json schema validator -import "../../test/hyperjump.js"; +import "#test/hyperjump"; const printErrors = (output: { errors?: OutputUnit[] }): string => output diff --git a/packages/format/src/types/data/index.test.ts b/packages/format/src/types/data/index.test.ts index 2a7cf75a..1060badc 100644 --- a/packages/format/src/types/data/index.test.ts +++ b/packages/format/src/types/data/index.test.ts @@ -1,4 +1,4 @@ -import { testSchemaGuards } from "../../../test/guards.js"; +import { testSchemaGuards } from "#test/guards"; import { Data } from "./index.js"; diff --git a/packages/format/src/types/index.ts b/packages/format/src/types/index.ts index 47bef942..2fe2bc29 100644 --- a/packages/format/src/types/index.ts +++ b/packages/format/src/types/index.ts @@ -1,5 +1,5 @@ -export * from "./data/index.js"; -export * from "./materials/index.js"; -export * from "./type/index.js"; -export * from "./pointer/index.js"; -export * from "./program/index.js"; +export * from "#types/data"; +export * from "#types/materials"; +export * from "#types/type"; +export * from "#types/pointer"; +export * from "#types/program"; diff --git a/packages/format/src/types/materials/index.test.ts b/packages/format/src/types/materials/index.test.ts index 0cd0ba34..99898519 100644 --- a/packages/format/src/types/materials/index.test.ts +++ b/packages/format/src/types/materials/index.test.ts @@ -1,4 +1,4 @@ -import { testSchemaGuards } from "../../../test/guards.js"; +import { testSchemaGuards } from "#test/guards"; import { Materials } from "./index.js"; testSchemaGuards("ethdebug/format/materials", [ diff --git a/packages/format/src/types/materials/index.ts b/packages/format/src/types/materials/index.ts index 1be38c48..db3b2513 100644 --- a/packages/format/src/types/materials/index.ts +++ b/packages/format/src/types/materials/index.ts @@ -1,4 +1,4 @@ -import { Data } from "../data/index.js"; +import { Data } from "#types/data"; export namespace Materials { export type Id = number | string; diff --git a/packages/format/src/types/pointer/pointer.test.ts b/packages/format/src/types/pointer/pointer.test.ts index 325b5dd7..eb2457a2 100644 --- a/packages/format/src/types/pointer/pointer.test.ts +++ b/packages/format/src/types/pointer/pointer.test.ts @@ -1,4 +1,4 @@ -import { testSchemaGuards } from "../../../test/guards.js"; +import { testSchemaGuards } from "#test/guards"; import { Pointer, isPointer } from "./pointer.js"; diff --git a/packages/format/src/types/program/context.test.ts b/packages/format/src/types/program/context.test.ts index cb182fe4..47185c7c 100644 --- a/packages/format/src/types/program/context.test.ts +++ b/packages/format/src/types/program/context.test.ts @@ -1,4 +1,4 @@ -import { testSchemaGuards } from "../../../test/guards.js"; +import { testSchemaGuards } from "#test/guards"; import { Context, isContext } from "./context.js"; testSchemaGuards("ethdebug/format/program/context", [ diff --git a/packages/format/src/types/program/context.ts b/packages/format/src/types/program/context.ts index ebef4f52..6a552734 100644 --- a/packages/format/src/types/program/context.ts +++ b/packages/format/src/types/program/context.ts @@ -1,6 +1,6 @@ -import { Materials } from "../materials/index.js"; -import { Type, isType } from "../type/index.js"; -import { Pointer, isPointer } from "../pointer/index.js"; +import { Materials } from "#types/materials"; +import { Type, isType } from "#types/type"; +import { Pointer, isPointer } from "#types/pointer"; export type Context = | Context.Code diff --git a/packages/format/src/types/program/instruction.test.ts b/packages/format/src/types/program/instruction.test.ts index 1c5f694a..eb29b36f 100644 --- a/packages/format/src/types/program/instruction.test.ts +++ b/packages/format/src/types/program/instruction.test.ts @@ -1,4 +1,4 @@ -import { testSchemaGuards } from "../../../test/guards.js"; +import { testSchemaGuards } from "#test/guards"; import { isInstruction } from "./instruction.js"; testSchemaGuards("ethdebug/format/program/instruction", [ diff --git a/packages/format/src/types/program/instruction.ts b/packages/format/src/types/program/instruction.ts index 79223dbb..005d8c8e 100644 --- a/packages/format/src/types/program/instruction.ts +++ b/packages/format/src/types/program/instruction.ts @@ -1,4 +1,4 @@ -import { Data } from "../data/index.js"; +import { Data } from "#types/data"; import { Context, isContext } from "./context.js"; diff --git a/packages/format/src/types/program/program.test.ts b/packages/format/src/types/program/program.test.ts index cd74502e..75a5af96 100644 --- a/packages/format/src/types/program/program.test.ts +++ b/packages/format/src/types/program/program.test.ts @@ -1,4 +1,4 @@ -import { testSchemaGuards } from "../../../test/guards.js"; +import { testSchemaGuards } from "#test/guards"; import { isProgram } from "./program.js"; testSchemaGuards("ethdebug/format/program", [ diff --git a/packages/format/src/types/program/program.ts b/packages/format/src/types/program/program.ts index 2272baac..fdbd4c11 100644 --- a/packages/format/src/types/program/program.ts +++ b/packages/format/src/types/program/program.ts @@ -1,4 +1,4 @@ -import { Materials } from "../materials/index.js"; +import { Materials } from "#types/materials"; import { Context as _Context, isContext as _isContext } from "./context.js"; diff --git a/packages/format/src/types/type/base.test.ts b/packages/format/src/types/type/base.test.ts index dfc44568..685de7de 100644 --- a/packages/format/src/types/type/base.test.ts +++ b/packages/format/src/types/type/base.test.ts @@ -1,4 +1,4 @@ -import { testSchemaGuards } from "../../../test/guards.js"; +import { testSchemaGuards } from "#test/guards"; import * as Base from "./base.js"; testSchemaGuards("ethdebug/format/type/base", [ diff --git a/packages/format/src/types/type/index.test.ts b/packages/format/src/types/type/index.test.ts index 3af9b049..61a5349c 100644 --- a/packages/format/src/types/type/index.test.ts +++ b/packages/format/src/types/type/index.test.ts @@ -1,4 +1,4 @@ -import { testSchemaGuards } from "../../../test/guards.js"; +import { testSchemaGuards } from "#test/guards"; import { Type, isType } from "./index.js"; testSchemaGuards("ethdebug/format/type", [ diff --git a/packages/format/src/types/type/index.ts b/packages/format/src/types/type/index.ts index b3721a2d..c53d0230 100644 --- a/packages/format/src/types/type/index.ts +++ b/packages/format/src/types/type/index.ts @@ -1,5 +1,5 @@ -import { Data } from "../data/index.js"; -import { Materials } from "../materials/index.js"; +import { Data } from "#types/data"; +import { Materials } from "#types/materials"; import * as _Base from "./base.js"; diff --git a/packages/format/tsconfig.json b/packages/format/tsconfig.json index 52b9fef6..3f20c15a 100644 --- a/packages/format/tsconfig.json +++ b/packages/format/tsconfig.json @@ -6,7 +6,19 @@ "moduleResolution": "nodenext", "exactOptionalPropertyTypes": true, "rootDir": "./", - "outDir": "./dist/" + "outDir": "./dist/", + "baseUrl": "./", + "paths": { + "#describe": ["./src/describe"], + "#schemas": ["./src/schemas/index"], + "#types": ["./src/types/index"], + "#types/data": ["./src/types/data/index"], + "#types/materials": ["./src/types/materials/index"], + "#types/pointer": ["./src/types/pointer/index"], + "#types/program": ["./src/types/program/index"], + "#types/type": ["./src/types/type/index"], + "#test/*": ["./test/*"] + } }, "include": ["./src/**/*.ts", "./test/**/*.ts", "./*.ts"] } diff --git a/packages/pointers/package.json b/packages/pointers/package.json index 177d368e..7de1fa7a 100644 --- a/packages/pointers/package.json +++ b/packages/pointers/package.json @@ -5,6 +5,37 @@ "main": "dist/src/index.js", "type": "module", "license": "MIT", + "imports": { + "#cursor": { + "types": "./src/cursor.ts", + "default": "./dist/src/cursor.js" + }, + "#data": { + "types": "./src/data.ts", + "default": "./dist/src/data.js" + }, + "#evaluate": { + "types": "./src/evaluate.ts", + "default": "./dist/src/evaluate.js" + }, + "#machine": { + "types": "./src/machine.ts", + "default": "./dist/src/machine.js" + }, + "#read": { + "types": "./src/read.ts", + "default": "./dist/src/read.js" + }, + "#dereference": { + "types": "./src/dereference/index.ts", + "default": "./dist/src/dereference/index.js" + }, + "#dereference/*": { + "types": "./src/dereference/*.ts", + "default": "./dist/src/dereference/*.js" + }, + "#test/*": "./test/*.ts" + }, "scripts": { "run-example": "node ./dist/bin/run-example.js", "prepare": "tsc --build", diff --git a/packages/pointers/src/cursor.ts b/packages/pointers/src/cursor.ts index 4abb4532..56be57cd 100644 --- a/packages/pointers/src/cursor.ts +++ b/packages/pointers/src/cursor.ts @@ -1,6 +1,6 @@ import type { Pointer } from "@ethdebug/format"; -import type { Machine } from "./machine.js"; -import type { Data } from "./data.js"; +import type { Machine } from "#machine"; +import type { Data } from "#data"; /** * The result of dereferencing a pointer diff --git a/packages/pointers/src/dereference/cursor.ts b/packages/pointers/src/dereference/cursor.ts index 7b0b68b9..d84b5f1d 100644 --- a/packages/pointers/src/dereference/cursor.ts +++ b/packages/pointers/src/dereference/cursor.ts @@ -1,6 +1,6 @@ -import type { Machine } from "../machine.js"; -import type { Cursor } from "../cursor.js"; -import { read } from "../read.js"; +import type { Machine } from "#machine"; +import type { Cursor } from "#cursor"; +import { read } from "#read"; export function createCursor( simpleCursor: (state: Machine.State) => AsyncIterable, diff --git a/packages/pointers/src/dereference/generate.ts b/packages/pointers/src/dereference/generate.ts index 96d823fe..f6e1b522 100644 --- a/packages/pointers/src/dereference/generate.ts +++ b/packages/pointers/src/dereference/generate.ts @@ -1,7 +1,7 @@ import type { Pointer } from "@ethdebug/format"; -import type { Machine } from "../machine.js"; -import type { Cursor } from "../cursor.js"; -import type { Data } from "../data.js"; +import type { Machine } from "#machine"; +import type { Cursor } from "#cursor"; +import type { Data } from "#data"; import { Memo } from "./memo.js"; import { processPointer, type ProcessOptions } from "./process.js"; diff --git a/packages/pointers/src/dereference/index.test.ts b/packages/pointers/src/dereference/index.test.ts index 2799b752..b1514628 100644 --- a/packages/pointers/src/dereference/index.test.ts +++ b/packages/pointers/src/dereference/index.test.ts @@ -1,7 +1,7 @@ import { vitest, expect, describe, it, beforeEach } from "vitest"; import { Pointer } from "@ethdebug/format"; -import { Machine } from "../machine.js"; -import { Data } from "../data.js"; +import { Machine } from "#machine"; +import { Data } from "#data"; import { dereference } from "./index.js"; describe("dereference", () => { diff --git a/packages/pointers/src/dereference/index.ts b/packages/pointers/src/dereference/index.ts index cd3cd75d..8c6f5911 100644 --- a/packages/pointers/src/dereference/index.ts +++ b/packages/pointers/src/dereference/index.ts @@ -1,6 +1,6 @@ import type { Pointer } from "@ethdebug/format"; -import type { Machine } from "../machine.js"; -import type { Cursor } from "../cursor.js"; +import type { Machine } from "#machine"; +import type { Cursor } from "#cursor"; import { generateRegions, type GenerateRegionsOptions } from "./generate.js"; import { createCursor } from "./cursor.js"; diff --git a/packages/pointers/src/dereference/memo.ts b/packages/pointers/src/dereference/memo.ts index 18e6194e..09ad3631 100644 --- a/packages/pointers/src/dereference/memo.ts +++ b/packages/pointers/src/dereference/memo.ts @@ -1,6 +1,6 @@ import type { Pointer } from "@ethdebug/format"; -import type { Cursor } from "../cursor.js"; -import type { Data } from "../data.js"; +import type { Cursor } from "#cursor"; +import type { Data } from "#data"; /** * A single state transition for processing on a stack diff --git a/packages/pointers/src/dereference/process.ts b/packages/pointers/src/dereference/process.ts index 8d4756e8..2a729c96 100644 --- a/packages/pointers/src/dereference/process.ts +++ b/packages/pointers/src/dereference/process.ts @@ -1,8 +1,8 @@ import { Pointer } from "@ethdebug/format"; -import type { Machine } from "../machine.js"; -import type { Cursor } from "../cursor.js"; -import { Data } from "../data.js"; -import { evaluate } from "../evaluate.js"; +import type { Machine } from "#machine"; +import type { Cursor } from "#cursor"; +import { Data } from "#data"; +import { evaluate } from "#evaluate"; import { Memo } from "./memo.js"; import { adjustStackLength, evaluateRegion } from "./region.js"; diff --git a/packages/pointers/src/dereference/region.ts b/packages/pointers/src/dereference/region.ts index 3dca9df9..f50f2cd5 100644 --- a/packages/pointers/src/dereference/region.ts +++ b/packages/pointers/src/dereference/region.ts @@ -1,7 +1,7 @@ import { Pointer } from "@ethdebug/format"; -import type { Cursor } from "../cursor.js"; -import type { Data } from "../data.js"; -import { evaluate, type EvaluateOptions } from "../evaluate.js"; +import type { Cursor } from "#cursor"; +import type { Data } from "#data"; +import { evaluate, type EvaluateOptions } from "#evaluate"; /** * Evaluate all Pointer.Expression-value properties on a given region diff --git a/packages/pointers/src/evaluate.test.ts b/packages/pointers/src/evaluate.test.ts index eeb5ee2f..5a25394c 100644 --- a/packages/pointers/src/evaluate.test.ts +++ b/packages/pointers/src/evaluate.test.ts @@ -5,9 +5,9 @@ import { toHex } from "ethereum-cryptography/utils"; import { Pointer } from "@ethdebug/format"; -import { Machine } from "./machine.js"; -import { Data } from "./data.js"; -import { Cursor } from "./cursor.js"; +import { Machine } from "#machine"; +import { Data } from "#data"; +import { Cursor } from "#cursor"; import { evaluate, type EvaluateOptions } from "./evaluate.js"; // Create a stub for the Machine.State interface diff --git a/packages/pointers/src/evaluate.ts b/packages/pointers/src/evaluate.ts index 586ca729..724c48e3 100644 --- a/packages/pointers/src/evaluate.ts +++ b/packages/pointers/src/evaluate.ts @@ -1,8 +1,8 @@ import { Pointer } from "@ethdebug/format"; -import { Machine } from "./machine.js"; -import { Data } from "./data.js"; -import type { Cursor } from "./cursor.js"; -import { read } from "./read.js"; +import { Machine } from "#machine"; +import { Data } from "#data"; +import type { Cursor } from "#cursor"; +import { read } from "#read"; import { keccak256 } from "ethereum-cryptography/keccak"; export interface EvaluateOptions { diff --git a/packages/pointers/src/index.ts b/packages/pointers/src/index.ts index 78924bea..5475fbbf 100644 --- a/packages/pointers/src/index.ts +++ b/packages/pointers/src/index.ts @@ -1,5 +1,5 @@ -export { dereference, DereferenceOptions } from "./dereference/index.js"; -export { Cursor } from "./cursor.js"; +export { dereference, DereferenceOptions } from "#dereference"; +export { Cursor } from "#cursor"; -export type { Machine } from "./machine.js"; -export { Data } from "./data.js"; +export type { Machine } from "#machine"; +export { Data } from "#data"; diff --git a/packages/pointers/src/machine.ts b/packages/pointers/src/machine.ts index c3eb357a..293140ce 100644 --- a/packages/pointers/src/machine.ts +++ b/packages/pointers/src/machine.ts @@ -1,4 +1,4 @@ -import type { Data } from "./data.js"; +import type { Data } from "#data"; export interface Machine { trace(): AsyncIterable; diff --git a/packages/pointers/src/read.test.ts b/packages/pointers/src/read.test.ts index 7a037efe..c30f8849 100644 --- a/packages/pointers/src/read.test.ts +++ b/packages/pointers/src/read.test.ts @@ -2,10 +2,10 @@ import { vitest, expect, describe, it, beforeEach } from "vitest"; import type { Pointer } from "@ethdebug/format"; -import { Machine } from "./machine.js"; -import { Data } from "./data.js"; +import { Machine } from "#machine"; +import { Data } from "#data"; import { read, type ReadOptions } from "./read.js"; -import { Cursor } from "./cursor.js"; +import { Cursor } from "#cursor"; describe("read", () => { let options: ReadOptions; diff --git a/packages/pointers/src/read.ts b/packages/pointers/src/read.ts index 1128aeca..339a52ae 100644 --- a/packages/pointers/src/read.ts +++ b/packages/pointers/src/read.ts @@ -1,7 +1,7 @@ import { Pointer } from "@ethdebug/format"; -import { Machine } from "./machine.js"; -import { Data } from "./data.js"; -import type { Cursor } from "./cursor.js"; +import { Machine } from "#machine"; +import { Data } from "#data"; +import type { Cursor } from "#cursor"; export interface ReadOptions { state: Machine.State; diff --git a/packages/pointers/tsconfig.json b/packages/pointers/tsconfig.json index 2e1ab2b9..5621f6e6 100644 --- a/packages/pointers/tsconfig.json +++ b/packages/pointers/tsconfig.json @@ -2,7 +2,18 @@ "extends": "../../tsconfig.base.json", "compilerOptions": { "rootDir": "./", - "outDir": "./dist/" + "outDir": "./dist/", + "baseUrl": "./", + "paths": { + "#cursor": ["./src/cursor"], + "#data": ["./src/data"], + "#evaluate": ["./src/evaluate"], + "#machine": ["./src/machine"], + "#read": ["./src/read"], + "#dereference": ["./src/dereference/index"], + "#dereference/*": ["./src/dereference/*"], + "#test/*": ["./test/*"] + } }, "references": [{ "path": "../format" }] }