vyft 0.4.0-alpha → 0.4.2-alpha

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 (189) hide show
  1. package/LICENSE +191 -21
  2. package/README.md +3 -49
  3. package/dist/commands/context/add.d.ts +4 -0
  4. package/dist/commands/context/add.d.ts.map +1 -0
  5. package/dist/commands/context/add.js +98 -0
  6. package/dist/commands/context/add.js.map +1 -0
  7. package/dist/commands/context/index.d.ts +4 -0
  8. package/dist/commands/context/index.d.ts.map +1 -0
  9. package/dist/commands/context/index.js +12 -0
  10. package/dist/commands/context/index.js.map +1 -0
  11. package/dist/commands/context/list.d.ts +4 -0
  12. package/dist/commands/context/list.d.ts.map +1 -0
  13. package/dist/commands/context/list.js +25 -0
  14. package/dist/commands/context/list.js.map +1 -0
  15. package/dist/commands/context/remove.d.ts +4 -0
  16. package/dist/commands/context/remove.d.ts.map +1 -0
  17. package/dist/commands/context/remove.js +36 -0
  18. package/dist/commands/context/remove.js.map +1 -0
  19. package/dist/commands/context/use.d.ts +4 -0
  20. package/dist/commands/context/use.d.ts.map +1 -0
  21. package/dist/commands/context/use.js +32 -0
  22. package/dist/commands/context/use.js.map +1 -0
  23. package/dist/commands/deploy.d.ts +4 -0
  24. package/dist/commands/deploy.d.ts.map +1 -0
  25. package/dist/commands/deploy.js +55 -0
  26. package/dist/commands/deploy.js.map +1 -0
  27. package/dist/commands/destroy.d.ts +4 -0
  28. package/dist/commands/destroy.d.ts.map +1 -0
  29. package/dist/commands/destroy.js +70 -0
  30. package/dist/commands/destroy.js.map +1 -0
  31. package/dist/commands/diff.d.ts +4 -0
  32. package/dist/commands/diff.d.ts.map +1 -0
  33. package/dist/commands/diff.js +52 -0
  34. package/dist/commands/diff.js.map +1 -0
  35. package/dist/commands/init.d.ts +4 -0
  36. package/dist/commands/init.d.ts.map +1 -0
  37. package/dist/commands/init.js +92 -0
  38. package/dist/commands/init.js.map +1 -0
  39. package/dist/commands/local/detect.d.ts +7 -0
  40. package/dist/commands/local/detect.d.ts.map +1 -0
  41. package/dist/commands/local/detect.js +146 -0
  42. package/dist/commands/local/detect.js.map +1 -0
  43. package/dist/commands/local/dev.d.ts +4 -0
  44. package/dist/commands/local/dev.d.ts.map +1 -0
  45. package/dist/commands/local/dev.js +387 -0
  46. package/dist/commands/local/dev.js.map +1 -0
  47. package/dist/commands/local/down.d.ts +4 -0
  48. package/dist/commands/local/down.d.ts.map +1 -0
  49. package/dist/commands/local/down.js +61 -0
  50. package/dist/commands/local/down.js.map +1 -0
  51. package/dist/commands/local/index.d.ts +4 -0
  52. package/dist/commands/local/index.d.ts.map +1 -0
  53. package/dist/commands/local/index.js +12 -0
  54. package/dist/commands/local/index.js.map +1 -0
  55. package/dist/commands/local/reset.d.ts +4 -0
  56. package/dist/commands/local/reset.d.ts.map +1 -0
  57. package/dist/commands/local/reset.js +67 -0
  58. package/dist/commands/local/reset.js.map +1 -0
  59. package/dist/commands/local/up.d.ts +4 -0
  60. package/dist/commands/local/up.d.ts.map +1 -0
  61. package/dist/commands/local/up.js +58 -0
  62. package/dist/commands/local/up.js.map +1 -0
  63. package/dist/commands/refresh.d.ts +4 -0
  64. package/dist/commands/refresh.d.ts.map +1 -0
  65. package/dist/commands/refresh.js +39 -0
  66. package/dist/commands/refresh.js.map +1 -0
  67. package/dist/config.d.ts +8 -0
  68. package/dist/config.d.ts.map +1 -0
  69. package/dist/config.js +65 -0
  70. package/dist/config.js.map +1 -0
  71. package/dist/contexts.d.ts +21 -0
  72. package/dist/contexts.d.ts.map +1 -0
  73. package/dist/contexts.js +72 -0
  74. package/dist/contexts.js.map +1 -0
  75. package/dist/index.d.ts +2 -9
  76. package/dist/index.d.ts.map +1 -0
  77. package/dist/index.js +23 -7
  78. package/dist/index.js.map +1 -0
  79. package/dist/lib.d.ts +7 -0
  80. package/dist/lib.d.ts.map +1 -0
  81. package/dist/lib.js +6 -0
  82. package/dist/lib.js.map +1 -0
  83. package/dist/providers.d.ts +9 -0
  84. package/dist/providers.d.ts.map +1 -0
  85. package/dist/providers.js +41 -0
  86. package/dist/providers.js.map +1 -0
  87. package/dist/runtime.d.ts +18 -15
  88. package/dist/runtime.d.ts.map +1 -0
  89. package/dist/runtime.js +154 -0
  90. package/dist/runtime.js.map +1 -0
  91. package/dist/runtime.test.d.ts +2 -0
  92. package/dist/runtime.test.d.ts.map +1 -0
  93. package/dist/runtime.test.js +119 -0
  94. package/dist/runtime.test.js.map +1 -0
  95. package/dist/utils/fs.d.ts +4 -0
  96. package/dist/utils/fs.d.ts.map +1 -0
  97. package/dist/utils/fs.js +33 -0
  98. package/dist/utils/fs.js.map +1 -0
  99. package/dist/utils/pm.d.ts +3 -0
  100. package/dist/utils/pm.d.ts.map +1 -0
  101. package/dist/utils/pm.js +17 -0
  102. package/dist/utils/pm.js.map +1 -0
  103. package/dist/utils/prompts.d.ts +2 -0
  104. package/dist/utils/prompts.d.ts.map +1 -0
  105. package/dist/utils/prompts.js +6 -0
  106. package/dist/utils/prompts.js.map +1 -0
  107. package/dist/utils/templates.d.ts +3 -0
  108. package/dist/utils/templates.d.ts.map +1 -0
  109. package/dist/utils/templates.js +48 -0
  110. package/dist/utils/templates.js.map +1 -0
  111. package/package.json +31 -48
  112. package/templates/bun/index.ts +8 -0
  113. package/templates/bun/package.json +15 -0
  114. package/templates/bun/tsconfig.json +15 -0
  115. package/templates/bun/vyft.config.ts +3 -0
  116. package/dist/build.d.ts +0 -12
  117. package/dist/build.js +0 -44
  118. package/dist/cli.d.ts +0 -2
  119. package/dist/cli.js +0 -842
  120. package/dist/context.d.ts +0 -39
  121. package/dist/context.js +0 -101
  122. package/dist/docker.d.ts +0 -69
  123. package/dist/docker.js +0 -958
  124. package/dist/exec.d.ts +0 -2
  125. package/dist/exec.js +0 -28
  126. package/dist/init.d.ts +0 -1
  127. package/dist/init.js +0 -117
  128. package/dist/interpolate.d.ts +0 -13
  129. package/dist/interpolate.js +0 -19
  130. package/dist/local/dev.d.ts +0 -31
  131. package/dist/local/dev.js +0 -109
  132. package/dist/local/index.d.ts +0 -2
  133. package/dist/local/index.js +0 -2
  134. package/dist/local/runtime.d.ts +0 -61
  135. package/dist/local/runtime.js +0 -391
  136. package/dist/logger.d.ts +0 -2
  137. package/dist/logger.js +0 -10
  138. package/dist/proxy.d.ts +0 -16
  139. package/dist/proxy.js +0 -0
  140. package/dist/resource.d.ts +0 -181
  141. package/dist/resource.js +0 -45
  142. package/dist/services/index.d.ts +0 -26
  143. package/dist/services/index.js +0 -35
  144. package/dist/services/minio.d.ts +0 -36
  145. package/dist/services/minio.js +0 -53
  146. package/dist/services/mongo.d.ts +0 -28
  147. package/dist/services/mongo.js +0 -45
  148. package/dist/services/mysql.d.ts +0 -28
  149. package/dist/services/mysql.js +0 -44
  150. package/dist/services/nats.d.ts +0 -26
  151. package/dist/services/nats.js +0 -38
  152. package/dist/services/postgres.d.ts +0 -28
  153. package/dist/services/postgres.js +0 -45
  154. package/dist/services/rabbitmq.d.ts +0 -28
  155. package/dist/services/rabbitmq.js +0 -44
  156. package/dist/services/redis.d.ts +0 -28
  157. package/dist/services/redis.js +0 -49
  158. package/dist/services/storage.d.ts +0 -39
  159. package/dist/services/storage.js +0 -94
  160. package/dist/swarm/factories.d.ts +0 -16
  161. package/dist/swarm/factories.js +0 -63
  162. package/dist/swarm/index.d.ts +0 -20
  163. package/dist/swarm/index.js +0 -5
  164. package/dist/swarm/proxy.d.ts +0 -24
  165. package/dist/swarm/proxy.js +0 -339
  166. package/dist/swarm/types.d.ts +0 -26
  167. package/dist/swarm/types.js +0 -0
  168. package/dist/symbols.d.ts +0 -15
  169. package/dist/symbols.js +0 -4
  170. package/templates/fullstack/apps/api/Dockerfile +0 -22
  171. package/templates/fullstack/apps/api/package.json +0 -26
  172. package/templates/fullstack/apps/api/src/auth.ts +0 -21
  173. package/templates/fullstack/apps/api/src/db.ts +0 -16
  174. package/templates/fullstack/apps/api/src/index.ts +0 -17
  175. package/templates/fullstack/apps/api/src/router.ts +0 -11
  176. package/templates/fullstack/apps/api/src/schema.ts +0 -11
  177. package/templates/fullstack/apps/api/tsconfig.json +0 -8
  178. package/templates/fullstack/apps/web/index.html +0 -12
  179. package/templates/fullstack/apps/web/package.json +0 -21
  180. package/templates/fullstack/apps/web/src/app.tsx +0 -8
  181. package/templates/fullstack/apps/web/src/main.tsx +0 -9
  182. package/templates/fullstack/apps/web/tsconfig.json +0 -7
  183. package/templates/fullstack/apps/web/vite.config.ts +0 -14
  184. package/templates/fullstack/dockerignore +0 -7
  185. package/templates/fullstack/gitignore +0 -3
  186. package/templates/fullstack/package.json +0 -14
  187. package/templates/fullstack/pnpm-workspace.yaml +0 -2
  188. package/templates/fullstack/tsconfig.json +0 -11
  189. package/templates/fullstack/vyft.config.ts +0 -22
