alpic 0.0.0-dev.8a666dc → 0.0.0-dev.8aaf386

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 (90) hide show
  1. package/dist/__tests__/auth.e2e.test.d.ts +1 -0
  2. package/dist/__tests__/auth.e2e.test.js +142 -0
  3. package/dist/__tests__/auth.e2e.test.js.map +1 -0
  4. package/dist/__tests__/deploy-flags.e2e.test.d.ts +1 -0
  5. package/dist/__tests__/deploy-flags.e2e.test.js +87 -0
  6. package/dist/__tests__/deploy-flags.e2e.test.js.map +1 -0
  7. package/dist/__tests__/deploy.e2e.test.d.ts +1 -0
  8. package/dist/__tests__/deploy.e2e.test.js +168 -0
  9. package/dist/__tests__/deploy.e2e.test.js.map +1 -0
  10. package/dist/__tests__/fixtures/demo-project/index.d.ts +1 -0
  11. package/dist/__tests__/fixtures/demo-project/index.js +4 -0
  12. package/dist/__tests__/fixtures/demo-project/index.js.map +1 -0
  13. package/dist/__tests__/git.e2e.test.d.ts +1 -0
  14. package/dist/__tests__/git.e2e.test.js +218 -0
  15. package/dist/__tests__/git.e2e.test.js.map +1 -0
  16. package/dist/__tests__/mock-server.d.ts +22 -0
  17. package/dist/__tests__/mock-server.js +492 -0
  18. package/dist/__tests__/mock-server.js.map +1 -0
  19. package/dist/__tests__/utils.d.ts +69 -0
  20. package/dist/__tests__/utils.js +243 -0
  21. package/dist/__tests__/utils.js.map +1 -0
  22. package/dist/api.d.ts +0 -1
  23. package/dist/api.js +5 -9
  24. package/dist/api.js.map +1 -1
  25. package/dist/commands/deploy.d.ts +8 -2
  26. package/dist/commands/deploy.js +43 -15
  27. package/dist/commands/deploy.js.map +1 -1
  28. package/dist/commands/git/connect.d.ts +9 -0
  29. package/dist/commands/git/connect.js +59 -0
  30. package/dist/commands/git/connect.js.map +1 -0
  31. package/dist/commands/git/disconnect.d.ts +9 -0
  32. package/dist/commands/git/disconnect.js +51 -0
  33. package/dist/commands/git/disconnect.js.map +1 -0
  34. package/dist/commands/git.d.ts +6 -0
  35. package/dist/commands/git.js +17 -0
  36. package/dist/commands/git.js.map +1 -0
  37. package/dist/commands/login.d.ts +6 -0
  38. package/dist/commands/login.js +39 -0
  39. package/dist/commands/login.js.map +1 -0
  40. package/dist/commands/logout.d.ts +6 -0
  41. package/dist/commands/logout.js +20 -0
  42. package/dist/commands/logout.js.map +1 -0
  43. package/dist/commands/whoami.d.ts +6 -0
  44. package/dist/commands/whoami.js +25 -0
  45. package/dist/commands/whoami.js.map +1 -0
  46. package/dist/env.d.ts +4 -0
  47. package/dist/env.js +10 -0
  48. package/dist/env.js.map +1 -0
  49. package/dist/lib/alpic-command.d.ts +4 -0
  50. package/dist/lib/alpic-command.js +17 -0
  51. package/dist/lib/alpic-command.js.map +1 -0
  52. package/dist/lib/auth/auth.d.ts +2 -0
  53. package/dist/lib/auth/auth.js +21 -0
  54. package/dist/lib/auth/auth.js.map +1 -0
  55. package/dist/lib/auth/oauth/client.d.ts +28 -0
  56. package/dist/lib/auth/oauth/client.js +110 -0
  57. package/dist/lib/auth/oauth/client.js.map +1 -0
  58. package/dist/lib/auth/oauth/constants.d.ts +2 -0
  59. package/dist/lib/auth/oauth/constants.js +3 -0
  60. package/dist/lib/auth/oauth/constants.js.map +1 -0
  61. package/dist/lib/auth/oauth/server/assets/alpic-mountain.png +0 -0
  62. package/dist/lib/auth/oauth/server/assets/authorize.html +195 -0
  63. package/dist/lib/auth/oauth/server/assets/callback.html +88 -0
  64. package/dist/lib/auth/oauth/server/index.d.ts +8 -0
  65. package/dist/lib/auth/oauth/server/index.js +102 -0
  66. package/dist/lib/auth/oauth/server/index.js.map +1 -0
  67. package/dist/lib/auth/whoami.d.ts +28 -0
  68. package/dist/lib/auth/whoami.js +35 -0
  69. package/dist/lib/auth/whoami.js.map +1 -0
  70. package/dist/lib/base-workflow.d.ts +10 -0
  71. package/dist/lib/base-workflow.js +22 -0
  72. package/dist/lib/base-workflow.js.map +1 -0
  73. package/dist/lib/deployment.d.ts +3 -3
  74. package/dist/lib/deployment.js +24 -8
  75. package/dist/lib/deployment.js.map +1 -1
  76. package/dist/lib/git.d.ts +14 -0
  77. package/dist/lib/git.js +105 -0
  78. package/dist/lib/git.js.map +1 -0
  79. package/dist/lib/global-store.d.ts +28 -0
  80. package/dist/lib/global-store.js +75 -0
  81. package/dist/lib/global-store.js.map +1 -0
  82. package/dist/lib/project.d.ts +60 -61
  83. package/dist/lib/project.js +268 -250
  84. package/dist/lib/project.js.map +1 -1
  85. package/dist/lib/telemetry.js +6 -6
  86. package/dist/lib/telemetry.js.map +1 -1
  87. package/package.json +27 -23
  88. package/dist/lib/global-config.d.ts +0 -9
  89. package/dist/lib/global-config.js +0 -48
  90. package/dist/lib/global-config.js.map +0 -1
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,142 @@
1
+ import { existsSync, mkdirSync, rmSync, writeFileSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ import { afterEach, beforeEach, describe, expect, it } from "vitest";
4
+ import { MockApiServer } from "./mock-server";
5
+ import { cliSession, createOAuthEnv, setupTestDirectory } from "./utils";
6
+ describe("alpic login, logout, whoami (E2E)", () => {
7
+ let mockServer;
8
+ let serverUrl;
9
+ let cwd;
10
+ let binPath;
11
+ beforeEach(async () => {
12
+ mockServer = new MockApiServer();
13
+ serverUrl = await mockServer.start();
14
+ const setup = await setupTestDirectory({ prefix: "alpic-cli-e2e-auth" });
15
+ cwd = setup.cwd;
16
+ binPath = setup.binPath;
17
+ });
18
+ afterEach(async () => {
19
+ await mockServer.stop();
20
+ if (cwd) {
21
+ rmSync(cwd, { recursive: true, force: true });
22
+ }
23
+ });
24
+ describe("whoami", () => {
25
+ it("shows not logged in when no API key and no OAuth credentials", async () => {
26
+ const { output } = await cliSession(process.execPath, [binPath, "whoami"], {
27
+ cwd,
28
+ env: {
29
+ ALPIC_API_BASE_URL: serverUrl,
30
+ },
31
+ }, async (cli) => {
32
+ await cli.expect("Not logged in");
33
+ await cli.expect("alpic login");
34
+ });
35
+ expect(output).toContain("Not logged in");
36
+ expect(output).toMatch(/alpic login|ALPIC_API_KEY/);
37
+ });
38
+ it("shows team when authenticated via API key", async () => {
39
+ const { exitCode, output } = await cliSession(process.execPath, [binPath, "whoami"], {
40
+ cwd,
41
+ env: {
42
+ ALPIC_API_BASE_URL: serverUrl,
43
+ ALPIC_API_KEY: "test-api-key",
44
+ },
45
+ }, async (cli) => {
46
+ await cli.expect("API key");
47
+ await cli.expect("Team:");
48
+ await cli.expect("Mock Team");
49
+ });
50
+ expect(exitCode).toBe(0);
51
+ expect(output).toContain("Authenticated via API key");
52
+ expect(output).toContain("Mock Team");
53
+ });
54
+ it("shows user email and name when authenticated via OAuth", async () => {
55
+ const oauthEnv = createOAuthEnv(cwd, serverUrl);
56
+ const { exitCode, output } = await cliSession(process.execPath, [binPath, "whoami"], {
57
+ cwd,
58
+ env: oauthEnv,
59
+ }, async (cli) => {
60
+ await cli.expect("Authenticated as");
61
+ await cli.expect("test@example.com");
62
+ await cli.expect("Test User");
63
+ });
64
+ expect(exitCode).toBe(0);
65
+ expect(output).toContain("Authenticated as");
66
+ expect(output).toContain("Test User");
67
+ expect(output).toContain("test@example.com");
68
+ });
69
+ it("deletes credentials file when it is not readable (e.g. corrupt)", async () => {
70
+ const configHome = join(cwd, ".config");
71
+ const alpicConfigDir = join(configHome, "alpic");
72
+ const credentialsPath = join(alpicConfigDir, "credentials.json");
73
+ mkdirSync(alpicConfigDir, { recursive: true });
74
+ writeFileSync(credentialsPath, "not valid json", "utf-8");
75
+ expect(existsSync(credentialsPath)).toBe(true);
76
+ const env = {
77
+ XDG_CONFIG_HOME: configHome,
78
+ ALPIC_COGNITO_URL: serverUrl,
79
+ ALPIC_API_BASE_URL: serverUrl,
80
+ };
81
+ await cliSession(process.execPath, [binPath, "whoami"], { cwd, env }, async (cli) => {
82
+ await cli.expect("Not logged in");
83
+ });
84
+ expect(existsSync(credentialsPath)).toBe(false);
85
+ });
86
+ });
87
+ describe("logout", () => {
88
+ it("says not logged in when no credentials", async () => {
89
+ const configHome = join(cwd, ".config");
90
+ const alpicConfigDir = join(configHome, "alpic");
91
+ const credentialsPath = join(alpicConfigDir, "credentials.json");
92
+ mkdirSync(alpicConfigDir, { recursive: true });
93
+ const oauthEnv = {
94
+ XDG_CONFIG_HOME: configHome,
95
+ ALPIC_COGNITO_URL: serverUrl,
96
+ ALPIC_API_BASE_URL: serverUrl,
97
+ };
98
+ expect(existsSync(credentialsPath)).toBe(false);
99
+ const { exitCode, output } = await cliSession(process.execPath, [binPath, "logout"], {
100
+ cwd,
101
+ env: {
102
+ ...oauthEnv,
103
+ ALPIC_API_BASE_URL: serverUrl,
104
+ },
105
+ }, async (cli) => {
106
+ await cli.expect("not logged in");
107
+ });
108
+ expect(exitCode).toBe(0);
109
+ expect(output).toContain("You are not logged in");
110
+ });
111
+ it("clears OAuth credentials and shows logged out", async () => {
112
+ const oauthEnv = createOAuthEnv(cwd, serverUrl);
113
+ const credentialsPath = join(cwd, ".config", "alpic", "credentials.json");
114
+ expect(existsSync(credentialsPath)).toBe(true);
115
+ const { exitCode, output } = await cliSession(process.execPath, [binPath, "logout"], {
116
+ cwd,
117
+ env: oauthEnv,
118
+ }, async (cli) => {
119
+ await cli.expect("logged out");
120
+ await cli.expect("authentication cleared");
121
+ });
122
+ expect(exitCode).toBe(0);
123
+ expect(output).toContain("You are logged out");
124
+ expect(output).toMatch(/cleared|logged out/);
125
+ expect(existsSync(credentialsPath)).toBe(false);
126
+ });
127
+ });
128
+ describe("login", () => {
129
+ it("says already logged in when OAuth credentials exist", async () => {
130
+ const oauthEnv = createOAuthEnv(cwd, serverUrl);
131
+ const { exitCode, output } = await cliSession(process.execPath, [binPath, "login"], {
132
+ cwd,
133
+ env: oauthEnv,
134
+ }, async (cli) => {
135
+ await cli.expect("Already logged in");
136
+ });
137
+ expect(exitCode).toBe(0);
138
+ expect(output).toContain("Already logged in");
139
+ });
140
+ });
141
+ });
142
+ //# sourceMappingURL=auth.e2e.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.e2e.test.js","sourceRoot":"","sources":["../../src/__tests__/auth.e2e.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,87 @@
1
+ import { mkdirSync, rmSync, writeFileSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ import { afterEach, beforeEach, describe, expect, it } from "vitest";
4
+ import { MockApiServer } from "./mock-server";
5
+ import { buildMockProject, cliSession, createConfigFile, expectSuccessfulApiCall, setupTestDirectory, verifyConfigFile, verifyDeploymentFlow, } from "./utils";
6
+ describe("alpic deploy (E2E, flags only)", () => {
7
+ let mockServer;
8
+ let serverUrl;
9
+ let cwd;
10
+ let binPath;
11
+ beforeEach(async () => {
12
+ mockServer = new MockApiServer();
13
+ serverUrl = await mockServer.start();
14
+ const setup = await setupTestDirectory();
15
+ cwd = setup.cwd;
16
+ binPath = setup.binPath;
17
+ });
18
+ afterEach(async () => {
19
+ await mockServer.stop();
20
+ if (cwd) {
21
+ rmSync(cwd, { recursive: true, force: true });
22
+ }
23
+ });
24
+ it("creates config and completes deployment with --yes --project-name --runtime --root-dir", async () => {
25
+ mkdirSync(join(cwd, "app"), { recursive: true });
26
+ writeFileSync(join(cwd, "app", "package.json"), "{}");
27
+ const { exitCode, output } = await cliSession(process.execPath, [binPath, "deploy", "--yes", "--project-name", "demo", "--runtime", "node24", "--root-dir", "app"], {
28
+ cwd,
29
+ env: {
30
+ ALPIC_API_BASE_URL: serverUrl,
31
+ ALPIC_API_KEY: "test-api-key",
32
+ },
33
+ }, async (cli) => {
34
+ await cli.expect("Project created.");
35
+ await verifyDeploymentFlow(cli, mockServer);
36
+ });
37
+ expect(exitCode).toBe(0);
38
+ const createProjectCall = mockServer.getLastCall("POST", "/v1/projects");
39
+ expectSuccessfulApiCall(createProjectCall, (call) => {
40
+ expect(call.input).toMatchObject({
41
+ name: "demo",
42
+ runtime: "node24",
43
+ rootDirectory: "app",
44
+ });
45
+ });
46
+ await verifyConfigFile(cwd, output, {
47
+ projectName: "demo",
48
+ environmentName: "production",
49
+ });
50
+ });
51
+ it("deploys with existing config file", async () => {
52
+ const existingProjectId = "existing-project-id";
53
+ const existingTeamId = "mock-team-id";
54
+ const existingEnvId = "existing-env-id";
55
+ const existingEnvName = "production";
56
+ mockServer.addProject(buildMockProject({
57
+ projectId: existingProjectId,
58
+ teamId: existingTeamId,
59
+ projectName: "existing-project",
60
+ environmentId: existingEnvId,
61
+ environmentName: existingEnvName,
62
+ }));
63
+ createConfigFile(cwd, existingProjectId, existingTeamId, "existing-project", existingEnvId, existingEnvName);
64
+ const { exitCode } = await cliSession(process.execPath, [binPath, "deploy", "--yes"], {
65
+ cwd,
66
+ env: {
67
+ ALPIC_API_BASE_URL: serverUrl,
68
+ ALPIC_API_KEY: "test-api-key",
69
+ },
70
+ }, async (cli) => {
71
+ await verifyDeploymentFlow(cli, mockServer);
72
+ });
73
+ expect(exitCode).toBe(0);
74
+ await verifyDeploymentApiCalls(mockServer);
75
+ });
76
+ }, 15_000);
77
+ async function verifyDeploymentApiCalls(mockServer) {
78
+ const uploadCall = mockServer.getLastCall("POST", "/v1/deployments/upload");
79
+ expectSuccessfulApiCall(uploadCall);
80
+ const deployCall = mockServer.getLastCall("POST", /\/v1\/environments\/.*\/deploy/);
81
+ expectSuccessfulApiCall(deployCall);
82
+ const deploymentStatusCalls = mockServer.getCalls("GET", /\/v1\/deployments\/.*/);
83
+ expect(deploymentStatusCalls.length).toBeGreaterThan(0);
84
+ const envCall = mockServer.getLastCall("GET", /\/v1\/environments\/.*/);
85
+ expectSuccessfulApiCall(envCall);
86
+ }
87
+ //# sourceMappingURL=deploy-flags.e2e.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy-flags.e2e.test.js","sourceRoot":"","sources":["../../src/__tests__/deploy-flags.e2e.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,168 @@
1
+ import { rmSync } from "node:fs";
2
+ import { afterEach, beforeEach, describe, expect, it } from "vitest";
3
+ import { MockApiServer } from "./mock-server";
4
+ import { buildMockProject, cliSession, createConfigFile, createOAuthEnv, expectSuccessfulApiCall, setupTestDirectory, verifyConfigFile, verifyDeploymentFlow, } from "./utils";
5
+ describe("alpic deploy (E2E)", () => {
6
+ let mockServer;
7
+ let serverUrl;
8
+ let cwd;
9
+ let binPath;
10
+ beforeEach(async () => {
11
+ mockServer = new MockApiServer();
12
+ serverUrl = await mockServer.start();
13
+ const setup = await setupTestDirectory();
14
+ cwd = setup.cwd;
15
+ binPath = setup.binPath;
16
+ });
17
+ afterEach(async () => {
18
+ await mockServer.stop();
19
+ if (cwd) {
20
+ rmSync(cwd, { recursive: true, force: true });
21
+ }
22
+ });
23
+ it("creates config from prompt flow and completes deployment", async () => {
24
+ const { exitCode, output } = await cliSession(process.execPath, [binPath, "deploy"], {
25
+ cwd,
26
+ env: {
27
+ ALPIC_API_BASE_URL: serverUrl,
28
+ ALPIC_API_KEY: "test-api-key",
29
+ },
30
+ }, async (cli) => {
31
+ await cli.expect("Deploy the directory?");
32
+ await cli.send("");
33
+ await cli.expect("Link to existing project?");
34
+ await cli.send("n");
35
+ await cli.expect("Project name");
36
+ await cli.send("demo");
37
+ await cli.expect("Runtime");
38
+ await cli.send("");
39
+ await cli.expect("Root directory");
40
+ await cli.send("");
41
+ await cli.expect("Project created.");
42
+ const createProjectCall = mockServer.getLastCall("POST", "/v1/projects");
43
+ expectSuccessfulApiCall(createProjectCall, (call) => {
44
+ expect(call.input).toMatchObject({
45
+ name: "demo",
46
+ runtime: "node24",
47
+ });
48
+ });
49
+ await verifyDeploymentFlow(cli, mockServer);
50
+ });
51
+ expect(exitCode).toBe(0);
52
+ await verifyConfigFile(cwd, output, {
53
+ projectName: "demo",
54
+ environmentName: "production",
55
+ });
56
+ });
57
+ it("links to existing project and completes deployment", async () => {
58
+ const existingProjectId = "existing-project-id";
59
+ const existingTeamId = "mock-team-id";
60
+ const existingEnvId = "existing-env-id";
61
+ const existingEnvName = "production";
62
+ mockServer.addProject(buildMockProject({
63
+ projectId: existingProjectId,
64
+ teamId: existingTeamId,
65
+ projectName: "existing-project",
66
+ environmentId: existingEnvId,
67
+ environmentName: existingEnvName,
68
+ }));
69
+ const { exitCode, output } = await cliSession(process.execPath, [binPath, "deploy"], {
70
+ cwd,
71
+ env: {
72
+ ALPIC_API_BASE_URL: serverUrl,
73
+ ALPIC_API_KEY: "test-api-key",
74
+ },
75
+ }, async (cli) => {
76
+ await cli.expect("Deploy the directory?");
77
+ await cli.send("");
78
+ await cli.expect("Link to existing project?");
79
+ await cli.send("y");
80
+ await cli.expect("Choose a project");
81
+ await cli.send("");
82
+ await cli.expect("Choose an environment to deploy to");
83
+ await cli.send("");
84
+ await verifyDeploymentFlow(cli, mockServer);
85
+ });
86
+ expect(exitCode).toBe(0);
87
+ await verifyConfigFile(cwd, output, {
88
+ projectName: "existing-project",
89
+ projectId: existingProjectId,
90
+ teamId: existingTeamId,
91
+ environmentId: existingEnvId,
92
+ environmentName: existingEnvName,
93
+ });
94
+ const listProjectsCall = mockServer.getLastCall("GET", "/v1/projects");
95
+ expectSuccessfulApiCall(listProjectsCall);
96
+ });
97
+ it("deploys with existing config file", async () => {
98
+ const existingProjectId = "existing-project-id";
99
+ const existingTeamId = "mock-team-id";
100
+ const existingEnvId = "existing-env-id";
101
+ const existingEnvName = "production";
102
+ mockServer.addProject(buildMockProject({
103
+ projectId: existingProjectId,
104
+ teamId: existingTeamId,
105
+ projectName: "existing-project",
106
+ environmentId: existingEnvId,
107
+ environmentName: existingEnvName,
108
+ }));
109
+ createConfigFile(cwd, existingProjectId, existingTeamId, "existing-project", existingEnvId, existingEnvName);
110
+ const { exitCode, output } = await cliSession(process.execPath, [binPath, "deploy"], {
111
+ cwd,
112
+ env: {
113
+ ALPIC_API_BASE_URL: serverUrl,
114
+ ALPIC_API_KEY: "test-api-key",
115
+ },
116
+ }, async (cli) => {
117
+ await cli.expect("Deploy the directory?");
118
+ await cli.send("");
119
+ await cli.expect(`Deploy project "existing-project" to environment "production"?`);
120
+ await cli.send("");
121
+ await verifyDeploymentFlow(cli, mockServer);
122
+ });
123
+ expect(exitCode).toBe(0);
124
+ await verifyConfigFile(cwd, output, {
125
+ projectName: "existing-project",
126
+ projectId: existingProjectId,
127
+ teamId: existingTeamId,
128
+ environmentId: existingEnvId,
129
+ environmentName: existingEnvName,
130
+ });
131
+ });
132
+ it("deploys with existing config using OAuth auth (no API key)", async () => {
133
+ const existingProjectId = "existing-project-id";
134
+ const existingTeamId = "mock-team-id";
135
+ const existingEnvId = "existing-env-id";
136
+ const existingEnvName = "production";
137
+ mockServer.addProject(buildMockProject({
138
+ projectId: existingProjectId,
139
+ teamId: existingTeamId,
140
+ projectName: "existing-project",
141
+ environmentId: existingEnvId,
142
+ environmentName: existingEnvName,
143
+ }));
144
+ createConfigFile(cwd, existingProjectId, existingTeamId, "existing-project", existingEnvId, existingEnvName);
145
+ const oauthEnv = createOAuthEnv(cwd, serverUrl);
146
+ const { exitCode, output } = await cliSession(process.execPath, [binPath, "deploy"], {
147
+ cwd,
148
+ env: {
149
+ ...oauthEnv,
150
+ },
151
+ }, async (cli) => {
152
+ await cli.expect("Deploy the directory?");
153
+ await cli.send("");
154
+ await cli.expect(`Deploy project "existing-project" to environment "production"?`);
155
+ await cli.send("");
156
+ await verifyDeploymentFlow(cli, mockServer);
157
+ });
158
+ expect(exitCode).toBe(0);
159
+ await verifyConfigFile(cwd, output, {
160
+ projectName: "existing-project",
161
+ projectId: existingProjectId,
162
+ teamId: existingTeamId,
163
+ environmentId: existingEnvId,
164
+ environmentName: existingEnvName,
165
+ });
166
+ });
167
+ }, 15_000);
168
+ //# sourceMappingURL=deploy.e2e.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy.e2e.test.js","sourceRoot":"","sources":["../../src/__tests__/deploy.e2e.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,4 @@
1
+ console.log("Hello from Alpic!");
2
+ module.exports = {};
3
+ export {};
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/__tests__/fixtures/demo-project/index.js"],"names":[],"mappings":"AAAA,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;AACjC,MAAM,CAAC,OAAO,GAAG,EAAE,CAAC"}
@@ -0,0 +1 @@
1
+ export {};