@nodetool-ai/node-sdk 0.7.0-rc.11

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.
Files changed (61) hide show
  1. package/dist/base-node.d.ts +141 -0
  2. package/dist/base-node.d.ts.map +1 -0
  3. package/dist/base-node.js +225 -0
  4. package/dist/base-node.js.map +1 -0
  5. package/dist/decorators.d.ts +19 -0
  6. package/dist/decorators.d.ts.map +1 -0
  7. package/dist/decorators.js +42 -0
  8. package/dist/decorators.js.map +1 -0
  9. package/dist/docs/index.d.ts +4 -0
  10. package/dist/docs/index.d.ts.map +1 -0
  11. package/dist/docs/index.js +4 -0
  12. package/dist/docs/index.js.map +1 -0
  13. package/dist/docs/nodes.d.ts +10 -0
  14. package/dist/docs/nodes.d.ts.map +1 -0
  15. package/dist/docs/nodes.js +99 -0
  16. package/dist/docs/nodes.js.map +1 -0
  17. package/dist/docs/overview.d.ts +6 -0
  18. package/dist/docs/overview.d.ts.map +1 -0
  19. package/dist/docs/overview.js +71 -0
  20. package/dist/docs/overview.js.map +1 -0
  21. package/dist/docs/workflows.d.ts +10 -0
  22. package/dist/docs/workflows.d.ts.map +1 -0
  23. package/dist/docs/workflows.js +112 -0
  24. package/dist/docs/workflows.js.map +1 -0
  25. package/dist/index.d.ts +14 -0
  26. package/dist/index.d.ts.map +1 -0
  27. package/dist/index.js +12 -0
  28. package/dist/index.js.map +1 -0
  29. package/dist/metadata.d.ts +76 -0
  30. package/dist/metadata.d.ts.map +1 -0
  31. package/dist/metadata.js +247 -0
  32. package/dist/metadata.js.map +1 -0
  33. package/dist/node-metadata.d.ts +16 -0
  34. package/dist/node-metadata.d.ts.map +1 -0
  35. package/dist/node-metadata.js +266 -0
  36. package/dist/node-metadata.js.map +1 -0
  37. package/dist/nodes/test-nodes.d.ts +215 -0
  38. package/dist/nodes/test-nodes.d.ts.map +1 -0
  39. package/dist/nodes/test-nodes.js +436 -0
  40. package/dist/nodes/test-nodes.js.map +1 -0
  41. package/dist/package-registry-client.d.ts +12 -0
  42. package/dist/package-registry-client.d.ts.map +1 -0
  43. package/dist/package-registry-client.js +40 -0
  44. package/dist/package-registry-client.js.map +1 -0
  45. package/dist/python-package-scan.d.ts +45 -0
  46. package/dist/python-package-scan.d.ts.map +1 -0
  47. package/dist/python-package-scan.js +158 -0
  48. package/dist/python-package-scan.js.map +1 -0
  49. package/dist/registry.d.ts +55 -0
  50. package/dist/registry.d.ts.map +1 -0
  51. package/dist/registry.js +188 -0
  52. package/dist/registry.js.map +1 -0
  53. package/dist/search.d.ts +58 -0
  54. package/dist/search.d.ts.map +1 -0
  55. package/dist/search.js +127 -0
  56. package/dist/search.js.map +1 -0
  57. package/dist/validation.d.ts +63 -0
  58. package/dist/validation.d.ts.map +1 -0
  59. package/dist/validation.js +138 -0
  60. package/dist/validation.js.map +1 -0
  61. package/package.json +49 -0
