@alwaysmeticulous/cli 1.0.0-alpha.1 → 1.1.0-alpha.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.
package/LICENSE ADDED
@@ -0,0 +1,15 @@
1
+ ISC License
2
+
3
+ Copyright (c) 2022, Meticulous Contributors
4
+
5
+ Permission to use, copy, modify, and/or distribute this software for any
6
+ purpose with or without fee is hereby granted, provided that the above
7
+ copyright notice and this permission notice appear in all copies.
8
+
9
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
10
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
11
+ AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
12
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
13
+ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
14
+ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
15
+ PERFORMANCE OF THIS SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,21 @@
1
+ # Meticulous CLI
2
+
3
+ CLI utility to interact with the Meticulous platform.
4
+
5
+ ## Installing
6
+
7
+ ### With `npm`
8
+
9
+ ```bash
10
+ npm install --save-dev @alwaysmeticulous/cli
11
+ ```
12
+
13
+ ### With `yarn`
14
+
15
+ ```bash
16
+ yarn add --dev @alwaysmeticulous/cli
17
+ ```
18
+
19
+ ## Submitting builds
20
+
21
+ [TODO]
@@ -0,0 +1,10 @@
1
+ import { AxiosInstance } from "axios";
2
+ export declare const getProjectBuild: (client: AxiosInstance, projectBuildId: string) => Promise<any>;
3
+ export declare const createProjectBuild: (client: AxiosInstance, commitSha: string) => Promise<any>;
4
+ export interface ProjectBuildPushUrlOutput {
5
+ projectBuildId: string;
6
+ pushUrl: string;
7
+ }
8
+ export declare const getProjectBuildPushUrl: (client: AxiosInstance, projectBuildId: string) => Promise<ProjectBuildPushUrlOutput | null>;
9
+ export declare const uploadProjectBuildArchive: (uploadUrl: string, archivePath: string) => Promise<void>;
10
+ export declare const putProjectBuildPushedStatus: (client: AxiosInstance, projectBuildId: string, status: "success" | "failure") => Promise<any>;
@@ -0,0 +1,62 @@
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.putProjectBuildPushedStatus = exports.uploadProjectBuildArchive = exports.getProjectBuildPushUrl = exports.createProjectBuild = exports.getProjectBuild = void 0;
7
+ const axios_1 = __importDefault(require("axios"));
8
+ const promises_1 = require("fs/promises");
9
+ const getProjectBuild = async (client, projectBuildId) => {
10
+ const { data } = await client
11
+ .get(`project-builds/${projectBuildId}`)
12
+ .catch((error) => {
13
+ var _a;
14
+ if (axios_1.default.isAxiosError(error)) {
15
+ if (((_a = error.response) === null || _a === void 0 ? void 0 : _a.status) === 404) {
16
+ return { data: null };
17
+ }
18
+ }
19
+ throw error;
20
+ });
21
+ return data;
22
+ };
23
+ exports.getProjectBuild = getProjectBuild;
24
+ const createProjectBuild = async (client, commitSha) => {
25
+ const { data } = await client.post(`project-builds`, {
26
+ commitSha,
27
+ });
28
+ return data;
29
+ };
30
+ exports.createProjectBuild = createProjectBuild;
31
+ const getProjectBuildPushUrl = async (client, projectBuildId) => {
32
+ const { data } = await client
33
+ .get(`project-builds/${projectBuildId}/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.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
+ const putProjectBuildPushedStatus = async (client, projectBuildId, status) => {
57
+ const { data } = await client.put(`project-builds/${projectBuildId}/pushed`, {
58
+ status,
59
+ });
60
+ return data;
61
+ };
62
+ exports.putProjectBuildPushedStatus = putProjectBuildPushedStatus;
@@ -6,9 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.getProject = void 0;
7
7
  const axios_1 = __importDefault(require("axios"));
8
8
  const getProject = async (client) => {
9
- const { data: projectData } = await client
10
- .get("projects/token-info")
11
- .catch((error) => {
9
+ const { data } = await client.get("projects/token-info").catch((error) => {
12
10
  var _a;
13
11
  if (axios_1.default.isAxiosError(error)) {
14
12
  if (((_a = error.response) === null || _a === void 0 ? void 0 : _a.status) === 404) {
@@ -17,6 +15,6 @@ const getProject = async (client) => {
17
15
  }
18
16
  throw error;
19
17
  });
20
- return projectData;
18
+ return data;
21
19
  };
22
20
  exports.getProject = getProject;
@@ -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,3 @@
1
+ export declare const checkDistFolder: (dist: string) => Promise<void>;
2
+ export declare const createArchive: (dist: string) => Promise<string>;
3
+ export declare const deleteArchive: (archivePath: string) => Promise<void>;
@@ -0,0 +1,45 @@
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.deleteArchive = exports.createArchive = exports.checkDistFolder = void 0;
7
+ const path_1 = require("path");
8
+ const promises_1 = require("fs/promises");
9
+ const os_1 = require("os");
10
+ const archiver_1 = __importDefault(require("archiver"));
11
+ const fs_1 = require("fs");
12
+ const checkDistFolder = async (dist_) => {
13
+ const dist = (0, path_1.resolve)(process.cwd(), dist_);
14
+ const files = await (0, promises_1.readdir)(dist, { encoding: "utf-8", withFileTypes: true });
15
+ const indexHtml = files.find((entry) => entry.name.toLocaleLowerCase() === "index.html" && entry.isFile());
16
+ if (!indexHtml) {
17
+ throw new Error(`Cannot find "index.html" in ${dist}`);
18
+ }
19
+ };
20
+ exports.checkDistFolder = checkDistFolder;
21
+ const createArchive = async (dist_) => {
22
+ const tempDir = await (0, promises_1.mkdtemp)((0, path_1.join)((0, os_1.tmpdir)(), "meticulous-"));
23
+ const archivePath = (0, path_1.join)(tempDir, "build.zip");
24
+ const dist = (0, path_1.resolve)(process.cwd(), dist_);
25
+ const fileStream = (0, fs_1.createWriteStream)(archivePath);
26
+ const archive = (0, archiver_1.default)("zip");
27
+ await new Promise((resolve, reject) => {
28
+ archive.on("error", (err) => reject(err));
29
+ fileStream.on("close", () => {
30
+ resolve(null);
31
+ });
32
+ archive.pipe(fileStream);
33
+ archive.directory(dist, false);
34
+ archive.finalize().catch((error) => {
35
+ throw error;
36
+ });
37
+ });
38
+ return archivePath;
39
+ };
40
+ exports.createArchive = createArchive;
41
+ const deleteArchive = async (archivePath) => {
42
+ const dir = (0, path_1.dirname)(archivePath);
43
+ await (0, promises_1.rm)(dir, { force: true, recursive: true });
44
+ };
45
+ exports.deleteArchive = deleteArchive;
@@ -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,8 @@
1
+ import { CommandModule } from "yargs";
2
+ interface Options {
3
+ apiToken?: string | null | undefined;
4
+ sessionId: string;
5
+ appUrl: string;
6
+ }
7
+ export declare const replay: CommandModule<{}, Options>;
8
+ export {};
@@ -0,0 +1,89 @@
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 local_data_1 = require("../../local-data/local-data");
9
+ const replay_assets_1 = require("../../local-data/replay-assets");
10
+ const sessions_1 = require("../../local-data/sessions");
11
+ const handler = async ({ apiToken, sessionId, appUrl, }) => {
12
+ const client = (0, client_1.createClient)({ apiToken });
13
+ // 1. Check session files
14
+ const session = await (0, sessions_1.getOrFetchRecordedSession)(client, sessionId);
15
+ const sessionData = await (0, sessions_1.getOrFetchRecordedSessionData)(client, sessionId);
16
+ const reanimator = await (0, replay_assets_1.fetchAsset)("https://snippet.meticulous.ai/replay/v1/reanimator.bundle.js");
17
+ const replayNetworkFile = await (0, replay_assets_1.fetchAsset)("https://snippet.meticulous.ai/replay/v1/rreplay-network-events.bundle.js");
18
+ const jsReplay = await (0, replay_assets_1.fetchAsset)("https://snippet.meticulous.ai/replay/v1/replay-only-replayjs-forked.js");
19
+ const rrweb = await (0, replay_assets_1.fetchAsset)("https://snippet.meticulous.ai/replay/v1/rrweb.js");
20
+ let replayEvents;
21
+ try {
22
+ const replayer = await require("@alwaysmeticulous/replayer");
23
+ replayEvents = replayer.replayEvents;
24
+ }
25
+ catch (error) {
26
+ console.error("Error: could not import @alwaysmeticulous/replayer");
27
+ console.error(error);
28
+ process.exit(1);
29
+ }
30
+ await (0, promises_1.mkdir)((0, path_1.join)((0, local_data_1.getMeticulousLocalDataDir)(), "replays"), {
31
+ recursive: true,
32
+ });
33
+ const tempDir = await (0, promises_1.mkdtemp)((0, path_1.join)((0, local_data_1.getMeticulousLocalDataDir)(), "replays", `${new Date().toISOString()}-`));
34
+ const replayEventsParams = {
35
+ appUrl,
36
+ browser: null,
37
+ tempDir,
38
+ session,
39
+ sessionData,
40
+ recordingId: "manual-replay",
41
+ meticulousSha: "meticulousSha",
42
+ headless: false,
43
+ devTools: false,
44
+ dependencies: {
45
+ reanimator: {
46
+ key: "reanimator",
47
+ location: reanimator,
48
+ },
49
+ replayNetworkFile: {
50
+ key: "replayNetworkFile",
51
+ location: replayNetworkFile,
52
+ },
53
+ jsReplay: {
54
+ key: "jsReplay",
55
+ location: jsReplay,
56
+ },
57
+ rrweb: {
58
+ key: "rrweb",
59
+ location: rrweb,
60
+ },
61
+ },
62
+ };
63
+ await (0, promises_1.writeFile)((0, path_1.join)(tempDir, "replayEventsParams.json"), JSON.stringify(replayEventsParams));
64
+ const startTime = luxon_1.DateTime.utc();
65
+ const { eventsFinishedPromise, writesFinishedPromise } = await replayEvents(replayEventsParams);
66
+ await eventsFinishedPromise;
67
+ await writesFinishedPromise;
68
+ const endTime = luxon_1.DateTime.utc();
69
+ console.log(`Replay time: ${endTime.diff(startTime).as("seconds")} seconds`);
70
+ // TODO: push results to Meticulous
71
+ };
72
+ exports.replay = {
73
+ command: "replay",
74
+ describe: "Replay a recorded session",
75
+ builder: {
76
+ apiToken: {
77
+ string: true,
78
+ },
79
+ sessionId: {
80
+ string: true,
81
+ demandOption: true,
82
+ },
83
+ appUrl: {
84
+ string: true,
85
+ demandOption: true,
86
+ },
87
+ },
88
+ handler,
89
+ };
@@ -0,0 +1,8 @@
1
+ import { CommandModule } from "yargs";
2
+ interface Options {
3
+ apiToken?: string | null | undefined;
4
+ commitSha?: string | null | undefined;
5
+ dist: string;
6
+ }
7
+ export declare const uploadBuild: CommandModule<{}, Options>;
8
+ export {};
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.uploadBuild = void 0;
4
+ const client_1 = require("../../api/client");
5
+ const project_build_api_1 = require("../../api/project-build.api");
6
+ const project_api_1 = require("../../api/project.api");
7
+ const archive_1 = require("../../archive/archive");
8
+ const commit_sha_utils_1 = require("../../utils/commit-sha.utils");
9
+ const handler = async ({ apiToken, commitSha: commitSha_, dist, }) => {
10
+ // 1. Print project name
11
+ const client = (0, client_1.createClient)({ apiToken });
12
+ const project = await (0, project_api_1.getProject)(client);
13
+ if (!project) {
14
+ console.error("Error: Could not retrieve project data. Is the API token correct?");
15
+ process.exit(1);
16
+ }
17
+ const projectName = `${project.organization.name}/${project.name}`;
18
+ console.log(`Project: ${projectName}`);
19
+ // 2. Guess commit SHA1
20
+ const commitSha = await (0, commit_sha_utils_1.getCommitSha)(commitSha_);
21
+ if (!commitSha) {
22
+ console.error("Error: Could not guess commit SHA1, aborting");
23
+ process.exit(1);
24
+ }
25
+ console.log(`Commit: ${commitSha}`);
26
+ // 3. Create zip archive of build artifacts
27
+ console.log(`Uploading build artifacts from: ${dist}`);
28
+ try {
29
+ await (0, archive_1.checkDistFolder)(dist);
30
+ }
31
+ catch (error) {
32
+ if (error instanceof Error) {
33
+ console.error(`Error: ${error.message}`);
34
+ }
35
+ else {
36
+ console.error(`Error: ${error}`);
37
+ }
38
+ process.exit(1);
39
+ }
40
+ const archivePath = await (0, archive_1.createArchive)(dist);
41
+ // 4. Get upload URL
42
+ const projectBuild = await (0, project_build_api_1.createProjectBuild)(client, commitSha);
43
+ const uploadUrlData = await (0, project_build_api_1.getProjectBuildPushUrl)(client, projectBuild.id);
44
+ if (!uploadUrlData) {
45
+ console.error("Error: Could not get a push URL from the Meticulous API");
46
+ process.exit(1);
47
+ }
48
+ const uploadUrl = uploadUrlData.pushUrl;
49
+ // 5. Send archive to S3
50
+ try {
51
+ await (0, project_build_api_1.uploadProjectBuildArchive)(uploadUrl, archivePath);
52
+ }
53
+ catch (error) {
54
+ await (0, project_build_api_1.putProjectBuildPushedStatus)(client, projectBuild.id, "failure").catch((updateError) => console.error(updateError));
55
+ console.error(error);
56
+ process.exit(1);
57
+ }
58
+ // 6. Report successful upload to Meticulous
59
+ const updatedProjectBuild = await (0, project_build_api_1.putProjectBuildPushedStatus)(client, projectBuild.id, "success");
60
+ console.log("Build artifacts successfully sent to Meticulous");
61
+ console.log(updatedProjectBuild);
62
+ await (0, archive_1.deleteArchive)(archivePath);
63
+ };
64
+ exports.uploadBuild = {
65
+ command: "upload-build",
66
+ describe: "Upload build artifacts to Meticulous",
67
+ builder: {
68
+ apiToken: {
69
+ string: true,
70
+ },
71
+ commitSha: {
72
+ string: true,
73
+ },
74
+ dist: {
75
+ string: true,
76
+ demandOption: true,
77
+ },
78
+ },
79
+ handler,
80
+ };
package/dist/index.d.ts CHANGED
@@ -1 +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";
4
+ export { uploadBuild } from "./commands/upload-build/upload-build.command";
package/dist/index.js CHANGED
@@ -1,5 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- 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; } });
10
+ var upload_build_command_1 = require("./commands/upload-build/upload-build.command");
11
+ Object.defineProperty(exports, "uploadBuild", { enumerable: true, get: function () { return upload_build_command_1.uploadBuild; } });
@@ -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,17 +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");
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
+ };
9
16
  const main = () => {
10
17
  const promise = yargs_1.default
11
18
  .scriptName("meticulous")
12
19
  .usage(`$0 <command>
13
20
 
14
21
  Meticulous CLI`)
22
+ .command(download_session_command_1.downloadSession)
23
+ .command(replay_command_1.replay)
15
24
  .command(show_project_command_1.showProject)
25
+ .command(upload_build_command_1.uploadBuild)
16
26
  .help()
17
27
  .strictCommands()
18
- .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;
19
36
  if (promise instanceof Promise) {
20
37
  promise.catch((error) => {
21
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/index.ts","../src/main.ts","../../../node_modules/@types/minimatch/index.d.ts","../../../node_modules/@types/minimist/index.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/@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",{"version":"504748354caa6b804491bc919fdeba0cb0891bfab827584af3e1909680984733","signature":"e6439ea4291118b8f3b102c86ec7f8e4f2e98acd82cacec4526168b74855272e"},{"version":"385c8d0cc48ea3c9d6a4448090bd8fc42077e72cdc0c456a1cfb7818d296a4f2","signature":"99f3117878402cf4ef5a26ec99a7f56f4c8e5b3323e643123d95161675e710a4"},{"version":"c7402c55415facf4b3743b6db6fe76f50adba98b305e56917f87391d9837c2db","signature":"93dc54c5b435382f6b4a5fc858d37291c6033fa0288055beb76495e1a04bd721"},{"version":"b7b5062b102367740b755f7e0bd0ffd64bf9a6176c2f3407a2dab2c7065c5b0e","signature":"6de0535aa948d2842e0216bab3331b4b830b7c715ab9d6cff3df434cc573c47a"},"57e696fd1afdd866ec0dc28325173459d45d1b9a1bc4d8628df2ea0e6dcdcf46",{"version":"d6f61d2d416bdcb95c843ca31121a8f0a78c331d8c343d8d66eebfa6ac5a940b","signature":"da06c2a8dc3608bc685a211ccd839ca335f466e6aa22cfeef085e219ed82149d"},"8841e2aa774b89bd23302dede20663306dc1b9902431ac64b24be8b8d0e3f649","209e814e8e71aec74f69686a9506dd7610b97ab59dcee9446266446f72a76d05","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","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":[[98],[55,98],[58,98],[59,64,98],[60,70,71,78,87,97,98],[60,61,70,78,98],[62,98],[63,64,71,79,98],[64,87,94,98],[65,67,70,78,98],[66,98],[67,68,98],[69,70,98],[70,98],[70,71,72,87,97,98],[70,71,72,87,98],[73,78,87,97,98],[70,71,73,74,78,87,94,97,98],[73,75,87,94,97,98],[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,104],[70,76,98],[77,97,98],[67,70,78,87,98],[79,98],[80,98],[58,81,98],[82,96,98,102],[83,98],[84,98],[70,85,98],[85,86,98,100],[70,87,88,89,98],[87,89,98],[87,88,98],[90,98],[91,98],[70,92,93,98],[92,93,98],[64,78,87,94,98],[95,98],[78,96,98],[59,73,84,97,98],[64,98],[87,98,99],[98,100],[98,101],[59,64,70,72,81,87,97,98,100,102],[87,98,103],[44,98],[46,47,98],[46,98],[45,48,49,98],[50,98],[45,50,98],[46],[45],[50]],"referencedMap":[[53,1],[54,1],[55,2],[56,2],[58,3],[59,4],[60,5],[61,6],[62,7],[63,8],[64,9],[65,10],[66,11],[67,12],[68,12],[69,13],[70,14],[71,15],[72,16],[57,1],[104,1],[73,17],[74,18],[75,19],[105,20],[76,21],[77,22],[78,23],[79,24],[80,25],[81,26],[82,27],[83,28],[84,29],[85,30],[86,31],[87,32],[89,33],[88,34],[90,35],[91,36],[92,37],[93,38],[94,39],[95,40],[96,41],[97,42],[98,43],[99,44],[100,45],[101,46],[102,47],[103,48],[106,1],[107,1],[44,1],[45,49],[46,1],[8,1],[9,1],[13,1],[12,1],[2,1],[14,1],[15,1],[16,1],[17,1],[18,1],[19,1],[20,1],[21,1],[3,1],[4,1],[25,1],[22,1],[23,1],[24,1],[26,1],[27,1],[28,1],[5,1],[29,1],[30,1],[31,1],[32,1],[6,1],[43,1],[33,1],[34,1],[35,1],[36,1],[7,1],[41,1],[37,1],[38,1],[39,1],[40,1],[1,1],[42,1],[11,1],[10,1],[48,50],[49,51],[50,52],[51,53],[52,54],[47,1]],"exportedModulesMap":[[53,1],[54,1],[55,2],[56,2],[58,3],[59,4],[60,5],[61,6],[62,7],[63,8],[64,9],[65,10],[66,11],[67,12],[68,12],[69,13],[70,14],[71,15],[72,16],[57,1],[104,1],[73,17],[74,18],[75,19],[105,20],[76,21],[77,22],[78,23],[79,24],[80,25],[81,26],[82,27],[83,28],[84,29],[85,30],[86,31],[87,32],[89,33],[88,34],[90,35],[91,36],[92,37],[93,38],[94,39],[95,40],[96,41],[97,42],[98,43],[99,44],[100,45],[101,46],[102,47],[103,48],[106,1],[107,1],[44,1],[45,49],[46,1],[8,1],[9,1],[13,1],[12,1],[2,1],[14,1],[15,1],[16,1],[17,1],[18,1],[19,1],[20,1],[21,1],[3,1],[4,1],[25,1],[22,1],[23,1],[24,1],[26,1],[27,1],[28,1],[5,1],[29,1],[30,1],[31,1],[32,1],[6,1],[43,1],[33,1],[34,1],[35,1],[36,1],[7,1],[41,1],[37,1],[38,1],[39,1],[40,1],[1,1],[42,1],[11,1],[10,1],[48,55],[49,55],[50,56],[51,57]],"semanticDiagnosticsPerFile":[53,54,55,56,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,57,104,73,74,75,105,76,77,78,79,80,81,82,83,84,85,86,87,89,88,90,91,92,93,94,95,96,97,98,99,100,101,102,103,106,107,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,49,50,51,52,47]},"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/local-data/replay-assets.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","../../../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","../../../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","e1c4dbc8e86098998d6a7457acbed85e24957dc47ecc558eeaf241119659af1d","784ce237ed2918edce746a9a2f5105155525b4d4f17916c53d9946ac458dd2f1","1bb8c0dd0981e05a4dbbb2cae6d63395a2de76d8f2286a706bb559637a1e4d80","b7b5062b102367740b755f7e0bd0ffd64bf9a6176c2f3407a2dab2c7065c5b0e","e4da0f32898dc138676cc5b0a4788129001fb255a407d9d16fc69448e6b37eba","8841e2aa774b89bd23302dede20663306dc1b9902431ac64b24be8b8d0e3f649","fd326577c62145816fe1acc306c734c2396487f76719d3785d4e825b34540b33","51440322bec180cf452ce474b4f69b993b4eb491fecf47abd958d3342747d6b0","9d6e6c3ca60782b62bb4d12159f36c594eb846fda6b1847d84dd66cabd368e4f","f971cf15188513b2b25ec3c94b27ed4a159a912ad3aa821be02224bd9ebe63b7","a918f37fbe5288f23521e23435021768721ff689e428e85c9bca18d4558a0a00","c84cd29c2de8cb7bd9a70365b2dae5bcec4fed4f8fff6b81d57a985755f2b9a3","7ac591a9978016e36e6d429ddc75bb13459c2c158f22d367ebb3d7ac11ca564c","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,131],[69,70,97,104,130],[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,71,97],[46,97],[70,71,78,79,97,132],[45,48,51,97],[45,48,50,51,71,79,97,115,124,125],[45,48,97,127],[45,48,97,127,129,133,134],[52,97,126,128,135],[46,50,71,79,97],[46,49,50,71,79,97],[45,50,52,97,126,128,135],[59,97],[97,114],[53,97,113],[53,97,107,112]],"referencedMap":[[132,1],[131,2],[124,3],[120,4],[118,5],[121,6],[119,7],[123,8],[117,9],[122,10],[116,9],[130,9],[138,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],[139,9],[140,9],[141,9],[44,9],[45,58],[142,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],[129,66],[127,67],[49,67],[133,68],[52,69],[126,70],[128,71],[135,72],[136,73],[50,34],[125,74],[51,75],[137,76],[47,9],[134,77],[115,78],[114,79],[113,80],[53,9]],"exportedModulesMap":[[132,1],[131,2],[124,3],[120,4],[118,5],[121,6],[119,7],[123,8],[117,9],[122,10],[116,9],[130,9],[138,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],[139,9],[140,9],[141,9],[44,9],[45,58],[142,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],[129,66],[127,67],[49,67],[133,68],[52,69],[126,70],[128,71],[135,72],[136,73],[50,34],[125,74],[51,75],[137,76],[47,9],[134,77],[115,78],[114,79],[113,80],[53,9]],"semanticDiagnosticsPerFile":[132,131,124,120,118,121,119,123,117,122,116,130,138,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,139,140,141,44,45,142,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,129,127,49,133,52,126,128,135,136,50,125,51,137,47,134,115,114,113,53]},"version":"4.6.2"}
@@ -0,0 +1 @@
1
+ export declare const getCommitSha: (commitSha: string | null | undefined) => Promise<string>;
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getCommitSha = void 0;
4
+ const child_process_1 = require("child_process");
5
+ const getGitRevParseHead = () => {
6
+ return new Promise((resolve, reject) => {
7
+ (0, child_process_1.exec)("git rev-parse HEAD", { encoding: "utf-8" }, (error, output) => {
8
+ if (error) {
9
+ reject(error);
10
+ return;
11
+ }
12
+ resolve(output);
13
+ });
14
+ });
15
+ };
16
+ const getCommitSha = async (commitSha_) => {
17
+ if (commitSha_) {
18
+ return commitSha_;
19
+ }
20
+ try {
21
+ const gitCommitSha = (await getGitRevParseHead()).trim();
22
+ return gitCommitSha;
23
+ }
24
+ catch (error) {
25
+ console.error(error);
26
+ return "";
27
+ }
28
+ };
29
+ exports.getCommitSha = getCommitSha;
package/package.json CHANGED
@@ -1,19 +1,17 @@
1
1
  {
2
2
  "name": "@alwaysmeticulous/cli",
3
- "version": "1.0.0-alpha.1",
3
+ "version": "1.1.0-alpha.0",
4
+ "description": "The Meticulous CLI",
5
+ "license": "ISC",
4
6
  "main": "dist/index.js",
5
7
  "types": "dist/index.d.ts",
6
8
  "files": [
7
9
  "bin",
8
- "dist",
9
- "README.md"
10
+ "dist"
10
11
  ],
11
12
  "bin": {
12
13
  "meticulous": "bin/meticulous"
13
14
  },
14
- "publishConfig": {
15
- "access": "restricted"
16
- },
17
15
  "scripts": {
18
16
  "clean": "rimraf dist",
19
17
  "build": "tsc --build tsconfig.json",
@@ -23,9 +21,20 @@
23
21
  "cli:dev": "ts-node src/main.ts"
24
22
  },
25
23
  "dependencies": {
24
+ "@alwaysmeticulous/replayer": "link:../replayer",
25
+ "archiver": "^5.3.0",
26
26
  "axios": "^0.25.0",
27
+ "luxon": "^2.2.0",
27
28
  "yargs": "^17.3.1"
28
29
  },
30
+ "peerDependencies": {
31
+ "@alwaysmeticulous/replayer": "file:../replayer"
32
+ },
33
+ "peerDependenciesMeta": {
34
+ "@alwaysmeticulous/replayer": {
35
+ "optional": true
36
+ }
37
+ },
29
38
  "author": {
30
39
  "name": "The Meticulous Team",
31
40
  "email": "eng@meticulous.ai",
@@ -33,5 +42,14 @@
33
42
  },
34
43
  "engines": {
35
44
  "node": ">= 12"
45
+ },
46
+ "homepage": "https://github.com/alwaysmeticulous/meticulous-sdk",
47
+ "repository": {
48
+ "type": "git",
49
+ "url": "https://github.com/alwaysmeticulous/meticulous-sdk.git",
50
+ "directory": "packages/cli"
51
+ },
52
+ "bugs": {
53
+ "url": "https://github.com/alwaysmeticulous/meticulous-sdk/issues"
36
54
  }
37
55
  }