@@ -0,0 +1,58 @@
1
+ import { spinner } from "@clack/prompts";
2
+ import { apply, reconcile, toState, urn } from "@vyft/core";
3
+ import docker from "@vyft/docker";
4
+ import { RUNTIME_PROVIDER_NAME } from "@vyft/runtime";
5
+ import { Command } from "commander";
6
+ import { loadConfig, resolveName } from "../../config.js";
7
+ import { buildContext, buildCurrentState, createCipher, loadSalt, openStore, resolveLocalStateDir, resolvePassphrase, } from "../../runtime.js";
8
+ export default new Command("up")
9
+ .description("Start local environment")
10
+ .option("--name <name>", "Project name")
11
+ .action(async (opts) => {
12
+ const cwd = process.cwd();
13
+ const project = await resolveName(cwd, opts.name);
14
+ const { entries } = await loadConfig(cwd, project);
15
+ const imageEntries = entries.filter((entry) => {
16
+ const parsed = urn.parse(entry.urn);
17
+ const value = entry.value;
18
+ return (parsed.provider === RUNTIME_PROVIDER_NAME && value["image"] != null);
19
+ });
20
+ if (imageEntries.length === 0) {
21
+ console.log("No image-based services found in config.");
22
+ return;
23
+ }
24
+ const stateDir = resolveLocalStateDir(cwd, project);
25
+ const providers = {
26
+ [RUNTIME_PROVIDER_NAME]: docker({ project, stage: "local" }),
27
+ };
28
+ const store = await openStore(stateDir);
29
+ const salt = await loadSalt(stateDir);
30
+ const passphrase = await resolvePassphrase(project, "local");
31
+ const cipher = createCipher(passphrase, salt);
32
+ const ctx = buildContext(store, cipher, providers, stateDir);
33
+ await reconcile(ctx);
34
+ const current = buildCurrentState(store);
35
+ const desired = toState(imageEntries);
36
+ const s = spinner();
37
+ try {
38
+ await apply(desired, current, ctx, {
39
+ onEvent(event) {
40
+ if (event.status === "pending") {
41
+ s.start(`${event.action} ${event.urn}`);
42
+ }
43
+ else {
44
+ s.stop(`${event.action} ${event.urn}`);
45
+ }
46
+ },
47
+ });
48
+ }
49
+ catch (err) {
50
+ const message = err instanceof Error ? err.message : String(err);
51
+ s.stop(`failed: ${message}`);
52
+ throw err;
53
+ }
54
+ finally {
55
+ await store.dispose();
56
+ }
57
+ });
58
+ //# sourceMappingURL=up.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"up.js","sourceRoot":"","sources":["../../../src/commands/local/up.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { Command } from "commander";
2
+ declare const _default: Command;
3
+ export default _default;
4
+ //# sourceMappingURL=refresh.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refresh.d.ts","sourceRoot":"","sources":["../../src/commands/refresh.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;;AAepC,wBAwCK"}
@@ -0,0 +1,39 @@
1
+ import { reconcile, refresh } from "@vyft/core";
2
+ import { PLATFORM_PROVIDER_NAME } from "@vyft/platform";
3
+ import { RUNTIME_PROVIDER_NAME } from "@vyft/runtime";
4
+ import { Command } from "commander";
5
+ import { loadConfig, resolveName } from "../config.js";
6
+ import { getCurrentContext } from "../contexts.js";
7
+ import { buildContext, buildCurrentState, createCipher, loadSalt, openStore, resolvePassphrase, resolvePlatformProvider, resolveRuntimeProvider, resolveStateDir, } from "../runtime.js";
8
+ export default new Command("refresh")
9
+ .description("Refresh infrastructure state")
10
+ .option("--stage <name>", "Deployment stage", "production")
11
+ .option("--name <name>", "Project name")
12
+ .action(async (opts) => {
13
+ const cwd = process.cwd();
14
+ const project = await resolveName(cwd, opts.name);
15
+ const { providers } = await loadConfig(cwd, project);
16
+ const context = await getCurrentContext(cwd);
17
+ const stateDir = resolveStateDir(cwd, context.name, project, opts.stage);
18
+ if (providers[RUNTIME_PROVIDER_NAME]) {
19
+ providers[RUNTIME_PROVIDER_NAME] = resolveRuntimeProvider(context.entry.runtime, project, opts.stage);
20
+ }
21
+ if (providers[PLATFORM_PROVIDER_NAME]) {
22
+ providers[PLATFORM_PROVIDER_NAME] = resolvePlatformProvider(context.entry.platform, project, opts.stage);
23
+ }
24
+ const store = await openStore(stateDir);
25
+ const salt = await loadSalt(stateDir);
26
+ const passphrase = await resolvePassphrase(project, "read");
27
+ const cipher = createCipher(passphrase, salt);
28
+ const ctx = buildContext(store, cipher, providers, stateDir);
29
+ await reconcile(ctx);
30
+ const current = buildCurrentState(store);
31
+ try {
32
+ await refresh(current, ctx);
33
+ console.log("State refreshed.");
34
+ }
35
+ finally {
36
+ await store.dispose();
37
+ }
38
+ });
39
+ //# sourceMappingURL=refresh.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refresh.js","sourceRoot":"","sources":["../../src/commands/refresh.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,YAAY,EACZ,QAAQ,EACR,SAAS,EACT,iBAAiB,EACjB,uBAAuB,EACvB,sBAAsB,EACtB,eAAe,GAChB,MAAM,eAAe,CAAC;AAEvB,eAAe,IAAI,OAAO,CAAC,SAAS,CAAC;KAClC,WAAW,CAAC,8BAA8B,CAAC;KAC3C,MAAM,CAAC,gBAAgB,EAAE,kBAAkB,EAAE,YAAY,CAAC;KAC1D,MAAM,CAAC,eAAe,EAAE,cAAc,CAAC;KACvC,MAAM,CAAC,KAAK,EAAE,IAAsC,EAAE,EAAE;IACvD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IAClD,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACrD,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,GAAG,CAAC,CAAC;IAC7C,MAAM,QAAQ,GAAG,eAAe,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAEzE,IAAI,SAAS,CAAC,qBAAqB,CAAC,EAAE,CAAC;QACrC,SAAS,CAAC,qBAAqB,CAAC,GAAG,sBAAsB,CACvD,OAAO,CAAC,KAAK,CAAC,OAAO,EACrB,OAAO,EACP,IAAI,CAAC,KAAK,CACX,CAAC;IACJ,CAAC;IACD,IAAI,SAAS,CAAC,sBAAsB,CAAC,EAAE,CAAC;QACtC,SAAS,CAAC,sBAAsB,CAAC,GAAG,uBAAuB,CACzD,OAAO,CAAC,KAAK,CAAC,QAAQ,EACtB,OAAO,EACP,IAAI,CAAC,KAAK,CACX,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,CAAC;IACxC,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACtC,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC5D,MAAM,MAAM,GAAG,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IAC9C,MAAM,GAAG,GAAG,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC7D,MAAM,SAAS,CAAC,GAAG,CAAC,CAAC;IACrB,MAAM,OAAO,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAEzC,IAAI,CAAC;QACH,MAAM,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAClC,CAAC;YAAS,CAAC;QACT,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;IACxB,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { type Provider, type ResourceEntry } from "@vyft/core";
2
+ export interface LoadedConfig {
3
+ entries: ResourceEntry[];
4
+ providers: Record<string, Provider<unknown>>;
5
+ }
6
+ export declare function loadConfig(cwd: string, name?: string): Promise<LoadedConfig>;
7
+ export declare function resolveName(cwd: string, override?: string): Promise<string>;
8
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,aAAa,EAAiB,MAAM,YAAY,CAAC;AAW9E,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;CAC9C;AAwBD,wBAAsB,UAAU,CAC9B,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,YAAY,CAAC,CAuBvB;AAED,wBAAsB,WAAW,CAC/B,GAAG,EAAE,MAAM,EACX,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC,CAejB"}
package/dist/config.js ADDED
@@ -0,0 +1,65 @@
1
+ import fs from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { registry, urn } from "@vyft/core";
4
+ import { service } from "@vyft/runtime";
5
+ import { createJiti } from "jiti";
6
+ const CONFIG_FILES = [
7
+ "vyft.config.ts",
8
+ "vyft.config.js",
9
+ "vyft.config.mjs",
10
+ "vyft.config.mts",
11
+ ];
12
+ function collectProviders(entries) {
13
+ const providers = {};
14
+ for (const entry of entries) {
15
+ const { provider: name } = urn.parse(entry.urn);
16
+ if (!providers[name]) {
17
+ providers[name] = entry.provider;
18
+ }
19
+ }
20
+ return providers;
21
+ }
22
+ async function fileExists(filePath) {
23
+ try {
24
+ await fs.access(filePath);
25
+ return true;
26
+ }
27
+ catch {
28
+ return false;
29
+ }
30
+ }
31
+ export async function loadConfig(cwd, name) {
32
+ const jiti = createJiti(cwd);
33
+ for (const file of CONFIG_FILES) {
34
+ const filePath = path.join(cwd, file);
35
+ if (!(await fileExists(filePath)))
36
+ continue;
37
+ registry.begin();
38
+ await jiti.import(filePath);
39
+ const entries = registry.collect();
40
+ return { entries, providers: collectProviders(entries) };
41
+ }
42
+ if (name) {
43
+ registry.begin();
44
+ service(name, {});
45
+ const entries = registry.collect();
46
+ return { entries, providers: collectProviders(entries) };
47
+ }
48
+ throw new Error(`No config file found. Create one of: ${CONFIG_FILES.join(", ")}, or pass --name <name>.`);
49
+ }
50
+ export async function resolveName(cwd, override) {
51
+ if (override)
52
+ return override;
53
+ try {
54
+ const raw = await fs.readFile(path.join(cwd, "package.json"), "utf8");
55
+ const pkg = JSON.parse(raw);
56
+ if (pkg.name) {
57
+ const stripped = pkg.name.replace(/^@[^/]+\//, "");
58
+ if (stripped)
59
+ return stripped;
60
+ }
61
+ }
62
+ catch { }
63
+ throw new Error('Could not determine project name. Add a "name" field to package.json or use --name <name>.');
64
+ }
65
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ export interface ContextEntry {
2
+ platform: string;
3
+ runtime: string;
4
+ connection?: {
5
+ host?: string | undefined;
6
+ endpoint?: string | undefined;
7
+ } | undefined;
8
+ }
9
+ export interface ContextsFile {
10
+ current?: string;
11
+ contexts: Record<string, ContextEntry>;
12
+ }
13
+ export declare function readContexts(cwd: string): Promise<ContextsFile>;
14
+ export declare function addContext(cwd: string, name: string, entry: ContextEntry): Promise<void>;
15
+ export declare function removeContext(cwd: string, name: string): Promise<void>;
16
+ export declare function useContext(cwd: string, name: string): Promise<void>;
17
+ export declare function getCurrentContext(cwd: string): Promise<{
18
+ name: string;
19
+ entry: ContextEntry;
20
+ }>;
21
+ //# sourceMappingURL=contexts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contexts.d.ts","sourceRoot":"","sources":["../src/contexts.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EACP;QACE,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAC1B,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;KAC/B,GACD,SAAS,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;CACxC;AASD,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAOrE;AAQD,wBAAsB,UAAU,CAC9B,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,YAAY,GAClB,OAAO,CAAC,IAAI,CAAC,CAUf;AAED,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgB5E;AAED,wBAAsB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAOzE;AAOD,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,MAAM,GACV,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,YAAY,CAAA;CAAE,CAAC,CAUhD"}
@@ -0,0 +1,72 @@
1
+ import fs from "node:fs/promises";
2
+ import path from "node:path";
3
+ const VYFT_DIR = ".vyft";
4
+ const CONTEXTS_FILE = "vyft.json";
5
+ function contextsPath(cwd) {
6
+ return path.join(cwd, VYFT_DIR, CONTEXTS_FILE);
7
+ }
8
+ export async function readContexts(cwd) {
9
+ try {
10
+ const raw = await fs.readFile(contextsPath(cwd), "utf8");
11
+ return JSON.parse(raw);
12
+ }
13
+ catch {
14
+ return { contexts: {} };
15
+ }
16
+ }
17
+ async function writeContexts(cwd, data) {
18
+ const dir = path.join(cwd, VYFT_DIR);
19
+ await fs.mkdir(dir, { recursive: true });
20
+ await fs.writeFile(contextsPath(cwd), JSON.stringify(data, null, 2));
21
+ }
22
+ export async function addContext(cwd, name, entry) {
23
+ const data = await readContexts(cwd);
24
+ if (data.contexts[name]) {
25
+ throw new Error(`Context "${name}" already exists`);
26
+ }
27
+ data.contexts[name] = entry;
28
+ if (!data.current) {
29
+ data.current = name;
30
+ }
31
+ await writeContexts(cwd, data);
32
+ }
33
+ export async function removeContext(cwd, name) {
34
+ const data = await readContexts(cwd);
35
+ if (!data.contexts[name]) {
36
+ throw new Error(`Context "${name}" does not exist`);
37
+ }
38
+ delete data.contexts[name];
39
+ if (data.current === name) {
40
+ const remaining = Object.keys(data.contexts);
41
+ const next = remaining[0];
42
+ if (next) {
43
+ data.current = next;
44
+ }
45
+ else {
46
+ delete data.current;
47
+ }
48
+ }
49
+ await writeContexts(cwd, data);
50
+ }
51
+ export async function useContext(cwd, name) {
52
+ const data = await readContexts(cwd);
53
+ if (!data.contexts[name]) {
54
+ throw new Error(`Context "${name}" does not exist`);
55
+ }
56
+ data.current = name;
57
+ await writeContexts(cwd, data);
58
+ }
59
+ const DEFAULT_CONTEXT = {
60
+ platform: "remote",
61
+ runtime: "docker",
62
+ };
63
+ export async function getCurrentContext(cwd) {
64
+ const data = await readContexts(cwd);
65
+ const name = data.current;
66
+ const entry = name ? data.contexts[name] : undefined;
67
+ if (!name || !entry) {
68
+ return { name: "default", entry: DEFAULT_CONTEXT };
69
+ }
70
+ return { name, entry };
71
+ }
72
+ //# sourceMappingURL=contexts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contexts.js","sourceRoot":"","sources":["../src/contexts.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,9 +1,2 @@
1
- export { interpolate } from "./interpolate.js";
2
- export type { EnvValue, HealthCheckConfig, Interpolation, Reference, Resource, ResourceLimits, ResourceType, Secret, SecretConfig, Service, ServiceConfig, Site, SiteConfig, Volume, VolumeConfig, } from "./resource.js";
3
- export { isInterpolation, isReference, isSecret, validateId, validateRoute, } from "./resource.js";
4
- export type { Runtime } from "./runtime.js";
5
- export type { BackupConfig, Bucket, Minio, MinioConfig, Mongo, MongoConfig, Mysql, MysqlConfig, Nats, NatsConfig, Postgres, PostgresConfig, Rabbitmq, RabbitmqConfig, Redis, RedisConfig, Storage, StorageConfig, } from "./services/index.js";
6
- export { isManaged } from "./services/index.js";
7
- export type { RuntimeMeta, RuntimeRef } from "./symbols.js";
8
- export { VYFT_MANAGED, VYFT_RUNTIME } from "./symbols.js";
9
- export declare const service: (id: string, config: import("./swarm/types.js").SwarmServiceConfig) => import("./resource.js").Service, secret: (id: string, config?: import("./resource.js").SecretConfig) => import("./resource.js").Secret, volume: (id: string, config?: import("./resource.js").VolumeConfig) => import("./resource.js").Volume, site: (id: string, config: import("./resource.js").SiteConfig) => import("./resource.js").Site, postgres: (id: string, config?: import("./index.js").PostgresConfig) => import("./index.js").Postgres, mysql: (id: string, config?: import("./index.js").MysqlConfig) => import("./index.js").Mysql, redis: (id: string, config?: import("./index.js").RedisConfig) => import("./index.js").Redis, rabbitmq: (id: string, config?: import("./index.js").RabbitmqConfig) => import("./index.js").Rabbitmq, nats: (id: string, config?: import("./index.js").NatsConfig) => import("./index.js").Nats, mongo: (id: string, config?: import("./index.js").MongoConfig) => import("./index.js").Mongo, minio: (id: string, config?: import("./index.js").MinioConfig) => import("./index.js").Minio, storage: (id: string, config?: import("./index.js").StorageConfig) => import("./index.js").Storage;
1
+ export {};
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js CHANGED
@@ -1,7 +1,23 @@
1
- export { interpolate } from "./interpolate.js";
2
- export { isInterpolation, isReference, isSecret, validateId, validateRoute, } from "./resource.js";
3
- export { isManaged } from "./services/index.js";
4
- export { VYFT_MANAGED, VYFT_RUNTIME } from "./symbols.js";
5
- import { createFactories } from "./swarm/factories.js";
6
- const factories = createFactories({});
7
- export const { service, secret, volume, site, postgres, mysql, redis, rabbitmq, nats, mongo, minio, storage, } = factories;
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { Command } from "commander";
4
+ import context from "./commands/context/index.js";
5
+ import deploy from "./commands/deploy.js";
6
+ import destroy from "./commands/destroy.js";
7
+ import diff from "./commands/diff.js";
8
+ import init from "./commands/init.js";
9
+ import local from "./commands/local/index.js";
10
+ import refresh from "./commands/refresh.js";
11
+ const pkg = JSON.parse(fs.readFileSync(path.resolve(import.meta.dirname, "..", "package.json"), "utf8"));
12
+ const program = new Command("vyft")
13
+ .description("Vyft CLI")
14
+ .version(pkg.version);
15
+ program.addCommand(init);
16
+ program.addCommand(deploy);
17
+ program.addCommand(destroy);
18
+ program.addCommand(refresh);
19
+ program.addCommand(diff);
20
+ program.addCommand(local);
21
+ program.addCommand(context);
22
+ program.parse();
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,OAAO,MAAM,6BAA6B,CAAC;AAClD,OAAO,MAAM,MAAM,sBAAsB,CAAC;AAC1C,OAAO,OAAO,MAAM,uBAAuB,CAAC;AAC5C,OAAO,IAAI,MAAM,oBAAoB,CAAC;AACtC,OAAO,IAAI,MAAM,oBAAoB,CAAC;AACtC,OAAO,KAAK,MAAM,2BAA2B,CAAC;AAC9C,OAAO,OAAO,MAAM,uBAAuB,CAAC;AAE5C,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CACpB,EAAE,CAAC,YAAY,CACb,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,cAAc,CAAC,EACvD,MAAM,CACP,CACqB,CAAC;AAEzB,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;KAChC,WAAW,CAAC,UAAU,CAAC;KACvB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAExB,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AACzB,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AAC3B,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AAC5B,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AAC5B,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AACzB,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AAC1B,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AAE5B,OAAO,CAAC,KAAK,EAAE,CAAC"}
package/dist/lib.d.ts ADDED
@@ -0,0 +1,7 @@
1
+ export type { Output, ResourceHandle, ResourceOptions, SecretOutput, } from "@vyft/core";
2
+ export { createOutput, createSecretOutput, resource, secret } from "@vyft/core";
3
+ export { defineResource } from "@vyft/provider";
4
+ export type { CronJobConfig, JobConfig, ServiceConfig, ServiceHandle, VolumeConfig, VolumeHandle, } from "@vyft/runtime";
5
+ export { cronjob, job, service, volume } from "@vyft/runtime";
6
+ export { default as std } from "@vyft/std";
7
+ //# sourceMappingURL=lib.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lib.d.ts","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":"AAEA,YAAY,EACV,MAAM,EACN,cAAc,EACd,eAAe,EACf,YAAY,GACb,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAChF,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,YAAY,EACV,aAAa,EACb,SAAS,EACT,aAAa,EACb,aAAa,EACb,YAAY,EACZ,YAAY,GACb,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,WAAW,CAAC"}
package/dist/lib.js ADDED
@@ -0,0 +1,6 @@
1
+ // User-facing API re-exports
2
+ export { createOutput, createSecretOutput, resource, secret } from "@vyft/core";
3
+ export { defineResource } from "@vyft/provider";
4
+ export { cronjob, job, service, volume } from "@vyft/runtime";
5
+ export { default as std } from "@vyft/std";
6
+ //# sourceMappingURL=lib.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lib.js","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAQ7B,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAChF,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAShD,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,WAAW,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { Provider } from "@vyft/core";
2
+ type ProviderFactory = (opts: {
3
+ project: string;
4
+ stage: string;
5
+ }) => Provider<unknown>;
6
+ export declare const runtimes: Map<string, ProviderFactory>;
7
+ export declare const platforms: Map<string, ProviderFactory>;
8
+ export {};
9
+ //# sourceMappingURL=providers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../src/providers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAU3C,KAAK,eAAe,GAAG,CAAC,IAAI,EAAE;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf,KAAK,QAAQ,CAAC,OAAO,CAAC,CAAC;AAqCxB,eAAO,MAAM,QAAQ,8BAEnB,CAAC;AAEH,eAAO,MAAM,SAAS,8BAKpB,CAAC"}
@@ -0,0 +1,41 @@
1
+ import { RESOURCE } from "@vyft/core";
2
+ import docker, { createDockerContext, postgresHandlers, redisHandlers, siteHandlers, } from "@vyft/docker";
3
+ import local from "@vyft/local";
4
+ const FALLBACK_RESOURCES = {
5
+ postgres: { [RESOURCE]: true, name: "postgres", handlers: postgresHandlers },
6
+ redis: { [RESOURCE]: true, name: "redis", handlers: redisHandlers },
7
+ site: { [RESOURCE]: true, name: "site", handlers: siteHandlers },
8
+ };
9
+ function withFallbackResources(provider, project, stage) {
10
+ const resources = provider.config.resources ?? {};
11
+ const missing = {};
12
+ for (const [name, def] of Object.entries(FALLBACK_RESOURCES)) {
13
+ if (!resources[name]) {
14
+ missing[name] = def;
15
+ }
16
+ }
17
+ if (Object.keys(missing).length === 0)
18
+ return provider;
19
+ const originalContext = provider.config.context;
20
+ return {
21
+ config: {
22
+ ...provider.config,
23
+ context: async () => {
24
+ const platformCtx = await originalContext();
25
+ const dockerCtx = createDockerContext({ project, stage });
26
+ return Object.assign({}, platformCtx, dockerCtx);
27
+ },
28
+ resources: { ...resources, ...missing },
29
+ },
30
+ };
31
+ }
32
+ export const runtimes = new Map([
33
+ ["docker", ({ project, stage }) => docker({ project, stage })],
34
+ ]);
35
+ export const platforms = new Map([
36
+ [
37
+ "remote",
38
+ ({ project, stage }) => withFallbackResources(local({}), project, stage),
39
+ ],
40
+ ]);
41
+ //# sourceMappingURL=providers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providers.js","sourceRoot":"","sources":["../src/providers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAA2B,MAAM,YAAY,CAAC;AAC/D,OAAO,MAAM,EAAE,EACb,mBAAmB,EACnB,gBAAgB,EAChB,aAAa,EACb,YAAY,GACb,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,MAAM,aAAa,CAAC;AAOhC,MAAM,kBAAkB,GAAuC;IAC7D,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,gBAAgB,EAAE;IAC5E,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE;IACnE,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE;CACjE,CAAC;AAEF,SAAS,qBAAqB,CAC5B,QAA2B,EAC3B,OAAe,EACf,KAAa;IAEb,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC;IAClD,MAAM,OAAO,GAAuC,EAAE,CAAC;IACvD,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,EAAE,CAAC;QAC7D,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;YACrB,OAAO,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;QACtB,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,QAAQ,CAAC;IAEvD,MAAM,eAAe,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC;IAChD,OAAO;QACL,MAAM,EAAE;YACN,GAAG,QAAQ,CAAC,MAAM;YAClB,OAAO,EAAE,KAAK,IAAI,EAAE;gBAClB,MAAM,WAAW,GAAG,MAAM,eAAe,EAAE,CAAC;gBAC5C,MAAM,SAAS,GAAG,mBAAmB,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;gBAC1D,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;YACnD,CAAC;YACD,SAAS,EAAE,EAAE,GAAG,SAAS,EAAE,GAAG,OAAO,EAAE;SACxC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,GAAG,CAA0B;IACvD,CAAC,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;CAC/D,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,GAAG,CAA0B;IACxD;QACE,QAAQ;QACR,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,qBAAqB,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC;KACzE;CACF,CAAC,CAAC"}
package/dist/runtime.d.ts CHANGED
@@ -1,16 +1,19 @@
1
- import type { Resource } from "./resource.js";
2
- /** Structured result returned by {@link Runtime.create}. */
3
- export interface CreateResult {
4
- action: "created" | "updated";
5
- route?: string;
6
- duration: number;
7
- }
8
- /** Backend that can deploy, query, and tear down resources. */
9
- export interface Runtime {
10
- /** Deploy or update a resource. */
11
- create(resource: Resource): Promise<CreateResult>;
12
- /** Check whether a resource currently exists. */
13
- exists(resource: Resource): Promise<boolean>;
14
- /** Tear down a resource. */
15
- remove(resource: Resource): Promise<void>;
1
+ import { Cipher, type Context, type Provider } from "@vyft/core";
2
+ import type { State } from "@vyft/engine";
3
+ import { Store } from "@vyft/store";
4
+ export interface CommandOpts {
5
+ stage?: string;
6
+ project?: string;
16
7
  }
8
+ export declare function resolveStateDir(cwd: string, context: string, project: string, stage?: string): string;
9
+ export declare function resolveLocalStateDir(cwd: string, project: string): string;
10
+ export declare function resolvePassphrase(project: string, mode: "local" | "deploy" | "read"): Promise<string>;
11
+ export declare function loadSalt(stateDir: string): Promise<Buffer>;
12
+ export declare function openStore(stateDir: string): Promise<Store>;
13
+ export declare function buildCurrentState(store: Store): State;
14
+ export declare function createArtifacts(stateDir: string): Context["createArtifacts"];
15
+ export declare function createCipher(passphrase: string, salt: Buffer): Cipher;
16
+ export declare function buildContext(store: Store, cipher: Cipher, providers: Record<string, Provider<unknown>>, stateDir: string): Context;
17
+ export declare function resolveRuntimeProvider(runtime: string, project: string, stage: string): Provider<unknown>;
18
+ export declare function resolvePlatformProvider(platform: string, project: string, stage: string): Provider<unknown>;
19
+ //# sourceMappingURL=runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,MAAM,EAAE,KAAK,OAAO,EAAgB,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC/E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAgB,KAAK,EAAE,MAAM,aAAa,CAAC;AAKlD,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,eAAe,CAC7B,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,KAAK,SAAe,GACnB,MAAM,CAER;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAEzE;AA2BD,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,MAAM,GAChC,OAAO,CAAC,MAAM,CAAC,CA6BjB;AAED,wBAAsB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAUhE;AAED,wBAAsB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAGhE;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK,CAqBrD;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAyB5E;AAED,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAErE;AAED,wBAAgB,YAAY,CAC1B,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,EAC5C,QAAQ,EAAE,MAAM,GACf,OAAO,CAOT;AAED,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,GACZ,QAAQ,CAAC,OAAO,CAAC,CAOnB;AAED,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,GACZ,QAAQ,CAAC,OAAO,CAAC,CAOnB"}