···33import type { IR } from '~/ir/types';
44import { tsc } from '~/tsc';
5566-import type { PluginInstance } from './types';
66+import type { PluginInstance } from '../types';
7788export const handleMeta = (
99 plugin: PluginInstance,
···77} from '~/plugins/shared/utils/operation';
88import { tsc } from '~/tsc';
991010-import type { PluginInstance } from './types';
1111-import { useTypeData } from './useType';
1010+import { useTypeData } from '../shared/useType';
1111+import type { PluginInstance } from '../types';
12121313const optionsParamName = 'options';
1414
···11+import type ts from 'typescript';
22+33+import { AttrTsDsl } from '../attr';
44+import type { ExprInput, MaybeTsDsl, TsDsl } from '../base';
55+import { CallTsDsl } from '../call';
66+77+export class AccessMixin {
88+ /** Accesses a property on the current expression (e.g. `this.foo`). */
99+ attr(this: TsDsl<ts.Expression>, name: string): AttrTsDsl {
1010+ return new AttrTsDsl(this, name);
1111+ }
1212+ /** Calls the current expression as a function (e.g. `fn(arg1, arg2)`). */
1313+ call(
1414+ this: TsDsl<ts.Expression>,
1515+ ...args: ReadonlyArray<MaybeTsDsl<ExprInput>>
1616+ ): CallTsDsl {
1717+ return new CallTsDsl(this, ...args);
1818+ }
1919+}