@aws-solutions-constructs/core 2.0.0-rc.2 → 2.0.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.
@@ -12,17 +12,13 @@
12
12
  * and limitations under the License.
13
13
  */
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.addCfnNagS3BucketNotificationRulesToSuppress = exports.createAlbLoggingBucket = exports.createLoggingBucket = exports.applySecureBucketPolicy = exports.buildS3Bucket = void 0;
15
+ exports.addCfnNagS3BucketNotificationRulesToSuppress = exports.buildS3Bucket = exports.createAlbLoggingBucket = exports.createLoggingBucket = exports.applySecureBucketPolicy = void 0;
16
16
  const s3 = require("aws-cdk-lib/aws-s3");
17
17
  const s3_bucket_defaults_1 = require("./s3-bucket-defaults");
18
18
  const utils_1 = require("./utils");
19
19
  const aws_iam_1 = require("aws-cdk-lib/aws-iam");
20
20
  const aws_s3_1 = require("aws-cdk-lib/aws-s3");
21
21
  const aws_cdk_lib_1 = require("aws-cdk-lib");
22
- function buildS3Bucket(scope, props, bucketId) {
23
- return s3BucketWithLogging(scope, props.bucketProps, bucketId, props.loggingBucketProps);
24
- }
25
- exports.buildS3Bucket = buildS3Bucket;
26
22
  function applySecureBucketPolicy(s3Bucket) {
27
23
  // Apply bucket policy to enforce encryption of data in transit
28
24
  s3Bucket.addToResourcePolicy(new aws_iam_1.PolicyStatement({
@@ -80,7 +76,8 @@ function createAlbLoggingBucket(scope, bucketId, loggingBucketProps) {
80
76
  return loggingBucket;
81
77
  }
82
78
  exports.createAlbLoggingBucket = createAlbLoggingBucket;
83
- function s3BucketWithLogging(scope, s3BucketProps, bucketId, userLoggingBucketProps) {
79
+ function buildS3Bucket(scope, props, bucketId) {
80
+ var _a, _b, _c;
84
81
  /** Default Life Cycle policy to transition older versions to Glacier after 90 days */
85
82
  const lifecycleRules = [{
86
83
  noncurrentVersionTransitions: [{
@@ -89,47 +86,38 @@ function s3BucketWithLogging(scope, s3BucketProps, bucketId, userLoggingBucketPr
89
86
  }]
90
87
  }];
91
88
  // Create the Application Bucket
92
- let bucketprops;
89
+ let customBucketProps;
93
90
  let loggingBucket;
94
91
  const _bucketId = bucketId ? bucketId + 'S3Bucket' : 'S3Bucket';
95
92
  const _loggingBucketId = bucketId ? bucketId + 'S3LoggingBucket' : 'S3LoggingBucket';
96
- if (s3BucketProps === null || s3BucketProps === void 0 ? void 0 : s3BucketProps.serverAccessLogsBucket) {
97
- // Attach the Default Life Cycle policy ONLY IF the versioning is ENABLED
98
- if (s3BucketProps.versioned === undefined || s3BucketProps.versioned) {
99
- bucketprops = s3_bucket_defaults_1.DefaultS3Props(undefined, lifecycleRules);
100
- }
101
- else {
102
- bucketprops = s3_bucket_defaults_1.DefaultS3Props();
103
- }
104
- }
105
- else {
93
+ // If logging S3 access logs is enabled/undefined and an existing bucket object is not provided
94
+ if (props.logS3AccessLogs !== false && !((_a = props.bucketProps) === null || _a === void 0 ? void 0 : _a.serverAccessLogsBucket)) {
106
95
  // Create the Logging Bucket
107
- let loggingBucketProps;
108
- if (userLoggingBucketProps) { // User provided logging bucket props
109
- loggingBucketProps = utils_1.overrideProps(s3_bucket_defaults_1.DefaultS3Props(), userLoggingBucketProps);
110
- }
111
- else if (s3BucketProps === null || s3BucketProps === void 0 ? void 0 : s3BucketProps.removalPolicy) { // Deletes logging bucket only if it is empty
112
- loggingBucketProps = utils_1.overrideProps(s3_bucket_defaults_1.DefaultS3Props(), { removalPolicy: s3BucketProps.removalPolicy });
96
+ let loggingBucketProps = s3_bucket_defaults_1.DefaultS3Props();
97
+ if (props.loggingBucketProps) {
98
+ // User provided logging bucket props
99
+ loggingBucketProps = utils_1.overrideProps(loggingBucketProps, props.loggingBucketProps);
113
100
  }
114
- else { // Default S3 bucket props
115
- loggingBucketProps = s3_bucket_defaults_1.DefaultS3Props();
101
+ else if ((_b = props.bucketProps) === null || _b === void 0 ? void 0 : _b.removalPolicy) {
102
+ // If the client explicitly specified a removal policy for the main bucket,
103
+ // then replicate that policy on the logging bucket
104
+ loggingBucketProps = utils_1.overrideProps(loggingBucketProps, { removalPolicy: props.bucketProps.removalPolicy });
116
105
  }
117
106
  loggingBucket = createLoggingBucket(scope, _loggingBucketId, loggingBucketProps);
118
- // Attach the Default Life Cycle policy ONLY IF the versioning is ENABLED
119
- if ((s3BucketProps === null || s3BucketProps === void 0 ? void 0 : s3BucketProps.versioned) === undefined || s3BucketProps.versioned) {
120
- bucketprops = s3_bucket_defaults_1.DefaultS3Props(loggingBucket, lifecycleRules);
121
- }
122
- else {
123
- bucketprops = s3_bucket_defaults_1.DefaultS3Props(loggingBucket);
124
- }
125
107
  }
126
- if (s3BucketProps) {
127
- bucketprops = utils_1.overrideProps(bucketprops, s3BucketProps);
108
+ // Attach the Default Life Cycle policy ONLY IF the versioning is ENABLED
109
+ if (((_c = props.bucketProps) === null || _c === void 0 ? void 0 : _c.versioned) === undefined || props.bucketProps.versioned) {
110
+ customBucketProps = s3_bucket_defaults_1.DefaultS3Props(loggingBucket, lifecycleRules);
128
111
  }
129
- const s3Bucket = new s3.Bucket(scope, _bucketId, bucketprops);
112
+ else {
113
+ customBucketProps = s3_bucket_defaults_1.DefaultS3Props(loggingBucket);
114
+ }
115
+ customBucketProps = props.bucketProps ? utils_1.overrideProps(customBucketProps, props.bucketProps) : customBucketProps;
116
+ const s3Bucket = new s3.Bucket(scope, _bucketId, customBucketProps);
130
117
  applySecureBucketPolicy(s3Bucket);
131
118
  return [s3Bucket, loggingBucket];
132
119
  }
120
+ exports.buildS3Bucket = buildS3Bucket;
133
121
  function addCfnNagS3BucketNotificationRulesToSuppress(stackRoot, logicalId) {
134
122
  const notificationsResourceHandler = stackRoot.node.tryFindChild(logicalId);
135
123
  const notificationsResourceHandlerRoleRole = notificationsResourceHandler.node.findChild('Role');
@@ -160,4 +148,4 @@ function addCfnNagS3BucketNotificationRulesToSuppress(stackRoot, logicalId) {
160
148
  ]);
161
149
  }
162
150
  exports.addCfnNagS3BucketNotificationRulesToSuppress = addCfnNagS3BucketNotificationRulesToSuppress;
163
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiczMtYnVja2V0LWhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInMzLWJ1Y2tldC1oZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7OztHQVdHOzs7QUFJSCx5Q0FBeUM7QUFFekMsNkRBQXNEO0FBQ3RELG1DQUE2RDtBQUM3RCxpREFBNEU7QUFDNUUsK0NBQWtEO0FBQ2xELDZDQUF1QztBQVl2QyxTQUFnQixhQUFhLENBQUMsS0FBZ0IsRUFBRSxLQUF5QixFQUFFLFFBQWlCO0lBQzFGLE9BQU8sbUJBQW1CLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0FBQzNGLENBQUM7QUFGRCxzQ0FFQztBQUVELFNBQWdCLHVCQUF1QixDQUFDLFFBQW1CO0lBRXpELCtEQUErRDtJQUUvRCxRQUFRLENBQUMsbUJBQW1CLENBQzFCLElBQUkseUJBQWUsQ0FBQztRQUNsQixHQUFHLEVBQUUsV0FBVztRQUNoQixTQUFTLEVBQUU7WUFDVCxHQUFHLFFBQVEsQ0FBQyxTQUFTLElBQUk7WUFDekIsR0FBRyxRQUFRLENBQUMsU0FBUyxFQUFFO1NBQ3hCO1FBQ0QsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDO1FBQ2QsVUFBVSxFQUFFLENBQUMsSUFBSSxzQkFBWSxFQUFFLENBQUM7UUFDaEMsTUFBTSxFQUFFLGdCQUFNLENBQUMsSUFBSTtRQUNuQixVQUFVLEVBQ1Y7WUFDRSxJQUFJLEVBQUU7Z0JBQ0oscUJBQXFCLEVBQUUsT0FBTzthQUMvQjtTQUNGO0tBQ0YsQ0FBQyxDQUNILENBQUM7QUFDSixDQUFDO0FBdEJELDBEQXNCQztBQUVELFNBQWdCLG1CQUFtQixDQUFDLEtBQWdCLEVBQ2xELFFBQWdCLEVBQ2hCLGtCQUFrQztJQUVsQyw0QkFBNEI7SUFDNUIsTUFBTSxhQUFhLEdBQWMsSUFBSSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssRUFB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Q0FBb0MsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBZSxDQUFDO0lBRWxJLDRDQUE0QztJQUM1QyxNQUFNLFVBQVUsR0FBRyw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBdUIsQ0FBQztJQUNqRywyQkFBbUIsQ0FBQyxVQUFVLEVBQUU7UUFDOUI7WUFDRSxFQUFFLEVBQUUsS0FBSztZQUNULE1BQU0sRUFBRSxvTUFBb007U0FDN007UUFDRDtZQUNFLEVBQUUsRUFBRSxLQUFLO1lBQ1QsTUFBTSxFQUFFLGlGQUFpRjtTQUMxRjtRQUNEO1lBQ0UsRUFBRSxFQUFFLEtBQUs7WUFDVCxNQUFNLEVBQUUsaUVBQWlFO1NBQzFFO0tBQ0YsQ0FBQyxDQUFDO0lBRUgsNENBQTRDO0lBQzVDLE1BQU0sY0FBYyxHQUFHLHNDQUFzQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFrQixDQUFDO0lBQzFHLDJCQUFtQixDQUFDLGNBQWMsRUFBRTtRQUNsQztZQUNFLEVBQUUsRUFBRSxLQUFLO1lBQ1QsTUFBTSxFQUFFLGtHQUFrRztTQUMzRztLQUNGLENBQUMsQ0FBQztBQUNMLENBQUM7QUE5QkQsb0dBOEJDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiAgQ29weXJpZ2h0IDIwMjEgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKS4gWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuICogIHdpdGggdGhlIExpY2Vuc2UuIEEgY29weSBvZiB0aGUgTGljZW5zZSBpcyBsb2NhdGVkIGF0XG4gKlxuICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiAgb3IgaW4gdGhlICdsaWNlbnNlJyBmaWxlIGFjY29tcGFueWluZyB0aGlzIGZpbGUuIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAnQVMgSVMnIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVNcbiAqICBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9uc1xuICogIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgKiBhcyBpYW0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgKiBhcyBsYW1iZGEgZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYSc7XG5pbXBvcnQgKiBhcyBzMyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMnO1xuaW1wb3J0ICogYXMgY2RrIGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IERlZmF1bHRTM1Byb3BzIH0gZnJvbSAnLi9zMy1idWNrZXQtZGVmYXVsdHMnO1xuaW1wb3J0IHsgb3ZlcnJpZGVQcm9wcywgYWRkQ2ZuU3VwcHJlc3NSdWxlcyB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgUG9saWN5U3RhdGVtZW50LCBFZmZlY3QsIEFueVByaW5jaXBhbCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0IHsgU3RvcmFnZUNsYXNzIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzJztcbmltcG9ydCB7IER1cmF0aW9uIH0gZnJvbSAnYXdzLWNkay1saWInO1xuLy8gTm90ZTogVG8gZW5zdXJlIENES3YyIGNvbXBhdGliaWxpdHksIGtlZXAgdGhlIGltcG9ydCBzdGF0ZW1lbnQgZm9yIENvbnN0cnVjdCBzZXBhcmF0ZVxuaW1wb3J0IHsgIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRTM0J1Y2tldFByb3BzIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBidWNrZXRQcm9wcz86IHMzLkJ1Y2tldFByb3BzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBsb2dnaW5nQnVja2V0UHJvcHM/OiBzMy5CdWNrZXRQcm9wc1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRTM0J1Y2tldChzY29wZTogQ29uc3RydWN0LCBwcm9wczogQnVpbGRTM0J1Y2tldFByb3BzLCBidWNrZXRJZD86IHN0cmluZyk6IFtzMy5CdWNrZXQsIHMzLkJ1Y2tldD9dIHtcbiAgcmV0dXJuIHMzQnVja2V0V2l0aExvZ2dpbmcoc2NvcGUsIHByb3BzLmJ1Y2tldFByb3BzLCBidWNrZXRJZCwgcHJvcHMubG9nZ2luZ0J1Y2tldFByb3BzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5U2VjdXJlQnVja2V0UG9saWN5KHMzQnVja2V0OiBzMy5CdWNrZXQpOiB2b2lkIHtcblxuICAvLyBBcHBseSBidWNrZXQgcG9saWN5IHRvIGVuZm9yY2UgZW5jcnlwdGlvbiBvZiBkYXRhIGluIHRyYW5zaXRcblxuICBzM0J1Y2tldC5hZGRUb1Jlc291cmNlUG9saWN5KFxuICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgc2lkOiAnSHR0cHNPbmx5JyxcbiAgICAgIHJlc291cmNlczogW1xuICAgICAgICBgJHtzM0J1Y2tldC5idWNrZXRBcm59LypgLFxuICAgICAgICBgJHtzM0J1Y2tldC5idWNrZXRBcm59YFxuICAgICAgXSxcbiAgICAgIGFjdGlvbnM6IFsnKiddLFxuICAgICAgcHJpbmNpcGFsczogW25ldyBBbnlQcmluY2lwYWwoKV0sXG4gICAgICBlZmZlY3Q6IEVmZmVjdC5ERU5ZLFxuICAgICAgY29uZGl0aW9uczpcbiAgICAgIHtcbiAgICAgICAgQm9vbDoge1xuICAgICAgICAgICdhd3M6U2VjdXJlVHJhbnNwb3J0JzogJ2ZhbHNlJ1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUxvZ2dpbmdCdWNrZXQoc2NvcGU6IENvbnN0cnVjdCxcbiAgYnVja2V0SWQ6IHN0cmluZyxcbiAgbG9nZ2luZ0J1Y2tldFByb3BzOiBzMy5CdWNrZXRQcm9wcyk6IHMzLkJ1Y2tldCB7XG5cbiAgLy8gQ3JlYXRlIHRoZSBMb2dnaW5nIEJ1Y2tldFxuICBjb25zdCBsb2dnaW5nQnVja2V0OiBzMy5CdWNrZXQgPSBuZXcgczMuQnVja2V0KHNjb3BlLCBidWNrZXRJZCwgbG9nZ2luZ0J1Y2tldFByb3BzKTtcblxuICBhcHBseVNlY3VyZUJ1Y2tldFBvbGljeShsb2dnaW5nQnVja2V0KTtcblxuICAvLyBFeHRyYWN0IHRoZSBDZm5CdWNrZXQgZnJvbSB0aGUgbG9nZ2luZ0J1Y2tldFxuICBjb25zdCBsb2dnaW5nQnVja2V0UmVzb3VyY2UgPSBsb2dnaW5nQnVja2V0Lm5vZGUuZmluZENoaWxkKCdSZXNvdXJjZScpIGFzIHMzLkNmbkJ1Y2tldDtcblxuICAvLyBPdmVycmlkZSBhY2Nlc3NDb250cm9sIGNvbmZpZ3VyYXRpb24gYW5kIGFkZCBtZXRhZGF0YSBmb3IgdGhlIGxvZ2dpbmcgYnVja2V0XG4gIGxvZ2dpbmdCdWNrZXRSZXNvdXJjZS5hZGRQcm9wZXJ0eU92ZXJyaWRlKCdBY2Nlc3NDb250cm9sJywgJ0xvZ0RlbGl2ZXJ5V3JpdGUnKTtcblxuICAvLyBSZW1vdmUgdGhlIGRlZmF1bHQgTGlmZWN5Y2xlQ29uZmlndXJhdGlvbiBmb3IgdGhlIExvZ2dpbmcgQnVja2V0XG4gIGxvZ2dpbmdCdWNrZXRSZXNvdXJjZS5hZGRQcm9wZXJ0eURlbGV0aW9uT3ZlcnJpZGUoJ0xpZmVjeWNsZUNvbmZpZ3VyYXRpb24uUnVsZXMnKTtcblxuICBsZXQgX3JlYXNvbiA9IFwiVGhpcyBTMyBidWNrZXQgaXMgdXNlZCBhcyB0aGUgYWNjZXNzIGxvZ2dpbmcgYnVja2V0IGZvciBhbm90aGVyIGJ1Y2tldFwiO1xuXG4gIGlmIChidWNrZXRJZCA9PT0gJ0Nsb3VkZnJvbnRMb2dnaW5nQnVja2V0Jykge1xuICAgIF9yZWFzb24gPSBcIlRoaXMgUzMgYnVja2V0IGlzIHVzZWQgYXMgdGhlIGFjY2VzcyBsb2dnaW5nIGJ1Y2tldCBmb3IgQ2xvdWRGcm9udCBEaXN0cmlidXRpb25cIjtcbiAgfVxuXG4gIGFkZENmblN1cHByZXNzUnVsZXMobG9nZ2luZ0J1Y2tldFJlc291cmNlLCBbXG4gICAge1xuICAgICAgaWQ6ICdXMzUnLFxuICAgICAgcmVhc29uOiBfcmVhc29uXG4gICAgfVxuICBdKTtcblxuICByZXR1cm4gbG9nZ2luZ0J1Y2tldDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFsYkxvZ2dpbmdCdWNrZXQoc2NvcGU6IENvbnN0cnVjdCxcbiAgYnVja2V0SWQ6IHN0cmluZyxcbiAgbG9nZ2luZ0J1Y2tldFByb3BzOiBzMy5CdWNrZXRQcm9wcyk6IHMzLkJ1Y2tldCB7XG5cbiAgLy8gQ3JlYXRlIHRoZSBMb2dnaW5nIEJ1Y2tldFxuICBjb25zdCBsb2dnaW5nQnVja2V0OiBzMy5CdWNrZXQgPSBuZXcgczMuQnVja2V0KHNjb3BlLCBidWNrZXRJZCwgbG9nZ2luZ0J1Y2tldFByb3BzKTtcblxuICBhcHBseVNlY3VyZUJ1Y2tldFBvbGljeShsb2dnaW5nQnVja2V0KTtcblxuICAvLyBFeHRyYWN0IHRoZSBDZm5CdWNrZXQgZnJvbSB0aGUgbG9nZ2luZ0J1Y2tldFxuICBjb25zdCBsb2dnaW5nQnVja2V0UmVzb3VyY2UgPSBsb2dnaW5nQnVja2V0Lm5vZGUuZmluZENoaWxkKCdSZXNvdXJjZScpIGFzIHMzLkNmbkJ1Y2tldDtcblxuICBhZGRDZm5TdXBwcmVzc1J1bGVzKGxvZ2dpbmdCdWNrZXRSZXNvdXJjZSwgW1xuICAgIHtcbiAgICAgIGlkOiAnVzM1JyxcbiAgICAgIHJlYXNvbjogXCJUaGlzIGlzIGEgbG9nIGJ1Y2tldCBmb3IgYW4gQXBwbGljYXRpb24gTG9hZCBCYWxhbmNlclwiXG4gICAgfVxuICBdKTtcblxuICByZXR1cm4gbG9nZ2luZ0J1Y2tldDtcbn1cblxuZnVuY3Rpb24gczNCdWNrZXRXaXRoTG9nZ2luZyhzY29wZTogQ29uc3RydWN0LFxuICBzM0J1Y2tldFByb3BzPzogczMuQnVja2V0UHJvcHMsXG4gIGJ1Y2tldElkPzogc3RyaW5nLFxuICB1c2VyTG9nZ2luZ0J1Y2tldFByb3BzPzogczMuQnVja2V0UHJvcHMpOiBbczMuQnVja2V0LCBzMy5CdWNrZXQ/XSB7XG5cbiAgLyoqIERlZmF1bHQgTGlmZSBDeWNsZSBwb2xpY3kgdG8gdHJhbnNpdGlvbiBvbGRlciB2ZXJzaW9ucyB0byBHbGFjaWVyIGFmdGVyIDkwIGRheXMgKi9cbiAgY29uc3QgbGlmZWN5Y2xlUnVsZXM6IHMzLkxpZmVjeWNsZVJ1bGVbXSA9IFt7XG4gICAgbm9uY3VycmVudFZlcnNpb25UcmFuc2l0aW9uczogW3tcbiAgICAgIHN0b3JhZ2VDbGFzczogU3RvcmFnZUNsYXNzLkdMQUNJRVIsXG4gICAgICB0cmFuc2l0aW9uQWZ0ZXI6IER1cmF0aW9uLmRheXMoOTApXG4gICAgfV1cbiAgfV07XG5cbiAgLy8gQ3JlYXRlIHRoZSBBcHBsaWNhdGlvbiBCdWNrZXRcbiAgbGV0IGJ1Y2tldHByb3BzOiBzMy5CdWNrZXRQcm9wcztcbiAgbGV0IGxvZ2dpbmdCdWNrZXQ7XG4gIGNvbnN0IF9idWNrZXRJZCA9IGJ1Y2tldElkID8gYnVja2V0SWQgKyAnUzNCdWNrZXQnIDogJ1MzQnVja2V0JztcbiAgY29uc3QgX2xvZ2dpbmdCdWNrZXRJZCA9IGJ1Y2tldElkID8gYnVja2V0SWQgKyAnUzNMb2dnaW5nQnVja2V0JyA6ICdTM0xvZ2dpbmdCdWNrZXQnO1xuXG4gIGlmIChzM0J1Y2tldFByb3BzPy5zZXJ2ZXJBY2Nlc3NMb2dzQnVja2V0KSB7XG4gICAgLy8gQXR0YWNoIHRoZSBEZWZhdWx0IExpZmUgQ3ljbGUgcG9saWN5IE9OTFkgSUYgdGhlIHZlcnNpb25pbmcgaXMgRU5BQkxFRFxuICAgIGlmIChzM0J1Y2tldFByb3BzLnZlcnNpb25lZCA9PT0gdW5kZWZpbmVkIHx8IHMzQnVja2V0UHJvcHMudmVyc2lvbmVkKSB7XG4gICAgICBidWNrZXRwcm9wcyA9IERlZmF1bHRTM1Byb3BzKHVuZGVmaW5lZCwgbGlmZWN5Y2xlUnVsZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBidWNrZXRwcm9wcyA9IERlZmF1bHRTM1Byb3BzKCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIENyZWF0ZSB0aGUgTG9nZ2luZyBCdWNrZXRcbiAgICBsZXQgbG9nZ2luZ0J1Y2tldFByb3BzO1xuXG4gICAgaWYgKHVzZXJMb2dnaW5nQnVja2V0UHJvcHMpIHsgLy8gVXNlciBwcm92aWRlZCBsb2dnaW5nIGJ1Y2tldCBwcm9wc1xuICAgICAgbG9nZ2luZ0J1Y2tldFByb3BzID0gb3ZlcnJpZGVQcm9wcyhEZWZhdWx0UzNQcm9wcygpLCB1c2VyTG9nZ2luZ0J1Y2tldFByb3BzKTtcbiAgICB9IGVsc2UgaWYgKHMzQnVja2V0UHJvcHM/LnJlbW92YWxQb2xpY3kpIHsgLy8gRGVsZXRlcyBsb2dnaW5nIGJ1Y2tldCBvbmx5IGlmIGl0IGlzIGVtcHR5XG4gICAgICBsb2dnaW5nQnVja2V0UHJvcHMgPSBvdmVycmlkZVByb3BzKERlZmF1bHRTM1Byb3BzKCksIHsgcmVtb3ZhbFBvbGljeTogczNCdWNrZXRQcm9wcy5yZW1vdmFsUG9saWN5IH0pO1xuICAgIH0gZWxzZSB7IC8vIERlZmF1bHQgUzMgYnVja2V0IHByb3BzXG4gICAgICBsb2dnaW5nQnVja2V0UHJvcHMgPSBEZWZhdWx0UzNQcm9wcygpO1xuICAgIH1cblxuICAgIGxvZ2dpbmdCdWNrZXQgPSBjcmVhdGVMb2dnaW5nQnVja2V0KHNjb3BlLCBfbG9nZ2luZ0J1Y2tldElkLCBsb2dnaW5nQnVja2V0UHJvcHMpO1xuXG4gICAgLy8gQXR0YWNoIHRoZSBEZWZhdWx0IExpZmUgQ3ljbGUgcG9saWN5IE9OTFkgSUYgdGhlIHZlcnNpb25pbmcgaXMgRU5BQkxFRFxuICAgIGlmIChzM0J1Y2tldFByb3BzPy52ZXJzaW9uZWQgPT09IHVuZGVmaW5lZCB8fCBzM0J1Y2tldFByb3BzLnZlcnNpb25lZCkge1xuICAgICAgYnVja2V0cHJvcHMgPSBEZWZhdWx0UzNQcm9wcyhsb2dnaW5nQnVja2V0LCBsaWZlY3ljbGVSdWxlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJ1Y2tldHByb3BzID0gRGVmYXVsdFMzUHJvcHMobG9nZ2luZ0J1Y2tldCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHMzQnVja2V0UHJvcHMpIHtcbiAgICBidWNrZXRwcm9wcyA9IG92ZXJyaWRlUHJvcHMoYnVja2V0cHJvcHMsIHMzQnVja2V0UHJvcHMpO1xuICB9XG5cbiAgY29uc3QgczNCdWNrZXQ6IHMzLkJ1Y2tldCA9IG5ldyBzMy5CdWNrZXQoc2NvcGUsIF9idWNrZXRJZCwgYnVja2V0cHJvcHMpO1xuXG4gIGFwcGx5U2VjdXJlQnVja2V0UG9saWN5KHMzQnVja2V0KTtcblxuICByZXR1cm4gW3MzQnVja2V0LCBsb2dnaW5nQnVja2V0XTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZENmbk5hZ1MzQnVja2V0Tm90aWZpY2F0aW9uUnVsZXNUb1N1cHByZXNzKHN0YWNrUm9vdDogY2RrLlN0YWNrLCBsb2dpY2FsSWQ6IHN0cmluZykge1xuICBjb25zdCBub3RpZmljYXRpb25zUmVzb3VyY2VIYW5kbGVyID0gc3RhY2tSb290Lm5vZGUudHJ5RmluZENoaWxkKGxvZ2ljYWxJZCkgYXMgbGFtYmRhLkZ1bmN0aW9uO1xuICBjb25zdCBub3RpZmljYXRpb25zUmVzb3VyY2VIYW5kbGVyUm9sZVJvbGUgPSBub3RpZmljYXRpb25zUmVzb3VyY2VIYW5kbGVyLm5vZGUuZmluZENoaWxkKCdSb2xlJykgYXMgaWFtLlJvbGU7XG4gIGNvbnN0IG5vdGlmaWNhdGlvbnNSZXNvdXJjZUhhbmRsZXJSb2xlUG9saWN5ID0gbm90aWZpY2F0aW9uc1Jlc291cmNlSGFuZGxlclJvbGVSb2xlLm5vZGUuZmluZENoaWxkKCdEZWZhdWx0UG9saWN5JykgYXMgaWFtLlBvbGljeTtcblxuICAvLyBFeHRyYWN0IHRoZSBDZm5GdW5jdGlvbiBmcm9tIHRoZSBGdW5jdGlvblxuICBjb25zdCBmblJlc291cmNlID0gbm90aWZpY2F0aW9uc1Jlc291cmNlSGFuZGxlci5ub2RlLmZpbmRDaGlsZCgnUmVzb3VyY2UnKSBhcyBsYW1iZGEuQ2ZuRnVuY3Rpb247XG4gIGFkZENmblN1cHByZXNzUnVsZXMoZm5SZXNvdXJjZSwgW1xuICAgIHtcbiAgICAgIGlkOiAnVzU4JyxcbiAgICAgIHJlYXNvbjogYExhbWJkYSBmdW5jdGlvbnMgaGFzIHRoZSByZXF1aXJlZCBwZXJtaXNzaW9uIHRvIHdyaXRlIENsb3VkV2F0Y2ggTG9ncy4gSXQgdXNlcyBjdXN0b20gcG9saWN5IGluc3RlYWQgb2YgYXJuOmF3czppYW06OmF3czpwb2xpY3kvc2VydmljZS1yb2xlL0FXU0xhbWJkYUJhc2ljRXhlY3V0aW9uUm9sZSB3aXRoIHRpZ2h0ZXIgcGVybWlzc2lvbnMuYFxuICAgIH0sXG4gICAge1xuICAgICAgaWQ6ICdXODknLFxuICAgICAgcmVhc29uOiBgVGhpcyBpcyBub3QgYSBydWxlIGZvciB0aGUgZ2VuZXJhbCBjYXNlLCBqdXN0IGZvciBzcGVjaWZpYyB1c2UgY2FzZXMvaW5kdXN0cmllc2BcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiAnVzkyJyxcbiAgICAgIHJlYXNvbjogYEltcG9zc2libGUgZm9yIHVzIHRvIGRlZmluZSB0aGUgY29ycmVjdCBjb25jdXJyZW5jeSBmb3IgY2xpZW50c2BcbiAgICB9XG4gIF0pO1xuXG4gIC8vIEV4dHJhY3QgdGhlIENmblBvbGljeSBmcm9tIHRoZSBpYW0uUG9saWN5XG4gIGNvbnN0IHBvbGljeVJlc291cmNlID0gbm90aWZpY2F0aW9uc1Jlc291cmNlSGFuZGxlclJvbGVQb2xpY3kubm9kZS5maW5kQ2hpbGQoJ1Jlc291cmNlJykgYXMgaWFtLkNmblBvbGljeTtcbiAgYWRkQ2ZuU3VwcHJlc3NSdWxlcyhwb2xpY3lSZXNvdXJjZSwgW1xuICAgIHtcbiAgICAgIGlkOiAnVzEyJyxcbiAgICAgIHJlYXNvbjogYEJ1Y2tldCByZXNvdXJjZSBpcyAnKicgZHVlIHRvIGNpcmN1bGFyIGRlcGVuZGVuY3kgd2l0aCBidWNrZXQgYW5kIHJvbGUgY3JlYXRpb24gYXQgdGhlIHNhbWUgdGltZWBcbiAgICB9XG4gIF0pO1xufVxuIl19
151
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiczMtYnVja2V0LWhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInMzLWJ1Y2tldC1oZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7OztHQVdHOzs7QUFJSCx5Q0FBeUM7QUFFekMsNkRBQXNEO0FBQ3RELG1DQUE2RDtBQUM3RCxpREFBNEU7QUFDNUUsK0NBQWtEO0FBQ2xELDZDQUF1QztBQWN2QyxTQUFnQix1QkFBdUIsQ0FBQyxRQUFtQjtJQUN6RCwrREFBK0Q7SUFDL0QsUUFBUSxDQUFDLG1CQUFtQixDQUMxQixJQUFJLHlCQUFlLENBQUM7UUFDbEIsR0FBRyxFQUFFLFdBQVc7UUFDaEIsU0FBUyxFQUFFO1lBQ1QsR0FBRyxRQUFRLENBQUMsU0FBUyxJQUFJO1lBQ3pCLEdBQUcsUUFBUSxDQUFDLFNBQVMsRUFBRTtTQUN4QjtRQUNELE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQztRQUNkLFVBQVUsRUFBRSxDQUFDLElBQUksc0JBQVksRUFBRSxDQUFDO1FBQ2hDLE1BQU0sRUFBRSxnQkFBTSxDQUFDLElBQUk7UUFDbkIsVUFBVSxFQUNWO1lBQ0UsSUFBSSxFQUFFO2dCQUNKLHFCQUFxQixFQUFFLE9BQU87YUFDL0I7U0FDRjtLQUNGLENBQUMsQ0FDSCxDQUFDO0FBQ0osQ0FBQztBQXBCRCwwREFvQkM7QUFFRCxTQUFnQixtQkFBbUIsQ0FBQyxLQUFnQixFQUNsRCxRQUFnQixFQUNoQixrQkFBa0M7SUFFbEMsNEJBQTRCO0lBQzVCLE1BQU0sYUFBYSxHQUFjLElBQUksRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLGtCQUFrQixDQUFDLENBQUM7SUFFcEYsdUJBQXVCLENBQUMsYUFBYSxDQUFDLENBQUM7SUFFdkMsK0NBQStDO0lBQy9DLE1BQU0scUJBQXFCLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFpQixDQUFDO0lBRXZGLCtFQUErRTtJQUMvRSxxQkFBcUIsQ0FBQyxtQkFBbUIsQ0FBQyxlQUFlLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztJQUUvRSxtRUFBbUU7SUFDbkUscUJBQXFCLENBQUMsMkJBQTJCLENBQUMsOEJBQThCLENBQUMsQ0FBQztJQUVsRixJQUFJLE9BQU8sR0FBRyx3RUFBd0UsQ0FBQztJQUV2RixJQUFJLFFBQVEsS0FBSyx5QkFBeUIsRUFBRTtRQUMxQyxPQUFPLEdBQUcsaUZBQWlGLENBQUM7S0FDN0Y7SUFFRCwyQkFBbUIsQ0FBQyxxQkFBcUIsRUFBRTtRQUN6QztZQUNFLEVBQUUsRUFBRSxLQUFLO1lBQ1QsTUFBTSxFQUFFLE9BQU87U0FDaEI7S0FDRixDQUFDLENBQUM7SUFFSCxPQUFPLGFBQWEsQ0FBQztBQUN2QixDQUFDO0FBaENELGtEQWdDQztBQUVELFNBQWdCLHNCQUFzQixDQUFDLEtBQWdCLEVBQ3JELFFBQWdCLEVBQ2hCLGtCQUFrQztJQUVsQyw0QkFBNEI7SUFDNUIsTUFBTSxhQUFhLEdBQWMsSUFBSSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztJQUVwRix1QkFBdUIsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUV2QywrQ0FBK0M7SUFDL0MsTUFBTSxxQkFBcUIsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQWlCLENBQUM7SUFFdkYsMkJBQW1CLENBQUMscUJBQXFCLEVBQUU7UUFDekM7WUFDRSxFQUFFLEVBQUUsS0FBSztZQUNULE1BQU0sRUFBRSx1REFBdUQ7U0FDaEU7S0FDRixDQUFDLENBQUM7SUFFSCxPQUFPLGFBQWEsQ0FBQztBQUN2QixDQUFDO0FBcEJELHdEQW9CQztBQUVELFNBQWdCLGFBQWEsQ0FBQyxLQUFnQixFQUM1QyxLQUF5QixFQUN6QixRQUFpQjs7SUFFakIsc0ZBQXNGO0lBQ3RGLE1BQU0sY0FBYyxHQUF1QixDQUFDO1lBQzFDLDRCQUE0QixFQUFFLENBQUM7b0JBQzdCLFlBQVksRUFBRSxxQkFBWSxDQUFDLE9BQU87b0JBQ2xDLGVBQWUsRUFBRSxzQkFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7aUJBQ25DLENBQUM7U0FDSCxDQUFDLENBQUM7SUFFSCxnQ0FBZ0M7SUFDaEMsSUFBSSxpQkFBaUMsQ0FBQztJQUN0QyxJQUFJLGFBQWEsQ0FBQztJQUNsQixNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQztJQUNoRSxNQUFNLGdCQUFnQixHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQztJQUVyRiwrRkFBK0Y7SUFDL0YsSUFBSSxLQUFLLENBQUMsZUFBZSxLQUFLLEtBQUssSUFBSSxDQUFDLE9BQUMsS0FBSyxDQUFDLFdBQVcsMENBQUUsc0JBQXNCLENBQUMsRUFBRTtRQUNuRiw0QkFBNEI7UUFDNUIsSUFBSSxrQkFBa0IsR0FBRyxtQ0FBYyxFQUFFLENBQUM7UUFFMUMsSUFBSSxLQUFLLENBQUMsa0JBQWtCLEVBQUU7WUFDNUIscUNBQXFDO1lBQ3JDLGtCQUFrQixHQUFHLHFCQUFhLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUM7U0FDbEY7YUFBTSxVQUFJLEtBQUssQ0FBQyxXQUFXLDBDQUFFLGFBQWEsRUFBRTtZQUMzQywyRUFBMkU7WUFDM0UsbURBQW1EO1lBQ25ELGtCQUFrQixHQUFHLHFCQUFhLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxhQUFhLEVBQUUsS0FBSyxDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDO1NBQzVHO1FBRUQsYUFBYSxHQUFHLG1CQUFtQixDQUFDLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0tBQ2xGO0lBQ0QseUVBQXlFO0lBQ3pFLElBQUksT0FBQSxLQUFLLENBQUMsV0FBVywwQ0FBRSxTQUFTLE1BQUssU0FBUyxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFO1FBQzdFLGlCQUFpQixHQUFHLG1DQUFjLENBQUMsYUFBYSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0tBQ25FO1NBQU07UUFDTCxpQkFBaUIsR0FBRyxtQ0FBYyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0tBQ25EO0lBRUQsaUJBQWlCLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMscUJBQWEsQ0FBQyxpQkFBaUIsRUFBRSxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDO0lBRWhILE1BQU0sUUFBUSxHQUFjLElBQUksRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixDQUFDLENBQUM7SUFFL0UsdUJBQXVCLENBQUMsUUFBUSxDQUFDLENBQUM7SUFFbEMsT0FBTyxDQUFDLFFBQVEsRUFBRSxhQUFhLENBQUMsQ0FBQztBQUNuQyxDQUFDO0FBaERELHNDQWdEQztBQUVELFNBQWdCLDRDQUE0QyxDQUFDLFNBQW9CLEVBQUUsU0FBaUI7SUFDbEcsTUFBTSw0QkFBNEIsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQW9CLENBQUM7SUFDL0YsTUFBTSxvQ0FBb0MsR0FBRyw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBYSxDQUFDO0lBQzdHLE1BQU0sc0NBQXNDLEdBQUcsb0NBQW9DLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQWUsQ0FBQztJQUVsSSw0Q0FBNEM7SUFDNUMsTUFBTSxVQUFVLEdBQUcsNEJBQTRCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQXVCLENBQUM7SUFDakcsMkJBQW1CLENBQUMsVUFBVSxFQUFFO1FBQzlCO1lBQ0UsRUFBRSxFQUFFLEtBQUs7WUFDVCxNQUFNLEVBQUUsb01BQW9NO1NBQzdNO1FBQ0Q7WUFDRSxFQUFFLEVBQUUsS0FBSztZQUNULE1BQU0sRUFBRSxpRkFBaUY7U0FDMUY7UUFDRDtZQUNFLEVBQUUsRUFBRSxLQUFLO1lBQ1QsTUFBTSxFQUFFLGlFQUFpRTtTQUMxRTtLQUNGLENBQUMsQ0FBQztJQUVILDRDQUE0QztJQUM1QyxNQUFNLGNBQWMsR0FBRyxzQ0FBc0MsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBa0IsQ0FBQztJQUMxRywyQkFBbUIsQ0FBQyxjQUFjLEVBQUU7UUFDbEM7WUFDRSxFQUFFLEVBQUUsS0FBSztZQUNULE1BQU0sRUFBRSxrR0FBa0c7U0FDM0c7S0FDRixDQUFDLENBQUM7QUFDTCxDQUFDO0FBOUJELG9HQThCQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogIENvcHlyaWdodCAyMDIxIEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIikuIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2VcbiAqICB3aXRoIHRoZSBMaWNlbnNlLiBBIGNvcHkgb2YgdGhlIExpY2Vuc2UgaXMgbG9jYXRlZCBhdFxuICpcbiAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogIG9yIGluIHRoZSAnbGljZW5zZScgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBmaWxlLiBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gJ0FTIElTJyBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTXG4gKiAgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnNcbiAqICBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0ICogYXMgaWFtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0ICogYXMgbGFtYmRhIGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0ICogYXMgczMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzJztcbmltcG9ydCAqIGFzIGNkayBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBEZWZhdWx0UzNQcm9wcyB9IGZyb20gJy4vczMtYnVja2V0LWRlZmF1bHRzJztcbmltcG9ydCB7IG92ZXJyaWRlUHJvcHMsIGFkZENmblN1cHByZXNzUnVsZXMgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IFBvbGljeVN0YXRlbWVudCwgRWZmZWN0LCBBbnlQcmluY2lwYWwgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IFN0b3JhZ2VDbGFzcyB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMyc7XG5pbXBvcnQgeyBEdXJhdGlvbiB9IGZyb20gJ2F3cy1jZGstbGliJztcbi8vIE5vdGU6IFRvIGVuc3VyZSBDREt2MiBjb21wYXRpYmlsaXR5LCBrZWVwIHRoZSBpbXBvcnQgc3RhdGVtZW50IGZvciBDb25zdHJ1Y3Qgc2VwYXJhdGVcbmltcG9ydCB7ICB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkUzNCdWNrZXRQcm9wcyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgYnVja2V0UHJvcHM/OiBzMy5CdWNrZXRQcm9wcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IGxvZ2dpbmdCdWNrZXRQcm9wcz86IHMzLkJ1Y2tldFByb3BzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgbG9nUzNBY2Nlc3NMb2dzPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5U2VjdXJlQnVja2V0UG9saWN5KHMzQnVja2V0OiBzMy5CdWNrZXQpOiB2b2lkIHtcbiAgLy8gQXBwbHkgYnVja2V0IHBvbGljeSB0byBlbmZvcmNlIGVuY3J5cHRpb24gb2YgZGF0YSBpbiB0cmFuc2l0XG4gIHMzQnVja2V0LmFkZFRvUmVzb3VyY2VQb2xpY3koXG4gICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICBzaWQ6ICdIdHRwc09ubHknLFxuICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgIGAke3MzQnVja2V0LmJ1Y2tldEFybn0vKmAsXG4gICAgICAgIGAke3MzQnVja2V0LmJ1Y2tldEFybn1gXG4gICAgICBdLFxuICAgICAgYWN0aW9uczogWycqJ10sXG4gICAgICBwcmluY2lwYWxzOiBbbmV3IEFueVByaW5jaXBhbCgpXSxcbiAgICAgIGVmZmVjdDogRWZmZWN0LkRFTlksXG4gICAgICBjb25kaXRpb25zOlxuICAgICAge1xuICAgICAgICBCb29sOiB7XG4gICAgICAgICAgJ2F3czpTZWN1cmVUcmFuc3BvcnQnOiAnZmFsc2UnXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTG9nZ2luZ0J1Y2tldChzY29wZTogQ29uc3RydWN0LFxuICBidWNrZXRJZDogc3RyaW5nLFxuICBsb2dnaW5nQnVja2V0UHJvcHM6IHMzLkJ1Y2tldFByb3BzKTogczMuQnVja2V0IHtcblxuICAvLyBDcmVhdGUgdGhlIExvZ2dpbmcgQnVja2V0XG4gIGNvbnN0IGxvZ2dpbmdCdWNrZXQ6IHMzLkJ1Y2tldCA9IG5ldyBzMy5CdWNrZXQoc2NvcGUsIGJ1Y2tldElkLCBsb2dnaW5nQnVja2V0UHJvcHMpO1xuXG4gIGFwcGx5U2VjdXJlQnVja2V0UG9saWN5KGxvZ2dpbmdCdWNrZXQpO1xuXG4gIC8vIEV4dHJhY3QgdGhlIENmbkJ1Y2tldCBmcm9tIHRoZSBsb2dnaW5nQnVja2V0XG4gIGNvbnN0IGxvZ2dpbmdCdWNrZXRSZXNvdXJjZSA9IGxvZ2dpbmdCdWNrZXQubm9kZS5maW5kQ2hpbGQoJ1Jlc291cmNlJykgYXMgczMuQ2ZuQnVja2V0O1xuXG4gIC8vIE92ZXJyaWRlIGFjY2Vzc0NvbnRyb2wgY29uZmlndXJhdGlvbiBhbmQgYWRkIG1ldGFkYXRhIGZvciB0aGUgbG9nZ2luZyBidWNrZXRcbiAgbG9nZ2luZ0J1Y2tldFJlc291cmNlLmFkZFByb3BlcnR5T3ZlcnJpZGUoJ0FjY2Vzc0NvbnRyb2wnLCAnTG9nRGVsaXZlcnlXcml0ZScpO1xuXG4gIC8vIFJlbW92ZSB0aGUgZGVmYXVsdCBMaWZlY3ljbGVDb25maWd1cmF0aW9uIGZvciB0aGUgTG9nZ2luZyBCdWNrZXRcbiAgbG9nZ2luZ0J1Y2tldFJlc291cmNlLmFkZFByb3BlcnR5RGVsZXRpb25PdmVycmlkZSgnTGlmZWN5Y2xlQ29uZmlndXJhdGlvbi5SdWxlcycpO1xuXG4gIGxldCBfcmVhc29uID0gXCJUaGlzIFMzIGJ1Y2tldCBpcyB1c2VkIGFzIHRoZSBhY2Nlc3MgbG9nZ2luZyBidWNrZXQgZm9yIGFub3RoZXIgYnVja2V0XCI7XG5cbiAgaWYgKGJ1Y2tldElkID09PSAnQ2xvdWRmcm9udExvZ2dpbmdCdWNrZXQnKSB7XG4gICAgX3JlYXNvbiA9IFwiVGhpcyBTMyBidWNrZXQgaXMgdXNlZCBhcyB0aGUgYWNjZXNzIGxvZ2dpbmcgYnVja2V0IGZvciBDbG91ZEZyb250IERpc3RyaWJ1dGlvblwiO1xuICB9XG5cbiAgYWRkQ2ZuU3VwcHJlc3NSdWxlcyhsb2dnaW5nQnVja2V0UmVzb3VyY2UsIFtcbiAgICB7XG4gICAgICBpZDogJ1czNScsXG4gICAgICByZWFzb246IF9yZWFzb25cbiAgICB9XG4gIF0pO1xuXG4gIHJldHVybiBsb2dnaW5nQnVja2V0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQWxiTG9nZ2luZ0J1Y2tldChzY29wZTogQ29uc3RydWN0LFxuICBidWNrZXRJZDogc3RyaW5nLFxuICBsb2dnaW5nQnVja2V0UHJvcHM6IHMzLkJ1Y2tldFByb3BzKTogczMuQnVja2V0IHtcblxuICAvLyBDcmVhdGUgdGhlIExvZ2dpbmcgQnVja2V0XG4gIGNvbnN0IGxvZ2dpbmdCdWNrZXQ6IHMzLkJ1Y2tldCA9IG5ldyBzMy5CdWNrZXQoc2NvcGUsIGJ1Y2tldElkLCBsb2dnaW5nQnVja2V0UHJvcHMpO1xuXG4gIGFwcGx5U2VjdXJlQnVja2V0UG9saWN5KGxvZ2dpbmdCdWNrZXQpO1xuXG4gIC8vIEV4dHJhY3QgdGhlIENmbkJ1Y2tldCBmcm9tIHRoZSBsb2dnaW5nQnVja2V0XG4gIGNvbnN0IGxvZ2dpbmdCdWNrZXRSZXNvdXJjZSA9IGxvZ2dpbmdCdWNrZXQubm9kZS5maW5kQ2hpbGQoJ1Jlc291cmNlJykgYXMgczMuQ2ZuQnVja2V0O1xuXG4gIGFkZENmblN1cHByZXNzUnVsZXMobG9nZ2luZ0J1Y2tldFJlc291cmNlLCBbXG4gICAge1xuICAgICAgaWQ6ICdXMzUnLFxuICAgICAgcmVhc29uOiBcIlRoaXMgaXMgYSBsb2cgYnVja2V0IGZvciBhbiBBcHBsaWNhdGlvbiBMb2FkIEJhbGFuY2VyXCJcbiAgICB9XG4gIF0pO1xuXG4gIHJldHVybiBsb2dnaW5nQnVja2V0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRTM0J1Y2tldChzY29wZTogQ29uc3RydWN0LFxuICBwcm9wczogQnVpbGRTM0J1Y2tldFByb3BzLFxuICBidWNrZXRJZD86IHN0cmluZyk6IFtzMy5CdWNrZXQsIHMzLkJ1Y2tldD9dIHtcblxuICAvKiogRGVmYXVsdCBMaWZlIEN5Y2xlIHBvbGljeSB0byB0cmFuc2l0aW9uIG9sZGVyIHZlcnNpb25zIHRvIEdsYWNpZXIgYWZ0ZXIgOTAgZGF5cyAqL1xuICBjb25zdCBsaWZlY3ljbGVSdWxlczogczMuTGlmZWN5Y2xlUnVsZVtdID0gW3tcbiAgICBub25jdXJyZW50VmVyc2lvblRyYW5zaXRpb25zOiBbe1xuICAgICAgc3RvcmFnZUNsYXNzOiBTdG9yYWdlQ2xhc3MuR0xBQ0lFUixcbiAgICAgIHRyYW5zaXRpb25BZnRlcjogRHVyYXRpb24uZGF5cyg5MClcbiAgICB9XVxuICB9XTtcblxuICAvLyBDcmVhdGUgdGhlIEFwcGxpY2F0aW9uIEJ1Y2tldFxuICBsZXQgY3VzdG9tQnVja2V0UHJvcHM6IHMzLkJ1Y2tldFByb3BzO1xuICBsZXQgbG9nZ2luZ0J1Y2tldDtcbiAgY29uc3QgX2J1Y2tldElkID0gYnVja2V0SWQgPyBidWNrZXRJZCArICdTM0J1Y2tldCcgOiAnUzNCdWNrZXQnO1xuICBjb25zdCBfbG9nZ2luZ0J1Y2tldElkID0gYnVja2V0SWQgPyBidWNrZXRJZCArICdTM0xvZ2dpbmdCdWNrZXQnIDogJ1MzTG9nZ2luZ0J1Y2tldCc7XG5cbiAgLy8gSWYgbG9nZ2luZyBTMyBhY2Nlc3MgbG9ncyBpcyBlbmFibGVkL3VuZGVmaW5lZCBhbmQgYW4gZXhpc3RpbmcgYnVja2V0IG9iamVjdCBpcyBub3QgcHJvdmlkZWRcbiAgaWYgKHByb3BzLmxvZ1MzQWNjZXNzTG9ncyAhPT0gZmFsc2UgJiYgIShwcm9wcy5idWNrZXRQcm9wcz8uc2VydmVyQWNjZXNzTG9nc0J1Y2tldCkpIHtcbiAgICAvLyBDcmVhdGUgdGhlIExvZ2dpbmcgQnVja2V0XG4gICAgbGV0IGxvZ2dpbmdCdWNrZXRQcm9wcyA9IERlZmF1bHRTM1Byb3BzKCk7XG5cbiAgICBpZiAocHJvcHMubG9nZ2luZ0J1Y2tldFByb3BzKSB7XG4gICAgICAvLyBVc2VyIHByb3ZpZGVkIGxvZ2dpbmcgYnVja2V0IHByb3BzXG4gICAgICBsb2dnaW5nQnVja2V0UHJvcHMgPSBvdmVycmlkZVByb3BzKGxvZ2dpbmdCdWNrZXRQcm9wcywgcHJvcHMubG9nZ2luZ0J1Y2tldFByb3BzKTtcbiAgICB9IGVsc2UgaWYgKHByb3BzLmJ1Y2tldFByb3BzPy5yZW1vdmFsUG9saWN5KSB7XG4gICAgICAvLyBJZiB0aGUgY2xpZW50IGV4cGxpY2l0bHkgc3BlY2lmaWVkIGEgcmVtb3ZhbCBwb2xpY3kgZm9yIHRoZSBtYWluIGJ1Y2tldCxcbiAgICAgIC8vIHRoZW4gcmVwbGljYXRlIHRoYXQgcG9saWN5IG9uIHRoZSBsb2dnaW5nIGJ1Y2tldFxuICAgICAgbG9nZ2luZ0J1Y2tldFByb3BzID0gb3ZlcnJpZGVQcm9wcyhsb2dnaW5nQnVja2V0UHJvcHMsIHsgcmVtb3ZhbFBvbGljeTogcHJvcHMuYnVja2V0UHJvcHMucmVtb3ZhbFBvbGljeSB9KTtcbiAgICB9XG5cbiAgICBsb2dnaW5nQnVja2V0ID0gY3JlYXRlTG9nZ2luZ0J1Y2tldChzY29wZSwgX2xvZ2dpbmdCdWNrZXRJZCwgbG9nZ2luZ0J1Y2tldFByb3BzKTtcbiAgfVxuICAvLyBBdHRhY2ggdGhlIERlZmF1bHQgTGlmZSBDeWNsZSBwb2xpY3kgT05MWSBJRiB0aGUgdmVyc2lvbmluZyBpcyBFTkFCTEVEXG4gIGlmIChwcm9wcy5idWNrZXRQcm9wcz8udmVyc2lvbmVkID09PSB1bmRlZmluZWQgfHwgcHJvcHMuYnVja2V0UHJvcHMudmVyc2lvbmVkKSB7XG4gICAgY3VzdG9tQnVja2V0UHJvcHMgPSBEZWZhdWx0UzNQcm9wcyhsb2dnaW5nQnVja2V0LCBsaWZlY3ljbGVSdWxlcyk7XG4gIH0gZWxzZSB7XG4gICAgY3VzdG9tQnVja2V0UHJvcHMgPSBEZWZhdWx0UzNQcm9wcyhsb2dnaW5nQnVja2V0KTtcbiAgfVxuXG4gIGN1c3RvbUJ1Y2tldFByb3BzID0gcHJvcHMuYnVja2V0UHJvcHMgPyBvdmVycmlkZVByb3BzKGN1c3RvbUJ1Y2tldFByb3BzLCBwcm9wcy5idWNrZXRQcm9wcykgOiBjdXN0b21CdWNrZXRQcm9wcztcblxuICBjb25zdCBzM0J1Y2tldDogczMuQnVja2V0ID0gbmV3IHMzLkJ1Y2tldChzY29wZSwgX2J1Y2tldElkLCBjdXN0b21CdWNrZXRQcm9wcyk7XG5cbiAgYXBwbHlTZWN1cmVCdWNrZXRQb2xpY3koczNCdWNrZXQpO1xuXG4gIHJldHVybiBbczNCdWNrZXQsIGxvZ2dpbmdCdWNrZXRdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWRkQ2ZuTmFnUzNCdWNrZXROb3RpZmljYXRpb25SdWxlc1RvU3VwcHJlc3Moc3RhY2tSb290OiBjZGsuU3RhY2ssIGxvZ2ljYWxJZDogc3RyaW5nKSB7XG4gIGNvbnN0IG5vdGlmaWNhdGlvbnNSZXNvdXJjZUhhbmRsZXIgPSBzdGFja1Jvb3Qubm9kZS50cnlGaW5kQ2hpbGQobG9naWNhbElkKSBhcyBsYW1iZGEuRnVuY3Rpb247XG4gIGNvbnN0IG5vdGlmaWNhdGlvbnNSZXNvdXJjZUhhbmRsZXJSb2xlUm9sZSA9IG5vdGlmaWNhdGlvbnNSZXNvdXJjZUhhbmRsZXIubm9kZS5maW5kQ2hpbGQoJ1JvbGUnKSBhcyBpYW0uUm9sZTtcbiAgY29uc3Qgbm90aWZpY2F0aW9uc1Jlc291cmNlSGFuZGxlclJvbGVQb2xpY3kgPSBub3RpZmljYXRpb25zUmVzb3VyY2VIYW5kbGVyUm9sZVJvbGUubm9kZS5maW5kQ2hpbGQoJ0RlZmF1bHRQb2xpY3knKSBhcyBpYW0uUG9saWN5O1xuXG4gIC8vIEV4dHJhY3QgdGhlIENmbkZ1bmN0aW9uIGZyb20gdGhlIEZ1bmN0aW9uXG4gIGNvbnN0IGZuUmVzb3VyY2UgPSBub3RpZmljYXRpb25zUmVzb3VyY2VIYW5kbGVyLm5vZGUuZmluZENoaWxkKCdSZXNvdXJjZScpIGFzIGxhbWJkYS5DZm5GdW5jdGlvbjtcbiAgYWRkQ2ZuU3VwcHJlc3NSdWxlcyhmblJlc291cmNlLCBbXG4gICAge1xuICAgICAgaWQ6ICdXNTgnLFxuICAgICAgcmVhc29uOiBgTGFtYmRhIGZ1bmN0aW9ucyBoYXMgdGhlIHJlcXVpcmVkIHBlcm1pc3Npb24gdG8gd3JpdGUgQ2xvdWRXYXRjaCBMb2dzLiBJdCB1c2VzIGN1c3RvbSBwb2xpY3kgaW5zdGVhZCBvZiBhcm46YXdzOmlhbTo6YXdzOnBvbGljeS9zZXJ2aWNlLXJvbGUvQVdTTGFtYmRhQmFzaWNFeGVjdXRpb25Sb2xlIHdpdGggdGlnaHRlciBwZXJtaXNzaW9ucy5gXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogJ1c4OScsXG4gICAgICByZWFzb246IGBUaGlzIGlzIG5vdCBhIHJ1bGUgZm9yIHRoZSBnZW5lcmFsIGNhc2UsIGp1c3QgZm9yIHNwZWNpZmljIHVzZSBjYXNlcy9pbmR1c3RyaWVzYFxuICAgIH0sXG4gICAge1xuICAgICAgaWQ6ICdXOTInLFxuICAgICAgcmVhc29uOiBgSW1wb3NzaWJsZSBmb3IgdXMgdG8gZGVmaW5lIHRoZSBjb3JyZWN0IGNvbmN1cnJlbmN5IGZvciBjbGllbnRzYFxuICAgIH1cbiAgXSk7XG5cbiAgLy8gRXh0cmFjdCB0aGUgQ2ZuUG9saWN5IGZyb20gdGhlIGlhbS5Qb2xpY3lcbiAgY29uc3QgcG9saWN5UmVzb3VyY2UgPSBub3RpZmljYXRpb25zUmVzb3VyY2VIYW5kbGVyUm9sZVBvbGljeS5ub2RlLmZpbmRDaGlsZCgnUmVzb3VyY2UnKSBhcyBpYW0uQ2ZuUG9saWN5O1xuICBhZGRDZm5TdXBwcmVzc1J1bGVzKHBvbGljeVJlc291cmNlLCBbXG4gICAge1xuICAgICAgaWQ6ICdXMTInLFxuICAgICAgcmVhc29uOiBgQnVja2V0IHJlc291cmNlIGlzICcqJyBkdWUgdG8gY2lyY3VsYXIgZGVwZW5kZW5jeSB3aXRoIGJ1Y2tldCBhbmQgcm9sZSBjcmVhdGlvbiBhdCB0aGUgc2FtZSB0aW1lYFxuICAgIH1cbiAgXSk7XG59XG4iXX0=
@@ -3,8 +3,22 @@
3
3
  // ignored, since we can never get coverage for them.
4
4
  // grab a reference to node's real process object right away
5
5
  var process = global.process
6
+
7
+ const processOk = function (process) {
8
+ return process &&
9
+ typeof process === 'object' &&
10
+ typeof process.removeListener === 'function' &&
11
+ typeof process.emit === 'function' &&
12
+ typeof process.reallyExit === 'function' &&
13
+ typeof process.listeners === 'function' &&
14
+ typeof process.kill === 'function' &&
15
+ typeof process.pid === 'number' &&
16
+ typeof process.on === 'function'
17
+ }
18
+
6
19
  // some kind of non-node environment, just no-op
7
- if (typeof process !== 'object' || !process) {
20
+ /* istanbul ignore if */
21
+ if (!processOk(process)) {
8
22
  module.exports = function () {}
9
23
  } else {
10
24
  var assert = require('assert')
@@ -36,7 +50,8 @@ if (typeof process !== 'object' || !process) {
36
50
  }
37
51
 
38
52
  module.exports = function (cb, opts) {
39
- if (global.process !== process) {
53
+ /* istanbul ignore if */
54
+ if (!processOk(global.process)) {
40
55
  return
41
56
  }
42
57
  assert.equal(typeof cb, 'function', 'a callback must be provided for exit handler')
@@ -63,7 +78,7 @@ if (typeof process !== 'object' || !process) {
63
78
  }
64
79
 
65
80
  var unload = function unload () {
66
- if (!loaded || global.process !== process) {
81
+ if (!loaded || !processOk(global.process)) {
67
82
  return
68
83
  }
69
84
  loaded = false
@@ -80,6 +95,7 @@ if (typeof process !== 'object' || !process) {
80
95
  module.exports.unload = unload
81
96
 
82
97
  var emit = function emit (event, code, signal) {
98
+ /* istanbul ignore if */
83
99
  if (emitter.emitted[event]) {
84
100
  return
85
101
  }
@@ -91,7 +107,8 @@ if (typeof process !== 'object' || !process) {
91
107
  var sigListeners = {}
92
108
  signals.forEach(function (sig) {
93
109
  sigListeners[sig] = function listener () {
94
- if (process !== global.process) {
110
+ /* istanbul ignore if */
111
+ if (!processOk(global.process)) {
95
112
  return
96
113
  }
97
114
  // If there are no other listeners, an exit is coming!
@@ -110,6 +127,7 @@ if (typeof process !== 'object' || !process) {
110
127
  // so use a supported signal instead
111
128
  sig = 'SIGINT'
112
129
  }
130
+ /* istanbul ignore next */
113
131
  process.kill(process.pid, sig)
114
132
  }
115
133
  }
@@ -122,7 +140,7 @@ if (typeof process !== 'object' || !process) {
122
140
  var loaded = false
123
141
 
124
142
  var load = function load () {
125
- if (loaded || process !== global.process) {
143
+ if (loaded || !processOk(global.process)) {
126
144
  return
127
145
  }
128
146
  loaded = true
@@ -149,10 +167,11 @@ if (typeof process !== 'object' || !process) {
149
167
 
150
168
  var originalProcessReallyExit = process.reallyExit
151
169
  var processReallyExit = function processReallyExit (code) {
152
- if (process !== global.process) {
170
+ /* istanbul ignore if */
171
+ if (!processOk(global.process)) {
153
172
  return
154
173
  }
155
- process.exitCode = code || 0
174
+ process.exitCode = code || /* istanbul ignore next */ 0
156
175
  emit('exit', process.exitCode, null)
157
176
  /* istanbul ignore next */
158
177
  emit('afterexit', process.exitCode, null)
@@ -162,14 +181,17 @@ if (typeof process !== 'object' || !process) {
162
181
 
163
182
  var originalProcessEmit = process.emit
164
183
  var processEmit = function processEmit (ev, arg) {
165
- if (ev === 'exit' && process === global.process) {
184
+ if (ev === 'exit' && processOk(global.process)) {
185
+ /* istanbul ignore else */
166
186
  if (arg !== undefined) {
167
187
  process.exitCode = arg
168
188
  }
169
189
  var ret = originalProcessEmit.apply(this, arguments)
190
+ /* istanbul ignore next */
170
191
  emit('exit', process.exitCode, null)
171
192
  /* istanbul ignore next */
172
193
  emit('afterexit', process.exitCode, null)
194
+ /* istanbul ignore next */
173
195
  return ret
174
196
  } else {
175
197
  return originalProcessEmit.apply(this, arguments)
@@ -1,12 +1,14 @@
1
1
  {
2
2
  "name": "signal-exit",
3
- "version": "3.0.5",
3
+ "version": "3.0.6",
4
4
  "description": "when you want to fire an event no matter how a process exits.",
5
5
  "main": "index.js",
6
6
  "scripts": {
7
- "test": "tap --timeout=240 ./test/*.js --cov",
8
- "coverage": "nyc report --reporter=text-lcov | coveralls",
9
- "release": "standard-version"
7
+ "test": "tap",
8
+ "snap": "tap",
9
+ "preversion": "npm test",
10
+ "postversion": "npm publish",
11
+ "prepublishOnly": "git push origin --follow-tags"
10
12
  },
11
13
  "files": [
12
14
  "index.js",
@@ -31,6 +33,6 @@
31
33
  "coveralls": "^3.1.1",
32
34
  "nyc": "^15.1.0",
33
35
  "standard-version": "^9.3.1",
34
- "tap": "^15.0.10"
36
+ "tap": "^15.1.1"
35
37
  }
36
38
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aws-solutions-constructs/core",
3
- "version": "2.0.0-rc.2",
3
+ "version": "2.0.0",
4
4
  "description": "Core CDK Construct for patterns library",
5
5
  "main": "index.js",
6
6
  "types": "index.ts",