@telorun/kernel 0.2.4

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 (122) hide show
  1. package/LICENSE +17 -0
  2. package/dist/boot-context-registry.d.ts +47 -0
  3. package/dist/boot-context-registry.d.ts.map +1 -0
  4. package/dist/boot-context-registry.js +131 -0
  5. package/dist/boot-context-registry.js.map +1 -0
  6. package/dist/capabilities/capabilities/component.yaml +3 -0
  7. package/dist/capabilities/capabilities/executable.yaml +7 -0
  8. package/dist/capabilities/capabilities/handler.yaml +3 -0
  9. package/dist/capabilities/capabilities/listener.yaml +3 -0
  10. package/dist/capabilities/capabilities/provider.yaml +3 -0
  11. package/dist/capabilities/capabilities/template.yaml +3 -0
  12. package/dist/capabilities/capabilities/type.yaml +3 -0
  13. package/dist/capabilities/component.yaml +3 -0
  14. package/dist/capabilities/executable.yaml +7 -0
  15. package/dist/capabilities/handler.yaml +3 -0
  16. package/dist/capabilities/listener.yaml +3 -0
  17. package/dist/capabilities/provider.yaml +3 -0
  18. package/dist/capabilities/template.yaml +3 -0
  19. package/dist/capabilities/type.yaml +3 -0
  20. package/dist/cli.d.ts +3 -0
  21. package/dist/cli.d.ts.map +1 -0
  22. package/dist/cli.js +109 -0
  23. package/dist/cli.js.map +1 -0
  24. package/dist/controller-loader.d.ts +24 -0
  25. package/dist/controller-loader.d.ts.map +1 -0
  26. package/dist/controller-loader.js +265 -0
  27. package/dist/controller-loader.js.map +1 -0
  28. package/dist/controller-registry.d.ts +56 -0
  29. package/dist/controller-registry.d.ts.map +1 -0
  30. package/dist/controller-registry.js +169 -0
  31. package/dist/controller-registry.js.map +1 -0
  32. package/dist/controllers/capability/capability-controller.d.ts +37 -0
  33. package/dist/controllers/capability/capability-controller.d.ts.map +1 -0
  34. package/dist/controllers/capability/capability-controller.js +30 -0
  35. package/dist/controllers/capability/capability-controller.js.map +1 -0
  36. package/dist/controllers/module/module-controller.d.ts +16 -0
  37. package/dist/controllers/module/module-controller.d.ts.map +1 -0
  38. package/dist/controllers/module/module-controller.js +95 -0
  39. package/dist/controllers/module/module-controller.js.map +1 -0
  40. package/dist/controllers/module/module.json +48 -0
  41. package/dist/controllers/resource-definition/resource-definition-controller.d.ts +33 -0
  42. package/dist/controllers/resource-definition/resource-definition-controller.d.ts.map +1 -0
  43. package/dist/controllers/resource-definition/resource-definition-controller.js +44 -0
  44. package/dist/controllers/resource-definition/resource-definition-controller.js.map +1 -0
  45. package/dist/event-stream.d.ts +45 -0
  46. package/dist/event-stream.d.ts.map +1 -0
  47. package/dist/event-stream.js +98 -0
  48. package/dist/event-stream.js.map +1 -0
  49. package/dist/events.d.ts +13 -0
  50. package/dist/events.d.ts.map +1 -0
  51. package/dist/events.js +89 -0
  52. package/dist/events.js.map +1 -0
  53. package/dist/expressions.d.ts +20 -0
  54. package/dist/expressions.d.ts.map +1 -0
  55. package/dist/expressions.js +253 -0
  56. package/dist/expressions.js.map +1 -0
  57. package/dist/index.d.ts +10 -0
  58. package/dist/index.d.ts.map +1 -0
  59. package/dist/index.js +9 -0
  60. package/dist/index.js.map +1 -0
  61. package/dist/kernel.d.ts +113 -0
  62. package/dist/kernel.d.ts.map +1 -0
  63. package/dist/kernel.js +558 -0
  64. package/dist/kernel.js.map +1 -0
  65. package/dist/loader.d.ts +17 -0
  66. package/dist/loader.d.ts.map +1 -0
  67. package/dist/loader.js +189 -0
  68. package/dist/loader.js.map +1 -0
  69. package/dist/manifest-adapters/http-adapter.d.ts +8 -0
  70. package/dist/manifest-adapters/http-adapter.d.ts.map +1 -0
  71. package/dist/manifest-adapters/http-adapter.js +29 -0
  72. package/dist/manifest-adapters/http-adapter.js.map +1 -0
  73. package/dist/manifest-adapters/local-file-adapter.d.ts +11 -0
  74. package/dist/manifest-adapters/local-file-adapter.d.ts.map +1 -0
  75. package/dist/manifest-adapters/local-file-adapter.js +51 -0
  76. package/dist/manifest-adapters/local-file-adapter.js.map +1 -0
  77. package/dist/manifest-adapters/manifest-adapter.d.ts +33 -0
  78. package/dist/manifest-adapters/manifest-adapter.d.ts.map +1 -0
  79. package/dist/manifest-adapters/manifest-adapter.js +2 -0
  80. package/dist/manifest-adapters/manifest-adapter.js.map +1 -0
  81. package/dist/manifest-adapters/registry-adapter.d.ts +9 -0
  82. package/dist/manifest-adapters/registry-adapter.d.ts.map +1 -0
  83. package/dist/manifest-adapters/registry-adapter.js +46 -0
  84. package/dist/manifest-adapters/registry-adapter.js.map +1 -0
  85. package/dist/manifest-schemas.d.ts +66 -0
  86. package/dist/manifest-schemas.d.ts.map +1 -0
  87. package/dist/manifest-schemas.js +55 -0
  88. package/dist/manifest-schemas.js.map +1 -0
  89. package/dist/registry.d.ts +41 -0
  90. package/dist/registry.d.ts.map +1 -0
  91. package/dist/registry.js +122 -0
  92. package/dist/registry.js.map +1 -0
  93. package/dist/resource-context.d.ts +48 -0
  94. package/dist/resource-context.d.ts.map +1 -0
  95. package/dist/resource-context.js +146 -0
  96. package/dist/resource-context.js.map +1 -0
  97. package/dist/resource-uri.d.ts +80 -0
  98. package/dist/resource-uri.d.ts.map +1 -0
  99. package/dist/resource-uri.js +160 -0
  100. package/dist/resource-uri.js.map +1 -0
  101. package/dist/schema-valiator.d.ts +9 -0
  102. package/dist/schema-valiator.d.ts.map +1 -0
  103. package/dist/schema-valiator.js +43 -0
  104. package/dist/schema-valiator.js.map +1 -0
  105. package/dist/snapshot-serializer.d.ts +63 -0
  106. package/dist/snapshot-serializer.d.ts.map +1 -0
  107. package/dist/snapshot-serializer.js +164 -0
  108. package/dist/snapshot-serializer.js.map +1 -0
  109. package/dist/src/controllers/module/module.yaml +32 -0
  110. package/dist/template-definition.d.ts +38 -0
  111. package/dist/template-definition.d.ts.map +1 -0
  112. package/dist/template-definition.js +26 -0
  113. package/dist/template-definition.js.map +1 -0
  114. package/dist/template-expander.d.ts +19 -0
  115. package/dist/template-expander.d.ts.map +1 -0
  116. package/dist/template-expander.js +425 -0
  117. package/dist/template-expander.js.map +1 -0
  118. package/dist/types.d.ts +62 -0
  119. package/dist/types.d.ts.map +1 -0
  120. package/dist/types.js +8 -0
  121. package/dist/types.js.map +1 -0
  122. package/package.json +42 -0
