@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
package/dist/loader.js ADDED
@@ -0,0 +1,189 @@
1
+ import { compile } from "@telorun/yaml-cel-templating";
2
+ import * as path from "path";
3
+ import { HttpAdapter } from "./manifest-adapters/http-adapter.js";
4
+ import { LocalFileAdapter } from "./manifest-adapters/local-file-adapter.js";
5
+ import { RegistryAdapter } from "./manifest-adapters/registry-adapter.js";
6
+ import { formatAjvErrors, validateRuntimeResource } from "./manifest-schemas.js";
7
+ /**
8
+ * Loader: Ingests resolved YAML manifests from disk or remote URLs into memory
9
+ */
10
+ export class Loader {
11
+ constructor() {
12
+ this.adapters = [new HttpAdapter(), new RegistryAdapter(), new LocalFileAdapter()];
13
+ }
14
+ getAdapter(pathOrUrl) {
15
+ const adapter = this.adapters.find((a) => a.supports(pathOrUrl));
16
+ if (!adapter) {
17
+ throw new Error(`No manifest adapter found for: ${pathOrUrl}`);
18
+ }
19
+ return adapter;
20
+ }
21
+ static ensureProjectRoot(baseDir) {
22
+ if (!Loader.projectRoot) {
23
+ Loader.projectRoot = path.resolve(baseDir);
24
+ }
25
+ }
26
+ resolvePath(base, relative) {
27
+ return this.getAdapter(base).resolveRelative(base, relative);
28
+ }
29
+ async loadDirectory(pathOrUrl) {
30
+ const files = await this.getAdapter(pathOrUrl).readAll(pathOrUrl);
31
+ Loader.ensureProjectRoot(files[0]?.baseDir ?? process.cwd());
32
+ const resources = [];
33
+ for (const file of files) {
34
+ await this.processFile(file, resources);
35
+ }
36
+ return this.orderResourcesByKindDependencies(resources);
37
+ }
38
+ async loadManifest(pathOrUrl) {
39
+ const file = await this.getAdapter(pathOrUrl).read(pathOrUrl);
40
+ if (!Loader.projectRoot) {
41
+ Loader.ensureProjectRoot(file.baseDir);
42
+ }
43
+ const rawDocs = file.documents;
44
+ const compileContext = { env: process.env };
45
+ const resolved = [];
46
+ for (const rawDoc of rawDocs) {
47
+ let compiled;
48
+ try {
49
+ compiled = compile(rawDoc, { context: compileContext });
50
+ }
51
+ catch (error) {
52
+ throw new Error(`Failed to compile manifest in ${file.source}: ${error instanceof Error ? error.message : String(error)}`);
53
+ }
54
+ const compiledDocs = Array.isArray(compiled) ? compiled : [compiled];
55
+ for (const manifest of compiledDocs) {
56
+ const resource = {
57
+ ...manifest,
58
+ metadata: {
59
+ ...manifest.metadata,
60
+ source: file.source,
61
+ },
62
+ };
63
+ resolved.push(resource);
64
+ }
65
+ }
66
+ return resolved;
67
+ }
68
+ async processFile(file, resources) {
69
+ const documents = file.documents;
70
+ const compileContext = { env: process.env };
71
+ for (const rawDoc of documents) {
72
+ let compiled;
73
+ try {
74
+ compiled = compile(rawDoc, { context: compileContext });
75
+ }
76
+ catch (error) {
77
+ throw new Error(`Failed to compile manifest in ${file.source}: ${error instanceof Error ? error.message : String(error)}`);
78
+ }
79
+ const compiledDocs = Array.isArray(compiled) ? compiled : [compiled];
80
+ for (const doc of compiledDocs) {
81
+ const resource = this.normalizeResource(doc);
82
+ if (!resource) {
83
+ continue;
84
+ }
85
+ if (!validateRuntimeResource(resource)) {
86
+ const kind = resource.kind;
87
+ const name = resource.metadata?.name;
88
+ throw new Error(`Resource validation failed for ${kind}.${name}: ${formatAjvErrors(validateRuntimeResource.errors)}`);
89
+ }
90
+ const { kind, name } = resource.metadata;
91
+ resource.metadata.source = file.source;
92
+ resource.metadata.uri = `${file.uriBase}#${kind}.${name}`;
93
+ resource.metadata.generationDepth = 0;
94
+ resources.push(resource);
95
+ }
96
+ }
97
+ }
98
+ normalizeResource(doc) {
99
+ if (!doc || typeof doc !== "object" || typeof doc.kind !== "string") {
100
+ return null;
101
+ }
102
+ // Already in correct format
103
+ if (doc.metadata && typeof doc.metadata === "object" && typeof doc.metadata.name === "string") {
104
+ return doc;
105
+ }
106
+ return null;
107
+ }
108
+ // Validation handled by TypeBox + Ajv schemas.
109
+ orderResourcesByKindDependencies(resources) {
110
+ if (resources.length <= 1) {
111
+ return resources;
112
+ }
113
+ const indicesByName = new Map();
114
+ for (let i = 0; i < resources.length; i += 1) {
115
+ const name = resources[i]?.metadata?.name;
116
+ if (!name) {
117
+ continue;
118
+ }
119
+ const list = indicesByName.get(name);
120
+ if (list) {
121
+ list.push(i);
122
+ }
123
+ else {
124
+ indicesByName.set(name, [i]);
125
+ }
126
+ }
127
+ const edges = new Map();
128
+ const indegree = new Map();
129
+ for (let i = 0; i < resources.length; i += 1) {
130
+ indegree.set(i, 0);
131
+ }
132
+ for (let i = 0; i < resources.length; i += 1) {
133
+ const kind = resources[i]?.kind;
134
+ if (!kind) {
135
+ continue;
136
+ }
137
+ const definers = indicesByName.get(kind);
138
+ if (!definers) {
139
+ continue;
140
+ }
141
+ for (const definerIndex of definers) {
142
+ if (definerIndex === i) {
143
+ continue;
144
+ }
145
+ let set = edges.get(definerIndex);
146
+ if (!set) {
147
+ set = new Set();
148
+ edges.set(definerIndex, set);
149
+ }
150
+ if (!set.has(i)) {
151
+ set.add(i);
152
+ indegree.set(i, (indegree.get(i) || 0) + 1);
153
+ }
154
+ }
155
+ }
156
+ const ready = [];
157
+ for (let i = 0; i < resources.length; i += 1) {
158
+ if ((indegree.get(i) || 0) === 0) {
159
+ ready.push(i);
160
+ }
161
+ }
162
+ ready.sort((a, b) => a - b);
163
+ const ordered = [];
164
+ while (ready.length > 0) {
165
+ const index = ready.shift();
166
+ ordered.push(resources[index]);
167
+ const next = edges.get(index);
168
+ if (!next) {
169
+ continue;
170
+ }
171
+ for (const dependent of next) {
172
+ const count = (indegree.get(dependent) || 0) - 1;
173
+ indegree.set(dependent, count);
174
+ if (count === 0) {
175
+ ready.push(dependent);
176
+ }
177
+ }
178
+ if (ready.length > 1) {
179
+ ready.sort((a, b) => a - b);
180
+ }
181
+ }
182
+ if (ordered.length !== resources.length) {
183
+ throw new Error("Resource dependency cycle detected");
184
+ }
185
+ return ordered;
186
+ }
187
+ }
188
+ Loader.projectRoot = null;
189
+ //# sourceMappingURL=loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { ManifestAdapter, ManifestSourceData } from "./manifest-adapter.js";
2
+ export declare class HttpAdapter implements ManifestAdapter {
3
+ supports(pathOrUrl: string): boolean;
4
+ read(url: string): Promise<ManifestSourceData>;
5
+ readAll(url: string): Promise<ManifestSourceData[]>;
6
+ resolveRelative(base: string, relative: string): string;
7
+ }
8
+ //# sourceMappingURL=http-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-adapter.d.ts","sourceRoot":"","sources":["../../src/manifest-adapters/http-adapter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAEjF,qBAAa,WAAY,YAAW,eAAe;IACjD,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAI9B,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAI9C,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAkBzD,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;CAIxD"}
@@ -0,0 +1,29 @@
1
+ import * as yaml from "js-yaml";
2
+ export class HttpAdapter {
3
+ supports(pathOrUrl) {
4
+ return pathOrUrl.startsWith("http://") || pathOrUrl.startsWith("https://");
5
+ }
6
+ async read(url) {
7
+ return (await this.readAll(url))[0];
8
+ }
9
+ async readAll(url) {
10
+ const fetchUrl = url.includes(".yaml") ? url : url + "/module.yaml";
11
+ const response = await fetch(fetchUrl);
12
+ if (!response.ok) {
13
+ throw new Error(`Failed to fetch manifest from ${fetchUrl}: ${response.status} ${response.statusText}`);
14
+ }
15
+ return [
16
+ {
17
+ documents: yaml.loadAll(await response.text()),
18
+ source: fetchUrl,
19
+ baseDir: process.cwd(),
20
+ uriBase: url,
21
+ },
22
+ ];
23
+ }
24
+ resolveRelative(base, relative) {
25
+ const baseWithSlash = base.endsWith("/") ? base : `${base}/`;
26
+ return new URL(relative, baseWithSlash).href;
27
+ }
28
+ }
29
+ //# sourceMappingURL=http-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-adapter.js","sourceRoot":"","sources":["../../src/manifest-adapters/http-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,SAAS,CAAC;AAGhC,MAAM,OAAO,WAAW;IACtB,QAAQ,CAAC,SAAiB;QACxB,OAAO,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IAC7E,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,GAAW;QACpB,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,GAAW;QACvB,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,cAAc,CAAC;QACpE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,CAAC;QACvC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CACb,iCAAiC,QAAQ,KAAK,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CACvF,CAAC;QACJ,CAAC;QACD,OAAO;YACL;gBACE,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBAC9C,MAAM,EAAE,QAAQ;gBAChB,OAAO,EAAE,OAAO,CAAC,GAAG,EAAE;gBACtB,OAAO,EAAE,GAAG;aACb;SACF,CAAC;IACJ,CAAC;IAED,eAAe,CAAC,IAAY,EAAE,QAAgB;QAC5C,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC;QAC7D,OAAO,IAAI,GAAG,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC,IAAI,CAAC;IAC/C,CAAC;CACF"}
@@ -0,0 +1,11 @@
1
+ import type { ManifestAdapter, ManifestSourceData } from "./manifest-adapter.js";
2
+ export declare class LocalFileAdapter implements ManifestAdapter {
3
+ supports(pathOrUrl: string): boolean;
4
+ read(pathOrUrl: string): Promise<ManifestSourceData>;
5
+ readAll(pathOrUrl: string): Promise<ManifestSourceData[]>;
6
+ resolveRelative(base: string, relative: string): string;
7
+ private readFile;
8
+ private collectYamlFiles;
9
+ private isYamlFile;
10
+ }
11
+ //# sourceMappingURL=local-file-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-file-adapter.d.ts","sourceRoot":"","sources":["../../src/manifest-adapters/local-file-adapter.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAEjF,qBAAa,gBAAiB,YAAW,eAAe;IACtD,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAI9B,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAMpD,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAU/D,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;YAIzC,QAAQ;YAWR,gBAAgB;IAY9B,OAAO,CAAC,UAAU;CAGnB"}
@@ -0,0 +1,51 @@
1
+ import * as fs from "fs/promises";
2
+ import * as path from "path";
3
+ import * as yaml from "js-yaml";
4
+ export class LocalFileAdapter {
5
+ supports(pathOrUrl) {
6
+ return !pathOrUrl.startsWith("http://") && !pathOrUrl.startsWith("https://");
7
+ }
8
+ async read(pathOrUrl) {
9
+ const stat = await fs.stat(pathOrUrl);
10
+ const filePath = stat.isDirectory() ? path.join(pathOrUrl, "module.yaml") : pathOrUrl;
11
+ return this.readFile(filePath);
12
+ }
13
+ async readAll(pathOrUrl) {
14
+ const stat = await fs.stat(pathOrUrl);
15
+ if (stat.isDirectory()) {
16
+ const results = [];
17
+ await this.collectYamlFiles(pathOrUrl, results);
18
+ return results;
19
+ }
20
+ return [await this.readFile(pathOrUrl)];
21
+ }
22
+ resolveRelative(base, relative) {
23
+ return path.resolve(base, relative);
24
+ }
25
+ async readFile(filePath) {
26
+ const abs = path.resolve(filePath);
27
+ const content = await fs.readFile(filePath, "utf-8");
28
+ return {
29
+ documents: yaml.loadAll(content),
30
+ source: filePath,
31
+ baseDir: path.dirname(abs),
32
+ uriBase: `file://localhost${abs.replace(/\\/g, "/")}`,
33
+ };
34
+ }
35
+ async collectYamlFiles(dirPath, results) {
36
+ const entries = await fs.readdir(dirPath, { withFileTypes: true });
37
+ for (const entry of entries) {
38
+ const fullPath = path.join(dirPath, entry.name);
39
+ if (entry.isDirectory()) {
40
+ await this.collectYamlFiles(fullPath, results);
41
+ }
42
+ else if (entry.isFile() && this.isYamlFile(entry.name)) {
43
+ results.push(await this.readFile(fullPath));
44
+ }
45
+ }
46
+ }
47
+ isYamlFile(filename) {
48
+ return filename.endsWith(".yaml") || filename.endsWith(".yml");
49
+ }
50
+ }
51
+ //# sourceMappingURL=local-file-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-file-adapter.js","sourceRoot":"","sources":["../../src/manifest-adapters/local-file-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,IAAI,MAAM,SAAS,CAAC;AAGhC,MAAM,OAAO,gBAAgB;IAC3B,QAAQ,CAAC,SAAiB;QACxB,OAAO,CAAC,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IAC/E,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,SAAiB;QAC1B,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACtF,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,SAAiB;QAC7B,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACtC,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACvB,MAAM,OAAO,GAAyB,EAAE,CAAC;YACzC,MAAM,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAChD,OAAO,OAAO,CAAC;QACjB,CAAC;QACD,OAAO,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;IAC1C,CAAC;IAED,eAAe,CAAC,IAAY,EAAE,QAAgB;QAC5C,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACtC,CAAC;IAEO,KAAK,CAAC,QAAQ,CAAC,QAAgB;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACnC,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACrD,OAAO;YACL,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;YAChC,MAAM,EAAE,QAAQ;YAChB,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;YAC1B,OAAO,EAAE,mBAAmB,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE;SACtD,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAAC,OAAe,EAAE,OAA6B;QAC3E,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QACnE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAChD,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACxB,MAAM,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACjD,CAAC;iBAAM,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzD,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC;IACH,CAAC;IAEO,UAAU,CAAC,QAAgB;QACjC,OAAO,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACjE,CAAC;CACF"}
@@ -0,0 +1,33 @@
1
+ export interface ManifestSourceData {
2
+ /** Parsed YAML documents (result of yaml.loadAll) */
3
+ documents: any[];
4
+ /** Stored as metadata.source (file path or URL) */
5
+ source: string;
6
+ /** Base directory for resolving relative controller entrypoints */
7
+ baseDir: string;
8
+ /** URI prefix — full resource URI is `${uriBase}#${kind}.${name}` */
9
+ uriBase: string;
10
+ }
11
+ export interface ManifestAdapter {
12
+ /** Returns true if this adapter can handle the given path/URL */
13
+ supports(pathOrUrl: string): boolean;
14
+ /**
15
+ * Read a single manifest entry point.
16
+ * - File path or URL → read that file/URL.
17
+ * - Directory path → find and read `module.yaml` within it.
18
+ */
19
+ read(pathOrUrl: string): Promise<ManifestSourceData>;
20
+ /**
21
+ * Read all manifest files reachable from the given path/URL.
22
+ * Used for module imports.
23
+ * - Directory path → recursive walk, one entry per .yaml/.yml file found.
24
+ * - File path or URL → single-item array.
25
+ */
26
+ readAll(pathOrUrl: string): Promise<ManifestSourceData[]>;
27
+ /**
28
+ * Resolve a potentially relative path/URL against a base directory/URL.
29
+ * For absolute inputs the base is ignored.
30
+ */
31
+ resolveRelative(base: string, relative: string): string;
32
+ }
33
+ //# sourceMappingURL=manifest-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest-adapter.d.ts","sourceRoot":"","sources":["../../src/manifest-adapters/manifest-adapter.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,kBAAkB;IACjC,qDAAqD;IACrD,SAAS,EAAE,GAAG,EAAE,CAAC;IACjB,mDAAmD;IACnD,MAAM,EAAE,MAAM,CAAC;IACf,mEAAmE;IACnE,OAAO,EAAE,MAAM,CAAC;IAChB,qEAAqE;IACrE,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,iEAAiE;IACjE,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;IACrC;;;;OAIG;IACH,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACrD;;;;;OAKG;IACH,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC;IAC1D;;;OAGG;IACH,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC;CACzD"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=manifest-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest-adapter.js","sourceRoot":"","sources":["../../src/manifest-adapters/manifest-adapter.ts"],"names":[],"mappings":""}
@@ -0,0 +1,9 @@
1
+ import type { ManifestAdapter, ManifestSourceData } from "./manifest-adapter.js";
2
+ export declare class RegistryAdapter implements ManifestAdapter {
3
+ supports(pathOrUrl: string): boolean;
4
+ read(moduleRef: string): Promise<ManifestSourceData>;
5
+ readAll(moduleRef: string): Promise<ManifestSourceData[]>;
6
+ resolveRelative(base: string, relative: string): string;
7
+ private toRegistryUrl;
8
+ }
9
+ //# sourceMappingURL=registry-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry-adapter.d.ts","sourceRoot":"","sources":["../../src/manifest-adapters/registry-adapter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAIjF,qBAAa,eAAgB,YAAW,eAAe;IACrD,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAY9B,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAIpD,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAkB/D,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAQvD,OAAO,CAAC,aAAa;CAOtB"}
@@ -0,0 +1,46 @@
1
+ import * as yaml from "js-yaml";
2
+ const REGISTRY_BASE = "https://registry.telo.run";
3
+ export class RegistryAdapter {
4
+ supports(pathOrUrl) {
5
+ // Matches "owner/module@version" — has @ and /, but not an http/https URL or local path
6
+ return (!pathOrUrl.startsWith("http://") &&
7
+ !pathOrUrl.startsWith("https://") &&
8
+ !pathOrUrl.startsWith("/") &&
9
+ !pathOrUrl.startsWith(".") &&
10
+ pathOrUrl.includes("@") &&
11
+ pathOrUrl.includes("/"));
12
+ }
13
+ async read(moduleRef) {
14
+ return (await this.readAll(moduleRef))[0];
15
+ }
16
+ async readAll(moduleRef) {
17
+ const url = this.toRegistryUrl(moduleRef);
18
+ const response = await fetch(url);
19
+ if (!response.ok) {
20
+ throw new Error(`Failed to fetch manifest ${moduleRef}: ${response.status} ${response.statusText}`);
21
+ }
22
+ return [
23
+ {
24
+ documents: yaml.loadAll(await response.text()),
25
+ source: url,
26
+ baseDir: process.cwd(),
27
+ uriBase: url.replace("/module.yaml", ""),
28
+ },
29
+ ];
30
+ }
31
+ resolveRelative(base, relative) {
32
+ const baseUrl = this.supports(base)
33
+ ? this.toRegistryUrl(base).replace("/module.yaml", "")
34
+ : base;
35
+ const baseWithSlash = baseUrl.endsWith("/") ? baseUrl : `${baseUrl}/`;
36
+ return new URL(relative, baseWithSlash).href;
37
+ }
38
+ toRegistryUrl(moduleRef) {
39
+ const atIdx = moduleRef.lastIndexOf("@");
40
+ const path = moduleRef.slice(0, atIdx); // "example/module"
41
+ const version = moduleRef.slice(atIdx + 1); // "1.2.3" or "v1.2.3"
42
+ const versionSegment = version.startsWith("v") ? version.substring(1) : version;
43
+ return `${REGISTRY_BASE}/${path}/${versionSegment}/module.yaml`;
44
+ }
45
+ }
46
+ //# sourceMappingURL=registry-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry-adapter.js","sourceRoot":"","sources":["../../src/manifest-adapters/registry-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,SAAS,CAAC;AAGhC,MAAM,aAAa,GAAG,2BAA2B,CAAC;AAElD,MAAM,OAAO,eAAe;IAC1B,QAAQ,CAAC,SAAiB;QACxB,wFAAwF;QACxF,OAAO,CACL,CAAC,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC;YAChC,CAAC,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC;YACjC,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC;YAC1B,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC;YAC1B,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC;YACvB,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CACxB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,SAAiB;QAC1B,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,SAAiB;QAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QAC1C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CACb,4BAA4B,SAAS,KAAK,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CACnF,CAAC;QACJ,CAAC;QACD,OAAO;YACL;gBACE,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBAC9C,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE,OAAO,CAAC,GAAG,EAAE;gBACtB,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC;aACzC;SACF,CAAC;IACJ,CAAC;IAED,eAAe,CAAC,IAAY,EAAE,QAAgB;QAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YACjC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC;YACtD,CAAC,CAAC,IAAI,CAAC;QACT,MAAM,aAAa,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,CAAC;QACtE,OAAO,IAAI,GAAG,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC,IAAI,CAAC;IAC/C,CAAC;IAEO,aAAa,CAAC,SAAiB;QACrC,MAAM,KAAK,GAAG,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACzC,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,mBAAmB;QAC3D,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,sBAAsB;QAClE,MAAM,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;QAChF,OAAO,GAAG,aAAa,IAAI,IAAI,IAAI,cAAc,cAAc,CAAC;IAClE,CAAC;CACF"}
@@ -0,0 +1,66 @@
1
+ import AjvModule, { ErrorObject } from "ajv";
2
+ export declare const ModuleManifestSchema: import("@sinclair/typebox").TObject<{
3
+ kind: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
4
+ name: import("@sinclair/typebox").TString;
5
+ version: import("@sinclair/typebox").TString;
6
+ imports: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>>;
7
+ definitions: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>>;
8
+ entry: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
9
+ entries: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
10
+ runtime: import("@sinclair/typebox").TString;
11
+ entry: import("@sinclair/typebox").TString;
12
+ }>>>;
13
+ importEntries: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
14
+ runtime: import("@sinclair/typebox").TString;
15
+ entry: import("@sinclair/typebox").TString;
16
+ }>>>>;
17
+ }>;
18
+ export declare const RuntimeResourceSchema: import("@sinclair/typebox").TObject<{
19
+ kind: import("@sinclair/typebox").TString;
20
+ metadata: import("@sinclair/typebox").TObject<{
21
+ name: import("@sinclair/typebox").TString;
22
+ }>;
23
+ }>;
24
+ export declare const ResourceDefinitionSchema: import("@sinclair/typebox").TObject<{
25
+ kind: import("@sinclair/typebox").TLiteral<"Runtime.Definition">;
26
+ metadata: import("@sinclair/typebox").TObject<{
27
+ name: import("@sinclair/typebox").TString;
28
+ module: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
29
+ }>;
30
+ schema: import("@sinclair/typebox").TObject<{}>;
31
+ capabilities: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>;
32
+ events: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>>;
33
+ controllers: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>>;
34
+ }>;
35
+ export declare const validateModuleManifest: AjvModule.ValidateFunction<{
36
+ name: any;
37
+ version: any;
38
+ } & {
39
+ name: any;
40
+ } & {
41
+ version: any;
42
+ }>;
43
+ export declare const validateRuntimeResource: AjvModule.ValidateFunction<{
44
+ kind: any;
45
+ metadata: any;
46
+ } & {
47
+ kind: any;
48
+ } & {
49
+ metadata: any;
50
+ }>;
51
+ export declare const validateResourceDefinition: AjvModule.ValidateFunction<{
52
+ schema: any;
53
+ kind: any;
54
+ metadata: any;
55
+ capabilities: any;
56
+ } & {
57
+ schema: any;
58
+ } & {
59
+ kind: any;
60
+ } & {
61
+ metadata: any;
62
+ } & {
63
+ capabilities: any;
64
+ }>;
65
+ export declare function formatAjvErrors(errors: ErrorObject[] | null | undefined): string;
66
+ //# sourceMappingURL=manifest-schemas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest-schemas.d.ts","sourceRoot":"","sources":["../src/manifest-schemas.ts"],"names":[],"mappings":"AACA,OAAO,SAAS,EAAE,EAAE,WAAW,EAAE,MAAM,KAAK,CAAC;AAqB7C,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;EAYhC,CAAC;AAEF,eAAO,MAAM,qBAAqB;;;;;EAMjC,CAAC;AAEF,eAAO,MAAM,wBAAwB;;;;;;;;;;EAgBpC,CAAC;AAIF,eAAO,MAAM,sBAAsB;;;;;;;EAAoC,CAAC;AACxE,eAAO,MAAM,uBAAuB;;;;;;;EAAqC,CAAC;AAC1E,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;EAAwC,CAAC;AAEhF,wBAAgB,eAAe,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAWhF"}
@@ -0,0 +1,55 @@
1
+ import { Type } from "@sinclair/typebox";
2
+ import AjvModule from "ajv";
3
+ const Ajv = AjvModule.default ?? AjvModule;
4
+ const EntrypointSchema = Type.Object({
5
+ runtime: Type.String(),
6
+ entry: Type.String(),
7
+ }, { additionalProperties: false });
8
+ const PackageControllerSchema = Type.Object({
9
+ runtime: Type.String(),
10
+ registry: Type.Optional(Type.String()),
11
+ package: Type.String(),
12
+ entry: Type.String(),
13
+ }, { additionalProperties: false });
14
+ export const ModuleManifestSchema = Type.Object({
15
+ kind: Type.Optional(Type.String()),
16
+ name: Type.String(),
17
+ version: Type.String(),
18
+ imports: Type.Optional(Type.Array(Type.String())),
19
+ definitions: Type.Optional(Type.Array(Type.String())),
20
+ entry: Type.Optional(Type.String()),
21
+ entries: Type.Optional(Type.Array(EntrypointSchema)),
22
+ importEntries: Type.Optional(Type.Record(Type.String(), Type.Array(EntrypointSchema))),
23
+ }, { additionalProperties: true });
24
+ export const RuntimeResourceSchema = Type.Object({
25
+ kind: Type.String(),
26
+ metadata: Type.Object({ name: Type.String() }, { additionalProperties: true }),
27
+ }, { additionalProperties: true });
28
+ export const ResourceDefinitionSchema = Type.Object({
29
+ kind: Type.Literal("Runtime.Definition"),
30
+ metadata: Type.Object({
31
+ name: Type.String(),
32
+ module: Type.Optional(Type.String()),
33
+ }, { additionalProperties: true }),
34
+ schema: Type.Object({}, { additionalProperties: true }),
35
+ capabilities: Type.Array(Type.String(), { minItems: 1 }),
36
+ events: Type.Optional(Type.Array(Type.String())),
37
+ controllers: Type.Optional(Type.Array(Type.String())),
38
+ }, { additionalProperties: true });
39
+ const ajv = new Ajv({ allErrors: true, strict: false });
40
+ export const validateModuleManifest = ajv.compile(ModuleManifestSchema);
41
+ export const validateRuntimeResource = ajv.compile(RuntimeResourceSchema);
42
+ export const validateResourceDefinition = ajv.compile(ResourceDefinitionSchema);
43
+ export function formatAjvErrors(errors) {
44
+ if (!errors || errors.length === 0) {
45
+ return "Unknown schema error";
46
+ }
47
+ return errors
48
+ .map((err) => {
49
+ const path = err.instancePath && err.instancePath.length > 0 ? err.instancePath : "/";
50
+ const message = err.message || "is invalid";
51
+ return `${path} ${message}`;
52
+ })
53
+ .join("; ");
54
+ }
55
+ //# sourceMappingURL=manifest-schemas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest-schemas.js","sourceRoot":"","sources":["../src/manifest-schemas.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import { RuntimeResource } from "@telorun/sdk";
2
+ import { ResourceManifest } from "./types.js";
3
+ /**
4
+ * Registry: Indexes resources by composite key of Kind and Name
5
+ * Maintains URI-based lookup for tracking resource origins and lineage
6
+ */
7
+ export declare class ManifestRegistry {
8
+ private resources;
9
+ private kindInheritance;
10
+ private uriIndex;
11
+ private sourceIndex;
12
+ private depthIndex;
13
+ register(resource: RuntimeResource): void;
14
+ getParentKind(kind: string): string | undefined;
15
+ resolveKindChain(kind: string): string[];
16
+ get(kind: string, name: string): ResourceManifest | undefined;
17
+ getByKind(kind: string): ResourceManifest[];
18
+ /**
19
+ * Get resource by its URI
20
+ */
21
+ getByUri(uri: string): ResourceManifest | undefined;
22
+ /**
23
+ * Get all resources from a specific source file
24
+ */
25
+ getBySourceFile(sourceFilePath: string): ResourceManifest[];
26
+ /**
27
+ * Get all resources at a specific generation depth
28
+ * 0 = directly from files, 1+ = template-generated
29
+ */
30
+ getByGenerationDepth(depth: number): ResourceManifest[];
31
+ /**
32
+ * Get all template-generated resources (depth > 0)
33
+ */
34
+ getTemplateGenerated(): ResourceManifest[];
35
+ /**
36
+ * Get all directly-loaded resources (depth = 0)
37
+ */
38
+ getDirectlyLoaded(): ResourceManifest[];
39
+ getAll(): ResourceManifest[];
40
+ }
41
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,OAAO,EAAE,gBAAgB,EAAgB,MAAM,YAAY,CAAC;AAE5D;;;GAGG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,SAAS,CAAyD;IAC1E,OAAO,CAAC,eAAe,CAAkC;IACzD,OAAO,CAAC,QAAQ,CAA4C;IAC5D,OAAO,CAAC,WAAW,CAA8C;IACjE,OAAO,CAAC,UAAU,CAA8C;IAEhE,QAAQ,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI;IAoDzC,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAI/C,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE;IAUxC,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS;IAI7D,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,EAAE;IAK3C;;OAEG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS;IAInD;;OAEG;IACH,eAAe,CAAC,cAAc,EAAE,MAAM,GAAG,gBAAgB,EAAE;IAI3D;;;OAGG;IACH,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,gBAAgB,EAAE;IAIvD;;OAEG;IACH,oBAAoB,IAAI,gBAAgB,EAAE;IAU1C;;OAEG;IACH,iBAAiB,IAAI,gBAAgB,EAAE;IAIvC,MAAM,IAAI,gBAAgB,EAAE;CAK7B"}