@moku-labs/core 0.1.0-alpha.0 → 0.1.0-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -110,7 +110,7 @@ export const { createApp, createPlugin } = framework;
110
110
  // my-app/main.ts
111
111
  import { createApp } from 'my-framework';
112
112
 
113
- const app = await createApp({
113
+ const app = createApp({
114
114
  plugins: [blogPlugin],
115
115
  config: { siteName: 'My Blog', mode: 'production' },
116
116
  pluginConfigs: { router: { basePath: '/blog' } },
@@ -218,7 +218,7 @@ createPlugin('name', {
218
218
  createState: ctx => ({ /* mutable state */ }),
219
219
  api: ctx => ({ /* public methods, mounted on app.name */ }),
220
220
  hooks: ctx => ({ 'event:name': handler }),
221
- onInit: async ctx => { /* all plugins exist */ },
221
+ onInit: ctx => { /* all plugins exist, sync only */ },
222
222
  onStart: async ctx => { /* app is running */ },
223
223
  onStop: async ctx => { /* teardown, reverse order */ },
224
224
  });
@@ -268,7 +268,7 @@ Creates a plugin instance. Zero explicit generics — everything inferred from t
268
268
 
269
269
  ### createApp(options?)
270
270
 
271
- Merges framework defaults with consumer options. Validates, resolves config, runs `onInit`. Returns `Promise<App>` — a frozen object with plugin APIs mounted as properties.
271
+ Merges framework defaults with consumer options. Validates, resolves config, runs `onInit`. Returns `App` — a frozen object with plugin APIs mounted as properties.
272
272
 
273
273
  ### App
274
274
 
package/dist/index.cjs CHANGED
@@ -405,13 +405,13 @@ function buildApp(runtime, flatPlugins, buildPluginContext, consumer) {
405
405
  * API building, lifecycle execution, returns frozen app object.
406
406
  *
407
407
  * @param parameters - All kernel inputs captured from the factory chain.
408
- * @returns A promise that resolves to the frozen app object.
408
+ * @returns The frozen app object.
409
409
  * @example
410
410
  * ```ts
411
411
  * const app = await kernel({ id: "my-app", configDefaults: {}, ... });
412
412
  * ```
413
413
  */
414
- async function kernel(parameters) {
414
+ function kernel(parameters) {
415
415
  const { id, configDefaults, frameworkPluginConfigs, flatPlugins, configOverrides, consumerPluginConfigs, onReady, onError, consumer } = parameters;
416
416
  const pluginNameSet = new Set(flatPlugins.map((plugin) => plugin.name));
417
417
  const globalConfig = Object.freeze({
@@ -435,9 +435,9 @@ async function kernel(parameters) {
435
435
  const buildPluginContext = createContextFactory(runtime, resolvedConfigs, states);
436
436
  registerPluginHooks(flatPlugins, buildPluginContext, registerHook);
437
437
  for (const plugin of flatPlugins) if (plugin.spec.api) apis.set(plugin.name, plugin.spec.api(buildPluginContext(plugin)));
438
- for (const plugin of flatPlugins) if (plugin.spec.onInit) await plugin.spec.onInit(buildPluginContext(plugin));
439
- if (onReady) await onReady({ config: globalConfig });
440
- if (consumer?.onReady) await consumer.onReady(buildCallbackContext(runtime));
438
+ for (const plugin of flatPlugins) if (plugin.spec.onInit) plugin.spec.onInit(buildPluginContext(plugin));
439
+ if (onReady) onReady({ config: globalConfig });
440
+ if (consumer?.onReady) consumer.onReady(buildCallbackContext(runtime));
441
441
  return buildApp(runtime, flatPlugins, buildPluginContext, consumer);
442
442
  }
443
443
 
@@ -485,13 +485,13 @@ function createCoreFactory(frameworkId, configDefaults, createPlugin) {
485
485
  * plugins, then delegates to the kernel for lifecycle execution.
486
486
  *
487
487
  * @param consumerOptions - Consumer-level config, plugins, and callbacks.
488
- * @returns A promise that resolves to the frozen App object.
488
+ * @returns The frozen App object.
489
489
  * @example
490
490
  * ```ts
491
- * const app = await createApp({ config: { siteName: "Blog" } });
491
+ * const app = createApp({ config: { siteName: "Blog" } });
492
492
  * ```
493
493
  */
494
- const createApp = async (consumerOptions) => {
494
+ const createApp = (consumerOptions) => {
495
495
  const appOptions = consumerOptions ?? {};
496
496
  const allPlugins = [...defaultPlugins, ...appOptions.plugins ?? []];
497
497
  validatePlugins(frameworkId, allPlugins);
package/dist/index.d.cts CHANGED
@@ -221,7 +221,7 @@ type PluginSpec<Config, Events extends Record<string, unknown>, PluginEvents ext
221
221
  depends?: Deps;
222
222
  createState?: (context: MinimalContext<Config, C>) => S;
223
223
  api?: (context: PluginContext<Config, Events & PluginEvents & DepsEvents<Deps>, C, S>) => A;
224
- onInit?: (context: PluginContext<Config, Events & PluginEvents & DepsEvents<Deps>, C, S>) => void | Promise<void>;
224
+ onInit?: (context: PluginContext<Config, Events & PluginEvents & DepsEvents<Deps>, C, S>) => void;
225
225
  onStart?: (context: PluginContext<Config, Events & PluginEvents & DepsEvents<Deps>, C, S>) => void | Promise<void>;
226
226
  onStop?: (context: TeardownContext<Config>) => void | Promise<void>;
227
227
  hooks?: (context: PluginContext<Config, Events & PluginEvents & DepsEvents<Deps>, C, S>) => { [K in string & keyof (Events & PluginEvents & DepsEvents<Deps>)]?: (payload: (Events & PluginEvents & DepsEvents<Deps>)[K]) => void | Promise<void> };
@@ -378,7 +378,7 @@ type AppCallbackContext<Config extends Record<string, unknown>, Events extends R
378
378
  *
379
379
  * @example
380
380
  * ```ts
381
- * const app = await createApp({
381
+ * const app = createApp({
382
382
  * config: { siteName: "My Blog" },
383
383
  * pluginConfigs: { router: { basePath: "/blog" } },
384
384
  * onReady: ctx => { console.log("App ready:", ctx.config.siteName); },
@@ -389,7 +389,7 @@ type CreateAppOptions<Config extends Record<string, unknown>, Events extends Rec
389
389
  plugins?: ExtraPlugins;
390
390
  config?: { [K in keyof Config]?: Config[K] };
391
391
  pluginConfigs?: { [K in P as ExtractConfig<K> extends Record<string, never> ? never : IsLiteralString<ExtractName<K>> extends true ? ExtractName<K> : never]?: Partial<ExtractConfig<K>> };
392
- onReady?: (context: AppCallbackContext<Config, Events, P>) => void | Promise<void>;
392
+ onReady?: (context: AppCallbackContext<Config, Events, P>) => void;
393
393
  onError?: (error: Error, context: AppCallbackContext<Config, Events, P>) => void;
394
394
  onStart?: (context: AppCallbackContext<Config, Events, P>) => void | Promise<void>;
395
395
  onStop?: (context: AppCallbackContext<Config, Events, P>) => void | Promise<void>;
@@ -699,7 +699,8 @@ type CreatePluginSpec<GlobalConfig extends FrameworkConfig, GlobalEventMap exten
699
699
  api?: (context: PluginExecutionContext<GlobalConfig, MergedPluginEvents<GlobalEventMap, PluginEventMap, DependencyPlugins>, PluginConfig, PluginState>) => PluginApi;
700
700
  /**
701
701
  * Called after all plugins are registered and APIs are built. Runs in forward
702
- * plugin order, sequentially awaited. Use for setup that depends on other plugins.
702
+ * plugin order, synchronously. Use for setup that depends on other plugins.
703
+ * For async initialization, use `onStart` instead.
703
704
  *
704
705
  * @example
705
706
  * ```ts
@@ -709,7 +710,7 @@ type CreatePluginSpec<GlobalConfig extends FrameworkConfig, GlobalEventMap exten
709
710
  * }
710
711
  * ```
711
712
  */
712
- onInit?: (context: PluginExecutionContext<GlobalConfig, MergedPluginEvents<GlobalEventMap, PluginEventMap, DependencyPlugins>, PluginConfig, PluginState>) => void | Promise<void>;
713
+ onInit?: (context: PluginExecutionContext<GlobalConfig, MergedPluginEvents<GlobalEventMap, PluginEventMap, DependencyPlugins>, PluginConfig, PluginState>) => void;
713
714
  /**
714
715
  * Called when the app starts. Runs in forward plugin order, sequentially awaited.
715
716
  * Use for runtime startup (open connections, start listeners).
@@ -801,7 +802,7 @@ interface CreateCoreOptions<Config> {
801
802
  /** Called after all plugins are initialized. */
802
803
  readonly onReady?: (context: {
803
804
  config: Readonly<Config>;
804
- }) => void | Promise<void>;
805
+ }) => void;
805
806
  /** Error handler for hook dispatch and teardown failures. */
806
807
  readonly onError?: (error: Error) => void;
807
808
  }
@@ -820,9 +821,9 @@ interface CreateCoreResult<Config extends Record<string, unknown>, Events extend
820
821
  * Generic over ExtraPlugins to merge consumer plugins into the return type.
821
822
  *
822
823
  * @param options - Consumer-level config overrides, plugin configs, extra plugins.
823
- * @returns A promise that resolves to the frozen, fully typed App object.
824
+ * @returns The frozen, fully typed App object.
824
825
  */
825
- readonly createApp: <const ExtraPlugins extends readonly AnyPluginInstance[] = readonly []>(options?: CreateAppOptions<Config, Events, Plugins[number] | ExtraPlugins[number], [...ExtraPlugins]>) => Promise<App<Config, Events, Plugins[number] | ExtraPlugins[number]>>;
826
+ readonly createApp: <const ExtraPlugins extends readonly AnyPluginInstance[] = readonly []>(options?: CreateAppOptions<Config, Events, Plugins[number] | ExtraPlugins[number], [...ExtraPlugins]>) => App<Config, Events, Plugins[number] | ExtraPlugins[number]>;
826
827
  /** Re-exported createPlugin for consumer convenience. */
827
828
  readonly createPlugin: BoundCreatePluginFunction<Config, Events>;
828
829
  }
@@ -897,4 +898,4 @@ declare function createCoreConfig<Config extends Record<string, unknown>, Events
897
898
  config: Config;
898
899
  }): CoreConfigResult<Config, Events>;
899
900
  //#endregion
900
- export { type EmitFunction as EmitFn, type PluginContext_ as PluginCtx, createCoreConfig };
901
+ export { type AnyPluginInstance, type App, type BoundCreateCoreFunction, type BoundCreatePluginFunction, type CoreConfigResult, type CreateAppOptions, type CreateCoreOptions, type CreateCoreResult, type EmitFunction as EmitFn, type PluginContext_ as PluginCtx, type PluginInstance, createCoreConfig };
package/dist/index.d.mts CHANGED
@@ -221,7 +221,7 @@ type PluginSpec<Config, Events extends Record<string, unknown>, PluginEvents ext
221
221
  depends?: Deps;
222
222
  createState?: (context: MinimalContext<Config, C>) => S;
223
223
  api?: (context: PluginContext<Config, Events & PluginEvents & DepsEvents<Deps>, C, S>) => A;
224
- onInit?: (context: PluginContext<Config, Events & PluginEvents & DepsEvents<Deps>, C, S>) => void | Promise<void>;
224
+ onInit?: (context: PluginContext<Config, Events & PluginEvents & DepsEvents<Deps>, C, S>) => void;
225
225
  onStart?: (context: PluginContext<Config, Events & PluginEvents & DepsEvents<Deps>, C, S>) => void | Promise<void>;
226
226
  onStop?: (context: TeardownContext<Config>) => void | Promise<void>;
227
227
  hooks?: (context: PluginContext<Config, Events & PluginEvents & DepsEvents<Deps>, C, S>) => { [K in string & keyof (Events & PluginEvents & DepsEvents<Deps>)]?: (payload: (Events & PluginEvents & DepsEvents<Deps>)[K]) => void | Promise<void> };
@@ -378,7 +378,7 @@ type AppCallbackContext<Config extends Record<string, unknown>, Events extends R
378
378
  *
379
379
  * @example
380
380
  * ```ts
381
- * const app = await createApp({
381
+ * const app = createApp({
382
382
  * config: { siteName: "My Blog" },
383
383
  * pluginConfigs: { router: { basePath: "/blog" } },
384
384
  * onReady: ctx => { console.log("App ready:", ctx.config.siteName); },
@@ -389,7 +389,7 @@ type CreateAppOptions<Config extends Record<string, unknown>, Events extends Rec
389
389
  plugins?: ExtraPlugins;
390
390
  config?: { [K in keyof Config]?: Config[K] };
391
391
  pluginConfigs?: { [K in P as ExtractConfig<K> extends Record<string, never> ? never : IsLiteralString<ExtractName<K>> extends true ? ExtractName<K> : never]?: Partial<ExtractConfig<K>> };
392
- onReady?: (context: AppCallbackContext<Config, Events, P>) => void | Promise<void>;
392
+ onReady?: (context: AppCallbackContext<Config, Events, P>) => void;
393
393
  onError?: (error: Error, context: AppCallbackContext<Config, Events, P>) => void;
394
394
  onStart?: (context: AppCallbackContext<Config, Events, P>) => void | Promise<void>;
395
395
  onStop?: (context: AppCallbackContext<Config, Events, P>) => void | Promise<void>;
@@ -699,7 +699,8 @@ type CreatePluginSpec<GlobalConfig extends FrameworkConfig, GlobalEventMap exten
699
699
  api?: (context: PluginExecutionContext<GlobalConfig, MergedPluginEvents<GlobalEventMap, PluginEventMap, DependencyPlugins>, PluginConfig, PluginState>) => PluginApi;
700
700
  /**
701
701
  * Called after all plugins are registered and APIs are built. Runs in forward
702
- * plugin order, sequentially awaited. Use for setup that depends on other plugins.
702
+ * plugin order, synchronously. Use for setup that depends on other plugins.
703
+ * For async initialization, use `onStart` instead.
703
704
  *
704
705
  * @example
705
706
  * ```ts
@@ -709,7 +710,7 @@ type CreatePluginSpec<GlobalConfig extends FrameworkConfig, GlobalEventMap exten
709
710
  * }
710
711
  * ```
711
712
  */
712
- onInit?: (context: PluginExecutionContext<GlobalConfig, MergedPluginEvents<GlobalEventMap, PluginEventMap, DependencyPlugins>, PluginConfig, PluginState>) => void | Promise<void>;
713
+ onInit?: (context: PluginExecutionContext<GlobalConfig, MergedPluginEvents<GlobalEventMap, PluginEventMap, DependencyPlugins>, PluginConfig, PluginState>) => void;
713
714
  /**
714
715
  * Called when the app starts. Runs in forward plugin order, sequentially awaited.
715
716
  * Use for runtime startup (open connections, start listeners).
@@ -801,7 +802,7 @@ interface CreateCoreOptions<Config> {
801
802
  /** Called after all plugins are initialized. */
802
803
  readonly onReady?: (context: {
803
804
  config: Readonly<Config>;
804
- }) => void | Promise<void>;
805
+ }) => void;
805
806
  /** Error handler for hook dispatch and teardown failures. */
806
807
  readonly onError?: (error: Error) => void;
807
808
  }
@@ -820,9 +821,9 @@ interface CreateCoreResult<Config extends Record<string, unknown>, Events extend
820
821
  * Generic over ExtraPlugins to merge consumer plugins into the return type.
821
822
  *
822
823
  * @param options - Consumer-level config overrides, plugin configs, extra plugins.
823
- * @returns A promise that resolves to the frozen, fully typed App object.
824
+ * @returns The frozen, fully typed App object.
824
825
  */
825
- readonly createApp: <const ExtraPlugins extends readonly AnyPluginInstance[] = readonly []>(options?: CreateAppOptions<Config, Events, Plugins[number] | ExtraPlugins[number], [...ExtraPlugins]>) => Promise<App<Config, Events, Plugins[number] | ExtraPlugins[number]>>;
826
+ readonly createApp: <const ExtraPlugins extends readonly AnyPluginInstance[] = readonly []>(options?: CreateAppOptions<Config, Events, Plugins[number] | ExtraPlugins[number], [...ExtraPlugins]>) => App<Config, Events, Plugins[number] | ExtraPlugins[number]>;
826
827
  /** Re-exported createPlugin for consumer convenience. */
827
828
  readonly createPlugin: BoundCreatePluginFunction<Config, Events>;
828
829
  }
@@ -897,4 +898,4 @@ declare function createCoreConfig<Config extends Record<string, unknown>, Events
897
898
  config: Config;
898
899
  }): CoreConfigResult<Config, Events>;
899
900
  //#endregion
900
- export { type EmitFunction as EmitFn, type PluginContext_ as PluginCtx, createCoreConfig };
901
+ export { type AnyPluginInstance, type App, type BoundCreateCoreFunction, type BoundCreatePluginFunction, type CoreConfigResult, type CreateAppOptions, type CreateCoreOptions, type CreateCoreResult, type EmitFunction as EmitFn, type PluginContext_ as PluginCtx, type PluginInstance, createCoreConfig };
package/dist/index.mjs CHANGED
@@ -403,13 +403,13 @@ function buildApp(runtime, flatPlugins, buildPluginContext, consumer) {
403
403
  * API building, lifecycle execution, returns frozen app object.
404
404
  *
405
405
  * @param parameters - All kernel inputs captured from the factory chain.
406
- * @returns A promise that resolves to the frozen app object.
406
+ * @returns The frozen app object.
407
407
  * @example
408
408
  * ```ts
409
409
  * const app = await kernel({ id: "my-app", configDefaults: {}, ... });
410
410
  * ```
411
411
  */
412
- async function kernel(parameters) {
412
+ function kernel(parameters) {
413
413
  const { id, configDefaults, frameworkPluginConfigs, flatPlugins, configOverrides, consumerPluginConfigs, onReady, onError, consumer } = parameters;
414
414
  const pluginNameSet = new Set(flatPlugins.map((plugin) => plugin.name));
415
415
  const globalConfig = Object.freeze({
@@ -433,9 +433,9 @@ async function kernel(parameters) {
433
433
  const buildPluginContext = createContextFactory(runtime, resolvedConfigs, states);
434
434
  registerPluginHooks(flatPlugins, buildPluginContext, registerHook);
435
435
  for (const plugin of flatPlugins) if (plugin.spec.api) apis.set(plugin.name, plugin.spec.api(buildPluginContext(plugin)));
436
- for (const plugin of flatPlugins) if (plugin.spec.onInit) await plugin.spec.onInit(buildPluginContext(plugin));
437
- if (onReady) await onReady({ config: globalConfig });
438
- if (consumer?.onReady) await consumer.onReady(buildCallbackContext(runtime));
436
+ for (const plugin of flatPlugins) if (plugin.spec.onInit) plugin.spec.onInit(buildPluginContext(plugin));
437
+ if (onReady) onReady({ config: globalConfig });
438
+ if (consumer?.onReady) consumer.onReady(buildCallbackContext(runtime));
439
439
  return buildApp(runtime, flatPlugins, buildPluginContext, consumer);
440
440
  }
441
441
 
@@ -483,13 +483,13 @@ function createCoreFactory(frameworkId, configDefaults, createPlugin) {
483
483
  * plugins, then delegates to the kernel for lifecycle execution.
484
484
  *
485
485
  * @param consumerOptions - Consumer-level config, plugins, and callbacks.
486
- * @returns A promise that resolves to the frozen App object.
486
+ * @returns The frozen App object.
487
487
  * @example
488
488
  * ```ts
489
- * const app = await createApp({ config: { siteName: "Blog" } });
489
+ * const app = createApp({ config: { siteName: "Blog" } });
490
490
  * ```
491
491
  */
492
- const createApp = async (consumerOptions) => {
492
+ const createApp = (consumerOptions) => {
493
493
  const appOptions = consumerOptions ?? {};
494
494
  const allPlugins = [...defaultPlugins, ...appOptions.plugins ?? []];
495
495
  validatePlugins(frameworkId, allPlugins);
package/package.json CHANGED
@@ -1,26 +1,59 @@
1
1
  {
2
2
  "name": "@moku-labs/core",
3
- "version": "0.1.0-alpha.0",
4
- "description": "Micro-kernel plugin framework for LLMs (TypeScript)",
5
- "type": "module",
6
- "license": "MIT",
3
+ "version": "0.1.0-alpha.2",
7
4
  "author": "Alex Kucherenko",
8
5
  "repository": {
9
6
  "type": "git",
10
7
  "url": "git+https://github.com/moku-labs/core.git"
11
8
  },
9
+ "main": "./dist/index.cjs",
10
+ "module": "./dist/index.mjs",
11
+ "devDependencies": {
12
+ "@arethetypeswrong/cli": "0.18.2",
13
+ "@arethetypeswrong/core": "0.18.2",
14
+ "@biomejs/biome": "2.4.2",
15
+ "@types/bun": "1.3.9",
16
+ "@vitest/coverage-istanbul": "4.0.18",
17
+ "eslint": "9",
18
+ "eslint-config-biome": "2.1.3",
19
+ "eslint-plugin-jsdoc": "62.6.0",
20
+ "eslint-plugin-sonarjs": "4.0.0",
21
+ "eslint-plugin-unicorn": "63.0.0",
22
+ "globals": "17.3.0",
23
+ "jiti": "2.6.1",
24
+ "lefthook": "2.1.1",
25
+ "publint": "0.3.17",
26
+ "tsdown": "0.20.3",
27
+ "typescript": "5.9.3",
28
+ "typescript-eslint": "8.56.0",
29
+ "vitest": "4.0.18"
30
+ },
31
+ "exports": {
32
+ ".": {
33
+ "import": {
34
+ "types": "./dist/index.d.mts",
35
+ "default": "./dist/index.mjs"
36
+ },
37
+ "require": {
38
+ "types": "./dist/index.d.cts",
39
+ "default": "./dist/index.cjs"
40
+ }
41
+ }
42
+ },
12
43
  "bugs": {
13
44
  "url": "https://github.com/moku-labs/core/issues"
14
45
  },
15
- "homepage": "https://github.com/moku-labs/core#readme",
16
- "publishConfig": {
17
- "access": "public",
18
- "registry": "https://registry.npmjs.org/"
19
- },
46
+ "description": "Micro-kernel plugin framework for LLMs (TypeScript)",
20
47
  "engines": {
21
48
  "node": ">=22.0.0",
22
49
  "bun": ">=1.3.8"
23
50
  },
51
+ "files": [
52
+ "dist",
53
+ "LICENSE",
54
+ "README.md"
55
+ ],
56
+ "homepage": "https://github.com/moku-labs/core#readme",
24
57
  "keywords": [
25
58
  "plugin",
26
59
  "framework",
@@ -30,21 +63,11 @@
30
63
  "event-bus",
31
64
  "type-safe"
32
65
  ],
33
- "exports": {
34
- ".": {
35
- "import": {
36
- "types": "./dist/index.d.mts",
37
- "default": "./dist/index.mjs"
38
- },
39
- "require": {
40
- "types": "./dist/index.d.cts",
41
- "default": "./dist/index.cjs"
42
- }
43
- }
66
+ "license": "MIT",
67
+ "publishConfig": {
68
+ "access": "public",
69
+ "registry": "https://registry.npmjs.org/"
44
70
  },
45
- "main": "./dist/index.cjs",
46
- "module": "./dist/index.mjs",
47
- "types": "./dist/index.d.mts",
48
71
  "scripts": {
49
72
  "build": "tsdown",
50
73
  "validate": "publint && attw --pack . --profile node16",
@@ -57,29 +80,6 @@
57
80
  "test:sandbox": "vitest run --project sandbox",
58
81
  "test:coverage": "vitest run --project unit --project integration --coverage"
59
82
  },
60
- "files": [
61
- "dist",
62
- "LICENSE",
63
- "README.md"
64
- ],
65
- "devDependencies": {
66
- "@arethetypeswrong/cli": "0.18.2",
67
- "@arethetypeswrong/core": "0.18.2",
68
- "@biomejs/biome": "2.4.2",
69
- "@types/bun": "1.3.9",
70
- "@vitest/coverage-istanbul": "4.0.18",
71
- "eslint": "9",
72
- "eslint-config-biome": "2.1.3",
73
- "eslint-plugin-jsdoc": "62.6.0",
74
- "eslint-plugin-sonarjs": "4.0.0",
75
- "eslint-plugin-unicorn": "63.0.0",
76
- "globals": "17.3.0",
77
- "jiti": "2.6.1",
78
- "lefthook": "2.1.1",
79
- "publint": "0.3.17",
80
- "tsdown": "0.20.3",
81
- "typescript": "5.9.3",
82
- "typescript-eslint": "8.56.0",
83
- "vitest": "4.0.18"
84
- }
83
+ "type": "module",
84
+ "types": "./dist/index.d.mts"
85
85
  }