aws-cdk 2.172.0 → 2.173.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/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "aws-cdk",
3
3
  "description": "CDK Toolkit, the command line tool for CDK apps",
4
- "version": "2.172.0",
4
+ "version": "2.173.0",
5
5
  "bin": {
6
6
  "cdk": "bin/cdk"
7
7
  },
@@ -67,9 +67,9 @@
67
67
  },
68
68
  "license": "Apache-2.0",
69
69
  "devDependencies": {
70
- "@aws-cdk/cdk-build-tools": "2.172.0-alpha.0",
71
- "@aws-cdk/pkglint": "2.172.0-alpha.0",
72
- "@aws-cdk/yargs-gen": "2.172.0-alpha.0",
70
+ "@aws-cdk/cdk-build-tools": "2.173.0-alpha.0",
71
+ "@aws-cdk/pkglint": "2.173.0-alpha.0",
72
+ "@aws-cdk/yargs-gen": "2.173.0-alpha.0",
73
73
  "@octokit/rest": "^18.12.0",
74
74
  "@types/archiver": "^5.3.4",
75
75
  "@types/fs-extra": "^9.0.13",
@@ -84,7 +84,7 @@
84
84
  "@types/uuid": "^8.3.4",
85
85
  "@types/wrap-ansi": "^3.0.0",
86
86
  "@types/yargs": "^15.0.19",
87
- "aws-cdk-lib": "2.172.0",
87
+ "aws-cdk-lib": "2.173.0",
88
88
  "aws-sdk-client-mock": "^4.0.1",
89
89
  "aws-sdk-client-mock-jest": "^4.0.1",
90
90
  "axios": "^1.7.7",
@@ -100,9 +100,9 @@
100
100
  "ts-mock-imports": "^1.3.16",
101
101
  "xml-js": "^1.6.11",
102
102
  "@aws-cdk/cloud-assembly-schema": "^38.0.0",
103
- "@aws-cdk/cloudformation-diff": "2.172.0",
104
- "@aws-cdk/cx-api": "2.172.0",
105
- "@aws-cdk/region-info": "2.172.0",
103
+ "@aws-cdk/cloudformation-diff": "2.173.0",
104
+ "@aws-cdk/cx-api": "2.173.0",
105
+ "@aws-cdk/region-info": "2.173.0",
106
106
  "@aws-sdk/client-appsync": "3.699.0",
107
107
  "@aws-sdk/client-cloudformation": "3.699.0",
108
108
  "@aws-sdk/client-cloudwatch-logs": "3.699.0",
@@ -211,35 +211,4 @@ describe('Session token', () => {
211
211
  expect(process.env.AWS_SESSION_TOKEN).toEqual('aaa');
212
212
  });
213
213
  });
