bun_plugins 1.1.1 → 1.2.0
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 +2 -2
- package/dist/Plugin.d.ts +28 -0
- package/dist/Plugin.d.ts.map +1 -0
- package/dist/Plugin.js +36 -0
- package/dist/Plugin.js.map +1 -0
- package/dist/PluginManager.d.ts +9 -0
- package/dist/PluginManager.d.ts.map +1 -1
- package/dist/PluginManager.js +147 -43
- package/dist/PluginManager.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/logger/LoggerAdapter.d.ts +77 -0
- package/dist/logger/LoggerAdapter.d.ts.map +1 -0
- package/dist/logger/LoggerAdapter.js +244 -0
- package/dist/logger/LoggerAdapter.js.map +1 -0
- package/dist/logger/LoggerFactory.d.ts +73 -0
- package/dist/logger/LoggerFactory.d.ts.map +1 -0
- package/dist/logger/LoggerFactory.js +99 -0
- package/dist/logger/LoggerFactory.js.map +1 -0
- package/dist/logger/index.d.ts +3 -0
- package/dist/logger/index.d.ts.map +1 -0
- package/dist/logger/index.js +3 -0
- package/dist/logger/index.js.map +1 -0
- package/dist/managers/ContextFactory.d.ts +1 -1
- package/dist/managers/ContextFactory.d.ts.map +1 -1
- package/dist/managers/ContextFactory.js +15 -11
- package/dist/managers/ContextFactory.js.map +1 -1
- package/dist/managers/DependencyManager.d.ts.map +1 -1
- package/dist/managers/DependencyManager.js +2 -0
- package/dist/managers/DependencyManager.js.map +1 -1
- package/dist/managers/HooksManager.d.ts +4 -1
- package/dist/managers/HooksManager.d.ts.map +1 -1
- package/dist/managers/HooksManager.js +36 -8
- package/dist/managers/HooksManager.js.map +1 -1
- package/dist/managers/ResourceManager.d.ts.map +1 -1
- package/dist/managers/ResourceManager.js +2 -1
- package/dist/managers/ResourceManager.js.map +1 -1
- package/dist/pluginRegistry.d.ts +13 -0
- package/dist/pluginRegistry.d.ts.map +1 -0
- package/dist/pluginRegistry.js +11 -0
- package/dist/pluginRegistry.js.map +1 -0
- package/dist/plugins/ActionRegistryPlugin.d.ts +23 -0
- package/dist/plugins/ActionRegistryPlugin.d.ts.map +1 -0
- package/dist/plugins/ActionRegistryPlugin.js +56 -0
- package/dist/plugins/ActionRegistryPlugin.js.map +1 -0
- package/dist/plugins/DynamicJSActionsPlugin.d.ts +21 -0
- package/dist/plugins/DynamicJSActionsPlugin.d.ts.map +1 -0
- package/dist/plugins/DynamicJSActionsPlugin.js +57 -0
- package/dist/plugins/DynamicJSActionsPlugin.js.map +1 -0
- package/dist/plugins/DynamicMathActionsPlugin.d.ts +22 -0
- package/dist/plugins/DynamicMathActionsPlugin.d.ts.map +1 -0
- package/dist/plugins/DynamicMathActionsPlugin.js +64 -0
- package/dist/plugins/DynamicMathActionsPlugin.js.map +1 -0
- package/dist/plugins/DynamicTextActionsPlugin.d.ts +22 -0
- package/dist/plugins/DynamicTextActionsPlugin.d.ts.map +1 -0
- package/dist/plugins/DynamicTextActionsPlugin.js +58 -0
- package/dist/plugins/DynamicTextActionsPlugin.js.map +1 -0
- package/dist/plugins/DynamicUtilityActionsPlugin.d.ts +22 -0
- package/dist/plugins/DynamicUtilityActionsPlugin.d.ts.map +1 -0
- package/dist/plugins/DynamicUtilityActionsPlugin.js +75 -0
- package/dist/plugins/DynamicUtilityActionsPlugin.js.map +1 -0
- package/dist/plugins/ExamplePlugin.d.ts +3 -0
- package/dist/plugins/ExamplePlugin.d.ts.map +1 -0
- package/dist/plugins/ExamplePlugin.js +41 -0
- package/dist/plugins/ExamplePlugin.js.map +1 -0
- package/dist/plugins/LifecycleDemoPlugin.d.ts +20 -0
- package/dist/plugins/LifecycleDemoPlugin.d.ts.map +1 -0
- package/dist/plugins/LifecycleDemoPlugin.js +34 -0
- package/dist/plugins/LifecycleDemoPlugin.js.map +1 -0
- package/dist/plugins/MathPlugin.d.ts +16 -0
- package/dist/plugins/MathPlugin.d.ts.map +1 -0
- package/dist/plugins/MathPlugin.js +25 -0
- package/dist/plugins/MathPlugin.js.map +1 -0
- package/dist/plugins/MyJSPlugin.d.ts +7 -0
- package/dist/plugins/MyJSPlugin.d.ts.map +1 -0
- package/dist/plugins/MyJSPlugin.js +12 -0
- package/dist/plugins/MyJSPlugin.js.map +1 -0
- package/dist/plugins/arktype/index.d.ts +8 -0
- package/dist/plugins/arktype/index.d.ts.map +1 -0
- package/dist/plugins/arktype/index.js +25 -0
- package/dist/plugins/arktype/index.js.map +1 -0
- package/dist/src/Plugin.d.ts +28 -0
- package/dist/src/Plugin.d.ts.map +1 -0
- package/dist/src/Plugin.js +36 -0
- package/dist/src/Plugin.js.map +1 -0
- package/dist/src/PluginManager.d.ts +74 -0
- package/dist/src/PluginManager.d.ts.map +1 -0
- package/dist/src/PluginManager.js +689 -0
- package/dist/src/PluginManager.js.map +1 -0
- package/dist/src/index.d.ts +7 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +7 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/logger/LoggerAdapter.d.ts +77 -0
- package/dist/src/logger/LoggerAdapter.d.ts.map +1 -0
- package/dist/src/logger/LoggerAdapter.js +242 -0
- package/dist/src/logger/LoggerAdapter.js.map +1 -0
- package/dist/src/logger/LoggerFactory.d.ts +73 -0
- package/dist/src/logger/LoggerFactory.d.ts.map +1 -0
- package/dist/src/logger/LoggerFactory.js +99 -0
- package/dist/src/logger/LoggerFactory.js.map +1 -0
- package/dist/src/logger/index.d.ts +3 -0
- package/dist/src/logger/index.d.ts.map +1 -0
- package/dist/src/logger/index.js +3 -0
- package/dist/src/logger/index.js.map +1 -0
- package/dist/src/managers/ContextFactory.d.ts +6 -0
- package/dist/src/managers/ContextFactory.d.ts.map +1 -0
- package/dist/src/managers/ContextFactory.js +132 -0
- package/dist/src/managers/ContextFactory.js.map +1 -0
- package/dist/src/managers/DependencyManager.d.ts +10 -0
- package/dist/src/managers/DependencyManager.d.ts.map +1 -0
- package/dist/src/managers/DependencyManager.js +96 -0
- package/dist/src/managers/DependencyManager.js.map +1 -0
- package/dist/src/managers/HooksManager.d.ts +24 -0
- package/dist/src/managers/HooksManager.d.ts.map +1 -0
- package/dist/src/managers/HooksManager.js +145 -0
- package/dist/src/managers/HooksManager.js.map +1 -0
- package/dist/src/managers/ResourceManager.d.ts +16 -0
- package/dist/src/managers/ResourceManager.d.ts.map +1 -0
- package/dist/src/managers/ResourceManager.js +50 -0
- package/dist/src/managers/ResourceManager.js.map +1 -0
- package/dist/src/pluginRegistry.d.ts +13 -0
- package/dist/src/pluginRegistry.d.ts.map +1 -0
- package/dist/src/pluginRegistry.js +11 -0
- package/dist/src/pluginRegistry.js.map +1 -0
- package/dist/src/storage/JsonPluginStorage.d.ts +15 -0
- package/dist/src/storage/JsonPluginStorage.d.ts.map +1 -0
- package/dist/src/storage/JsonPluginStorage.js +75 -0
- package/dist/src/storage/JsonPluginStorage.js.map +1 -0
- package/dist/src/types/arktype_converter.d.ts +19 -0
- package/dist/src/types/arktype_converter.d.ts.map +1 -0
- package/dist/src/types/arktype_converter.js +73 -0
- package/dist/src/types/arktype_converter.js.map +1 -0
- package/dist/src/types/generator.d.ts +8 -0
- package/dist/src/types/generator.d.ts.map +1 -0
- package/dist/src/types/generator.js +9 -0
- package/dist/src/types/generator.js.map +1 -0
- package/dist/src/types/interfaces.d.ts +55 -0
- package/dist/src/types/interfaces.d.ts.map +1 -0
- package/dist/src/types/interfaces.js +5 -0
- package/dist/src/types/interfaces.js.map +1 -0
- package/dist/src/types/plugin-registry.d.ts +21 -0
- package/dist/src/types/plugin-registry.d.ts.map +1 -0
- package/dist/src/types/plugin-registry.js +4 -0
- package/dist/src/types/plugin-registry.js.map +1 -0
- package/dist/src/types/plugin_generator.d.ts +56 -0
- package/dist/src/types/plugin_generator.d.ts.map +1 -0
- package/dist/src/types/plugin_generator.js +659 -0
- package/dist/src/types/plugin_generator.js.map +1 -0
- package/dist/src/types.d.ts +211 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +62 -0
- package/dist/src/types.js.map +1 -0
- package/dist/src/utils/errorParser.d.ts +3 -0
- package/dist/src/utils/errorParser.d.ts.map +1 -0
- package/dist/src/utils/errorParser.js +23 -0
- package/dist/src/utils/errorParser.js.map +1 -0
- package/dist/src/utils/pluginValidator.d.ts +17 -0
- package/dist/src/utils/pluginValidator.d.ts.map +1 -0
- package/dist/src/utils/pluginValidator.js +74 -0
- package/dist/src/utils/pluginValidator.js.map +1 -0
- package/dist/src/utils/security.d.ts +3 -0
- package/dist/src/utils/security.d.ts.map +1 -0
- package/dist/src/utils/security.js +26 -0
- package/dist/src/utils/security.js.map +1 -0
- package/dist/src/worker/WorkerRunner.d.ts +2 -0
- package/dist/src/worker/WorkerRunner.d.ts.map +1 -0
- package/dist/src/worker/WorkerRunner.js +274 -0
- package/dist/src/worker/WorkerRunner.js.map +1 -0
- package/dist/storage/JsonPluginStorage.d.ts +2 -1
- package/dist/storage/JsonPluginStorage.d.ts.map +1 -1
- package/dist/storage/JsonPluginStorage.js +26 -14
- package/dist/storage/JsonPluginStorage.js.map +1 -1
- package/dist/types.d.ts +26 -7
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +3 -1
- package/dist/types.js.map +1 -1
- package/dist/worker/WorkerRunner.js +32 -12
- package/dist/worker/WorkerRunner.js.map +1 -1
- package/package.json +4 -3
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { join, dirname } from "node:path";
|
|
2
|
+
import { mkdir } from "node:fs/promises";
|
|
3
|
+
import { logger } from "../logger";
|
|
4
|
+
export class JsonPluginStorage {
|
|
5
|
+
filePath;
|
|
6
|
+
data = null;
|
|
7
|
+
lastModified = 0;
|
|
8
|
+
constructor(basePath, pluginName) {
|
|
9
|
+
this.filePath = join(basePath, "plugins", pluginName, "storage.json");
|
|
10
|
+
}
|
|
11
|
+
async ensureLoaded(force = false) {
|
|
12
|
+
try {
|
|
13
|
+
const file = Bun.file(this.filePath);
|
|
14
|
+
const exists = await file.exists();
|
|
15
|
+
if (!exists) {
|
|
16
|
+
this.data = this.data || {};
|
|
17
|
+
this.lastModified = 0;
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
const stats = await import("node:fs/promises").then(fs => fs.stat(this.filePath));
|
|
21
|
+
const mtime = stats.mtimeMs;
|
|
22
|
+
if (force || this.data === null || mtime > this.lastModified) {
|
|
23
|
+
this.data = await file.json();
|
|
24
|
+
this.lastModified = mtime;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
catch (e) {
|
|
28
|
+
if (this.data === null) {
|
|
29
|
+
logger.getLogger("JsonPluginStorage").error(`Failed to load storage for ${this.filePath}`, e);
|
|
30
|
+
this.data = {};
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
async save() {
|
|
35
|
+
if (this.data === null)
|
|
36
|
+
return;
|
|
37
|
+
try {
|
|
38
|
+
await mkdir(dirname(this.filePath), { recursive: true });
|
|
39
|
+
const content = JSON.stringify(this.data, null, 2);
|
|
40
|
+
await Bun.write(this.filePath, content);
|
|
41
|
+
// Update local mtime to avoid immediate reload
|
|
42
|
+
const stats = await import("node:fs/promises").then(fs => fs.stat(this.filePath));
|
|
43
|
+
this.lastModified = stats.mtimeMs;
|
|
44
|
+
}
|
|
45
|
+
catch (e) {
|
|
46
|
+
logger.getLogger("JsonPluginStorage").error(`Failed to save storage for ${this.filePath}`, e);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
async get(key, defaultValue) {
|
|
50
|
+
await this.ensureLoaded();
|
|
51
|
+
return this.data?.[key] ?? defaultValue;
|
|
52
|
+
}
|
|
53
|
+
async set(key, value) {
|
|
54
|
+
await this.ensureLoaded();
|
|
55
|
+
if (this.data) {
|
|
56
|
+
this.data[key] = value;
|
|
57
|
+
await this.save();
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
async delete(key) {
|
|
61
|
+
await this.ensureLoaded();
|
|
62
|
+
if (this.data) {
|
|
63
|
+
delete this.data[key];
|
|
64
|
+
await this.save();
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
async clear() {
|
|
68
|
+
this.data = {};
|
|
69
|
+
await this.save();
|
|
70
|
+
}
|
|
71
|
+
async reload() {
|
|
72
|
+
await this.ensureLoaded(true);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=JsonPluginStorage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"JsonPluginStorage.js","sourceRoot":"","sources":["../../../src/storage/JsonPluginStorage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { PropertyInfo, ArkTypeSchemaInfo } from "./interfaces";
|
|
2
|
+
/**
|
|
3
|
+
* Utilities for converting between TypeScript classes and arktype schemas.
|
|
4
|
+
*/
|
|
5
|
+
export declare class ArkTypeConverter {
|
|
6
|
+
/**
|
|
7
|
+
* Converts a TypeScript class to an arktype schema.
|
|
8
|
+
*/
|
|
9
|
+
static classToArkType(className: string, properties: PropertyInfo[]): string;
|
|
10
|
+
/**
|
|
11
|
+
* Converts a TypeScript type to its arktype equivalent.
|
|
12
|
+
*/
|
|
13
|
+
static typeToArkType(prop: PropertyInfo): string;
|
|
14
|
+
/**
|
|
15
|
+
* Converts a nested type to arktype.
|
|
16
|
+
*/
|
|
17
|
+
static nestedTypeToArkType(schema: ArkTypeSchemaInfo): string;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=arktype_converter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arktype_converter.d.ts","sourceRoot":"","sources":["../../../src/types/arktype_converter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEpE;;GAEG;AACH,qBAAa,gBAAgB;IAC3B;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,MAAM;IAU5E;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM;IA8ChD;;OAEG;IACH,MAAM,CAAC,mBAAmB,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM;CAW9D"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utilities for converting between TypeScript classes and arktype schemas.
|
|
3
|
+
*/
|
|
4
|
+
export class ArkTypeConverter {
|
|
5
|
+
/**
|
|
6
|
+
* Converts a TypeScript class to an arktype schema.
|
|
7
|
+
*/
|
|
8
|
+
static classToArkType(className, properties) {
|
|
9
|
+
const schemaProps = properties.map(prop => {
|
|
10
|
+
const typeStr = this.typeToArkType(prop);
|
|
11
|
+
return ` ${prop.name}${prop.isOptional ? "?" : ""}: ${typeStr}`;
|
|
12
|
+
}).join(",\n");
|
|
13
|
+
const varName = className.charAt(0).toLowerCase() + className.slice(1);
|
|
14
|
+
return `const ${varName}Schema = type({\n${schemaProps}\n});`;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Converts a TypeScript type to its arktype equivalent.
|
|
18
|
+
*/
|
|
19
|
+
static typeToArkType(prop) {
|
|
20
|
+
// Handle method types - they should be "function" in arktype
|
|
21
|
+
if (prop.isMethod) {
|
|
22
|
+
return "function";
|
|
23
|
+
}
|
|
24
|
+
if (prop.isArray) {
|
|
25
|
+
if (prop.nestedType) {
|
|
26
|
+
// For arrays with nested types, use the type name
|
|
27
|
+
return `array("${prop.type}")`;
|
|
28
|
+
}
|
|
29
|
+
return `array("${prop.type.toLowerCase()}")`;
|
|
30
|
+
}
|
|
31
|
+
// Check if this is a custom class type (starts with uppercase letter)
|
|
32
|
+
const isCustomClass = /^[A-Z]/.test(prop.type) &&
|
|
33
|
+
prop.type !== "String" &&
|
|
34
|
+
prop.type !== "Number" &&
|
|
35
|
+
prop.type !== "Boolean" &&
|
|
36
|
+
prop.type !== "Date" &&
|
|
37
|
+
prop.type !== "Array" &&
|
|
38
|
+
prop.type !== "Promise" &&
|
|
39
|
+
prop.type !== "Record" &&
|
|
40
|
+
prop.type !== "Map";
|
|
41
|
+
if (isCustomClass) {
|
|
42
|
+
// Keep custom class types as-is (without quotes) for proper type reference
|
|
43
|
+
return prop.type;
|
|
44
|
+
}
|
|
45
|
+
const typeMap = {
|
|
46
|
+
"string": "string",
|
|
47
|
+
"number": "number",
|
|
48
|
+
"boolean": "boolean",
|
|
49
|
+
"any": "any",
|
|
50
|
+
"unknown": "unknown",
|
|
51
|
+
"void": "undefined",
|
|
52
|
+
"null": "null",
|
|
53
|
+
"Date": "string", // Dates are represented as strings in JSON
|
|
54
|
+
"Map": "Map",
|
|
55
|
+
"object": "any"
|
|
56
|
+
};
|
|
57
|
+
return typeMap[prop.type] ?? `"${prop.type}"`; // Enums or literal types
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Converts a nested type to arktype.
|
|
61
|
+
*/
|
|
62
|
+
static nestedTypeToArkType(schema) {
|
|
63
|
+
if (schema.properties.length === 0) {
|
|
64
|
+
return "any";
|
|
65
|
+
}
|
|
66
|
+
const props = schema.properties.map(prop => {
|
|
67
|
+
const typeStr = this.typeToArkType(prop);
|
|
68
|
+
return ` ${prop.name}${prop.isOptional ? "?" : ""}: ${typeStr}`;
|
|
69
|
+
}).join(",\n");
|
|
70
|
+
return `type({\n${props}\n})`;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=arktype_converter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arktype_converter.js","sourceRoot":"","sources":["../../../src/types/arktype_converter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Modular type generator for plugins.
|
|
3
|
+
* This module re-exports all types and generators from the modularized files.
|
|
4
|
+
*/
|
|
5
|
+
export type { PluginTypeInfo, ArkTypeSchemaInfo, PropertyInfo, MethodParamInfo, GeneratorOptions } from "./interfaces";
|
|
6
|
+
export { ArkTypeConverter } from "./arktype_converter";
|
|
7
|
+
export { PluginTypeGenerator, generatePluginTypes } from "./plugin_generator";
|
|
8
|
+
//# sourceMappingURL=generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../../src/types/generator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,YAAY,EACV,cAAc,EACd,iBAAiB,EACjB,YAAY,EACZ,eAAe,EACf,gBAAgB,EACjB,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAGvD,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Modular type generator for plugins.
|
|
3
|
+
* This module re-exports all types and generators from the modularized files.
|
|
4
|
+
*/
|
|
5
|
+
// Re-export ArkTypeConverter
|
|
6
|
+
export { ArkTypeConverter } from "./arktype_converter";
|
|
7
|
+
// Re-export PluginTypeGenerator
|
|
8
|
+
export { PluginTypeGenerator, generatePluginTypes } from "./plugin_generator";
|
|
9
|
+
//# sourceMappingURL=generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../src/types/generator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH,6BAA6B;AAC7B,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,gCAAgC;AAChC,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type definitions for the plugin type generator system.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Information about a plugin's type metadata.
|
|
6
|
+
*/
|
|
7
|
+
export interface PluginTypeInfo {
|
|
8
|
+
name: string;
|
|
9
|
+
version: string;
|
|
10
|
+
className: string;
|
|
11
|
+
filePath: string;
|
|
12
|
+
isTypeScript: boolean;
|
|
13
|
+
apiInterface?: string;
|
|
14
|
+
dependencies?: Record<string, string>;
|
|
15
|
+
arkTypeSchema?: ArkTypeSchemaInfo;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Information about an ArkType schema derived from a class.
|
|
19
|
+
*/
|
|
20
|
+
export interface ArkTypeSchemaInfo {
|
|
21
|
+
schemaName: string;
|
|
22
|
+
schemaDefinition: string;
|
|
23
|
+
typeDefinition: string;
|
|
24
|
+
properties: PropertyInfo[];
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Information about a property extracted from a class.
|
|
28
|
+
*/
|
|
29
|
+
export interface PropertyInfo {
|
|
30
|
+
name: string;
|
|
31
|
+
type: string;
|
|
32
|
+
isOptional: boolean;
|
|
33
|
+
isArray: boolean;
|
|
34
|
+
nestedType?: ArkTypeSchemaInfo;
|
|
35
|
+
isMethod?: boolean;
|
|
36
|
+
params?: MethodParamInfo[];
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Information about a method parameter.
|
|
40
|
+
*/
|
|
41
|
+
export interface MethodParamInfo {
|
|
42
|
+
name: string;
|
|
43
|
+
type: string;
|
|
44
|
+
isOptional: boolean;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Options for the generator.
|
|
48
|
+
*/
|
|
49
|
+
export interface GeneratorOptions {
|
|
50
|
+
pluginsDir: string;
|
|
51
|
+
outputDir: string;
|
|
52
|
+
baseApiInterface?: string;
|
|
53
|
+
packageName?: string;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=interfaces.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../../src/types/interfaces.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,aAAa,CAAC,EAAE,iBAAiB,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,YAAY,EAAE,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,eAAe,EAAE,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../../src/types/interfaces.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { IPlugin } from "../types";
|
|
2
|
+
/**
|
|
3
|
+
* Plugin name type - union of all discovered plugin names
|
|
4
|
+
*/
|
|
5
|
+
export type PluginNames = string;
|
|
6
|
+
/**
|
|
7
|
+
* Get the instance type for a plugin by name
|
|
8
|
+
*/
|
|
9
|
+
export type PluginInstanceType<T extends PluginNames> = T extends T ? IPlugin : IPlugin;
|
|
10
|
+
/**
|
|
11
|
+
* Plugin factory map type - maps plugin names to their instance types
|
|
12
|
+
*/
|
|
13
|
+
export interface PluginFactoryMap {
|
|
14
|
+
[key: string]: {
|
|
15
|
+
name: string;
|
|
16
|
+
version: string;
|
|
17
|
+
instance: IPlugin;
|
|
18
|
+
api: unknown;
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=plugin-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-registry.d.ts","sourceRoot":"","sources":["../../../src/types/plugin-registry.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAExC;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC;AAEjC;;GAEG;AACH,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,WAAW,IAAI,CAAC,SAAS,CAAC,GAAG,OAAO,GAAG,OAAO,CAAC;AAExF;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,CAAC,GAAG,EAAE,MAAM,GAAG;QACb,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,OAAO,CAAC;QAClB,GAAG,EAAE,OAAO,CAAC;KACd,CAAC;CACH"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-registry.js","sourceRoot":"","sources":["../../../src/types/plugin-registry.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,+DAA+D"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import ts from "typescript";
|
|
2
|
+
import type { PluginTypeInfo, ArkTypeSchemaInfo, PropertyInfo, GeneratorOptions } from "./interfaces";
|
|
3
|
+
/**
|
|
4
|
+
* Main generator for handling conversion between classes and arktype schemas.
|
|
5
|
+
* Provides dynamic typing and autocomplete without static KnownPluginNames.
|
|
6
|
+
*/
|
|
7
|
+
export declare class PluginTypeGenerator {
|
|
8
|
+
private pluginsDir;
|
|
9
|
+
private outputDir;
|
|
10
|
+
private packageName;
|
|
11
|
+
private compilerOptions;
|
|
12
|
+
constructor(options: GeneratorOptions);
|
|
13
|
+
private getCompilerOptions;
|
|
14
|
+
private getDefaultOptions;
|
|
15
|
+
scanPlugins(): Promise<PluginTypeInfo[]>;
|
|
16
|
+
private scanDirectory;
|
|
17
|
+
/**
|
|
18
|
+
* Extracts the properties and methods from a TypeScript class.
|
|
19
|
+
*/
|
|
20
|
+
extractClassProperties(sourceFile: ts.SourceFile): PropertyInfo[];
|
|
21
|
+
private extractMethodInfo;
|
|
22
|
+
private extractPropertyType;
|
|
23
|
+
private isArrayType;
|
|
24
|
+
private extractNestedType;
|
|
25
|
+
/**
|
|
26
|
+
* Generate a type string for public methods of a plugin class.
|
|
27
|
+
*/
|
|
28
|
+
private generatePublicMethodsType;
|
|
29
|
+
private findTypeProperties;
|
|
30
|
+
private mapTypeName;
|
|
31
|
+
private inferTypeFromInitializer;
|
|
32
|
+
private getSymbolAtLocation;
|
|
33
|
+
private getTypeChecker;
|
|
34
|
+
private parseTypeScriptPlugin;
|
|
35
|
+
private parseJavaScriptPlugin;
|
|
36
|
+
private parsePlugin;
|
|
37
|
+
/**
|
|
38
|
+
* Generates dynamic type declarations using a factory pattern.
|
|
39
|
+
* No static KnownPluginNames - types are computed at compile time.
|
|
40
|
+
*
|
|
41
|
+
* The API type includes:
|
|
42
|
+
* - Base plugin properties (name, version)
|
|
43
|
+
* - Public methods from the class
|
|
44
|
+
* - Shared API methods if getApi is defined
|
|
45
|
+
*/
|
|
46
|
+
generateDeclarations(plugins: PluginTypeInfo[], baseApiInterface?: string): string;
|
|
47
|
+
generateModuleExports(plugins: PluginTypeInfo[], baseApiInterface?: string): string;
|
|
48
|
+
generate(): Promise<PluginTypeInfo[]>;
|
|
49
|
+
getPlugins(): Promise<PluginTypeInfo[]>;
|
|
50
|
+
static convertClassToArkType(classFilePath: string): Promise<ArkTypeSchemaInfo | null>;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Generates plugin types from a plugins directory.
|
|
54
|
+
*/
|
|
55
|
+
export declare function generatePluginTypes(pluginsDir?: string, outputDir?: string, packageName?: string): Promise<PluginTypeInfo[]>;
|
|
56
|
+
//# sourceMappingURL=plugin_generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin_generator.d.ts","sourceRoot":"","sources":["../../../src/types/plugin_generator.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAGtG;;;GAGG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,eAAe,CAAqB;gBAEhC,OAAO,EAAE,gBAAgB;IAOrC,OAAO,CAAC,kBAAkB;IAoB1B,OAAO,CAAC,iBAAiB;IAWnB,WAAW,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;YAsBhC,aAAa;IA+B3B;;OAEG;IACH,sBAAsB,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,GAAG,YAAY,EAAE;IA6CjE,OAAO,CAAC,iBAAiB;IAmCzB,OAAO,CAAC,mBAAmB;IAiC3B,OAAO,CAAC,WAAW;IAUnB,OAAO,CAAC,iBAAiB;IAyCzB;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAiBjC,OAAO,CAAC,kBAAkB;IAyC1B,OAAO,CAAC,WAAW;IAsBnB,OAAO,CAAC,wBAAwB;IAgBhC,OAAO,CAAC,mBAAmB;IAc3B,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,qBAAqB;IAkG7B,OAAO,CAAC,qBAAqB;IA2B7B,OAAO,CAAC,WAAW;IAYnB;;;;;;;;OAQG;IACH,oBAAoB,CAAC,OAAO,EAAE,cAAc,EAAE,EAAE,gBAAgB,GAAE,MAAwB,GAAG,MAAM;IAwHnG,qBAAqB,CAAC,OAAO,EAAE,cAAc,EAAE,EAAE,gBAAgB,GAAE,MAAwB,GAAG,MAAM;IA+B9F,QAAQ,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAqBrC,UAAU,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;WAIhC,qBAAqB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;CA4C7F;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,UAAU,GAAE,MAAuC,EACnD,SAAS,GAAE,MAA4C,EACvD,WAAW,GAAE,MAAsB,GAClC,OAAO,CAAC,cAAc,EAAE,CAAC,CAG3B"}
|