@lupaflow/plugins 0.1.1 → 0.1.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/dist/index.cjs ADDED
@@ -0,0 +1,157 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/index.ts
21
+ var src_exports = {};
22
+ __export(src_exports, {
23
+ pluginManager: () => pluginManager,
24
+ runAfterAgentRunHooks: () => runAfterAgentRunHooks,
25
+ runAfterProviderCallHooks: () => runAfterProviderCallHooks,
26
+ runAfterToolCallHooks: () => runAfterToolCallHooks,
27
+ runBeforeAgentRunHooks: () => runBeforeAgentRunHooks,
28
+ runBeforeProviderCallHooks: () => runBeforeProviderCallHooks,
29
+ runBeforeToolCallHooks: () => runBeforeToolCallHooks
30
+ });
31
+ module.exports = __toCommonJS(src_exports);
32
+
33
+ // src/loader.ts
34
+ var import_promises = require("fs/promises");
35
+ var import_path = require("path");
36
+ var import_core = require("@lupaflow/core");
37
+ var PluginManager = class {
38
+ plugins = /* @__PURE__ */ new Map();
39
+ loaded = false;
40
+ async load(plugin) {
41
+ if (this.plugins.has(plugin.name)) {
42
+ throw new Error(`Plugin "${plugin.name}" is already loaded`);
43
+ }
44
+ this.plugins.set(plugin.name, plugin);
45
+ if (plugin.onEvent) {
46
+ import_core.globalEventBus.onAny((event) => plugin.onEvent(event));
47
+ }
48
+ if (plugin.onLoad) {
49
+ await plugin.onLoad();
50
+ }
51
+ }
52
+ async unload(name) {
53
+ const plugin = this.plugins.get(name);
54
+ if (!plugin) throw new Error(`Plugin "${name}" not found`);
55
+ if (plugin.onUnload) await plugin.onUnload();
56
+ this.plugins.delete(name);
57
+ }
58
+ async loadFromDirectory(dir) {
59
+ try {
60
+ const files = await (0, import_promises.readdir)(dir);
61
+ for (const file of files) {
62
+ if (file.endsWith(".js") || file.endsWith(".mjs")) {
63
+ try {
64
+ const mod = await import((0, import_path.join)(dir, file));
65
+ if (mod.default && mod.default.name) {
66
+ await this.load(mod.default);
67
+ }
68
+ } catch {
69
+ }
70
+ }
71
+ }
72
+ } catch {
73
+ }
74
+ }
75
+ get(name) {
76
+ return this.plugins.get(name);
77
+ }
78
+ list() {
79
+ return Array.from(this.plugins.values());
80
+ }
81
+ isLoaded(name) {
82
+ return this.plugins.has(name);
83
+ }
84
+ async unloadAll() {
85
+ for (const [name] of this.plugins) {
86
+ await this.unload(name);
87
+ }
88
+ }
89
+ };
90
+ var pluginManager = new PluginManager();
91
+
92
+ // src/hooks.ts
93
+ function runBeforeAgentRunHooks(config) {
94
+ let result = { ...config };
95
+ for (const plugin of pluginManager.list()) {
96
+ if (plugin.hooks?.beforeAgentRun) {
97
+ result = plugin.hooks.beforeAgentRun(result);
98
+ }
99
+ }
100
+ return result;
101
+ }
102
+ function runAfterAgentRunHooks(result) {
103
+ let output = result;
104
+ for (const plugin of pluginManager.list()) {
105
+ if (plugin.hooks?.afterAgentRun) {
106
+ output = plugin.hooks.afterAgentRun(output);
107
+ }
108
+ }
109
+ return output;
110
+ }
111
+ function runBeforeToolCallHooks(tool, args) {
112
+ let result = { ...args };
113
+ for (const plugin of pluginManager.list()) {
114
+ if (plugin.hooks?.beforeToolCall) {
115
+ result = plugin.hooks.beforeToolCall(tool, result);
116
+ }
117
+ }
118
+ return result;
119
+ }
120
+ function runAfterToolCallHooks(result) {
121
+ let output = result;
122
+ for (const plugin of pluginManager.list()) {
123
+ if (plugin.hooks?.afterToolCall) {
124
+ output = plugin.hooks.afterToolCall(output);
125
+ }
126
+ }
127
+ return output;
128
+ }
129
+ function runBeforeProviderCallHooks(provider, request) {
130
+ let result = { ...request };
131
+ for (const plugin of pluginManager.list()) {
132
+ if (plugin.hooks?.beforeProviderCall) {
133
+ result = plugin.hooks.beforeProviderCall(provider, result);
134
+ }
135
+ }
136
+ return result;
137
+ }
138
+ function runAfterProviderCallHooks(response) {
139
+ let result = { ...response };
140
+ for (const plugin of pluginManager.list()) {
141
+ if (plugin.hooks?.afterProviderCall) {
142
+ result = plugin.hooks.afterProviderCall(result);
143
+ }
144
+ }
145
+ return result;
146
+ }
147
+ // Annotate the CommonJS export names for ESM import in node:
148
+ 0 && (module.exports = {
149
+ pluginManager,
150
+ runAfterAgentRunHooks,
151
+ runAfterProviderCallHooks,
152
+ runAfterToolCallHooks,
153
+ runBeforeAgentRunHooks,
154
+ runBeforeProviderCallHooks,
155
+ runBeforeToolCallHooks
156
+ });
157
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts","../src/loader.ts","../src/hooks.ts"],"sourcesContent":["export { pluginManager } from \"./loader\"\nexport type { LupaPlugin } from \"./interface\"\nexport {\n runBeforeAgentRunHooks,\n runAfterAgentRunHooks,\n runBeforeToolCallHooks,\n runAfterToolCallHooks,\n runBeforeProviderCallHooks,\n runAfterProviderCallHooks,\n} from \"./hooks\"\n","import { readdir } from \"fs/promises\"\nimport { join } from \"path\"\nimport type { LupaPlugin } from \"./interface\"\nimport { globalEventBus } from \"@lupaflow/core\"\n\nclass PluginManager {\n private plugins: Map<string, LupaPlugin> = new Map()\n private loaded = false\n\n async load(plugin: LupaPlugin): Promise<void> {\n if (this.plugins.has(plugin.name)) {\n throw new Error(`Plugin \"${plugin.name}\" is already loaded`)\n }\n this.plugins.set(plugin.name, plugin)\n\n if (plugin.onEvent) {\n globalEventBus.onAny((event) => plugin.onEvent!(event))\n }\n\n if (plugin.onLoad) {\n await plugin.onLoad()\n }\n }\n\n async unload(name: string): Promise<void> {\n const plugin = this.plugins.get(name)\n if (!plugin) throw new Error(`Plugin \"${name}\" not found`)\n if (plugin.onUnload) await plugin.onUnload()\n this.plugins.delete(name)\n }\n\n async loadFromDirectory(dir: string): Promise<void> {\n try {\n const files = await readdir(dir)\n for (const file of files) {\n if (file.endsWith(\".js\") || file.endsWith(\".mjs\")) {\n try {\n const mod = await import(join(dir, file))\n if (mod.default && mod.default.name) {\n await this.load(mod.default)\n }\n } catch { /* ignore */ }\n }\n }\n } catch { /* ignore */ }\n }\n\n get(name: string): LupaPlugin | undefined {\n return this.plugins.get(name)\n }\n\n list(): LupaPlugin[] {\n return Array.from(this.plugins.values())\n }\n\n isLoaded(name: string): boolean {\n return this.plugins.has(name)\n }\n\n async unloadAll(): Promise<void> {\n for (const [name] of this.plugins) {\n await this.unload(name)\n }\n }\n}\n\nexport const pluginManager = new PluginManager()\n","import { pluginManager } from \"./loader\"\n\nexport function runBeforeAgentRunHooks(config: Record<string, unknown>): Record<string, unknown> {\n let result = { ...config }\n for (const plugin of pluginManager.list()) {\n if (plugin.hooks?.beforeAgentRun) {\n result = plugin.hooks.beforeAgentRun(result)\n }\n }\n return result\n}\n\nexport function runAfterAgentRunHooks(result: unknown): unknown {\n let output = result\n for (const plugin of pluginManager.list()) {\n if (plugin.hooks?.afterAgentRun) {\n output = plugin.hooks.afterAgentRun(output)\n }\n }\n return output\n}\n\nexport function runBeforeToolCallHooks(tool: string, args: Record<string, unknown>): Record<string, unknown> {\n let result = { ...args }\n for (const plugin of pluginManager.list()) {\n if (plugin.hooks?.beforeToolCall) {\n result = plugin.hooks.beforeToolCall(tool, result)\n }\n }\n return result\n}\n\nexport function runAfterToolCallHooks(result: unknown): unknown {\n let output = result\n for (const plugin of pluginManager.list()) {\n if (plugin.hooks?.afterToolCall) {\n output = plugin.hooks.afterToolCall(output)\n }\n }\n return output\n}\n\nexport function runBeforeProviderCallHooks(provider: string, request: Record<string, unknown>): Record<string, unknown> {\n let result = { ...request }\n for (const plugin of pluginManager.list()) {\n if (plugin.hooks?.beforeProviderCall) {\n result = plugin.hooks.beforeProviderCall(provider, result)\n }\n }\n return result\n}\n\nexport function runAfterProviderCallHooks(response: Record<string, unknown>): Record<string, unknown> {\n let result = { ...response }\n for (const plugin of pluginManager.list()) {\n if (plugin.hooks?.afterProviderCall) {\n result = plugin.hooks.afterProviderCall(result)\n }\n }\n return result\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,40 @@
1
+ import { LupaEvent } from '@lupaflow/types';
2
+
3
+ interface LupaPlugin {
4
+ name: string;
5
+ version: string;
6
+ description?: string;
7
+ onLoad?: () => void | Promise<void>;
8
+ onUnload?: () => void | Promise<void>;
9
+ onEvent?: (event: LupaEvent) => void | Promise<void>;
10
+ hooks?: {
11
+ beforeAgentRun?: (config: Record<string, unknown>) => Record<string, unknown>;
12
+ afterAgentRun?: (result: unknown) => unknown;
13
+ beforeToolCall?: (tool: string, args: Record<string, unknown>) => Record<string, unknown>;
14
+ afterToolCall?: (result: unknown) => unknown;
15
+ beforeProviderCall?: (provider: string, request: Record<string, unknown>) => Record<string, unknown>;
16
+ afterProviderCall?: (response: Record<string, unknown>) => Record<string, unknown>;
17
+ };
18
+ }
19
+
20
+ declare class PluginManager {
21
+ private plugins;
22
+ private loaded;
23
+ load(plugin: LupaPlugin): Promise<void>;
24
+ unload(name: string): Promise<void>;
25
+ loadFromDirectory(dir: string): Promise<void>;
26
+ get(name: string): LupaPlugin | undefined;
27
+ list(): LupaPlugin[];
28
+ isLoaded(name: string): boolean;
29
+ unloadAll(): Promise<void>;
30
+ }
31
+ declare const pluginManager: PluginManager;
32
+
33
+ declare function runBeforeAgentRunHooks(config: Record<string, unknown>): Record<string, unknown>;
34
+ declare function runAfterAgentRunHooks(result: unknown): unknown;
35
+ declare function runBeforeToolCallHooks(tool: string, args: Record<string, unknown>): Record<string, unknown>;
36
+ declare function runAfterToolCallHooks(result: unknown): unknown;
37
+ declare function runBeforeProviderCallHooks(provider: string, request: Record<string, unknown>): Record<string, unknown>;
38
+ declare function runAfterProviderCallHooks(response: Record<string, unknown>): Record<string, unknown>;
39
+
40
+ export { type LupaPlugin, pluginManager, runAfterAgentRunHooks, runAfterProviderCallHooks, runAfterToolCallHooks, runBeforeAgentRunHooks, runBeforeProviderCallHooks, runBeforeToolCallHooks };
@@ -0,0 +1,40 @@
1
+ import { LupaEvent } from '@lupaflow/types';
2
+
3
+ interface LupaPlugin {
4
+ name: string;
5
+ version: string;
6
+ description?: string;
7
+ onLoad?: () => void | Promise<void>;
8
+ onUnload?: () => void | Promise<void>;
9
+ onEvent?: (event: LupaEvent) => void | Promise<void>;
10
+ hooks?: {
11
+ beforeAgentRun?: (config: Record<string, unknown>) => Record<string, unknown>;
12
+ afterAgentRun?: (result: unknown) => unknown;
13
+ beforeToolCall?: (tool: string, args: Record<string, unknown>) => Record<string, unknown>;
14
+ afterToolCall?: (result: unknown) => unknown;
15
+ beforeProviderCall?: (provider: string, request: Record<string, unknown>) => Record<string, unknown>;
16
+ afterProviderCall?: (response: Record<string, unknown>) => Record<string, unknown>;
17
+ };
18
+ }
19
+
20
+ declare class PluginManager {
21
+ private plugins;
22
+ private loaded;
23
+ load(plugin: LupaPlugin): Promise<void>;
24
+ unload(name: string): Promise<void>;
25
+ loadFromDirectory(dir: string): Promise<void>;
26
+ get(name: string): LupaPlugin | undefined;
27
+ list(): LupaPlugin[];
28
+ isLoaded(name: string): boolean;
29
+ unloadAll(): Promise<void>;
30
+ }
31
+ declare const pluginManager: PluginManager;
32
+
33
+ declare function runBeforeAgentRunHooks(config: Record<string, unknown>): Record<string, unknown>;
34
+ declare function runAfterAgentRunHooks(result: unknown): unknown;
35
+ declare function runBeforeToolCallHooks(tool: string, args: Record<string, unknown>): Record<string, unknown>;
36
+ declare function runAfterToolCallHooks(result: unknown): unknown;
37
+ declare function runBeforeProviderCallHooks(provider: string, request: Record<string, unknown>): Record<string, unknown>;
38
+ declare function runAfterProviderCallHooks(response: Record<string, unknown>): Record<string, unknown>;
39
+
40
+ export { type LupaPlugin, pluginManager, runAfterAgentRunHooks, runAfterProviderCallHooks, runAfterToolCallHooks, runBeforeAgentRunHooks, runBeforeProviderCallHooks, runBeforeToolCallHooks };
package/dist/index.js ADDED
@@ -0,0 +1,124 @@
1
+ // src/loader.ts
2
+ import { readdir } from "fs/promises";
3
+ import { join } from "path";
4
+ import { globalEventBus } from "@lupaflow/core";
5
+ var PluginManager = class {
6
+ plugins = /* @__PURE__ */ new Map();
7
+ loaded = false;
8
+ async load(plugin) {
9
+ if (this.plugins.has(plugin.name)) {
10
+ throw new Error(`Plugin "${plugin.name}" is already loaded`);
11
+ }
12
+ this.plugins.set(plugin.name, plugin);
13
+ if (plugin.onEvent) {
14
+ globalEventBus.onAny((event) => plugin.onEvent(event));
15
+ }
16
+ if (plugin.onLoad) {
17
+ await plugin.onLoad();
18
+ }
19
+ }
20
+ async unload(name) {
21
+ const plugin = this.plugins.get(name);
22
+ if (!plugin) throw new Error(`Plugin "${name}" not found`);
23
+ if (plugin.onUnload) await plugin.onUnload();
24
+ this.plugins.delete(name);
25
+ }
26
+ async loadFromDirectory(dir) {
27
+ try {
28
+ const files = await readdir(dir);
29
+ for (const file of files) {
30
+ if (file.endsWith(".js") || file.endsWith(".mjs")) {
31
+ try {
32
+ const mod = await import(join(dir, file));
33
+ if (mod.default && mod.default.name) {
34
+ await this.load(mod.default);
35
+ }
36
+ } catch {
37
+ }
38
+ }
39
+ }
40
+ } catch {
41
+ }
42
+ }
43
+ get(name) {
44
+ return this.plugins.get(name);
45
+ }
46
+ list() {
47
+ return Array.from(this.plugins.values());
48
+ }
49
+ isLoaded(name) {
50
+ return this.plugins.has(name);
51
+ }
52
+ async unloadAll() {
53
+ for (const [name] of this.plugins) {
54
+ await this.unload(name);
55
+ }
56
+ }
57
+ };
58
+ var pluginManager = new PluginManager();
59
+
60
+ // src/hooks.ts
61
+ function runBeforeAgentRunHooks(config) {
62
+ let result = { ...config };
63
+ for (const plugin of pluginManager.list()) {
64
+ if (plugin.hooks?.beforeAgentRun) {
65
+ result = plugin.hooks.beforeAgentRun(result);
66
+ }
67
+ }
68
+ return result;
69
+ }
70
+ function runAfterAgentRunHooks(result) {
71
+ let output = result;
72
+ for (const plugin of pluginManager.list()) {
73
+ if (plugin.hooks?.afterAgentRun) {
74
+ output = plugin.hooks.afterAgentRun(output);
75
+ }
76
+ }
77
+ return output;
78
+ }
79
+ function runBeforeToolCallHooks(tool, args) {
80
+ let result = { ...args };
81
+ for (const plugin of pluginManager.list()) {
82
+ if (plugin.hooks?.beforeToolCall) {
83
+ result = plugin.hooks.beforeToolCall(tool, result);
84
+ }
85
+ }
86
+ return result;
87
+ }
88
+ function runAfterToolCallHooks(result) {
89
+ let output = result;
90
+ for (const plugin of pluginManager.list()) {
91
+ if (plugin.hooks?.afterToolCall) {
92
+ output = plugin.hooks.afterToolCall(output);
93
+ }
94
+ }
95
+ return output;
96
+ }
97
+ function runBeforeProviderCallHooks(provider, request) {
98
+ let result = { ...request };
99
+ for (const plugin of pluginManager.list()) {
100
+ if (plugin.hooks?.beforeProviderCall) {
101
+ result = plugin.hooks.beforeProviderCall(provider, result);
102
+ }
103
+ }
104
+ return result;
105
+ }
106
+ function runAfterProviderCallHooks(response) {
107
+ let result = { ...response };
108
+ for (const plugin of pluginManager.list()) {
109
+ if (plugin.hooks?.afterProviderCall) {
110
+ result = plugin.hooks.afterProviderCall(result);
111
+ }
112
+ }
113
+ return result;
114
+ }
115
+ export {
116
+ pluginManager,
117
+ runAfterAgentRunHooks,
118
+ runAfterProviderCallHooks,
119
+ runAfterToolCallHooks,
120
+ runBeforeAgentRunHooks,
121
+ runBeforeProviderCallHooks,
122
+ runBeforeToolCallHooks
123
+ };
124
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/loader.ts","../src/hooks.ts"],"sourcesContent":["import { readdir } from \"fs/promises\"\nimport { join } from \"path\"\nimport type { LupaPlugin } from \"./interface\"\nimport { globalEventBus } from \"@lupaflow/core\"\n\nclass PluginManager {\n private plugins: Map<string, LupaPlugin> = new Map()\n private loaded = false\n\n async load(plugin: LupaPlugin): Promise<void> {\n if (this.plugins.has(plugin.name)) {\n throw new Error(`Plugin \"${plugin.name}\" is already loaded`)\n }\n this.plugins.set(plugin.name, plugin)\n\n if (plugin.onEvent) {\n globalEventBus.onAny((event) => plugin.onEvent!(event))\n }\n\n if (plugin.onLoad) {\n await plugin.onLoad()\n }\n }\n\n async unload(name: string): Promise<void> {\n const plugin = this.plugins.get(name)\n if (!plugin) throw new Error(`Plugin \"${name}\" not found`)\n if (plugin.onUnload) await plugin.onUnload()\n this.plugins.delete(name)\n }\n\n async loadFromDirectory(dir: string): Promise<void> {\n try {\n const files = await readdir(dir)\n for (const file of files) {\n if (file.endsWith(\".js\") || file.endsWith(\".mjs\")) {\n try {\n const mod = await import(join(dir, file))\n if (mod.default && mod.default.name) {\n await this.load(mod.default)\n }\n } catch { /* ignore */ }\n }\n }\n } catch { /* ignore */ }\n }\n\n get(name: string): LupaPlugin | undefined {\n return this.plugins.get(name)\n }\n\n list(): LupaPlugin[] {\n return Array.from(this.plugins.values())\n }\n\n isLoaded(name: string): boolean {\n return this.plugins.has(name)\n }\n\n async unloadAll(): Promise<void> {\n for (const [name] of this.plugins) {\n await this.unload(name)\n }\n }\n}\n\nexport const pluginManager = new PluginManager()\n","import { pluginManager } from \"./loader\"\n\nexport function runBeforeAgentRunHooks(config: Record<string, unknown>): Record<string, unknown> {\n let result = { ...config }\n for (const plugin of pluginManager.list()) {\n if (plugin.hooks?.beforeAgentRun) {\n result = plugin.hooks.beforeAgentRun(result)\n }\n }\n return result\n}\n\nexport function runAfterAgentRunHooks(result: unknown): unknown {\n let output = result\n for (const plugin of pluginManager.list()) {\n if (plugin.hooks?.afterAgentRun) {\n output = plugin.hooks.afterAgentRun(output)\n }\n }\n return output\n}\n\nexport function runBeforeToolCallHooks(tool: string, args: Record<string, unknown>): Record<string, unknown> {\n let result = { ...args }\n for (const plugin of pluginManager.list()) {\n if (plugin.hooks?.beforeToolCall) {\n result = plugin.hooks.beforeToolCall(tool, result)\n }\n }\n return result\n}\n\nexport function runAfterToolCallHooks(result: unknown): unknown {\n let output = result\n for (const plugin of pluginManager.list()) {\n if (plugin.hooks?.afterToolCall) {\n output = plugin.hooks.afterToolCall(output)\n }\n }\n return output\n}\n\nexport function runBeforeProviderCallHooks(provider: string, request: Record<string, unknown>): Record<string, unknown> {\n let result = { ...request }\n for (const plugin of pluginManager.list()) {\n if (plugin.hooks?.beforeProviderCall) {\n result = plugin.hooks.beforeProviderCall(provider, result)\n }\n }\n return result\n}\n\nexport function runAfterProviderCallHooks(response: Record<string, unknown>): Record<string, unknown> {\n let result = { ...response }\n for (const plugin of pluginManager.list()) {\n if (plugin.hooks?.afterProviderCall) {\n result = plugin.hooks.afterProviderCall(result)\n }\n }\n return result\n}\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lupaflow/plugins",
3
- "version": "0.1.1",
3
+ "version": "0.1.2",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
6
  "publishConfig": {
@@ -16,7 +16,8 @@
16
16
  "import": "./dist/index.js"
17
17
  }
18
18
  },
19
- "scripts": {
19
+ "files": ["dist", "src", "package.json"],
20
+ "scripts": {
20
21
  "build": "tsup",
21
22
  "dev": "tsup --watch"
22
23
  },
package/tsconfig.json DELETED
@@ -1,8 +0,0 @@
1
- {
2
- "extends": "../../tsconfig.json",
3
- "compilerOptions": {
4
- "outDir": "./dist",
5
- "rootDir": "./src"
6
- },
7
- "include": ["src"]
8
- }
package/tsup.config.ts DELETED
@@ -1,9 +0,0 @@
1
- import { defineConfig } from "tsup"
2
- export default defineConfig({
3
- entry: { index: "src/index.ts" },
4
- format: ["cjs", "esm"],
5
- dts: true,
6
- sourcemap: true,
7
- clean: true,
8
- external: [/node_modules/],
9
- })