214
- describe('Session token', () => {
215
- beforeEach(() => {
216
- process.env.AWS_ACCESS_KEY_ID = 'foo';
217
- process.env.AWS_SECRET_ACCESS_KEY = 'bar';
218
- });
219
- test('does not mess up with session token env variables if they are undefined', async () => {
220
- // Making sure these variables are not defined
221
- delete process.env.AWS_SESSION_TOKEN;
222
- delete process.env.AMAZON_SESSION_TOKEN;
223
- await awscli_compatible_1.AwsCliCompatible.credentialChainBuilder();
224
- expect(process.env.AWS_SESSION_TOKEN).toBeUndefined();
225
- });
226
- test('preserves AWS_SESSION_TOKEN if it is defined', async () => {
227
- process.env.AWS_SESSION_TOKEN = 'aaa';
228
- delete process.env.AMAZON_SESSION_TOKEN;
229
- await awscli_compatible_1.AwsCliCompatible.credentialChainBuilder();
230
- expect(process.env.AWS_SESSION_TOKEN).toEqual('aaa');
231
- });
232
- test('assigns AWS_SESSION_TOKEN if it is not defined but AMAZON_SESSION_TOKEN is', async () => {
233
- delete process.env.AWS_SESSION_TOKEN;
234
- process.env.AMAZON_SESSION_TOKEN = 'aaa';
235
- await awscli_compatible_1.AwsCliCompatible.credentialChainBuilder();
236
- expect(process.env.AWS_SESSION_TOKEN).toEqual('aaa');
237
- });
238
- test('preserves AWS_SESSION_TOKEN if both are defined', async () => {
239
- process.env.AWS_SESSION_TOKEN = 'aaa';
240
- process.env.AMAZON_SESSION_TOKEN = 'bbb';
241
- await awscli_compatible_1.AwsCliCompatible.credentialChainBuilder();
242
- expect(process.env.AWS_SESSION_TOKEN).toEqual('aaa');
243
- });
244
- });
245
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzY2xpLWNvbXBhdGlibGUudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImF3c2NsaS1jb21wYXRpYmxlLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSx5QkFBeUI7QUFDekIsNkJBQTZCO0FBQzdCLCtCQUErQjtBQUMvQixtRkFBK0U7QUFFL0UsUUFBUSxDQUFDLHlCQUF5QixFQUFFLEdBQUcsRUFBRTtJQUV2QyxVQUFVLENBQUMsR0FBRyxFQUFFO1FBRWQsMkRBQTJEO1FBQzNELE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxHQUFHLFdBQVcsQ0FBQztRQUMxQyxPQUFPLENBQUMsR0FBRyxDQUFDLDJCQUEyQixHQUFHLFdBQVcsQ0FBQztRQUV0RCwwRUFBMEU7UUFDMUUsd0NBQXdDO1FBQ3hDLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUM7UUFDOUIsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQztRQUNqQyxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUM7UUFDdEMsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDO0lBRTNDLENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLDJDQUEyQyxFQUFFLEtBQUssSUFBSSxFQUFFO1FBRTNELE1BQU0sTUFBTSxHQUFHOzs7R0FHaEIsQ0FBQztRQUVBLE1BQU0sTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQ2pGLENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLGdEQUFnRCxFQUFFLEtBQUssSUFBSSxFQUFFO1FBRWhFLE1BQU0sS0FBSyxHQUFHOzs7R0FHZixDQUFDO1FBRUEsTUFBTSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxD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Q0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN2RCxDQUFDLENBQUMsQ0FBQztJQUVILElBQUksQ0FBQyw0RUFBNEUsRUFBRSxLQUFLLElBQUksRUFBRTtRQUM1RixPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUM7UUFDckMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUM7UUFFekMsTUFBTSxvQ0FBZ0IsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBRWhELE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZELENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLGlEQUFpRCxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ2pFLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO1FBQ3RDLE9BQU8sQ0FBQyxHQUFHLENBQUMsb0JBQW9CLEdBQUcsS0FBSyxDQUFDO1FBRXpDLE1BQU0sb0NBQWdCLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUVoRCxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN2RCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgb3MgZnJvbSAnb3MnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCB7IEF3c0NsaUNvbXBhdGlibGUgfSBmcm9tICcuLi8uLi8uLi9saWIvYXBpL2F3cy1hdXRoL2F3c2NsaS1jb21wYXRpYmxlJztcblxuZGVzY3JpYmUoJ0F3c0NsaUNvbXBhdGlibGUucmVnaW9uJywgKCkgPT4ge1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuXG4gICAgLy8gbWFrZSBzdXJlIHdlIGRvbid0IG1pc3Rha2VubHkgcG9pbnQgdG8gYW4gdW5yZWxhdGVkIGZpbGVcbiAgICBwcm9jZXNzLmVudi5BV1NfQ09ORklHX0ZJTEUgPSAnL2Rldi9udWxsJztcbiAgICBwcm9jZXNzLmVudi5BV1NfU0hBUkVEX0NSRURFTlRJQUxTX0ZJTEUgPSAnL2Rldi9udWxsJztcblxuICAgIC8vIHRoZXNlIHRha2UgcHJlY2VkZW5jZSBvdmVyIHRoZSBpbmkgZmlsZXMgc28gd2UgbmVlZCB0byBkaXNhYmxlIHRoZW0gZm9yXG4gICAgLy8gdGhlIHRlc3QgdG8gaW52b2tlIHRoZSByaWdodCBmdW5jdGlvblxuICAgIGRlbGV0ZSBwcm9jZXNzLmVudi5BV1NfUkVHSU9OO1xuICAgIGRlbGV0ZSBwcm9jZXNzLmVudi5BTUFaT05fUkVHSU9OO1xuICAgIGRlbGV0ZSBwcm9jZXNzLmVudi5BV1NfREVGQVVMVF9SRUdJT047XG4gICAgZGVsZXRlIHByb2Nlc3MuZW52LkFNQVpPTl9ERUZBVUxUX1JFR0lPTjtcblxuICB9KTtcblxuICB0ZXN0KCdkZWZhdWx0IHJlZ2lvbiBjYW4gYmUgc3BlY2lmaWVkIGluIGNvbmZpZycsIGFzeW5jICgpID0+IHtcblxuICAgIGNvbnN0IGNvbmZpZyA9IGBcbiAgW2RlZmF1bHRdXG4gIHJlZ2lvbj1yZWdpb24taW4tY29uZmlnXG4gIGA7XG5cbiAgICBhd2FpdCBleHBlY3QocmVnaW9uKHsgY29uZmlnRmlsZTogY29uZmlnIH0pKS5yZXNvbHZlcy50b0JlKCdyZWdpb24taW4tY29uZmlnJyk7XG4gIH0pO1xuXG4gIHRlc3QoJ2RlZmF1bHQgcmVnaW9uIGNhbiBiZSBzcGVjaWZpZWQgaW4gY3JlZGVudGlhbHMnLCBhc3luYyAoKSA9PiB7XG5cbiAgICBjb25zdCBjcmVkcyA9IGBcbiAgW2RlZmF1bHRdXG4gIHJlZ2lvbj1yZWdpb24taW4tY3JlZGVudGlhbHNcbiAgYDtcblxuICAgIGF3YWl0IGV4cGVjdChyZWdpb24oeyBjcmVkZW50aWFsc0ZpbGU6IGNyZWRzIH0pKS5yZXNvbHZlcy50b0JlKCdyZWdpb24taW4tY3JlZGVudGlhbHMnKTtcblxuICB9KTtcblxuICB0ZXN0KCdwcm9maWxlIHJlZ2lvbiBjYW4gYmUgc3BlY2lmaWVkIGluIGNvbmZpZycsIGFzeW5jICgpID0+IHtcblxuICAgIGNvbnN0IGNvbmZpZyA9IGBcbiAgW3Byb2ZpbGUgdXNlcjFdXG4gIHJlZ2lvbj1yZWdpb24taW4tY29uZmlnXG4gIGA7XG5cbiAgICBhd2FpdCBleHBlY3QocmVnaW9uKHsgY29uZmlnRmlsZTogY29uZmlnLCBwcm9maWxlOiAndXNlcjEnIH0pKS5yZXNvbHZlcy50b0JlKCdyZWdpb24taW4tY29uZmlnJyk7XG5cbiAgfSk7XG5cbiAgdGVzdCgncHJvZmlsZSByZWdpb24gY2FuIGJlIHNwZWNpZmllZCBpbiBjcmVkZW50aWFscycsIGFzeW5jICgpID0+IHtcblxuICAgIGNvbnN0IGNyZWRzID0gYFxuICBbdXNlcjFdXG4gIHJlZ2lvbj1yZWdpb24taW4tY3JlZGVudGlhbHNcbiAgYDtcblxuICAgIGF3YWl0IGV4cGVjdChyZWdpb24oeyBjcmVkZW50aWFsc0ZpbGU6IGNyZWRzLCBwcm9maWxlOiAndXNlcjEnIH0pKS5yZXNvbHZlcy50b0JlKCdyZWdpb24taW4tY3JlZGVudGlhbHMnKTtcblxuICB9KTtcblxuICB0ZXN0KCd3aXRoIHByb2ZpbGUgfCBwcm9maWxlLXJlZ2lvbi1pbi1jcmVkZW50aWFscyBpcyBwcmlvcml0eSAxJywgYXN5bmMgKCkgPT4ge1xuXG4gICAgY29uc3QgY29uZmlnID0gYFxuICBbZGVmYXVsdF1cbiAgcmVnaW9uPWRlZmF1bHQtcmVnaW9uLWluLWNvbmZpZ1xuXG4gIFtwcm9maWxlIHVzZXJdXG4gIHJlZ2lvbj1wcm9maWxlLXJlZ2lvbi1pbi1jb25maWdcblxuICBgO1xuXG4gICAgY29uc3QgY3JlZHMgPSBgXG4gIFtkZWZhdWx0XVxuICByZWdpb249ZGVmYXVsdC1yZWdpb24taW4tY3JlZGVudGlhbHNcblxuICBbdXNlcl1cbiAgcmVnaW9uPXByb2ZpbGUtcmVnaW9uLWluLWNyZWRlbnRpYWxzXG4gIGA7XG5cbiAgICBhd2FpdCBleHBlY3QocmVnaW9uKHsgY3JlZGVudGlhbHNGaWxlOiBjcmVkcywgY29uZmlnRmlsZTogY29uZmlnLCBwcm9maWxlOiAndXNlcicgfSkpLnJlc29sdmVzLnRvQmUoJ3Byb2ZpbGUtcmVnaW9uLWluLWNyZWRlbnRpYWxzJyk7XG4gIH0pO1xuXG4gIHRlc3QoJ3dpdGggcHJvZmlsZSB8IHByb2ZpbGUtcmVnaW9uLWluLWNvbmZpZyBpcyBwcmlvcml0eSAyJywgYXN5bmMgKCkgPT4ge1xuXG4gICAgY29uc3QgY29uZmlnID0gYFxuICBbZGVmYXVsdF1cbiAgcmVnaW9uPWRlZmF1bHQtcmVnaW9uLWluLWNvbmZpZ1xuXG4gIFtwcm9maWxlIHVzZXJdXG4gIHJlZ2lvbj1wcm9maWxlLXJlZ2lvbi1pbi1jb25maWdcblxuICBgO1xuXG4gICAgY29uc3QgY3JlZHMgPSBgXG4gIFtkZWZhdWx0XVxuICByZWdpb249ZGVmYXVsdC1yZWdpb24taW4tY3JlZGVudGlhbHNcblxuICBbdXNlcl1cbiAgYDtcblxuICAgIGF3YWl0IGV4cGVjdChyZWdpb24oeyBjcmVkZW50aWFsc0ZpbGU6IGNyZWRzLCBjb25maWdGaWxlOiBjb25maWcsIHByb2ZpbGU6ICd1c2VyJyB9KSkucmVzb2x2ZXMudG9CZSgncHJvZmlsZS1yZWdpb24taW4tY29uZmlnJyk7XG4gIH0pO1xuXG4gIHRlc3QoJ3dpdGggcHJvZmlsZSB8IGRlZmF1bHQtcmVnaW9uLWluLWNyZWRlbnRpYWxzIGlzIHByaW9yaXR5IDMnLCBhc3luYyAoKSA9PiB7XG5cbiAgICBjb25zdCBjb25maWcgPSBgXG4gIFtkZWZhdWx0XVxuICByZWdpb249ZGVmYXVsdC1yZWdpb24taW4tY29uZmlnXG5cbiAgW3Byb2ZpbGUgdXNlcl1cblxuICBgO1xuXG4gICAgY29uc3QgY3JlZHMgPSBgXG4gIFtkZWZhdWx0XVxuICByZWdpb249ZGVmYXVsdC1yZWdpb24taW4tY3JlZGVudGlhbHNcblxuICBbdXNlcl1cbiAgYDtcblxuICAgIGF3YWl0IGV4cGVjdChyZWdpb24oeyBjcmVkZW50aWFsc0ZpbGU6IGNyZWRzLCBjb25maWdGaWxlOiBjb25maWcsIHByb2ZpbGU6ICd1c2VyJyB9KSkucmVzb2x2ZXMudG9CZSgnZGVmYXVsdC1yZWdpb24taW4tY3JlZGVudGlhbHMnKTtcbiAgfSk7XG5cbiAgdGVzdCgnd2l0aCBwcm9maWxlIHwgZGVmYXVsdC1yZWdpb24taW4tY29uZmlnIGlzIHByaW9yaXR5IDQnLCBhc3luYyAoKSA9PiB7XG5cbiAgICBjb25zdCBjb25maWcgPSBgXG4gIFtkZWZhdWx0XVxuICByZWdpb249ZGVmYXVsdC1yZWdpb24taW4tY29uZmlnXG5cbiAgW3Byb2ZpbGUgdXNlcl1cblxuICBgO1xuXG4gICAgY29uc3QgY3JlZHMgPSBgXG4gIFtkZWZhdWx0XVxuXG4gIFt1c2VyXVxuICBgO1xuXG4gICAgYXdhaXQgZXhwZWN0KHJlZ2lvbih7IGNyZWRlbnRpYWxzRmlsZTogY3JlZHMsIGNvbmZpZ0ZpbGU6IGNvbmZpZywgcHJvZmlsZTogJ3VzZXInIH0pKS5yZXNvbHZlcy50b0JlKCdkZWZhdWx0LXJlZ2lvbi1pbi1jb25maWcnKTtcbiAgfSk7XG5cbiAgdGVzdCgnd2l0aCBwcm9maWxlIHwgdXMtZWFzdC0xIGlzIHByaW9yaXR5IDUnLCBhc3luYyAoKSA9PiB7XG5cbiAgICBjb25zdCBjb25maWcgPSBgXG4gIFtkZWZhdWx0XVxuXG4gIFtwcm9maWxlIHVzZXJdXG5cbiAgYDtcblxuICAgIGNvbnN0IGNyZWRzID0gYFxuICBbZGVmYXVsdF1cblxuICBbdXNlcl1cbiAgYDtcblxuICAgIGF3YWl0IGV4cGVjdChyZWdpb24oeyBjcmVkZW50aWFsc0ZpbGU6IGNyZWRzLCBjb25maWdGaWxlOiBjb25maWcsIHByb2ZpbGU6ICd1c2VyJyB9KSkucmVzb2x2ZXMudG9CZSgndXMtZWFzdC0xJyk7XG4gIH0pO1xuXG4gIHRlc3QoJ3dpdGhvdXQgcHJvZmlsZSB8IGRlZmF1bHQtcmVnaW9uLWluLWNyZWRlbnRpYWxzIGlzIHByaW9yaXR5IDEnLCBhc3luYyAoKSA9PiB7XG5cbiAgICBjb25zdCBjb25maWcgPSBgXG4gIFtkZWZhdWx0XVxuICByZWdpb249ZGVmYXVsdC1yZWdpb24taW4tY29uZmlnXG5cbiAgYDtcblxuICAgIGNvbnN0IGNyZWRzID0gYFxuICBbZGVmYXVsdF1cbiAgcmVnaW9uPWRlZmF1bHQtcmVnaW9uLWluLWNyZWRlbnRpYWxzXG5cbiAgYDtcblxuICAgIGF3YWl0IGV4cGVjdChyZWdpb24oeyBjcmVkZW50aWFsc0ZpbGU6IGNyZWRzLCBjb25maWdGaWxlOiBjb25maWcgfSkpLnJlc29sdmVzLnRvQmUoJ2RlZmF1bHQtcmVnaW9uLWluLWNyZWRlbnRpYWxzJyk7XG4gIH0pO1xuXG4gIHRlc3QoJ3dpdGhvdXQgcHJvZmlsZSB8IGRlZmF1bHQtcmVnaW9uLWluLWNvbmZpZyBpcyBwcmlvcml0eSAyJywgYXN5bmMgKCkgPT4ge1xuXG4gICAgY29uc3QgY29uZmlnID0gYFxuICBbZGVmYXVsdF1cbiAgcmVnaW9uPWRlZmF1bHQtcmVnaW9uLWluLWNvbmZpZ1xuXG4gIGA7XG5cbiAgICBjb25zdCBjcmVkcyA9IGBcbiAgW2RlZmF1bHRdXG5cbiAgYDtcblxuICAgIGF3YWl0IGV4cGVjdChyZWdpb24oeyBjcmVkZW50aWFsc0ZpbGU6IGNyZWRzLCBjb25maWdGaWxlOiBjb25maWcgfSkpLnJlc29sdmVzLnRvQmUoJ2RlZmF1bHQtcmVnaW9uLWluLWNvbmZpZycpO1xuICB9KTtcblxuICB0ZXN0KCd3aXRob3V0IHByb2ZpbGUgfCB1cy1lYXN0LTEgaXMgcHJpb3JpdHkgMycsIGFzeW5jICgpID0+IHtcblxuICAgIGNvbnN0IGNvbmZpZyA9IGBcbiAgW2RlZmF1bHRdXG5cbiAgYDtcblxuICAgIGNvbnN0IGNyZWRzID0gYFxuICBbZGVmYXVsdF1cblxuICBgO1xuXG4gICAgYXdhaXQgZXhwZWN0KHJlZ2lvbih7IGNyZWRlbnRpYWxzRmlsZTogY3JlZHMsIGNvbmZpZ0ZpbGU6IGNvbmZpZyB9KSkucmVzb2x2ZXMudG9CZSgndXMtZWFzdC0xJyk7XG4gIH0pO1xuXG59KTtcblxuYXN5bmMgZnVuY3Rpb24gcmVnaW9uKG9wdHM6IHtcbiAgcmVhZG9ubHkgY29uZmlnRmlsZT86IHN0cmluZztcbiAgcmVhZG9ubHkgY3JlZGVudGlhbHNGaWxlPzogc3RyaW5nO1xuICByZWFkb25seSBwcm9maWxlPzogc3RyaW5nO1xufSkge1xuXG4gIGNvbnN0IHdvcmtkaXIgPSBmcy5ta2R0ZW1wU3luYyhwYXRoLmpvaW4ob3MudG1wZGlyKCksICdhd3NjbGktY29tcGF0aWJsZS50ZXN0JykpO1xuXG4gIHRyeSB7XG5cbiAgICBpZiAob3B0cy5jb25maWdGaWxlKSB7XG4gICAgICBjb25zdCBjb25maWdQYXRoID0gcGF0aC5qb2luKHdvcmtkaXIsICdjb25maWcnKTtcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMoY29uZmlnUGF0aCwgb3B0cy5jb25maWdGaWxlKTtcbiAgICAgIHByb2Nlc3MuZW52LkFXU19DT05GSUdfRklMRSA9IGNvbmZpZ1BhdGg7XG4gICAgfVxuXG4gICAgaWYgKG9wdHMuY3JlZGVudGlhbHNGaWxlKSB7XG4gICAgICBjb25zdCBjcmVkZW50aWFsc1BhdGggPSBwYXRoLmpvaW4od29ya2RpciwgJ2NyZWRlbnRpYWxzJyk7XG4gICAgICBmcy53cml0ZUZpbGVTeW5jKGNyZWRlbnRpYWxzUGF0aCwgb3B0cy5jcmVkZW50aWFsc0ZpbGUpO1xuICAgICAgcHJvY2Vzcy5lbnYuQVdTX1NIQVJFRF9DUkVERU5USUFMU19GSUxFID0gY3JlZGVudGlhbHNQYXRoO1xuICAgIH1cblxuICAgIHJldHVybiBhd2FpdCBBd3NDbGlDb21wYXRpYmxlLnJlZ2lvbihvcHRzLnByb2ZpbGUpO1xuXG4gIH0gZmluYWxseSB7XG4gICAgZnMucmVtb3ZlU3luYyh3b3JrZGlyKTtcbiAgfVxufVxuXG5kZXNjcmliZSgnU2Vzc2lvbiB0b2tlbicsICgpID0+IHtcbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgcHJvY2Vzcy5lbnYuQVdTX0FDQ0VTU19LRVlfSUQgPSAnZm9vJztcbiAgICBwcm9jZXNzLmVudi5BV1NfU0VDUkVUX0FDQ0VTU19LRVkgPSAnYmFyJztcbiAgfSk7XG5cbiAgdGVzdCgnZG9lcyBub3QgbWVzcyB1cCB3aXRoIHNlc3Npb24gdG9rZW4gZW52IHZhcmlhYmxlcyBpZiB0aGV5IGFyZSB1bmRlZmluZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gTWFraW5nIHN1cmUgdGhlc2UgdmFyaWFibGVzIGFyZSBub3QgZGVmaW5lZFxuICAgIGRlbGV0ZSBwcm9jZXNzLmVudi5BV1NfU0VTU0lPTl9UT0tFTjtcbiAgICBkZWxldGUgcHJvY2Vzcy5lbnYuQU1BWk9OX1NFU1NJT05fVE9LRU47XG5cbiAgICBhd2FpdCBBd3NDbGlDb21wYXRpYmxlLmNyZWRlbnRpYWxDaGFpbkJ1aWxkZXIoKTtcblxuICAgIGV4cGVjdChwcm9jZXNzLmVudi5BV1NfU0VTU0lPTl9UT0tFTikudG9CZVVuZGVmaW5lZCgpO1xuICB9KTtcblxuICB0ZXN0KCdwcmVzZXJ2ZXMgQVdTX1NFU1NJT05fVE9LRU4gaWYgaXQgaXMgZGVmaW5lZCcsIGFzeW5jICgpID0+IHtcbiAgICBwcm9jZXNzLmVudi5BV1NfU0VTU0lPTl9UT0tFTiA9ICdhYWEnO1xuICAgIGRlbGV0ZSBwcm9jZXNzLmVudi5BTUFaT05fU0VTU0lPTl9UT0tFTjtcblxuICAgIGF3YWl0IEF3c0NsaUNvbXBhdGlibGUuY3JlZGVudGlhbENoYWluQnVpbGRlcigpO1xuXG4gICAgZXhwZWN0KHByb2Nlc3MuZW52LkFXU19TRVNTSU9OX1RPS0VOKS50b0VxdWFsKCdhYWEnKTtcbiAgfSk7XG5cbiAgdGVzdCgnYXNzaWducyBBV1NfU0VTU0lPTl9UT0tFTiBpZiBpdCBpcyBub3QgZGVmaW5lZCBidXQgQU1BWk9OX1NFU1NJT05fVE9LRU4gaXMnLCBhc3luYyAoKSA9PiB7XG4gICAgZGVsZXRlIHByb2Nlc3MuZW52LkFXU19TRVNTSU9OX1RPS0VOO1xuICAgIHByb2Nlc3MuZW52LkFNQVpPTl9TRVNTSU9OX1RPS0VOID0gJ2FhYSc7XG5cbiAgICBhd2FpdCBBd3NDbGlDb21wYXRpYmxlLmNyZWRlbnRpYWxDaGFpbkJ1aWxkZXIoKTtcblxuICAgIGV4cGVjdChwcm9jZXNzLmVudi5BV1NfU0VTU0lPTl9UT0tFTikudG9FcXVhbCgnYWFhJyk7XG4gIH0pO1xuXG4gIHRlc3QoJ3ByZXNlcnZlcyBBV1NfU0VTU0lPTl9UT0tFTiBpZiBib3RoIGFyZSBkZWZpbmVkJywgYXN5bmMgKCkgPT4ge1xuICAgIHByb2Nlc3MuZW52LkFXU19TRVNTSU9OX1RPS0VOID0gJ2FhYSc7XG4gICAgcHJvY2Vzcy5lbnYuQU1BWk9OX1NFU1NJT05fVE9LRU4gPSAnYmJiJztcblxuICAgIGF3YWl0IEF3c0NsaUNvbXBhdGlibGUuY3JlZGVudGlhbENoYWluQnVpbGRlcigpO1xuXG4gICAgZXhwZWN0KHByb2Nlc3MuZW52LkFXU19TRVNTSU9OX1RPS0VOKS50b0VxdWFsKCdhYWEnKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ1Nlc3Npb24gdG9rZW4nLCAoKSA9PiB7XG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIHByb2Nlc3MuZW52LkFXU19BQ0NFU1NfS0VZX0lEID0gJ2Zvbyc7XG4gICAgcHJvY2Vzcy5lbnYuQVdTX1NFQ1JFVF9BQ0NFU1NfS0VZID0gJ2Jhcic7XG4gIH0pO1xuXG4gIHRlc3QoJ2RvZXMgbm90IG1lc3MgdXAgd2l0aCBzZXNzaW9uIHRva2VuIGVudiB2YXJpYWJsZXMgaWYgdGhleSBhcmUgdW5kZWZpbmVkJywgYXN5bmMgKCkgPT4ge1xuICAgIC8vIE1ha2luZyBzdXJlIHRoZXNlIHZhcmlhYmxlcyBhcmUgbm90IGRlZmluZWRcbiAgICBkZWxldGUgcHJvY2Vzcy5lbnYuQVdTX1NFU1NJT05fVE9LRU47XG4gICAgZGVsZXRlIHByb2Nlc3MuZW52LkFNQVpPTl9TRVNTSU9OX1RPS0VOO1xuXG4gICAgYXdhaXQgQXdzQ2xpQ29tcGF0aWJsZS5jcmVkZW50aWFsQ2hhaW5CdWlsZGVyKCk7XG5cbiAgICBleHBlY3QocHJvY2Vzcy5lbnYuQVdTX1NFU1NJT05fVE9LRU4pLnRvQmVVbmRlZmluZWQoKTtcbiAgfSk7XG5cbiAgdGVzdCgncHJlc2VydmVzIEFXU19TRVNTSU9OX1RPS0VOIGlmIGl0IGlzIGRlZmluZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgcHJvY2Vzcy5lbnYuQVdTX1NFU1NJT05fVE9LRU4gPSAnYWFhJztcbiAgICBkZWxldGUgcHJvY2Vzcy5lbnYuQU1BWk9OX1NFU1NJT05fVE9LRU47XG5cbiAgICBhd2FpdCBBd3NDbGlDb21wYXRpYmxlLmNyZWRlbnRpYWxDaGFpbkJ1aWxkZXIoKTtcblxuICAgIGV4cGVjdChwcm9jZXNzLmVudi5BV1NfU0VTU0lPTl9UT0tFTikudG9FcXVhbCgnYWFhJyk7XG4gIH0pO1xuXG4gIHRlc3QoJ2Fzc2lnbnMgQVdTX1NFU1NJT05fVE9LRU4gaWYgaXQgaXMgbm90IGRlZmluZWQgYnV0IEFNQVpPTl9TRVNTSU9OX1RPS0VOIGlzJywgYXN5bmMgKCkgPT4ge1xuICAgIGRlbGV0ZSBwcm9jZXNzLmVudi5BV1NfU0VTU0lPTl9UT0tFTjtcbiAgICBwcm9jZXNzLmVudi5BTUFaT05fU0VTU0lPTl9UT0tFTiA9ICdhYWEnO1xuXG4gICAgYXdhaXQgQXdzQ2xpQ29tcGF0aWJsZS5jcmVkZW50aWFsQ2hhaW5CdWlsZGVyKCk7XG5cbiAgICBleHBlY3QocHJvY2Vzcy5lbnYuQVdTX1NFU1NJT05fVE9LRU4pLnRvRXF1YWwoJ2FhYScpO1xuICB9KTtcblxuICB0ZXN0KCdwcmVzZXJ2ZXMgQVdTX1NFU1NJT05fVE9LRU4gaWYgYm90aCBhcmUgZGVmaW5lZCcsIGFzeW5jICgpID0+IHtcbiAgICBwcm9jZXNzLmVudi5BV1NfU0VTU0lPTl9UT0tFTiA9ICdhYWEnO1xuICAgIHByb2Nlc3MuZW52LkFNQVpPTl9TRVNTSU9OX1RPS0VOID0gJ2JiYic7XG5cbiAgICBhd2FpdCBBd3NDbGlDb21wYXRpYmxlLmNyZWRlbnRpYWxDaGFpbkJ1aWxkZXIoKTtcblxuICAgIGV4cGVjdChwcm9jZXNzLmVudi5BV1NfU0VTU0lPTl9UT0tFTikudG9FcXVhbCgnYWFhJyk7XG4gIH0pO1xufSk7XG4iXX0=
214
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzY2xpLWNvbXBhdGlibGUudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImF3c2NsaS1jb21wYXRpYmxlLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSx5QkFBeUI7QUFDekIsNkJBQTZCO0FBQzdCLCtCQUErQjtBQUMvQixtRkFBK0U7QUFFL0UsUUFBUSxDQUFDLHlCQUF5QixFQUFFLEdBQUcsRUFBRTtJQUV2QyxVQUFVLENBQUMsR0FBRyxFQUFFO1FBRWQsMkRBQTJEO1FBQzNELE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxHQUFHLFdBQVcsQ0FBQztRQUMxQyxPQUFPLENBQUMsR0FBRyxDQUFDLDJCQUEyQixHQUFHLFdBQVcsQ0FBQztRQUV0RCwwRUFBMEU7UUFDMUUsd0NBQXdDO1FBQ3hDLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUM7UUFDOUIsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQztRQUNqQyxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUM7UUFDdEMsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDO0lBRTNDLENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLDJDQUEyQyxFQUFFLEtBQUssSUFBSSxFQUFFO1FBRTNELE1BQU0sTUFBTSxHQUFHOzs7R0FHaEIsQ0FBQztRQUVBLE1BQU0sTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQ2pGLENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLGdEQUFnRCxFQUFFLEtBQUssSUFBSSxFQUFFO1FBRWhFLE1BQU0sS0FBSyxHQUFHOzs7R0FHZixDQUFDO1FBRUEsTUFBTSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxD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QUcsQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFDdEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUM7UUFFekMsTUFBTSxvQ0FBZ0IsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBRWhELE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZELENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBvcyBmcm9tICdvcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0IHsgQXdzQ2xpQ29tcGF0aWJsZSB9IGZyb20gJy4uLy4uLy4uL2xpYi9hcGkvYXdzLWF1dGgvYXdzY2xpLWNvbXBhdGlibGUnO1xuXG5kZXNjcmliZSgnQXdzQ2xpQ29tcGF0aWJsZS5yZWdpb24nLCAoKSA9PiB7XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG5cbiAgICAvLyBtYWtlIHN1cmUgd2UgZG9uJ3QgbWlzdGFrZW5seSBwb2ludCB0byBhbiB1bnJlbGF0ZWQgZmlsZVxuICAgIHByb2Nlc3MuZW52LkFXU19DT05GSUdfRklMRSA9ICcvZGV2L251bGwnO1xuICAgIHByb2Nlc3MuZW52LkFXU19TSEFSRURfQ1JFREVOVElBTFNfRklMRSA9ICcvZGV2L251bGwnO1xuXG4gICAgLy8gdGhlc2UgdGFrZSBwcmVjZWRlbmNlIG92ZXIgdGhlIGluaSBmaWxlcyBzbyB3ZSBuZWVkIHRvIGRpc2FibGUgdGhlbSBmb3JcbiAgICAvLyB0aGUgdGVzdCB0byBpbnZva2UgdGhlIHJpZ2h0IGZ1bmN0aW9uXG4gICAgZGVsZXRlIHByb2Nlc3MuZW52LkFXU19SRUdJT047XG4gICAgZGVsZXRlIHByb2Nlc3MuZW52LkFNQVpPTl9SRUdJT047XG4gICAgZGVsZXRlIHByb2Nlc3MuZW52LkFXU19ERUZBVUxUX1JFR0lPTjtcbiAgICBkZWxldGUgcHJvY2Vzcy5lbnYuQU1BWk9OX0RFRkFVTFRfUkVHSU9OO1xuXG4gIH0pO1xuXG4gIHRlc3QoJ2RlZmF1bHQgcmVnaW9uIGNhbiBiZSBzcGVjaWZpZWQgaW4gY29uZmlnJywgYXN5bmMgKCkgPT4ge1xuXG4gICAgY29uc3QgY29uZmlnID0gYFxuICBbZGVmYXVsdF1cbiAgcmVnaW9uPXJlZ2lvbi1pbi1jb25maWdcbiAgYDtcblxuICAgIGF3YWl0IGV4cGVjdChyZWdpb24oeyBjb25maWdGaWxlOiBjb25maWcgfSkpLnJlc29sdmVzLnRvQmUoJ3JlZ2lvbi1pbi1jb25maWcnKTtcbiAgfSk7XG5cbiAgdGVzdCgnZGVmYXVsdCByZWdpb24gY2FuIGJlIHNwZWNpZmllZCBpbiBjcmVkZW50aWFscycsIGFzeW5jICgpID0+IHtcblxuICAgIGNvbnN0IGNyZWRzID0gYFxuICBbZGVmYXVsdF1cbiAgcmVnaW9uPXJlZ2lvbi1pbi1jcmVkZW50aWFsc1xuICBgO1xuXG4gICAgYXdhaXQgZXhwZWN0KHJlZ2lvbih7IGNyZWRlbnRpYWxzRmlsZTogY3JlZHMgfSkpLnJlc29sdmVzLnRvQmUoJ3JlZ2lvbi1pbi1jcmVkZW50aWFscycpO1xuXG4gIH0pO1xuXG4gIHRlc3QoJ3Byb2ZpbGUgcmVnaW9uIGNhbiBiZSBzcGVjaWZpZWQgaW4gY29uZmlnJywgYXN5bmMgKCkgPT4ge1xuXG4gICAgY29uc3QgY29uZmlnID0gYFxuICBbcHJvZmlsZSB1c2VyMV1cbiAgcmVnaW9uPXJlZ2lvbi1pbi1jb25maWdcbiAgYDtcblxuICAgIGF3YWl0IGV4cGVjdChyZWdpb24oeyBjb25maWdGaWxlOiBjb25maWcsIHByb2ZpbGU6ICd1c2VyMScgfSkpLnJlc29sdmVzLnRvQmUoJ3JlZ2lvbi1pbi1jb25maWcnKTtcblxuICB9KTtcblxuICB0ZXN0KCdwcm9maWxlIHJlZ2lvbiBjYW4gYmUgc3BlY2lmaWVkIGluIGNyZWRlbnRpYWxzJywgYXN5bmMgKCkgPT4ge1xuXG4gICAgY29uc3QgY3JlZHMgPSBgXG4gIFt1c2VyMV1cbiAgcmVnaW9uPXJlZ2lvbi1pbi1jcmVkZW50aWFsc1xuICBgO1xuXG4gICAgYXdhaXQgZXhwZWN0KHJlZ2lvbih7IGNyZWRlbnRpYWxzRmlsZTogY3JlZHMsIHByb2ZpbGU6ICd1c2VyMScgfSkpLnJlc29sdmVzLnRvQmUoJ3JlZ2lvbi1pbi1jcmVkZW50aWFscycpO1xuXG4gIH0pO1xuXG4gIHRlc3QoJ3dpdGggcHJvZmlsZSB8IHByb2ZpbGUtcmVnaW9uLWluLWNyZWRlbnRpYWxzIGlzIHByaW9yaXR5IDEnLCBhc3luYyAoKSA9PiB7XG5cbiAgICBjb25zdCBjb25maWcgPSBgXG4gIFtkZWZhdWx0XVxuICByZWdpb249ZGVmYXVsdC1yZWdpb24taW4tY29uZmlnXG5cbiAgW3Byb2ZpbGUgdXNlcl1cbiAgcmVnaW9uPXByb2ZpbGUtcmVnaW9uLWluLWNvbmZpZ1xuXG4gIGA7XG5cbiAgICBjb25zdCBjcmVkcyA9IGBcbiAgW2RlZmF1bHRdXG4gIHJlZ2lvbj1kZWZhdWx0LXJlZ2lvbi1pbi1jcmVkZW50aWFsc1xuXG4gIFt1c2VyXVxuICByZWdpb249cHJvZmlsZS1yZWdpb24taW4tY3JlZGVudGlhbHNcbiAgYDtcblxuICAgIGF3YWl0IGV4cGVjdChyZWdpb24oeyBjcmVkZW50aWFsc0ZpbGU6IGNyZWRzLCBjb25maWdGaWxlOiBjb25maWcsIHByb2ZpbGU6ICd1c2VyJyB9KSkucmVzb2x2ZXMudG9CZSgncHJvZmlsZS1yZWdpb24taW4tY3JlZGVudGlhbHMnKTtcbiAgfSk7XG5cbiAgdGVzdCgnd2l0aCBwcm9maWxlIHwgcHJvZmlsZS1yZWdpb24taW4tY29uZmlnIGlzIHByaW9yaXR5IDInLCBhc3luYyAoKSA9PiB7XG5cbiAgICBjb25zdCBjb25maWcgPSBgXG4gIFtkZWZhdWx0XVxuICByZWdpb249ZGVmYXVsdC1yZWdpb24taW4tY29uZmlnXG5cbiAgW3Byb2ZpbGUgdXNlcl1cbiAgcmVnaW9uPXByb2ZpbGUtcmVnaW9uLWluLWNvbmZpZ1xuXG4gIGA7XG5cbiAgICBjb25zdCBjcmVkcyA9IGBcbiAgW2RlZmF1bHRdXG4gIHJlZ2lvbj1kZWZhdWx0LXJlZ2lvbi1pbi1jcmVkZW50aWFsc1xuXG4gIFt1c2VyXVxuICBgO1xuXG4gICAgYXdhaXQgZXhwZWN0KHJlZ2lvbih7IGNyZWRlbnRpYWxzRmlsZTogY3JlZHMsIGNvbmZpZ0ZpbGU6IGNvbmZpZywgcHJvZmlsZTogJ3VzZXInIH0pKS5yZXNvbHZlcy50b0JlKCdwcm9maWxlLXJlZ2lvbi1pbi1jb25maWcnKTtcbiAgfSk7XG5cbiAgdGVzdCgnd2l0aCBwcm9maWxlIHwgZGVmYXVsdC1yZWdpb24taW4tY3JlZGVudGlhbHMgaXMgcHJpb3JpdHkgMycsIGFzeW5jICgpID0+IHtcblxuICAgIGNvbnN0IGNvbmZpZyA9IGBcbiAgW2RlZmF1bHRdXG4gIHJlZ2lvbj1kZWZhdWx0LXJlZ2lvbi1pbi1jb25maWdcblxuICBbcHJvZmlsZSB1c2VyXVxuXG4gIGA7XG5cbiAgICBjb25zdCBjcmVkcyA9IGBcbiAgW2RlZmF1bHRdXG4gIHJlZ2lvbj1kZWZhdWx0LXJlZ2lvbi1pbi1jcmVkZW50aWFsc1xuXG4gIFt1c2VyXVxuICBgO1xuXG4gICAgYXdhaXQgZXhwZWN0KHJlZ2lvbih7IGNyZWRlbnRpYWxzRmlsZTogY3JlZHMsIGNvbmZpZ0ZpbGU6IGNvbmZpZywgcHJvZmlsZTogJ3VzZXInIH0pKS5yZXNvbHZlcy50b0JlKCdkZWZhdWx0LXJlZ2lvbi1pbi1jcmVkZW50aWFscycpO1xuICB9KTtcblxuICB0ZXN0KCd3aXRoIHByb2ZpbGUgfCBkZWZhdWx0LXJlZ2lvbi1pbi1jb25maWcgaXMgcHJpb3JpdHkgNCcsIGFzeW5jICgpID0+IHtcblxuICAgIGNvbnN0IGNvbmZpZyA9IGBcbiAgW2RlZmF1bHRdXG4gIHJlZ2lvbj1kZWZhdWx0LXJlZ2lvbi1pbi1jb25maWdcblxuICBbcHJvZmlsZSB1c2VyXVxuXG4gIGA7XG5cbiAgICBjb25zdCBjcmVkcyA9IGBcbiAgW2RlZmF1bHRdXG5cbiAgW3VzZXJdXG4gIGA7XG5cbiAgICBhd2FpdCBleHBlY3QocmVnaW9uKHsgY3JlZGVudGlhbHNGaWxlOiBjcmVkcywgY29uZmlnRmlsZTogY29uZmlnLCBwcm9maWxlOiAndXNlcicgfSkpLnJlc29sdmVzLnRvQmUoJ2RlZmF1bHQtcmVnaW9uLWluLWNvbmZpZycpO1xuICB9KTtcblxuICB0ZXN0KCd3aXRoIHByb2ZpbGUgfCB1cy1lYXN0LTEgaXMgcHJpb3JpdHkgNScsIGFzeW5jICgpID0+IHtcblxuICAgIGNvbnN0IGNvbmZpZyA9IGBcbiAgW2RlZmF1bHRdXG5cbiAgW3Byb2ZpbGUgdXNlcl1cblxuICBgO1xuXG4gICAgY29uc3QgY3JlZHMgPSBgXG4gIFtkZWZhdWx0XVxuXG4gIFt1c2VyXVxuICBgO1xuXG4gICAgYXdhaXQgZXhwZWN0KHJlZ2lvbih7IGNyZWRlbnRpYWxzRmlsZTogY3JlZHMsIGNvbmZpZ0ZpbGU6IGNvbmZpZywgcHJvZmlsZTogJ3VzZXInIH0pKS5yZXNvbHZlcy50b0JlKCd1cy1lYXN0LTEnKTtcbiAgfSk7XG5cbiAgdGVzdCgnd2l0aG91dCBwcm9maWxlIHwgZGVmYXVsdC1yZWdpb24taW4tY3JlZGVudGlhbHMgaXMgcHJpb3JpdHkgMScsIGFzeW5jICgpID0+IHtcblxuICAgIGNvbnN0IGNvbmZpZyA9IGBcbiAgW2RlZmF1bHRdXG4gIHJlZ2lvbj1kZWZhdWx0LXJlZ2lvbi1pbi1jb25maWdcblxuICBgO1xuXG4gICAgY29uc3QgY3JlZHMgPSBgXG4gIFtkZWZhdWx0XVxuICByZWdpb249ZGVmYXVsdC1yZWdpb24taW4tY3JlZGVudGlhbHNcblxuICBgO1xuXG4gICAgYXdhaXQgZXhwZWN0KHJlZ2lvbih7IGNyZWRlbnRpYWxzRmlsZTogY3JlZHMsIGNvbmZpZ0ZpbGU6IGNvbmZpZyB9KSkucmVzb2x2ZXMudG9CZSgnZGVmYXVsdC1yZWdpb24taW4tY3JlZGVudGlhbHMnKTtcbiAgfSk7XG5cbiAgdGVzdCgnd2l0aG91dCBwcm9maWxlIHwgZGVmYXVsdC1yZWdpb24taW4tY29uZmlnIGlzIHByaW9yaXR5IDInLCBhc3luYyAoKSA9PiB7XG5cbiAgICBjb25zdCBjb25maWcgPSBgXG4gIFtkZWZhdWx0XVxuICByZWdpb249ZGVmYXVsdC1yZWdpb24taW4tY29uZmlnXG5cbiAgYDtcblxuICAgIGNvbnN0IGNyZWRzID0gYFxuICBbZGVmYXVsdF1cblxuICBgO1xuXG4gICAgYXdhaXQgZXhwZWN0KHJlZ2lvbih7IGNyZWRlbnRpYWxzRmlsZTogY3JlZHMsIGNvbmZpZ0ZpbGU6IGNvbmZpZyB9KSkucmVzb2x2ZXMudG9CZSgnZGVmYXVsdC1yZWdpb24taW4tY29uZmlnJyk7XG4gIH0pO1xuXG4gIHRlc3QoJ3dpdGhvdXQgcHJvZmlsZSB8IHVzLWVhc3QtMSBpcyBwcmlvcml0eSAzJywgYXN5bmMgKCkgPT4ge1xuXG4gICAgY29uc3QgY29uZmlnID0gYFxuICBbZGVmYXVsdF1cblxuICBgO1xuXG4gICAgY29uc3QgY3JlZHMgPSBgXG4gIFtkZWZhdWx0XVxuXG4gIGA7XG5cbiAgICBhd2FpdCBleHBlY3QocmVnaW9uKHsgY3JlZGVudGlhbHNGaWxlOiBjcmVkcywgY29uZmlnRmlsZTogY29uZmlnIH0pKS5yZXNvbHZlcy50b0JlKCd1cy1lYXN0LTEnKTtcbiAgfSk7XG5cbn0pO1xuXG5hc3luYyBmdW5jdGlvbiByZWdpb24ob3B0czoge1xuICByZWFkb25seSBjb25maWdGaWxlPzogc3RyaW5nO1xuICByZWFkb25seSBjcmVkZW50aWFsc0ZpbGU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHByb2ZpbGU/OiBzdHJpbmc7XG59KSB7XG5cbiAgY29uc3Qgd29ya2RpciA9IGZzLm1rZHRlbXBTeW5jKHBhdGguam9pbihvcy50bXBkaXIoKSwgJ2F3c2NsaS1jb21wYXRpYmxlLnRlc3QnKSk7XG5cbiAgdHJ5IHtcblxuICAgIGlmIChvcHRzLmNvbmZpZ0ZpbGUpIHtcbiAgICAgIGNvbnN0IGNvbmZpZ1BhdGggPSBwYXRoLmpvaW4od29ya2RpciwgJ2NvbmZpZycpO1xuICAgICAgZnMud3JpdGVGaWxlU3luYyhjb25maWdQYXRoLCBvcHRzLmNvbmZpZ0ZpbGUpO1xuICAgICAgcHJvY2Vzcy5lbnYuQVdTX0NPTkZJR19GSUxFID0gY29uZmlnUGF0aDtcbiAgICB9XG5cbiAgICBpZiAob3B0cy5jcmVkZW50aWFsc0ZpbGUpIHtcbiAgICAgIGNvbnN0IGNyZWRlbnRpYWxzUGF0aCA9IHBhdGguam9pbih3b3JrZGlyLCAnY3JlZGVudGlhbHMnKTtcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMoY3JlZGVudGlhbHNQYXRoLCBvcHRzLmNyZWRlbnRpYWxzRmlsZSk7XG4gICAgICBwcm9jZXNzLmVudi5BV1NfU0hBUkVEX0NSRURFTlRJQUxTX0ZJTEUgPSBjcmVkZW50aWFsc1BhdGg7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF3YWl0IEF3c0NsaUNvbXBhdGlibGUucmVnaW9uKG9wdHMucHJvZmlsZSk7XG5cbiAgfSBmaW5hbGx5IHtcbiAgICBmcy5yZW1vdmVTeW5jKHdvcmtkaXIpO1xuICB9XG59XG5cbmRlc2NyaWJlKCdTZXNzaW9uIHRva2VuJywgKCkgPT4ge1xuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBwcm9jZXNzLmVudi5BV1NfQUNDRVNTX0tFWV9JRCA9ICdmb28nO1xuICAgIHByb2Nlc3MuZW52LkFXU19TRUNSRVRfQUNDRVNTX0tFWSA9ICdiYXInO1xuICB9KTtcblxuICB0ZXN0KCdkb2VzIG5vdCBtZXNzIHVwIHdpdGggc2Vzc2lvbiB0b2tlbiBlbnYgdmFyaWFibGVzIGlmIHRoZXkgYXJlIHVuZGVmaW5lZCcsIGFzeW5jICgpID0+IHtcbiAgICAvLyBNYWtpbmcgc3VyZSB0aGVzZSB2YXJpYWJsZXMgYXJlIG5vdCBkZWZpbmVkXG4gICAgZGVsZXRlIHByb2Nlc3MuZW52LkFXU19TRVNTSU9OX1RPS0VOO1xuICAgIGRlbGV0ZSBwcm9jZXNzLmVudi5BTUFaT05fU0VTU0lPTl9UT0tFTjtcblxuICAgIGF3YWl0IEF3c0NsaUNvbXBhdGlibGUuY3JlZGVudGlhbENoYWluQnVpbGRlcigpO1xuXG4gICAgZXhwZWN0KHByb2Nlc3MuZW52LkFXU19TRVNTSU9OX1RPS0VOKS50b0JlVW5kZWZpbmVkKCk7XG4gIH0pO1xuXG4gIHRlc3QoJ3ByZXNlcnZlcyBBV1NfU0VTU0lPTl9UT0tFTiBpZiBpdCBpcyBkZWZpbmVkJywgYXN5bmMgKCkgPT4ge1xuICAgIHByb2Nlc3MuZW52LkFXU19TRVNTSU9OX1RPS0VOID0gJ2FhYSc7XG4gICAgZGVsZXRlIHByb2Nlc3MuZW52LkFNQVpPTl9TRVNTSU9OX1RPS0VOO1xuXG4gICAgYXdhaXQgQXdzQ2xpQ29tcGF0aWJsZS5jcmVkZW50aWFsQ2hhaW5CdWlsZGVyKCk7XG5cbiAgICBleHBlY3QocHJvY2Vzcy5lbnYuQVdTX1NFU1NJT05fVE9LRU4pLnRvRXF1YWwoJ2FhYScpO1xuICB9KTtcblxuICB0ZXN0KCdhc3NpZ25zIEFXU19TRVNTSU9OX1RPS0VOIGlmIGl0IGlzIG5vdCBkZWZpbmVkIGJ1dCBBTUFaT05fU0VTU0lPTl9UT0tFTiBpcycsIGFzeW5jICgpID0+IHtcbiAgICBkZWxldGUgcHJvY2Vzcy5lbnYuQVdTX1NFU1NJT05fVE9LRU47XG4gICAgcHJvY2Vzcy5lbnYuQU1BWk9OX1NFU1NJT05fVE9LRU4gPSAnYWFhJztcblxuICAgIGF3YWl0IEF3c0NsaUNvbXBhdGlibGUuY3JlZGVudGlhbENoYWluQnVpbGRlcigpO1xuXG4gICAgZXhwZWN0KHByb2Nlc3MuZW52LkFXU19TRVNTSU9OX1RPS0VOKS50b0VxdWFsKCdhYWEnKTtcbiAgfSk7XG5cbiAgdGVzdCgncHJlc2VydmVzIEFXU19TRVNTSU9OX1RPS0VOIGlmIGJvdGggYXJlIGRlZmluZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgcHJvY2Vzcy5lbnYuQVdTX1NFU1NJT05fVE9LRU4gPSAnYWFhJztcbiAgICBwcm9jZXNzLmVudi5BTUFaT05fU0VTU0lPTl9UT0tFTiA9ICdiYmInO1xuXG4gICAgYXdhaXQgQXdzQ2xpQ29tcGF0aWJsZS5jcmVkZW50aWFsQ2hhaW5CdWlsZGVyKCk7XG5cbiAgICBleHBlY3QocHJvY2Vzcy5lbnYuQVdTX1NFU1NJT05fVE9LRU4pLnRvRXF1YWwoJ2FhYScpO1xuICB9KTtcbn0pO1xuIl19
@@ -0,0 +1,135 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const logging_1 = require("../../../lib/logging");
4
+ describe('logging', () => {
5
+ // Mock streams to capture output
6
+ let mockStdout;
7
+ let mockStderr;
8
+ // Helper function to strip ANSI codes
9
+ const stripAnsi = (str) => {
10
+ const ansiRegex = /\u001b\[[0-9;]*[a-zA-Z]/g;
11
+ return str.replace(ansiRegex, '');
12
+ };
13
+ beforeEach(() => {
14
+ // Reset log level before each test
15
+ (0, logging_1.setLogLevel)(logging_1.LogLevel.INFO);
16
+ (0, logging_1.setCI)(false);
17
+ // Create mock functions to capture output
18
+ mockStdout = jest.fn();
19
+ mockStderr = jest.fn();
20
+ // Mock the write methods directly and strip ANSI codes
21
+ jest.spyOn(process.stdout, 'write').mockImplementation((chunk) => {
22
+ mockStdout(stripAnsi(chunk.toString()));
23
+ return true;
24
+ });
25
+ jest.spyOn(process.stderr, 'write').mockImplementation((chunk) => {
26
+ mockStderr(stripAnsi(chunk.toString()));
27
+ return true;
28
+ });
29
+ });
30
+ afterEach(() => {
31
+ jest.restoreAllMocks();
32
+ });
33
+ describe('stream selection', () => {
34
+ test('data() always writes to stdout', () => {
35
+ (0, logging_1.data)('test message');
36
+ expect(mockStdout).toHaveBeenCalledWith('test message\n');
37
+ expect(mockStderr).not.toHaveBeenCalled();
38
+ });
39
+ test('error() always writes to stderr', () => {
40
+ (0, logging_1.error)('test error');
41
+ expect(mockStderr).toHaveBeenCalledWith('test error\n');
42
+ expect(mockStdout).not.toHaveBeenCalled();
43
+ });
44
+ test('print() writes to stderr by default', () => {
45
+ (0, logging_1.print)('test print');
46
+ expect(mockStderr).toHaveBeenCalledWith('test print\n');
47
+ expect(mockStdout).not.toHaveBeenCalled();
48
+ });
49
+ test('print() writes to stdout in CI mode', () => {
50
+ (0, logging_1.setCI)(true);
51
+ (0, logging_1.print)('test print');
52
+ expect(mockStdout).toHaveBeenCalledWith('test print\n');
53
+ expect(mockStderr).not.toHaveBeenCalled();
54
+ });
55
+ });
56
+ describe('log levels', () => {
57
+ test('respects log level settings', () => {
58
+ (0, logging_1.setLogLevel)(logging_1.LogLevel.ERROR);
59
+ (0, logging_1.error)('error message');
60
+ (0, logging_1.warning)('warning message');
61
+ (0, logging_1.print)('print message');
62
+ expect(mockStderr).toHaveBeenCalledWith('error message\n');
63
+ expect(mockStderr).not.toHaveBeenCalledWith('warning message\n');
64
+ expect(mockStderr).not.toHaveBeenCalledWith('print message\n');
65
+ });
66
+ test('debug messages only show at debug level', () => {
67
+ (0, logging_1.setLogLevel)(logging_1.LogLevel.INFO);
68
+ (0, logging_1.debug)('debug message');
69
+ expect(mockStderr).not.toHaveBeenCalled();
70
+ (0, logging_1.setLogLevel)(logging_1.LogLevel.DEBUG);
71
+ (0, logging_1.debug)('debug message');
72
+ expect(mockStderr).toHaveBeenCalledWith('debug message\n');
73
+ });
74
+ test('trace messages only show at trace level', () => {
75
+ (0, logging_1.setLogLevel)(logging_1.LogLevel.DEBUG);
76
+ (0, logging_1.trace)('trace message');
77
+ expect(mockStderr).not.toHaveBeenCalled();
78
+ (0, logging_1.setLogLevel)(logging_1.LogLevel.TRACE);
79
+ (0, logging_1.trace)('trace message');
80
+ expect(mockStderr).toHaveBeenCalledWith('trace message\n');
81
+ });
82
+ });
83
+ describe('message formatting', () => {
84
+ test('formats messages with multiple arguments', () => {
85
+ (0, logging_1.print)('Value: %d, String: %s', 42, 'test');
86
+ expect(mockStderr).toHaveBeenCalledWith('Value: 42, String: test\n');
87
+ });
88
+ test('handles prefix correctly', () => {
89
+ const prefixedLog = (0, logging_1.prefix)('PREFIX');
90
+ prefixedLog('test message');
91
+ expect(mockStderr).toHaveBeenCalledWith('PREFIX test message\n');
92
+ });
93
+ test('handles custom styles', () => {
94
+ (0, logging_1.success)('success message');
95
+ expect(mockStderr).toHaveBeenCalledWith('success message\n');
96
+ });
97
+ });
98
+ describe('corked logging', () => {
99
+ test('buffers messages when corked', async () => {
100
+ await (0, logging_1.withCorkedLogging)(async () => {
101
+ (0, logging_1.print)('message 1');
102
+ (0, logging_1.print)('message 2');
103
+ expect(mockStderr).not.toHaveBeenCalled();
104
+ });
105
+ expect(mockStderr).toHaveBeenCalledWith('message 1\n');
106
+ expect(mockStderr).toHaveBeenCalledWith('message 2\n');
107
+ });
108
+ test('handles nested corking correctly', async () => {
109
+ await (0, logging_1.withCorkedLogging)(async () => {
110
+ (0, logging_1.print)('outer 1');
111
+ await (0, logging_1.withCorkedLogging)(async () => {
112
+ (0, logging_1.print)('inner');
113
+ });
114
+ (0, logging_1.print)('outer 2');
115
+ expect(mockStderr).not.toHaveBeenCalled();
116
+ });
117
+ expect(mockStderr).toHaveBeenCalledTimes(3);
118
+ expect(mockStderr).toHaveBeenCalledWith('outer 1\n');
119
+ expect(mockStderr).toHaveBeenCalledWith('inner\n');
120
+ expect(mockStderr).toHaveBeenCalledWith('outer 2\n');
121
+ });
122
+ });
123
+ describe('timestamp and prefix handling', () => {
124
+ test('combines timestamp and prefix correctly', () => {
125
+ (0, logging_1.log)({
126
+ level: logging_1.LogLevel.INFO,
127
+ message: 'test message',
128
+ timestamp: true,
129
+ prefix: 'PREFIX',
130
+ });
131
+ expect(mockStderr).toHaveBeenCalledWith(expect.stringMatching(/^PREFIX \[\d{2}:\d{2}:\d{2}\] test message\n$/));
132
+ });
133
+ });
134
+ });
135
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLWxvZ2dpbmcudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNsaS1sb2dnaW5nLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxrREFBd0o7QUFFeEosUUFBUSxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUU7SUFDdkIsaUNBQWlDO0lBQ2pDLElBQUksVUFBcUIsQ0FBQztJQUMxQixJQUFJLFVBQXFCLENBQUM7SUFFMUIsc0NBQXNDO0lBQ3RDLE1BQU0sU0FBUyxHQUFHLENBQUMsR0FBVyxFQUFVLEVBQUU7UUFDeEMsTUFBTSxTQUFTLEdBQUcsMEJBQTBCLENBQUM7UUFDN0MsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNwQyxDQUFDLENBQUM7SUFFRixVQUFVLENBQUMsR0FBRyxFQUFFO1FBQ2QsbUNBQW1DO1FBQ25DLElBQUEscUJBQVcsRUFBQyxrQkFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNCLElBQUEsZUFBSyxFQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWIsMENBQTBDO1FBQzFDLFVBQVUsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDdkIsVUFBVSxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUV2Qix1REFBdUQ7UUFDdkQsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDLGtCQUFrQixDQUFDLENBQUMsS0FBVSxFQUFFLEVBQUU7WUFDcEUsVUFBVSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3hDLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxLQUFVLEVBQUUsRUFBRTtZQUNw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QUFnQixFQUFFLENBQUM7WUFDNUMsQ0FBQyxDQUFDLENBQUM7WUFFSCxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3JELE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNuRCxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsb0JBQW9CLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDdkQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQywrQkFBK0IsRUFBRSxHQUFHLEVBQUU7UUFDN0MsSUFBSSxDQUFDLHlDQUF5QyxFQUFFLEdBQUcsRUFBRTtZQUNuRCxJQUFBLGFBQUcsRUFBQztnQkFDRixLQUFLLEVBQUUsa0JBQVEsQ0FBQyxJQUFJO2dCQUNwQixPQUFPLEVBQUUsY0FBYztnQkFDdkIsU0FBUyxFQUFFLElBQUk7Z0JBQ2YsTUFBTSxFQUFFLFFBQVE7YUFDakIsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLG9CQUFvQixDQUNyQyxNQUFNLENBQUMsY0FBYyxDQUFDLCtDQUErQyxDQUFDLENBQ3ZFLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMb2dMZXZlbCwgbG9nLCBzZXRMb2dMZXZlbCwgc2V0Q0ksIGRhdGEsIHByaW50LCBlcnJvciwgd2FybmluZywgc3VjY2VzcywgZGVidWcsIHRyYWNlLCBwcmVmaXgsIHdpdGhDb3JrZWRMb2dnaW5nIH0gZnJvbSAnLi4vLi4vLi4vbGliL2xvZ2dpbmcnO1xuXG5kZXNjcmliZSgnbG9nZ2luZycsICgpID0+IHtcbiAgLy8gTW9jayBzdHJlYW1zIHRvIGNhcHR1cmUgb3V0cHV0XG4gIGxldCBtb2NrU3Rkb3V0OiBqZXN0Lk1vY2s7XG4gIGxldCBtb2NrU3RkZXJyOiBqZXN0Lk1vY2s7XG5cbiAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHN0cmlwIEFOU0kgY29kZXNcbiAgY29uc3Qgc3RyaXBBbnNpID0gKHN0cjogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgICBjb25zdCBhbnNpUmVnZXggPSAvXFx1MDAxYlxcW1swLTk7XSpbYS16QS1aXS9nO1xuICAgIHJldHVybiBzdHIucmVwbGFjZShhbnNpUmVnZXgsICcnKTtcbiAgfTtcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAvLyBSZXNldCBsb2cgbGV2ZWwgYmVmb3JlIGVhY2ggdGVzdFxuICAgIHNldExvZ0xldmVsKExvZ0xldmVsLklORk8pO1xuICAgIHNldENJKGZhbHNlKTtcblxuICAgIC8vIENyZWF0ZSBtb2NrIGZ1bmN0aW9ucyB0byBjYXB0dXJlIG91dHB1dFxuICAgIG1vY2tTdGRvdXQgPSBqZXN0LmZuKCk7XG4gICAgbW9ja1N0ZGVyciA9IGplc3QuZm4oKTtcblxuICAgIC8vIE1vY2sgdGhlIHdyaXRlIG1ldGhvZHMgZGlyZWN0bHkgYW5kIHN0cmlwIEFOU0kgY29kZXNcbiAgICBqZXN0LnNweU9uKHByb2Nlc3Muc3Rkb3V0LCAnd3JpdGUnKS5tb2NrSW1wbGVtZW50YXRpb24oKGNodW5rOiBhbnkpID0+IHtcbiAgICAgIG1vY2tTdGRvdXQoc3RyaXBBbnNpKGNodW5rLnRvU3RyaW5nKCkpKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pO1xuXG4gICAgamVzdC5zcHlPbihwcm9jZXNzLnN0ZGVyciwgJ3dyaXRlJykubW9ja0ltcGxlbWVudGF0aW9uKChjaHVuazogYW55KSA9PiB7XG4gICAgICBtb2NrU3RkZXJyKHN0cmlwQW5zaShjaHVuay50b1N0cmluZygpKSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICBqZXN0LnJlc3RvcmVBbGxNb2NrcygpO1xuICB9KTtcblxuICBkZXNjcmliZSgnc3RyZWFtIHNlbGVjdGlvbicsICgpID0+IHtcbiAgICB0ZXN0KCdkYXRhKCkgYWx3YXlzIHdyaXRlcyB0byBzdGRvdXQnLCAoKSA9PiB7XG4gICAgICBkYXRhKCd0ZXN0IG1lc3NhZ2UnKTtcbiAgICAgIGV4cGVjdChtb2NrU3Rkb3V0KS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgndGVzdCBtZXNzYWdlXFxuJyk7XG4gICAgICBleHBlY3QobW9ja1N0ZGVycikubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2Vycm9yKCkgYWx3YXlzIHdyaXRlcyB0byBzdGRlcnInLCAoKSA9PiB7XG4gICAgICBlcnJvcigndGVzdCBlcnJvcicpO1xuICAgICAgZXhwZWN0KG1vY2tTdGRlcnIpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKCd0ZXN0IGVycm9yXFxuJyk7XG4gICAgICBleHBlY3QobW9ja1N0ZG91dCkubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3ByaW50KCkgd3JpdGVzIHRvIHN0ZGVyciBieSBkZWZhdWx0JywgKCkgPT4ge1xuICAgICAgcHJpbnQoJ3Rlc3QgcHJpbnQnKTtcbiAgICAgIGV4cGVjdChtb2NrU3RkZXJyKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgndGVzdCBwcmludFxcbicpO1xuICAgICAgZXhwZWN0KG1vY2tTdGRvdXQpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdwcmludCgpIHdyaXRlcyB0byBzdGRvdXQgaW4gQ0kgbW9kZScsICgpID0+IHtcbiAgICAgIHNldENJKHRydWUpO1xuICAgICAgcHJpbnQoJ3Rlc3QgcHJpbnQnKTtcbiAgICAgIGV4cGVjdChtb2NrU3Rkb3V0KS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgndGVzdCBwcmludFxcbicpO1xuICAgICAgZXhwZWN0KG1vY2tTdGRlcnIpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdsb2cgbGV2ZWxzJywgKCkgPT4ge1xuICAgIHRlc3QoJ3Jlc3BlY3RzIGxvZyBsZXZlbCBzZXR0aW5ncycsICgpID0+IHtcbiAgICAgIHNldExvZ0xldmVsKExvZ0xldmVsLkVSUk9SKTtcbiAgICAgIGVycm9yKCdlcnJvciBtZXNzYWdlJyk7XG4gICAgICB3YXJuaW5nKCd3YXJuaW5nIG1lc3NhZ2UnKTtcbiAgICAgIHByaW50KCdwcmludCBtZXNzYWdlJyk7XG4gICAgICBleHBlY3QobW9ja1N0ZGVycikudG9IYXZlQmVlbkNhbGxlZFdpdGgoJ2Vycm9yIG1lc3NhZ2VcXG4nKTtcbiAgICAgIGV4cGVjdChtb2NrU3RkZXJyKS5ub3QudG9IYXZlQmVlbkNhbGxlZFdpdGgoJ3dhcm5pbmcgbWVzc2FnZVxcbicpO1xuICAgICAgZXhwZWN0KG1vY2tTdGRlcnIpLm5vdC50b0hhdmVCZWVuQ2FsbGVkV2l0aCgncHJpbnQgbWVzc2FnZVxcbicpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnZGVidWcgbWVzc2FnZXMgb25seSBzaG93IGF0IGRlYnVnIGxldmVsJywgKCkgPT4ge1xuICAgICAgc2V0TG9nTGV2ZWwoTG9nTGV2ZWwuSU5GTyk7XG4gICAgICBkZWJ1ZygnZGVidWcgbWVzc2FnZScpO1xuICAgICAgZXhwZWN0KG1vY2tTdGRlcnIpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG5cbiAgICAgIHNldExvZ0xldmVsKExvZ0xldmVsLkRFQlVHKTtcbiAgICAgIGRlYnVnKCdkZWJ1ZyBtZXNzYWdlJyk7XG4gICAgICBleHBlY3QobW9ja1N0ZGVycikudG9IYXZlQmVlbkNhbGxlZFdpdGgoJ2RlYnVnIG1lc3NhZ2VcXG4nKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3RyYWNlIG1lc3NhZ2VzIG9ubHkgc2hvdyBhdCB0cmFjZSBsZXZlbCcsICgpID0+IHtcbiAgICAgIHNldExvZ0xldmVsKExvZ0xldmVsLkRFQlVHKTtcbiAgICAgIHRyYWNlKCd0cmFjZSBtZXNzYWdlJyk7XG4gICAgICBleHBlY3QobW9ja1N0ZGVycikubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcblxuICAgICAgc2V0TG9nTGV2ZWwoTG9nTGV2ZWwuVFJBQ0UpO1xuICAgICAgdHJhY2UoJ3RyYWNlIG1lc3NhZ2UnKTtcbiAgICAgIGV4cGVjdChtb2NrU3RkZXJyKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgndHJhY2UgbWVzc2FnZVxcbicpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnbWVzc2FnZSBmb3JtYXR0aW5nJywgKCkgPT4ge1xuICAgIHRlc3QoJ2Zvcm1hdHMgbWVzc2FnZXMgd2l0aCBtdWx0aXBsZSBhcmd1bWVudHMnLCAoKSA9PiB7XG4gICAgICBwcmludCgnVmFsdWU6ICVkLCBTdHJpbmc6ICVzJywgNDIsICd0ZXN0Jyk7XG4gICAgICBleHBlY3QobW9ja1N0ZGVycikudG9IYXZlQmVlbkNhbGxlZFdpdGgoJ1ZhbHVlOiA0MiwgU3RyaW5nOiB0ZXN0XFxuJyk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdoYW5kbGVzIHByZWZpeCBjb3JyZWN0bHknLCAoKSA9PiB7XG4gICAgICBjb25zdCBwcmVmaXhlZExvZyA9IHByZWZpeCgnUFJFRklYJyk7XG4gICAgICBwcmVmaXhlZExvZygndGVzdCBtZXNzYWdlJyk7XG4gICAgICBleHBlY3QobW9ja1N0ZGVycikudG9IYXZlQmVlbkNhbGxlZFdpdGgoJ1BSRUZJWCB0ZXN0IG1lc3NhZ2VcXG4nKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2hhbmRsZXMgY3VzdG9tIHN0eWxlcycsICgpID0+IHtcbiAgICAgIHN1Y2Nlc3MoJ3N1Y2Nlc3MgbWVzc2FnZScpO1xuICAgICAgZXhwZWN0KG1vY2tTdGRlcnIpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKCdzdWNjZXNzIG1lc3NhZ2VcXG4nKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2NvcmtlZCBsb2dnaW5nJywgKCkgPT4ge1xuICAgIHRlc3QoJ2J1ZmZlcnMgbWVzc2FnZXMgd2hlbiBjb3JrZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCB3aXRoQ29ya2VkTG9nZ2luZyhhc3luYyAoKSA9PiB7XG4gICAgICAgIHByaW50KCdtZXNzYWdlIDEnKTtcbiAgICAgICAgcHJpbnQoJ21lc3NhZ2UgMicpO1xuICAgICAgICBleHBlY3QobW9ja1N0ZGVycikubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QobW9ja1N0ZGVycikudG9IYXZlQmVlbkNhbGxlZFdpdGgoJ21lc3NhZ2UgMVxcbicpO1xuICAgICAgZXhwZWN0KG1vY2tTdGRlcnIpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKCdtZXNzYWdlIDJcXG4nKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2hhbmRsZXMgbmVzdGVkIGNvcmtpbmcgY29ycmVjdGx5JywgYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgd2l0aENvcmtlZExvZ2dpbmcoYXN5bmMgKCkgPT4ge1xuICAgICAgICBwcmludCgnb3V0ZXIgMScpO1xuICAgICAgICBhd2FpdCB3aXRoQ29ya2VkTG9nZ2luZyhhc3luYyAoKSA9PiB7XG4gICAgICAgICAgcHJpbnQoJ2lubmVyJyk7XG4gICAgICAgIH0pO1xuICAgICAgICBwcmludCgnb3V0ZXIgMicpO1xuICAgICAgICBleHBlY3QobW9ja1N0ZGVycikubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QobW9ja1N0ZGVycikudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDMpO1xuICAgICAgZXhwZWN0KG1vY2tTdGRlcnIpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKCdvdXRlciAxXFxuJyk7XG4gICAgICBleHBlY3QobW9ja1N0ZGVycikudG9IYXZlQmVlbkNhbGxlZFdpdGgoJ2lubmVyXFxuJyk7XG4gICAgICBleHBlY3QobW9ja1N0ZGVycikudG9IYXZlQmVlbkNhbGxlZFdpdGgoJ291dGVyIDJcXG4nKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3RpbWVzdGFtcCBhbmQgcHJlZml4IGhhbmRsaW5nJywgKCkgPT4ge1xuICAgIHRlc3QoJ2NvbWJpbmVzIHRpbWVzdGFtcCBhbmQgcHJlZml4IGNvcnJlY3RseScsICgpID0+IHtcbiAgICAgIGxvZyh7XG4gICAgICAgIGxldmVsOiBMb2dMZXZlbC5JTkZPLFxuICAgICAgICBtZXNzYWdlOiAndGVzdCBtZXNzYWdlJyxcbiAgICAgICAgdGltZXN0YW1wOiB0cnVlLFxuICAgICAgICBwcmVmaXg6ICdQUkVGSVgnLFxuICAgICAgfSk7XG4gICAgICBleHBlY3QobW9ja1N0ZGVycikudG9IYXZlQmVlbkNhbGxlZFdpdGgoXG4gICAgICAgIGV4cGVjdC5zdHJpbmdNYXRjaGluZygvXlBSRUZJWCBcXFtcXGR7Mn06XFxkezJ9OlxcZHsyfVxcXSB0ZXN0IG1lc3NhZ2VcXG4kLyksXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
@@ -1,17 +1,25 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const client_cloudwatch_logs_1 = require("@aws-sdk/client-cloudwatch-logs");
4
- const chalk_1 = require("chalk");
5
4
  const logs_monitor_1 = require("../../../lib/api/logs/logs-monitor");
6
5
  const util_1 = require("../../util");
7
6
  const mock_sdk_1 = require("../../util/mock-sdk");
7
+ // Helper function to strip ANSI codes
8
+ const stripAnsi = (str) => {
9
+ const ansiRegex = /\u001b\[[0-9;]*[a-zA-Z]/g;
10
+ return str.replace(ansiRegex, '');
11
+ };
8
12
  let sdk;
9
13
  let stderrMock;
10
14
  let monitor;
11
15
  beforeEach(() => {
12
16
  monitor = new logs_monitor_1.CloudWatchLogEventMonitor(new Date(T100));
13
- stderrMock = jest.spyOn(process.stderr, 'write').mockImplementation(() => {
14
- return true;
17
+ stderrMock = jest.spyOn(process.stderr, 'write').mockImplementation((chunk) => {
18
+ // Strip ANSI codes when capturing output
19
+ if (typeof chunk === 'string') {
20
+ return stripAnsi(chunk);
21
+ }
22
+ return stripAnsi(chunk.toString());
15
23
  });
16
24
  sdk = new mock_sdk_1.MockSdk();
17
25
  });
@@ -37,7 +45,7 @@ test('process events', async () => {
37
45
  // THEN
38
46
  const expectedLocaleTimeString = eventDate.toLocaleTimeString();
39
47
  expect(stderrMock).toHaveBeenCalledTimes(1);
40
- expect(stderrMock.mock.calls[0][0]).toContain(`[${(0, chalk_1.blue)('loggroup')}] ${(0, chalk_1.yellow)(expectedLocaleTimeString)} message`);
48
+ expect(stripAnsi(stderrMock.mock.calls[0][0])).toContain(`[loggroup] ${expectedLocaleTimeString} message`);
41
49
  });
42
50
  test('process truncated events', async () => {
43
51
  // GIVEN
@@ -62,8 +70,8 @@ test('process truncated events', async () => {
62
70
  // THEN
63
71
  const expectedLocaleTimeString = eventDate.toLocaleTimeString();
64
72
  expect(stderrMock).toHaveBeenCalledTimes(101);
65
- expect(stderrMock.mock.calls[0][0]).toContain(`[${(0, chalk_1.blue)('loggroup')}] ${(0, chalk_1.yellow)(expectedLocaleTimeString)} message`);
66
- expect(stderrMock.mock.calls[100][0]).toContain(`[${(0, chalk_1.blue)('loggroup')}] ${(0, chalk_1.yellow)(expectedLocaleTimeString)} >>> \`watch\` shows only the first 100 log messages - the rest have been truncated...`);
73
+ expect(stripAnsi(stderrMock.mock.calls[0][0])).toContain(`[loggroup] ${expectedLocaleTimeString} message0`);
74
+ expect(stripAnsi(stderrMock.mock.calls[100][0])).toContain(`[loggroup] ${expectedLocaleTimeString} >>> \`watch\` shows only the first 100 log messages - the rest have been truncated...`);
67
75
  });
68
76
  const T0 = 1597837230504;
69
77
  const T100 = T0 + 100 * 1000;
@@ -75,4 +83,4 @@ function event(nr, message, timestamp) {
75
83
  ingestionTime: timestamp.getTime(),
76
84
  };
77
85
  }
78
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9ncy1tb25pdG9yLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJsb2dzLW1vbml0b3IudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDRFQUFnRztBQUNoRyxpQ0FBcUM7QUFDckMscUVBQStFO0FBQy9FLHFDQUFtQztBQUNuQyxrREFBb0U7QUFFcEUsSUFBSSxHQUFZLENBQUM7QUFDakIsSUFBSSxVQUE0QixDQUFDO0FBQ2pDLElBQUksT0FBa0MsQ0FBQztBQUN2QyxVQUFVLENBQUMsR0FBRyxFQUFFO0lBQ2QsT0FBTyxHQUFHLElBQUksd0NBQXlCLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUN4RCxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsRUFBRTtRQUN2RSxPQUFPLElBQUksQ0FBQztJQUNkLENBQUMsQ0FBQyxDQUFDO0lBQ0gsR0FBRyxHQUFHLElBQUksa0JBQU8sRUFBRSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDO0FBRUgsU0FBUyxDQUFDLEdBQUcsRUFBRTtJQUNiLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN6QixPQUFPLENBQUMsVUFBVSxFQUFFLENBQUM7QUFDdkIsQ0FBQyxDQUFDLENBQUM7QUFFSCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsS0FBSyxJQUFJLEVBQUU7SUFDaEMsUUFBUTtJQUNSLE1BQU0sU0FBUyxHQUFHLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDNUMsK0JBQW9CLENBQUMsRUFBRSxDQUFDLCtDQUFzQixDQUFDLENBQUMsUUFBUSxDQUFDO1FBQ3ZELE1BQU0sRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0tBQzNDLENBQUMsQ0FBQztJ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QUFlO0lBQ3pELE9BQU87UUFDTCxPQUFPLEVBQUUsR0FBRyxFQUFFLEVBQUU7UUFDaEIsT0FBTztRQUNQLFNBQVMsRUFBRSxTQUFTLENBQUMsT0FBTyxFQUFFO1FBQzlCLGFBQWEsRUFBRSxTQUFTLENBQUMsT0FBTyxFQUFFO0tBQ25DLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRmlsdGVyTG9nRXZlbnRzQ29tbWFuZCwgdHlwZSBGaWx0ZXJlZExvZ0V2ZW50IH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWNsb3Vkd2F0Y2gtbG9ncyc7XG5pbXBvcnQgeyBibHVlLCB5ZWxsb3cgfSBmcm9tICdjaGFsayc7XG5pbXBvcnQgeyBDbG91ZFdhdGNoTG9nRXZlbnRNb25pdG9yIH0gZnJvbSAnLi4vLi4vLi4vbGliL2FwaS9sb2dzL2xvZ3MtbW9uaXRvcic7XG5pbXBvcnQgeyBzbGVlcCB9IGZyb20gJy4uLy4uL3V0aWwnO1xuaW1wb3J0IHsgTW9ja1NkaywgbW9ja0Nsb3VkV2F0Y2hDbGllbnQgfSBmcm9tICcuLi8uLi91dGlsL21vY2stc2RrJztcblxubGV0IHNkazogTW9ja1NkaztcbmxldCBzdGRlcnJNb2NrOiBqZXN0LlNweUluc3RhbmNlO1xubGV0IG1vbml0b3I6IENsb3VkV2F0Y2hMb2dFdmVudE1vbml0b3I7XG5iZWZvcmVFYWNoKCgpID0+IHtcbiAgbW9uaXRvciA9IG5ldyBDbG91ZFdhdGNoTG9nRXZlbnRNb25pdG9yKG5ldyBEYXRlKFQxMDApKTtcbiAgc3RkZXJyTW9jayA9IGplc3Quc3B5T24ocHJvY2Vzcy5zdGRlcnIsICd3cml0ZScpLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0pO1xuICBzZGsgPSBuZXcgTW9ja1NkaygpO1xufSk7XG5cbmFmdGVyRWFjaCgoKSA9PiB7XG4gIHN0ZGVyck1vY2subW9ja1Jlc3RvcmUoKTtcbiAgbW9uaXRvci5kZWFjdGl2YXRlKCk7XG59KTtcblxudGVzdCgncHJvY2VzcyBldmVudHMnLCBhc3luYyAoKSA9PiB7XG4gIC8vIEdJVkVOXG4gIGNvbnN0IGV2ZW50RGF0ZSA9IG5ldyBEYXRlKFQwICsgMTAyICogMTAwMCk7XG4gIG1vY2tDbG91ZFdhdGNoQ2xpZW50Lm9uKEZpbHRlckxvZ0V2ZW50c0NvbW1hbmQpLnJlc29sdmVzKHtcbiAgICBldmVudHM6IFtldmVudCgxMDIsICdtZXNzYWdlJywgZXZlbnREYXRlKV0sXG4gIH0pO1xuXG4gIG1vbml0b3IuYWRkTG9nR3JvdXBzKFxuICAgIHtcbiAgICAgIG5hbWU6ICduYW1lJyxcbiAgICAgIGFjY291bnQ6ICcxMTExMTExMTExMScsXG4gICAgICByZWdpb246ICd1cy1lYXN0LTEnLFxuICAgIH0sXG4gICAgc2RrLFxuICAgIFsnbG9nZ3JvdXAnXSxcbiAgKTtcbiAgLy8gV0hFTlxuICBtb25pdG9yLmFjdGl2YXRlKCk7XG4gIC8vIG5lZWQgdGltZSBmb3IgdGhlIGxvZyBwcm9jZXNzaW5nIHRvIG9jY3VyXG4gIGF3YWl0IHNsZWVwKDEwMDApO1xuXG4gIC8vIFRIRU5cbiAgY29uc3QgZXhwZWN0ZWRMb2NhbGVUaW1lU3RyaW5nID0gZXZlbnREYXRlLnRvTG9jYWxlVGltZVN0cmluZygpO1xuICBleHBlY3Qoc3RkZXJyTW9jaykudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuICBleHBlY3Qoc3RkZXJyTW9jay5tb2NrLmNhbGxzWzBdWzBdKS50b0NvbnRhaW4oYFske2JsdWUoJ2xvZ2dyb3VwJyl9XSAke3llbGxvdyhleHBlY3RlZExvY2FsZVRpbWVTdHJpbmcpfSBtZXNzYWdlYCk7XG59KTtcblxudGVzdCgncHJvY2VzcyB0cnVuY2F0ZWQgZXZlbnRzJywgYXN5bmMgKCkgPT4ge1xuICAvLyBHSVZFTlxuICBjb25zdCBldmVudERhdGUgPSBuZXcgRGF0ZShUMCArIDEwMiAqIDEwMDApO1xuICBjb25zdCBldmVudHM6IEZpbHRlcmVkTG9nRXZlbnRbXSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDsgaSsrKSB7XG4gICAgZXZlbnRzLnB1c2goZXZlbnQoMTAyICsgaSwgJ21lc3NhZ2UnICsgaSwgZXZlbnREYXRlKSk7XG4gIH1cblxuICBtb2NrQ2xvdWRXYXRjaENsaWVudC5vbihGaWx0ZXJMb2dFdmVudHNDb21tYW5kKS5yZXNvbHZlcyh7XG4gICAgZXZlbnRzLFxuICAgIG5leHRUb2tlbjogJ3NvbWUtdG9rZW4nLFxuICB9KTtcbiAgbW9uaXRvci5hZGRMb2dHcm91cHMoXG4gICAge1xuICAgICAgbmFtZTogJ25hbWUnLFxuICAgICAgYWNjb3VudDogJzExMTExMTExMTExJyxcbiAgICAgIHJlZ2lvbjogJ3VzLWVhc3QtMScsXG4gICAgfSxcbiAgICBzZGssXG4gICAgWydsb2dncm91cCddLFxuICApO1xuICAvLyBXSEVOXG4gIG1vbml0b3IuYWN0aXZhdGUoKTtcbiAgLy8gbmVlZCB0aW1lIGZvciB0aGUgbG9nIHByb2Nlc3NpbmcgdG8gb2NjdXJcbiAgYXdhaXQgc2xlZXAoMTAwMCk7XG5cbiAgLy8gVEhFTlxuICBjb25zdCBleHBlY3RlZExvY2FsZVRpbWVTdHJpbmcgPSBldmVudERhdGUudG9Mb2NhbGVUaW1lU3RyaW5nKCk7XG4gIGV4cGVjdChzdGRlcnJNb2NrKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMTAxKTtcbiAgZXhwZWN0KHN0ZGVyck1vY2subW9jay5jYWxsc1swXVswXSkudG9Db250YWluKGBbJHtibHVlKCdsb2dncm91cCcpfV0gJHt5ZWxsb3coZXhwZWN0ZWRMb2NhbGVUaW1lU3RyaW5nKX0gbWVzc2FnZWApO1xuICBleHBlY3Qoc3RkZXJyTW9jay5tb2NrLmNhbGxzWzEwMF1bMF0pLnRvQ29udGFpbihcbiAgICBgWyR7Ymx1ZSgnbG9nZ3JvdXAnKX1dICR7eWVsbG93KGV4cGVjdGVkTG9jYWxlVGltZVN0cmluZyl9ID4+PiBcXGB3YXRjaFxcYCBzaG93cyBvbmx5IHRoZSBmaXJzdCAxMDAgbG9nIG1lc3NhZ2VzIC0gdGhlIHJlc3QgaGF2ZSBiZWVuIHRydW5jYXRlZC4uLmAsXG4gICk7XG59KTtcblxuY29uc3QgVDAgPSAxNTk3ODM3MjMwNTA0O1xuY29uc3QgVDEwMCA9IFQwICsgMTAwICogMTAwMDtcbmZ1bmN0aW9uIGV2ZW50KG5yOiBudW1iZXIsIG1lc3NhZ2U6IHN0cmluZywgdGltZXN0YW1wOiBEYXRlKTogRmlsdGVyZWRMb2dFdmVudCB7XG4gIHJldHVybiB7XG4gICAgZXZlbnRJZDogYCR7bnJ9YCxcbiAgICBtZXNzYWdlLFxuICAgIHRpbWVzdGFtcDogdGltZXN0YW1wLmdldFRpbWUoKSxcbiAgICBpbmdlc3Rpb25UaW1lOiB0aW1lc3RhbXAuZ2V0VGltZSgpLFxuICB9O1xufVxuIl19
86
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9ncy1tb25pdG9yLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJsb2dzLW1vbml0b3IudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDRFQUFnRztBQUNoRyxxRUFBK0U7QUFDL0UscUNBQW1DO0FBQ25DLGtEQUFvRTtBQUVwRSxzQ0FBc0M7QUFDdEMsTUFBTSxTQUFTLEdBQUcsQ0FBQyxHQUFXLEVBQVUsRUFBRTtJQUN4QyxNQUFNLFNBQVMsR0FBRywwQkFBMEIsQ0FBQztJQUM3QyxPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3BDLENBQUMsQ0FBQztBQUVGLElBQUksR0FBWSxDQUFDO0FBQ2pCLElBQUksVUFBNEIsQ0FBQztBQUNqQyxJQUFJLE9BQWtDLENBQUM7QUFDdkMsVUFBVSxDQUFDLEdBQUcsRUFBRTtJQUNkLE9BQU8sR0FBRyxJQUFJLHdDQUF5QixDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDeEQsVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFO1FBQ2pGLHlDQUF5QztRQUN6QyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzlCLE9BQU8sU0FBUyxDQUFDLEtBQUssQ0FBdUIsQ0FBQztRQUNoRCxDQUFDO1FBQ0QsT0FBTyxTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUF1QixDQUFDO0lBQzNELENBQUMsQ0FBQyxDQUFDO0lBQ0gsR0FBRyxHQUFHLElBQUksa0JBQU8sRUFBRSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDO0FBRUgsU0FBUyxDQUFDLEdBQUcsRUFBRTtJQUNiLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN6QixPQUFPLENBQUMsVUFBVSxFQUFF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QUFTLENBQ3hELGNBQWMsd0JBQXdCLHdGQUF3RixDQUMvSCxDQUFDO0FBQ0osQ0FBQyxDQUFDLENBQUM7QUFFSCxNQUFNLEVBQUUsR0FBRyxhQUFhLENBQUM7QUFDekIsTUFBTSxJQUFJLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUM7QUFDN0IsU0FBUyxLQUFLLENBQUMsRUFBVSxFQUFFLE9BQWUsRUFBRSxTQUFlO0lBQ3pELE9BQU87UUFDTCxPQUFPLEVBQUUsR0FBRyxFQUFFLEVBQUU7UUFDaEIsT0FBTztRQUNQLFNBQVMsRUFBRSxTQUFTLENBQUMsT0FBTyxFQUFFO1FBQzlCLGFBQWEsRUFBRSxTQUFTLENBQUMsT0FBTyxFQUFFO0tBQ25DLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRmlsdGVyTG9nRXZlbnRzQ29tbWFuZCwgdHlwZSBGaWx0ZXJlZExvZ0V2ZW50IH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWNsb3Vkd2F0Y2gtbG9ncyc7XG5pbXBvcnQgeyBDbG91ZFdhdGNoTG9nRXZlbnRNb25pdG9yIH0gZnJvbSAnLi4vLi4vLi4vbGliL2FwaS9sb2dzL2xvZ3MtbW9uaXRvcic7XG5pbXBvcnQgeyBzbGVlcCB9IGZyb20gJy4uLy4uL3V0aWwnO1xuaW1wb3J0IHsgTW9ja1NkaywgbW9ja0Nsb3VkV2F0Y2hDbGllbnQgfSBmcm9tICcuLi8uLi91dGlsL21vY2stc2RrJztcblxuLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHN0cmlwIEFOU0kgY29kZXNcbmNvbnN0IHN0cmlwQW5zaSA9IChzdHI6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IGFuc2lSZWdleCA9IC9cXHUwMDFiXFxbWzAtOTtdKlthLXpBLVpdL2c7XG4gIHJldHVybiBzdHIucmVwbGFjZShhbnNpUmVnZXgsICcnKTtcbn07XG5cbmxldCBzZGs6IE1vY2tTZGs7XG5sZXQgc3RkZXJyTW9jazogamVzdC5TcHlJbnN0YW5jZTtcbmxldCBtb25pdG9yOiBDbG91ZFdhdGNoTG9nRXZlbnRNb25pdG9yO1xuYmVmb3JlRWFjaCgoKSA9PiB7XG4gIG1vbml0b3IgPSBuZXcgQ2xvdWRXYXRjaExvZ0V2ZW50TW9uaXRvcihuZXcgRGF0ZShUMTAwKSk7XG4gIHN0ZGVyck1vY2sgPSBqZXN0LnNweU9uKHByb2Nlc3Muc3RkZXJyLCAnd3JpdGUnKS5tb2NrSW1wbGVtZW50YXRpb24oKGNodW5rOiBhbnkpID0+IHtcbiAgICAvLyBTdHJpcCBBTlNJIGNvZGVzIHdoZW4gY2FwdHVyaW5nIG91dHB1dFxuICAgIGlmICh0eXBlb2YgY2h1bmsgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gc3RyaXBBbnNpKGNodW5rKSBhcyB1bmtub3duIGFzIGJvb2xlYW47XG4gICAgfVxuICAgIHJldHVybiBzdHJpcEFuc2koY2h1bmsudG9TdHJpbmcoKSkgYXMgdW5rbm93biBhcyBib29sZWFuO1xuICB9KTtcbiAgc2RrID0gbmV3IE1vY2tTZGsoKTtcbn0pO1xuXG5hZnRlckVhY2goKCkgPT4ge1xuICBzdGRlcnJNb2NrLm1vY2tSZXN0b3JlKCk7XG4gIG1vbml0b3IuZGVhY3RpdmF0ZSgpO1xufSk7XG5cbnRlc3QoJ3Byb2Nlc3MgZXZlbnRzJywgYXN5bmMgKCkgPT4ge1xuICAvLyBHSVZFTlxuICBjb25zdCBldmVudERhdGUgPSBuZXcgRGF0ZShUMCArIDEwMiAqIDEwMDApO1xuICBtb2NrQ2xvdWRXYXRjaENsaWVudC5vbihGaWx0ZXJMb2dFdmVudHNDb21tYW5kKS5yZXNvbHZlcyh7XG4gICAgZXZlbnRzOiBbZXZlbnQoMTAyLCAnbWVzc2FnZScsIGV2ZW50RGF0ZSldLFxuICB9KTtcblxuICBtb25pdG9yLmFkZExvZ0dyb3VwcyhcbiAgICB7XG4gICAgICBuYW1lOiAnbmFtZScsXG4gICAgICBhY2NvdW50OiAnMTExMTExMTExMTEnLFxuICAgICAgcmVnaW9uOiAndXMtZWFzdC0xJyxcbiAgICB9LFxuICAgIHNkayxcbiAgICBbJ2xvZ2dyb3VwJ10sXG4gICk7XG4gIC8vIFdIRU5cbiAgbW9uaXRvci5hY3RpdmF0ZSgpO1xuICAvLyBuZWVkIHRpbWUgZm9yIHRoZSBsb2cgcHJvY2Vzc2luZyB0byBvY2N1clxuICBhd2FpdCBzbGVlcCgxMDAwKTtcblxuICAvLyBUSEVOXG4gIGNvbnN0IGV4cGVjdGVkTG9jYWxlVGltZVN0cmluZyA9IGV2ZW50RGF0ZS50b0xvY2FsZVRpbWVTdHJpbmcoKTtcbiAgZXhwZWN0KHN0ZGVyck1vY2spLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcbiAgZXhwZWN0KHN0cmlwQW5zaShzdGRlcnJNb2NrLm1vY2suY2FsbHNbMF1bMF0pKS50b0NvbnRhaW4oYFtsb2dncm91cF0gJHtleHBlY3RlZExvY2FsZVRpbWVTdHJpbmd9IG1lc3NhZ2VgKTtcbn0pO1xuXG50ZXN0KCdwcm9jZXNzIHRydW5jYXRlZCBldmVudHMnLCBhc3luYyAoKSA9PiB7XG4gIC8vIEdJVkVOXG4gIGNvbnN0IGV2ZW50RGF0ZSA9IG5ldyBEYXRlKFQwICsgMTAyICogMTAwMCk7XG4gIGNvbnN0IGV2ZW50czogRmlsdGVyZWRMb2dFdmVudFtdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwOyBpKyspIHtcbiAgICBldmVudHMucHVzaChldmVudCgxMDIgKyBpLCAnbWVzc2FnZScgKyBpLCBldmVudERhdGUpKTtcbiAgfVxuXG4gIG1vY2tDbG91ZFdhdGNoQ2xpZW50Lm9uKEZpbHRlckxvZ0V2ZW50c0NvbW1hbmQpLnJlc29sdmVzKHtcbiAgICBldmVudHMsXG4gICAgbmV4dFRva2VuOiAnc29tZS10b2tlbicsXG4gIH0pO1xuICBtb25pdG9yLmFkZExvZ0dyb3VwcyhcbiAgICB7XG4gICAgICBuYW1lOiAnbmFtZScsXG4gICAgICBhY2NvdW50OiAnMTExMTExMTExMTEnLFxuICAgICAgcmVnaW9uOiAndXMtZWFzdC0xJyxcbiAgICB9LFxuICAgIHNkayxcbiAgICBbJ2xvZ2dyb3VwJ10sXG4gICk7XG4gIC8vIFdIRU5cbiAgbW9uaXRvci5hY3RpdmF0ZSgpO1xuICAvLyBuZWVkIHRpbWUgZm9yIHRoZSBsb2cgcHJvY2Vzc2luZyB0byBvY2N1clxuICBhd2FpdCBzbGVlcCgxMDAwKTtcblxuICAvLyBUSEVOXG4gIGNvbnN0IGV4cGVjdGVkTG9jYWxlVGltZVN0cmluZyA9IGV2ZW50RGF0ZS50b0xvY2FsZVRpbWVTdHJpbmcoKTtcbiAgZXhwZWN0KHN0ZGVyck1vY2spLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxMDEpO1xuICBleHBlY3Qoc3RyaXBBbnNpKHN0ZGVyck1vY2subW9jay5jYWxsc1swXVswXSkpLnRvQ29udGFpbihgW2xvZ2dyb3VwXSAke2V4cGVjdGVkTG9jYWxlVGltZVN0cmluZ30gbWVzc2FnZTBgKTtcbiAgZXhwZWN0KHN0cmlwQW5zaShzdGRlcnJNb2NrLm1vY2suY2FsbHNbMTAwXVswXSkpLnRvQ29udGFpbihcbiAgICBgW2xvZ2dyb3VwXSAke2V4cGVjdGVkTG9jYWxlVGltZVN0cmluZ30gPj4+IFxcYHdhdGNoXFxgIHNob3dzIG9ubHkgdGhlIGZpcnN0IDEwMCBsb2cgbWVzc2FnZXMgLSB0aGUgcmVzdCBoYXZlIGJlZW4gdHJ1bmNhdGVkLi4uYCxcbiAgKTtcbn0pO1xuXG5jb25zdCBUMCA9IDE1OTc4MzcyMzA1MDQ7XG5jb25zdCBUMTAwID0gVDAgKyAxMDAgKiAxMDAwO1xuZnVuY3Rpb24gZXZlbnQobnI6IG51bWJlciwgbWVzc2FnZTogc3RyaW5nLCB0aW1lc3RhbXA6IERhdGUpOiBGaWx0ZXJlZExvZ0V2ZW50IHtcbiAgcmV0dXJuIHtcbiAgICBldmVudElkOiBgJHtucn1gLFxuICAgIG1lc3NhZ2UsXG4gICAgdGltZXN0YW1wOiB0aW1lc3RhbXAuZ2V0VGltZSgpLFxuICAgIGluZ2VzdGlvblRpbWU6IHRpbWVzdGFtcC5nZXRUaW1lKCksXG4gIH07XG59XG4iXX0=
@@ -1,131 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const logging_1 = require("../lib/logging");
4
- describe('logging', () => {
5
- // Mock streams to capture output
6
- let mockStdout;
7
- let mockStderr;
8
- beforeEach(() => {
9
- // Reset log level before each test
10
- (0, logging_1.setLogLevel)(logging_1.LogLevel.INFO);
11
- (0, logging_1.setCI)(false);
12
- // Create mock functions to capture output
13
- mockStdout = jest.fn();
14
- mockStderr = jest.fn();
15
- // Mock the write methods directly
16
- jest.spyOn(process.stdout, 'write').mockImplementation((chunk) => {
17
- mockStdout(chunk.toString());
18
- return true;
19
- });
20
- jest.spyOn(process.stderr, 'write').mockImplementation((chunk) => {
21
- mockStderr(chunk.toString());
22
- return true;
23
- });
24
- });
25
- afterEach(() => {
26
- jest.restoreAllMocks();
27
- });
28
- describe('stream selection', () => {
29
- test('data() always writes to stdout', () => {
30
- (0, logging_1.data)('test message');
31
- expect(mockStdout).toHaveBeenCalledWith(expect.stringContaining('test message\n'));
32
- expect(mockStderr).not.toHaveBeenCalled();
33
- });
34
- test('error() always writes to stderr', () => {
35
- (0, logging_1.error)('test error');
36
- expect(mockStderr).toHaveBeenCalledWith(expect.stringContaining('test error\n'));
37
- expect(mockStdout).not.toHaveBeenCalled();
38
- });
39
- test('print() writes to stderr by default', () => {
40
- (0, logging_1.print)('test print');
41
- expect(mockStderr).toHaveBeenCalledWith(expect.stringContaining('test print\n'));
42
- expect(mockStdout).not.toHaveBeenCalled();
43
- });
44
- test('print() writes to stdout in CI mode', () => {
45
- (0, logging_1.setCI)(true);
46
- (0, logging_1.print)('test print');
47
- expect(mockStdout).toHaveBeenCalledWith(expect.stringContaining('test print\n'));
48
- expect(mockStderr).not.toHaveBeenCalled();
49
- });
50
- });
51
- describe('log levels', () => {
52
- test('respects log level settings', () => {
53
- (0, logging_1.setLogLevel)(logging_1.LogLevel.ERROR);
54
- (0, logging_1.error)('error message');
55
- (0, logging_1.warning)('warning message');
56
- (0, logging_1.print)('print message');
57
- expect(mockStderr).toHaveBeenCalledWith(expect.stringContaining('error message\n'));
58
- expect(mockStderr).not.toHaveBeenCalledWith(expect.stringContaining('warning message\n'));
59
- expect(mockStderr).not.toHaveBeenCalledWith(expect.stringContaining('print message\n'));
60
- });
61
- test('debug messages only show at debug level', () => {
62
- (0, logging_1.setLogLevel)(logging_1.LogLevel.INFO);
63
- (0, logging_1.debug)('debug message');
64
- expect(mockStderr).not.toHaveBeenCalled();
65
- (0, logging_1.setLogLevel)(logging_1.LogLevel.DEBUG);
66
- (0, logging_1.debug)('debug message');
67
- expect(mockStderr).toHaveBeenCalledWith(expect.stringContaining('debug message\n'));
68
- });
69
- test('trace messages only show at trace level', () => {
70
- (0, logging_1.setLogLevel)(logging_1.LogLevel.DEBUG);
71
- (0, logging_1.trace)('trace message');
72
- expect(mockStderr).not.toHaveBeenCalled();
73
- (0, logging_1.setLogLevel)(logging_1.LogLevel.TRACE);
74
- (0, logging_1.trace)('trace message');
75
- expect(mockStderr).toHaveBeenCalledWith(expect.stringContaining('trace message\n'));
76
- });
77
- });
78
- describe('message formatting', () => {
79
- test('formats messages with multiple arguments', () => {
80
- (0, logging_1.print)('Value: %d, String: %s', 42, 'test');
81
- expect(mockStderr).toHaveBeenCalledWith(expect.stringContaining('Value: 42, String: test\n'));
82
- });
83
- test('handles prefix correctly', () => {
84
- const prefixedLog = (0, logging_1.prefix)('PREFIX');
85
- prefixedLog('test message');
86
- expect(mockStderr).toHaveBeenCalledWith(expect.stringContaining('PREFIX test message\n'));
87
- });
88
- test('handles custom styles', () => {
89
- (0, logging_1.success)('success message');
90
- // Note: actual styling will depend on chalk, but we can verify the message is there
91
- expect(mockStderr).toHaveBeenCalledWith(expect.stringContaining('success message\n'));
92
- });
93
- });
94
- describe('corked logging', () => {
95
- test('buffers messages when corked', async () => {
96
- await (0, logging_1.withCorkedLogging)(async () => {
97
- (0, logging_1.print)('message 1');
98
- (0, logging_1.print)('message 2');
99
- expect(mockStderr).not.toHaveBeenCalled();
100
- });
101
- expect(mockStderr).toHaveBeenCalledWith(expect.stringContaining('message 1\n'));
102
- expect(mockStderr).toHaveBeenCalledWith(expect.stringContaining('message 2\n'));
103
- });
104
- test('handles nested corking correctly', async () => {
105
- await (0, logging_1.withCorkedLogging)(async () => {
106
- (0, logging_1.print)('outer 1');
107
- await (0, logging_1.withCorkedLogging)(async () => {
108
- (0, logging_1.print)('inner');
109
- });
110
- (0, logging_1.print)('outer 2');
111
- expect(mockStderr).not.toHaveBeenCalled();
112
- });
113
- expect(mockStderr).toHaveBeenCalledTimes(3);
114
- expect(mockStderr).toHaveBeenCalledWith(expect.stringContaining('outer 1\n'));
115
- expect(mockStderr).toHaveBeenCalledWith(expect.stringContaining('inner\n'));
116
- expect(mockStderr).toHaveBeenCalledWith(expect.stringContaining('outer 2\n'));
117
- });
118
- });
119
- describe('timestamp and prefix handling', () => {
120
- test('combines timestamp and prefix correctly', () => {
121
- (0, logging_1.log)({
122
- level: logging_1.LogLevel.INFO,
123
- message: 'test message',
124
- timestamp: true,
125
- prefix: 'PREFIX',
126
- });
127
- expect(mockStderr).toHaveBeenCalledWith(expect.stringMatching(/PREFIX \[\d{2}:\d{2}:\d{2}\] test message\n/));
128
- });
129
- });
130
- });
131
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2luZy50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsibG9nZ2luZy50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsNENBQWtKO0FBRWxKLFFBQVEsQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFO0lBQ3ZCLGlDQUFpQztJQUNqQyxJQUFJLFVBQXFCLENBQUM7SUFDMUIsSUFBSSxVQUFxQixDQUFDO0lBRTFCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7UUFDZCxtQ0FBbUM7UUFDbkMsSUFBQSxxQkFBVyxFQUFDLGtCQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0IsSUFBQSxlQUFLLEVBQUMsS0FBSyxDQUFDLENBQUM7UUFFYiwwQ0FBMEM7UUFDMUMsVUFBVSxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUN2QixVQUFVLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBRXZCLGtDQUFrQztRQUNsQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxLQUFVLEVBQUUsRUFBRTtZQUNwRSxVQUFVLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDN0IsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFO1lBQ3BFLFVBQVUsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUM3QixPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxTQUFTLENBQUMsR0FBRyxFQUFFO1FBQ2IsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3pCLENBQUMsQ0FBQyxDQUFDO0lB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QUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMb2dMZXZlbCwgbG9nLCBzZXRMb2dMZXZlbCwgc2V0Q0ksIGRhdGEsIHByaW50LCBlcnJvciwgd2FybmluZywgc3VjY2VzcywgZGVidWcsIHRyYWNlLCBwcmVmaXgsIHdpdGhDb3JrZWRMb2dnaW5nIH0gZnJvbSAnLi4vbGliL2xvZ2dpbmcnO1xuXG5kZXNjcmliZSgnbG9nZ2luZycsICgpID0+IHtcbiAgLy8gTW9jayBzdHJlYW1zIHRvIGNhcHR1cmUgb3V0cHV0XG4gIGxldCBtb2NrU3Rkb3V0OiBqZXN0Lk1vY2s7XG4gIGxldCBtb2NrU3RkZXJyOiBqZXN0Lk1vY2s7XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgLy8gUmVzZXQgbG9nIGxldmVsIGJlZm9yZSBlYWNoIHRlc3RcbiAgICBzZXRMb2dMZXZlbChMb2dMZXZlbC5JTkZPKTtcbiAgICBzZXRDSShmYWxzZSk7XG5cbiAgICAvLyBDcmVhdGUgbW9jayBmdW5jdGlvbnMgdG8gY2FwdHVyZSBvdXRwdXRcbiAgICBtb2NrU3Rkb3V0ID0gamVzdC5mbigpO1xuICAgIG1vY2tTdGRlcnIgPSBqZXN0LmZuKCk7XG5cbiAgICAvLyBNb2NrIHRoZSB3cml0ZSBtZXRob2RzIGRpcmVjdGx5XG4gICAgamVzdC5zcHlPbihwcm9jZXNzLnN0ZG91dCwgJ3dyaXRlJykubW9ja0ltcGxlbWVudGF0aW9uKChjaHVuazogYW55KSA9PiB7XG4gICAgICBtb2NrU3Rkb3V0KGNodW5rLnRvU3RyaW5nKCkpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG5cbiAgICBqZXN0LnNweU9uKHByb2Nlc3Muc3RkZXJyLCAnd3JpdGUnKS5tb2NrSW1wbGVtZW50YXRpb24oKGNodW5rOiBhbnkpID0+IHtcbiAgICAgIG1vY2tTdGRlcnIoY2h1bmsudG9TdHJpbmcoKSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICBqZXN0LnJlc3RvcmVBbGxNb2NrcygpO1xuICB9KTtcbiAgZGVzY3JpYmUoJ3N0cmVhbSBzZWxlY3Rpb24nLCAoKSA9PiB7XG4gICAgdGVzdCgnZGF0YSgpIGFsd2F5cyB3cml0ZXMgdG8gc3Rkb3V0JywgKCkgPT4ge1xuICAgICAgZGF0YSgndGVzdCBtZXNzYWdlJyk7XG4gICAgICBleHBlY3QobW9ja1N0ZG91dCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoZXhwZWN0LnN0cmluZ0NvbnRhaW5pbmcoJ3Rlc3QgbWVzc2FnZVxcbicpKTtcbiAgICAgIGV4cGVjdChtb2NrU3RkZXJyKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnZXJyb3IoKSBhbHdheXMgd3JpdGVzIHRvIHN0ZGVycicsICgpID0+IHtcbiAgICAgIGVycm9yKCd0ZXN0IGVycm9yJyk7XG4gICAgICBleHBlY3QobW9ja1N0ZGVycikudG9IYXZlQmVlbkNhbGxlZFdpdGgoZXhwZWN0LnN0cmluZ0NvbnRhaW5pbmcoJ3Rlc3QgZXJyb3JcXG4nKSk7XG4gICAgICBleHBlY3QobW9ja1N0ZG91dCkubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3ByaW50KCkgd3JpdGVzIHRvIHN0ZGVyciBieSBkZWZhdWx0JywgKCkgPT4ge1xuICAgICAgcHJpbnQoJ3Rlc3QgcHJpbnQnKTtcbiAgICAgIGV4cGVjdChtb2NrU3RkZXJyKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChleHBlY3Quc3RyaW5nQ29udGFpbmluZygndGVzdCBwcmludFxcbicpKTtcbiAgICAgIGV4cGVjdChtb2NrU3Rkb3V0KS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgncHJpbnQoKSB3cml0ZXMgdG8gc3Rkb3V0IGluIENJIG1vZGUnLCAoKSA9PiB7XG4gICAgICBzZXRDSSh0cnVlKTtcbiAgICAgIHByaW50KCd0ZXN0IHByaW50Jyk7XG4gICAgICBleHBlY3QobW9ja1N0ZG91dCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoZXhwZWN0LnN0cmluZ0NvbnRhaW5pbmcoJ3Rlc3QgcHJpbnRcXG4nKSk7XG4gICAgICBleHBlY3QobW9ja1N0ZGVycikubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2xvZyBsZXZlbHMnLCAoKSA9PiB7XG4gICAgdGVzdCgncmVzcGVjdHMgbG9nIGxldmVsIHNldHRpbmdzJywgKCkgPT4ge1xuICAgICAgc2V0TG9nTGV2ZWwoTG9nTGV2ZWwuRVJST1IpO1xuICAgICAgZXJyb3IoJ2Vycm9yIG1lc3NhZ2UnKTtcbiAgICAgIHdhcm5pbmcoJ3dhcm5pbmcgbWVzc2FnZScpO1xuICAgICAgcHJpbnQoJ3ByaW50IG1lc3NhZ2UnKTtcbiAgICAgIGV4cGVjdChtb2NrU3RkZXJyKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChleHBlY3Quc3RyaW5nQ29udGFpbmluZygnZXJyb3IgbWVzc2FnZVxcbicpKTtcbiAgICAgIGV4cGVjdChtb2NrU3RkZXJyKS5ub3QudG9IYXZlQmVlbkNhbGxlZFdpdGgoZXhwZWN0LnN0cmluZ0NvbnRhaW5pbmcoJ3dhcm5pbmcgbWVzc2FnZVxcbicpKTtcbiAgICAgIGV4cGVjdChtb2NrU3RkZXJyKS5ub3QudG9IYXZlQmVlbkNhbGxlZFdpdGgoZXhwZWN0LnN0cmluZ0NvbnRhaW5pbmcoJ3ByaW50IG1lc3NhZ2VcXG4nKSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdkZWJ1ZyBtZXNzYWdlcyBvbmx5IHNob3cgYXQgZGVidWcgbGV2ZWwnLCAoKSA9PiB7XG4gICAgICBzZXRMb2dMZXZlbChMb2dMZXZlbC5JTkZPKTtcbiAgICAgIGRlYnVnKCdkZWJ1ZyBtZXNzYWdlJyk7XG4gICAgICBleHBlY3QobW9ja1N0ZGVycikubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcblxuICAgICAgc2V0TG9nTGV2ZWwoTG9nTGV2ZWwuREVCVUcpO1xuICAgICAgZGVidWcoJ2RlYnVnIG1lc3NhZ2UnKTtcbiAgICAgIGV4cGVjdChtb2NrU3RkZXJyKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChleHBlY3Quc3RyaW5nQ29udGFpbmluZygnZGVidWcgbWVzc2FnZVxcbicpKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3RyYWNlIG1lc3NhZ2VzIG9ubHkgc2hvdyBhdCB0cmFjZSBsZXZlbCcsICgpID0+IHtcbiAgICAgIHNldExvZ0xldmVsKExvZ0xldmVsLkRFQlVHKTtcbiAgICAgIHRyYWNlKCd0cmFjZSBtZXNzYWdlJyk7XG4gICAgICBleHBlY3QobW9ja1N0ZGVycikubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcblxuICAgICAgc2V0TG9nTGV2ZWwoTG9nTGV2ZWwuVFJBQ0UpO1xuICAgICAgdHJhY2UoJ3RyYWNlIG1lc3NhZ2UnKTtcbiAgICAgIGV4cGVjdChtb2NrU3RkZXJyKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChleHBlY3Quc3RyaW5nQ29udGFpbmluZygndHJhY2UgbWVzc2FnZVxcbicpKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ21lc3NhZ2UgZm9ybWF0dGluZycsICgpID0+IHtcbiAgICB0ZXN0KCdmb3JtYXRzIG1lc3NhZ2VzIHdpdGggbXVsdGlwbGUgYXJndW1lbnRzJywgKCkgPT4ge1xuICAgICAgcHJpbnQoJ1ZhbHVlOiAlZCwgU3RyaW5nOiAlcycsIDQyLCAndGVzdCcpO1xuICAgICAgZXhwZWN0KG1vY2tTdGRlcnIpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKGV4cGVjdC5zdHJpbmdDb250YWluaW5nKCdWYWx1ZTogNDIsIFN0cmluZzogdGVzdFxcbicpKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2hhbmRsZXMgcHJlZml4IGNvcnJlY3RseScsICgpID0+IHtcbiAgICAgIGNvbnN0IHByZWZpeGVkTG9nID0gcHJlZml4KCdQUkVGSVgnKTtcbiAgICAgIHByZWZpeGVkTG9nKCd0ZXN0IG1lc3NhZ2UnKTtcbiAgICAgIGV4cGVjdChtb2NrU3RkZXJyKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChleHBlY3Quc3RyaW5nQ29udGFpbmluZygnUFJFRklYIHRlc3QgbWVzc2FnZVxcbicpKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2hhbmRsZXMgY3VzdG9tIHN0eWxlcycsICgpID0+IHtcbiAgICAgIHN1Y2Nlc3MoJ3N1Y2Nlc3MgbWVzc2FnZScpO1xuICAgICAgLy8gTm90ZTogYWN0dWFsIHN0eWxpbmcgd2lsbCBkZXBlbmQgb24gY2hhbGssIGJ1dCB3ZSBjYW4gdmVyaWZ5IHRoZSBtZXNzYWdlIGlzIHRoZXJlXG4gICAgICBleHBlY3QobW9ja1N0ZGVycikudG9IYXZlQmVlbkNhbGxlZFdpdGgoZXhwZWN0LnN0cmluZ0NvbnRhaW5pbmcoJ3N1Y2Nlc3MgbWVzc2FnZVxcbicpKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2NvcmtlZCBsb2dnaW5nJywgKCkgPT4ge1xuICAgIHRlc3QoJ2J1ZmZlcnMgbWVzc2FnZXMgd2hlbiBjb3JrZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCB3aXRoQ29ya2VkTG9nZ2luZyhhc3luYyAoKSA9PiB7XG4gICAgICAgIHByaW50KCdtZXNzYWdlIDEnKTtcbiAgICAgICAgcHJpbnQoJ21lc3NhZ2UgMicpO1xuICAgICAgICBleHBlY3QobW9ja1N0ZGVycikubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QobW9ja1N0ZGVycikudG9IYXZlQmVlbkNhbGxlZFdpdGgoZXhwZWN0LnN0cmluZ0NvbnRhaW5pbmcoJ21lc3NhZ2UgMVxcbicpKTtcbiAgICAgIGV4cGVjdChtb2NrU3RkZXJyKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChleHBlY3Quc3RyaW5nQ29udGFpbmluZygnbWVzc2FnZSAyXFxuJykpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnaGFuZGxlcyBuZXN0ZWQgY29ya2luZyBjb3JyZWN0bHknLCBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCB3aXRoQ29ya2VkTG9nZ2luZyhhc3luYyAoKSA9PiB7XG4gICAgICAgIHByaW50KCdvdXRlciAxJyk7XG4gICAgICAgIGF3YWl0IHdpdGhDb3JrZWRMb2dnaW5nKGFzeW5jICgpID0+IHtcbiAgICAgICAgICBwcmludCgnaW5uZXInKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHByaW50KCdvdXRlciAyJyk7XG4gICAgICAgIGV4cGVjdChtb2NrU3RkZXJyKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChtb2NrU3RkZXJyKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMyk7XG4gICAgICBleHBlY3QobW9ja1N0ZGVycikudG9IYXZlQmVlbkNhbGxlZFdpdGgoZXhwZWN0LnN0cmluZ0NvbnRhaW5pbmcoJ291dGVyIDFcXG4nKSk7XG4gICAgICBleHBlY3QobW9ja1N0ZGVycikudG9IYXZlQmVlbkNhbGxlZFdpdGgoZXhwZWN0LnN0cmluZ0NvbnRhaW5pbmcoJ2lubmVyXFxuJykpO1xuICAgICAgZXhwZWN0KG1vY2tTdGRlcnIpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKGV4cGVjdC5zdHJpbmdDb250YWluaW5nKCdvdXRlciAyXFxuJykpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgndGltZXN0YW1wIGFuZCBwcmVmaXggaGFuZGxpbmcnLCAoKSA9PiB7XG4gICAgdGVzdCgnY29tYmluZXMgdGltZXN0YW1wIGFuZCBwcmVmaXggY29ycmVjdGx5JywgKCkgPT4ge1xuICAgICAgbG9nKHtcbiAgICAgICAgbGV2ZWw6IExvZ0xldmVsLklORk8sXG4gICAgICAgIG1lc3NhZ2U6ICd0ZXN0IG1lc3NhZ2UnLFxuICAgICAgICB0aW1lc3RhbXA6IHRydWUsXG4gICAgICAgIHByZWZpeDogJ1BSRUZJWCcsXG4gICAgICB9KTtcbiAgICAgIGV4cGVjdChtb2NrU3RkZXJyKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChcbiAgICAgICAgZXhwZWN0LnN0cmluZ01hdGNoaW5nKC9QUkVGSVggXFxbXFxkezJ9OlxcZHsyfTpcXGR7Mn1cXF0gdGVzdCBtZXNzYWdlXFxuLyksXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19