@@ -0,0 +1,141 @@
1
+ import type { NodeDescriptor, SyncMode } from "@nodetool-ai/protocol";
2
+ import type { NodeExecutor } from "@nodetool-ai/kernel";
3
+ import type { ProcessingContext, StreamingInputs, StreamingOutputs } from "@nodetool-ai/runtime";
4
+ import { type NodePropertyValidationIssue } from "./validation.js";
5
+ export interface DeclaredOutputTypes {
6
+ [name: string]: string;
7
+ }
8
+ export interface NodeValidationOptions {
9
+ /**
10
+ * Set of property names that are connected to incoming data edges. These
11
+ * properties are produced at runtime by upstream nodes, so their current
12
+ * value should not be flagged as missing.
13
+ */
14
+ connectedHandles?: ReadonlySet<string> | ReadonlyArray<string>;
15
+ /** Node id to attach to issues. Defaults to the node's __node_id. */
16
+ nodeId?: string;
17
+ }
18
+ export type NodeClass = {
19
+ new (properties?: Record<string, unknown>): BaseNode;
20
+ nodeType: string;
21
+ title: string;
22
+ description: string;
23
+ layout?: string;
24
+ recommendedModels?: unknown[];
25
+ basicFields?: string[];
26
+ requiredSettings?: string[];
27
+ requiredRuntimes?: string[];
28
+ isStreamingInput: boolean;
29
+ isStreamingOutput: boolean;
30
+ isDynamic: boolean;
31
+ syncMode: SyncMode;
32
+ isControlled: boolean;
33
+ exposeAsTool?: boolean;
34
+ supportsDynamicOutputs?: boolean;
35
+ autoSaveAsset: boolean;
36
+ modelPacks?: unknown[];
37
+ metadataOutputTypes?: DeclaredOutputTypes;
38
+ outputTypes: DeclaredOutputTypes;
39
+ getDeclaredProperties(): Array<{
40
+ name: string;
41
+ options: {
42
+ type: string;
43
+ default?: unknown;
44
+ };
45
+ }>;
46
+ getDeclaredOutputs(): Record<string, string>;
47
+ toDescriptor(id?: string): NodeDescriptor;
48
+ validateProperties(properties: Record<string, unknown>, options?: NodeValidationOptions): NodePropertyValidationIssue[];
49
+ };
50
+ /** Keys that belong to BaseNode itself and should not appear in NodeProps. */
51
+ type BaseNodeKey = keyof BaseNode | "dynamicProps";
52
+ /**
53
+ * Extract the @prop-declared fields of a node as an optional record.
54
+ *
55
+ * Usage:
56
+ * ```ts
57
+ * async process(): Promise<{ output: ImageRef }> {
58
+ * // Properties are assigned before process() is called
59
+ * const prompt = this.prompt; // typed via @prop
60
+ * }
61
+ * ```
62
+ */
63
+ export type NodeProps<T extends BaseNode> = Partial<Pick<T, Exclude<keyof T, BaseNodeKey | `__${string}` | `_${string}`>>>;
64
+ export declare abstract class BaseNode {
65
+ static readonly nodeType: string;
66
+ static readonly title: string;
67
+ static readonly description: string;
68
+ static readonly layout: string | undefined;
69
+ static readonly recommendedModels: unknown[] | undefined;
70
+ static readonly basicFields: string[] | undefined;
71
+ static readonly requiredSettings: string[] | undefined;
72
+ static readonly requiredRuntimes: string[] | undefined;
73
+ static readonly isStreamingInput: boolean;
74
+ static readonly isStreamingOutput: boolean;
75
+ static readonly isDynamic: boolean;
76
+ static readonly syncMode: SyncMode;
77
+ static readonly isControlled: boolean;
78
+ static readonly exposeAsTool: boolean | undefined;
79
+ static readonly supportsDynamicOutputs: boolean | undefined;
80
+ static readonly autoSaveAsset: boolean;
81
+ static readonly modelPacks: unknown[] | undefined;
82
+ static readonly metadataOutputTypes: DeclaredOutputTypes | undefined;
83
+ static readonly outputTypes: DeclaredOutputTypes;
84
+ __node_id: string;
85
+ __node_name: string;
86
+ protected dynamicProps: Map<string, unknown>;
87
+ constructor(properties?: Record<string, unknown>);
88
+ static getDeclaredProperties(): import("./decorators.js").DeclaredPropertyMetadata[];
89
+ static getDeclaredOutputs(): Record<string, string>;
90
+ /**
91
+ * Validate a property bag against this node's declared @prop metadata.
92
+ *
93
+ * Flags two classes of problem:
94
+ * - Properties declared `required: true` whose value is missing/empty.
95
+ * - Properties whose type ends in `_model` whose value carries the
96
+ * "empty" provider sentinel or an empty model id.
97
+ *
98
+ * Properties listed in `options.connectedHandles` are ignored — those
99
+ * receive their value from an upstream node at runtime.
100
+ *
101
+ * Subclasses may override this to add custom rules. Most nodes won't
102
+ * need to: declarative `@prop` metadata is enough.
103
+ */
104
+ static validateProperties(properties: Record<string, unknown>, options?: NodeValidationOptions): NodePropertyValidationIssue[];
105
+ assign(properties: Record<string, unknown>): void;
106
+ serialize(): Record<string, unknown>;
107
+ deserialize(data: Record<string, unknown>): void;
108
+ setDynamic(key: string, value: unknown): void;
109
+ getDynamic<T = unknown>(key: string): T | undefined;
110
+ initialize(): Promise<void>;
111
+ preProcess(): Promise<void>;
112
+ finalize(): Promise<void>;
113
+ /**
114
+ * Validate the current property values on this instance.
115
+ *
116
+ * Default implementation defers to the class's static validateProperties
117
+ * over the result of `serialize()`. Subclasses can override to add
118
+ * runtime-only rules (for example, mutually-exclusive fields).
119
+ */
120
+ validate(options?: NodeValidationOptions): NodePropertyValidationIssue[];
121
+ abstract process(context?: ProcessingContext): Promise<Record<string, unknown>>;
122
+ genProcess(context?: ProcessingContext): AsyncGenerator<Record<string, unknown>>;
123
+ /**
124
+ * Streaming input+output processing.
125
+ * Override this for nodes with isStreamingInput=true.
126
+ * Drain inputs via `inputs.stream()` / `inputs.any()` and
127
+ * push results via `outputs.emit()`.
128
+ */
129
+ run?(inputs: StreamingInputs, outputs: StreamingOutputs, context?: ProcessingContext): Promise<void>;
130
+ /**
131
+ * Resolve requiredSettings from the context's secret store and inject
132
+ * them as `inputs._secrets` so node process() can access API keys.
133
+ */
134
+ private _injectSecrets;
135
+ /** Get resolved secrets (available during process()). */
136
+ get _secrets(): Record<string, string>;
137
+ toExecutor(): NodeExecutor;
138
+ static toDescriptor(id?: string): NodeDescriptor;
139
+ }
140
+ export {};
141
+ //# sourceMappingURL=base-node.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-node.d.ts","sourceRoot":"","sources":["../src/base-node.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EACV,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EACjB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAEL,KAAK,2BAA2B,EACjC,MAAM,iBAAiB,CAAC;AAEzB,MAAM,WAAW,mBAAmB;IAClC,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,qBAAqB;IACpC;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IAC/D,qEAAqE;IACrE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,SAAS,GAAG;IACtB,KAAK,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC;IACrD,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,iBAAiB,CAAC,EAAE,OAAO,EAAE,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,QAAQ,CAAC;IACnB,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,aAAa,EAAE,OAAO,CAAC;IACvB,UAAU,CAAC,EAAE,OAAO,EAAE,CAAC;IACvB,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IAC1C,WAAW,EAAE,mBAAmB,CAAC;IACjC,qBAAqB,IAAI,KAAK,CAAC;QAC7B,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,OAAO,CAAC,EAAE,OAAO,CAAA;SAAE,CAAC;KAC9C,CAAC,CAAC;IACH,kBAAkB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7C,YAAY,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,cAAc,CAAC;IAC1C,kBAAkB,CAChB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,OAAO,CAAC,EAAE,qBAAqB,GAC9B,2BAA2B,EAAE,CAAC;CAClC,CAAC;AAUF,8EAA8E;AAC9E,KAAK,WAAW,GAAG,MAAM,QAAQ,GAAG,cAAc,CAAC;AAEnD;;;;;;;;;;GAUG;AACH,MAAM,MAAM,SAAS,CAAC,CAAC,SAAS,QAAQ,IAAI,OAAO,CACjD,IAAI,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,KAAK,MAAM,EAAE,GAAG,IAAI,MAAM,EAAE,CAAC,CAAC,CACtE,CAAC;AAEF,8BAAsB,QAAQ;IAC5B,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAM;IACtC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAM;IACnC,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAM;IACzC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAa;IAEvD,MAAM,CAAC,QAAQ,CAAC,iBAAiB,EAAE,OAAO,EAAE,GAAG,SAAS,CAAa;IACrE,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,SAAS,CAAa;IAC9D,MAAM,CAAC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,EAAE,GAAG,SAAS,CAAa;IACnE,MAAM,CAAC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,EAAE,GAAG,SAAS,CAAa;IACnE,MAAM,CAAC,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAS;IAClD,MAAM,CAAC,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAS;IACnD,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAS;IAC3C,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAa;IAC/C,MAAM,CAAC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAS;IAC9C,MAAM,CAAC,QAAQ,CAAC,YAAY,EAAE,OAAO,GAAG,SAAS,CAAa;IAC9D,MAAM,CAAC,QAAQ,CAAC,sBAAsB,EAAE,OAAO,GAAG,SAAS,CAAa;IACxE,MAAM,CAAC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAS;IAC/C,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,EAAE,GAAG,SAAS,CAAa;IAC9D,MAAM,CAAC,QAAQ,CAAC,mBAAmB,EAAE,mBAAmB,GAAG,SAAS,CACxD;IACZ,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,mBAAmB,CAAM;IAEtD,SAAS,SAAM;IACf,WAAW,SAAM;IAEjB,SAAS,CAAC,YAAY,uBAA8B;gBAExC,UAAU,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;IAIpD,MAAM,CAAC,qBAAqB;IAI5B,MAAM,CAAC,kBAAkB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAInD;;;;;;;;;;;;;OAaG;IACH,MAAM,CAAC,kBAAkB,CACvB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,OAAO,GAAE,qBAA0B,GAClC,2BAA2B,EAAE;IAShC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAuCjD,SAAS,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAkBpC,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAIhD,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAI7C,UAAU,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAI7C,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAC3B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAC3B,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAE/B;;;;;;OAMG;IACH,QAAQ,CACN,OAAO,GAAE,qBAA0B,GAClC,2BAA2B,EAAE;IAQhC,QAAQ,CAAC,OAAO,CACd,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAE5B,UAAU,CACf,OAAO,CAAC,EAAE,iBAAiB,GAC1B,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAI1C;;;;;OAKG;IACG,GAAG,CAAC,CACR,MAAM,EAAE,eAAe,EACvB,OAAO,EAAE,gBAAgB,EACzB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,IAAI,CAAC;IAEhB;;;OAGG;YACW,cAAc;IAqC5B,yDAAyD;IACzD,IAAI,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAErC;IAED,UAAU,IAAI,YAAY;IAqC1B,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,cAAc;CAyBjD"}
@@ -0,0 +1,225 @@
1
+ import { getDeclaredPropertiesForClass } from "./decorators.js";
2
+ import { validateNodeProperties } from "./validation.js";
3
+ export class BaseNode {
4
+ static nodeType = "";
5
+ static title = "";
6
+ static description = "";
7
+ static layout = undefined;
8
+ static recommendedModels = undefined;
9
+ static basicFields = undefined;
10
+ static requiredSettings = undefined;
11
+ static requiredRuntimes = undefined;
12
+ static isStreamingInput = false;
13
+ static isStreamingOutput = false;
14
+ static isDynamic = false;
15
+ static syncMode = "zip_all";
16
+ static isControlled = false;
17
+ static exposeAsTool = undefined;
18
+ static supportsDynamicOutputs = undefined;
19
+ static autoSaveAsset = false;
20
+ static modelPacks = undefined;
21
+ static metadataOutputTypes = undefined;
22
+ static outputTypes = {};
23
+ __node_id = "";
24
+ __node_name = "";
25
+ dynamicProps = new Map();
26
+ constructor(properties = {}) {
27
+ this.assign(properties);
28
+ }
29
+ static getDeclaredProperties() {
30
+ return getDeclaredPropertiesForClass(this);
31
+ }
32
+ static getDeclaredOutputs() {
33
+ return { ...(this.outputTypes ?? {}) };
34
+ }
35
+ /**
36
+ * Validate a property bag against this node's declared @prop metadata.
37
+ *
38
+ * Flags two classes of problem:
39
+ * - Properties declared `required: true` whose value is missing/empty.
40
+ * - Properties whose type ends in `_model` whose value carries the
41
+ * "empty" provider sentinel or an empty model id.
42
+ *
43
+ * Properties listed in `options.connectedHandles` are ignored — those
44
+ * receive their value from an upstream node at runtime.
45
+ *
46
+ * Subclasses may override this to add custom rules. Most nodes won't
47
+ * need to: declarative `@prop` metadata is enough.
48
+ */
49
+ static validateProperties(properties, options = {}) {
50
+ const cls = this;
51
+ return validateNodeProperties(cls.getDeclaredProperties(), properties, {
52
+ connectedHandles: options.connectedHandles,
53
+ nodeId: options.nodeId,
54
+ nodeType: cls.nodeType
55
+ });
56
+ }
57
+ assign(properties) {
58
+ const ctor = this.constructor;
59
+ const declared = ctor.getDeclaredProperties();
60
+ if (Object.prototype.hasOwnProperty.call(properties, "__node_id")) {
61
+ this.__node_id = String(properties.__node_id ?? "");
62
+ }
63
+ if (Object.prototype.hasOwnProperty.call(properties, "__node_name")) {
64
+ this.__node_name = String(properties.__node_name ?? "");
65
+ }
66
+ const declaredNames = new Set(declared.map((p) => p.name));
67
+ for (const { name, options } of declared) {
68
+ if (Object.prototype.hasOwnProperty.call(properties, name)) {
69
+ // Explicit value provided — use it
70
+ this[name] = properties[name];
71
+ }
72
+ else if (this[name] === undefined &&
73
+ Object.prototype.hasOwnProperty.call(options, "default")) {
74
+ // No value on instance yet and a default exists — apply it.
75
+ // Deep-copy mutable defaults so instances don't share references.
76
+ const def = options.default;
77
+ this[name] =
78
+ def !== null && typeof def === "object"
79
+ ? JSON.parse(JSON.stringify(def))
80
+ : def;
81
+ }
82
+ }
83
+ // For dynamic nodes, store undeclared properties in dynamicProps
84
+ if (ctor.isDynamic) {
85
+ const skip = new Set(["__node_id", "__node_name", "_secrets"]);
86
+ for (const [key, value] of Object.entries(properties)) {
87
+ if (!declaredNames.has(key) && !skip.has(key)) {
88
+ this.dynamicProps.set(key, value);
89
+ }
90
+ }
91
+ }
92
+ }
93
+ serialize() {
94
+ const ctor = this.constructor;
95
+ const result = {};
96
+ for (const { name } of ctor.getDeclaredProperties()) {
97
+ result[name] = this[name];
98
+ }
99
+ // Include dynamic properties so round-trip serialization is lossless
100
+ if (ctor.isDynamic) {
101
+ for (const [key, value] of this.dynamicProps) {
102
+ result[key] = value;
103
+ }
104
+ }
105
+ return result;
106
+ }
107
+ deserialize(data) {
108
+ this.assign(data);
109
+ }
110
+ setDynamic(key, value) {
111
+ this.dynamicProps.set(key, value);
112
+ }
113
+ getDynamic(key) {
114
+ return this.dynamicProps.get(key);
115
+ }
116
+ async initialize() { }
117
+ async preProcess() { }
118
+ async finalize() { }
119
+ /**
120
+ * Validate the current property values on this instance.
121
+ *
122
+ * Default implementation defers to the class's static validateProperties
123
+ * over the result of `serialize()`. Subclasses can override to add
124
+ * runtime-only rules (for example, mutually-exclusive fields).
125
+ */
126
+ validate(options = {}) {
127
+ const ctor = this.constructor;
128
+ return ctor.validateProperties(this.serialize(), {
129
+ connectedHandles: options.connectedHandles,
130
+ nodeId: options.nodeId ?? (this.__node_id || undefined)
131
+ });
132
+ }
133
+ async *genProcess(context) {
134
+ yield await this.process(context);
135
+ }
136
+ /**
137
+ * Resolve requiredSettings from the context's secret store and inject
138
+ * them as `inputs._secrets` so node process() can access API keys.
139
+ */
140
+ async _injectSecrets(inputs, context) {
141
+ const ctor = this.constructor;
142
+ const required = ctor.requiredSettings;
143
+ if (!required || required.length === 0) {
144
+ return inputs;
145
+ }
146
+ if (!context) {
147
+ console.warn(`[_injectSecrets] No context for ${ctor.nodeType}, required: ${required.join(", ")}`);
148
+ return inputs;
149
+ }
150
+ const secrets = {};
151
+ for (const key of required) {
152
+ const value = await context.getSecret(key);
153
+ if (value) {
154
+ secrets[key] = value;
155
+ }
156
+ else {
157
+ console.warn(`[_injectSecrets] Secret "${key}" not found for ${ctor.nodeType}`);
158
+ }
159
+ }
160
+ if (Object.keys(secrets).length === 0)
161
+ return inputs;
162
+ return {
163
+ ...inputs,
164
+ _secrets: {
165
+ ...(inputs._secrets ?? {}),
166
+ ...secrets
167
+ }
168
+ };
169
+ }
170
+ /** Get resolved secrets (available during process()). */
171
+ get _secrets() {
172
+ return this.getDynamic("_secrets") ?? {};
173
+ }
174
+ toExecutor() {
175
+ const executor = {
176
+ process: async (inputs, context) => {
177
+ const merged = await this._injectSecrets(inputs, context);
178
+ const { _secrets, ...props } = merged;
179
+ if (_secrets)
180
+ this.setDynamic("_secrets", _secrets);
181
+ this.assign(props);
182
+ return this.process(context);
183
+ },
184
+ genProcess: async function* (inputs, context) {
185
+ const merged = await this._injectSecrets(inputs, context);
186
+ const { _secrets, ...props } = merged;
187
+ if (_secrets)
188
+ this.setDynamic("_secrets", _secrets);
189
+ this.assign(props);
190
+ yield* this.genProcess(context);
191
+ }.bind(this),
192
+ preProcess: () => this.preProcess(),
193
+ finalize: () => this.finalize(),
194
+ initialize: () => this.initialize()
195
+ };
196
+ if (this.run) {
197
+ executor.run = async (inputs, outputs, context) => this.run(inputs, outputs, context);
198
+ }
199
+ return executor;
200
+ }
201
+ static toDescriptor(id) {
202
+ const cls = this;
203
+ const propertyTypes = Object.fromEntries(cls
204
+ .getDeclaredProperties()
205
+ .map((entry) => [entry.name, entry.options.type]));
206
+ const desc = {
207
+ id: id ?? cls.nodeType,
208
+ type: cls.nodeType,
209
+ name: cls.title,
210
+ is_streaming_input: cls.isStreamingInput,
211
+ is_streaming_output: cls.isStreamingOutput,
212
+ sync_mode: cls.syncMode,
213
+ is_controlled: cls.isControlled
214
+ };
215
+ if (Object.keys(propertyTypes).length > 0) {
216
+ desc.propertyTypes = propertyTypes;
217
+ }
218
+ const outputs = cls.getDeclaredOutputs();
219
+ if (Object.keys(outputs).length > 0) {
220
+ desc.outputs = outputs;
221
+ }
222
+ return desc;
223
+ }
224
+ }
225
+ //# sourceMappingURL=base-node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-node.js","sourceRoot":"","sources":["../src/base-node.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ export interface PropOptions {
2
+ type: string;
3
+ default?: unknown;
4
+ title?: string;
5
+ description?: string;
6
+ min?: number;
7
+ max?: number;
8
+ required?: boolean;
9
+ values?: Array<string | number>;
10
+ json_schema_extra?: Record<string, unknown>;
11
+ }
12
+ export interface DeclaredPropertyMetadata {
13
+ name: string;
14
+ options: PropOptions;
15
+ }
16
+ export declare function registerDeclaredProperty(ctor: Function, name: string, options: PropOptions): void;
17
+ export declare function getDeclaredPropertiesForClass(ctor: Function): DeclaredPropertyMetadata[];
18
+ export declare function prop(options: PropOptions): PropertyDecorator;
19
+ //# sourceMappingURL=decorators.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decorators.d.ts","sourceRoot":"","sources":["../src/decorators.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;IAChC,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC7C;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,WAAW,CAAC;CACtB;AAqCD,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,QAAQ,EACd,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,WAAW,GACnB,IAAI,CAGN;AAED,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,QAAQ,GACb,wBAAwB,EAAE,CAE5B;AAED,wBAAgB,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,iBAAiB,CAK5D"}
@@ -0,0 +1,42 @@
1
+ const declaredPropsByClass = new WeakMap();
2
+ function getOrCreatePropMap(ctor) {
3
+ const existing = declaredPropsByClass.get(ctor);
4
+ if (existing)
5
+ return existing;
6
+ const created = new Map();
7
+ declaredPropsByClass.set(ctor, created);
8
+ return created;
9
+ }
10
+ function collectDeclaredProps(ctor) {
11
+ const chain = [];
12
+ let current = ctor;
13
+ while (typeof current === "function" && current !== Function.prototype) {
14
+ chain.push(current);
15
+ current = Object.getPrototypeOf(current);
16
+ }
17
+ chain.reverse();
18
+ const merged = new Map();
19
+ for (const cls of chain) {
20
+ const entries = declaredPropsByClass.get(cls);
21
+ if (!entries)
22
+ continue;
23
+ for (const [name, metadata] of entries.entries()) {
24
+ merged.set(name, metadata);
25
+ }
26
+ }
27
+ return [...merged.values()];
28
+ }
29
+ export function registerDeclaredProperty(ctor, name, options) {
30
+ const map = getOrCreatePropMap(ctor);
31
+ map.set(name, { name, options: { ...options } });
32
+ }
33
+ export function getDeclaredPropertiesForClass(ctor) {
34
+ return collectDeclaredProps(ctor);
35
+ }
36
+ export function prop(options) {
37
+ return (target, propertyKey) => {
38
+ const ctor = target.constructor;
39
+ registerDeclaredProperty(ctor, String(propertyKey), options);
40
+ };
41
+ }
42
+ //# sourceMappingURL=decorators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decorators.js","sourceRoot":"","sources":["../src/decorators.ts"],"names":[],"mappings":"AAiBA,MAAM,oBAAoB,GAAG,IAAI,OAAO,EAGrC,CAAC;AAEJ,SAAS,kBAAkB,CACzB,IAAc;IAEd,MAAM,QAAQ,GAAG,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChD,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC9B,MAAM,OAAO,GAAG,IAAI,GAAG,EAAoC,CAAC;IAC5D,oBAAoB,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACxC,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,oBAAoB,CAAC,IAAc;IAC1C,MAAM,KAAK,GAAe,EAAE,CAAC;IAC7B,IAAI,OAAO,GAAY,IAAI,CAAC;IAC5B,OAAO,OAAO,OAAO,KAAK,UAAU,IAAI,OAAO,KAAK,QAAQ,CAAC,SAAS,EAAE,CAAC;QACvE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpB,OAAO,GAAG,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;IAC3C,CAAC;IACD,KAAK,CAAC,OAAO,EAAE,CAAC;IAEhB,MAAM,MAAM,GAAG,IAAI,GAAG,EAAoC,CAAC;IAC3D,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,oBAAoB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC9C,IAAI,CAAC,OAAO;YAAE,SAAS;QACvB,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;YACjD,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,IAAc,EACd,IAAY,EACZ,OAAoB;IAEpB,MAAM,GAAG,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IACrC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,EAAE,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,6BAA6B,CAC3C,IAAc;IAEd,OAAO,oBAAoB,CAAC,IAAI,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,OAAoB;IACvC,OAAO,CAAC,MAAc,EAAE,WAA4B,EAAQ,EAAE;QAC5D,MAAM,IAAI,GAAI,MAAoC,CAAC,WAAW,CAAC;QAC/D,wBAAwB,CAAC,IAAI,EAAE,MAAM,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC;IAC/D,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from "./overview.js";
2
+ export * from "./nodes.js";
3
+ export * from "./workflows.js";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/docs/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from "./overview.js";
2
+ export * from "./nodes.js";
3
+ export * from "./workflows.js";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/docs/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { NodeMetadata } from "../metadata.js";
2
+ export interface NodeDocOptions {
3
+ /** Filter by package_name (matches NodeMetadata.namespace prefix). */
4
+ packageName?: string;
5
+ }
6
+ /** Build a filesystem-safe filename for a node: "<namespace>-<title>.md". */
7
+ export declare function slugifyNodeFilename(node: NodeMetadata): string;
8
+ export declare function generateNodeMarkdown(node: NodeMetadata): string;
9
+ export declare function generateAllNodeDocs(nodes: NodeMetadata[], opts?: NodeDocOptions): Map<string, string>;
10
+ //# sourceMappingURL=nodes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nodes.d.ts","sourceRoot":"","sources":["../../src/docs/nodes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EAIb,MAAM,gBAAgB,CAAC;AAExB,MAAM,WAAW,cAAc;IAC7B,sEAAsE;IACtE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAgCD,6EAA6E;AAC7E,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CAQ9D;AAiBD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CAiC/D;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,YAAY,EAAE,EACrB,IAAI,GAAE,cAAmB,GACxB,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAYrB"}
@@ -0,0 +1,99 @@
1
+ function typeMetaToString(type) {
2
+ const args = (type.type_args ?? []).map(typeMetaToString).filter(Boolean);
3
+ if (args.length === 0)
4
+ return type.type;
5
+ return `${type.type}[${args.join(", ")}]`;
6
+ }
7
+ function escapeCell(value) {
8
+ return value
9
+ .replace(/\\/g, "\\\\")
10
+ .replace(/\|/g, "\\|")
11
+ .replace(/\r?\n/g, " ");
12
+ }
13
+ function formatDefault(value) {
14
+ if (value === undefined)
15
+ return "";
16
+ if (value === null)
17
+ return "null";
18
+ if (typeof value === "string") {
19
+ return value.length > 40 ? `"${value.slice(0, 37)}..."` : `"${value}"`;
20
+ }
21
+ if (typeof value === "object") {
22
+ try {
23
+ const s = JSON.stringify(value);
24
+ return s.length > 40 ? `${s.slice(0, 37)}...` : s;
25
+ }
26
+ catch {
27
+ return String(value);
28
+ }
29
+ }
30
+ return String(value);
31
+ }
32
+ /** Build a filesystem-safe filename for a node: "<namespace>-<title>.md". */
33
+ export function slugifyNodeFilename(node) {
34
+ const base = `${node.namespace}.${node.title || node.node_type}`;
35
+ const slug = base
36
+ .toLowerCase()
37
+ .replace(/[^a-z0-9.]+/g, "-")
38
+ .replace(/-+/g, "-")
39
+ .replace(/^-|-$/g, "");
40
+ return `${slug}.md`;
41
+ }
42
+ function propertyRow(prop) {
43
+ const name = escapeCell(prop.name);
44
+ const typeStr = escapeCell(typeMetaToString(prop.type));
45
+ const def = escapeCell(formatDefault(prop.default));
46
+ const desc = escapeCell(prop.description ?? "");
47
+ return `| ${name} | ${typeStr} | ${def} | ${desc} |`;
48
+ }
49
+ function outputRow(output) {
50
+ const name = escapeCell(output.name);
51
+ const typeStr = escapeCell(typeMetaToString(output.type));
52
+ const streaming = output.stream ? " (stream)" : "";
53
+ return `| ${name} | ${typeStr}${streaming} |`;
54
+ }
55
+ export function generateNodeMarkdown(node) {
56
+ const lines = [];
57
+ lines.push(`# ${node.title}`, "");
58
+ lines.push(`\`${node.node_type}\``, "");
59
+ if (node.description) {
60
+ lines.push(node.description, "");
61
+ }
62
+ lines.push("## Properties", "");
63
+ if (!node.properties || node.properties.length === 0) {
64
+ lines.push("_(none)_", "");
65
+ }
66
+ else {
67
+ lines.push("| Name | Type | Default | Description |");
68
+ lines.push("|------|------|---------|-------------|");
69
+ for (const prop of node.properties) {
70
+ lines.push(propertyRow(prop));
71
+ }
72
+ lines.push("");
73
+ }
74
+ lines.push("## Outputs", "");
75
+ if (!node.outputs || node.outputs.length === 0) {
76
+ lines.push("_(none)_", "");
77
+ }
78
+ else {
79
+ lines.push("| Name | Type |");
80
+ lines.push("|------|------|");
81
+ for (const output of node.outputs) {
82
+ lines.push(outputRow(output));
83
+ }
84
+ lines.push("");
85
+ }
86
+ return lines.join("\n");
87
+ }
88
+ export function generateAllNodeDocs(nodes, opts = {}) {
89
+ const docs = new Map();
90
+ for (const node of nodes) {
91
+ if (opts.packageName &&
92
+ !node.namespace.startsWith(opts.packageName)) {
93
+ continue;
94
+ }
95
+ docs.set(slugifyNodeFilename(node), generateNodeMarkdown(node));
96
+ }
97
+ return docs;
98
+ }
99
+ //# sourceMappingURL=nodes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nodes.js","sourceRoot":"","sources":["../../src/docs/nodes.ts"],"names":[],"mappings":"AAYA,SAAS,gBAAgB,CAAC,IAAkB;IAC1C,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC1E,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC;IACxC,OAAO,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;AAC5C,CAAC;AAED,SAAS,UAAU,CAAC,KAAa;IAC/B,OAAO,KAAK;SACT,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC;SACtB,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;SACrB,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IACnC,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,MAAM,CAAC;IAClC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC;IACzE,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YAChC,OAAO,CAAC,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACpD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,mBAAmB,CAAC,IAAkB;IACpD,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;IACjE,MAAM,IAAI,GAAG,IAAI;SACd,WAAW,EAAE;SACb,OAAO,CAAC,cAAc,EAAE,GAAG,CAAC;SAC5B,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IACzB,OAAO,GAAG,IAAI,KAAK,CAAC;AACtB,CAAC;AAED,SAAS,WAAW,CAAC,IAAsB;IACzC,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,OAAO,GAAG,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACxD,MAAM,GAAG,GAAG,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IACpD,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;IAChD,OAAO,KAAK,IAAI,MAAM,OAAO,MAAM,GAAG,MAAM,IAAI,IAAI,CAAC;AACvD,CAAC;AAED,SAAS,SAAS,CAAC,MAA0B;IAC3C,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,OAAO,GAAG,UAAU,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1D,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;IACnD,OAAO,KAAK,IAAI,MAAM,OAAO,GAAG,SAAS,IAAI,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,IAAkB;IACrD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;IAClC,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,IAAI,EAAE,EAAE,CAAC,CAAC;IACxC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;IAChC,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrD,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAC7B,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;QACtD,KAAK,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;QACtD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACnC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;QAChC,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;IAC7B,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/C,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAC7B,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC9B,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAClC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;QAChC,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,KAAqB,EACrB,OAAuB,EAAE;IAEzB,MAAM,IAAI,GAAG,IAAI,GAAG,EAAkB,CAAC;IACvC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IACE,IAAI,CAAC,WAAW;YAChB,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,EAC5C,CAAC;YACD,SAAS;QACX,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC;IAClE,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { PackageMetadata } from "../metadata.js";
2
+ export interface OverviewOptions {
3
+ compact?: boolean;
4
+ }
5
+ export declare function generatePackageOverviewMarkdown(pkg: PackageMetadata, opts?: OverviewOptions): string;
6
+ //# sourceMappingURL=overview.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overview.d.ts","sourceRoot":"","sources":["../../src/docs/overview.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAgB,MAAM,gBAAgB,CAAC;AAGpE,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAoBD,wBAAgB,+BAA+B,CAC7C,GAAG,EAAE,eAAe,EACpB,IAAI,GAAE,eAAoB,GACzB,MAAM,CA0DR"}