@@ -0,0 +1,95 @@
1
+ import * as path from "path";
2
+ import { Loader } from "../../loader.js";
3
+ /**
4
+ * Check if a path is a URL (http:// or https://)
5
+ */
6
+ function isUrl(pathOrUrl) {
7
+ return pathOrUrl.startsWith("http://") || pathOrUrl.startsWith("https://");
8
+ }
9
+ /**
10
+ * Resolve a path relative to a base, handling both local paths and URLs
11
+ */
12
+ function resolvePath(loader, base, relative) {
13
+ // If the relative path is actually a URL, return it as-is
14
+ if (isUrl(relative)) {
15
+ return relative;
16
+ }
17
+ // Otherwise, resolve it relative to the base
18
+ return loader.resolvePath(base, relative);
19
+ }
20
+ export async function create(resource, ctx) {
21
+ // Get the module base path from the resource's URI or source
22
+ const moduleBasePath = resource.metadata.source
23
+ ? path.dirname(resource.metadata.source)
24
+ : getModuleBasePath(resource.metadata.uri);
25
+ const loader = new Loader();
26
+ try {
27
+ // Load and register resource definitions from imports
28
+ if (resource.imports && Array.isArray(resource.imports)) {
29
+ for (const importPath of resource.imports) {
30
+ const resolvedPath = resolvePath(loader, moduleBasePath, importPath);
31
+ const defResources = await loader.loadDirectory(resolvedPath);
32
+ for (const defResource of defResources) {
33
+ ctx.registerManifest(defResource);
34
+ }
35
+ }
36
+ }
37
+ // Load and register resources from definitions and resources paths
38
+ if (resource.definitions && Array.isArray(resource.definitions)) {
39
+ for (const defPath of resource.definitions) {
40
+ const resolvedPath = resolvePath(loader, moduleBasePath, defPath);
41
+ const defResources = await loader.loadManifest(resolvedPath);
42
+ for (const defResource of defResources) {
43
+ ctx.registerManifest(defResource);
44
+ }
45
+ }
46
+ }
47
+ if (resource.resources && Array.isArray(resource.resources)) {
48
+ for (const defPath of resource.resources) {
49
+ const rawPath = typeof defPath === "string" ? defPath : defPath.path;
50
+ const resolvedPath = resolvePath(loader, moduleBasePath, rawPath);
51
+ const defResources = await loader.loadManifest(resolvedPath);
52
+ for (const defResource of defResources) {
53
+ ctx.registerManifest(defResource);
54
+ }
55
+ }
56
+ }
57
+ return {};
58
+ }
59
+ catch (error) {
60
+ throw new Error(`Failed to process Module "${resource.metadata.name}": ${error instanceof Error ? error.message : String(error)}`);
61
+ }
62
+ }
63
+ function getModuleBasePath(uri) {
64
+ if (!uri) {
65
+ return process.cwd();
66
+ }
67
+ try {
68
+ // URI format: file://localhost/path/to/file.yaml#kind.name
69
+ // Extract the file path part (before the #)
70
+ const hashIndex = uri.indexOf("#");
71
+ const filePath = hashIndex > 0 ? uri.substring(0, hashIndex) : uri;
72
+ // Parse as URL to handle file:// scheme
73
+ if (filePath.startsWith("file://")) {
74
+ // Remove 'file://localhost' and get the path
75
+ let pathPart = filePath.substring("file://".length);
76
+ if (pathPart.startsWith("localhost/")) {
77
+ pathPart = pathPart.substring("localhost".length);
78
+ }
79
+ else if (pathPart.startsWith("localhost\\")) {
80
+ pathPart = pathPart.substring("localhost".length);
81
+ }
82
+ return path.dirname(pathPart);
83
+ }
84
+ // Fallback: treat as regular path
85
+ return path.dirname(filePath);
86
+ }
87
+ catch {
88
+ return process.cwd();
89
+ }
90
+ }
91
+ export const schema = {
92
+ type: "object",
93
+ additionalProperties: true,
94
+ };
95
+ //# sourceMappingURL=module-controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module-controller.js","sourceRoot":"","sources":["../../../src/controllers/module/module-controller.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ {
2
+ "type": "object",
3
+ "properties": {
4
+ "metadata": {
5
+ "type": "object",
6
+ "properties": {
7
+ "name": {
8
+ "type": "string"
9
+ }
10
+ },
11
+ "required": ["name"]
12
+ },
13
+ "imports": {
14
+ "type": "array",
15
+ "items": {
16
+ "type": "string"
17
+ },
18
+ "description": "Paths to other modules to import"
19
+ },
20
+ "definitions": {
21
+ "type": "array",
22
+ "items": {
23
+ "type": "string"
24
+ },
25
+ "description": "Paths to ResourceDefinition files"
26
+ },
27
+ "resources": {
28
+ "type": "array",
29
+ "items": {
30
+ "oneOf": [
31
+ {
32
+ "type": "string"
33
+ },
34
+ {
35
+ "type": "object",
36
+ "properties": {
37
+ "path": {
38
+ "type": "string"
39
+ }
40
+ }
41
+ }
42
+ ]
43
+ },
44
+ "description": "Paths to resource instance files to load"
45
+ }
46
+ },
47
+ "required": ["metadata"]
48
+ }
@@ -0,0 +1,33 @@
1
+ import type { ControllerContext, ResourceContext, ResourceInstance, RuntimeResource } from "@telorun/sdk";
2
+ import { ControllerLoader } from "../../controller-loader.js";
3
+ type ResourceDefinitionResource = RuntimeResource & {
4
+ kind: "Definition";
5
+ metadata: {
6
+ [key: string]: any;
7
+ name: string;
8
+ module?: string;
9
+ };
10
+ schema: Record<string, any>;
11
+ capabilities: string[];
12
+ events?: string[];
13
+ controllers: Array<string>;
14
+ };
15
+ /**
16
+ * ResourceDefinition resource - acts as metadata holder for resource type definitions
17
+ * Validates incoming definitions against schema and maintains definition metadata
18
+ */
19
+ declare class ResourceDefinition implements ResourceInstance {
20
+ readonly resource: ResourceDefinitionResource;
21
+ private controllerLoader;
22
+ readonly kind: "ResourceDefinition";
23
+ constructor(resource: ResourceDefinitionResource, controllerLoader: ControllerLoader);
24
+ init(ctx: ResourceContext): Promise<void>;
25
+ }
26
+ export declare function register(ctx: ControllerContext): void;
27
+ export declare function create(resource: any, ctx: ResourceContext): Promise<ResourceDefinition>;
28
+ export declare const schema: {
29
+ type: string;
30
+ additionalProperties: boolean;
31
+ };
32
+ export {};
33
+ //# sourceMappingURL=resource-definition-controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource-definition-controller.d.ts","sourceRoot":"","sources":["../../../src/controllers/resource-definition/resource-definition-controller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,eAAe,EAChB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAG9D,KAAK,0BAA0B,GAAG,eAAe,GAAG;IAClD,IAAI,EAAE,YAAY,CAAC;IACnB,QAAQ,EAAE;QACR,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;QACnB,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;CAC5B,CAAC;AAEF;;;GAGG;AACH,cAAM,kBAAmB,YAAW,gBAAgB;IAIhD,QAAQ,CAAC,QAAQ,EAAE,0BAA0B;IAC7C,OAAO,CAAC,gBAAgB;IAJ1B,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAwB;gBAGhD,QAAQ,EAAE,0BAA0B,EACrC,gBAAgB,EAAE,gBAAgB;IAGtC,IAAI,CAAC,GAAG,EAAE,eAAe;CAwBhC;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,iBAAiB,GAAG,IAAI,CAErD;AAED,wBAAsB,MAAM,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAW7F;AAED,eAAO,MAAM,MAAM;;;CAGlB,CAAC"}
@@ -0,0 +1,44 @@
1
+ import { ControllerLoader } from "../../controller-loader.js";
2
+ import { formatAjvErrors, validateResourceDefinition } from "../../manifest-schemas.js";
3
+ /**
4
+ * ResourceDefinition resource - acts as metadata holder for resource type definitions
5
+ * Validates incoming definitions against schema and maintains definition metadata
6
+ */
7
+ class ResourceDefinition {
8
+ constructor(resource, controllerLoader) {
9
+ this.resource = resource;
10
+ this.controllerLoader = controllerLoader;
11
+ this.kind = "ResourceDefinition";
12
+ }
13
+ async init(ctx) {
14
+ for (const cap of this.resource.capabilities) {
15
+ if (!ctx.isCapabilityRegistered(cap)) {
16
+ throw new Error(`Capability "${cap}" is not registered. Declare it as a Runtime.Capability resource.`);
17
+ }
18
+ const capSchema = ctx.getCapabilitySchema(cap);
19
+ if (capSchema) {
20
+ ctx.validateSchema(this.resource, capSchema);
21
+ }
22
+ }
23
+ const controllerInstance = await this.controllerLoader.load(this.resource.controllers, this.resource.metadata.source);
24
+ ctx.registerDefinition(this.resource);
25
+ await ctx.registerController(this.resource.metadata.module, this.resource.metadata.name, controllerInstance);
26
+ }
27
+ }
28
+ export function register(ctx) {
29
+ // ResourceDefinition is a passive resource - no registration needed
30
+ }
31
+ export async function create(resource, ctx) {
32
+ // Validate incoming resource definition against schema
33
+ if (!validateResourceDefinition(resource)) {
34
+ throw new Error(`Invalid ResourceDefinition "${resource.metadata.name}": ${formatAjvErrors(validateResourceDefinition.errors)}`);
35
+ }
36
+ // Return a fully-formed ResourceDefinition instance
37
+ const definition = resource;
38
+ return new ResourceDefinition(definition, new ControllerLoader());
39
+ }
40
+ export const schema = {
41
+ type: "object",
42
+ additionalProperties: true,
43
+ };
44
+ //# sourceMappingURL=resource-definition-controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource-definition-controller.js","sourceRoot":"","sources":["../../../src/controllers/resource-definition/resource-definition-controller.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AAexF;;;GAGG;AACH,MAAM,kBAAkB;IAGtB,YACW,QAAoC,EACrC,gBAAkC;QADjC,aAAQ,GAAR,QAAQ,CAA4B;QACrC,qBAAgB,GAAhB,gBAAgB,CAAkB;QAJnC,SAAI,GAAyB,oBAAoB,CAAC;IAKxD,CAAC;IAEJ,KAAK,CAAC,IAAI,CAAC,GAAoB;QAC7B,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;YAC7C,IAAI,CAAC,GAAG,CAAC,sBAAsB,CAAC,GAAG,CAAC,EAAE,CAAC;gBACrC,MAAM,IAAI,KAAK,CACb,eAAe,GAAG,mEAAmE,CACtF,CAAC;YACJ,CAAC;YACD,MAAM,SAAS,GAAG,GAAG,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;YAC/C,IAAI,SAAS,EAAE,CAAC;gBACd,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC;QAED,MAAM,kBAAkB,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CACzD,IAAI,CAAC,QAAQ,CAAC,WAAW,EACzB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAC9B,CAAC;QACF,GAAG,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACtC,MAAM,GAAG,CAAC,kBAAkB,CAC1B,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAC7B,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAC3B,kBAAkB,CACnB,CAAC;IACJ,CAAC;CACF;AAED,MAAM,UAAU,QAAQ,CAAC,GAAsB;IAC7C,oEAAoE;AACtE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,QAAa,EAAE,GAAoB;IAC9D,uDAAuD;IACvD,IAAI,CAAC,0BAA0B,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CACb,+BAA+B,QAAQ,CAAC,QAAQ,CAAC,IAAI,MAAM,eAAe,CAAC,0BAA0B,CAAC,MAAM,CAAC,EAAE,CAChH,CAAC;IACJ,CAAC;IAED,oDAAoD;IACpD,MAAM,UAAU,GAAG,QAAsC,CAAC;IAC1D,OAAO,IAAI,kBAAkB,CAAC,UAAU,EAAE,IAAI,gBAAgB,EAAE,CAAC,CAAC;AACpE,CAAC;AAED,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,IAAI,EAAE,QAAQ;IACd,oBAAoB,EAAE,IAAI;CAC3B,CAAC"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Streaming event log for debugging and testing
3
+ * Records all events in JSONL format (one JSON object per line)
4
+ * Useful for observing runtime execution, testing, and debugging
5
+ */
6
+ export declare class EventStream {
7
+ private filePath;
8
+ private isEnabled;
9
+ constructor(filePath?: string);
10
+ /**
11
+ * Enable event streaming to a file
12
+ */
13
+ enable(filePath: string): Promise<void>;
14
+ /**
15
+ * Log an event to the stream
16
+ */
17
+ log(event: string, payload?: any, metadata?: {
18
+ namespace?: string;
19
+ resource?: string;
20
+ kind?: string;
21
+ name?: string;
22
+ }): Promise<void>;
23
+ /**
24
+ * Read all events from the stream as an array
25
+ * Useful for testing
26
+ */
27
+ readAll(): Promise<Array<Record<string, any>>>;
28
+ /**
29
+ * Filter events by type
30
+ */
31
+ getEventsByType(eventType: string): Promise<Array<Record<string, any>>>;
32
+ /**
33
+ * Get the file path for the event stream
34
+ */
35
+ getFilePath(): string;
36
+ /**
37
+ * Check if event streaming is enabled
38
+ */
39
+ isEnabledStream(): boolean;
40
+ /**
41
+ * Disable event streaming
42
+ */
43
+ disable(): void;
44
+ }
45
+ //# sourceMappingURL=event-stream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-stream.d.ts","sourceRoot":"","sources":["../src/event-stream.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,SAAS,CAAkB;gBAEvB,QAAQ,CAAC,EAAE,MAAM;IAK7B;;OAEG;IACG,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAc7C;;OAEG;IACG,GAAG,CACP,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,GAAG,EACb,QAAQ,CAAC,EAAE;QACT,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,GACA,OAAO,CAAC,IAAI,CAAC;IAoBhB;;;OAGG;IACG,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;IAoBpD;;OAEG;IACG,eAAe,CACnB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;IAKtC;;OAEG;IACH,WAAW,IAAI,MAAM;IAIrB;;OAEG;IACH,eAAe,IAAI,OAAO;IAI1B;;OAEG;IACH,OAAO,IAAI,IAAI;CAGhB"}
@@ -0,0 +1,98 @@
1
+ import * as fs from 'fs/promises';
2
+ import * as path from 'path';
3
+ /**
4
+ * Streaming event log for debugging and testing
5
+ * Records all events in JSONL format (one JSON object per line)
6
+ * Useful for observing runtime execution, testing, and debugging
7
+ */
8
+ export class EventStream {
9
+ constructor(filePath) {
10
+ this.isEnabled = false;
11
+ this.filePath = filePath || '';
12
+ this.isEnabled = !!filePath;
13
+ }
14
+ /**
15
+ * Enable event streaming to a file
16
+ */
17
+ async enable(filePath) {
18
+ this.filePath = filePath;
19
+ this.isEnabled = true;
20
+ // Ensure directory exists
21
+ const dir = path.dirname(filePath);
22
+ if (dir !== '.' && dir !== '') {
23
+ await fs.mkdir(dir, { recursive: true });
24
+ }
25
+ // Initialize file (truncate if exists)
26
+ await fs.writeFile(filePath, '', 'utf-8');
27
+ }
28
+ /**
29
+ * Log an event to the stream
30
+ */
31
+ async log(event, payload, metadata) {
32
+ if (!this.isEnabled) {
33
+ return;
34
+ }
35
+ const logEntry = {
36
+ timestamp: new Date().toISOString(),
37
+ event,
38
+ payload,
39
+ ...metadata,
40
+ };
41
+ try {
42
+ const line = JSON.stringify(logEntry) + '\n';
43
+ await fs.appendFile(this.filePath, line, 'utf-8');
44
+ }
45
+ catch (error) {
46
+ console.error('Failed to write event to stream:', error);
47
+ }
48
+ }
49
+ /**
50
+ * Read all events from the stream as an array
51
+ * Useful for testing
52
+ */
53
+ async readAll() {
54
+ if (!this.isEnabled || !this.filePath) {
55
+ return [];
56
+ }
57
+ try {
58
+ const content = await fs.readFile(this.filePath, 'utf-8');
59
+ if (!content.trim()) {
60
+ return [];
61
+ }
62
+ return content
63
+ .trim()
64
+ .split('\n')
65
+ .map((line) => JSON.parse(line));
66
+ }
67
+ catch (error) {
68
+ console.error('Failed to read event stream:', error);
69
+ return [];
70
+ }
71
+ }
72
+ /**
73
+ * Filter events by type
74
+ */
75
+ async getEventsByType(eventType) {
76
+ const all = await this.readAll();
77
+ return all.filter((e) => e.event === eventType);
78
+ }
79
+ /**
80
+ * Get the file path for the event stream
81
+ */
82
+ getFilePath() {
83
+ return this.filePath;
84
+ }
85
+ /**
86
+ * Check if event streaming is enabled
87
+ */
88
+ isEnabledStream() {
89
+ return this.isEnabled;
90
+ }
91
+ /**
92
+ * Disable event streaming
93
+ */
94
+ disable() {
95
+ this.isEnabled = false;
96
+ }
97
+ }
98
+ //# sourceMappingURL=event-stream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-stream.js","sourceRoot":"","sources":["../src/event-stream.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ type EventHandler = (payload?: any) => void | Promise<void>;
2
+ export declare class EventBus {
3
+ private handlers;
4
+ private validateEventName;
5
+ private matchesPattern;
6
+ on(event: string, handler: EventHandler): void;
7
+ once(event: string, handler: EventHandler): void;
8
+ off(event: string, handler: EventHandler): void;
9
+ emit(event: string, payload?: any, metadata?: any): Promise<void>;
10
+ hasHandlers(event: string): boolean;
11
+ }
12
+ export {};
13
+ //# sourceMappingURL=events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AAEA,KAAK,YAAY,GAAG,CAAC,OAAO,CAAC,EAAE,GAAG,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE5D,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAA6C;IAE7D,OAAO,CAAC,iBAAiB;IASzB,OAAO,CAAC,cAAc;IA2BtB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,IAAI;IAO9C,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,IAAI;IAShD,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,IAAI;IAYzC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBvE,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;CAQpC"}
package/dist/events.js ADDED
@@ -0,0 +1,89 @@
1
+ export class EventBus {
2
+ constructor() {
3
+ this.handlers = new Map();
4
+ }
5
+ validateEventName(event) {
6
+ if (event === "" ||
7
+ !/^(\*|[A-Za-z_][A-Za-z0-9_]*)(\.(\*|[A-Za-z_][A-Za-z0-9_]*))*$/.test(event)) {
8
+ throw new Error(`Invalid event name "${event}". Expected format "Text.Text" with no spaces.`);
9
+ }
10
+ }
11
+ matchesPattern(pattern, event) {
12
+ if (pattern === "*") {
13
+ return true;
14
+ }
15
+ if (pattern === event) {
16
+ return true;
17
+ }
18
+ if (!pattern.includes("*")) {
19
+ return false;
20
+ }
21
+ const patternParts = pattern.split(".");
22
+ const eventParts = event.split(".");
23
+ if (patternParts.length !== eventParts.length) {
24
+ return false;
25
+ }
26
+ for (let i = 0; i < patternParts.length; i += 1) {
27
+ const part = patternParts[i];
28
+ if (part === "*") {
29
+ continue;
30
+ }
31
+ if (part !== eventParts[i]) {
32
+ return false;
33
+ }
34
+ }
35
+ return true;
36
+ }
37
+ on(event, handler) {
38
+ this.validateEventName(event);
39
+ const set = this.handlers.get(event) || new Set();
40
+ set.add(handler);
41
+ this.handlers.set(event, set);
42
+ }
43
+ once(event, handler) {
44
+ this.validateEventName(event);
45
+ const wrapper = async (payload) => {
46
+ this.off(event, wrapper);
47
+ await handler(payload);
48
+ };
49
+ this.on(event, wrapper);
50
+ }
51
+ off(event, handler) {
52
+ this.validateEventName(event);
53
+ const set = this.handlers.get(event);
54
+ if (!set) {
55
+ return;
56
+ }
57
+ set.delete(handler);
58
+ if (set.size === 0) {
59
+ this.handlers.delete(event);
60
+ }
61
+ }
62
+ async emit(event, payload, metadata) {
63
+ const handlers = [];
64
+ for (const [pattern, set] of this.handlers.entries()) {
65
+ if (!this.matchesPattern(pattern, event)) {
66
+ continue;
67
+ }
68
+ for (const handler of set) {
69
+ handlers.push(handler);
70
+ }
71
+ }
72
+ if (handlers.length === 0) {
73
+ return;
74
+ }
75
+ const evt = { name: event, payload, metadata };
76
+ for (const handler of handlers) {
77
+ await handler(evt);
78
+ }
79
+ }
80
+ hasHandlers(event) {
81
+ for (const [pattern, set] of this.handlers.entries()) {
82
+ if (set.size > 0 && this.matchesPattern(pattern, event)) {
83
+ return true;
84
+ }
85
+ }
86
+ return false;
87
+ }
88
+ }
89
+ //# sourceMappingURL=events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AAIA,MAAM,OAAO,QAAQ;IAArB;QACU,aAAQ,GAAmC,IAAI,GAAG,EAAE,CAAC;IA6F/D,CAAC;IA3FS,iBAAiB,CAAC,KAAa;QACrC,IACE,KAAK,KAAK,EAAE;YACZ,CAAC,+DAA+D,CAAC,IAAI,CAAC,KAAK,CAAC,EAC5E,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,uBAAuB,KAAK,gDAAgD,CAAC,CAAC;QAChG,CAAC;IACH,CAAC;IAEO,cAAc,CAAC,OAAe,EAAE,KAAa;QACnD,IAAI,OAAO,KAAK,GAAG,EAAE,CAAC;YACpB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC3B,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACxC,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,YAAY,CAAC,MAAM,KAAK,UAAU,CAAC,MAAM,EAAE,CAAC;YAC9C,OAAO,KAAK,CAAC;QACf,CAAC;QACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAChD,MAAM,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;YAC7B,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;gBACjB,SAAS;YACX,CAAC;YACD,IAAI,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC3B,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,EAAE,CAAC,KAAa,EAAE,OAAqB;QACrC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC;QAClD,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACjB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAChC,CAAC;IAED,IAAI,CAAC,KAAa,EAAE,OAAqB;QACvC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAC9B,MAAM,OAAO,GAAiB,KAAK,EAAE,OAAa,EAAE,EAAE;YACpD,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YACzB,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;QACzB,CAAC,CAAC;QACF,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC1B,CAAC;IAED,GAAG,CAAC,KAAa,EAAE,OAAqB;QACtC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO;QACT,CAAC;QACD,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACpB,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACnB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,KAAa,EAAE,OAAa,EAAE,QAAc;QACrD,MAAM,QAAQ,GAAmB,EAAE,CAAC;QACpC,KAAK,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC;YACrD,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC;gBACzC,SAAS;YACX,CAAC;YACD,KAAK,MAAM,OAAO,IAAI,GAAG,EAAE,CAAC;gBAC1B,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;QACD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO;QACT,CAAC;QACD,MAAM,GAAG,GAAiB,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;QAC7D,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IAED,WAAW,CAAC,KAAa;QACvB,KAAK,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC;YACrD,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC;gBACxD,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;CACF"}
@@ -0,0 +1,20 @@
1
+ import { RuntimeResource } from "@telorun/sdk";
2
+ import type { ResourceManifest } from "./types.js";
3
+ export declare function evaluateCel(expression: string, context: Record<string, any>): unknown;
4
+ export declare function expandValue(value: any, context: Record<string, any>): any;
5
+ export declare function resolveExpressionsInRegistry(registry: Map<string, Map<string, RuntimeResource>>, runtimeConfig: ResourceManifest | null): void;
6
+ /**
7
+ * Resolve all non-deferred CEL expressions in a resource manifest using the
8
+ * provided boot context. Expressions referencing `request.*` or `result.*` are
9
+ * left untouched — they will be resolved at request time by the runtime.
10
+ *
11
+ * Missing identifiers that are not deferred prefixes will throw, which is
12
+ * intentional: if a consumer's manifest references a boot-context identifier
13
+ * that is absent from the context, it is a configuration error.
14
+ *
15
+ * @param manifest - The raw (pre-creation) ResourceManifest
16
+ * @param context - CEL evaluation context built by BootContextRegistry.buildContext()
17
+ * @returns A new manifest object with all resolvable `${{ }}` templates replaced
18
+ */
19
+ export declare function resolveManifestWithContext(manifest: ResourceManifest, context: Record<string, any>): ResourceManifest;
20
+ //# sourceMappingURL=expressions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expressions.d.ts","sourceRoot":"","sources":["../src/expressions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAOnD,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAErF;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,CAezE;AAED,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,EACnD,aAAa,EAAE,gBAAgB,GAAG,IAAI,GACrC,IAAI,CAuBN;AAsND;;;;;;;;;;;;GAYG;AACH,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,gBAAgB,EAC1B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC3B,gBAAgB,CAOlB"}