@kumori/kdsl 0.0.13 → 0.0.15

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 (163) hide show
  1. package/dist/build/deployment_spec.d.ts +21095 -0
  2. package/dist/build/deployment_spec.js +292 -0
  3. package/dist/build/deployment_spec.js.map +1 -0
  4. package/dist/build/helpers/builtin.d.ts +17 -0
  5. package/dist/build/helpers/builtin.js +82 -0
  6. package/dist/build/helpers/builtin.js.map +1 -0
  7. package/dist/build/helpers/component.d.ts +17 -0
  8. package/dist/build/helpers/component.js +212 -0
  9. package/dist/build/helpers/component.js.map +1 -0
  10. package/dist/build/helpers/connector.d.ts +13 -0
  11. package/dist/build/helpers/connector.js +190 -0
  12. package/dist/build/helpers/connector.js.map +1 -0
  13. package/dist/build/helpers/deployment.d.ts +326 -0
  14. package/dist/build/helpers/deployment.js +86 -0
  15. package/dist/build/helpers/deployment.js.map +1 -0
  16. package/dist/build/helpers/resource.d.ts +97 -0
  17. package/dist/build/helpers/resource.js +54 -0
  18. package/dist/build/helpers/resource.js.map +1 -0
  19. package/dist/build/helpers/service.d.ts +27 -0
  20. package/dist/build/helpers/service.js +199 -0
  21. package/dist/build/helpers/service.js.map +1 -0
  22. package/dist/build/helpers/utils.d.ts +22 -0
  23. package/dist/build/helpers/utils.js +55 -0
  24. package/dist/build/helpers/utils.js.map +1 -0
  25. package/dist/build/main.d.ts +17 -0
  26. package/dist/build/main.js +139 -0
  27. package/dist/build/main.js.map +1 -0
  28. package/dist/build/solution.d.ts +20 -0
  29. package/dist/build/solution.js +72 -0
  30. package/dist/build/solution.js.map +1 -0
  31. package/dist/check/main.d.ts +21 -0
  32. package/dist/check/main.js +99 -0
  33. package/dist/check/main.js.map +1 -0
  34. package/dist/clean/main.d.ts +11 -0
  35. package/dist/clean/main.js +26 -0
  36. package/dist/clean/main.js.map +1 -0
  37. package/dist/help/main.d.ts +13 -0
  38. package/dist/help/main.js +49 -0
  39. package/dist/help/main.js.map +1 -0
  40. package/dist/help/topic/build.d.ts +2 -0
  41. package/dist/help/topic/build.js +7 -0
  42. package/dist/help/topic/build.js.map +1 -0
  43. package/dist/help/topic/mod_dep.d.ts +2 -0
  44. package/dist/help/topic/mod_dep.js +8 -0
  45. package/dist/help/topic/mod_dep.js.map +1 -0
  46. package/dist/help/topic/mod_dl.d.ts +2 -0
  47. package/dist/help/topic/mod_dl.js +25 -0
  48. package/dist/help/topic/mod_dl.js.map +1 -0
  49. package/dist/index/create/main.d.ts +14 -0
  50. package/dist/index/create/main.js +264 -0
  51. package/dist/index/create/main.js.map +1 -0
  52. package/dist/index/main.d.ts +8 -0
  53. package/dist/index/main.js +17 -0
  54. package/dist/index/main.js.map +1 -0
  55. package/dist/lib/build.d.ts +42 -0
  56. package/dist/lib/build.js +28 -0
  57. package/dist/lib/build.js.map +1 -0
  58. package/dist/lib/check.d.ts +41 -0
  59. package/dist/lib/check.js +15 -0
  60. package/dist/lib/check.js.map +1 -0
  61. package/dist/lib/clean.d.ts +31 -0
  62. package/dist/lib/clean.js +1 -0
  63. package/dist/lib/clean.js.map +1 -0
  64. package/dist/lib/index-cmd.d.ts +54 -0
  65. package/dist/lib/index-cmd.js +57 -0
  66. package/dist/lib/index-cmd.js.map +1 -0
  67. package/dist/lib/index.d.ts +56 -0
  68. package/dist/lib/index.js +117 -0
  69. package/dist/lib/index.js.map +1 -0
  70. package/dist/lib/io/lib.kumori +5 -0
  71. package/dist/lib/kumori/builtin/httpinbound.h.kumori +27 -0
  72. package/dist/lib/kumori/builtin/tcpinbound.h.kumori +25 -0
  73. package/dist/lib/kumori/builtin.kumori +18 -0
  74. package/dist/lib/kumori/component.kumori +120 -0
  75. package/dist/lib/kumori/deployment.kumori +16 -0
  76. package/dist/lib/kumori/resource.kumori +25 -0
  77. package/dist/lib/kumori/service.kumori +49 -0
  78. package/dist/lib/kumori/shared.kumori +11 -0
  79. package/dist/lib/kumori/sized.kumori +25 -0
  80. package/dist/lib/logger.d.ts +10 -0
  81. package/dist/lib/logger.js +23 -0
  82. package/dist/lib/logger.js.map +1 -0
  83. package/dist/lib/mod.d.ts +156 -0
  84. package/dist/lib/mod.js +70 -0
  85. package/dist/lib/mod.js.map +1 -0
  86. package/dist/lib/registry.d.ts +61 -0
  87. package/dist/lib/registry.js +1 -0
  88. package/dist/lib/registry.js.map +1 -0
  89. package/dist/lib/sized.kumori +8 -0
  90. package/dist/lib/std.kumori +8 -0
  91. package/dist/lib/strconv/lib.kumori +11 -0
  92. package/dist/lib/types.d.ts +26 -0
  93. package/dist/lib/types.js +2 -0
  94. package/dist/lib/types.js.map +1 -0
  95. package/dist/main.d.ts +1 -0
  96. package/dist/main.js +35 -0
  97. package/dist/main.js.map +1 -0
  98. package/dist/mod/checksum/main.d.ts +11 -0
  99. package/dist/mod/checksum/main.js +33 -0
  100. package/dist/mod/checksum/main.js.map +1 -0
  101. package/dist/mod/dependency/main.d.ts +19 -0
  102. package/dist/mod/dependency/main.js +156 -0
  103. package/dist/mod/dependency/main.js.map +1 -0
  104. package/dist/mod/download/functions.d.ts +53 -0
  105. package/dist/mod/download/functions.js +235 -0
  106. package/dist/mod/download/functions.js.map +1 -0
  107. package/dist/mod/download/main.d.ts +26 -0
  108. package/dist/mod/download/main.js +89 -0
  109. package/dist/mod/download/main.js.map +1 -0
  110. package/dist/mod/init/main.d.ts +13 -0
  111. package/dist/mod/init/main.js +66 -0
  112. package/dist/mod/init/main.js.map +1 -0
  113. package/dist/mod/jsonschema/gen/main.d.ts +11 -0
  114. package/dist/mod/jsonschema/gen/main.js +281 -0
  115. package/dist/mod/jsonschema/gen/main.js.map +1 -0
  116. package/dist/mod/jsonschema/get/kdslschema.d.ts +28 -0
  117. package/dist/mod/jsonschema/get/kdslschema.js +3 -0
  118. package/dist/mod/jsonschema/get/kdslschema.js.map +1 -0
  119. package/dist/mod/jsonschema/get/main.d.ts +76 -0
  120. package/dist/mod/jsonschema/get/main.js +338 -0
  121. package/dist/mod/jsonschema/get/main.js.map +1 -0
  122. package/dist/mod/jsonschema/main.d.ts +8 -0
  123. package/dist/mod/jsonschema/main.js +20 -0
  124. package/dist/mod/jsonschema/main.js.map +1 -0
  125. package/dist/mod/main.d.ts +8 -0
  126. package/dist/mod/main.js +27 -0
  127. package/dist/mod/main.js.map +1 -0
  128. package/dist/mod/update/main.d.ts +17 -0
  129. package/dist/mod/update/main.js +69 -0
  130. package/dist/mod/update/main.js.map +1 -0
  131. package/dist/registry/add.d.ts +15 -0
  132. package/dist/registry/add.js +53 -0
  133. package/dist/registry/add.js.map +1 -0
  134. package/dist/registry/list.d.ts +15 -0
  135. package/dist/registry/list.js +29 -0
  136. package/dist/registry/list.js.map +1 -0
  137. package/dist/registry/main.d.ts +8 -0
  138. package/dist/registry/main.js +21 -0
  139. package/dist/registry/main.js.map +1 -0
  140. package/dist/registry/remove.d.ts +15 -0
  141. package/dist/registry/remove.js +34 -0
  142. package/dist/registry/remove.js.map +1 -0
  143. package/dist/util/err-format.d.ts +2 -0
  144. package/dist/util/err-format.js +11 -0
  145. package/dist/util/err-format.js.map +1 -0
  146. package/dist/util/err-handler.d.ts +3 -0
  147. package/dist/util/err-handler.js +11 -0
  148. package/dist/util/err-handler.js.map +1 -0
  149. package/dist/util.d.ts +2 -0
  150. package/dist/util.js +2 -0
  151. package/dist/util.js.map +1 -0
  152. package/dist/version.d.ts +2 -0
  153. package/dist/version.js +6 -0
  154. package/dist/version.js.map +1 -0
  155. package/out/lib/build.cjs +29 -0
  156. package/out/lib/check.cjs +16 -0
  157. package/out/lib/clean.cjs +2 -0
  158. package/out/lib/index-cmd.cjs +58 -0
  159. package/out/lib/index.cjs +118 -0
  160. package/out/lib/mod.cjs +71 -0
  161. package/out/lib/registry.cjs +2 -0
  162. package/out/main.cjs +172 -172
  163. package/package.json +50 -6
