@alwaysmeticulous/cli 1.0.0 → 1.1.0

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.
@@ -6,5 +6,4 @@ export interface ProjectBuildPushUrlOutput {
6
6
  pushUrl: string;
7
7
  }
8
8
  export declare const getProjectBuildPushUrl: (client: AxiosInstance, projectBuildId: string) => Promise<ProjectBuildPushUrlOutput | null>;
9
- export declare const uploadProjectBuildArchive: (uploadUrl: string, archivePath: string) => Promise<void>;
10
9
  export declare const putProjectBuildPushedStatus: (client: AxiosInstance, projectBuildId: string, status: "success" | "failure") => Promise<any>;
@@ -3,9 +3,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.putProjectBuildPushedStatus = exports.uploadProjectBuildArchive = exports.getProjectBuildPushUrl = exports.createProjectBuild = exports.getProjectBuild = void 0;
6
+ exports.putProjectBuildPushedStatus = exports.getProjectBuildPushUrl = exports.createProjectBuild = exports.getProjectBuild = void 0;
7
7
  const axios_1 = __importDefault(require("axios"));
8
- const promises_1 = require("fs/promises");
9
8
  const getProjectBuild = async (client, projectBuildId) => {
10
9
  const { data } = await client
11
10
  .get(`project-builds/${projectBuildId}`)
@@ -22,7 +21,7 @@ const getProjectBuild = async (client, projectBuildId) => {
22
21
  };
23
22
  exports.getProjectBuild = getProjectBuild;
24
23
  const createProjectBuild = async (client, commitSha) => {
25
- const { data } = await client.post(`project-builds`, {
24
+ const { data } = await client.post("project-builds", {
26
25
  commitSha,
27
26
  });
28
27
  return data;
@@ -43,16 +42,6 @@ const getProjectBuildPushUrl = async (client, projectBuildId) => {
43
42
  return data;
44
43
  };
45
44
  exports.getProjectBuildPushUrl = getProjectBuildPushUrl;
46
- const uploadProjectBuildArchive = async (uploadUrl, archivePath) => {
47
- await axios_1.default.put(uploadUrl, await (0, promises_1.readFile)(archivePath), {
48
- headers: {
49
- "Content-Type": "application/zip",
50
- },
51
- maxBodyLength: Infinity,
52
- maxContentLength: Infinity,
53
- });
54
- };
55
- exports.uploadProjectBuildArchive = uploadProjectBuildArchive;
56
45
  const putProjectBuildPushedStatus = async (client, projectBuildId, status) => {
57
46
  const { data } = await client.put(`project-builds/${projectBuildId}/pushed`, {
58
47
  status,
@@ -0,0 +1,17 @@
1
+ import { AxiosInstance } from "axios";
2
+ export declare const getReplay: (client: AxiosInstance, replayId: string) => Promise<any>;
3
+ export declare const createReplay: (options: {
4
+ client: AxiosInstance;
5
+ commitSha: string;
6
+ sessionId: string;
7
+ meticulousSha: string;
8
+ metadata: {
9
+ [key: string]: any;
10
+ };
11
+ }) => Promise<any>;
12
+ export interface ReplayPushUrlOutput {
13
+ replayId: string;
14
+ pushUrl: string;
15
+ }
16
+ export declare const getReplayPushUrl: (client: AxiosInstance, replayId: string) => Promise<ReplayPushUrlOutput | null>;
17
+ export declare const putReplayPushedStatus: (client: AxiosInstance, projectBuildId: string, status: "success" | "failure") => Promise<any>;
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.putReplayPushedStatus = exports.getReplayPushUrl = exports.createReplay = exports.getReplay = void 0;
7
+ const axios_1 = __importDefault(require("axios"));
8
+ const getReplay = async (client, replayId) => {
9
+ const { data } = await client.get(`replays/${replayId}`).catch((error) => {
10
+ var _a;
11
+ if (axios_1.default.isAxiosError(error)) {
12
+ if (((_a = error.response) === null || _a === void 0 ? void 0 : _a.status) === 404) {
13
+ return { data: null };
14
+ }
15
+ }
16
+ throw error;
17
+ });
18
+ return data;
19
+ };
20
+ exports.getReplay = getReplay;
21
+ const createReplay = async ({ client, commitSha, sessionId, meticulousSha, metadata, }) => {
22
+ const { data } = await client.post("replays", {
23
+ commitSha,
24
+ sessionId,
25
+ meticulousSha,
26
+ metadata,
27
+ });
28
+ return data;
29
+ };
30
+ exports.createReplay = createReplay;
31
+ const getReplayPushUrl = async (client, replayId) => {
32
+ const { data } = await client
33
+ .get(`replays/${replayId}/push-url`)
34
+ .catch((error) => {
35
+ var _a;
36
+ if (axios_1.default.isAxiosError(error)) {
37
+ if (((_a = error.response) === null || _a === void 0 ? void 0 : _a.status) === 404) {
38
+ return { data: null };
39
+ }
40
+ }
41
+ throw error;
42
+ });
43
+ return data;
44
+ };
45
+ exports.getReplayPushUrl = getReplayPushUrl;
46
+ const putReplayPushedStatus = async (client, projectBuildId, status) => {
47
+ const { data } = await client.put(`replays/${projectBuildId}/pushed`, {
48
+ status,
49
+ });
50
+ return data;
51
+ };
52
+ exports.putReplayPushedStatus = putReplayPushedStatus;
@@ -0,0 +1,3 @@
1
+ import { AxiosInstance } from "axios";
2
+ export declare const getRecordedSession: (client: AxiosInstance, sessionId: string) => Promise<any>;
3
+ export declare const getRecordedSessionData: (client: AxiosInstance, sessionId: string) => Promise<any>;
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getRecordedSessionData = exports.getRecordedSession = void 0;
7
+ const axios_1 = __importDefault(require("axios"));
8
+ const getRecordedSession = async (client, sessionId) => {
9
+ const { data } = await client.get(`sessions/${sessionId}`).catch((error) => {
10
+ var _a;
11
+ if (axios_1.default.isAxiosError(error)) {
12
+ if (((_a = error.response) === null || _a === void 0 ? void 0 : _a.status) === 404) {
13
+ return { data: null };
14
+ }
15
+ }
16
+ throw error;
17
+ });
18
+ return data;
19
+ };
20
+ exports.getRecordedSession = getRecordedSession;
21
+ const getRecordedSessionData = async (client, sessionId) => {
22
+ const { data } = await client
23
+ .get(`sessions/${sessionId}/data`)
24
+ .catch((error) => {
25
+ var _a;
26
+ if (axios_1.default.isAxiosError(error)) {
27
+ if (((_a = error.response) === null || _a === void 0 ? void 0 : _a.status) === 404) {
28
+ return { data: null };
29
+ }
30
+ }
31
+ throw error;
32
+ });
33
+ return data;
34
+ };
35
+ exports.getRecordedSessionData = getRecordedSessionData;
@@ -0,0 +1 @@
1
+ export declare const uploadArchive: (uploadUrl: string, archivePath: string) => Promise<void>;
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.uploadArchive = void 0;
7
+ const axios_1 = __importDefault(require("axios"));
8
+ const promises_1 = require("fs/promises");
9
+ const uploadArchive = async (uploadUrl, archivePath) => {
10
+ await axios_1.default.put(uploadUrl, await (0, promises_1.readFile)(archivePath), {
11
+ headers: {
12
+ "Content-Type": "application/zip",
13
+ },
14
+ maxBodyLength: Infinity,
15
+ maxContentLength: Infinity,
16
+ });
17
+ };
18
+ exports.uploadArchive = uploadArchive;
@@ -1,3 +1,4 @@
1
1
  export declare const checkDistFolder: (dist: string) => Promise<void>;
2
2
  export declare const createArchive: (dist: string) => Promise<string>;
3
+ export declare const createReplayArchive: (dir: string) => Promise<string>;
3
4
  export declare const deleteArchive: (archivePath: string) => Promise<void>;
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.deleteArchive = exports.createArchive = exports.checkDistFolder = void 0;
6
+ exports.deleteArchive = exports.createReplayArchive = exports.createArchive = exports.checkDistFolder = void 0;
7
7
  const path_1 = require("path");
8
8
  const promises_1 = require("fs/promises");
9
9
  const os_1 = require("os");
@@ -38,6 +38,25 @@ const createArchive = async (dist_) => {
38
38
  return archivePath;
39
39
  };
40
40
  exports.createArchive = createArchive;
41
+ const createReplayArchive = async (dir) => {
42
+ const tempDir = await (0, promises_1.mkdtemp)((0, path_1.join)((0, os_1.tmpdir)(), "meticulous-"));
43
+ const archivePath = (0, path_1.join)(tempDir, "replay.zip");
44
+ const fileStream = (0, fs_1.createWriteStream)(archivePath);
45
+ const archive = (0, archiver_1.default)("zip");
46
+ await new Promise((resolve, reject) => {
47
+ archive.on("error", (err) => reject(err));
48
+ fileStream.on("close", () => {
49
+ resolve(null);
50
+ });
51
+ archive.pipe(fileStream);
52
+ archive.directory(dir, false);
53
+ archive.finalize().catch((error) => {
54
+ throw error;
55
+ });
56
+ });
57
+ return archivePath;
58
+ };
59
+ exports.createReplayArchive = createReplayArchive;
41
60
  const deleteArchive = async (archivePath) => {
42
61
  const dir = (0, path_1.dirname)(archivePath);
43
62
  await (0, promises_1.rm)(dir, { force: true, recursive: true });
@@ -0,0 +1,7 @@
1
+ import { CommandModule } from "yargs";
2
+ interface Options {
3
+ apiToken?: string | null | undefined;
4
+ sessionId: string;
5
+ }
6
+ export declare const downloadSession: CommandModule<{}, Options>;
7
+ export {};
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.downloadSession = void 0;
4
+ const client_1 = require("../../api/client");
5
+ const sessions_1 = require("../../local-data/sessions");
6
+ const handler = async ({ apiToken, sessionId, }) => {
7
+ const client = (0, client_1.createClient)({ apiToken });
8
+ await (0, sessions_1.getOrFetchRecordedSession)(client, sessionId);
9
+ await (0, sessions_1.getOrFetchRecordedSessionData)(client, sessionId);
10
+ };
11
+ exports.downloadSession = {
12
+ command: "download-session",
13
+ describe: "Download recorded session from Meticulous",
14
+ builder: {
15
+ apiToken: {
16
+ string: true,
17
+ },
18
+ sessionId: {
19
+ string: true,
20
+ demandOption: true,
21
+ },
22
+ },
23
+ handler,
24
+ };
@@ -0,0 +1,9 @@
1
+ import { CommandModule } from "yargs";
2
+ interface Options {
3
+ apiToken?: string | null | undefined;
4
+ commitSha?: string | null | undefined;
5
+ sessionId: string;
6
+ appUrl: string;
7
+ }
8
+ export declare const replay: CommandModule<{}, Options>;
9
+ export {};
@@ -0,0 +1,139 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.replay = void 0;
4
+ const promises_1 = require("fs/promises");
5
+ const luxon_1 = require("luxon");
6
+ const path_1 = require("path");
7
+ const client_1 = require("../../api/client");
8
+ const replay_api_1 = require("../../api/replay.api");
9
+ const upload_1 = require("../../api/upload");
10
+ const archive_1 = require("../../archive/archive");
11
+ const local_data_1 = require("../../local-data/local-data");
12
+ const replay_assets_1 = require("../../local-data/replay-assets");
13
+ const sessions_1 = require("../../local-data/sessions");
14
+ const commit_sha_utils_1 = require("../../utils/commit-sha.utils");
15
+ const version_utils_1 = require("../../utils/version.utils");
16
+ const handler = async ({ apiToken, commitSha: commitSha_, sessionId, appUrl, }) => {
17
+ const client = (0, client_1.createClient)({ apiToken });
18
+ // 1. Check session files
19
+ const session = await (0, sessions_1.getOrFetchRecordedSession)(client, sessionId);
20
+ const sessionData = await (0, sessions_1.getOrFetchRecordedSessionData)(client, sessionId);
21
+ // 2. Guess commit SHA1
22
+ const commitSha = (await (0, commit_sha_utils_1.getCommitSha)(commitSha_)) || "unknown";
23
+ console.log(`Commit: ${commitSha}`);
24
+ const meticulousSha = await (0, version_utils_1.getMeticulousVersion)();
25
+ // 3. Load replay assets
26
+ const reanimator = await (0, replay_assets_1.fetchAsset)("https://snippet.meticulous.ai/replay/v1/reanimator.bundle.js");
27
+ const replayNetworkFile = await (0, replay_assets_1.fetchAsset)("https://snippet.meticulous.ai/replay/v1/replay-network-events.bundle.js");
28
+ const jsReplay = await (0, replay_assets_1.fetchAsset)("https://snippet.meticulous.ai/replay/v1/replay-only-replayjs-forked.js");
29
+ const rrweb = await (0, replay_assets_1.fetchAsset)("https://snippet.meticulous.ai/replay/v1/rrweb.js");
30
+ // 4. Load replay package
31
+ let replayEvents;
32
+ try {
33
+ const replayer = await require("@alwaysmeticulous/replayer");
34
+ replayEvents = replayer.replayEvents;
35
+ }
36
+ catch (error) {
37
+ console.error("Error: could not import @alwaysmeticulous/replayer");
38
+ console.error(error);
39
+ process.exit(1);
40
+ }
41
+ // 5. Create replay directory
42
+ await (0, promises_1.mkdir)((0, path_1.join)((0, local_data_1.getMeticulousLocalDataDir)(), "replays"), {
43
+ recursive: true,
44
+ });
45
+ const tempDir = await (0, promises_1.mkdtemp)((0, path_1.join)((0, local_data_1.getMeticulousLocalDataDir)(), "replays", `${new Date().toISOString()}-`));
46
+ // 6. Create and save replay parameters
47
+ const replayEventsParams = {
48
+ appUrl,
49
+ browser: null,
50
+ tempDir,
51
+ session,
52
+ sessionData,
53
+ recordingId: "manual-replay",
54
+ meticulousSha: "meticulousSha",
55
+ headless: false,
56
+ devTools: false,
57
+ dependencies: {
58
+ reanimator: {
59
+ key: "reanimator",
60
+ location: reanimator,
61
+ },
62
+ replayNetworkFile: {
63
+ key: "replayNetworkFile",
64
+ location: replayNetworkFile,
65
+ },
66
+ jsReplay: {
67
+ key: "jsReplay",
68
+ location: jsReplay,
69
+ },
70
+ rrweb: {
71
+ key: "rrweb",
72
+ location: rrweb,
73
+ },
74
+ },
75
+ };
76
+ await (0, promises_1.writeFile)((0, path_1.join)(tempDir, "replayEventsParams.json"), JSON.stringify(replayEventsParams));
77
+ // 7. Perform replay
78
+ console.log("Starting replay...");
79
+ const startTime = luxon_1.DateTime.utc();
80
+ const { eventsFinishedPromise, writesFinishedPromise } = await replayEvents(replayEventsParams);
81
+ await eventsFinishedPromise;
82
+ await writesFinishedPromise;
83
+ const endTime = luxon_1.DateTime.utc();
84
+ console.log(`Replay time: ${endTime.diff(startTime).as("seconds")} seconds`);
85
+ console.log("Sending replay results to Meticulous");
86
+ // 8. Create a Zip archive containing the replay files
87
+ const archivePath = await (0, archive_1.createReplayArchive)(tempDir);
88
+ // 9. Get upload URL
89
+ const replay = await (0, replay_api_1.createReplay)({
90
+ client,
91
+ commitSha,
92
+ sessionId,
93
+ meticulousSha,
94
+ metadata: {},
95
+ });
96
+ const uploadUrlData = await (0, replay_api_1.getReplayPushUrl)(client, replay.id);
97
+ if (!uploadUrlData) {
98
+ console.error("Error: Could not get a push URL from the Meticulous API");
99
+ process.exit(1);
100
+ }
101
+ const uploadUrl = uploadUrlData.pushUrl;
102
+ // 10. Send archive to S3
103
+ try {
104
+ await (0, upload_1.uploadArchive)(uploadUrl, archivePath);
105
+ }
106
+ catch (error) {
107
+ await (0, replay_api_1.putReplayPushedStatus)(client, replay.id, "failure").catch((updateError) => console.error(updateError));
108
+ console.error(error);
109
+ process.exit(1);
110
+ }
111
+ // 11. Report successful upload to Meticulous
112
+ const updatedProjectBuild = await (0, replay_api_1.putReplayPushedStatus)(client, replay.id, "success");
113
+ console.log("Replay artifacts successfully sent to Meticulous");
114
+ console.log(updatedProjectBuild);
115
+ const replayUrl = `https://app.meticulous.ai/projects/${replay.project.organization.name}/${replay.project.name}/replays/${replay.id}`;
116
+ console.log(`View replay at: ${replayUrl}`);
117
+ await (0, archive_1.deleteArchive)(archivePath);
118
+ };
119
+ exports.replay = {
120
+ command: "replay",
121
+ describe: "Replay a recorded session",
122
+ builder: {
123
+ apiToken: {
124
+ string: true,
125
+ },
126
+ commitSha: {
127
+ string: true,
128
+ },
129
+ sessionId: {
130
+ string: true,
131
+ demandOption: true,
132
+ },
133
+ appUrl: {
134
+ string: true,
135
+ demandOption: true,
136
+ },
137
+ },
138
+ handler,
139
+ };
@@ -4,6 +4,7 @@ exports.uploadBuild = void 0;
4
4
  const client_1 = require("../../api/client");
5
5
  const project_build_api_1 = require("../../api/project-build.api");
6
6
  const project_api_1 = require("../../api/project.api");
7
+ const upload_1 = require("../../api/upload");
7
8
  const archive_1 = require("../../archive/archive");
8
9
  const commit_sha_utils_1 = require("../../utils/commit-sha.utils");
9
10
  const handler = async ({ apiToken, commitSha: commitSha_, dist, }) => {
@@ -48,7 +49,7 @@ const handler = async ({ apiToken, commitSha: commitSha_, dist, }) => {
48
49
  const uploadUrl = uploadUrlData.pushUrl;
49
50
  // 5. Send archive to S3
50
51
  try {
51
- await (0, project_build_api_1.uploadProjectBuildArchive)(uploadUrl, archivePath);
52
+ await (0, upload_1.uploadArchive)(uploadUrl, archivePath);
52
53
  }
53
54
  catch (error) {
54
55
  await (0, project_build_api_1.putProjectBuildPushedStatus)(client, projectBuild.id, "failure").catch((updateError) => console.error(updateError));
package/dist/index.d.ts CHANGED
@@ -1,2 +1,4 @@
1
+ export { downloadSession } from "./commands/download-session/download-session.command";
2
+ export { replay } from "./commands/replay/replay.command";
1
3
  export { showProject } from "./commands/show-project/show-project.command";
2
4
  export { uploadBuild } from "./commands/upload-build/upload-build.command";
package/dist/index.js CHANGED
@@ -1,6 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.uploadBuild = exports.showProject = void 0;
3
+ exports.uploadBuild = exports.showProject = exports.replay = exports.downloadSession = void 0;
4
+ var download_session_command_1 = require("./commands/download-session/download-session.command");
5
+ Object.defineProperty(exports, "downloadSession", { enumerable: true, get: function () { return download_session_command_1.downloadSession; } });
6
+ var replay_command_1 = require("./commands/replay/replay.command");
7
+ Object.defineProperty(exports, "replay", { enumerable: true, get: function () { return replay_command_1.replay; } });
4
8
  var show_project_command_1 = require("./commands/show-project/show-project.command");
5
9
  Object.defineProperty(exports, "showProject", { enumerable: true, get: function () { return show_project_command_1.showProject; } });
6
10
  var upload_build_command_1 = require("./commands/upload-build/upload-build.command");
@@ -0,0 +1 @@
1
+ export declare const getMeticulousLocalDataDir: (localDataDir?: string | null | undefined) => string;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getMeticulousLocalDataDir = void 0;
4
+ const path_1 = require("path");
5
+ let _localDataDir = "";
6
+ const getMeticulousLocalDataDir = (localDataDir) => {
7
+ if (_localDataDir) {
8
+ return _localDataDir;
9
+ }
10
+ _localDataDir =
11
+ localDataDir ||
12
+ process.env["METICULOUS_DIR"] ||
13
+ (0, path_1.normalize)((0, path_1.join)(process.env["HOME"] || process.cwd(), ".meticulous"));
14
+ return _localDataDir;
15
+ };
16
+ exports.getMeticulousLocalDataDir = getMeticulousLocalDataDir;
@@ -0,0 +1,11 @@
1
+ export interface AssetMetadataItem {
2
+ fileName: string;
3
+ etag: string;
4
+ fetchUrl: string;
5
+ }
6
+ export interface AssetMetadata {
7
+ assets: AssetMetadataItem[];
8
+ }
9
+ export declare const loadAssetMetadata: () => Promise<AssetMetadata>;
10
+ export declare const saveAssetMetadata: (assetMetadata: AssetMetadata) => Promise<void>;
11
+ export declare const fetchAsset: (fetchUrl: string) => Promise<string>;
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.fetchAsset = exports.saveAssetMetadata = exports.loadAssetMetadata = void 0;
7
+ const axios_1 = __importDefault(require("axios"));
8
+ const promises_1 = require("fs/promises");
9
+ const path_1 = require("path");
10
+ const local_data_1 = require("./local-data");
11
+ const loadAssetMetadata = async () => {
12
+ const assetsDir = (0, path_1.join)((0, local_data_1.getMeticulousLocalDataDir)(), "assets");
13
+ await (0, promises_1.mkdir)(assetsDir, { recursive: true });
14
+ const assetsFile = (0, path_1.join)(assetsDir, `assets.json`);
15
+ const existingMetadata = await (0, promises_1.readFile)(assetsFile)
16
+ .then((data) => JSON.parse(data.toString("utf-8")))
17
+ .catch(() => null);
18
+ if (existingMetadata) {
19
+ return existingMetadata;
20
+ }
21
+ return { assets: [] };
22
+ };
23
+ exports.loadAssetMetadata = loadAssetMetadata;
24
+ const saveAssetMetadata = async (assetMetadata) => {
25
+ const assetsDir = (0, path_1.join)((0, local_data_1.getMeticulousLocalDataDir)(), "assets");
26
+ await (0, promises_1.mkdir)(assetsDir, { recursive: true });
27
+ const assetsFile = (0, path_1.join)(assetsDir, `assets.json`);
28
+ await (0, promises_1.writeFile)(assetsFile, JSON.stringify(assetMetadata, null, 2));
29
+ };
30
+ exports.saveAssetMetadata = saveAssetMetadata;
31
+ const fetchAsset = async (fetchUrl) => {
32
+ const assetsDir = (0, path_1.join)((0, local_data_1.getMeticulousLocalDataDir)(), "assets");
33
+ const assetMetadata = await (0, exports.loadAssetMetadata)();
34
+ const etag = (await axios_1.default.head(fetchUrl)).headers["etag"] || "";
35
+ const entry = assetMetadata.assets.find((item) => item.fetchUrl === fetchUrl);
36
+ const fileName = entry
37
+ ? entry.fileName
38
+ : (0, path_1.basename)(new URL(fetchUrl).pathname);
39
+ const filePath = (0, path_1.join)(assetsDir, fileName);
40
+ if (entry && etag === entry.etag) {
41
+ console.log(`${fetchUrl} already present`);
42
+ return filePath;
43
+ }
44
+ const contents = (await axios_1.default.get(fetchUrl)).data;
45
+ await (0, promises_1.writeFile)(filePath, contents);
46
+ if (entry) {
47
+ console.log(`${fetchUrl} updated`);
48
+ entry.etag = etag;
49
+ }
50
+ else {
51
+ console.log(`${fetchUrl} downloaded`);
52
+ assetMetadata.assets.push({ fileName, etag, fetchUrl });
53
+ }
54
+ await (0, exports.saveAssetMetadata)(assetMetadata);
55
+ return filePath;
56
+ };
57
+ exports.fetchAsset = fetchAsset;
@@ -0,0 +1,3 @@
1
+ import { AxiosInstance } from "axios";
2
+ export declare const getOrFetchRecordedSession: (client: AxiosInstance, sessionId: string) => Promise<any>;
3
+ export declare const getOrFetchRecordedSessionData: (client: AxiosInstance, sessionId: string) => Promise<any>;
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getOrFetchRecordedSessionData = exports.getOrFetchRecordedSession = void 0;
4
+ const promises_1 = require("fs/promises");
5
+ const path_1 = require("path");
6
+ const session_api_1 = require("../api/session.api");
7
+ const local_data_1 = require("./local-data");
8
+ const getOrFetchRecordedSession = async (client, sessionId) => {
9
+ const sessionsDir = (0, path_1.join)((0, local_data_1.getMeticulousLocalDataDir)(), "sessions");
10
+ await (0, promises_1.mkdir)(sessionsDir, { recursive: true });
11
+ const sessionFile = (0, path_1.join)(sessionsDir, `${sessionId}.json`);
12
+ const existingSession = await (0, promises_1.readFile)(sessionFile)
13
+ .then((data) => JSON.parse(data.toString("utf-8")))
14
+ .catch(() => null);
15
+ if (existingSession) {
16
+ console.log(`Reading session from local copy in ${sessionFile}`);
17
+ return existingSession;
18
+ }
19
+ const session = await (0, session_api_1.getRecordedSession)(client, sessionId);
20
+ if (!session) {
21
+ console.error("Error: Could not retrieve session. Is the API token correct?");
22
+ process.exit(1);
23
+ }
24
+ await (0, promises_1.writeFile)(sessionFile, JSON.stringify(session, null, 2));
25
+ console.log(`Wrote session to ${sessionFile}`);
26
+ return session;
27
+ };
28
+ exports.getOrFetchRecordedSession = getOrFetchRecordedSession;
29
+ const getOrFetchRecordedSessionData = async (client, sessionId) => {
30
+ const sessionsDir = (0, path_1.join)((0, local_data_1.getMeticulousLocalDataDir)(), "sessions");
31
+ await (0, promises_1.mkdir)(sessionsDir, { recursive: true });
32
+ const sessionDataFile = (0, path_1.join)(sessionsDir, `${sessionId}_data.json`);
33
+ const existingSessionData = await (0, promises_1.readFile)(sessionDataFile)
34
+ .then((data) => JSON.parse(data.toString("utf-8")))
35
+ .catch(() => null);
36
+ if (existingSessionData) {
37
+ console.log(`Reading session data from local copy in ${sessionDataFile}`);
38
+ return existingSessionData;
39
+ }
40
+ const sessionData = await (0, session_api_1.getRecordedSessionData)(client, sessionId);
41
+ if (!sessionData) {
42
+ console.error("Error: Could not retrieve session data. This may be an invalid session");
43
+ process.exit(1);
44
+ }
45
+ await (0, promises_1.writeFile)(sessionDataFile, JSON.stringify(sessionData, null, 2));
46
+ console.log(`Wrote session data to ${sessionDataFile}`);
47
+ return sessionData;
48
+ };
49
+ exports.getOrFetchRecordedSessionData = getOrFetchRecordedSessionData;
package/dist/main.js CHANGED
@@ -5,19 +5,34 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.main = void 0;
7
7
  const yargs_1 = __importDefault(require("yargs"));
8
+ const download_session_command_1 = require("./commands/download-session/download-session.command");
9
+ const replay_command_1 = require("./commands/replay/replay.command");
8
10
  const show_project_command_1 = require("./commands/show-project/show-project.command");
9
11
  const upload_build_command_1 = require("./commands/upload-build/upload-build.command");
12
+ const local_data_1 = require("./local-data/local-data");
13
+ const handleDataDir = (dataDir) => {
14
+ (0, local_data_1.getMeticulousLocalDataDir)(dataDir);
15
+ };
10
16
  const main = () => {
11
17
  const promise = yargs_1.default
12
18
  .scriptName("meticulous")
13
19
  .usage(`$0 <command>
14
20
 
15
21
  Meticulous CLI`)
22
+ .command(download_session_command_1.downloadSession)
23
+ .command(replay_command_1.replay)
16
24
  .command(show_project_command_1.showProject)
17
25
  .command(upload_build_command_1.uploadBuild)
18
26
  .help()
19
27
  .strictCommands()
20
- .demandCommand().argv;
28
+ .demandCommand()
29
+ .option({
30
+ dataDir: {
31
+ string: true,
32
+ description: "Where Meticulous stores data (sessions, replays, etc.)",
33
+ },
34
+ })
35
+ .middleware([(argv) => handleDataDir(argv.dataDir)]).argv;
21
36
  if (promise instanceof Promise) {
22
37
  promise.catch((error) => {
23
38
  console.error(error);
@@ -1 +1 @@
1
- {"program":{"fileNames":["../../../node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/typescript/lib/lib.es2020.d.ts","../../../node_modules/typescript/lib/lib.dom.d.ts","../../../node_modules/typescript/lib/lib.dom.iterable.d.ts","../../../node_modules/typescript/lib/lib.webworker.importscripts.d.ts","../../../node_modules/typescript/lib/lib.scripthost.d.ts","../../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/typescript/lib/lib.esnext.intl.d.ts","../../../node_modules/typescript/lib/lib.es2019.full.d.ts","../../../node_modules/@types/yargs-parser/index.d.ts","../../../node_modules/@types/yargs/index.d.ts","../../../node_modules/axios/index.d.ts","../src/utils/api-token.utils.ts","../src/api/client.ts","../src/api/project.api.ts","../src/commands/show-project/show-project.command.ts","../src/api/project-build.api.ts","../../../node_modules/@types/node/assert.d.ts","../../../node_modules/@types/node/assert/strict.d.ts","../../../node_modules/@types/node/globals.d.ts","../../../node_modules/@types/node/async_hooks.d.ts","../../../node_modules/@types/node/buffer.d.ts","../../../node_modules/@types/node/child_process.d.ts","../../../node_modules/@types/node/cluster.d.ts","../../../node_modules/@types/node/console.d.ts","../../../node_modules/@types/node/constants.d.ts","../../../node_modules/@types/node/crypto.d.ts","../../../node_modules/@types/node/dgram.d.ts","../../../node_modules/@types/node/diagnostics_channel.d.ts","../../../node_modules/@types/node/dns.d.ts","../../../node_modules/@types/node/dns/promises.d.ts","../../../node_modules/@types/node/domain.d.ts","../../../node_modules/@types/node/events.d.ts","../../../node_modules/@types/node/fs.d.ts","../../../node_modules/@types/node/fs/promises.d.ts","../../../node_modules/@types/node/http.d.ts","../../../node_modules/@types/node/http2.d.ts","../../../node_modules/@types/node/https.d.ts","../../../node_modules/@types/node/inspector.d.ts","../../../node_modules/@types/node/module.d.ts","../../../node_modules/@types/node/net.d.ts","../../../node_modules/@types/node/os.d.ts","../../../node_modules/@types/node/path.d.ts","../../../node_modules/@types/node/perf_hooks.d.ts","../../../node_modules/@types/node/process.d.ts","../../../node_modules/@types/node/punycode.d.ts","../../../node_modules/@types/node/querystring.d.ts","../../../node_modules/@types/node/readline.d.ts","../../../node_modules/@types/node/repl.d.ts","../../../node_modules/@types/node/stream.d.ts","../../../node_modules/@types/node/stream/promises.d.ts","../../../node_modules/@types/node/stream/consumers.d.ts","../../../node_modules/@types/node/stream/web.d.ts","../../../node_modules/@types/node/string_decoder.d.ts","../../../node_modules/@types/node/timers.d.ts","../../../node_modules/@types/node/timers/promises.d.ts","../../../node_modules/@types/node/tls.d.ts","../../../node_modules/@types/node/trace_events.d.ts","../../../node_modules/@types/node/tty.d.ts","../../../node_modules/@types/node/url.d.ts","../../../node_modules/@types/node/util.d.ts","../../../node_modules/@types/node/v8.d.ts","../../../node_modules/@types/node/vm.d.ts","../../../node_modules/@types/node/wasi.d.ts","../../../node_modules/@types/node/worker_threads.d.ts","../../../node_modules/@types/node/zlib.d.ts","../../../node_modules/@types/node/globals.global.d.ts","../../../node_modules/@types/node/index.d.ts","../../../node_modules/@types/minimatch/index.d.ts","../../../node_modules/@types/glob/index.d.ts","../../../node_modules/@types/archiver/index.d.ts","../src/archive/archive.ts","../src/utils/commit-sha.utils.ts","../src/commands/upload-build/upload-build.command.ts","../src/index.ts","../src/main.ts","../../../node_modules/@types/minimist/index.d.ts","../../../node_modules/@types/normalize-package-data/index.d.ts","../../../node_modules/@types/parse-json/index.d.ts"],"fileInfos":[{"version":"89f78430e422a0f06d13019d60d5a45b37ec2d28e67eb647f73b1b0d19a46b72","affectsGlobalScope":true},"dc47c4fa66b9b9890cf076304de2a9c5201e94b740cffdf09f87296d877d71f6","7a387c58583dfca701b6c85e0adaf43fb17d590fb16d5b2dc0a2fbd89f35c467","8a12173c586e95f4433e0c6dc446bc88346be73ffe9ca6eec7aa63c8f3dca7f9","5f4e733ced4e129482ae2186aae29fde948ab7182844c3a5a51dd346182c7b06","e6b724280c694a9f588847f754198fb96c43d805f065c3a5b28bbc9594541c84","e21c071ca3e1b4a815d5f04a7475adcaeea5d64367e840dd0154096d705c3940",{"version":"abba1071bfd89e55e88a054b0c851ea3e8a494c340d0f3fab19eb18f6afb0c9e","affectsGlobalScope":true},{"version":"927cb2b60048e1395b183bf74b2b80a75bdb1dbe384e1d9fac654313ea2fb136","affectsGlobalScope":true},{"version":"7fac8cb5fc820bc2a59ae11ef1c5b38d3832c6d0dfaec5acdb5569137d09a481","affectsGlobalScope":true},{"version":"097a57355ded99c68e6df1b738990448e0bf170e606707df5a7c0481ff2427cd","affectsGlobalScope":true},{"version":"d8996609230d17e90484a2dd58f22668f9a05a3bfe00bfb1d6271171e54a31fb","affectsGlobalScope":true},{"version":"43fb1d932e4966a39a41b464a12a81899d9ae5f2c829063f5571b6b87e6d2f9c","affectsGlobalScope":true},{"version":"cdccba9a388c2ee3fd6ad4018c640a471a6c060e96f1232062223063b0a5ac6a","affectsGlobalScope":true},{"version":"4378fc8122ec9d1a685b01eb66c46f62aba6b239ca7228bb6483bcf8259ee493","affectsGlobalScope":true},{"version":"0d5f52b3174bee6edb81260ebcd792692c32c81fd55499d69531496f3f2b25e7","affectsGlobalScope":true},{"version":"810627a82ac06fb5166da5ada4159c4ec11978dfbb0805fe804c86406dab8357","affectsGlobalScope":true},{"version":"62d80405c46c3f4c527ee657ae9d43fda65a0bf582292429aea1e69144a522a6","affectsGlobalScope":true},{"version":"3013574108c36fd3aaca79764002b3717da09725a36a6fc02eac386593110f93","affectsGlobalScope":true},{"version":"75ec0bdd727d887f1b79ed6619412ea72ba3c81d92d0787ccb64bab18d261f14","affectsGlobalScope":true},{"version":"3be5a1453daa63e031d266bf342f3943603873d890ab8b9ada95e22389389006","affectsGlobalScope":true},{"version":"17bb1fc99591b00515502d264fa55dc8370c45c5298f4a5c2083557dccba5a2a","affectsGlobalScope":true},{"version":"7ce9f0bde3307ca1f944119f6365f2d776d281a393b576a18a2f2893a2d75c98","affectsGlobalScope":true},{"version":"6a6b173e739a6a99629a8594bfb294cc7329bfb7b227f12e1f7c11bc163b8577","affectsGlobalScope":true},{"version":"12a310447c5d23c7d0d5ca2af606e3bd08afda69100166730ab92c62999ebb9d","affectsGlobalScope":true},{"version":"b0124885ef82641903d232172577f2ceb5d3e60aed4da1153bab4221e1f6dd4e","affectsGlobalScope":true},{"version":"0eb85d6c590b0d577919a79e0084fa1744c1beba6fd0d4e951432fa1ede5510a","affectsGlobalScope":true},{"version":"da233fc1c8a377ba9e0bed690a73c290d843c2c3d23a7bd7ec5cd3d7d73ba1e0","affectsGlobalScope":true},{"version":"d154ea5bb7f7f9001ed9153e876b2d5b8f5c2bb9ec02b3ae0d239ec769f1f2ae","affectsGlobalScope":true},{"version":"bb2d3fb05a1d2ffbca947cc7cbc95d23e1d053d6595391bd325deb265a18d36c","affectsGlobalScope":true},{"version":"c80df75850fea5caa2afe43b9949338ce4e2de086f91713e9af1a06f973872b8","affectsGlobalScope":true},{"version":"9d57b2b5d15838ed094aa9ff1299eecef40b190722eb619bac4616657a05f951","affectsGlobalScope":true},{"version":"6c51b5dd26a2c31dbf37f00cfc32b2aa6a92e19c995aefb5b97a3a64f1ac99de","affectsGlobalScope":true},{"version":"6e7997ef61de3132e4d4b2250e75343f487903ddf5370e7ce33cf1b9db9a63ed","affectsGlobalScope":true},{"version":"2ad234885a4240522efccd77de6c7d99eecf9b4de0914adb9a35c0c22433f993","affectsGlobalScope":true},{"version":"1b3fe904465430e030c93239a348f05e1be80640d91f2f004c3512c2c2c89f34","affectsGlobalScope":true},{"version":"3787b83e297de7c315d55d4a7c546ae28e5f6c0a361b7a1dcec1f1f50a54ef11","affectsGlobalScope":true},{"version":"e7e8e1d368290e9295ef18ca23f405cf40d5456fa9f20db6373a61ca45f75f40","affectsGlobalScope":true},{"version":"faf0221ae0465363c842ce6aa8a0cbda5d9296940a8e26c86e04cc4081eea21e","affectsGlobalScope":true},{"version":"06393d13ea207a1bfe08ec8d7be562549c5e2da8983f2ee074e00002629d1871","affectsGlobalScope":true},{"version":"d071129cba6a5f2700be09c86c07ad2791ab67d4e5ed1eb301d6746c62745ea4","affectsGlobalScope":true},{"version":"10bbdc1981b8d9310ee75bfac28ee0477bb2353e8529da8cff7cb26c409cb5e8","affectsGlobalScope":true},"1f03b495671c3a1bd24510f38b8947f0991dfd6bf0278c68eca14af15b306e1f","f7e133b20ee2669b6c0e5d7f0cd510868c57cd64b283e68c7f598e30ce9d76d2","45627c7d24633686b0274d9402652930ba2e4fe74df04f114393ae121d1e8afe","2808645b990069e5f8b5ff14c9f1e6077eb642583c3f7854012d60757f23c70e","504748354caa6b804491bc919fdeba0cb0891bfab827584af3e1909680984733",{"version":"6e2f2c6e92de7c22003e0435cac40e0cb07335b91869688ce8d8ab51cc5d8457","signature":"99f3117878402cf4ef5a26ec99a7f56f4c8e5b3323e643123d95161675e710a4"},"1bb8c0dd0981e05a4dbbb2cae6d63395a2de76d8f2286a706bb559637a1e4d80",{"version":"b7b5062b102367740b755f7e0bd0ffd64bf9a6176c2f3407a2dab2c7065c5b0e","signature":"6de0535aa948d2842e0216bab3331b4b830b7c715ab9d6cff3df434cc573c47a"},"17cedb8db35ec16120979326b1bd9b934438b89b6eedb2c85c251cecb4cf6946","0cba3a5d7b81356222594442753cf90dd2892e5ccfe1d262aaca6896ba6c1380","a69c09dbea52352f479d3e7ac949fde3d17b195abe90b045d619f747b38d6d1a",{"version":"c2ab70bbc7a24c42a790890739dd8a0ba9d2e15038b40dff8163a97a5d148c00","affectsGlobalScope":true},"422dbb183fdced59425ca072c8bd09efaa77ce4e2ab928ec0d8a1ce062d2a45a",{"version":"48d40223f385f00deb112cbc469ddf33e78bd746f6a88d05577f9f75dd614545","affectsGlobalScope":true},"1dab5ab6bcf11de47ab9db295df8c4f1d92ffa750e8f095e88c71ce4c3299628","f71f46ccd5a90566f0a37b25b23bc4684381ab2180bdf6733f4e6624474e1894",{"version":"54e65985a3ee3cec182e6a555e20974ea936fc8b8d1738c14e8ed8a42bd921d4","affectsGlobalScope":true},"82408ed3e959ddc60d3e9904481b5a8dc16469928257af22a3f7d1a3bc7fd8c4","98a3ebfa494b46265634a73459050befba5da8fdc6ca0ef9b7269421780f4ff3","34e5de87d983bc6aefef8b17658556e3157003e8d9555d3cb098c6bef0b5fbc8","cc0b61316c4f37393f1f9595e93b673f4184e9d07f4c127165a490ec4a928668","f27371653aded82b2b160f7a7033fb4a5b1534b6f6081ef7be1468f0f15327d3","c762cd6754b13a461c54b59d0ae0ab7aeef3c292c6cf889873f786ee4d8e75c9","f4ea7d5df644785bd9fbf419930cbaec118f0d8b4160037d2339b8e23c059e79",{"version":"bfea28e6162ed21a0aeed181b623dcf250aa79abf49e24a6b7e012655af36d81","affectsGlobalScope":true},"7a5459efa09ea82088234e6533a203d528c594b01787fb90fba148885a36e8b6","ae97e20f2e10dbeec193d6a2f9cd9a367a1e293e7d6b33b68bacea166afd7792","10d4796a130577d57003a77b95d8723530bbec84718e364aa2129fa8ffba0378","ad41bb744149e92adb06eb953da195115620a3f2ad48e7d3ae04d10762dae197","bf73c576885408d4a176f44a9035d798827cc5020d58284cb18d7573430d9022","7ae078ca42a670445ae0c6a97c029cb83d143d62abd1730efb33f68f0b2c0e82",{"version":"e8b18c6385ff784228a6f369694fcf1a6b475355ba89090a88de13587a9391d5","affectsGlobalScope":true},"5d0a9ea09d990b5788f867f1c79d4878f86f7384cb7dab38eecbf22f9efd063d","12eea70b5e11e924bb0543aea5eadc16ced318aa26001b453b0d561c2fd0bd1e","08777cd9318d294646b121838574e1dd7acbb22c21a03df84e1f2c87b1ad47f2","08a90bcdc717df3d50a2ce178d966a8c353fd23e5c392fd3594a6e39d9bb6304",{"version":"8207e7e6db9aa5fc7e61c8f17ba74cf9c115d26f51f91ee93f790815a7ea9dfb","affectsGlobalScope":true},"2a12d2da5ac4c4979401a3f6eaafa874747a37c365e4bc18aa2b171ae134d21b","002b837927b53f3714308ecd96f72ee8a053b8aeb28213d8ec6de23ed1608b66","1dc9c847473bb47279e398b22c740c83ea37a5c88bf66629666e3cf4c5b9f99c","a9e4a5a24bf2c44de4c98274975a1a705a0abbaad04df3557c2d3cd8b1727949","00fa7ce8bc8acc560dc341bbfdf37840a8c59e6a67c9bfa3fa5f36254df35db2","1b952304137851e45bc009785de89ada562d9376177c97e37702e39e60c2f1ff",{"version":"806ef4cac3b3d9fa4a48d849c8e084d7c72fcd7b16d76e06049a9ed742ff79c0","affectsGlobalScope":true},"cfe724f7c694aab65a9bdd1acb05997848c504548c9d4c71645c187a091cfa2a","5f0ed51db151c2cdc4fa3bb0f44ce6066912ad001b607a34e65a96c52eb76248",{"version":"3345c276cab0e76dda86c0fb79104ff915a4580ba0f3e440870e183b1baec476","affectsGlobalScope":true},"664d8f2d59164f2e08c543981453893bc7e003e4dfd29651ce09db13e9457980","e383ff72aabf294913f8c346f5da1445ae6ad525836d28efd52cbadc01a361a6","f52fbf64c7e480271a9096763c4882d356b05cab05bf56a64e68a95313cd2ce2","59bdb65f28d7ce52ccfc906e9aaf422f8b8534b2d21c32a27d7819be5ad81df7",{"version":"0c5004386ed814334d2d4abd1d8f2f0b63ea2134d5717d8fb2fb8aabc05288ef","affectsGlobalScope":true},"28a2e7383fd898c386ffdcacedf0ec0845e5d1a86b5a43f25b86bc315f556b79","3aff9c8c36192e46a84afe7b926136d520487155154ab9ba982a8b544ea8fc95","a880cf8d85af2e4189c709b0fea613741649c0e40fffb4360ec70762563d5de0","85bbf436a15bbeda4db888be3062d47f99c66fd05d7c50f0f6473a9151b6a070","9f9c49c95ecd25e0cb2587751925976cf64fd184714cb11e213749c80cf0f927","f0c75c08a71f9212c93a719a25fb0320d53f2e50ca89a812640e08f8ad8c408c",{"version":"ab9b9a36e5284fd8d3bf2f7d5fcbc60052f25f27e4d20954782099282c60d23e","affectsGlobalScope":true},"9cafe917bf667f1027b2bb62e2de454ecd2119c80873ad76fc41d941089753b8","8841e2aa774b89bd23302dede20663306dc1b9902431ac64b24be8b8d0e3f649","fd326577c62145816fe1acc306c734c2396487f76719d3785d4e825b34540b33","51440322bec180cf452ce474b4f69b993b4eb491fecf47abd958d3342747d6b0","9d6e6c3ca60782b62bb4d12159f36c594eb846fda6b1847d84dd66cabd368e4f","f971cf15188513b2b25ec3c94b27ed4a159a912ad3aa821be02224bd9ebe63b7",{"version":"a918f37fbe5288f23521e23435021768721ff689e428e85c9bca18d4558a0a00","signature":"1e8387d41287bb66d8319836d65b98e602e17ff755ca989e1ea287f0881fdd17"},"d392985a909f07df32927e9f988b10e83fad10f1d6d7975f15a9a97ddf7cdcd0",{"version":"47a9c5502d49dd991ceaaf73bd2d8f2366e11e486629881d8a709bacdaad8e74","signature":"da06c2a8dc3608bc685a211ccd839ca335f466e6aa22cfeef085e219ed82149d"},"209e814e8e71aec74f69686a9506dd7610b97ab59dcee9446266446f72a76d05","6fa0008bf91a4cc9c8963bace4bba0bd6865cbfa29c3e3ccc461155660fb113a","2b8264b2fefd7367e0f20e2c04eed5d3038831fe00f5efbc110ff0131aab899b"],"options":{"allowSyntheticDefaultImports":true,"declaration":true,"emitDecoratorMetadata":true,"esModuleInterop":true,"exactOptionalPropertyTypes":true,"experimentalDecorators":true,"module":1,"newLine":1,"noFallthroughCasesInSwitch":true,"noImplicitOverride":true,"outDir":"./","preserveConstEnums":true,"rootDir":"../src","skipLibCheck":true,"strict":true,"target":6,"tsBuildInfoFile":"./tsconfig.tsbuildinfo"},"fileIdsList":[[68,84,95,100,104],[67,68,95,102,103],[95],[52,95],[55,95],[56,61,95],[57,67,68,75,84,94,95],[57,58,67,75,95],[59,95],[60,61,68,76,95],[61,84,91,95],[62,64,67,75,95],[63,95],[64,65,95],[66,67,95],[67,95],[67,68,69,84,94,95],[67,68,69,84,95],[70,75,84,94,95],[67,68,70,71,75,84,91,94,95],[70,72,84,91,94,95],[52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101],[67,73,95],[74,94,95],[64,67,75,84,95],[76,95],[77,95],[55,78,95],[79,93,95,99],[80,95],[81,95],[67,82,95],[82,83,95,97],[67,84,85,86,95],[84,86,95],[84,85,95],[87,95],[88,95],[67,89,90,95],[89,90,95],[61,75,84,91,95],[92,95],[75,93,95],[56,70,81,94,95],[61,95],[84,95,96],[95,97],[95,98],[56,61,67,69,78,84,94,95,97,99],[84,95,100],[44,95],[46,47,95],[46,68,69,72,95],[46,95],[68,69,76,77,95,105],[45,48,49,95],[45,48,49,51,95,106,107],[50,95,108],[45,50,95,108],[57,95],[46],[45]],"referencedMap":[[105,1],[104,2],[103,3],[111,3],[52,4],[53,4],[55,5],[56,6],[57,7],[58,8],[59,9],[60,10],[61,11],[62,12],[63,13],[64,14],[65,14],[66,15],[67,16],[68,17],[69,18],[54,3],[101,3],[70,19],[71,20],[72,21],[102,22],[73,23],[74,24],[75,25],[76,26],[77,27],[78,28],[79,29],[80,30],[81,31],[82,32],[83,33],[84,34],[86,35],[85,36],[87,37],[88,38],[89,39],[90,40],[91,41],[92,42],[93,43],[94,44],[95,45],[96,46],[97,47],[98,48],[99,49],[100,50],[112,3],[113,3],[44,3],[45,51],[46,3],[8,3],[9,3],[13,3],[12,3],[2,3],[14,3],[15,3],[16,3],[17,3],[18,3],[19,3],[20,3],[21,3],[3,3],[4,3],[25,3],[22,3],[23,3],[24,3],[26,3],[27,3],[28,3],[5,3],[29,3],[30,3],[31,3],[32,3],[6,3],[43,3],[33,3],[34,3],[35,3],[36,3],[7,3],[41,3],[37,3],[38,3],[39,3],[40,3],[1,3],[42,3],[11,3],[10,3],[48,52],[51,53],[49,54],[106,55],[50,56],[108,57],[109,58],[110,59],[47,3],[107,60]],"exportedModulesMap":[[105,1],[104,2],[103,3],[111,3],[52,4],[53,4],[55,5],[56,6],[57,7],[58,8],[59,9],[60,10],[61,11],[62,12],[63,13],[64,14],[65,14],[66,15],[67,16],[68,17],[69,18],[54,3],[101,3],[70,19],[71,20],[72,21],[102,22],[73,23],[74,24],[75,25],[76,26],[77,27],[78,28],[79,29],[80,30],[81,31],[82,32],[83,33],[84,34],[86,35],[85,36],[87,37],[88,38],[89,39],[90,40],[91,41],[92,42],[93,43],[94,44],[95,45],[96,46],[97,47],[98,48],[99,49],[100,50],[112,3],[113,3],[44,3],[45,51],[46,3],[8,3],[9,3],[13,3],[12,3],[2,3],[14,3],[15,3],[16,3],[17,3],[18,3],[19,3],[20,3],[21,3],[3,3],[4,3],[25,3],[22,3],[23,3],[24,3],[26,3],[27,3],[28,3],[5,3],[29,3],[30,3],[31,3],[32,3],[6,3],[43,3],[33,3],[34,3],[35,3],[36,3],[7,3],[41,3],[37,3],[38,3],[39,3],[40,3],[1,3],[42,3],[11,3],[10,3],[48,61],[51,53],[49,54],[106,55],[50,62],[108,62],[109,58],[47,3],[107,60]],"semanticDiagnosticsPerFile":[105,104,103,111,52,53,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,54,101,70,71,72,102,73,74,75,76,77,78,79,80,81,82,83,84,86,85,87,88,89,90,91,92,93,94,95,96,97,98,99,100,112,113,44,45,46,8,9,13,12,2,14,15,16,17,18,19,20,21,3,4,25,22,23,24,26,27,28,5,29,30,31,32,6,43,33,34,35,36,7,41,37,38,39,40,1,42,11,10,48,51,49,106,50,108,109,110,47,107]},"version":"4.5.5"}
1
+ {"program":{"fileNames":["../../../node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/typescript/lib/lib.es2020.d.ts","../../../node_modules/typescript/lib/lib.dom.d.ts","../../../node_modules/typescript/lib/lib.dom.iterable.d.ts","../../../node_modules/typescript/lib/lib.webworker.importscripts.d.ts","../../../node_modules/typescript/lib/lib.scripthost.d.ts","../../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/typescript/lib/lib.esnext.intl.d.ts","../../../node_modules/typescript/lib/lib.es2019.full.d.ts","../../../node_modules/@types/yargs-parser/index.d.ts","../../../node_modules/@types/yargs/index.d.ts","../../../node_modules/axios/index.d.ts","../src/utils/api-token.utils.ts","../src/api/client.ts","../src/api/session.api.ts","../src/local-data/local-data.ts","../src/local-data/sessions.ts","../src/commands/download-session/download-session.command.ts","../../replayer/dist/session/session.types.d.ts","../../../node_modules/@types/node/assert.d.ts","../../../node_modules/@types/node/assert/strict.d.ts","../../../node_modules/@types/node/globals.d.ts","../../../node_modules/@types/node/async_hooks.d.ts","../../../node_modules/@types/node/buffer.d.ts","../../../node_modules/@types/node/child_process.d.ts","../../../node_modules/@types/node/cluster.d.ts","../../../node_modules/@types/node/console.d.ts","../../../node_modules/@types/node/constants.d.ts","../../../node_modules/@types/node/crypto.d.ts","../../../node_modules/@types/node/dgram.d.ts","../../../node_modules/@types/node/diagnostics_channel.d.ts","../../../node_modules/@types/node/dns.d.ts","../../../node_modules/@types/node/dns/promises.d.ts","../../../node_modules/@types/node/domain.d.ts","../../../node_modules/@types/node/events.d.ts","../../../node_modules/@types/node/fs.d.ts","../../../node_modules/@types/node/fs/promises.d.ts","../../../node_modules/@types/node/http.d.ts","../../../node_modules/@types/node/http2.d.ts","../../../node_modules/@types/node/https.d.ts","../../../node_modules/@types/node/inspector.d.ts","../../../node_modules/@types/node/module.d.ts","../../../node_modules/@types/node/net.d.ts","../../../node_modules/@types/node/os.d.ts","../../../node_modules/@types/node/path.d.ts","../../../node_modules/@types/node/perf_hooks.d.ts","../../../node_modules/@types/node/process.d.ts","../../../node_modules/@types/node/punycode.d.ts","../../../node_modules/@types/node/querystring.d.ts","../../../node_modules/@types/node/readline.d.ts","../../../node_modules/@types/node/repl.d.ts","../../../node_modules/@types/node/stream.d.ts","../../../node_modules/@types/node/stream/promises.d.ts","../../../node_modules/@types/node/stream/consumers.d.ts","../../../node_modules/@types/node/stream/web.d.ts","../../../node_modules/@types/node/string_decoder.d.ts","../../../node_modules/@types/node/timers.d.ts","../../../node_modules/@types/node/timers/promises.d.ts","../../../node_modules/@types/node/tls.d.ts","../../../node_modules/@types/node/trace_events.d.ts","../../../node_modules/@types/node/tty.d.ts","../../../node_modules/@types/node/url.d.ts","../../../node_modules/@types/node/util.d.ts","../../../node_modules/@types/node/v8.d.ts","../../../node_modules/@types/node/vm.d.ts","../../../node_modules/@types/node/wasi.d.ts","../../../node_modules/@types/node/worker_threads.d.ts","../../../node_modules/@types/node/zlib.d.ts","../../../node_modules/@types/node/globals.global.d.ts","../../../node_modules/@types/node/index.d.ts","../../../node_modules/devtools-protocol/types/protocol.d.ts","../../../node_modules/devtools-protocol/types/protocol-mapping.d.ts","../../../node_modules/puppeteer/lib/types.d.ts","../../../node_modules/rrweb-snapshot/typings/types.d.ts","../../../node_modules/rrweb-snapshot/typings/snapshot.d.ts","../../../node_modules/rrweb-snapshot/typings/rebuild.d.ts","../../../node_modules/rrweb-snapshot/typings/index.d.ts","../../../node_modules/rrweb/typings/types.d.ts","../../replayer/dist/replayer/replay.utils.d.ts","../../replayer/dist/replayer/replay-events.d.ts","../../replayer/dist/index.d.ts","../../../node_modules/@types/luxon/src/zone.d.ts","../../../node_modules/@types/luxon/src/misc.d.ts","../../../node_modules/@types/luxon/src/duration.d.ts","../../../node_modules/@types/luxon/src/interval.d.ts","../../../node_modules/@types/luxon/src/datetime.d.ts","../../../node_modules/@types/luxon/src/info.d.ts","../../../node_modules/@types/luxon/src/settings.d.ts","../../../node_modules/@types/luxon/src/luxon.d.ts","../../../node_modules/@types/luxon/index.d.ts","../src/api/replay.api.ts","../src/api/upload.ts","../../../node_modules/@types/minimatch/index.d.ts","../../../node_modules/@types/glob/index.d.ts","../../../node_modules/@types/archiver/index.d.ts","../src/archive/archive.ts","../src/local-data/replay-assets.ts","../src/utils/commit-sha.utils.ts","../src/utils/version.utils.ts","../src/commands/replay/replay.command.ts","../src/api/project.api.ts","../src/commands/show-project/show-project.command.ts","../src/api/project-build.api.ts","../src/commands/upload-build/upload-build.command.ts","../src/index.ts","../src/main.ts","../../../node_modules/@types/minimist/index.d.ts","../../../node_modules/@types/normalize-package-data/index.d.ts","../../../node_modules/@types/parse-json/index.d.ts","../../../node_modules/@types/smoothscroll-polyfill/index.d.ts","../../../node_modules/@types/yauzl/index.d.ts"],"fileInfos":[{"version":"3ac1b83264055b28c0165688fda6dfcc39001e9e7828f649299101c23ad0a0c3","affectsGlobalScope":true},"dc47c4fa66b9b9890cf076304de2a9c5201e94b740cffdf09f87296d877d71f6","7a387c58583dfca701b6c85e0adaf43fb17d590fb16d5b2dc0a2fbd89f35c467","8a12173c586e95f4433e0c6dc446bc88346be73ffe9ca6eec7aa63c8f3dca7f9","5f4e733ced4e129482ae2186aae29fde948ab7182844c3a5a51dd346182c7b06","e6b724280c694a9f588847f754198fb96c43d805f065c3a5b28bbc9594541c84","e21c071ca3e1b4a815d5f04a7475adcaeea5d64367e840dd0154096d705c3940",{"version":"72704b10d97777e15f1a581b73f88273037ef752d2e50b72287bd0a90af64fe6","affectsGlobalScope":true},{"version":"dbb73d4d99be496175cb432c74c2615f78c76f4272f1d83cba11ee0ed6dbddf0","affectsGlobalScope":true},{"version":"7fac8cb5fc820bc2a59ae11ef1c5b38d3832c6d0dfaec5acdb5569137d09a481","affectsGlobalScope":true},{"version":"097a57355ded99c68e6df1b738990448e0bf170e606707df5a7c0481ff2427cd","affectsGlobalScope":true},{"version":"d8996609230d17e90484a2dd58f22668f9a05a3bfe00bfb1d6271171e54a31fb","affectsGlobalScope":true},{"version":"43fb1d932e4966a39a41b464a12a81899d9ae5f2c829063f5571b6b87e6d2f9c","affectsGlobalScope":true},{"version":"cdccba9a388c2ee3fd6ad4018c640a471a6c060e96f1232062223063b0a5ac6a","affectsGlobalScope":true},{"version":"c5c05907c02476e4bde6b7e76a79ffcd948aedd14b6a8f56e4674221b0417398","affectsGlobalScope":true},{"version":"0d5f52b3174bee6edb81260ebcd792692c32c81fd55499d69531496f3f2b25e7","affectsGlobalScope":true},{"version":"810627a82ac06fb5166da5ada4159c4ec11978dfbb0805fe804c86406dab8357","affectsGlobalScope":true},{"version":"62d80405c46c3f4c527ee657ae9d43fda65a0bf582292429aea1e69144a522a6","affectsGlobalScope":true},{"version":"3013574108c36fd3aaca79764002b3717da09725a36a6fc02eac386593110f93","affectsGlobalScope":true},{"version":"75ec0bdd727d887f1b79ed6619412ea72ba3c81d92d0787ccb64bab18d261f14","affectsGlobalScope":true},{"version":"3be5a1453daa63e031d266bf342f3943603873d890ab8b9ada95e22389389006","affectsGlobalScope":true},{"version":"17bb1fc99591b00515502d264fa55dc8370c45c5298f4a5c2083557dccba5a2a","affectsGlobalScope":true},{"version":"7ce9f0bde3307ca1f944119f6365f2d776d281a393b576a18a2f2893a2d75c98","affectsGlobalScope":true},{"version":"6a6b173e739a6a99629a8594bfb294cc7329bfb7b227f12e1f7c11bc163b8577","affectsGlobalScope":true},{"version":"12a310447c5d23c7d0d5ca2af606e3bd08afda69100166730ab92c62999ebb9d","affectsGlobalScope":true},{"version":"b0124885ef82641903d232172577f2ceb5d3e60aed4da1153bab4221e1f6dd4e","affectsGlobalScope":true},{"version":"0eb85d6c590b0d577919a79e0084fa1744c1beba6fd0d4e951432fa1ede5510a","affectsGlobalScope":true},{"version":"da233fc1c8a377ba9e0bed690a73c290d843c2c3d23a7bd7ec5cd3d7d73ba1e0","affectsGlobalScope":true},{"version":"d154ea5bb7f7f9001ed9153e876b2d5b8f5c2bb9ec02b3ae0d239ec769f1f2ae","affectsGlobalScope":true},{"version":"bb2d3fb05a1d2ffbca947cc7cbc95d23e1d053d6595391bd325deb265a18d36c","affectsGlobalScope":true},{"version":"c80df75850fea5caa2afe43b9949338ce4e2de086f91713e9af1a06f973872b8","affectsGlobalScope":true},{"version":"9d57b2b5d15838ed094aa9ff1299eecef40b190722eb619bac4616657a05f951","affectsGlobalScope":true},{"version":"6c51b5dd26a2c31dbf37f00cfc32b2aa6a92e19c995aefb5b97a3a64f1ac99de","affectsGlobalScope":true},{"version":"6e7997ef61de3132e4d4b2250e75343f487903ddf5370e7ce33cf1b9db9a63ed","affectsGlobalScope":true},{"version":"2ad234885a4240522efccd77de6c7d99eecf9b4de0914adb9a35c0c22433f993","affectsGlobalScope":true},{"version":"1b3fe904465430e030c93239a348f05e1be80640d91f2f004c3512c2c2c89f34","affectsGlobalScope":true},{"version":"3787b83e297de7c315d55d4a7c546ae28e5f6c0a361b7a1dcec1f1f50a54ef11","affectsGlobalScope":true},{"version":"e7e8e1d368290e9295ef18ca23f405cf40d5456fa9f20db6373a61ca45f75f40","affectsGlobalScope":true},{"version":"faf0221ae0465363c842ce6aa8a0cbda5d9296940a8e26c86e04cc4081eea21e","affectsGlobalScope":true},{"version":"06393d13ea207a1bfe08ec8d7be562549c5e2da8983f2ee074e00002629d1871","affectsGlobalScope":true},{"version":"5075b36ab861c8c0c45377cb8c96270d7c65f0eeaf105d53fac6850da61f1027","affectsGlobalScope":true},{"version":"10bbdc1981b8d9310ee75bfac28ee0477bb2353e8529da8cff7cb26c409cb5e8","affectsGlobalScope":true},"1f03b495671c3a1bd24510f38b8947f0991dfd6bf0278c68eca14af15b306e1f","f7e133b20ee2669b6c0e5d7f0cd510868c57cd64b283e68c7f598e30ce9d76d2","45627c7d24633686b0274d9402652930ba2e4fe74df04f114393ae121d1e8afe","2808645b990069e5f8b5ff14c9f1e6077eb642583c3f7854012d60757f23c70e","504748354caa6b804491bc919fdeba0cb0891bfab827584af3e1909680984733","385c8d0cc48ea3c9d6a4448090bd8fc42077e72cdc0c456a1cfb7818d296a4f2","7609f60418bbf3320180d547b73e830cae453387b99fb66e5eb9cdbdde7cd6ba","b28d508ae5eeee614a91c46e0d0932b1ae517b4838749582ede5aa031016ae73","2bb37ff9b270f70ace776733b90bafb4d86e4e296b7a54c87b4588d5de27c4d3","f1c6991464f1893a85d905cc3f41f07aee000d0414500f3758dc00ad2b65e611","188565fbbadbaf42f3feccaafb11b48c5d2de58e1608c08e9df42a3b8215f906","0cba3a5d7b81356222594442753cf90dd2892e5ccfe1d262aaca6896ba6c1380","a69c09dbea52352f479d3e7ac949fde3d17b195abe90b045d619f747b38d6d1a",{"version":"c2ab70bbc7a24c42a790890739dd8a0ba9d2e15038b40dff8163a97a5d148c00","affectsGlobalScope":true},"422dbb183fdced59425ca072c8bd09efaa77ce4e2ab928ec0d8a1ce062d2a45a",{"version":"712ba0d43b44d144dfd01593f61af6e2e21cfae83e834d297643e7973e55ed61","affectsGlobalScope":true},"1dab5ab6bcf11de47ab9db295df8c4f1d92ffa750e8f095e88c71ce4c3299628","f71f46ccd5a90566f0a37b25b23bc4684381ab2180bdf6733f4e6624474e1894",{"version":"54e65985a3ee3cec182e6a555e20974ea936fc8b8d1738c14e8ed8a42bd921d4","affectsGlobalScope":true},"82408ed3e959ddc60d3e9904481b5a8dc16469928257af22a3f7d1a3bc7fd8c4","98a3ebfa494b46265634a73459050befba5da8fdc6ca0ef9b7269421780f4ff3","34e5de87d983bc6aefef8b17658556e3157003e8d9555d3cb098c6bef0b5fbc8","cc0b61316c4f37393f1f9595e93b673f4184e9d07f4c127165a490ec4a928668","f27371653aded82b2b160f7a7033fb4a5b1534b6f6081ef7be1468f0f15327d3","c762cd6754b13a461c54b59d0ae0ab7aeef3c292c6cf889873f786ee4d8e75c9","f4ea7d5df644785bd9fbf419930cbaec118f0d8b4160037d2339b8e23c059e79",{"version":"bfea28e6162ed21a0aeed181b623dcf250aa79abf49e24a6b7e012655af36d81","affectsGlobalScope":true},"7a5459efa09ea82088234e6533a203d528c594b01787fb90fba148885a36e8b6","ae97e20f2e10dbeec193d6a2f9cd9a367a1e293e7d6b33b68bacea166afd7792","10d4796a130577d57003a77b95d8723530bbec84718e364aa2129fa8ffba0378","ad41bb744149e92adb06eb953da195115620a3f2ad48e7d3ae04d10762dae197","bf73c576885408d4a176f44a9035d798827cc5020d58284cb18d7573430d9022","7ae078ca42a670445ae0c6a97c029cb83d143d62abd1730efb33f68f0b2c0e82",{"version":"e8b18c6385ff784228a6f369694fcf1a6b475355ba89090a88de13587a9391d5","affectsGlobalScope":true},"5d0a9ea09d990b5788f867f1c79d4878f86f7384cb7dab38eecbf22f9efd063d","12eea70b5e11e924bb0543aea5eadc16ced318aa26001b453b0d561c2fd0bd1e","08777cd9318d294646b121838574e1dd7acbb22c21a03df84e1f2c87b1ad47f2","08a90bcdc717df3d50a2ce178d966a8c353fd23e5c392fd3594a6e39d9bb6304",{"version":"4cd4cff679c9b3d9239fd7bf70293ca4594583767526916af8e5d5a47d0219c7","affectsGlobalScope":true},"2a12d2da5ac4c4979401a3f6eaafa874747a37c365e4bc18aa2b171ae134d21b","002b837927b53f3714308ecd96f72ee8a053b8aeb28213d8ec6de23ed1608b66","1dc9c847473bb47279e398b22c740c83ea37a5c88bf66629666e3cf4c5b9f99c","a9e4a5a24bf2c44de4c98274975a1a705a0abbaad04df3557c2d3cd8b1727949","00fa7ce8bc8acc560dc341bbfdf37840a8c59e6a67c9bfa3fa5f36254df35db2","1b952304137851e45bc009785de89ada562d9376177c97e37702e39e60c2f1ff",{"version":"806ef4cac3b3d9fa4a48d849c8e084d7c72fcd7b16d76e06049a9ed742ff79c0","affectsGlobalScope":true},"44b8b584a338b190a59f4f6929d072431950c7bd92ec2694821c11bce180c8a5","5f0ed51db151c2cdc4fa3bb0f44ce6066912ad001b607a34e65a96c52eb76248",{"version":"3345c276cab0e76dda86c0fb79104ff915a4580ba0f3e440870e183b1baec476","affectsGlobalScope":true},"664d8f2d59164f2e08c543981453893bc7e003e4dfd29651ce09db13e9457980","e383ff72aabf294913f8c346f5da1445ae6ad525836d28efd52cbadc01a361a6","f52fbf64c7e480271a9096763c4882d356b05cab05bf56a64e68a95313cd2ce2","59bdb65f28d7ce52ccfc906e9aaf422f8b8534b2d21c32a27d7819be5ad81df7",{"version":"3a2da34079a2567161c1359316a32e712404b56566c45332ac9dcee015ecce9f","affectsGlobalScope":true},"28a2e7383fd898c386ffdcacedf0ec0845e5d1a86b5a43f25b86bc315f556b79","3aff9c8c36192e46a84afe7b926136d520487155154ab9ba982a8b544ea8fc95","a880cf8d85af2e4189c709b0fea613741649c0e40fffb4360ec70762563d5de0","85bbf436a15bbeda4db888be3062d47f99c66fd05d7c50f0f6473a9151b6a070","9f9c49c95ecd25e0cb2587751925976cf64fd184714cb11e213749c80cf0f927","f0c75c08a71f9212c93a719a25fb0320d53f2e50ca89a812640e08f8ad8c408c",{"version":"ab9b9a36e5284fd8d3bf2f7d5fcbc60052f25f27e4d20954782099282c60d23e","affectsGlobalScope":true},"9cafe917bf667f1027b2bb62e2de454ecd2119c80873ad76fc41d941089753b8","7417ff3102c2ed96fe1c7bb0fbc03fc63d0314d41e72e130a6a115e3c43fb327","e432dfa7ded4469c8d6104885eb093a6eb5a9720092e855ea411a58a0755201b","7b01601babc431f99e4e1e1b8d8503f751f70eb684c1b7c6a3bbc56a3599a6f9","00a99694b9e5a9dc8a3817817a55eef4f43657f47d70826b843fb8686e93ee4b","504cf61e06f9160f74227321cad90e3066a1ab79d13a3482ff943c3c6ea4b8d4","e9e45cd9deaa11c034988f1b1cc9d282e9c4219715681f6014dfc926cad6f06b","1e19cfa78e51780c766049252825b796c6b94eb80e068906a956fd985a6a4f9e","88d1cb1b22796118d94b30e9aab99ccb27566eb0cf226ca25ff46fbedc50f904","0740480de02d40267fc3d4fc2524e0edf341d8243c24e5e564abbbf0c000d426","70c010976f14a4219289596df6fc6112112607332f23f69ee51388ebff166552","19ec34e1a88d9e429c6a3716e281b30c0b934d5f51480132607ff55bdfa9005c","ec6d1ffbb1455fdf7c75715ce5390172f3c4783b94defaf897e6036c7282d04c","52ed17fe2c0a4bb27a4f13e99234b3d1f364dc27f9bd7964946d5ec62792a0cc","e9aefcaf89c87dae14a381765b9d889568bfd86472650aea8444234278172371","9f3fd115e0f6969c552fbf60fba7af3f66c070718809e8fba06c963abb59b028","cfb5e5369bd802fc2c216a06d3c4b92de8c428bdb7879c685e230809ef4eaee4","ed4be5a31cd8dbb8e31ccde91e7b8c1552eb191c4787d19ed028763577674772","d40e7cb322841e538e686b8a39f05e8b3e0b6d5b7c6687efa69f0cbf9124c4ec","c5641bb951da5d5252e7d8a806ec3c84f42555b5bd6a0879dbf1c7df1b8bd850","3147fec8a70e38c6ad051232697c89c5e5ec259eff00a184344ac018308b7cbf","c1c1b5c63378da1016d2f1489f1bb6ebf858550ee8020185949d2a56dae93da3","79af33ba55da7d35bc3389dacde5cd3699ec4fd4675a98cb7667f7e2d1533c33","8841e2aa774b89bd23302dede20663306dc1b9902431ac64b24be8b8d0e3f649","fd326577c62145816fe1acc306c734c2396487f76719d3785d4e825b34540b33","51440322bec180cf452ce474b4f69b993b4eb491fecf47abd958d3342747d6b0","f975872106ca4b5462634794605c8d09fb11aca94be3ed76e6b7a1ed111f130f","e1c4dbc8e86098998d6a7457acbed85e24957dc47ecc558eeaf241119659af1d","f971cf15188513b2b25ec3c94b27ed4a159a912ad3aa821be02224bd9ebe63b7","59907d082c685abe9290f8a4a6a5f23e888aa02677e04b1707fb288f2c846591",{"version":"14ddbfcd7c6e04ad997c24628dc8164ea71b1e77db1c45a90142cf8f53f7109a","signature":"4b00f9158a93aac1cdbc372ba2f4b9423f269380f9588d297a211d8d668089e8"},"1bb8c0dd0981e05a4dbbb2cae6d63395a2de76d8f2286a706bb559637a1e4d80","b7b5062b102367740b755f7e0bd0ffd64bf9a6176c2f3407a2dab2c7065c5b0e","926929ee7d8b8af2e0767c7df35a6ce16dd01745cc31881672c703368662a35d","427e6378a4bac776b4ac70d05f297ff4cfa3b06646fbc52604194c52444150a3","c84cd29c2de8cb7bd9a70365b2dae5bcec4fed4f8fff6b81d57a985755f2b9a3",{"version":"7ac591a9978016e36e6d429ddc75bb13459c2c158f22d367ebb3d7ac11ca564c","signature":"da06c2a8dc3608bc685a211ccd839ca335f466e6aa22cfeef085e219ed82149d"},"209e814e8e71aec74f69686a9506dd7610b97ab59dcee9446266446f72a76d05","6fa0008bf91a4cc9c8963bace4bba0bd6865cbfa29c3e3ccc461155660fb113a","2b8264b2fefd7367e0f20e2c04eed5d3038831fe00f5efbc110ff0131aab899b","657ecc0d1f08d35e69533185aca1cf400667261e29fb5a41021a8eee0df697c0","b2d70a269840a9528db473ac7565442434333a05c1f66801a7a672e82beb903e"],"options":{"allowSyntheticDefaultImports":true,"declaration":true,"emitDecoratorMetadata":true,"esModuleInterop":true,"exactOptionalPropertyTypes":true,"experimentalDecorators":true,"module":1,"newLine":1,"noFallthroughCasesInSwitch":true,"noImplicitOverride":true,"outDir":"./","preserveConstEnums":true,"rootDir":"../src","skipLibCheck":true,"strict":true,"target":6,"tsBuildInfoFile":"./tsconfig.tsbuildinfo"},"fileIdsList":[[70,86,97,102,128],[69,70,97,104,127],[97,123],[97,116,118,119,124],[97,117,120],[97,116,117],[97,118,120],[97,116,117,118,119,120,121,122],[97],[97,116],[54,97],[57,97],[58,63,97],[59,69,70,77,86,96,97],[59,60,69,77,97],[61,97],[62,63,70,78,97],[63,86,93,97],[64,66,69,77,97],[65,97],[66,67,97],[68,69,97],[69,97],[69,70,71,86,96,97],[69,70,71,86,97],[72,77,86,96,97],[69,70,72,73,77,86,93,96,97],[72,74,86,93,96,97],[54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103],[69,75,97],[76,96,97],[66,69,77,86,97],[78,97],[79,97],[57,80,97],[81,95,97,101],[82,97],[83,97],[69,84,97],[84,85,97,99],[69,86,87,88,97],[86,88,97],[86,87,97],[89,97],[90,97],[69,91,92,97],[91,92,97],[63,77,86,93,97],[94,97],[77,95,97],[58,72,83,96,97],[63,97],[86,97,98],[97,99],[97,100],[58,63,69,71,80,86,96,97,99,101],[86,97,102],[44,97],[69,86,97,104],[97,105],[59,86,97,104,105,106],[97,108,109,110],[97,108],[97,111],[46,47,97],[46,97],[46,71,97],[70,71,78,79,97,129],[45,48,51,97],[45,48,50,51,71,79,97,115,124,125,126,130,131,132,133],[45,48,97,135],[45,48,97,126,130,132,135,137],[52,97,134,136,138],[46,50,71,79,97],[46,49,50,71,79,97],[45,50,52,97,134,136,138],[59,97],[71,79,97],[97,114],[53,97,113],[53,97,107,112],[45]],"referencedMap":[[129,1],[128,2],[124,3],[120,4],[118,5],[121,6],[119,7],[123,8],[117,9],[122,10],[116,9],[127,9],[141,9],[54,11],[55,11],[57,12],[58,13],[59,14],[60,15],[61,16],[62,17],[63,18],[64,19],[65,20],[66,21],[67,21],[68,22],[69,23],[70,24],[71,25],[56,9],[103,9],[72,26],[73,27],[74,28],[104,29],[75,30],[76,31],[77,32],[78,33],[79,34],[80,35],[81,36],[82,37],[83,38],[84,39],[85,40],[86,41],[88,42],[87,43],[89,44],[90,45],[91,46],[92,47],[93,48],[94,49],[95,50],[96,51],[97,52],[98,53],[99,54],[100,55],[101,56],[102,57],[142,9],[143,9],[144,9],[44,9],[45,58],[145,59],[46,9],[106,60],[105,9],[107,61],[111,62],[110,63],[109,63],[108,9],[112,64],[8,9],[9,9],[13,9],[12,9],[2,9],[14,9],[15,9],[16,9],[17,9],[18,9],[19,9],[20,9],[21,9],[3,9],[4,9],[25,9],[22,9],[23,9],[24,9],[26,9],[27,9],[28,9],[5,9],[29,9],[30,9],[31,9],[32,9],[6,9],[43,9],[33,9],[34,9],[35,9],[36,9],[7,9],[41,9],[37,9],[38,9],[39,9],[40,9],[1,9],[42,9],[11,9],[10,9],[48,65],[137,66],[135,66],[125,67],[49,66],[126,67],[130,68],[52,69],[134,70],[136,71],[138,72],[139,73],[50,34],[131,74],[51,75],[140,76],[47,9],[132,77],[133,78],[115,79],[114,80],[113,81],[53,9]],"exportedModulesMap":[[129,1],[128,2],[124,3],[120,4],[118,5],[121,6],[119,7],[123,8],[117,9],[122,10],[116,9],[127,9],[141,9],[54,11],[55,11],[57,12],[58,13],[59,14],[60,15],[61,16],[62,17],[63,18],[64,19],[65,20],[66,21],[67,21],[68,22],[69,23],[70,24],[71,25],[56,9],[103,9],[72,26],[73,27],[74,28],[104,29],[75,30],[76,31],[77,32],[78,33],[79,34],[80,35],[81,36],[82,37],[83,38],[84,39],[85,40],[86,41],[88,42],[87,43],[89,44],[90,45],[91,46],[92,47],[93,48],[94,49],[95,50],[96,51],[97,52],[98,53],[99,54],[100,55],[101,56],[102,57],[142,9],[143,9],[144,9],[44,9],[45,58],[145,59],[46,9],[106,60],[105,9],[107,61],[111,62],[110,63],[109,63],[108,9],[112,64],[8,9],[9,9],[13,9],[12,9],[2,9],[14,9],[15,9],[16,9],[17,9],[18,9],[19,9],[20,9],[21,9],[3,9],[4,9],[25,9],[22,9],[23,9],[24,9],[26,9],[27,9],[28,9],[5,9],[29,9],[30,9],[31,9],[32,9],[6,9],[43,9],[33,9],[34,9],[35,9],[36,9],[7,9],[41,9],[37,9],[38,9],[39,9],[40,9],[1,9],[42,9],[11,9],[10,9],[48,65],[137,66],[135,66],[125,67],[49,66],[126,67],[130,68],[52,69],[134,82],[136,71],[138,72],[139,73],[50,34],[131,74],[51,75],[47,9],[132,77],[133,78],[115,79],[114,80],[113,81],[53,9]],"semanticDiagnosticsPerFile":[129,128,124,120,118,121,119,123,117,122,116,127,141,54,55,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,56,103,72,73,74,104,75,76,77,78,79,80,81,82,83,84,85,86,88,87,89,90,91,92,93,94,95,96,97,98,99,100,101,102,142,143,144,44,45,145,46,106,105,107,111,110,109,108,112,8,9,13,12,2,14,15,16,17,18,19,20,21,3,4,25,22,23,24,26,27,28,5,29,30,31,32,6,43,33,34,35,36,7,41,37,38,39,40,1,42,11,10,48,137,135,125,49,126,130,52,134,136,138,139,50,131,51,140,47,132,133,115,114,113,53]},"version":"4.6.2"}
@@ -0,0 +1 @@
1
+ export declare const getMeticulousVersion: () => Promise<string>;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getMeticulousVersion = void 0;
4
+ const promises_1 = require("fs/promises");
5
+ const path_1 = require("path");
6
+ let version = "";
7
+ const getMeticulousVersion = async () => {
8
+ if (version) {
9
+ return version;
10
+ }
11
+ const packageJsonPath = (0, path_1.normalize)((0, path_1.join)(__dirname, "../../package.json"));
12
+ const packageJson = JSON.parse(await (0, promises_1.readFile)(packageJsonPath, { encoding: "utf-8" }));
13
+ const versionStr = packageJson["version"] || "unknown";
14
+ version = `sdk-v${versionStr}`;
15
+ return version;
16
+ };
17
+ exports.getMeticulousVersion = getMeticulousVersion;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alwaysmeticulous/cli",
3
- "version": "1.0.0",
3
+ "version": "1.1.0",
4
4
  "description": "The Meticulous CLI",
5
5
  "license": "ISC",
6
6
  "main": "dist/index.js",
@@ -23,8 +23,17 @@
23
23
  "dependencies": {
24
24
  "archiver": "^5.3.0",
25
25
  "axios": "^0.25.0",
26
+ "luxon": "^2.2.0",
26
27
  "yargs": "^17.3.1"
27
28
  },
29
+ "peerDependencies": {
30
+ "@alwaysmeticulous/replayer": "^1.1.0-alpha.1"
31
+ },
32
+ "peerDependenciesMeta": {
33
+ "@alwaysmeticulous/replayer": {
34
+ "optional": true
35
+ }
36
+ },
28
37
  "author": {
29
38
  "name": "The Meticulous Team",
30
39
  "email": "eng@meticulous.ai",