refactor: add src alias to @/

This commit is contained in:
hypercross 2026-04-02 15:59:27 +08:00
parent f4649e0dac
commit 2581a8e0e6
19 changed files with 48 additions and 34 deletions

View File

@ -25,7 +25,8 @@ npx vitest run -t "should detect horizontal win for X"
### Imports
- Use **double quotes** for local imports, **single quotes** for npm packages
- No path aliases — use relative `../` and `./` paths
- Use `@/**/*` for `./src/**/*` import alias
- Use `@/index` for code in `samples`
### Formatting
- **4-space indentation**

View File

@ -1,4 +1,4 @@
import {entity, Entity} from "../utils/entity";
import {entity, Entity} from "@/utils/entity";
import {
Command,
CommandRegistry,
@ -9,7 +9,7 @@ import {
createCommandRunnerContext,
parseCommandSchema,
registerCommand
} from "../utils/command";
} from "@/utils/command";
export interface IGameContext<TState extends Record<string, unknown> = {} > {
state: Entity<TState>;

View File

@ -1,6 +1,6 @@
import {Entity} from "../utils/entity";
import {Entity} from "@/utils/entity";
import {Region} from "./region";
import {RNG} from "../utils/rng";
import {RNG} from "@/utils/rng";
export type Part = {
id: string;

View File

@ -1,6 +1,6 @@
import {Entity} from "../utils/entity";
import {Entity} from "@/utils/entity";
import {Part} from "./part";
import {RNG} from "../utils/rng";
import {RNG} from "@/utils/rng";
export type Region = {
id: string;

View File

@ -1,7 +1,4 @@
import {createGameCommandRegistry} from '../';
import type { Part } from '../';
import {Entity, entity} from "../";
import {Region} from "../";
import {createGameCommandRegistry, Part, Entity, entity, Region} from '@/index';
const BOARD_SIZE = 3;
const MAX_TURNS = BOARD_SIZE * BOARD_SIZE;

View File

@ -3,7 +3,7 @@ import type {CommandResult, CommandRunner, CommandRunnerContext, PromptEvent} fr
import { parseCommand } from './command-parse';
import { applyCommandSchema } from './command-validate';
import { parseCommandSchema } from './schema-parse';
import {AsyncQueue} from "../async-queue";
import {AsyncQueue} from "@/utils/async-queue";
export type CommandRegistry<TContext> = Map<string, CommandRunner<TContext, unknown>>;

View File

@ -1,7 +1,6 @@
import { describe, it, expect } from 'vitest';
import { createGameContext, createGameCommand, createGameCommandRegistry, IGameContext } from '../../src/core/game';
import { Entity } from '../../src/utils/entity';
import type { PromptEvent } from '../../src/utils/command';
import { createGameContext, createGameCommand, createGameCommandRegistry } from '@/core/game';
import type { PromptEvent } from '@/utils/command';
type MyState = {
score: number;
@ -77,7 +76,7 @@ describe('createGameContext', () => {
describe('createGameCommand', () => {
it('should run a command with access to game context', async () => {
const { registry } = createGameCommandRegistry<Entity<{ marker: string }>>();
const { registry } = createGameCommandRegistry<{ marker: string }>();
const ctx = createGameContext(registry, { marker: '' });
createGameCommand(registry, 'set-marker <id>', async function (cmd) {

View File

@ -1,8 +1,8 @@
import { describe, it, expect } from 'vitest';
import { applyAlign, shuffle, type Region, type RegionAxis } from '../../src/core/region';
import { createRNG } from '../../src/utils/rng';
import { entity, Entity } from '../../src/utils/entity';
import { type Part } from '../../src/core/part';
import { applyAlign, shuffle, type Region, type RegionAxis } from '@/core/region';
import { createRNG } from '@/utils/rng';
import { entity, Entity } from '@/utils/entity';
import { type Part } from '@/core/part';
describe('Region', () => {
function createTestRegion(axes: RegionAxis[], parts: Part[]): Entity<Region> {

View File

@ -7,10 +7,10 @@ import {
createInitialState,
TicTacToeState,
WinnerType, PlayerType
} from '../../src/samples/tic-tac-toe';
import {Entity} from "../../src/utils/entity";
import {createGameContext} from "../../src";
import type { PromptEvent } from '../../src/utils/command';
} from '@/samples/tic-tac-toe';
import {Entity} from "@/utils/entity";
import {createGameContext} from "@/";
import type { PromptEvent } from '@/utils/command';
function createTestContext() {
const ctx = createGameContext(registry, createInitialState);

View File

@ -1,5 +1,5 @@
import { describe, it, expect } from 'vitest';
import { AsyncQueue } from '../../src/utils/async-queue';
import { AsyncQueue } from '@/utils/async-queue';
describe('AsyncQueue', () => {
describe('push', () => {

View File

@ -5,7 +5,7 @@ import {
validateCommand,
parseCommand,
type CommandSchema,
} from '../../src/utils/command';
} from '@/utils/command';
describe('parseCommandSchema with inline-schema', () => {
it('should parse schema with typed params', () => {

View File

@ -1,5 +1,5 @@
import { describe, it, expect } from 'vitest';
import { parseCommandSchema } from '../../src/utils/command/schema-parse';
import { parseCommandSchema } from '@/utils/command/schema-parse';
import {
createCommandRegistry,
registerCommand,
@ -10,8 +10,8 @@ import {
createCommandRunnerContext,
type CommandRegistry,
type CommandRunnerContextExport,
} from '../../src/utils/command/command-registry';
import type { CommandRunner, PromptEvent } from '../../src/utils/command/command-runner';
} from '@/utils/command/command-registry';
import type { CommandRunner, PromptEvent } from '@/utils/command/command-runner';
type TestContext = {
counter: number;

View File

@ -1,5 +1,5 @@
import { describe, it, expect } from 'vitest';
import { parseCommand, parseCommandSchema, validateCommand } from '../../src/utils/command';
import { parseCommand, parseCommandSchema, validateCommand } from '@/utils/command';
describe('parseCommandSchema', () => {
it('should parse empty schema', () => {

View File

@ -1,5 +1,5 @@
import { describe, it, expect } from 'vitest';
import { parseCommand, type Command } from '../../src/utils/command';
import { parseCommand, type Command } from '@/utils/command';
describe('parseCommand', () => {
it('should parse empty string', () => {

View File

@ -1,5 +1,5 @@
import { describe, it, expect } from 'vitest';
import { createEntityCollection, Entity, entity } from '../../src/utils/entity';
import { createEntityCollection, Entity, entity } from '@/utils/entity';
type TestEntity = {
id: string;

View File

@ -1,5 +1,5 @@
import { describe, it, expect } from 'vitest';
import { createRNG } from '../../src/utils/rng';
import { createRNG } from '@/utils/rng';
describe('createRNG', () => {
it('should create RNG with default seed', () => {

View File

@ -11,7 +11,11 @@
"declaration": true,
"declarationMap": true,
"outDir": "./dist",
"rootDir": "./src"
"rootDir": "./src",
"baseUrl": ".",
"paths": {
"@/*": ["src/*"]
}
},
"include": ["src/**/*"],
"exclude": ["node_modules", "dist", "tests"]

View File

@ -1,4 +1,7 @@
import { defineConfig } from 'tsup';
import { fileURLToPath } from 'url';
const srcDir = fileURLToPath(new URL('./src', import.meta.url));
export default defineConfig({
entry: ['src/index.ts'],
@ -6,4 +9,9 @@ export default defineConfig({
dts: true,
clean: true,
sourcemap: true,
esbuildOptions(options) {
options.alias = {
'@': srcDir,
};
},
});

View File

@ -6,4 +6,9 @@ export default defineConfig({
environment: 'node',
include: ['tests/**/*.test.ts'],
},
resolve: {
alias: {
'@/': new URL('./src/', import.meta.url).pathname,
},
},
});