@@ -0,0 +1,97 @@
1
+ import { Resource } from "@kumori/kdsl-lsp/language/builtin/lib/kumori/resource.js";
2
+ /**
3
+ * The Kumori Service Model is composed by several resource types.
4
+ * This function converts each resource to its solution JSON representation.
5
+ * @param resource
6
+ */
7
+ export declare function ResourceToSolutionJSON(resource: Resource): {
8
+ readonly volume: {
9
+ readonly size: number;
10
+ readonly unit: "k" | "m" | "M" | "G" | "T" | "P" | "E" | "Ki" | "Mi" | "Gi" | "Ti" | "Pi" | "Ei";
11
+ readonly kind: "storage";
12
+ readonly type?: undefined;
13
+ };
14
+ readonly ca?: undefined;
15
+ readonly certificate?: undefined;
16
+ readonly secret?: undefined;
17
+ readonly domain?: undefined;
18
+ readonly port?: undefined;
19
+ } | {
20
+ readonly volume: string;
21
+ readonly ca?: undefined;
22
+ readonly certificate?: undefined;
23
+ readonly secret?: undefined;
24
+ readonly domain?: undefined;
25
+ readonly port?: undefined;
26
+ } | {
27
+ readonly volume: {
28
+ readonly size: number;
29
+ readonly unit: "k" | "m" | "M" | "G" | "T" | "P" | "E" | "Ki" | "Mi" | "Gi" | "Ti" | "Pi" | "Ei";
30
+ readonly kind: "storage";
31
+ readonly type: "volatile";
32
+ };
33
+ readonly ca?: undefined;
34
+ readonly certificate?: undefined;
35
+ readonly secret?: undefined;
36
+ readonly domain?: undefined;
37
+ readonly port?: undefined;
38
+ } | {
39
+ readonly volume: {
40
+ readonly size: number;
41
+ readonly unit: "k" | "m" | "M" | "G" | "T" | "P" | "E" | "Ki" | "Mi" | "Gi" | "Ti" | "Pi" | "Ei";
42
+ readonly kind: "storage";
43
+ readonly type: "persistent";
44
+ };
45
+ readonly ca?: undefined;
46
+ readonly certificate?: undefined;
47
+ readonly secret?: undefined;
48
+ readonly domain?: undefined;
49
+ readonly port?: undefined;
50
+ } | {
51
+ readonly volume: {
52
+ readonly size: number;
53
+ readonly unit: "k" | "m" | "M" | "G" | "T" | "P" | "E" | "Ki" | "Mi" | "Gi" | "Ti" | "Pi" | "Ei";
54
+ readonly kind: "storage";
55
+ readonly type: "nonreplicated";
56
+ };
57
+ readonly ca?: undefined;
58
+ readonly certificate?: undefined;
59
+ readonly secret?: undefined;
60
+ readonly domain?: undefined;
61
+ readonly port?: undefined;
62
+ } | {
63
+ readonly ca: string;
64
+ readonly volume?: undefined;
65
+ readonly certificate?: undefined;
66
+ readonly secret?: undefined;
67
+ readonly domain?: undefined;
68
+ readonly port?: undefined;
69
+ } | {
70
+ readonly certificate: string;
71
+ readonly volume?: undefined;
72
+ readonly ca?: undefined;
73
+ readonly secret?: undefined;
74
+ readonly domain?: undefined;
75
+ readonly port?: undefined;
76
+ } | {
77
+ readonly secret: string;
78
+ readonly volume?: undefined;
79
+ readonly ca?: undefined;
80
+ readonly certificate?: undefined;
81
+ readonly domain?: undefined;
82
+ readonly port?: undefined;
83
+ } | {
84
+ readonly domain: string;
85
+ readonly volume?: undefined;
86
+ readonly ca?: undefined;
87
+ readonly certificate?: undefined;
88
+ readonly secret?: undefined;
89
+ readonly port?: undefined;
90
+ } | {
91
+ readonly port: string;
92
+ readonly volume?: undefined;
93
+ readonly ca?: undefined;
94
+ readonly certificate?: undefined;
95
+ readonly secret?: undefined;
96
+ readonly domain?: undefined;
97
+ };
@@ -0,0 +1,54 @@
1
+ import { EphemeralName, Ephemeral, PersistentName, Persistent, RegisteredName, Registered, VolatileName, Volatile, PersistedName, Persisted, NonReplicatedName, NonReplicated, CAName, CA, CertificateName, SecretName, Secret, DomainName, PortName, Port, Domain, Certificate } from "@kumori/kdsl-lsp/language/builtin/lib/kumori/resource.js";
2
+ /**
3
+ * The Kumori Service Model is composed by several resource types.
4
+ * This function converts each resource to its solution JSON representation.
5
+ * @param resource
6
+ */
7
+ export function ResourceToSolutionJSON(resource) {
8
+ if (resource.$type === EphemeralName) {
9
+ const res = Ephemeral.parse(resource);
10
+ return { volume: { size: res.value.size, unit: res.value.unit, kind: "storage" } };
11
+ }
12
+ if (resource.$type === PersistentName) {
13
+ const res = Persistent.parse(resource);
14
+ return { volume: res.value };
15
+ }
16
+ if (resource.$type === RegisteredName) {
17
+ const res = Registered.parse(resource);
18
+ return { volume: res.value };
19
+ }
20
+ if (resource.$type === VolatileName) {
21
+ const res = Volatile.parse(resource);
22
+ return { volume: { size: res.value.size, unit: res.value.unit, kind: "storage", type: "volatile" } };
23
+ }
24
+ if (resource.$type === PersistedName) {
25
+ const res = Persisted.parse(resource);
26
+ return { volume: { size: res.value.size, unit: res.value.unit, kind: "storage", type: "persistent" } };
27
+ }
28
+ if (resource.$type === NonReplicatedName) {
29
+ const res = NonReplicated.parse(resource);
30
+ return { volume: { size: res.value.size, unit: res.value.unit, kind: "storage", type: "nonreplicated" } };
31
+ }
32
+ if (resource.$type === CAName) {
33
+ const res = CA.parse(resource);
34
+ return { ca: res.value };
35
+ }
36
+ if (resource.$type === CertificateName) {
37
+ const res = Certificate.parse(resource);
38
+ return { certificate: res.value };
39
+ }
40
+ if (resource.$type === SecretName) {
41
+ const res = Secret.parse(resource);
42
+ return { secret: res.value };
43
+ }
44
+ if (resource.$type === DomainName) {
45
+ const res = Domain.parse(resource);
46
+ return { domain: res.value };
47
+ }
48
+ if (resource.$type === PortName) {
49
+ const res = Port.parse(resource);
50
+ return { port: res.value };
51
+ }
52
+ throw new Error(`unknown resource type '${resource.$type}'`);
53
+ }
54
+ //# sourceMappingURL=resource.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource.js","sourceRoot":"","sources":["../../../src/build/helpers/resource.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import { Service, Role } from "@kumori/kdsl-lsp/language/builtin/lib/kumori/service.js";
2
+ import { Maybe } from "@kumori/kdsl-lsp/util/maybe.js";
3
+ import { ServiceArtifact, V3DeploymentSpec, Role as RoleJSON } from "../deployment_spec.js";
4
+ import { SolutionJSONContext } from "./deployment.js";
5
+ /**
6
+ * Converts a service definition into the solution JSON format.
7
+ * @param ctx The solution JSON context.
8
+ * @param service The service to convert.
9
+ * @returns The service artifact representation of the service.
10
+ */
11
+ export declare function ServiceToSolutionJSON(ctx: SolutionJSONContext, service: Service): ServiceArtifact;
12
+ /**
13
+ * Converts a service definition into the V3 deployment spec format.
14
+ * @param ctx The solution JSON context.
15
+ * @param service The service to convert.
16
+ * @returns The V3 deployment spec representation of the service.
17
+ */
18
+ export declare function ServiceV3DeploymentToSolutionJson(ctx: SolutionJSONContext, service: Service): V3DeploymentSpec;
19
+ /**
20
+ * Converts a service role definition into the solution JSON format.
21
+ * @param ctx The solution JSON context.
22
+ * @param name The name of the role.
23
+ * @param role The role to convert.
24
+ * @param parent The parent service artifact.
25
+ * @returns The role JSON representation of the role.
26
+ */
27
+ export declare function ServiceRoleToSolutionJSON(ctx: SolutionJSONContext, name: string, role: Role, parent: ServiceArtifact): Maybe<RoleJSON>;
@@ -0,0 +1,199 @@
1
+ import { Maybe, None, Some } from "@kumori/kdsl-lsp/util/maybe.js";
2
+ import { AddDeployment, CtxId, CtxParentId, WithPath, isComponent, isService } from "./deployment.js";
3
+ import { ComponentToSolutionJSON } from "./component.js";
4
+ import { BuiltinV3DeploymentToSolutionJson } from "./builtin.js";
5
+ import { ResourceToSolutionJSON } from "./resource.js";
6
+ import { ReferenceUpdater } from "./utils.js";
7
+ import { ServiceConnectionToSolutionJSON } from "./connector.js";
8
+ /**
9
+ * Converts a service definition into the solution JSON format.
10
+ * @param ctx The solution JSON context.
11
+ * @param service The service to convert.
12
+ * @returns The service artifact representation of the service.
13
+ */
14
+ export function ServiceToSolutionJSON(ctx, service) {
15
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
16
+ const ref = {
17
+ version: [0, 0, 0],
18
+ kind: "service",
19
+ domain: "unknown",
20
+ module: "unknown",
21
+ name: "unknown",
22
+ };
23
+ const mod = ctx.svcs.shared.references.KumoriModules;
24
+ const modifiers = ReferenceUpdater(mod, ctx.nodes.get(service));
25
+ for (const m of modifiers) {
26
+ m(ref);
27
+ }
28
+ const svc = {
29
+ spec: [1, 0],
30
+ ref,
31
+ description: {
32
+ builtin: false,
33
+ config: {
34
+ resilience: 0,
35
+ scale: {
36
+ detail: Object.fromEntries(Object.entries((_a = service.role) !== null && _a !== void 0 ? _a : {})
37
+ .map(([roleName]) => [roleName, { hsize: 1 }]))
38
+ },
39
+ parameter: (_b = service === null || service === void 0 ? void 0 : service.config) !== null && _b !== void 0 ? _b : {},
40
+ resource: Object.fromEntries(Object.entries((_c = service.resource) !== null && _c !== void 0 ? _c : {})
41
+ .map(([k, v]) => [k, ResourceToSolutionJSON(v)])),
42
+ },
43
+ role: {},
44
+ connector: Object.fromEntries(Object.entries((_d = service.connect) !== null && _d !== void 0 ? _d : {})
45
+ .map(([k, v]) => [k, ServiceConnectionToSolutionJSON(ctx, service, v)])),
46
+ srv: {
47
+ client: Object.fromEntries(Object.entries((_f = (_e = service.srv) === null || _e === void 0 ? void 0 : _e.client) !== null && _f !== void 0 ? _f : {})
48
+ .map(([k, v]) => [k, { protocol: v, inherited: false }])),
49
+ server: Object.fromEntries(Object.entries((_h = (_g = service.srv) === null || _g === void 0 ? void 0 : _g.server) !== null && _h !== void 0 ? _h : {}).map(([k, v]) => {
50
+ let value;
51
+ if (typeof v === "string") {
52
+ value = { port: 80, inherited: false, protocol: v, };
53
+ }
54
+ else {
55
+ value = Object.assign(Object.assign({}, v), { inherited: false });
56
+ }
57
+ return [k, value];
58
+ })),
59
+ duplex: Object.fromEntries(Object.entries((_k = (_j = service.srv) === null || _j === void 0 ? void 0 : _j.duplex) !== null && _k !== void 0 ? _k : {}).map(([k, v]) => {
60
+ let value;
61
+ if (typeof v === "string") {
62
+ value = { port: 80, inherited: false, protocol: v, };
63
+ }
64
+ else {
65
+ value = Object.assign(Object.assign({}, v), { inherited: false });
66
+ }
67
+ return [k, value];
68
+ })),
69
+ }
70
+ }
71
+ };
72
+ // NOTE: we call ServiceRoleToSolutionJSON after initializing the service
73
+ // artifact because the call may modify the parent service (svc)
74
+ svc.description.role = Object.fromEntries(Object.entries((_l = service.role) !== null && _l !== void 0 ? _l : {})
75
+ .map(([k, v]) => [k, ServiceRoleToSolutionJSON(ctx, k, v, svc)])
76
+ .filter(([, v]) => Maybe.isSome(v))
77
+ .map(([k, v]) => [k, v.value]));
78
+ return svc;
79
+ }
80
+ /**
81
+ * Converts a service definition into the V3 deployment spec format.
82
+ * @param ctx The solution JSON context.
83
+ * @param service The service to convert.
84
+ * @returns The V3 deployment spec representation of the service.
85
+ */
86
+ export function ServiceV3DeploymentToSolutionJson(ctx, service) {
87
+ var _a, _b, _c, _d, _e, _f, _g;
88
+ return {
89
+ name: CtxId(ctx),
90
+ up: CtxParentId(ctx),
91
+ meta: {},
92
+ config: {
93
+ resilience: 0,
94
+ scale: (_b = (_a = service.config) === null || _a === void 0 ? void 0 : _a.scale) !== null && _b !== void 0 ? _b : { hsize: (_c = service.config) === null || _c === void 0 ? void 0 : _c.scale },
95
+ parameter: (_e = (_d = service.config) === null || _d === void 0 ? void 0 : _d.parameter) !== null && _e !== void 0 ? _e : {},
96
+ resource: Object.fromEntries(Object.entries((_g = (_f = service.config) === null || _f === void 0 ? void 0 : _f.resource) !== null && _g !== void 0 ? _g : {})
97
+ .map(([k, v]) => [k, ResourceToSolutionJSON(v)])),
98
+ },
99
+ artifact: ServiceToSolutionJSON(ctx, service)
100
+ };
101
+ }
102
+ /**
103
+ * Converts a service role definition into the solution JSON format.
104
+ * @param ctx The solution JSON context.
105
+ * @param name The name of the role.
106
+ * @param role The role to convert.
107
+ * @param parent The parent service artifact.
108
+ * @returns The role JSON representation of the role.
109
+ */
110
+ export function ServiceRoleToSolutionJSON(ctx, name, role, parent) {
111
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
112
+ var _p, _q, _r, _s, _t;
113
+ if (isComponent(role.artifact)) {
114
+ return Some({
115
+ name,
116
+ meta: role.meta,
117
+ config: {
118
+ resilience: 0,
119
+ scale: { hsize: 1 },
120
+ parameter: (_a = role.artifact.config) !== null && _a !== void 0 ? _a : {},
121
+ resource: {},
122
+ },
123
+ artifact: ComponentToSolutionJSON(ctx, role.artifact),
124
+ });
125
+ }
126
+ const artifact = role.artifact;
127
+ ctx = WithPath(ctx, name);
128
+ const DeploymentJSON = () => {
129
+ if (isService(artifact)) {
130
+ return ServiceV3DeploymentToSolutionJson(ctx, artifact);
131
+ }
132
+ else {
133
+ return BuiltinV3DeploymentToSolutionJson(ctx, artifact);
134
+ }
135
+ };
136
+ AddDeployment(ctx, DeploymentJSON());
137
+ (_b = (_p = parent.description).srv) !== null && _b !== void 0 ? _b : (_p.srv = {});
138
+ (_c = (_q = parent.description.srv).server) !== null && _c !== void 0 ? _c : (_q.server = {});
139
+ (_d = (_r = parent.description.srv).client) !== null && _d !== void 0 ? _d : (_r.client = {});
140
+ for (const [, cnx] of Object.entries((_e = parent.description.connector) !== null && _e !== void 0 ? _e : {})) {
141
+ // Check for matching client references
142
+ for (const client of cnx.clients) {
143
+ if (client.role !== name) {
144
+ continue;
145
+ }
146
+ const Client = Object.assign({}, client);
147
+ // parent inherits referenced connections
148
+ const inherited = `${client.role}.${client.channel}`;
149
+ const original = ((_g = (_f = artifact === null || artifact === void 0 ? void 0 : artifact.srv) === null || _f === void 0 ? void 0 : _f.client) !== null && _g !== void 0 ? _g : {})[client.channel];
150
+ parent.description.srv.server[inherited] = {
151
+ inherited: true,
152
+ protocol: client.channel == "inbound" ? "http" : original,
153
+ };
154
+ // redirect to inherited connections
155
+ client.role = "self";
156
+ client.channel = inherited;
157
+ // register links to new deployment
158
+ (_h = (_s = ctx.root).links) !== null && _h !== void 0 ? _h : (_s.links = []);
159
+ ctx.root.links.push({
160
+ meta: {},
161
+ s_d: CtxId(ctx),
162
+ s_c: Client.channel,
163
+ t_d: CtxParentId(ctx),
164
+ t_c: inherited,
165
+ });
166
+ }
167
+ // Check for matching server references
168
+ for (const server of cnx.servers) {
169
+ for (const link of server.links) {
170
+ if (link.role === name) {
171
+ const inherited = `${link.role}.${link.channel}`;
172
+ let original = ((_k = (_j = artifact === null || artifact === void 0 ? void 0 : artifact.srv) === null || _j === void 0 ? void 0 : _j.server) !== null && _k !== void 0 ? _k : {})[link.channel];
173
+ // Try duplex channel
174
+ if (original === undefined) {
175
+ original = ((_m = (_l = artifact === null || artifact === void 0 ? void 0 : artifact.srv) === null || _l === void 0 ? void 0 : _l.duplex) !== null && _m !== void 0 ? _m : {})[link.channel];
176
+ }
177
+ parent.description.srv.client[inherited] = {
178
+ inherited: true,
179
+ protocol: typeof original === "string" ? original : original.protocol,
180
+ port: typeof original === "object" ? original.port : undefined
181
+ };
182
+ (_o = (_t = ctx.root).links) !== null && _o !== void 0 ? _o : (_t.links = []);
183
+ ctx.root.links.push({
184
+ meta: {},
185
+ s_d: CtxParentId(ctx),
186
+ s_c: inherited,
187
+ t_d: CtxId(ctx),
188
+ t_c: link.channel
189
+ });
190
+ // redirect to inherited connections
191
+ link.role = "self";
192
+ link.channel = inherited;
193
+ }
194
+ }
195
+ }
196
+ }
197
+ return None;
198
+ }
199
+ //# sourceMappingURL=service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/build/helpers/service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { AstNode } from "langium";
2
+ import { Image, Reference } from "../deployment_spec.js";
3
+ import { KumoriModules } from "@kumori/kdsl-lsp/language/kumori-module.js";
4
+ /**
5
+ * Converts a OCI image string to a structured JSON object.
6
+ *
7
+ * @param {string} image - The OCI image string in the format "docker.io/hashicorp/http-echo:latest".
8
+ * @returns {{tag: string, hub: {name: string}}} An object containing the tag and the hub information.
9
+ * @throws Will throw an error if the input string is not in the expected format.
10
+ *
11
+ * @example
12
+ * const v = ComponentImageToSolutionJSON("docker.io/hashicorp/http-echo:latest")
13
+ * console.log(v) // { tag: "hashicorp/http-echo:latest", hub: { name: "docker.io" }}
14
+ */
15
+ export declare function ComponentImageToSolutionJSON(image: string | Image): Image;
16
+ /**
17
+ * @param KumoriModules - The collection of Kumori modules used to resolve module information.
18
+ * @param node - The AST node for which reference updates are to be generated.
19
+ * @returns An array of updater functions. Each updater takes a {@link Reference} and updates its `domain`, `module`, and/or `name`
20
+ * properties based on the resolved module's URL. Returns an empty array if the node or module cannot be resolved.
21
+ */
22
+ export declare function ReferenceUpdater(KumoriModules: KumoriModules, node: AstNode | undefined): ((ref: Reference) => void)[];
@@ -0,0 +1,55 @@
1
+ import { ParseOCIString } from "@kumori/kdsl-lsp/util/oci.js";
2
+ import { Result } from "@kumori/kdsl-lsp/util/result.js";
3
+ import { AstUtils } from "langium";
4
+ import { basename } from "path";
5
+ /**
6
+ * Converts a OCI image string to a structured JSON object.
7
+ *
8
+ * @param {string} image - The OCI image string in the format "docker.io/hashicorp/http-echo:latest".
9
+ * @returns {{tag: string, hub: {name: string}}} An object containing the tag and the hub information.
10
+ * @throws Will throw an error if the input string is not in the expected format.
11
+ *
12
+ * @example
13
+ * const v = ComponentImageToSolutionJSON("docker.io/hashicorp/http-echo:latest")
14
+ * console.log(v) // { tag: "hashicorp/http-echo:latest", hub: { name: "docker.io" }}
15
+ */
16
+ export function ComponentImageToSolutionJSON(image) {
17
+ if (typeof image === "string") {
18
+ return Result.orElse(Result.map(ParseOCIString(image), (v) => { var _a, _b; return ({ tag: v.tag, hub: { name: v.hub, secret: typeof image === "string" ? "" : (_b = (_a = image.hub) === null || _a === void 0 ? void 0 : _a.secret) !== null && _b !== void 0 ? _b : "" } }); }), err => { throw new Error(err); });
19
+ }
20
+ else {
21
+ return image;
22
+ }
23
+ }
24
+ /**
25
+ * @param KumoriModules - The collection of Kumori modules used to resolve module information.
26
+ * @param node - The AST node for which reference updates are to be generated.
27
+ * @returns An array of updater functions. Each updater takes a {@link Reference} and updates its `domain`, `module`, and/or `name`
28
+ * properties based on the resolved module's URL. Returns an empty array if the node or module cannot be resolved.
29
+ */
30
+ export function ReferenceUpdater(KumoriModules, node) {
31
+ if (!node) {
32
+ return [];
33
+ }
34
+ const uri = AstUtils.getDocument(node).uri;
35
+ const mod = KumoriModules.getModule(uri);
36
+ if (Result.isErr(mod)) {
37
+ return [];
38
+ }
39
+ const url = Result.tryCatch(() => new URL(`file://${mod.value.Manifest.module}`));
40
+ if (Result.isErr(url)) {
41
+ return [];
42
+ }
43
+ const updates = [];
44
+ if (url.value.hostname.length) {
45
+ updates.push(ref => ref.domain = url.value.hostname);
46
+ }
47
+ if (url.value.pathname.length) {
48
+ updates.push(ref => {
49
+ ref.module = url.value.pathname.replace(/^\//, "");
50
+ ref.name = basename(ref.module);
51
+ });
52
+ }
53
+ return updates;
54
+ }
55
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/build/helpers/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,iCAAiC,CAAA;AACxD,OAAO,EAAW,QAAQ,EAAE,MAAM,SAAS,CAAA;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAA;AAI/B;;;;;;;;;;GAUG;AACH,MAAM,UAAU,4BAA4B,CAAC,KAAqB;IAC9D,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,MAAM,CAAC,MAAM,CAChB,MAAM,CAAC,GAAG,CACN,cAAc,CAAC,KAAK,CAAC,EACrB,CAAC,CAA+B,EAAE,EAAE,eAAC,OAAA,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAA,MAAC,KAAe,CAAC,GAAG,0CAAE,MAAM,mCAAI,EAAE,EAAC,EAAE,CAAC,CAAA,EAAA,CAC1J,EACD,GAAG,CAAC,EAAE,GAAG,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,CAAA,CAAC,CAAC,CAClC,CAAA;IACL,CAAC;SAAM,CAAC;QACJ,OAAO,KAAK,CAAA;IAChB,CAAC;AACL,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,aAA4B,EAAE,IAAyB;IACpF,IAAI,CAAC,IAAI,EAAE,CAAC;QAAC,OAAO,EAAE,CAAA;IAAC,CAAC;IAExB,MAAM,GAAG,GAAG,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,GAAG,CAAA;IAC1C,MAAM,GAAG,GAAG,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;IACxC,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QAAC,OAAO,EAAE,CAAA;IAAC,CAAC;IAEpC,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,GAAG,CAAC,UAAU,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACjF,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QAAC,OAAO,EAAE,CAAA;IAAC,CAAC;IAEpC,MAAM,OAAO,GAAiC,EAAE,CAAA;IAChD,IAAI,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QAC5B,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;IACxD,CAAC;IAED,IAAI,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QAC5B,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;YACf,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;YAClD,GAAG,CAAC,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QACnC,CAAC,CAAC,CAAA;IACN,CAAC;IAED,OAAO,OAAO,CAAA;AAClB,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { KumoriServices } from "@kumori/kdsl-lsp/language/kumori.js";
2
+ import { Command } from "@commander-js/extra-typings";
3
+ import { Result } from "@kumori/kdsl-lsp/util/result.js";
4
+ import { CommanderActionParams } from "../util.js";
5
+ import { ILogLayer } from "loglayer";
6
+ export declare function Register(cmd: Command, log: ILogLayer): Command<[string, string], {}, {}>;
7
+ type Exec = CommanderActionParams<ReturnType<typeof Register>>;
8
+ export declare function Action(log: ILogLayer): Exec;
9
+ /**
10
+ * Build implementation that returns Result instead of exiting.
11
+ * This can be used by both CLI and library.
12
+ */
13
+ export declare function BuildImpl(log: ILogLayer, svcs: KumoriServices, pkgStr: string, target: string): Promise<Result<void, string[]>>;
14
+ declare const _default: {
15
+ Register: typeof Register;
16
+ };
17
+ export default _default;
@@ -0,0 +1,139 @@
1
+ import { DeploymentArtifact, isDeploymentArtifact } from "@kumori/kdsl-lsp/language/generated/ast.js";
2
+ import { createKumoriServices } from "@kumori/kdsl-lsp/language/kumori.js";
3
+ import { URI, UriUtils } from "langium";
4
+ import { NodeFileSystem } from "langium/node";
5
+ import { Result, Err, Ok } from "@kumori/kdsl-lsp/util/result.js";
6
+ import { GenerateSolutionResult } from "./solution.js";
7
+ import { ModuleContext } from "@kumori/kdsl-lsp/module/context.js";
8
+ import { ListDependencies } from "@kumori/kdsl-lsp/module/dependency/list.js";
9
+ import assert from "assert";
10
+ import { LocateDependency } from "@kumori/kdsl-lsp/module/dependency/locate.js";
11
+ import { Maybe } from "@kumori/kdsl-lsp/util/maybe.js";
12
+ import { DependencyId } from "@kumori/kdsl-lsp/module/dependency/id.js";
13
+ import path from "node:path";
14
+ import { Check } from "../check/main.js";
15
+ import { promises as nodefs } from "node:fs";
16
+ import { RegistryManager } from "@kumori/kdsl-lsp/module/registry/manager.js";
17
+ export function Register(cmd, log) {
18
+ const c = cmd.command('build')
19
+ .argument('[package]', `package containing the target deployment, defaults to current directory`, '.')
20
+ .argument('[directory]', `directory containing a Kumori module, defaults to current directory`, '.')
21
+ .description(Description)
22
+ .summary(Summary)
23
+ .action(Action(log));
24
+ return c;
25
+ }
26
+ const Summary = `produces deployable artifact specifications`;
27
+ const Description = `
28
+ Generates a solution.json file for a specified Kumori package containing deployment definitions.
29
+ The command requires the path to the package as an argument, and optionally accepts a directory
30
+ path where the Kumori module is located. If the directory is not provided, the current working
31
+ directory is used by default.
32
+
33
+ Some usage examples:
34
+ kdsl build
35
+ kdsl build my-package
36
+ kdsl build my-package path/to/module
37
+
38
+ The generated solution.json file will be created in the package directory, containing all necessary
39
+ information for deploying the resources defined in the package's deployment artifacts.
40
+ `.trim();
41
+ export function Action(log) {
42
+ return async (pkgStr = ".", target = ".") => {
43
+ const manager = new RegistryManager();
44
+ await manager.ensureIndexes();
45
+ const svcs = createKumoriServices(NodeFileSystem).Kumori;
46
+ const result = await BuildImpl(log, svcs, pkgStr, target);
47
+ if (Result.isErr(result)) {
48
+ // Errors already logged by BuildImpl
49
+ process.exit(1);
50
+ }
51
+ };
52
+ }
53
+ /**
54
+ * Build implementation that returns Result instead of exiting.
55
+ * This can be used by both CLI and library.
56
+ */
57
+ export async function BuildImpl(log, svcs, pkgStr, target) {
58
+ const fs = svcs.shared.workspace.FileSystemProvider;
59
+ const ctx = await ModuleContext(fs, URI.file(path.resolve(target)));
60
+ if (Result.isErr(ctx)) {
61
+ const err = `error: ${ctx.err}`;
62
+ log.error(err);
63
+ return Err([err]);
64
+ }
65
+ const locctx = Object.assign({ FS: fs }, ctx.value);
66
+ const missing = await MissingDependencies(locctx);
67
+ if (missing.size > 0) {
68
+ const errs = [`error: missing modules`];
69
+ log.error(errs[0]);
70
+ for (const mod of missing) {
71
+ const msg = `+ ${mod}`;
72
+ log.error(msg);
73
+ errs.push(msg);
74
+ }
75
+ const finalMsg = `unable to build solution.json`;
76
+ log.error(finalMsg);
77
+ errs.push(finalMsg);
78
+ return Err(errs);
79
+ }
80
+ const checkResult = await Check(log, svcs, ctx.value);
81
+ if (Result.isErr(checkResult)) {
82
+ return checkResult;
83
+ }
84
+ const pkgUri = UriUtils.joinPath(ctx.value.Current.Root, pkgStr);
85
+ const pkg = svcs.references.KumoriPackages.GetPackage(pkgUri);
86
+ if (Result.isErr(pkg)) {
87
+ const err = `error: failed to retrieve package: ${pkgUri.toString()}`;
88
+ log.error(err);
89
+ return Err([err]);
90
+ }
91
+ const pkgUris = new Set(pkg.value.docs.map(p => p.uri.toString()));
92
+ const deployments = svcs.shared.workspace.IndexManager
93
+ .allElements(DeploymentArtifact.$type, pkgUris)
94
+ .toArray();
95
+ if (deployments.length < 1) {
96
+ const err = `error: no deployment defined in ${pkgUri.toString()}`;
97
+ log.error(err);
98
+ return Err([err]);
99
+ }
100
+ if (deployments.length > 1) {
101
+ const err = `error: too many deployments in ${pkgUri.toString()}`;
102
+ log.error(err);
103
+ return Err([err]);
104
+ }
105
+ const description = deployments[0];
106
+ const deployment = description.node;
107
+ if (!isDeploymentArtifact(deployment)) {
108
+ const err = `error: invalid target doc=${description.documentUri} location=${description.path}`;
109
+ log.error(err);
110
+ return Err([err]);
111
+ }
112
+ const solutionResult = GenerateSolutionResult(log, svcs, deployment);
113
+ if (Result.isErr(solutionResult)) {
114
+ return solutionResult;
115
+ }
116
+ const solutionPath = path.join(pkgUri.fsPath, 'solution.json');
117
+ await nodefs.writeFile(solutionPath, solutionResult.value, 'utf-8');
118
+ log.info(`solution.json written to ${solutionPath}`);
119
+ return Ok(undefined);
120
+ }
121
+ async function MissingDependencies(ctx, missing = new Set()) {
122
+ const deps = ListDependencies(ctx.Current);
123
+ for (const [, dep] of deps.entriesGroupedByKey()) {
124
+ assert(dep.length > 0);
125
+ const { target, version } = dep[0];
126
+ const descriptor = await LocateDependency(ctx, target, version);
127
+ if (Maybe.isNone(descriptor)) {
128
+ missing.add(DependencyId(target, version));
129
+ continue;
130
+ }
131
+ const mod = await ModuleContext.Move(ctx, ctx.FS, descriptor.value.Root);
132
+ assert(Result.isOk(mod));
133
+ const subctx = Object.assign(Object.assign({}, ctx), mod.value);
134
+ await MissingDependencies(subctx, missing);
135
+ }
136
+ return missing;
137
+ }
138
+ export default { Register };
139
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/build/main.ts"],"names":[],"mappings":"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"}