@appland/appmap 3.27.6 → 3.29.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/CHANGELOG.md +34 -0
- package/built/appmap.html +1 -1
- package/built/cmds/agentInstaller/agentInstallerProcedure.js +5 -5
- package/built/cmds/agentInstaller/agentInstallerProcedure.js.map +1 -1
- package/built/cmds/record/action/printAppMapCount.js +9 -15
- package/built/cmds/record/action/printAppMapCount.js.map +1 -1
- package/built/cmds/record/action/startTestCases.js +10 -6
- package/built/cmds/record/action/startTestCases.js.map +1 -1
- package/built/cmds/record/record.js +3 -2
- package/built/cmds/record/record.js.map +1 -1
- package/built/depends.js +37 -20
- package/built/depends.js.map +1 -1
- package/built/fingerprint/appmapIndex.js +156 -0
- package/built/fingerprint/appmapIndex.js.map +1 -0
- package/built/fingerprint/fingerprintQueue.js +13 -1
- package/built/fingerprint/fingerprintQueue.js.map +1 -1
- package/built/fingerprint/fingerprinter.js +41 -100
- package/built/fingerprint/fingerprinter.js.map +1 -1
- package/built/main.js.map +1 -1
- package/built/search/findEvents.js +9 -1
- package/built/search/findEvents.js.map +1 -1
- package/built/telemetry.js +1 -2
- package/built/telemetry.js.map +1 -1
- package/built/utils.js +26 -45
- package/built/utils.js.map +1 -1
- package/package.json +4 -5
|
@@ -63,13 +63,13 @@ class AgentInstallerProcedure extends agentProcedure_1.default {
|
|
|
63
63
|
await this.validateProject(useExistingAppMapYml);
|
|
64
64
|
const successMessage = [
|
|
65
65
|
chalk_1.default.green('Success! The AppMap agent has been installed.'),
|
|
66
|
+
'',
|
|
67
|
+
chalk_1.default.blue('NEXT STEP: Record AppMaps'),
|
|
68
|
+
'',
|
|
69
|
+
'You can consult the AppMap documentation, or continue with the ',
|
|
70
|
+
'instructions provided in the AppMap code editor extension.',
|
|
66
71
|
];
|
|
67
|
-
successMessage.push('For more information on recording AppMaps, visit:', chalk_1.default.blue(this.installer.documentation));
|
|
68
72
|
userInteraction_1.default.success(successMessage.join('\n'));
|
|
69
|
-
userInteraction_1.default.success(`The next step is to generate AppMaps. You can consult the AppMap documentation, or dive right in with:
|
|
70
|
-
|
|
71
|
-
npx @appland/appmap record
|
|
72
|
-
`, 'left');
|
|
73
73
|
}
|
|
74
74
|
}
|
|
75
75
|
exports.default = AgentInstallerProcedure;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agentInstallerProcedure.js","sourceRoot":"","sources":["../../../src/cmds/agentInstaller/agentInstallerProcedure.ts"],"names":[],"mappings":";;;;;AAAA,kDAA0B;AAC1B,4CAAoB;AAEpB,kDAA0B;AAG1B,sCAAwD;AACxD,mDAAsC;AACtC,yEAAoC;AACpC,sEAA8C;AAE9C,MAAqB,uBAAwB,SAAQ,wBAAc;IACjE,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,yBAAE,CAAC,MAAM,CAAC;YAClC,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,SAAS;YACf,OAAO,EAAE;gBACP,6DAA6D;gBAC7D,MAAM,IAAI,CAAC,wBAAwB,EAAE;gBACrC,EAAE;gBACF,oBAAoB;aACrB;iBACE,IAAI,EAAE;iBACN,IAAI,CAAC,IAAI,CAAC;SACd,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,EAAE;YACZ,yBAAE,CAAC,MAAM,GAAG,wBAAwB,CAAC;YACrC,yBAAE,CAAC,KAAK,CACN;gBACE,wEAAwE;gBACxE,OAAO,eAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,wBAAwB;aACpD,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;YACF,MAAM,IAAI,mBAAU,CAAC,mDAAmD,CAAC,CAAC;SAC3E;QAED,IAAI,oBAAoB,GAAG,KAAK,CAAC;QACjC,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB,MAAM,YAAY,GAAG,cAAc,CAAC;YACpC,MAAM,SAAS,GAAG,WAAW,CAAC;YAC9B,MAAM,KAAK,GAAG,OAAO,CAAC;YAEtB,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,yBAAE,CAAC,MAAM,CAAC;gBAC7C,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,oBAAoB;gBAC1B,OAAO,EACL,uFAAuF;gBACzF,OAAO,EAAE,CAAC,YAAY,EAAE,SAAS,EAAE,KAAK,CAAC;aAC1C,CAAC,CAAC;YAEH,IAAI,kBAAkB,KAAK,KAAK,EAAE;gBAChC,eAAK,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,KAAK,EAAE,CAAC,CAAC;aAC5B;YAED,IAAI,kBAAkB,KAAK,YAAY,EAAE;gBACvC,oBAAoB,GAAG,IAAI,CAAC;aAC7B;SACF;QAED,yBAAE,CAAC,MAAM,GAAG,gCAAgC,CAAC;QAE7C,MAAM,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;QAEpC,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAE3B,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC;QAClC,IAAI,CAAC,oBAAoB,EAAE;YACzB,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;YACvD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAA,mBAAG,EAAC,WAAW,CAAC,CAAC;YAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAEhC,YAAE,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;SAC1D;QAED,MAAM,IAAI,CAAC,eAAe,CAAC,oBAAoB,CAAC,CAAC;QAEjD,MAAM,cAAc,GAAG;YACrB,eAAK,CAAC,KAAK,CAAC,+CAA+C,CAAC;
|
|
1
|
+
{"version":3,"file":"agentInstallerProcedure.js","sourceRoot":"","sources":["../../../src/cmds/agentInstaller/agentInstallerProcedure.ts"],"names":[],"mappings":";;;;;AAAA,kDAA0B;AAC1B,4CAAoB;AAEpB,kDAA0B;AAG1B,sCAAwD;AACxD,mDAAsC;AACtC,yEAAoC;AACpC,sEAA8C;AAE9C,MAAqB,uBAAwB,SAAQ,wBAAc;IACjE,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,yBAAE,CAAC,MAAM,CAAC;YAClC,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,SAAS;YACf,OAAO,EAAE;gBACP,6DAA6D;gBAC7D,MAAM,IAAI,CAAC,wBAAwB,EAAE;gBACrC,EAAE;gBACF,oBAAoB;aACrB;iBACE,IAAI,EAAE;iBACN,IAAI,CAAC,IAAI,CAAC;SACd,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,EAAE;YACZ,yBAAE,CAAC,MAAM,GAAG,wBAAwB,CAAC;YACrC,yBAAE,CAAC,KAAK,CACN;gBACE,wEAAwE;gBACxE,OAAO,eAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,wBAAwB;aACpD,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;YACF,MAAM,IAAI,mBAAU,CAAC,mDAAmD,CAAC,CAAC;SAC3E;QAED,IAAI,oBAAoB,GAAG,KAAK,CAAC;QACjC,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB,MAAM,YAAY,GAAG,cAAc,CAAC;YACpC,MAAM,SAAS,GAAG,WAAW,CAAC;YAC9B,MAAM,KAAK,GAAG,OAAO,CAAC;YAEtB,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,yBAAE,CAAC,MAAM,CAAC;gBAC7C,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,oBAAoB;gBAC1B,OAAO,EACL,uFAAuF;gBACzF,OAAO,EAAE,CAAC,YAAY,EAAE,SAAS,EAAE,KAAK,CAAC;aAC1C,CAAC,CAAC;YAEH,IAAI,kBAAkB,KAAK,KAAK,EAAE;gBAChC,eAAK,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,KAAK,EAAE,CAAC,CAAC;aAC5B;YAED,IAAI,kBAAkB,KAAK,YAAY,EAAE;gBACvC,oBAAoB,GAAG,IAAI,CAAC;aAC7B;SACF;QAED,yBAAE,CAAC,MAAM,GAAG,gCAAgC,CAAC;QAE7C,MAAM,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;QAEpC,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAE3B,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC;QAClC,IAAI,CAAC,oBAAoB,EAAE;YACzB,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;YACvD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAA,mBAAG,EAAC,WAAW,CAAC,CAAC;YAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAEhC,YAAE,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;SAC1D;QAED,MAAM,IAAI,CAAC,eAAe,CAAC,oBAAoB,CAAC,CAAC;QAEjD,MAAM,cAAc,GAAG;YACrB,eAAK,CAAC,KAAK,CAAC,+CAA+C,CAAC;YAC5D,EAAE;YACF,eAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC;YACvC,EAAE;YACF,iEAAiE;YACjE,4DAA4D;SAC7D,CAAC;QAEF,yBAAE,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACxC,CAAC;CACF;AA7ED,0CA6EC"}
|
|
@@ -3,25 +3,19 @@ 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
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
6
7
|
const userInteraction_1 = __importDefault(require("../../userInteraction"));
|
|
7
8
|
const countAppMaps_1 = __importDefault(require("./countAppMaps"));
|
|
8
9
|
async function printAppMapCount(appMapDir) {
|
|
9
10
|
const appMapCount = await (0, countAppMaps_1.default)(appMapDir);
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
To search the AppMaps for a class or package, run a command like:
|
|
20
|
-
|
|
21
|
-
npx @appland/appmap inspect --appmap-dir ${appMapDir} -i package:com/example/app
|
|
22
|
-
npx @appland/appmap inspect --appmap-dir ${appMapDir} -i package:app/models
|
|
23
|
-
npx @appland/appmap inspect --appmap-dir ${appMapDir} -i class:app/models/User
|
|
24
|
-
`, 'left');
|
|
11
|
+
const successMessage = [
|
|
12
|
+
chalk_1.default.green(`Success! There are now ${appMapCount} AppMap files in directory '${appMapDir}'.`),
|
|
13
|
+
'',
|
|
14
|
+
chalk_1.default.blue('NEXT STEP: Open AppMaps'),
|
|
15
|
+
'',
|
|
16
|
+
'Return to the AppMap extension in your code editor to open and view your AppMaps.',
|
|
17
|
+
];
|
|
18
|
+
userInteraction_1.default.success(successMessage.join('\n'));
|
|
25
19
|
}
|
|
26
20
|
exports.default = printAppMapCount;
|
|
27
21
|
//# sourceMappingURL=printAppMapCount.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"printAppMapCount.js","sourceRoot":"","sources":["../../../../src/cmds/record/action/printAppMapCount.ts"],"names":[],"mappings":";;;;;AAAA,4EAAuC;AACvC,kEAA0C;AAE3B,KAAK,UAAU,gBAAgB,CAAC,SAAiB;IAC9D,MAAM,WAAW,GAAG,MAAM,IAAA,sBAAY,EAAC,SAAS,CAAC,CAAC;IAElD,
|
|
1
|
+
{"version":3,"file":"printAppMapCount.js","sourceRoot":"","sources":["../../../../src/cmds/record/action/printAppMapCount.ts"],"names":[],"mappings":";;;;;AAAA,kDAA0B;AAC1B,4EAAuC;AACvC,kEAA0C;AAE3B,KAAK,UAAU,gBAAgB,CAAC,SAAiB;IAC9D,MAAM,WAAW,GAAG,MAAM,IAAA,sBAAY,EAAC,SAAS,CAAC,CAAC;IAElD,MAAM,cAAc,GAAG;QACrB,eAAK,CAAC,KAAK,CACT,0BAA0B,WAAW,+BAA+B,SAAS,IAAI,CAClF;QACD,EAAE;QACF,eAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC;QACrC,EAAE;QACF,mFAAmF;KACpF,CAAC;IAEF,yBAAE,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACxC,CAAC;AAdD,mCAcC"}
|
|
@@ -9,12 +9,16 @@ const configuration_1 = require("../configuration");
|
|
|
9
9
|
async function startTestCases() {
|
|
10
10
|
if (Boolean(process.stdout.isTTY)) {
|
|
11
11
|
const defaultMaxTime = await (0, configuration_1.readSetting)('test_recording.max_time', 30);
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
12
|
+
let maxTime;
|
|
13
|
+
do {
|
|
14
|
+
maxTime = (await userInteraction_1.default.prompt({
|
|
15
|
+
type: 'input',
|
|
16
|
+
name: 'maxTime',
|
|
17
|
+
message: 'Enter the maximum time (in seconds) to allow test cases to run (-1 to run forever):',
|
|
18
|
+
default: defaultMaxTime,
|
|
19
|
+
}))['maxTime'];
|
|
20
|
+
maxTime = Number(maxTime);
|
|
21
|
+
} while (Number.isNaN(maxTime));
|
|
18
22
|
if (maxTime !== defaultMaxTime)
|
|
19
23
|
await (0, configuration_1.writeSetting)('test_recording.max_time', maxTime);
|
|
20
24
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"startTestCases.js","sourceRoot":"","sources":["../../../../src/cmds/record/action/startTestCases.ts"],"names":[],"mappings":";;;;;AAAA,6EAAqD;AACrD,4EAAuC;AACvC,oDAA6D;AAE9C,KAAK,UAAU,cAAc;IAC1C,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;QACjC,MAAM,cAAc,GAAG,MAAM,IAAA,2BAAW,EAAC,yBAAyB,EAAE,EAAE,CAAC,CAAC;QACxE,
|
|
1
|
+
{"version":3,"file":"startTestCases.js","sourceRoot":"","sources":["../../../../src/cmds/record/action/startTestCases.ts"],"names":[],"mappings":";;;;;AAAA,6EAAqD;AACrD,4EAAuC;AACvC,oDAA6D;AAE9C,KAAK,UAAU,cAAc;IAC1C,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;QACjC,MAAM,cAAc,GAAG,MAAM,IAAA,2BAAW,EAAC,yBAAyB,EAAE,EAAE,CAAC,CAAC;QACxE,IAAI,OAA2B,CAAC;QAChC,GAAG;YACD,OAAO,GAAG,CACR,MAAM,yBAAE,CAAC,MAAM,CAAC;gBACd,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,SAAS;gBACf,OAAO,EACL,qFAAqF;gBACvF,OAAO,EAAE,cAAc;aACxB,CAAC,CACH,CAAC,SAAS,CAAC,CAAC;YACb,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;SAC3B,QAAQ,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE;QAChC,IAAI,OAAO,KAAK,cAAc;YAC5B,MAAM,IAAA,4BAAY,EAAC,yBAAyB,EAAE,OAAO,CAAC,CAAC;KAC1D;IAED,MAAM,2BAAiB,CAAC,KAAK,EAAE,CAAC;AAClC,CAAC;AArBD,iCAqBC"}
|
|
@@ -26,11 +26,11 @@ exports.handler = exports.builder = exports.describe = exports.command = void 0;
|
|
|
26
26
|
const utils_1 = require("../../utils");
|
|
27
27
|
const runCommand_1 = __importDefault(require("../runCommand"));
|
|
28
28
|
const showAppMap_1 = __importDefault(require("../open/showAppMap"));
|
|
29
|
-
const configuration_1 = require("./configuration");
|
|
30
29
|
const process_1 = require("process");
|
|
31
30
|
const initial_1 = __importDefault(require("./state/initial"));
|
|
32
31
|
const telemetry_1 = __importDefault(require("../../telemetry"));
|
|
33
32
|
const recordContext_1 = __importDefault(require("./recordContext"));
|
|
33
|
+
const configuration_1 = require("./configuration");
|
|
34
34
|
exports.command = 'record [mode]';
|
|
35
35
|
exports.describe = 'Create an AppMap via interactive recording, aka remote recording.';
|
|
36
36
|
const builder = (args) => {
|
|
@@ -62,7 +62,8 @@ async function handler(argv) {
|
|
|
62
62
|
}
|
|
63
63
|
if (appmapConfig)
|
|
64
64
|
(0, configuration_1.setAppMapConfigFilePath)(appmapConfig);
|
|
65
|
-
const
|
|
65
|
+
const appmapDir = (await (0, configuration_1.readConfigOption)('appmap_dir', '.'));
|
|
66
|
+
const recordContext = new recordContext_1.default(appmapDir);
|
|
66
67
|
await recordContext.initialize();
|
|
67
68
|
const { mode } = argv;
|
|
68
69
|
async function initialState() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"record.js","sourceRoot":"","sources":["../../../src/cmds/record/record.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAA+C;AAC/C,+DAAuC;AACvC,oEAA4C;
|
|
1
|
+
{"version":3,"file":"record.js","sourceRoot":"","sources":["../../../src/cmds/record/record.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAA+C;AAC/C,+DAAuC;AACvC,oEAA4C;AAI5C,qCAAgC;AAEhC,8DAAsC;AACtC,gEAAwC;AACxC,oEAA4C;AAC5C,mDAA4E;AAE/D,QAAA,OAAO,GAAG,eAAe,CAAC;AAC1B,QAAA,QAAQ,GACnB,mEAAmE,CAAC;AAE/D,MAAM,OAAO,GAAG,CAAC,IAAgB,EAAE,EAAE;IAC1C,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;QACtB,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC;KAC5B,CAAC,CAAC;IAEH,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;QACvB,QAAQ,EAAE,oCAAoC;QAC9C,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,GAAG;KACX,CAAC,CAAC;IAEH,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE;QAC3B,QAAQ,EAAE,kDAAkD;QAC5D,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,GAAG;KACX,CAAC,CAAC;IAEH,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;AACvB,CAAC,CAAC;AAnBW,QAAA,OAAO,WAmBlB;AAEK,KAAK,UAAU,OAAO,CAAC,IAAS;IACrC,IAAA,eAAO,EAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAEtB,MAAM,SAAS,GAAG,KAAK,IAAI,EAAE;QAC3B,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC;QACzC,IAAI,SAAS,EAAE;YACb,IAAI,IAAA,eAAO,GAAE;gBAAE,OAAO,CAAC,GAAG,CAAC,2BAA2B,SAAS,EAAE,CAAC,CAAC;YACnE,IAAA,eAAK,EAAC,SAAS,CAAC,CAAC;SAClB;QAED,IAAI,YAAY;YAAE,IAAA,uCAAuB,EAAC,YAAY,CAAC,CAAC;QAExD,MAAM,SAAS,GAAG,CAAC,MAAM,IAAA,gCAAgB,EAAC,YAAY,EAAE,GAAG,CAAC,CAAW,CAAC;QAExE,MAAM,aAAa,GAAG,IAAI,uBAAa,CAAC,SAAS,CAAC,CAAC;QACnD,MAAM,aAAa,CAAC,UAAU,EAAE,CAAC;QAEjC,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;QAEtB,KAAK,UAAU,YAAY;YACzB,IAAI,IAAI,EAAE;gBACR,aAAa,CAAC,YAAY,GAAG,IAAI,CAAC;gBAClC,OAAO,CAAC,wDAAa,kBAAkB,IAAI,EAAE,GAAC,CAAC,CAAC,OAAgB,CAAC;aAClE;iBAAM;gBACL,OAAO,iBAAO,CAAC;aAChB;QACH,CAAC;QAED,IAAI,KAAK,GAA+B,MAAM,YAAY,EAAE,CAAC;QAC7D,OAAO,KAAK,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE;YAC3C,IAAI,IAAA,eAAO,GAAE;gBAAE,OAAO,CAAC,IAAI,CAAC,mBAAmB,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YAE7D,IAAI,YAAgC,CAAC;YACrC,IAAI,QAAoC,CAAC;YACzC,IAAI;gBACF,QAAQ,GAAG,MAAM,KAAK,CAAC,aAAa,CAAC,CAAC;aACvC;YAAC,OAAO,GAAG,EAAE;gBACZ,YAAY,GAAI,GAAW,CAAC,QAAQ,EAAE,CAAC;gBACvC,MAAM,GAAG,CAAC;aACX;oBAAS;gBACR,MAAM,UAAU,GAAG,aAAa,CAAC,UAAU,EAAE,CAAC;gBAC9C,IAAI,YAAY,EAAE;oBAChB,UAAU,CAAC,YAAY,GAAG,YAAY,CAAC;iBACxC;gBACD,mBAAS,CAAC,SAAS,CAAC;oBAClB,IAAI,EAAE,UAAU,KAAK,CAAC,IAAI,EAAE;oBAC5B,UAAU;oBACV,OAAO,EAAE,MAAM,CAAC,MAAM,CACpB;wBACE,QAAQ,EAAE,IAAA,eAAO,GAAE;qBACpB,EACD,aAAa,CAAC,OAAO,EAAE,CACxB;iBACF,CAAC,CAAC;aACJ;YAED,KAAK,GAAG,QAAQ,CAAC;SAClB;QAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAC7B,mBAAS,CAAC,SAAS,CAAC;gBAClB,IAAI,EAAE,mBAAmB;gBACzB,UAAU,EAAE;oBACV,QAAQ,EAAE,KAAiB;iBAC5B;gBACD,OAAO,EAAE;oBACP,QAAQ,EAAE,IAAA,eAAO,GAAE;iBACpB;aACF,CAAC,CAAC;YAEH,MAAM,IAAA,oBAAU,EAAC,KAAiB,CAAC,CAAC;SACrC;IACH,CAAC,CAAC;IAEF,OAAO,IAAA,oBAAU,EAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;AACzC,CAAC;AA3ED,0BA2EC"}
|
package/built/depends.js
CHANGED
|
@@ -46,7 +46,7 @@ class Depends {
|
|
|
46
46
|
* @param {string} filePath
|
|
47
47
|
* @returns string
|
|
48
48
|
*/
|
|
49
|
-
|
|
49
|
+
makeAbsolutePath(filePath) {
|
|
50
50
|
if (isAbsolute(filePath)) {
|
|
51
51
|
return filePath;
|
|
52
52
|
}
|
|
@@ -62,23 +62,23 @@ class Depends {
|
|
|
62
62
|
*/
|
|
63
63
|
async depends(callback) {
|
|
64
64
|
const outOfDateNames = new Set();
|
|
65
|
-
async
|
|
65
|
+
const checkClassMap = async (fileName) => {
|
|
66
66
|
const indexDir = dirname(fileName);
|
|
67
67
|
if (basename(indexDir) === 'Inventory') {
|
|
68
68
|
return;
|
|
69
69
|
}
|
|
70
|
-
let
|
|
70
|
+
let appmapUpdatedAtStr;
|
|
71
71
|
try {
|
|
72
|
-
|
|
72
|
+
appmapUpdatedAtStr = await fsp.readFile(joinPath(indexDir, 'mtime'));
|
|
73
73
|
}
|
|
74
74
|
catch (err) {
|
|
75
75
|
if (err.code !== 'ENOENT')
|
|
76
76
|
console.warn(err);
|
|
77
77
|
return;
|
|
78
78
|
}
|
|
79
|
-
const
|
|
79
|
+
const appmapUpdatedAt = parseFloat(appmapUpdatedAtStr);
|
|
80
80
|
if (verbose()) {
|
|
81
|
-
console.
|
|
81
|
+
console.log(`Checking AppMap ${indexDir} with timestamp ${appmapUpdatedAt}`);
|
|
82
82
|
}
|
|
83
83
|
const classMap = JSON.parse(await fsp.readFile(fileName));
|
|
84
84
|
const codeLocations = new Set();
|
|
@@ -92,31 +92,40 @@ class Depends {
|
|
|
92
92
|
}
|
|
93
93
|
};
|
|
94
94
|
classMap.forEach(collectFilePaths);
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
async function checkTimestamps(filePath) {
|
|
99
|
-
const dependencyFilePath = this.applyBaseDir(filePath);
|
|
95
|
+
const isClientProvidedFile = (filePath) => this.testLocations.has(filePath);
|
|
96
|
+
const isFileModifiedSince = async (filePath) => {
|
|
97
|
+
const dependencyFilePath = this.makeAbsolutePath(filePath);
|
|
100
98
|
const dependencyModifiedAt = await mtime(dependencyFilePath);
|
|
99
|
+
// TODO: Actually, if the dependency file does not exist, we should return true.
|
|
100
|
+
// However, at this time we can't tell the difference between a dependency file that has
|
|
101
|
+
// been deleted, and one that never existed in the first place. What does 'never existed in the first place'
|
|
102
|
+
// mean? Well, unfortunately the Ruby agent (and perhaps others?) will write file locations
|
|
103
|
+
// like 'JSON' for native functions that don't actually correspond to real files.
|
|
104
|
+
if (!dependencyModifiedAt) {
|
|
105
|
+
if (verbose())
|
|
106
|
+
console.log(`[depends] ${dependencyFilePath} does not exist`);
|
|
107
|
+
return false;
|
|
108
|
+
}
|
|
109
|
+
const uptodate = appmapUpdatedAt < dependencyModifiedAt;
|
|
101
110
|
if (verbose()) {
|
|
102
|
-
console.
|
|
111
|
+
console.log(`[depends] ${dependencyFilePath} timestamp is ${dependencyModifiedAt}, ${uptodate ? 'up to date' : 'NOT up to date'} with ${indexDir} (${appmapUpdatedAt})`);
|
|
103
112
|
}
|
|
104
|
-
return
|
|
105
|
-
}
|
|
113
|
+
return uptodate;
|
|
114
|
+
};
|
|
106
115
|
if (this.testLocations && verbose()) {
|
|
107
|
-
console.
|
|
116
|
+
console.log(`Checking whether AppMap contains any client-provided file: [ ${[
|
|
108
117
|
...this.testLocations,
|
|
109
118
|
]
|
|
110
119
|
.sort()
|
|
111
120
|
.join(', ')} ]`);
|
|
112
121
|
}
|
|
113
122
|
const testFunction = this.testLocations
|
|
114
|
-
?
|
|
115
|
-
:
|
|
123
|
+
? isClientProvidedFile
|
|
124
|
+
: isFileModifiedSince;
|
|
116
125
|
await Promise.all([...codeLocations].map(async (filePath) => {
|
|
117
126
|
if (await testFunction(filePath)) {
|
|
118
127
|
if (verbose()) {
|
|
119
|
-
console.
|
|
128
|
+
console.log(`${filePath} requires rebuild of AppMap ${indexDir}`);
|
|
120
129
|
}
|
|
121
130
|
if (!outOfDateNames.has(indexDir)) {
|
|
122
131
|
if (callback) {
|
|
@@ -126,8 +135,16 @@ class Depends {
|
|
|
126
135
|
}
|
|
127
136
|
}
|
|
128
137
|
}));
|
|
129
|
-
}
|
|
130
|
-
await processFiles(`${this.appMapDir}/**/classMap.json`,
|
|
138
|
+
};
|
|
139
|
+
await processFiles(`${this.appMapDir}/**/classMap.json`, async (fileName) => {
|
|
140
|
+
try {
|
|
141
|
+
await checkClassMap(fileName);
|
|
142
|
+
}
|
|
143
|
+
catch (e) {
|
|
144
|
+
console.log(e.code);
|
|
145
|
+
console.warn(`Error checking uptodate ${fileName}: ${e}`);
|
|
146
|
+
}
|
|
147
|
+
});
|
|
131
148
|
return [...outOfDateNames].sort();
|
|
132
149
|
}
|
|
133
150
|
}
|
package/built/depends.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"depends.js","sourceRoot":"","sources":["../src/depends.js"],"names":[],"mappings":";AAAA,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC;AACnC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;AAC1E,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;AAE5D,qFAAqF;AACrF,gCAAgC;AAChC,MAAM,aAAa,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAE3D,MAAM,OAAO;IACX;;OAEG;IACH,YAAY,SAAS;QACnB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC;IACrB,CAAC;IAED;;;;;;;;OAQG;IACH,IAAI,OAAO,CAAC,OAAO;QACjB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IAC1B,CAAC;IAED;;;;;;;OAOG;IACH,IAAI,KAAK,CAAC,KAAK;QACb,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACzB,6CAA6C;YAC7C,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC;SACjB;QACD,IAAI,CAAC,aAAa,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC;IAED;;;;;OAKG;IACH,
|
|
1
|
+
{"version":3,"file":"depends.js","sourceRoot":"","sources":["../src/depends.js"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,156 @@
|
|
|
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
|
+
const assert_1 = __importDefault(require("assert"));
|
|
7
|
+
const promises_1 = require("fs/promises");
|
|
8
|
+
const path_1 = require("path");
|
|
9
|
+
const semver_1 = require("semver");
|
|
10
|
+
const utils_1 = require("../utils");
|
|
11
|
+
/**
|
|
12
|
+
* Raw AppMaps are processed into an index, which consists of:
|
|
13
|
+
*
|
|
14
|
+
* * `the-appmap.appmap.json` Canonicalized AppMap file (replaces the original AppMap).
|
|
15
|
+
* * `the-appmap/version` Identifies the index algorithm version.
|
|
16
|
+
* * `the-appmap/classMap.json` 'classMap' object extracted from the AppMap.
|
|
17
|
+
* * `the-appmap/metadata.json` 'metadata' object extracted from the AppMap.
|
|
18
|
+
* * `the-appmap/mtime` Time at which the AppMap was indexed.
|
|
19
|
+
*
|
|
20
|
+
* Other optional fields may be present as well.
|
|
21
|
+
*/
|
|
22
|
+
class AppMapIndex {
|
|
23
|
+
/**
|
|
24
|
+
* Constructs a new AppMapIndex. After calling the constructor, call `initialize`.
|
|
25
|
+
*
|
|
26
|
+
* @param appmapFileName The path to the AppMap file.
|
|
27
|
+
* @see initialize
|
|
28
|
+
*/
|
|
29
|
+
constructor(appmapFileName) {
|
|
30
|
+
this.appmapFileName = appmapFileName;
|
|
31
|
+
this.indexDir = (0, utils_1.baseName)(appmapFileName);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Performs async operations needed to initialize the index. If this method returns false,
|
|
35
|
+
* abort.
|
|
36
|
+
*/
|
|
37
|
+
async initialize() {
|
|
38
|
+
const appmapCreatedAt = await (0, utils_1.mtime)(this.appmapFileName);
|
|
39
|
+
if (!appmapCreatedAt) {
|
|
40
|
+
console.log(`File ${this.appmapFileName} does not exist or is not a file.`);
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
this.appmapCreatedAt = appmapCreatedAt;
|
|
44
|
+
return true;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Creates the index directory that will contain the processed files.
|
|
48
|
+
*/
|
|
49
|
+
async mkdir_p() {
|
|
50
|
+
await (0, promises_1.mkdir)(this.indexDir, { recursive: true });
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Creates a data file within the index directory.
|
|
54
|
+
*
|
|
55
|
+
* @param fileName The name of the file to write within the index directory.
|
|
56
|
+
* @param data Raw data to store.
|
|
57
|
+
*/
|
|
58
|
+
async writeFileAtomic(fileName, data) {
|
|
59
|
+
await (0, utils_1.writeFileAtomic)(this.indexDir, fileName, this.appmapCreatedAt, data);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Loads the raw AppMap data that will be indexed.
|
|
63
|
+
*
|
|
64
|
+
* @returns the raw data of the AppMap file.
|
|
65
|
+
*/
|
|
66
|
+
async loadAppMapData() {
|
|
67
|
+
let appmapStr;
|
|
68
|
+
try {
|
|
69
|
+
appmapStr = await (0, promises_1.readFile)(this.appmapFileName, 'utf-8');
|
|
70
|
+
}
|
|
71
|
+
catch (e) {
|
|
72
|
+
if (e.code === 'ENOENT') {
|
|
73
|
+
console.log(`${this.appmapFileName} does not exist.`);
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
throw e;
|
|
77
|
+
}
|
|
78
|
+
if ((0, utils_1.verbose)()) {
|
|
79
|
+
console.log(`Read ${appmapStr.length} bytes from ${this.appmapFileName}`);
|
|
80
|
+
}
|
|
81
|
+
let appmapData;
|
|
82
|
+
try {
|
|
83
|
+
appmapData = JSON.parse(appmapStr);
|
|
84
|
+
}
|
|
85
|
+
catch (err) {
|
|
86
|
+
if (err instanceof SyntaxError) {
|
|
87
|
+
// File may be in the process of writing.
|
|
88
|
+
console.warn(`Error parsing JSON file ${this.appmapFileName} : ${err.message}`);
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
throw err;
|
|
92
|
+
}
|
|
93
|
+
if (!appmapData.metadata) {
|
|
94
|
+
if ((0, utils_1.verbose)()) {
|
|
95
|
+
console.warn(`${this.appmapFileName} has no metadata. Skipping...`);
|
|
96
|
+
}
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
return appmapData;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* @returns number of bytes in the AppMap.
|
|
103
|
+
*/
|
|
104
|
+
async appmapFileSize() {
|
|
105
|
+
return (await (0, promises_1.stat)(this.appmapFileName)).size;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Tests whether the existing index is using the current algorithm.
|
|
109
|
+
*
|
|
110
|
+
* @param requiredVersion The current version of the index algorithm.
|
|
111
|
+
*/
|
|
112
|
+
async versionUpToDate(requiredVersion) {
|
|
113
|
+
const versionFileName = (0, path_1.join)(this.indexDir, 'version');
|
|
114
|
+
let versionStr;
|
|
115
|
+
try {
|
|
116
|
+
versionStr = await (0, promises_1.readFile)(versionFileName, 'utf-8');
|
|
117
|
+
}
|
|
118
|
+
catch (err) {
|
|
119
|
+
if (err.code !== 'ENOENT') {
|
|
120
|
+
throw err;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
if (!versionStr)
|
|
124
|
+
return false;
|
|
125
|
+
versionStr = versionStr.trim();
|
|
126
|
+
if ((0, utils_1.verbose)()) {
|
|
127
|
+
console.log(`${this.indexDir} index version is ${versionStr}`);
|
|
128
|
+
}
|
|
129
|
+
return (0, semver_1.satisfies)(versionStr, `>= ${requiredVersion}`);
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Tests whether the existing index is up to date with the raw AppMap data.
|
|
133
|
+
*/
|
|
134
|
+
async indexUpToDate() {
|
|
135
|
+
(0, assert_1.default)(this.appmapCreatedAt, `AppMap index is not initialized`);
|
|
136
|
+
const mtimeFileName = (0, path_1.join)(this.indexDir, 'mtime');
|
|
137
|
+
let indexedAtStr;
|
|
138
|
+
try {
|
|
139
|
+
indexedAtStr = await (0, promises_1.readFile)(mtimeFileName, 'utf-8');
|
|
140
|
+
}
|
|
141
|
+
catch (err) {
|
|
142
|
+
if (err.code !== 'ENOENT') {
|
|
143
|
+
throw err;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
if (!indexedAtStr)
|
|
147
|
+
return false;
|
|
148
|
+
const indexedAt = parseFloat(indexedAtStr);
|
|
149
|
+
if ((0, utils_1.verbose)()) {
|
|
150
|
+
console.log(`${this.indexDir} created at ${this.appmapCreatedAt}, indexed at ${indexedAt}`);
|
|
151
|
+
}
|
|
152
|
+
return indexedAt >= this.appmapCreatedAt;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
exports.default = AppMapIndex;
|
|
156
|
+
//# sourceMappingURL=appmapIndex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"appmapIndex.js","sourceRoot":"","sources":["../../src/fingerprint/appmapIndex.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,7 +7,16 @@ class FingerprintQueue {
|
|
|
7
7
|
this.size = size;
|
|
8
8
|
// eslint-disable-next-line no-use-before-define
|
|
9
9
|
this.handler = new Fingerprinter(printCanonicalAppMaps);
|
|
10
|
-
this.queue = queue(
|
|
10
|
+
this.queue = queue(async (appmapFileName) => {
|
|
11
|
+
try {
|
|
12
|
+
await this.handler.fingerprint(appmapFileName);
|
|
13
|
+
}
|
|
14
|
+
catch (e) {
|
|
15
|
+
if (e.code !== 'ENAMETOOLONG') {
|
|
16
|
+
console.warn(`Error fingerprinting ${appmapFileName}: ${e}`);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}, this.size);
|
|
11
20
|
this.queue.pause();
|
|
12
21
|
}
|
|
13
22
|
setCounterFn(counterFn) {
|
|
@@ -23,6 +32,9 @@ class FingerprintQueue {
|
|
|
23
32
|
'Tip: consider recording a shorter interaction or removing some classes from appmap.yml.',
|
|
24
33
|
].join('\n'));
|
|
25
34
|
}
|
|
35
|
+
else if (error.code === 'ENOENT') {
|
|
36
|
+
console.warn(`Skipped: ${error.path}\nThe file does not exist.`);
|
|
37
|
+
}
|
|
26
38
|
else
|
|
27
39
|
reject(error);
|
|
28
40
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fingerprintQueue.js","sourceRoot":"","sources":["../../src/fingerprint/fingerprintQueue.js"],"names":[],"mappings":";AAAA,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AACnC,MAAM,EAAE,OAAO,EAAE,iBAAiB,EAAE,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC;AACtE,MAAM,aAAa,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAEjD,MAAM,gBAAgB;IACpB,YAAY,IAAI,GAAG,CAAC,EAAE,qBAAqB,GAAG,IAAI;QAChD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,gDAAgD;QAChD,IAAI,CAAC,OAAO,GAAG,IAAI,aAAa,CAAC,qBAAqB,CAAC,CAAC;QACxD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"fingerprintQueue.js","sourceRoot":"","sources":["../../src/fingerprint/fingerprintQueue.js"],"names":[],"mappings":";AAAA,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AACnC,MAAM,EAAE,OAAO,EAAE,iBAAiB,EAAE,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC;AACtE,MAAM,aAAa,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAEjD,MAAM,gBAAgB;IACpB,YAAY,IAAI,GAAG,CAAC,EAAE,qBAAqB,GAAG,IAAI;QAChD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,gDAAgD;QAChD,IAAI,CAAC,OAAO,GAAG,IAAI,aAAa,CAAC,qBAAqB,CAAC,CAAC;QACxD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,cAAc,EAAE,EAAE;YAC1C,IAAI;gBACF,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;aAChD;YAAC,OAAO,CAAC,EAAE;gBACV,IAAI,CAAC,CAAC,IAAI,KAAK,cAAc,EAAE;oBAC7B,OAAO,CAAC,IAAI,CAAC,wBAAwB,cAAc,KAAK,CAAC,EAAE,CAAC,CAAC;iBAC9D;aACF;QACH,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAED,YAAY,CAAC,SAAS;QACpB,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,OAAO;QACX,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC1B,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;gBACzB,IAAI,KAAK,YAAY,iBAAiB,EAAE;oBACtC,OAAO,CAAC,IAAI,CACV;wBACE,YAAY,KAAK,CAAC,OAAO,EAAE;wBAC3B,yFAAyF;qBAC1F,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;iBACH;qBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE;oBAClC,OAAO,CAAC,IAAI,CAAC,YAAY,KAAK,CAAC,IAAI,4BAA4B,CAAC,CAAC;iBAClE;;oBAAM,MAAM,CAAC,KAAK,CAAC,CAAC;YACvB,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QACtB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,GAAG;QACN,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACvB,CAAC;CACF;AAED,MAAM,CAAC,OAAO,GAAG,gBAAgB,CAAC"}
|