@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 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":""}
package/dist/main.d.ts ADDED
@@ -0,0 +1 @@
1
+ export declare function main(): Promise<void>;
package/dist/main.js ADDED
@@ -0,0 +1,35 @@
1
+ import { Command } from "@commander-js/extra-typings";
2
+ import build from "./build/main.js";
3
+ import check from "./check/main.js";
4
+ import clean from "./clean/main.js";
5
+ import help from "./help/main.js";
6
+ import mod from "./mod/main.js";
7
+ import version from "./version.js";
8
+ import registry from "./registry/main.js";
9
+ import index from "./index/main.js";
10
+ import { LogLayer } from "loglayer";
11
+ import { TsLogTransport } from "@loglayer/transport-tslog";
12
+ import { Logger } from "tslog";
13
+ export async function main() {
14
+ const logger = new Logger({
15
+ type: "pretty",
16
+ hideLogPositionForProduction: true,
17
+ overwrite: {
18
+ transportFormatted: (markup, args, errs) => console.error(markup, ...args, ...errs),
19
+ },
20
+ });
21
+ const log = new LogLayer({ transport: new TsLogTransport({ logger }) });
22
+ const program = new Command("kdsl").version(version);
23
+ build.Register(program, log);
24
+ check.Register(program, log);
25
+ clean.Register(program, log);
26
+ help.Register(program);
27
+ mod.Register(program, log);
28
+ registry.Register(program, log);
29
+ index.Register(program, log);
30
+ await new Promise((resolve) => {
31
+ program.hook("postAction", () => resolve());
32
+ program.parse();
33
+ });
34
+ }
35
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAA;AACrD,OAAO,KAAK,MAAM,iBAAiB,CAAA;AACnC,OAAO,KAAK,MAAM,iBAAiB,CAAA;AACnC,OAAO,KAAK,MAAM,iBAAiB,CAAA;AACnC,OAAO,IAAI,MAAM,gBAAgB,CAAA;AACjC,OAAO,GAAG,MAAM,eAAe,CAAA;AAC/B,OAAO,OAAO,MAAM,cAAc,CAAA;AAClC,OAAO,QAAQ,MAAM,oBAAoB,CAAA;AACzC,OAAO,KAAK,MAAM,iBAAiB,CAAA;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AACnC,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AAE9B,MAAM,CAAC,KAAK,UAAU,IAAI;IACxB,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC;QACxB,IAAI,EAAE,QAAQ;QACd,4BAA4B,EAAE,IAAI;QAClC,SAAS,EAAE;YACT,kBAAkB,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CACzC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC;SAC1C;KACF,CAAC,CAAA;IACF,MAAM,GAAG,GAAG,IAAI,QAAQ,CAAC,EAAE,SAAS,EAAE,IAAI,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAA;IAEvE,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IAEpD,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;IAC5B,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;IAC5B,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;IAC5B,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;IACtB,GAAG,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;IAC1B,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;IAC/B,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;IAE5B,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;QAClC,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAA;QAC3C,OAAO,CAAC,KAAK,EAAE,CAAA;IACjB,CAAC,CAAC,CAAA;AACJ,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { Command } from "@commander-js/extra-typings";
2
+ import { CommanderActionParams } from "../../util.js";
3
+ export declare const Description: string;
4
+ declare const _default: {
5
+ Register: typeof Register;
6
+ };
7
+ export default _default;
8
+ export declare function Register(cmd: Command): Command<[], {}, {}>;
9
+ export type Exec = CommanderActionParams<ReturnType<typeof Register>>;
10
+ export type Params = Parameters<Exec>;
11
+ export declare function Action(): Exec;
@@ -0,0 +1,33 @@
1
+ import { createKumoriServices } from "@kumori/kdsl-lsp/language/kumori.js";
2
+ import { ModuleContext } from "@kumori/kdsl-lsp/module/context.js";
3
+ import { CalculateChecksum } from "@kumori/kdsl-lsp/module/integrity/checksum.js";
4
+ import { Result } from "@kumori/kdsl-lsp/util/result.js";
5
+ import { URI } from "langium";
6
+ import { NodeFileSystem } from "langium/node";
7
+ const Summary = `generate checksum for a module`;
8
+ export const Description = `
9
+ Generates and outputs the sha-256 checksum for the current given module.
10
+ `.trim();
11
+ export default { Register };
12
+ export function Register(cmd) {
13
+ const c = cmd
14
+ .command("checksum")
15
+ .summary(Summary)
16
+ .description(Description)
17
+ .helpOption(true)
18
+ .action(Action());
19
+ return c;
20
+ }
21
+ export function Action() {
22
+ return async () => {
23
+ const svcs = createKumoriServices(NodeFileSystem).Kumori;
24
+ const fs = svcs.shared.workspace.FileSystemProvider;
25
+ const ctx = await ModuleContext(fs, URI.file(process.cwd()));
26
+ if (Result.isErr(ctx)) {
27
+ throw new Error(ctx.err);
28
+ }
29
+ const checksum = await CalculateChecksum(ctx.value.Current.Root.fsPath);
30
+ console.log(checksum);
31
+ };
32
+ }
33
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../../../src/mod/checksum/main.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAA;AAC1E,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAA;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAA;AACjF,OAAO,EAAE,MAAM,EAAE,MAAM,iCAAiC,CAAA;AAExD,OAAO,EAAE,GAAG,EAAE,MAAM,SAAS,CAAA;AAC7B,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAG7C,MAAM,OAAO,GAAG,gCAAgC,CAAA;AAChD,MAAM,CAAC,MAAM,WAAW,GAAG;;CAE1B,CAAC,IAAI,EAAE,CAAA;AAER,eAAe,EAAE,QAAQ,EAAE,CAAA;AAC3B,MAAM,UAAU,QAAQ,CAAC,GAAY;IACnC,MAAM,CAAC,GAAG,GAAG;SACV,OAAO,CAAC,UAAU,CAAC;SACnB,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,WAAW,CAAC;SACxB,UAAU,CAAC,IAAI,CAAC;SAChB,MAAM,CAAC,MAAM,EAAE,CAAC,CAAA;IACnB,OAAO,CAAC,CAAA;AACV,CAAC;AAID,MAAM,UAAU,MAAM;IACpB,OAAO,KAAK,IAAI,EAAE;QAChB,MAAM,IAAI,GAAG,oBAAoB,CAAC,cAAc,CAAC,CAAC,MAAM,CAAA;QACxD,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,kBAAkB,CAAA;QAEnD,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;QAC5D,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAC1B,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QACvE,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IACvB,CAAC,CAAA;AACH,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { Command } from "@commander-js/extra-typings";
2
+ import { URI } from "langium";
3
+ import { ILogLayer } from "loglayer";
4
+ import { CommanderActionParams } from "../../util.js";
5
+ export declare const Description: string;
6
+ declare const _default: {
7
+ Register: typeof Register;
8
+ };
9
+ export default _default;
10
+ export declare function Register(cmd: Command, log: ILogLayer): Command<[string], {
11
+ alias?: string | undefined;
12
+ headers?: string | undefined;
13
+ remove?: true | undefined;
14
+ download?: true | undefined;
15
+ }, {}>;
16
+ export type Exec = CommanderActionParams<ReturnType<typeof Register>>;
17
+ export declare function Action(log: ILogLayer): Exec;
18
+ export type Params = Parameters<Exec>;
19
+ export declare const Dependency: (log: ILogLayer, cwd: URI, module: Params[0], options: Params[1]) => Promise<void>;
@@ -0,0 +1,156 @@
1
+ import { URI, UriUtils } from "langium";
2
+ import { createKumoriServices } from "@kumori/kdsl-lsp/language/kumori.js";
3
+ import { NodeFileSystem } from "langium/node";
4
+ import { Result } from "@kumori/kdsl-lsp/util/result.js";
5
+ import { ModuleContext } from "@kumori/kdsl-lsp/module/context.js";
6
+ import { writeFile } from "fs/promises";
7
+ import { MOD_FILE } from "@kumori/kdsl-lsp/module/locator.js";
8
+ import { ParseQuery } from "@kumori/kdsl-lsp/module/query.js";
9
+ import { Download } from "../download/main.js";
10
+ import { RegistryManager } from "@kumori/kdsl-lsp/module/registry/manager.js";
11
+ const Summary = `Add, update, or remove a dependency from the module declaration`;
12
+ export const Description = `
13
+ Manage dependencies within the current module. It can add, update
14
+ or remove dependencies. Optionally, it can attempt to download the dependency after adding it.
15
+ Dependencies should resolve to a git repository.
16
+
17
+ To add a dependency:
18
+ kdsl mod dep github.com/org/repo@v1.0.0
19
+
20
+ To add a dependency with an alias:
21
+ kdsl mod dep github.com/org/repo@v1.0.0 --alias mydep
22
+
23
+ To update a dependency to a new version:
24
+ kdsl mod dep github.com/org/repo@v1.2.0
25
+
26
+ To remove a dependency:
27
+ kdsl mod dep github.com/org/repo --remove
28
+
29
+ To add a dependency and download it immediately:
30
+ kdsl mod dep github.com/org/repo@v1.0.0 --download
31
+ `.trim();
32
+ export default { Register };
33
+ export function Register(cmd, log) {
34
+ const c = cmd
35
+ .command("dependency")
36
+ .alias("dep")
37
+ .argument("<module>", "Module URL with @<tag> (e.g. https://github.com/org/repo@v1.2.3)")
38
+ .option("--alias <alias>", "Alias for the dependency")
39
+ .option("--headers <module>", "Specify a separate location for the headers module")
40
+ .option("--remove", "Remove the dependency")
41
+ .option("--download", "Download the dependency after adding it")
42
+ .summary(Summary)
43
+ .description(Description)
44
+ .helpOption(true)
45
+ .showHelpAfterError(true)
46
+ .action(Action(log));
47
+ return c;
48
+ }
49
+ export function Action(log) {
50
+ return async (module, options) => {
51
+ const manager = new RegistryManager();
52
+ await manager.ensureIndexes();
53
+ try {
54
+ await Dependency(log, URI.file(process.cwd()), module, options);
55
+ }
56
+ catch (err) {
57
+ log.error(`Failed to manage dependency: ${err}`);
58
+ throw err;
59
+ }
60
+ };
61
+ }
62
+ export const Dependency = async (log, cwd, module, options) => {
63
+ const svcs = createKumoriServices(NodeFileSystem).Kumori;
64
+ const fs = svcs.shared.workspace.FileSystemProvider;
65
+ const ctx = await ModuleContext(fs, cwd);
66
+ if (Result.isErr(ctx)) {
67
+ throw new Error(ctx.err);
68
+ }
69
+ const manifest = ctx.value.Current.Manifest;
70
+ // Parse the query for the given module
71
+ const moduleQuery = ParseQuery(module);
72
+ if (Result.isErr(moduleQuery)) {
73
+ throw new Error(`invalid query '${module}': invalid format`);
74
+ }
75
+ // Parse the query for the headers module, if provided
76
+ let headersQuery = null;
77
+ if (options.headers) {
78
+ headersQuery = ParseQuery(options.headers);
79
+ if (Result.isErr(headersQuery)) {
80
+ throw new Error(`invalid query '${options.headers}': invalid format`);
81
+ }
82
+ }
83
+ const headers = headersQuery ? headersQuery.value : null;
84
+ // Set the destination URL and remove trailing slash from Location if present
85
+ const url = moduleQuery.value;
86
+ if (url.Location.endsWith("/")) {
87
+ url.Location = url.Location.replace(/\/+$/, "");
88
+ }
89
+ // Options shortcuts
90
+ const alias = options.alias;
91
+ const remove = options.remove;
92
+ if (remove) {
93
+ // Find the dependency in the module requires list and remove it
94
+ const idx = manifest.requires.findIndex((dep) => dep.target === url.Location && dep.version === url.Version);
95
+ if (idx === -1) {
96
+ throw new Error(`Dependency ${url} not found`);
97
+ }
98
+ manifest.requires.splice(idx, 1);
99
+ await writeFile(UriUtils.joinPath(ctx.value.Current.Root, MOD_FILE).fsPath, JSON.stringify(manifest, undefined, 4));
100
+ log.info(`Removed dependency ${url.toString()}`);
101
+ return;
102
+ }
103
+ // Check for duplicate aliases in dependencies
104
+ if (alias &&
105
+ manifest.requires.some((dep) => dep.alias === alias && dep.target !== url.Location)) {
106
+ throw new Error(`Alias '${alias}' is already used by another dependency`);
107
+ }
108
+ const dep = manifest.requires.find((dep) => dep.target === url.Location);
109
+ if (dep) {
110
+ if (alias)
111
+ dep.alias = alias;
112
+ else
113
+ delete dep.alias;
114
+ if (headers) {
115
+ dep.headers = {
116
+ target: headers.Location,
117
+ version: headers.Version,
118
+ };
119
+ }
120
+ await writeFile(UriUtils.joinPath(ctx.value.Current.Root, MOD_FILE).fsPath, JSON.stringify(manifest, undefined, 4));
121
+ if (options.download) {
122
+ const dl = await Download(log, svcs, cwd.fsPath, [], { quiet: true });
123
+ if (Result.isErr(dl)) {
124
+ throw new Error(`Failed to download dependency: ${dl.err.join(", ")}`);
125
+ }
126
+ }
127
+ log.info(`Updated dependency ${url.Location} to version ${url.Version}` +
128
+ (alias ? ` (alias: ${alias})` : "") +
129
+ (headers ? ` (headers: ${headers})` : ""));
130
+ }
131
+ else {
132
+ // Not found? Then build a new dependency object and add it to the manifest
133
+ const version = url.Version;
134
+ const depObj = Object.assign(Object.assign({ target: url.Location, version }, (alias ? { alias } : {})), (headers
135
+ ? {
136
+ headers: {
137
+ target: headers.Location,
138
+ version: headers.Version,
139
+ },
140
+ }
141
+ : {}));
142
+ manifest.requires.push(depObj);
143
+ await writeFile(UriUtils.joinPath(ctx.value.Current.Root, MOD_FILE).fsPath, JSON.stringify(manifest, undefined, 4));
144
+ if (options.download) {
145
+ const check = await Download(log, svcs, cwd.fsPath, [], { quiet: true });
146
+ if (Result.isErr(check)) {
147
+ throw new Error(`Failed to download dependency: ${check.err.join(", ")}`);
148
+ }
149
+ }
150
+ log.info(`Added dependency ${url.toString()}` +
151
+ (alias ? ` (alias: ${alias})` : "") +
152
+ (headers ? ` (headers: ${headers})` : "") +
153
+ ` to module manifest`);
154
+ }
155
+ };
156
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../../../src/mod/dependency/main.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ import { DownloadContext } from "./main.js";
2
+ import { Maybe } from "@kumori/kdsl-lsp/util/maybe.js";
3
+ import { Result } from "@kumori/kdsl-lsp/util/result.js";
4
+ import { RemoteFetcherFactory } from "@kumori/kdsl-lsp/module/remote/factory.js";
5
+ import { SemVer } from "@kumori/kdsl-lsp/util/semver.js";
6
+ /**
7
+ * DownloadStatus = Result<Ok, Err> where:
8
+ *
9
+ * Ok = Maybe<string> where Some(string) represents it was downloaded, and None
10
+ * represents it was skipped.
11
+ *
12
+ * Err = string that describes the download error.
13
+ */
14
+ export type DownloadStatus = Result<Maybe<string>, string> & {
15
+ required: boolean;
16
+ };
17
+ /**
18
+ * Downloads the dependencies specified in the current module manifest
19
+ * @param ctx Download context
20
+ * @returns
21
+ */
22
+ export declare function DownloadDependencies(ctx: DownloadContext): Promise<Map<string, DownloadStatus>>;
23
+ /**
24
+ * Given a list of modules, download them and add them as dependencies to the current module
25
+ * @param ctx Download context
26
+ * @param queries List of modules
27
+ * @returns
28
+ */
29
+ export declare function DownloadQueries(ctx: DownloadContext, queries: string[]): Promise<Map<string, DownloadStatus>>;
30
+ /**
31
+ * Downloads all modules specified in the manifest by resolving their dependencies recursively.
32
+ *
33
+ * Iterates through the dependencies listed in the current context, downloading each module and its dependencies.
34
+ * Updates the download status map to mark modules as required if any dependency is declared without an interface.
35
+ *
36
+ * @param ctx The download context containing the current manifest and configuration.
37
+ * @param status A map tracking the download status of each module.
38
+ * @returns A promise that resolves when all dependencies have been processed and downloaded.
39
+ */
40
+ export declare function DownloadFromManifest(ctx: DownloadContext, status: Map<string, DownloadStatus>): Promise<void>;
41
+ export declare function DownloadModuleRecursive(ctx: DownloadContext, target: string, version: string, status: Map<string, DownloadStatus>): Promise<void>;
42
+ export declare function DownloadModule(ctx: DownloadContext, target: string, version: string): Promise<Result<Maybe<string>, string>>;
43
+ /**
44
+ * Downloads a module into a directory
45
+ * @param ctx
46
+ * @param target Module
47
+ * @param version Module version
48
+ * @param dir Target directory
49
+ * @returns Result
50
+ */
51
+ export declare function DownloadModuleToDir(ctx: {
52
+ Remotes: RemoteFetcherFactory;
53
+ }, target: string, version: string, dir: string): Promise<Result<SemVer, string>>;
@@ -0,0 +1,235 @@
1
+ var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) {
2
+ if (value !== null && value !== void 0) {
3
+ if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
4
+ var dispose, inner;
5
+ if (async) {
6
+ if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
7
+ dispose = value[Symbol.asyncDispose];
8
+ }
9
+ if (dispose === void 0) {
10
+ if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
11
+ dispose = value[Symbol.dispose];
12
+ if (async) inner = dispose;
13
+ }
14
+ if (typeof dispose !== "function") throw new TypeError("Object not disposable.");
15
+ if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };
16
+ env.stack.push({ value: value, dispose: dispose, async: async });
17
+ }
18
+ else if (async) {
19
+ env.stack.push({ async: true });
20
+ }
21
+ return value;
22
+ };
23
+ var __disposeResources = (this && this.__disposeResources) || (function (SuppressedError) {
24
+ return function (env) {
25
+ function fail(e) {
26
+ env.error = env.hasError ? new SuppressedError(e, env.error, "An error was suppressed during disposal.") : e;
27
+ env.hasError = true;
28
+ }
29
+ var r, s = 0;
30
+ function next() {
31
+ while (r = env.stack.pop()) {
32
+ try {
33
+ if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);
34
+ if (r.dispose) {
35
+ var result = r.dispose.call(r.value);
36
+ if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });
37
+ }
38
+ else s |= 1;
39
+ }
40
+ catch (e) {
41
+ fail(e);
42
+ }
43
+ }
44
+ if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();
45
+ if (env.hasError) throw env.error;
46
+ }
47
+ return next();
48
+ };
49
+ })(typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
50
+ var e = new Error(message);
51
+ return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
52
+ });
53
+ import { ParseQuery } from "@kumori/kdsl-lsp/module/query.js";
54
+ import { Maybe, None, Some } from "@kumori/kdsl-lsp/util/maybe.js";
55
+ import { Err, Ok, Result } from "@kumori/kdsl-lsp/util/result.js";
56
+ import { Version } from "@kumori/kdsl-lsp/module/version.js";
57
+ import { ListDependencies } from "@kumori/kdsl-lsp/module/dependency/list.js";
58
+ import assert from "assert";
59
+ import { LocateDependency } from "@kumori/kdsl-lsp/module/dependency/locate.js";
60
+ import { ModuleContext } from "@kumori/kdsl-lsp/module/context.js";
61
+ import { MkdirTemp } from "@kumori/kdsl-lsp/util/tmp.js";
62
+ import { ValidateChecksum } from "@kumori/kdsl-lsp/module/integrity/validate.js";
63
+ import { URI, UriUtils } from "langium";
64
+ import { mkdir, rename, rm } from "fs/promises";
65
+ import { ForURL, } from "@kumori/kdsl-lsp/module/remote/factory.js";
66
+ import { SemVer } from "@kumori/kdsl-lsp/util/semver.js";
67
+ import { URL } from "@kumori/kdsl-lsp/util/url.js";
68
+ import { DependencyId } from "@kumori/kdsl-lsp/module/dependency/id.js";
69
+ /**
70
+ * Downloads the dependencies specified in the current module manifest
71
+ * @param ctx Download context
72
+ * @returns
73
+ */
74
+ export async function DownloadDependencies(ctx) {
75
+ const result = new Map();
76
+ await DownloadFromManifest(ctx, result);
77
+ return result;
78
+ }
79
+ /**
80
+ * Given a list of modules, download them and add them as dependencies to the current module
81
+ * @param ctx Download context
82
+ * @param queries List of modules
83
+ * @returns
84
+ */
85
+ export async function DownloadQueries(ctx, queries) {
86
+ const result = new Map();
87
+ console.log(queries);
88
+ for (const query of queries) {
89
+ const q = ParseQuery(query);
90
+ if (Maybe.isNone(q)) {
91
+ const msg = `invalid download query '${query}': failed to parse`;
92
+ result.set(query, Object.assign(Object.assign({}, Err(msg)), { required: true }));
93
+ continue;
94
+ }
95
+ const v = Version(q.value.Version);
96
+ if (Maybe.isNone(v)) {
97
+ const msg = `invalid download query '${query}': invalid version specifier '${q.value.Version}': failed to parse`;
98
+ result.set(query, Object.assign(Object.assign({}, Err(msg)), { required: true }));
99
+ continue;
100
+ }
101
+ if (!Version.isSemVer(v.value)) {
102
+ // TODO: Try to find a matching version in ctx.Current.Manifest
103
+ const msg = `invalid download query '${query}': invalid version specifier '${q.value.Version}': invalid semver`;
104
+ result.set(query, Object.assign(Object.assign({}, Err(msg)), { required: true }));
105
+ continue;
106
+ }
107
+ const target = `${q.value.Scheme}://${q.value.Location}`;
108
+ const version = q.value.Version;
109
+ await DownloadModuleRecursive(ctx, target, version, result);
110
+ }
111
+ return result;
112
+ }
113
+ /**
114
+ * Downloads all modules specified in the manifest by resolving their dependencies recursively.
115
+ *
116
+ * Iterates through the dependencies listed in the current context, downloading each module and its dependencies.
117
+ * Updates the download status map to mark modules as required if any dependency is declared without an interface.
118
+ *
119
+ * @param ctx The download context containing the current manifest and configuration.
120
+ * @param status A map tracking the download status of each module.
121
+ * @returns A promise that resolves when all dependencies have been processed and downloaded.
122
+ */
123
+ export async function DownloadFromManifest(ctx, status) {
124
+ var _a;
125
+ const deps = ListDependencies(ctx.Current);
126
+ // Iterate through each dependency
127
+ for (const dep of deps.keys()) {
128
+ const listings = deps.get(dep);
129
+ if (listings.length < 1) {
130
+ continue;
131
+ }
132
+ const { target, version } = listings[0]; // all listings will have the same {target, version}
133
+ await DownloadModuleRecursive(ctx, target, version, status);
134
+ // a dependency is required if it is declared without an interface
135
+ const required = listings.reduce((prev, curr) => prev || curr.interface === undefined, false);
136
+ const key = DependencyId(target, version);
137
+ assert(status.has(key));
138
+ (_a = status.get(key)).required || (_a.required = required); // use ||= to accumulate results from other dependencies
139
+ }
140
+ }
141
+ export async function DownloadModuleRecursive(ctx, target, version, status) {
142
+ const dependencyId = DependencyId(target, version);
143
+ if (status.has(dependencyId)) {
144
+ return;
145
+ }
146
+ const result = await DownloadModule(ctx, target, version);
147
+ status.set(dependencyId, Object.assign(Object.assign({}, result), { required: false }));
148
+ if (Result.isErr(result)) {
149
+ return;
150
+ }
151
+ const existing = await LocateDependency(ctx, target, version);
152
+ assert(Maybe.isSome(existing));
153
+ const location = await ModuleContext.Move(ctx, ctx.FS, existing.value.Root);
154
+ assert(Result.isOk(location));
155
+ ctx = Object.assign(Object.assign({}, ctx), location.value);
156
+ await DownloadFromManifest(ctx, status); // download all dependencies in its manifest
157
+ }
158
+ export async function DownloadModule(ctx, target, version) {
159
+ const env_1 = { stack: [], error: void 0, hasError: false };
160
+ try {
161
+ const existing = await LocateDependency(ctx, target, version);
162
+ if (Result.isOk(existing)) {
163
+ return Ok(None);
164
+ }
165
+ // Copy the remote module into a temp dir
166
+ const tmp = __addDisposableResource(env_1, await MkdirTemp(), true);
167
+ const dlResult = await DownloadModuleToDir(ctx, target, version, tmp.Path);
168
+ if (Result.isErr(dlResult)) {
169
+ return Err(`failed to fetch ${target}@${version}: ${dlResult.err}`);
170
+ }
171
+ // Validate the checksum
172
+ const validation = await ValidateChecksum(ctx.SumDB, URI.file(tmp.Path), ctx, target, dlResult.value);
173
+ if (Result.isErr(validation)) {
174
+ return validation;
175
+ }
176
+ // Move into the module cache
177
+ const modname = `${target}@${version}`;
178
+ const ModLocation = UriUtils.joinPath(ctx.Locations.Cache(), modname);
179
+ await mkdir(ModLocation.fsPath, { recursive: true });
180
+ await rm(ModLocation.fsPath, { recursive: true, force: true });
181
+ await rename(tmp.Path, ModLocation.fsPath);
182
+ return Ok(Some(modname));
183
+ }
184
+ catch (e_1) {
185
+ env_1.error = e_1;
186
+ env_1.hasError = true;
187
+ }
188
+ finally {
189
+ const result_1 = __disposeResources(env_1);
190
+ if (result_1)
191
+ await result_1;
192
+ }
193
+ }
194
+ /**
195
+ * Downloads a module into a directory
196
+ * @param ctx
197
+ * @param target Module
198
+ * @param version Module version
199
+ * @param dir Target directory
200
+ * @returns Result
201
+ */
202
+ export async function DownloadModuleToDir(ctx, target, version, dir) {
203
+ const modname = `${target}@${version}`;
204
+ const q = ParseQuery(modname);
205
+ if (Maybe.isNone(q)) {
206
+ return Err(`failed to resolve ${modname}: invalid download query`);
207
+ }
208
+ const ver = SemVer(q.value.Version);
209
+ const location = new URL(`${q.value.Scheme}://${q.value.Location}`);
210
+ const remote = ForURL(ctx.Remotes, location);
211
+ if (Result.isErr(remote)) {
212
+ return Err(`failed to resolve ${modname}': invalid remote ${location}: ${remote.err}`);
213
+ }
214
+ const remoteVersions = await remote.value.Versions(location);
215
+ if (Result.isErr(remoteVersions)) {
216
+ return Err(`failed to read ${location}: ${remoteVersions.err}`);
217
+ }
218
+ const targetSemVer = ver;
219
+ const remoteMatches = remoteVersions.value.filter((candidate) => SemVer.Compare(candidate, targetSemVer) === 0);
220
+ if (remoteMatches.length === 0) {
221
+ return Err(`no remote matches for ${location}@v${ver}`);
222
+ }
223
+ if (remoteMatches.length > 1) {
224
+ const matches = `[${remoteMatches.map(String).join(", ")}]`;
225
+ return Err(`ambiguous match for ${location}@v${ver}: found ${matches}`);
226
+ }
227
+ const remoteMatch = remoteMatches[0];
228
+ // Copy the remote module into a temp dir
229
+ const dlResult = await remote.value.Get(location, remoteMatch.toString(), dir);
230
+ if (Result.isErr(dlResult)) {
231
+ return Err(`failed to fetch ${location}@${ver.toString()}: ${dlResult.err}`);
232
+ }
233
+ return Ok(remoteMatch);
234
+ }
235
+ //# sourceMappingURL=functions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"functions.js","sourceRoot":"","sources":["../../../src/mod/download/functions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import { Command } from "@commander-js/extra-typings";
2
+ import { ModuleContext } from "@kumori/kdsl-lsp/module/context.js";
3
+ import { SumDB } from "@kumori/kdsl-lsp/module/integrity/sumdb.js";
4
+ import { RemoteFetcherFactory } from "@kumori/kdsl-lsp/module/remote/factory.js";
5
+ import { Result } from "@kumori/kdsl-lsp/util/result.js";
6
+ import { FileSystemProvider } from "langium";
7
+ import { CommanderActionParams } from "../../util.js";
8
+ import { ILogLayer } from "loglayer";
9
+ import { KumoriServices } from "@kumori/kdsl-lsp/language/kumori.js";
10
+ declare const _default: {
11
+ Register: typeof Register;
12
+ };
13
+ export default _default;
14
+ export declare function Register(cmd: Command, log: ILogLayer): Command<[string[]], {
15
+ quiet?: true | undefined;
16
+ }, {}>;
17
+ export declare const Description: string;
18
+ export type Exec = CommanderActionParams<ReturnType<typeof Register>>;
19
+ export declare function Action(log: ILogLayer): Exec;
20
+ export type Params = Parameters<Exec>;
21
+ export declare const Download: (log: ILogLayer, svcs: KumoriServices, cwd: string, modules: Params[0], options: Params[1]) => Promise<Result<void, string[]>>;
22
+ export type DownloadContext = ModuleContext & {
23
+ SumDB: SumDB;
24
+ Remotes: RemoteFetcherFactory;
25
+ FS: FileSystemProvider;
26
+ };