construct-hub 0.2.55 → 0.2.59
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/.gitattributes +0 -1
- package/.jsii +78 -11
- package/API.md +44 -0
- package/README.md +7 -0
- package/lib/backend/catalog-builder/catalog-builder.bundle/index.js +1 -1
- package/lib/backend/catalog-builder/catalog-builder.bundle/index.js.map +1 -1
- package/lib/backend/catalog-builder/catalog-builder.lambda.js +2 -2
- package/lib/backend/ingestion/ingestion.bundle/index.js +3 -3
- package/lib/backend/ingestion/ingestion.bundle/index.js.map +1 -1
- package/lib/backend/ingestion/ingestion.lambda.js +4 -4
- package/lib/backend/orchestration/index.js +3 -2
- package/lib/backend/package-stats/package-stats.bundle/index.js +1 -1
- package/lib/backend/package-stats/package-stats.bundle/index.js.map +1 -1
- package/lib/backend/package-stats/package-stats.lambda.js +2 -2
- package/lib/backend/transliterator/transliterator.bundle/index.js +6 -6
- package/lib/backend/transliterator/transliterator.bundle/index.js.map +1 -1
- package/lib/backend/transliterator/transliterator.ecstask.js +2 -2
- package/lib/construct-hub.d.ts +7 -1
- package/lib/construct-hub.js +3 -2
- package/lib/index.d.ts +1 -1
- package/lib/index.js +1 -1
- package/lib/package-sources/code-artifact.js +1 -1
- package/lib/package-sources/npmjs.js +1 -1
- package/lib/package-tag/index.js +2 -2
- package/lib/spdx-license.js +1 -1
- package/lib/webapp/config.d.ts +5 -1
- package/lib/webapp/config.js +2 -1
- package/lib/webapp/index.d.ts +16 -0
- package/lib/webapp/index.js +11 -4
- package/package.json +3 -4
- package/lib/webapp/cache-invalidator/constants.d.ts +0 -4
- package/lib/webapp/cache-invalidator/constants.js +0 -5
- package/lib/webapp/cache-invalidator/handler.bundle/index.js +0 -1404
- package/lib/webapp/cache-invalidator/handler.bundle/index.js.map +0 -7
- package/lib/webapp/cache-invalidator/handler.d.ts +0 -7
- package/lib/webapp/cache-invalidator/handler.js +0 -19
- package/lib/webapp/cache-invalidator/handler.lambda.d.ts +0 -3
- package/lib/webapp/cache-invalidator/handler.lambda.js +0 -42
- package/lib/webapp/cache-invalidator/index.d.ts +0 -34
- package/lib/webapp/cache-invalidator/index.js +0 -57
@@ -1,7 +0,0 @@
|
|
1
|
-
{
|
2
|
-
"version": 3,
|
3
|
-
"sources": ["../../../../node_modules/aws-embedded-metrics/lib/Constants.js", "../../../../node_modules/aws-embedded-metrics/lib/environment/Environments.js", "../../../../node_modules/aws-embedded-metrics/lib/config/EnvironmentConfigurationProvider.js", "../../../../node_modules/aws-embedded-metrics/lib/config/Configuration.js", "../../../../node_modules/aws-embedded-metrics/lib/utils/Logger.js", "../../../../node_modules/aws-embedded-metrics/lib/logger/MetricValues.js", "../../../../node_modules/aws-embedded-metrics/lib/logger/MetricsContext.js", "../../../../node_modules/aws-embedded-metrics/lib/logger/MetricsLogger.js", "../../../../node_modules/aws-embedded-metrics/lib/serializers/LogSerializer.js", "../../../../node_modules/aws-embedded-metrics/lib/sinks/ConsoleSink.js", "../../../../node_modules/aws-embedded-metrics/lib/sinks/connections/TcpClient.js", "../../../../node_modules/aws-embedded-metrics/lib/sinks/connections/UdpClient.js", "../../../../node_modules/aws-embedded-metrics/lib/sinks/AgentSink.js", "../../../../node_modules/aws-embedded-metrics/lib/environment/DefaultEnvironment.js", "../../../../node_modules/aws-embedded-metrics/lib/utils/Fetch.js", "../../../../node_modules/aws-embedded-metrics/lib/environment/ECSEnvironment.js", "../../../../node_modules/aws-embedded-metrics/lib/environment/EC2Environment.js", "../../../../node_modules/aws-embedded-metrics/lib/environment/LambdaEnvironment.js", "../../../../node_modules/aws-embedded-metrics/lib/environment/LocalEnvironment.js", "../../../../node_modules/aws-embedded-metrics/lib/environment/EnvironmentDetector.js", "../../../../node_modules/aws-embedded-metrics/lib/logger/MetricsLoggerFactory.js", "../../../../node_modules/aws-embedded-metrics/lib/logger/MetricScope.js", "../../../../node_modules/aws-embedded-metrics/lib/logger/Unit.js", "../../../../node_modules/aws-embedded-metrics/lib/index.js", "../../../../src/webapp/cache-invalidator/handler.lambda.ts", "../../../../src/backend/shared/env.lambda-shared.ts", "../../../../src/webapp/cache-invalidator/constants.ts"],
|
4
|
-
"sourcesContent": ["\"use strict\";\n/*\n * Copyright 2019 Amazon.com, Inc. or its affiliates.\n * Licensed under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Constants;\n(function (Constants) {\n Constants[Constants[\"MAX_DIMENSIONS\"] = 9] = \"MAX_DIMENSIONS\";\n Constants[\"DEFAULT_NAMESPACE\"] = \"aws-embedded-metrics\";\n Constants[Constants[\"MAX_METRICS_PER_EVENT\"] = 100] = \"MAX_METRICS_PER_EVENT\";\n Constants[\"DEFAULT_AGENT_HOST\"] = \"0.0.0.0\";\n Constants[Constants[\"DEFAULT_AGENT_PORT\"] = 25888] = \"DEFAULT_AGENT_PORT\";\n})(Constants = exports.Constants || (exports.Constants = {}));\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Environments;\n(function (Environments) {\n Environments[\"Local\"] = \"Local\";\n Environments[\"Lambda\"] = \"Lambda\";\n Environments[\"Agent\"] = \"Agent\";\n Environments[\"EC2\"] = \"EC2\";\n Environments[\"ECS\"] = \"ECS\";\n Environments[\"Unknown\"] = \"\";\n})(Environments || (Environments = {}));\nexports.default = Environments;\n", "\"use strict\";\n/*\n * Copyright 2019 Amazon.com, Inc. or its affiliates.\n * Licensed under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst Constants_1 = require(\"../Constants\");\nconst Environments_1 = require(\"../environment/Environments\");\nconst ENV_VAR_PREFIX = 'AWS_EMF';\nvar ConfigKeys;\n(function (ConfigKeys) {\n ConfigKeys[\"LOG_GROUP_NAME\"] = \"LOG_GROUP_NAME\";\n ConfigKeys[\"LOG_STREAM_NAME\"] = \"LOG_STREAM_NAME\";\n ConfigKeys[\"ENABLE_DEBUG_LOGGING\"] = \"ENABLE_DEBUG_LOGGING\";\n ConfigKeys[\"SERVICE_NAME\"] = \"SERVICE_NAME\";\n ConfigKeys[\"SERVICE_TYPE\"] = \"SERVICE_TYPE\";\n ConfigKeys[\"AGENT_ENDPOINT\"] = \"AGENT_ENDPOINT\";\n ConfigKeys[\"ENVIRONMENT_OVERRIDE\"] = \"ENVIRONMENT\";\n ConfigKeys[\"NAMESPACE\"] = \"NAMESPACE\";\n})(ConfigKeys || (ConfigKeys = {}));\nclass EnvironmentConfigurationProvider {\n getConfiguration() {\n return {\n agentEndpoint: this.getEnvVariable(ConfigKeys.AGENT_ENDPOINT),\n debuggingLoggingEnabled: this.tryGetEnvVariableAsBoolean(ConfigKeys.ENABLE_DEBUG_LOGGING, false),\n logGroupName: this.getEnvVariable(ConfigKeys.LOG_GROUP_NAME),\n logStreamName: this.getEnvVariable(ConfigKeys.LOG_STREAM_NAME),\n serviceName: this.getEnvVariable(ConfigKeys.SERVICE_NAME) || this.getEnvVariableWithoutPrefix(ConfigKeys.SERVICE_NAME),\n serviceType: this.getEnvVariable(ConfigKeys.SERVICE_TYPE) || this.getEnvVariableWithoutPrefix(ConfigKeys.SERVICE_TYPE),\n environmentOverride: this.getEnvironmentOverride(),\n namespace: this.getEnvVariable(ConfigKeys.NAMESPACE) || Constants_1.Constants.DEFAULT_NAMESPACE,\n };\n }\n getEnvVariableWithoutPrefix(configKey) {\n return process.env[configKey];\n }\n getEnvVariable(configKey) {\n return process.env[`${ENV_VAR_PREFIX}_${configKey}`];\n }\n tryGetEnvVariableAsBoolean(configKey, fallback) {\n const configValue = this.getEnvVariable(configKey);\n return !configValue ? fallback : configValue.toLowerCase() === 'true';\n }\n getEnvironmentOverride() {\n const overrideValue = this.getEnvVariable(ConfigKeys.ENVIRONMENT_OVERRIDE);\n const environment = Environments_1.default[overrideValue];\n if (environment === undefined) {\n return Environments_1.default.Unknown;\n }\n return environment;\n }\n}\nexports.EnvironmentConfigurationProvider = EnvironmentConfigurationProvider;\n", "\"use strict\";\n/*\n * Copyright 2019 Amazon.com, Inc. or its affiliates.\n * Licensed under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst EnvironmentConfigurationProvider_1 = require(\"./EnvironmentConfigurationProvider\");\nconst Configuration = new EnvironmentConfigurationProvider_1.EnvironmentConfigurationProvider().getConfiguration();\nexports.default = Configuration;\n", "\"use strict\";\n/*\n * Copyright 2019 Amazon.com, Inc. or its affiliates.\n * Licensed under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst Configuration_1 = require(\"../config/Configuration\");\nconst LOG = (...args) => {\n if (Configuration_1.default.debuggingLoggingEnabled) {\n console.log(...args);\n }\n};\nexports.LOG = LOG;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/*\n * Copyright 2019 Amazon.com, Inc. or its affiliates.\n * Licensed under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nclass MetricValues {\n constructor(value, unit) {\n this.values = [value];\n this.unit = unit || 'None';\n }\n /**\n * Appends the provided value to the current metric\n * @param value\n */\n addValue(value) {\n this.values.push(value);\n }\n}\nexports.MetricValues = MetricValues;\n", "\"use strict\";\n/*\n * Copyright 2019 Amazon.com, Inc. or its affiliates.\n * Licensed under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst Configuration_1 = require(\"../config/Configuration\");\nconst Logger_1 = require(\"../utils/Logger\");\nconst MetricValues_1 = require(\"./MetricValues\");\nclass MetricsContext {\n /**\n * Constructor used to create child instances.\n * You should not use this constructor directly.\n * Instead, use createCopyWithContext() or empty().\n *\n * The reason for this is to avoid unexpected behavior when creating\n * MetricsContexts with defaultDimensions and existing dimensions.\n *\n * @param properties\n * @param dimensions\n */\n constructor(namespace, properties, dimensions, defaultDimensions, shouldUseDefaultDimensions, timestamp) {\n this.metrics = new Map();\n this.meta = {};\n this.shouldUseDefaultDimensions = true;\n this.namespace = namespace || Configuration_1.default.namespace;\n this.properties = properties || {};\n this.dimensions = dimensions || [];\n this.timestamp = timestamp;\n this.meta.Timestamp = MetricsContext.resolveMetaTimestamp(timestamp);\n this.defaultDimensions = defaultDimensions || {};\n if (shouldUseDefaultDimensions != undefined) {\n this.shouldUseDefaultDimensions = shouldUseDefaultDimensions;\n }\n }\n /**\n * Use this to create a new, empty context.\n */\n static empty() {\n return new MetricsContext();\n }\n static resolveMetaTimestamp(timestamp) {\n if (timestamp instanceof Date) {\n return timestamp.getTime();\n }\n else if (timestamp) {\n return timestamp;\n }\n else {\n return Date.now();\n }\n }\n setNamespace(value) {\n this.namespace = value;\n }\n setProperty(key, value) {\n this.properties[key] = value;\n }\n setTimestamp(timestamp) {\n this.timestamp = timestamp;\n this.meta.Timestamp = MetricsContext.resolveMetaTimestamp(timestamp);\n }\n /**\n * Sets default dimensions for the Context.\n * A dimension set will be created with just the default dimensions\n * and all calls to putDimensions will be prepended with the defaults.\n */\n setDefaultDimensions(dimensions) {\n Logger_1.LOG(`Received default dimensions`, dimensions);\n this.defaultDimensions = dimensions;\n }\n /**\n * Adds a new set of dimensions. Any time a new dimensions set\n * is added, the set is first prepended by the default dimensions.\n *\n * @param dimensions\n */\n putDimensions(incomingDimensionSet) {\n if (this.dimensions.length === 0) {\n this.dimensions.push(incomingDimensionSet);\n return;\n }\n for (let i = 0; i < this.dimensions.length; i++) {\n const existingDimensionSet = this.dimensions[i];\n // check for duplicate dimensions when putting\n // this is an O(n^2) operation, but since we never expect to have more than\n // 10 dimensions, this is acceptable for almost all cases.\n // This makes re-using loggers much easier.\n const existingDimensionSetKeys = Object.keys(existingDimensionSet);\n const incomingDimensionSetKeys = Object.keys(incomingDimensionSet);\n if (existingDimensionSetKeys.length !== incomingDimensionSetKeys.length) {\n this.dimensions.push(incomingDimensionSet);\n return;\n }\n for (let j = 0; j < existingDimensionSetKeys.length; j++) {\n if (!incomingDimensionSetKeys.includes(existingDimensionSetKeys[j])) {\n // we're done now because we know that the dimensions keys are not identical\n this.dimensions.push(incomingDimensionSet);\n return;\n }\n }\n }\n }\n /**\n * Overwrite all dimensions.\n *\n * @param dimensionSets\n */\n setDimensions(dimensionSets) {\n this.shouldUseDefaultDimensions = false;\n this.dimensions = dimensionSets;\n }\n /**\n * Get the current dimensions.\n */\n getDimensions() {\n // caller has explicitly called setDimensions\n if (this.shouldUseDefaultDimensions === false) {\n return this.dimensions;\n }\n // if there are no default dimensions, return the custom dimensions\n if (Object.keys(this.defaultDimensions).length === 0) {\n return this.dimensions;\n }\n // if default dimensions have been provided, but no custom dimensions, use the defaults\n if (this.dimensions.length === 0) {\n return [this.defaultDimensions];\n }\n // otherwise, merge the dimensions\n // we do this on the read path because default dimensions\n // may get updated asynchronously by environment detection\n return this.dimensions.map(custom => {\n return Object.assign(Object.assign({}, this.defaultDimensions), custom);\n });\n }\n putMetric(key, value, unit) {\n const currentMetric = this.metrics.get(key);\n if (currentMetric) {\n currentMetric.addValue(value);\n }\n else {\n this.metrics.set(key, new MetricValues_1.MetricValues(value, unit));\n }\n }\n /**\n * Creates an independently flushable context.\n */\n createCopyWithContext() {\n return new MetricsContext(this.namespace, Object.assign({}, this.properties), Object.assign([], this.dimensions), this.defaultDimensions, this.shouldUseDefaultDimensions, this.timestamp);\n }\n}\nexports.MetricsContext = MetricsContext;\n", "\"use strict\";\n/*\n * Copyright 2019 Amazon.com, Inc. or its affiliates.\n * Licensed under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst Configuration_1 = require(\"../config/Configuration\");\nconst MetricsContext_1 = require(\"./MetricsContext\");\n/**\n * An async metrics logger.\n * Use this interface to publish logs to CloudWatch Logs\n * and extract metrics to CloudWatch Metrics asynchronously.\n */\nclass MetricsLogger {\n constructor(resolveEnvironment, context) {\n this.configureContextForEnvironment = (context, environment) => {\n const defaultDimensions = {\n // LogGroup name will entirely depend on the environment since there\n // are some cases where the LogGroup cannot be configured (e.g. Lambda)\n LogGroup: environment.getLogGroupName(),\n ServiceName: Configuration_1.default.serviceName || environment.getName(),\n ServiceType: Configuration_1.default.serviceType || environment.getType(),\n };\n context.setDefaultDimensions(defaultDimensions);\n environment.configureContext(context);\n };\n this.resolveEnvironment = resolveEnvironment;\n this.context = context || MetricsContext_1.MetricsContext.empty();\n }\n /**\n * Flushes the current context state to the configured sink.\n */\n flush() {\n return __awaiter(this, void 0, void 0, function* () {\n // resolve the environment and get the sink\n // MOST of the time this will run synchonrously\n // This only runs asynchronously if executing for the\n // first time in a non-lambda environment\n const environment = yield this.resolveEnvironment();\n this.configureContextForEnvironment(this.context, environment);\n const sink = environment.getSink();\n // accept and reset the context\n yield sink.accept(this.context);\n this.context = this.context.createCopyWithContext();\n });\n }\n /**\n * Set a property on the published metrics.\n * This is stored in the emitted log data and you are not\n * charged for this data by CloudWatch Metrics.\n * These values can be values that are useful for searching on,\n * but have too high cardinality to emit as dimensions to\n * CloudWatch Metrics.\n *\n * @param key Property name\n * @param value Property value\n */\n setProperty(key, value) {\n this.context.setProperty(key, value);\n return this;\n }\n /**\n * Adds a dimension.\n * This is generally a low cardinality key-value pair that is part of the metric identity.\n * CloudWatch treats each unique combination of dimensions as a separate metric, even if the metrics have the same metric name.\n *\n * @param dimension\n * @param value\n * @see [CloudWatch Dimensions](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_concepts.html#Dimension)\n */\n putDimensions(dimensions) {\n this.context.putDimensions(dimensions);\n return this;\n }\n /**\n * Overwrite all dimensions on this MetricsLogger instance.\n *\n * @param dimensionSets\n * @see [CloudWatch Dimensions](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_concepts.html#Dimension)\n */\n setDimensions(...dimensionSets) {\n this.context.setDimensions(dimensionSets);\n return this;\n }\n /**\n * Put a metric value.\n * This value will be emitted to CloudWatch Metrics asyncronously and does not contribute to your\n * account TPS limits. The value will also be available in your CloudWatch Logs\n * @param key\n * @param value\n * @param unit\n */\n putMetric(key, value, unit) {\n this.context.putMetric(key, value, unit);\n return this;\n }\n /**\n * Set the CloudWatch namespace that metrics should be published to.\n * @param value\n */\n setNamespace(value) {\n this.context.setNamespace(value);\n return this;\n }\n /**\n * Set the timestamp of metrics emitted in this context.\n *\n * If not set, the timestamp will default to new Date() at the point\n * the context is constructed.\n *\n * If set, timestamp will preserved across calls to flush().\n *\n * @param timestamp\n */\n setTimestamp(timestamp) {\n this.context.setTimestamp(timestamp);\n return this;\n }\n /**\n * Creates a new logger using the same contextual data as\n * the previous logger. This allows you to flush the instances\n * independently.\n */\n new() {\n return new MetricsLogger(this.resolveEnvironment, this.context.createCopyWithContext());\n }\n}\nexports.MetricsLogger = MetricsLogger;\n", "\"use strict\";\n/*\n * Copyright 2019 Amazon.com, Inc. or its affiliates.\n * Licensed under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst Constants_1 = require(\"../Constants\");\n/**\n * Serializes the provided context to the CWL Structured\n * Logs format with Embedded Metric Filters.\n */\nclass LogSerializer {\n /**\n * Retrieve the current context as a JSON string\n */\n serialize(context) {\n const dimensionKeys = [];\n let dimensionProperties = {};\n context.getDimensions().forEach(d => {\n // we can only take the first 9 defined dimensions\n // the reason we do this in the serializer is because\n // it is possible that other sinks or formats can\n // support more dimensions\n // in the future it may make sense to introduce a higher-order\n // representation for sink-specific validations\n const keys = Object.keys(d).slice(0, Constants_1.Constants.MAX_DIMENSIONS);\n dimensionKeys.push(keys);\n dimensionProperties = Object.assign(Object.assign({}, dimensionProperties), d);\n });\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const createBody = () => {\n return Object.assign(Object.assign(Object.assign({}, dimensionProperties), context.properties), { _aws: Object.assign(Object.assign({}, context.meta), { CloudWatchMetrics: [\n {\n Dimensions: dimensionKeys,\n Metrics: [],\n Namespace: context.namespace,\n },\n ] }) });\n };\n const eventBatches = [];\n let currentBody = createBody();\n const currentMetricsInBody = () => currentBody._aws.CloudWatchMetrics[0].Metrics.length;\n const shouldSerialize = () => currentMetricsInBody() === Constants_1.Constants.MAX_METRICS_PER_EVENT;\n // converts the body to JSON and pushes it into the batches\n const serializeCurrentBody = () => {\n eventBatches.push(JSON.stringify(currentBody));\n currentBody = createBody();\n };\n for (const [key, metric] of context.metrics) {\n // if there is only one metric value, unwrap it to make querying easier\n const metricValue = metric.values.length === 1 ? metric.values[0] : metric.values;\n currentBody[key] = metricValue;\n currentBody._aws.CloudWatchMetrics[0].Metrics.push({ Name: key, Unit: metric.unit });\n if (shouldSerialize()) {\n serializeCurrentBody();\n }\n }\n if (eventBatches.length === 0 || currentMetricsInBody() > 0) {\n serializeCurrentBody();\n }\n return eventBatches;\n }\n}\nexports.LogSerializer = LogSerializer;\n", "\"use strict\";\n/*\n * Copyright 2019 Amazon.com, Inc. or its affiliates.\n * Licensed under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst LogSerializer_1 = require(\"../serializers/LogSerializer\");\n/**\n * A sink that flushes log data to stdout.\n * This is the preferred sink for Lambda functions.\n */\nclass ConsoleSink {\n constructor(serializer) {\n this.name = 'ConsoleSink';\n this.serializer = serializer || new LogSerializer_1.LogSerializer();\n }\n accept(context) {\n // tslint:disable-next-line\n const events = this.serializer.serialize(context);\n events.forEach(event => console.log(event));\n return Promise.resolve();\n }\n}\nexports.ConsoleSink = ConsoleSink;\n", "\"use strict\";\n/*\n * Copyright 2019 Amazon.com, Inc. or its affiliates.\n * Licensed under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst net = require(\"net\");\nconst Logger_1 = require(\"../../utils/Logger\");\nclass TcpClient {\n constructor(endpoint) {\n this.endpoint = endpoint;\n this.socket = new net.Socket({ allowHalfOpen: true, writable: false })\n .setEncoding('utf8')\n .setKeepAlive(true)\n .setTimeout(5000) // idle timeout\n .on('timeout', () => this.disconnect('idle timeout'))\n .on('end', () => this.disconnect('end'))\n .on('data', data => Logger_1.LOG('TcpClient received data.', data));\n }\n warmup() {\n return __awaiter(this, void 0, void 0, function* () {\n try {\n yield this.establishConnection();\n }\n catch (err) {\n Logger_1.LOG('Failed to connect', err);\n }\n });\n }\n sendMessage(message) {\n return __awaiter(this, void 0, void 0, function* () {\n // ensure the socket is open and writable\n yield this.waitForOpenConnection();\n yield new Promise((resolve, reject) => {\n const onSendError = (err) => {\n Logger_1.LOG('Failed to write', err);\n reject(err);\n };\n const wasFlushedToKernel = this.socket.write(message, (err) => {\n if (!err) {\n Logger_1.LOG('Write succeeded');\n resolve();\n }\n else {\n onSendError(err);\n }\n });\n if (!wasFlushedToKernel) {\n Logger_1.LOG('TcpClient data was not flushed to kernel buffer and was queued in memory.');\n }\n });\n });\n }\n disconnect(eventName) {\n Logger_1.LOG('TcpClient disconnected due to:', eventName);\n this.socket.removeAllListeners();\n this.socket.destroy();\n this.socket.unref();\n }\n waitForOpenConnection() {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.socket.writeable || this.socket.readyState !== 'open') {\n yield this.establishConnection();\n }\n });\n }\n establishConnection() {\n return __awaiter(this, void 0, void 0, function* () {\n yield new Promise((resolve, reject) => {\n const onError = (e) => {\n // socket is already open, no need to connect\n if (e.message.includes('EISCONN')) {\n resolve();\n return;\n }\n Logger_1.LOG('TCP Client received error', e);\n this.disconnect(e.message);\n reject(e);\n };\n const onConnect = () => {\n this.socket.removeListener('error', onError);\n Logger_1.LOG('TcpClient connected.', this.endpoint);\n resolve();\n };\n // TODO: convert this to a proper state machine\n switch (this.socket.readyState) {\n case 'open':\n resolve();\n break;\n case 'opening':\n // the socket is currently opening, we will resolve\n // or fail the current promise on the connect or\n // error events\n this.socket.once('connect', onConnect);\n this.socket.once('error', onError);\n break;\n default:\n Logger_1.LOG('opening connection with socket in state: ', this.socket.readyState);\n this.socket.connect(this.endpoint.port, this.endpoint.host, onConnect).once('error', onError);\n break;\n }\n });\n });\n }\n}\nexports.TcpClient = TcpClient;\n", "\"use strict\";\n/*\n * Copyright 2019 Amazon.com, Inc. or its affiliates.\n * Licensed under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst dgram = require(\"dgram\");\nconst Logger_1 = require(\"../../utils/Logger\");\nclass UdpClient {\n constructor(endpoint) {\n this.endpoint = endpoint;\n }\n // No warm up for UDP\n warmup() {\n return Promise.resolve();\n }\n sendMessage(message) {\n return __awaiter(this, void 0, void 0, function* () {\n const client = dgram.createSocket('udp4');\n client.send(message, this.endpoint.port, this.endpoint.host, (error) => {\n if (error) {\n Logger_1.LOG(error);\n }\n client.close();\n });\n return Promise.resolve();\n });\n }\n}\nexports.UdpClient = UdpClient;\n", "\"use strict\";\n/*\n * Copyright 2019 Amazon.com, Inc. or its affiliates.\n * Licensed under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst url = require(\"url\");\nconst Configuration_1 = require(\"../config/Configuration\");\nconst LogSerializer_1 = require(\"../serializers/LogSerializer\");\nconst Logger_1 = require(\"../utils/Logger\");\nconst TcpClient_1 = require(\"./connections/TcpClient\");\nconst UdpClient_1 = require(\"./connections/UdpClient\");\nconst TCP = 'tcp:';\nconst UDP = 'udp:';\nconst defaultTcpEndpoint = {\n host: '0.0.0.0',\n port: 25888,\n protocol: TCP,\n};\nconst parseEndpoint = (endpoint) => {\n try {\n if (!endpoint) {\n return defaultTcpEndpoint;\n }\n const parsedUrl = url.parse(endpoint);\n if (!parsedUrl.hostname || !parsedUrl.port || !parsedUrl.protocol) {\n Logger_1.LOG(`Failed to parse the provided agent endpoint. Falling back to the default TCP endpoint.`, parsedUrl);\n return defaultTcpEndpoint;\n }\n if (parsedUrl.protocol !== TCP && parsedUrl.protocol !== UDP) {\n Logger_1.LOG(`The provided agent endpoint protocol '${parsedUrl.protocol}' is not supported. Please use TCP or UDP. Falling back to the default TCP endpoint.`, parsedUrl);\n return defaultTcpEndpoint;\n }\n return {\n host: parsedUrl.hostname,\n port: Number(parsedUrl.port),\n protocol: parsedUrl.protocol,\n };\n }\n catch (e) {\n Logger_1.LOG('Failed to parse the provided agent endpoint', e);\n return defaultTcpEndpoint;\n }\n};\n/**\n * A sink that flushes to the CW Agent.\n * This sink instance should be re-used to avoid\n * leaking connections.\n */\nclass AgentSink {\n constructor(logGroupName, logStreamName, serializer) {\n this.name = 'AgentSink';\n this.logGroupName = logGroupName;\n this.logStreamName = logStreamName;\n this.serializer = serializer || new LogSerializer_1.LogSerializer();\n this.endpoint = parseEndpoint(Configuration_1.default.agentEndpoint);\n this.socketClient = this.getSocketClient(this.endpoint);\n Logger_1.LOG('Using socket client', this.socketClient.constructor.name);\n }\n accept(context) {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.logGroupName) {\n context.meta.LogGroupName = this.logGroupName;\n }\n if (this.logStreamName) {\n context.meta.LogStreamName = this.logStreamName;\n }\n const events = this.serializer.serialize(context);\n Logger_1.LOG(`Sending {} events to socket.`, events.length);\n for (let index = 0; index < events.length; index++) {\n const event = events[index];\n const message = event + '\\n';\n const bytes = Buffer.from(message);\n yield this.socketClient.sendMessage(bytes);\n }\n });\n }\n getSocketClient(endpoint) {\n Logger_1.LOG('Getting socket client for connection.', endpoint);\n const client = endpoint.protocol === TCP ? new TcpClient_1.TcpClient(endpoint) : new UdpClient_1.UdpClient(endpoint);\n client.warmup();\n return client;\n }\n}\nexports.AgentSink = AgentSink;\n", "\"use strict\";\n/*\n * Copyright 2019 Amazon.com, Inc. or its affiliates.\n * Licensed under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst Configuration_1 = require(\"../config/Configuration\");\nconst AgentSink_1 = require(\"../sinks/AgentSink\");\nconst Logger_1 = require(\"../utils/Logger\");\nclass DefaultEnvironment {\n probe() {\n return Promise.resolve(true);\n }\n getName() {\n if (!Configuration_1.default.serviceName) {\n Logger_1.LOG('Unknown ServiceName.');\n return 'Unknown';\n }\n return Configuration_1.default.serviceName;\n }\n getType() {\n if (!Configuration_1.default.serviceType) {\n Logger_1.LOG('Unknown ServiceType.');\n return 'Unknown';\n }\n return Configuration_1.default.serviceType;\n }\n getLogGroupName() {\n // if the caller explicitly overrides logGroupName to\n // be empty, we should honor that rather than providing\n // the default behavior.\n if (Configuration_1.default.logGroupName === '') {\n return '';\n }\n return Configuration_1.default.logGroupName ? Configuration_1.default.logGroupName : `${this.getName()}-metrics`;\n }\n configureContext() {\n // no-op\n }\n getSink() {\n if (!this.sink) {\n this.sink = new AgentSink_1.AgentSink(this.getLogGroupName(), Configuration_1.default.logStreamName);\n }\n return this.sink;\n }\n}\nexports.DefaultEnvironment = DefaultEnvironment;\n", "\"use strict\";\n/*\n * Copyright 2019 Amazon.com, Inc. or its affiliates.\n * Licensed under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst http = require(\"http\");\nconst SOCKET_TIMEOUT = 1000;\n/**\n * Fetch JSON data from an remote HTTP endpoint and de-serialize to the provided type.\n * There are no guarantees the response will conform to the contract defined by T.\n * It is up to the consumer to ensure the provided T captures all possible response types\n * from the provided endpoint.\n *\n * @param url - currently only supports HTTP\n */\nconst fetch = (url) => {\n return new Promise((resolve, reject) => {\n const request = http\n .get(url, { timeout: 2000 }, (response) => {\n if (!response.statusCode) {\n reject(`Received undefined response status code from '${url}'`);\n return;\n }\n if (response.statusCode < 200 || response.statusCode > 299) {\n reject(new Error('Failed to load page, status code: ' + response.statusCode));\n return;\n }\n // using similar approach to node-fetch\n // https://github.com/bitinn/node-fetch/blob/6a5d192034a0f438551dffb6d2d8df2c00921d16/src/body.js#L217\n const body = [];\n let bodyBytes = 0;\n response.on('data', (chunk) => {\n bodyBytes += chunk.length;\n body.push(chunk);\n });\n response.on('end', () => {\n let responseString;\n try {\n const buffer = Buffer.concat(body, bodyBytes);\n responseString = buffer.toString();\n const parsedJson = JSON.parse(responseString);\n resolve(parsedJson);\n }\n catch (e) {\n reject(`Failed to parse response from '${url}' as JSON. Received: ${responseString}`);\n }\n });\n })\n .on('error', (err) => {\n reject(err);\n });\n request.on('socket', socket => {\n socket.on('timeout', () => {\n request.abort();\n reject(`Socket timeout while connecting to '${url}'`);\n });\n socket.setTimeout(SOCKET_TIMEOUT);\n });\n });\n};\nexports.fetch = fetch;\n", "\"use strict\";\n/*\n * Copyright 2019 Amazon.com, Inc. or its affiliates.\n * Licensed under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst Configuration_1 = require(\"../config/Configuration\");\nconst AgentSink_1 = require(\"../sinks/AgentSink\");\nconst Fetch_1 = require(\"../utils/Fetch\");\nconst Logger_1 = require(\"../utils/Logger\");\nconst os = require(\"os\");\nconst Constants_1 = require(\"../Constants\");\n// formats image names into something more readable for a metric name\n// e.g. <account-id>.dkr.ecr.<region>.amazonaws.com/<image-name>:latest -> <image-name>:latest\nconst formatImageName = (imageName) => {\n if (imageName) {\n const splitImageName = imageName.split('/');\n return splitImageName[splitImageName.length - 1];\n }\n return imageName;\n};\nclass ECSEnvironment {\n probe() {\n return __awaiter(this, void 0, void 0, function* () {\n if (!process.env.ECS_CONTAINER_METADATA_URI) {\n return Promise.resolve(false);\n }\n if (process.env.FLUENT_HOST && !Configuration_1.default.agentEndpoint) {\n this.fluentBitEndpoint = `tcp://${process.env.FLUENT_HOST}:${Constants_1.Constants.DEFAULT_AGENT_PORT}`;\n Configuration_1.default.agentEndpoint = this.fluentBitEndpoint;\n Logger_1.LOG(`Using FluentBit configuration. Endpoint: ${this.fluentBitEndpoint}`);\n }\n try {\n this.metadata = yield Fetch_1.fetch(process.env.ECS_CONTAINER_METADATA_URI);\n if (this.metadata) {\n this.metadata.FormattedImageName = formatImageName(this.metadata.Image);\n Logger_1.LOG(`Successfully collected ECS Container metadata.`);\n }\n }\n catch (e) {\n Logger_1.LOG('Failed to collect ECS Container Metadata.');\n Logger_1.LOG(e);\n }\n // return true regardless of whether or not metadata collection\n // succeeded. we know that this is supposed to be an ECS environment\n // just from the environment variable\n return true;\n });\n }\n getName() {\n var _a;\n if (Configuration_1.default.serviceName) {\n return Configuration_1.default.serviceName;\n }\n return ((_a = this.metadata) === null || _a === void 0 ? void 0 : _a.FormattedImageName) ? this.metadata.FormattedImageName : 'Unknown';\n }\n getType() {\n return 'AWS::ECS::Container';\n }\n getLogGroupName() {\n // FireLens / fluent-bit does not need the log group to be included\n // since configuration of the LogGroup is handled by the\n // fluent bit config file\n if (this.fluentBitEndpoint) {\n return '';\n }\n return Configuration_1.default.logGroupName || this.getName();\n }\n configureContext(context) {\n var _a, _b, _c, _d, _e;\n this.addProperty(context, 'containerId', os.hostname());\n this.addProperty(context, 'createdAt', (_a = this.metadata) === null || _a === void 0 ? void 0 : _a.CreatedAt);\n this.addProperty(context, 'startedAt', (_b = this.metadata) === null || _b === void 0 ? void 0 : _b.StartedAt);\n this.addProperty(context, 'image', (_c = this.metadata) === null || _c === void 0 ? void 0 : _c.Image);\n this.addProperty(context, 'cluster', (_d = this.metadata) === null || _d === void 0 ? void 0 : _d.Labels['com.amazonaws.ecs.cluster']);\n this.addProperty(context, 'taskArn', (_e = this.metadata) === null || _e === void 0 ? void 0 : _e.Labels['com.amazonaws.ecs.task-arn']);\n // we override the standard default dimensions here because in the\n // FireLens / fluent-bit case, we don't need the LogGroup\n if (this.fluentBitEndpoint) {\n context.setDefaultDimensions({\n ServiceName: Configuration_1.default.serviceName || this.getName(),\n ServiceType: Configuration_1.default.serviceType || this.getType(),\n });\n }\n }\n getSink() {\n if (!this.sink) {\n const logGroupName = this.fluentBitEndpoint ? '' : this.getLogGroupName();\n this.sink = new AgentSink_1.AgentSink(logGroupName);\n }\n return this.sink;\n }\n addProperty(context, key, value) {\n if (value) {\n context.setProperty(key, value);\n }\n }\n}\nexports.ECSEnvironment = ECSEnvironment;\n", "\"use strict\";\n/*\n * Copyright 2019 Amazon.com, Inc. or its affiliates.\n * Licensed under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst Configuration_1 = require(\"../config/Configuration\");\nconst AgentSink_1 = require(\"../sinks/AgentSink\");\nconst Fetch_1 = require(\"../utils/Fetch\");\nconst Logger_1 = require(\"../utils/Logger\");\nconst endpoint = 'http://169.254.169.254/latest/dynamic/instance-identity/document';\nclass EC2Environment {\n probe() {\n return __awaiter(this, void 0, void 0, function* () {\n try {\n this.metadata = yield Fetch_1.fetch(endpoint);\n if (this.metadata) {\n return true;\n }\n return false;\n }\n catch (e) {\n Logger_1.LOG(e);\n return false;\n }\n });\n }\n getName() {\n if (!Configuration_1.default.serviceName) {\n Logger_1.LOG('Unknown ServiceName.');\n return 'Unknown';\n }\n return Configuration_1.default.serviceName;\n }\n getType() {\n if (this.metadata) {\n return 'AWS::EC2::Instance';\n }\n // this will only happen if probe() is not called first\n return 'Unknown';\n }\n getLogGroupName() {\n return Configuration_1.default.logGroupName ? Configuration_1.default.logGroupName : `${this.getName()}-metrics`;\n }\n configureContext(context) {\n if (this.metadata) {\n context.setProperty('imageId', this.metadata.imageId);\n context.setProperty('instanceId', this.metadata.instanceId);\n context.setProperty('instanceType', this.metadata.instanceType);\n context.setProperty('privateIP', this.metadata.privateIp);\n context.setProperty('availabilityZone', this.metadata.availabilityZone);\n }\n }\n getSink() {\n if (!this.sink) {\n this.sink = new AgentSink_1.AgentSink(this.getLogGroupName(), Configuration_1.default.logStreamName);\n }\n return this.sink;\n }\n}\nexports.EC2Environment = EC2Environment;\n", "\"use strict\";\n/*\n * Copyright 2019 Amazon.com, Inc. or its affiliates.\n * Licensed under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst ConsoleSink_1 = require(\"../sinks/ConsoleSink\");\nclass LambdaEnvironment {\n probe() {\n return Promise.resolve(process.env.AWS_LAMBDA_FUNCTION_NAME ? true : false);\n }\n getName() {\n return process.env.AWS_LAMBDA_FUNCTION_NAME || 'Unknown';\n }\n getType() {\n return 'AWS::Lambda::Function';\n }\n getLogGroupName() {\n return this.getName();\n }\n configureContext(context) {\n this.addProperty(context, 'executionEnvironment', process.env.AWS_EXECUTION_ENV);\n this.addProperty(context, 'memorySize', process.env.AWS_LAMBDA_FUNCTION_MEMORY_SIZE);\n this.addProperty(context, 'functionVersion', process.env.AWS_LAMBDA_FUNCTION_VERSION);\n this.addProperty(context, 'logStreamId', process.env.AWS_LAMBDA_LOG_STREAM_NAME);\n const trace = this.getSampledTrace();\n if (trace) {\n this.addProperty(context, 'traceId', trace);\n }\n }\n getSink() {\n if (!this.sink) {\n this.sink = new ConsoleSink_1.ConsoleSink();\n }\n return this.sink;\n }\n addProperty(context, key, value) {\n if (value) {\n context.setProperty(key, value);\n }\n }\n getSampledTrace() {\n // only collect traces which have been sampled\n if (process.env._X_AMZN_TRACE_ID && process.env._X_AMZN_TRACE_ID.includes('Sampled=1')) {\n return process.env._X_AMZN_TRACE_ID;\n }\n }\n}\nexports.LambdaEnvironment = LambdaEnvironment;\n", "\"use strict\";\n/*\n * Copyright 2019 Amazon.com, Inc. or its affiliates.\n * Licensed under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst Configuration_1 = require(\"../config/Configuration\");\nconst Logger_1 = require(\"../utils/Logger\");\nconst ConsoleSink_1 = require(\"../sinks/ConsoleSink\");\nclass LocalEnvironment {\n probe() {\n // probe is not intended to be used in the LocalEnvironment\n // To use the local environment you should set the environment\n // override\n return Promise.resolve(false);\n }\n getName() {\n if (!Configuration_1.default.serviceName) {\n Logger_1.LOG('Unknown ServiceName.');\n return 'Unknown';\n }\n return Configuration_1.default.serviceName;\n }\n getType() {\n if (!Configuration_1.default.serviceType) {\n Logger_1.LOG('Unknown ServiceType.');\n return 'Unknown';\n }\n return Configuration_1.default.serviceType;\n }\n getLogGroupName() {\n return Configuration_1.default.logGroupName ? Configuration_1.default.logGroupName : `${this.getName()}-metrics`;\n }\n configureContext() {\n // no-op\n }\n getSink() {\n if (!this.sink) {\n this.sink = new ConsoleSink_1.ConsoleSink();\n }\n return this.sink;\n }\n}\nexports.LocalEnvironment = LocalEnvironment;\n", "\"use strict\";\n/*\n * Copyright 2019 Amazon.com, Inc. or its affiliates.\n * Licensed under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst Logger_1 = require(\"../utils/Logger\");\nconst DefaultEnvironment_1 = require(\"./DefaultEnvironment\");\nconst ECSEnvironment_1 = require(\"./ECSEnvironment\");\nconst EC2Environment_1 = require(\"./EC2Environment\");\nconst LambdaEnvironment_1 = require(\"./LambdaEnvironment\");\nconst Configuration_1 = require(\"../config/Configuration\");\nconst Environments_1 = require(\"./Environments\");\nconst LocalEnvironment_1 = require(\"./LocalEnvironment\");\nconst lambdaEnvironment = new LambdaEnvironment_1.LambdaEnvironment();\nconst ecsEnvironment = new ECSEnvironment_1.ECSEnvironment();\nconst ec2Environment = new EC2Environment_1.EC2Environment();\nconst defaultEnvironment = new DefaultEnvironment_1.DefaultEnvironment();\n// ordering of this array matters\n// both Lambda and ECS can be determined from environment variables\n// making the entire detection process fast an cheap\n// EC2 can only be determined by making a remote HTTP request\nconst environments = [lambdaEnvironment, ecsEnvironment, ec2Environment];\nlet environment = undefined;\nconst getEnvironmentFromOverride = () => {\n // short-circuit environment detection and use override\n switch (Configuration_1.default.environmentOverride) {\n case Environments_1.default.Agent:\n return defaultEnvironment;\n case Environments_1.default.EC2:\n return ec2Environment;\n case Environments_1.default.Lambda:\n return lambdaEnvironment;\n case Environments_1.default.ECS:\n return ecsEnvironment;\n case Environments_1.default.Local:\n return new LocalEnvironment_1.LocalEnvironment();\n case Environments_1.default.Unknown:\n default:\n return undefined;\n }\n};\nconst discoverEnvironment = () => __awaiter(void 0, void 0, void 0, function* () {\n Logger_1.LOG(`Discovering environment`);\n for (const envUnderTest of environments) {\n Logger_1.LOG(`Testing: ${envUnderTest.constructor.name}`);\n try {\n if (yield envUnderTest.probe()) {\n return envUnderTest;\n }\n }\n catch (e) {\n Logger_1.LOG(`Failed probe: ${envUnderTest.constructor.name}`);\n }\n }\n return defaultEnvironment;\n});\nconst _resolveEnvironment = () => __awaiter(void 0, void 0, void 0, function* () {\n Logger_1.LOG('Resolving environment');\n if (environment) {\n return environment;\n }\n if (Configuration_1.default.environmentOverride) {\n Logger_1.LOG('Environment override supplied', Configuration_1.default.environmentOverride);\n // this will be falsy if an invalid configuration value is provided\n environment = getEnvironmentFromOverride();\n if (environment) {\n return environment;\n }\n else {\n Logger_1.LOG('Invalid environment provided. Falling back to auto-discovery.', Configuration_1.default.environmentOverride);\n }\n }\n environment = yield discoverEnvironment(); // eslint-disable-line require-atomic-updates\n return environment;\n});\n// pro-actively begin resolving the environment\n// this will allow us to kick off any async tasks\n// at module load time to reduce any blocking that\n// may occur on the initial flush()\nconst environmentPromise = _resolveEnvironment();\nconst resolveEnvironment = () => __awaiter(void 0, void 0, void 0, function* () {\n return environmentPromise;\n});\nexports.resolveEnvironment = resolveEnvironment;\n// this method is used for testing to bypass the cached environmentPromise result\nconst cleanResolveEnvironment = () => __awaiter(void 0, void 0, void 0, function* () {\n yield environmentPromise;\n environment = undefined;\n return yield _resolveEnvironment();\n});\nexports.cleanResolveEnvironment = cleanResolveEnvironment;\n", "\"use strict\";\n/*\n * Copyright 2019 Amazon.com, Inc. or its affiliates.\n * Licensed under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst __1 = require(\"..\");\nconst EnvironmentDetector_1 = require(\"../environment/EnvironmentDetector\");\nconst MetricsContext_1 = require(\"./MetricsContext\");\nconst createMetricsLogger = () => {\n const context = MetricsContext_1.MetricsContext.empty();\n const logger = new __1.MetricsLogger(EnvironmentDetector_1.resolveEnvironment, context);\n return logger;\n};\nexports.createMetricsLogger = createMetricsLogger;\n", "\"use strict\";\n/*\n * Copyright 2019 Amazon.com, Inc. or its affiliates.\n * Licensed under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst Logger_1 = require(\"../utils/Logger\");\nconst MetricsLoggerFactory_1 = require(\"./MetricsLoggerFactory\");\n/**\n * An asynchronous wrapper that provides a metrics instance.\n */\nconst metricScope = (handler) => {\n const wrappedHandler = (...args) => __awaiter(void 0, void 0, void 0, function* () {\n const metrics = MetricsLoggerFactory_1.createMetricsLogger();\n try {\n return yield handler(metrics)(...args);\n }\n finally {\n try {\n yield metrics.flush();\n }\n catch (e) {\n Logger_1.LOG('Failed to flush metrics', e);\n }\n }\n });\n return wrappedHandler;\n};\nexports.metricScope = metricScope;\n", "\"use strict\";\n/*\n * Copyright 2019 Amazon.com, Inc. or its affiliates.\n * Licensed under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Unit;\n(function (Unit) {\n Unit[\"Seconds\"] = \"Seconds\";\n Unit[\"Microseconds\"] = \"Microseconds\";\n Unit[\"Milliseconds\"] = \"Milliseconds\";\n Unit[\"Bytes\"] = \"Bytes\";\n Unit[\"Kilobytes\"] = \"Kilobytes\";\n Unit[\"Megabytes\"] = \"Megabytes\";\n Unit[\"Gigabytes\"] = \"Gigabytes\";\n Unit[\"Terabytes\"] = \"Terabytes\";\n Unit[\"Bits\"] = \"Bits\";\n Unit[\"Kilobits\"] = \"Kilobits\";\n Unit[\"Megabits\"] = \"Megabits\";\n Unit[\"Gigabits\"] = \"Gigabits\";\n Unit[\"Terabits\"] = \"Terabits\";\n Unit[\"Percent\"] = \"Percent\";\n Unit[\"Count\"] = \"Count\";\n Unit[\"BytesPerSecond\"] = \"Bytes/Second\";\n Unit[\"KilobytesPerSecond\"] = \"Kilobytes/Second\";\n Unit[\"MegabytesPerSecond\"] = \"Megabytes/Second\";\n Unit[\"GigabytesPerSecond\"] = \"Gigabytes/Second\";\n Unit[\"TerabytesPerSecond\"] = \"Terabytes/Second\";\n Unit[\"BitsPerSecond\"] = \"Bits/Second\";\n Unit[\"KilobitsPerSecond\"] = \"Kilobits/Second\";\n Unit[\"MegabitsPerSecond\"] = \"Megabits/Second\";\n Unit[\"GigabitsPerSecond\"] = \"Gigabits/Second\";\n Unit[\"TerabitsPerSecond\"] = \"Terabits/Second\";\n Unit[\"CountPerSecond\"] = \"Count/Second\";\n Unit[\"None\"] = \"None\";\n})(Unit = exports.Unit || (exports.Unit = {}));\n", "\"use strict\";\n/*\n * Copyright 2019 Amazon.com, Inc. or its affiliates.\n * Licensed under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar MetricsLogger_1 = require(\"./logger/MetricsLogger\");\nexports.MetricsLogger = MetricsLogger_1.MetricsLogger;\nvar ConsoleSink_1 = require(\"./sinks/ConsoleSink\");\nexports.LocalSink = ConsoleSink_1.ConsoleSink;\nvar AgentSink_1 = require(\"./sinks/AgentSink\");\nexports.AgentSink = AgentSink_1.AgentSink;\nvar MetricScope_1 = require(\"./logger/MetricScope\");\nexports.metricScope = MetricScope_1.metricScope;\nvar MetricsLoggerFactory_1 = require(\"./logger/MetricsLoggerFactory\");\nexports.createMetricsLogger = MetricsLoggerFactory_1.createMetricsLogger;\nvar Unit_1 = require(\"./logger/Unit\");\nexports.Unit = Unit_1.Unit;\nconst Configuration_1 = require(\"./config/Configuration\");\nexports.Configuration = Configuration_1.default;\n", "import { metricScope, Unit } from 'aws-embedded-metrics';\nimport { Context, S3Event } from 'aws-lambda';\nimport * as AWS from 'aws-sdk';\nimport { requireEnv } from '../../backend/shared/env.lambda-shared';\nimport { METRICS_NAMESPACE, MetricName } from './constants';\n\nconst DISTRIBUTION_ID = requireEnv('DISTRIBUTION_ID');\nconst PATH_PREFIX = requireEnv('PATH_PREFIX');\n\nexport async function handler(event: S3Event, context: Context) {\n console.log(`Event: ${JSON.stringify(event, null, 2)}`);\n\n if (event.Records.length === 0) {\n return;\n }\n\n await metricScope((metrics) => () => {\n // Clear default dimensions, we don't need those.\n metrics.setDimensions();\n\n metrics.setNamespace(METRICS_NAMESPACE);\n\n const now = Date.now();\n for (const record of event.Records) {\n const age = now - new Date(record.eventTime).getTime();\n metrics.putMetric(MetricName.S3_EVENT_AGE, age, Unit.Milliseconds);\n }\n })();\n\n const cf = new AWS.CloudFront();\n const invalidationRequest: AWS.CloudFront.CreateInvalidationRequest = {\n DistributionId: DISTRIBUTION_ID,\n InvalidationBatch: {\n Paths: {\n Quantity: event.Records.length,\n Items: event.Records.map((record) => `${PATH_PREFIX}${record.s3.object.key}`),\n },\n CallerReference: context.awsRequestId,\n },\n };\n console.log(JSON.stringify({ invalidationRequet: invalidationRequest }));\n const invalidationResponse = cf.createInvalidation(invalidationRequest).promise();\n console.log(JSON.stringify({ invalidationResponse }));\n return invalidationResponse;\n}\n", "import { env } from 'process';\n\nexport function requireEnv(name: string): string {\n const result = env[name];\n if (!result) {\n throw new Error(`No value specified for required environment variable: ${name}`);\n }\n return result;\n}\n", "export const METRICS_NAMESPACE = 'ConstructHub/CacheInvalidator';\n\nexport const enum MetricName {\n S3_EVENT_AGE = 'S3EventAge',\n}\n"],
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAeA,WAAO,eAAe,SAAS,cAAc,EAAE,OAAO;AACtD,QAAI;AACJ,IAAC,UAAU,YAAW;AAClB,iBAAU,WAAU,oBAAoB,KAAK;AAC7C,iBAAU,uBAAuB;AACjC,iBAAU,WAAU,2BAA2B,OAAO;AACtD,iBAAU,wBAAwB;AAClC,iBAAU,WAAU,wBAAwB,SAAS;AAAA,OACtD,YAAY,QAAQ,aAAc,SAAQ,YAAY;AAAA;AAAA;;;ACvBzD;AAAA;AAAA;AACA,WAAO,eAAe,SAAS,cAAc,EAAE,OAAO;AACtD,QAAI;AACJ,IAAC,UAAU,eAAc;AACrB,oBAAa,WAAW;AACxB,oBAAa,YAAY;AACzB,oBAAa,WAAW;AACxB,oBAAa,SAAS;AACtB,oBAAa,SAAS;AACtB,oBAAa,aAAa;AAAA,OAC3B,gBAAiB,gBAAe;AACnC,YAAQ,UAAU;AAAA;AAAA;;;ACXlB;AAAA;AAAA;AAeA,WAAO,eAAe,SAAS,cAAc,EAAE,OAAO;AACtD,QAAM,cAAc;AACpB,QAAM,iBAAiB;AACvB,QAAM,iBAAiB;AACvB,QAAI;AACJ,IAAC,UAAU,aAAY;AACnB,kBAAW,oBAAoB;AAC/B,kBAAW,qBAAqB;AAChC,kBAAW,0BAA0B;AACrC,kBAAW,kBAAkB;AAC7B,kBAAW,kBAAkB;AAC7B,kBAAW,oBAAoB;AAC/B,kBAAW,0BAA0B;AACrC,kBAAW,eAAe;AAAA,OAC3B,cAAe,cAAa;AAC/B,iDAAuC;AAAA,MACnC,mBAAmB;AACf,eAAO;AAAA,UACH,eAAe,KAAK,eAAe,WAAW;AAAA,UAC9C,yBAAyB,KAAK,2BAA2B,WAAW,sBAAsB;AAAA,UAC1F,cAAc,KAAK,eAAe,WAAW;AAAA,UAC7C,eAAe,KAAK,eAAe,WAAW;AAAA,UAC9C,aAAa,KAAK,eAAe,WAAW,iBAAiB,KAAK,4BAA4B,WAAW;AAAA,UACzG,aAAa,KAAK,eAAe,WAAW,iBAAiB,KAAK,4BAA4B,WAAW;AAAA,UACzG,qBAAqB,KAAK;AAAA,UAC1B,WAAW,KAAK,eAAe,WAAW,cAAc,YAAY,UAAU;AAAA;AAAA;AAAA,MAGtF,4BAA4B,WAAW;AACnC,eAAO,QAAQ,IAAI;AAAA;AAAA,MAEvB,eAAe,WAAW;AACtB,eAAO,QAAQ,IAAI,GAAG,kBAAkB;AAAA;AAAA,MAE5C,2BAA2B,WAAW,UAAU;AAC5C,cAAM,cAAc,KAAK,eAAe;AACxC,eAAO,CAAC,cAAc,WAAW,YAAY,kBAAkB;AAAA;AAAA,MAEnE,yBAAyB;AACrB,cAAM,gBAAgB,KAAK,eAAe,WAAW;AACrD,cAAM,cAAc,eAAe,QAAQ;AAC3C,YAAI,gBAAgB,QAAW;AAC3B,iBAAO,eAAe,QAAQ;AAAA;AAElC,eAAO;AAAA;AAAA;AAGf,YAAQ,mCAAmC;AAAA;AAAA;;;AC9D3C;AAAA;AAAA;AAeA,WAAO,eAAe,SAAS,cAAc,EAAE,OAAO;AACtD,QAAM,qCAAqC;AAC3C,QAAM,gBAAgB,IAAI,mCAAmC,mCAAmC;AAChG,YAAQ,UAAU;AAAA;AAAA;;;AClBlB;AAAA;AAAA;AAeA,WAAO,eAAe,SAAS,cAAc,EAAE,OAAO;AACtD,QAAM,kBAAkB;AACxB,QAAM,MAAM,IAAI,SAAS;AACrB,UAAI,gBAAgB,QAAQ,yBAAyB;AACjD,gBAAQ,IAAI,GAAG;AAAA;AAAA;AAGvB,YAAQ,MAAM;AAAA;AAAA;;;ACtBd;AAAA;AAAA;AACA,WAAO,eAAe,SAAS,cAAc,EAAE,OAAO;AAetD,6BAAmB;AAAA,MACf,YAAY,OAAO,MAAM;AACrB,aAAK,SAAS,CAAC;AACf,aAAK,OAAO,QAAQ;AAAA;AAAA,MAMxB,SAAS,OAAO;AACZ,aAAK,OAAO,KAAK;AAAA;AAAA;AAGzB,YAAQ,eAAe;AAAA;AAAA;;;AC7BvB;AAAA;AAAA;AAeA,WAAO,eAAe,SAAS,cAAc,EAAE,OAAO;AACtD,QAAM,kBAAkB;AACxB,QAAM,WAAW;AACjB,QAAM,iBAAiB;AACvB,+BAAqB;AAAA,MAYjB,YAAY,WAAW,YAAY,YAAY,mBAAmB,4BAA4B,WAAW;AACrG,aAAK,UAAU,IAAI;AACnB,aAAK,OAAO;AACZ,aAAK,6BAA6B;AAClC,aAAK,YAAY,aAAa,gBAAgB,QAAQ;AACtD,aAAK,aAAa,cAAc;AAChC,aAAK,aAAa,cAAc;AAChC,aAAK,YAAY;AACjB,aAAK,KAAK,YAAY,eAAe,qBAAqB;AAC1D,aAAK,oBAAoB,qBAAqB;AAC9C,YAAI,8BAA8B,QAAW;AACzC,eAAK,6BAA6B;AAAA;AAAA;AAAA,aAMnC,QAAQ;AACX,eAAO,IAAI;AAAA;AAAA,aAER,qBAAqB,WAAW;AACnC,YAAI,qBAAqB,MAAM;AAC3B,iBAAO,UAAU;AAAA,mBAEZ,WAAW;AAChB,iBAAO;AAAA,eAEN;AACD,iBAAO,KAAK;AAAA;AAAA;AAAA,MAGpB,aAAa,OAAO;AAChB,aAAK,YAAY;AAAA;AAAA,MAErB,YAAY,KAAK,OAAO;AACpB,aAAK,WAAW,OAAO;AAAA;AAAA,MAE3B,aAAa,WAAW;AACpB,aAAK,YAAY;AACjB,aAAK,KAAK,YAAY,eAAe,qBAAqB;AAAA;AAAA,MAO9D,qBAAqB,YAAY;AAC7B,iBAAS,IAAI,+BAA+B;AAC5C,aAAK,oBAAoB;AAAA;AAAA,MAQ7B,cAAc,sBAAsB;AAChC,YAAI,KAAK,WAAW,WAAW,GAAG;AAC9B,eAAK,WAAW,KAAK;AACrB;AAAA;AAEJ,iBAAS,IAAI,GAAG,IAAI,KAAK,WAAW,QAAQ,KAAK;AAC7C,gBAAM,uBAAuB,KAAK,WAAW;AAK7C,gBAAM,2BAA2B,OAAO,KAAK;AAC7C,gBAAM,2BAA2B,OAAO,KAAK;AAC7C,cAAI,yBAAyB,WAAW,yBAAyB,QAAQ;AACrE,iBAAK,WAAW,KAAK;AACrB;AAAA;AAEJ,mBAAS,IAAI,GAAG,IAAI,yBAAyB,QAAQ,KAAK;AACtD,gBAAI,CAAC,yBAAyB,SAAS,yBAAyB,KAAK;AAEjE,mBAAK,WAAW,KAAK;AACrB;AAAA;AAAA;AAAA;AAAA;AAAA,MAUhB,cAAc,eAAe;AACzB,aAAK,6BAA6B;AAClC,aAAK,aAAa;AAAA;AAAA,MAKtB,gBAAgB;AAEZ,YAAI,KAAK,+BAA+B,OAAO;AAC3C,iBAAO,KAAK;AAAA;AAGhB,YAAI,OAAO,KAAK,KAAK,mBAAmB,WAAW,GAAG;AAClD,iBAAO,KAAK;AAAA;AAGhB,YAAI,KAAK,WAAW,WAAW,GAAG;AAC9B,iBAAO,CAAC,KAAK;AAAA;AAKjB,eAAO,KAAK,WAAW,IAAI,YAAU;AACjC,iBAAO,OAAO,OAAO,OAAO,OAAO,IAAI,KAAK,oBAAoB;AAAA;AAAA;AAAA,MAGxE,UAAU,KAAK,OAAO,MAAM;AACxB,cAAM,gBAAgB,KAAK,QAAQ,IAAI;AACvC,YAAI,eAAe;AACf,wBAAc,SAAS;AAAA,eAEtB;AACD,eAAK,QAAQ,IAAI,KAAK,IAAI,eAAe,aAAa,OAAO;AAAA;AAAA;AAAA,MAMrE,wBAAwB;AACpB,eAAO,IAAI,eAAe,KAAK,WAAW,OAAO,OAAO,IAAI,KAAK,aAAa,OAAO,OAAO,IAAI,KAAK,aAAa,KAAK,mBAAmB,KAAK,4BAA4B,KAAK;AAAA;AAAA;AAGxL,YAAQ,iBAAiB;AAAA;AAAA;;;ACjKzB;AAAA;AAAA;AAeA,QAAI,YAAa,WAAQ,QAAK,aAAc,SAAU,SAAS,YAAY,GAAG,WAAW;AACrF,qBAAe,OAAO;AAAE,eAAO,iBAAiB,IAAI,QAAQ,IAAI,EAAE,SAAU,SAAS;AAAE,kBAAQ;AAAA;AAAA;AAC/F,aAAO,IAAK,MAAM,KAAI,UAAU,SAAU,SAAS,QAAQ;AACvD,2BAAmB,OAAO;AAAE,cAAI;AAAE,iBAAK,UAAU,KAAK;AAAA,mBAAkB,GAAP;AAAY,mBAAO;AAAA;AAAA;AACpF,0BAAkB,OAAO;AAAE,cAAI;AAAE,iBAAK,UAAU,SAAS;AAAA,mBAAkB,GAAP;AAAY,mBAAO;AAAA;AAAA;AACvF,sBAAc,QAAQ;AAAE,iBAAO,OAAO,QAAQ,OAAO,SAAS,MAAM,OAAO,OAAO,KAAK,WAAW;AAAA;AAClG,aAAM,aAAY,UAAU,MAAM,SAAS,cAAc,KAAK;AAAA;AAAA;AAGtE,WAAO,eAAe,SAAS,cAAc,EAAE,OAAO;AACtD,QAAM,kBAAkB;AACxB,QAAM,mBAAmB;AAMzB,8BAAoB;AAAA,MAChB,YAAY,oBAAoB,SAAS;AACrC,aAAK,iCAAiC,CAAC,UAAS,gBAAgB;AAC5D,gBAAM,oBAAoB;AAAA,YAGtB,UAAU,YAAY;AAAA,YACtB,aAAa,gBAAgB,QAAQ,eAAe,YAAY;AAAA,YAChE,aAAa,gBAAgB,QAAQ,eAAe,YAAY;AAAA;AAEpE,mBAAQ,qBAAqB;AAC7B,sBAAY,iBAAiB;AAAA;AAEjC,aAAK,qBAAqB;AAC1B,aAAK,UAAU,WAAW,iBAAiB,eAAe;AAAA;AAAA,MAK9D,QAAQ;AACJ,eAAO,UAAU,MAAM,QAAQ,QAAQ,aAAa;AAKhD,gBAAM,cAAc,MAAM,KAAK;AAC/B,eAAK,+BAA+B,KAAK,SAAS;AAClD,gBAAM,OAAO,YAAY;AAEzB,gBAAM,KAAK,OAAO,KAAK;AACvB,eAAK,UAAU,KAAK,QAAQ;AAAA;AAAA;AAAA,MAcpC,YAAY,KAAK,OAAO;AACpB,aAAK,QAAQ,YAAY,KAAK;AAC9B,eAAO;AAAA;AAAA,MAWX,cAAc,YAAY;AACtB,aAAK,QAAQ,cAAc;AAC3B,eAAO;AAAA;AAAA,MAQX,iBAAiB,eAAe;AAC5B,aAAK,QAAQ,cAAc;AAC3B,eAAO;AAAA;AAAA,MAUX,UAAU,KAAK,OAAO,MAAM;AACxB,aAAK,QAAQ,UAAU,KAAK,OAAO;AACnC,eAAO;AAAA;AAAA,MAMX,aAAa,OAAO;AAChB,aAAK,QAAQ,aAAa;AAC1B,eAAO;AAAA;AAAA,MAYX,aAAa,WAAW;AACpB,aAAK,QAAQ,aAAa;AAC1B,eAAO;AAAA;AAAA,MAOX,MAAM;AACF,eAAO,IAAI,cAAc,KAAK,oBAAoB,KAAK,QAAQ;AAAA;AAAA;AAGvE,YAAQ,gBAAgB;AAAA;AAAA;;;AClJxB;AAAA;AAAA;AAeA,WAAO,eAAe,SAAS,cAAc,EAAE,OAAO;AACtD,QAAM,cAAc;AAKpB,8BAAoB;AAAA,MAIhB,UAAU,SAAS;AACf,cAAM,gBAAgB;AACtB,YAAI,sBAAsB;AAC1B,gBAAQ,gBAAgB,QAAQ,OAAK;AAOjC,gBAAM,OAAO,OAAO,KAAK,GAAG,MAAM,GAAG,YAAY,UAAU;AAC3D,wBAAc,KAAK;AACnB,gCAAsB,OAAO,OAAO,OAAO,OAAO,IAAI,sBAAsB;AAAA;AAGhF,cAAM,aAAa,MAAM;AACrB,iBAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,IAAI,sBAAsB,QAAQ,aAAa,EAAE,MAAM,OAAO,OAAO,OAAO,OAAO,IAAI,QAAQ,OAAO,EAAE,mBAAmB;AAAA,YAChK;AAAA,cACI,YAAY;AAAA,cACZ,SAAS;AAAA,cACT,WAAW,QAAQ;AAAA;AAAA;AAAA;AAIvC,cAAM,eAAe;AACrB,YAAI,cAAc;AAClB,cAAM,uBAAuB,MAAM,YAAY,KAAK,kBAAkB,GAAG,QAAQ;AACjF,cAAM,kBAAkB,MAAM,2BAA2B,YAAY,UAAU;AAE/E,cAAM,uBAAuB,MAAM;AAC/B,uBAAa,KAAK,KAAK,UAAU;AACjC,wBAAc;AAAA;AAElB,mBAAW,CAAC,KAAK,WAAW,QAAQ,SAAS;AAEzC,gBAAM,cAAc,OAAO,OAAO,WAAW,IAAI,OAAO,OAAO,KAAK,OAAO;AAC3E,sBAAY,OAAO;AACnB,sBAAY,KAAK,kBAAkB,GAAG,QAAQ,KAAK,EAAE,MAAM,KAAK,MAAM,OAAO;AAC7E,cAAI,mBAAmB;AACnB;AAAA;AAAA;AAGR,YAAI,aAAa,WAAW,KAAK,yBAAyB,GAAG;AACzD;AAAA;AAEJ,eAAO;AAAA;AAAA;AAGf,YAAQ,gBAAgB;AAAA;AAAA;;;ACzExB;AAAA;AAAA;AAeA,WAAO,eAAe,SAAS,cAAc,EAAE,OAAO;AACtD,QAAM,kBAAkB;AAKxB,4BAAkB;AAAA,MACd,YAAY,YAAY;AACpB,aAAK,OAAO;AACZ,aAAK,aAAa,cAAc,IAAI,gBAAgB;AAAA;AAAA,MAExD,OAAO,SAAS;AAEZ,cAAM,SAAS,KAAK,WAAW,UAAU;AACzC,eAAO,QAAQ,WAAS,QAAQ,IAAI;AACpC,eAAO,QAAQ;AAAA;AAAA;AAGvB,YAAQ,cAAc;AAAA;AAAA;;;ACjCtB;AAAA;AAAA;AAeA,QAAI,YAAa,WAAQ,QAAK,aAAc,SAAU,SAAS,YAAY,GAAG,WAAW;AACrF,qBAAe,OAAO;AAAE,eAAO,iBAAiB,IAAI,QAAQ,IAAI,EAAE,SAAU,SAAS;AAAE,kBAAQ;AAAA;AAAA;AAC/F,aAAO,IAAK,MAAM,KAAI,UAAU,SAAU,SAAS,QAAQ;AACvD,2BAAmB,OAAO;AAAE,cAAI;AAAE,iBAAK,UAAU,KAAK;AAAA,mBAAkB,GAAP;AAAY,mBAAO;AAAA;AAAA;AACpF,0BAAkB,OAAO;AAAE,cAAI;AAAE,iBAAK,UAAU,SAAS;AAAA,mBAAkB,GAAP;AAAY,mBAAO;AAAA;AAAA;AACvF,sBAAc,QAAQ;AAAE,iBAAO,OAAO,QAAQ,OAAO,SAAS,MAAM,OAAO,OAAO,KAAK,WAAW;AAAA;AAClG,aAAM,aAAY,UAAU,MAAM,SAAS,cAAc,KAAK;AAAA;AAAA;AAGtE,WAAO,eAAe,SAAS,cAAc,EAAE,OAAO;AACtD,QAAM,MAAM,QAAQ;AACpB,QAAM,WAAW;AACjB,0BAAgB;AAAA,MACZ,YAAY,UAAU;AAClB,aAAK,WAAW;AAChB,aAAK,SAAS,IAAI,IAAI,OAAO,EAAE,eAAe,MAAM,UAAU,SACzD,YAAY,QACZ,aAAa,MACb,WAAW,KACX,GAAG,WAAW,MAAM,KAAK,WAAW,iBACpC,GAAG,OAAO,MAAM,KAAK,WAAW,QAChC,GAAG,QAAQ,UAAQ,SAAS,IAAI,4BAA4B;AAAA;AAAA,MAErE,SAAS;AACL,eAAO,UAAU,MAAM,QAAQ,QAAQ,aAAa;AAChD,cAAI;AACA,kBAAM,KAAK;AAAA,mBAER,KAAP;AACI,qBAAS,IAAI,qBAAqB;AAAA;AAAA;AAAA;AAAA,MAI9C,YAAY,SAAS;AACjB,eAAO,UAAU,MAAM,QAAQ,QAAQ,aAAa;AAEhD,gBAAM,KAAK;AACX,gBAAM,IAAI,QAAQ,CAAC,SAAS,WAAW;AACnC,kBAAM,cAAc,CAAC,QAAQ;AACzB,uBAAS,IAAI,mBAAmB;AAChC,qBAAO;AAAA;AAEX,kBAAM,qBAAqB,KAAK,OAAO,MAAM,SAAS,CAAC,QAAQ;AAC3D,kBAAI,CAAC,KAAK;AACN,yBAAS,IAAI;AACb;AAAA,qBAEC;AACD,4BAAY;AAAA;AAAA;AAGpB,gBAAI,CAAC,oBAAoB;AACrB,uBAAS,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA,MAK7B,WAAW,WAAW;AAClB,iBAAS,IAAI,kCAAkC;AAC/C,aAAK,OAAO;AACZ,aAAK,OAAO;AACZ,aAAK,OAAO;AAAA;AAAA,MAEhB,wBAAwB;AACpB,eAAO,UAAU,MAAM,QAAQ,QAAQ,aAAa;AAChD,cAAI,CAAC,KAAK,OAAO,aAAa,KAAK,OAAO,eAAe,QAAQ;AAC7D,kBAAM,KAAK;AAAA;AAAA;AAAA;AAAA,MAIvB,sBAAsB;AAClB,eAAO,UAAU,MAAM,QAAQ,QAAQ,aAAa;AAChD,gBAAM,IAAI,QAAQ,CAAC,SAAS,WAAW;AACnC,kBAAM,UAAU,CAAC,MAAM;AAEnB,kBAAI,EAAE,QAAQ,SAAS,YAAY;AAC/B;AACA;AAAA;AAEJ,uBAAS,IAAI,6BAA6B;AAC1C,mBAAK,WAAW,EAAE;AAClB,qBAAO;AAAA;AAEX,kBAAM,YAAY,MAAM;AACpB,mBAAK,OAAO,eAAe,SAAS;AACpC,uBAAS,IAAI,wBAAwB,KAAK;AAC1C;AAAA;AAGJ,oBAAQ,KAAK,OAAO;AAAA,mBACX;AACD;AACA;AAAA,mBACC;AAID,qBAAK,OAAO,KAAK,WAAW;AAC5B,qBAAK,OAAO,KAAK,SAAS;AAC1B;AAAA;AAEA,yBAAS,IAAI,6CAA6C,KAAK,OAAO;AACtE,qBAAK,OAAO,QAAQ,KAAK,SAAS,MAAM,KAAK,SAAS,MAAM,WAAW,KAAK,SAAS;AACrF;AAAA;AAAA;AAAA;AAAA;AAAA;AAMxB,YAAQ,YAAY;AAAA;AAAA;;;AC5HpB;AAAA;AAAA;AAeA,QAAI,YAAa,WAAQ,QAAK,aAAc,SAAU,SAAS,YAAY,GAAG,WAAW;AACrF,qBAAe,OAAO;AAAE,eAAO,iBAAiB,IAAI,QAAQ,IAAI,EAAE,SAAU,SAAS;AAAE,kBAAQ;AAAA;AAAA;AAC/F,aAAO,IAAK,MAAM,KAAI,UAAU,SAAU,SAAS,QAAQ;AACvD,2BAAmB,OAAO;AAAE,cAAI;AAAE,iBAAK,UAAU,KAAK;AAAA,mBAAkB,GAAP;AAAY,mBAAO;AAAA;AAAA;AACpF,0BAAkB,OAAO;AAAE,cAAI;AAAE,iBAAK,UAAU,SAAS;AAAA,mBAAkB,GAAP;AAAY,mBAAO;AAAA;AAAA;AACvF,sBAAc,QAAQ;AAAE,iBAAO,OAAO,QAAQ,OAAO,SAAS,MAAM,OAAO,OAAO,KAAK,WAAW;AAAA;AAClG,aAAM,aAAY,UAAU,MAAM,SAAS,cAAc,KAAK;AAAA;AAAA;AAGtE,WAAO,eAAe,SAAS,cAAc,EAAE,OAAO;AACtD,QAAM,QAAQ,QAAQ;AACtB,QAAM,WAAW;AACjB,0BAAgB;AAAA,MACZ,YAAY,UAAU;AAClB,aAAK,WAAW;AAAA;AAAA,MAGpB,SAAS;AACL,eAAO,QAAQ;AAAA;AAAA,MAEnB,YAAY,SAAS;AACjB,eAAO,UAAU,MAAM,QAAQ,QAAQ,aAAa;AAChD,gBAAM,SAAS,MAAM,aAAa;AAClC,iBAAO,KAAK,SAAS,KAAK,SAAS,MAAM,KAAK,SAAS,MAAM,CAAC,UAAU;AACpE,gBAAI,OAAO;AACP,uBAAS,IAAI;AAAA;AAEjB,mBAAO;AAAA;AAEX,iBAAO,QAAQ;AAAA;AAAA;AAAA;AAI3B,YAAQ,YAAY;AAAA;AAAA;;;AChDpB;AAAA;AAAA;AAeA,QAAI,YAAa,WAAQ,QAAK,aAAc,SAAU,SAAS,YAAY,GAAG,WAAW;AACrF,qBAAe,OAAO;AAAE,eAAO,iBAAiB,IAAI,QAAQ,IAAI,EAAE,SAAU,SAAS;AAAE,kBAAQ;AAAA;AAAA;AAC/F,aAAO,IAAK,MAAM,KAAI,UAAU,SAAU,SAAS,QAAQ;AACvD,2BAAmB,OAAO;AAAE,cAAI;AAAE,iBAAK,UAAU,KAAK;AAAA,mBAAkB,GAAP;AAAY,mBAAO;AAAA;AAAA;AACpF,0BAAkB,OAAO;AAAE,cAAI;AAAE,iBAAK,UAAU,SAAS;AAAA,mBAAkB,GAAP;AAAY,mBAAO;AAAA;AAAA;AACvF,sBAAc,QAAQ;AAAE,iBAAO,OAAO,QAAQ,OAAO,SAAS,MAAM,OAAO,OAAO,KAAK,WAAW;AAAA;AAClG,aAAM,aAAY,UAAU,MAAM,SAAS,cAAc,KAAK;AAAA;AAAA;AAGtE,WAAO,eAAe,SAAS,cAAc,EAAE,OAAO;AACtD,QAAM,MAAM,QAAQ;AACpB,QAAM,kBAAkB;AACxB,QAAM,kBAAkB;AACxB,QAAM,WAAW;AACjB,QAAM,cAAc;AACpB,QAAM,cAAc;AACpB,QAAM,MAAM;AACZ,QAAM,MAAM;AACZ,QAAM,qBAAqB;AAAA,MACvB,MAAM;AAAA,MACN,MAAM;AAAA,MACN,UAAU;AAAA;AAEd,QAAM,gBAAgB,CAAC,aAAa;AAChC,UAAI;AACA,YAAI,CAAC,UAAU;AACX,iBAAO;AAAA;AAEX,cAAM,YAAY,IAAI,MAAM;AAC5B,YAAI,CAAC,UAAU,YAAY,CAAC,UAAU,QAAQ,CAAC,UAAU,UAAU;AAC/D,mBAAS,IAAI,0FAA0F;AACvG,iBAAO;AAAA;AAEX,YAAI,UAAU,aAAa,OAAO,UAAU,aAAa,KAAK;AAC1D,mBAAS,IAAI,yCAAyC,UAAU,gGAAgG;AAChK,iBAAO;AAAA;AAEX,eAAO;AAAA,UACH,MAAM,UAAU;AAAA,UAChB,MAAM,OAAO,UAAU;AAAA,UACvB,UAAU,UAAU;AAAA;AAAA,eAGrB,GAAP;AACI,iBAAS,IAAI,+CAA+C;AAC5D,eAAO;AAAA;AAAA;AAQf,0BAAgB;AAAA,MACZ,YAAY,cAAc,eAAe,YAAY;AACjD,aAAK,OAAO;AACZ,aAAK,eAAe;AACpB,aAAK,gBAAgB;AACrB,aAAK,aAAa,cAAc,IAAI,gBAAgB;AACpD,aAAK,WAAW,cAAc,gBAAgB,QAAQ;AACtD,aAAK,eAAe,KAAK,gBAAgB,KAAK;AAC9C,iBAAS,IAAI,uBAAuB,KAAK,aAAa,YAAY;AAAA;AAAA,MAEtE,OAAO,SAAS;AACZ,eAAO,UAAU,MAAM,QAAQ,QAAQ,aAAa;AAChD,cAAI,KAAK,cAAc;AACnB,oBAAQ,KAAK,eAAe,KAAK;AAAA;AAErC,cAAI,KAAK,eAAe;AACpB,oBAAQ,KAAK,gBAAgB,KAAK;AAAA;AAEtC,gBAAM,SAAS,KAAK,WAAW,UAAU;AACzC,mBAAS,IAAI,gCAAgC,OAAO;AACpD,mBAAS,QAAQ,GAAG,QAAQ,OAAO,QAAQ,SAAS;AAChD,kBAAM,QAAQ,OAAO;AACrB,kBAAM,UAAU,QAAQ;AACxB,kBAAM,QAAQ,OAAO,KAAK;AAC1B,kBAAM,KAAK,aAAa,YAAY;AAAA;AAAA;AAAA;AAAA,MAIhD,gBAAgB,UAAU;AACtB,iBAAS,IAAI,yCAAyC;AACtD,cAAM,SAAS,SAAS,aAAa,MAAM,IAAI,YAAY,UAAU,YAAY,IAAI,YAAY,UAAU;AAC3G,eAAO;AACP,eAAO;AAAA;AAAA;AAGf,YAAQ,YAAY;AAAA;AAAA;;;ACvGpB;AAAA;AAAA;AAeA,WAAO,eAAe,SAAS,cAAc,EAAE,OAAO;AACtD,QAAM,kBAAkB;AACxB,QAAM,cAAc;AACpB,QAAM,WAAW;AACjB,mCAAyB;AAAA,MACrB,QAAQ;AACJ,eAAO,QAAQ,QAAQ;AAAA;AAAA,MAE3B,UAAU;AACN,YAAI,CAAC,gBAAgB,QAAQ,aAAa;AACtC,mBAAS,IAAI;AACb,iBAAO;AAAA;AAEX,eAAO,gBAAgB,QAAQ;AAAA;AAAA,MAEnC,UAAU;AACN,YAAI,CAAC,gBAAgB,QAAQ,aAAa;AACtC,mBAAS,IAAI;AACb,iBAAO;AAAA;AAEX,eAAO,gBAAgB,QAAQ;AAAA;AAAA,MAEnC,kBAAkB;AAId,YAAI,gBAAgB,QAAQ,iBAAiB,IAAI;AAC7C,iBAAO;AAAA;AAEX,eAAO,gBAAgB,QAAQ,eAAe,gBAAgB,QAAQ,eAAe,GAAG,KAAK;AAAA;AAAA,MAEjG,mBAAmB;AAAA;AAAA,MAGnB,UAAU;AACN,YAAI,CAAC,KAAK,MAAM;AACZ,eAAK,OAAO,IAAI,YAAY,UAAU,KAAK,mBAAmB,gBAAgB,QAAQ;AAAA;AAE1F,eAAO,KAAK;AAAA;AAAA;AAGpB,YAAQ,qBAAqB;AAAA;AAAA;;;ACxD7B;AAAA;AAAA;AAeA,WAAO,eAAe,SAAS,cAAc,EAAE,OAAO;AACtD,QAAM,OAAO,QAAQ;AACrB,QAAM,iBAAiB;AASvB,QAAM,QAAQ,CAAC,QAAQ;AACnB,aAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACpC,cAAM,UAAU,KACX,IAAI,KAAK,EAAE,SAAS,OAAQ,CAAC,aAAa;AAC3C,cAAI,CAAC,SAAS,YAAY;AACtB,mBAAO,iDAAiD;AACxD;AAAA;AAEJ,cAAI,SAAS,aAAa,OAAO,SAAS,aAAa,KAAK;AACxD,mBAAO,IAAI,MAAM,uCAAuC,SAAS;AACjE;AAAA;AAIJ,gBAAM,OAAO;AACb,cAAI,YAAY;AAChB,mBAAS,GAAG,QAAQ,CAAC,UAAU;AAC3B,yBAAa,MAAM;AACnB,iBAAK,KAAK;AAAA;AAEd,mBAAS,GAAG,OAAO,MAAM;AACrB,gBAAI;AACJ,gBAAI;AACA,oBAAM,SAAS,OAAO,OAAO,MAAM;AACnC,+BAAiB,OAAO;AACxB,oBAAM,aAAa,KAAK,MAAM;AAC9B,sBAAQ;AAAA,qBAEL,GAAP;AACI,qBAAO,kCAAkC,2BAA2B;AAAA;AAAA;AAAA,WAI3E,GAAG,SAAS,CAAC,QAAQ;AACtB,iBAAO;AAAA;AAEX,gBAAQ,GAAG,UAAU,YAAU;AAC3B,iBAAO,GAAG,WAAW,MAAM;AACvB,oBAAQ;AACR,mBAAO,uCAAuC;AAAA;AAElD,iBAAO,WAAW;AAAA;AAAA;AAAA;AAI9B,YAAQ,QAAQ;AAAA;AAAA;;;ACvEhB;AAAA;AAAA;AAeA,QAAI,YAAa,WAAQ,QAAK,aAAc,SAAU,SAAS,YAAY,GAAG,WAAW;AACrF,qBAAe,OAAO;AAAE,eAAO,iBAAiB,IAAI,QAAQ,IAAI,EAAE,SAAU,SAAS;AAAE,kBAAQ;AAAA;AAAA;AAC/F,aAAO,IAAK,MAAM,KAAI,UAAU,SAAU,SAAS,QAAQ;AACvD,2BAAmB,OAAO;AAAE,cAAI;AAAE,iBAAK,UAAU,KAAK;AAAA,mBAAkB,GAAP;AAAY,mBAAO;AAAA;AAAA;AACpF,0BAAkB,OAAO;AAAE,cAAI;AAAE,iBAAK,UAAU,SAAS;AAAA,mBAAkB,GAAP;AAAY,mBAAO;AAAA;AAAA;AACvF,sBAAc,QAAQ;AAAE,iBAAO,OAAO,QAAQ,OAAO,SAAS,MAAM,OAAO,OAAO,KAAK,WAAW;AAAA;AAClG,aAAM,aAAY,UAAU,MAAM,SAAS,cAAc,KAAK;AAAA;AAAA;AAGtE,WAAO,eAAe,SAAS,cAAc,EAAE,OAAO;AACtD,QAAM,kBAAkB;AACxB,QAAM,cAAc;AACpB,QAAM,UAAU;AAChB,QAAM,WAAW;AACjB,QAAM,KAAK,QAAQ;AACnB,QAAM,cAAc;AAGpB,QAAM,kBAAkB,CAAC,cAAc;AACnC,UAAI,WAAW;AACX,cAAM,iBAAiB,UAAU,MAAM;AACvC,eAAO,eAAe,eAAe,SAAS;AAAA;AAElD,aAAO;AAAA;AAEX,+BAAqB;AAAA,MACjB,QAAQ;AACJ,eAAO,UAAU,MAAM,QAAQ,QAAQ,aAAa;AAChD,cAAI,CAAC,QAAQ,IAAI,4BAA4B;AACzC,mBAAO,QAAQ,QAAQ;AAAA;AAE3B,cAAI,QAAQ,IAAI,eAAe,CAAC,gBAAgB,QAAQ,eAAe;AACnE,iBAAK,oBAAoB,SAAS,QAAQ,IAAI,eAAe,YAAY,UAAU;AACnF,4BAAgB,QAAQ,gBAAgB,KAAK;AAC7C,qBAAS,IAAI,4CAA4C,KAAK;AAAA;AAElE,cAAI;AACA,iBAAK,WAAW,MAAM,QAAQ,MAAM,QAAQ,IAAI;AAChD,gBAAI,KAAK,UAAU;AACf,mBAAK,SAAS,qBAAqB,gBAAgB,KAAK,SAAS;AACjE,uBAAS,IAAI;AAAA;AAAA,mBAGd,GAAP;AACI,qBAAS,IAAI;AACb,qBAAS,IAAI;AAAA;AAKjB,iBAAO;AAAA;AAAA;AAAA,MAGf,UAAU;AACN,YAAI;AACJ,YAAI,gBAAgB,QAAQ,aAAa;AACrC,iBAAO,gBAAgB,QAAQ;AAAA;AAEnC,eAAS,OAAK,KAAK,cAAc,QAAQ,OAAO,SAAS,SAAS,GAAG,sBAAsB,KAAK,SAAS,qBAAqB;AAAA;AAAA,MAElI,UAAU;AACN,eAAO;AAAA;AAAA,MAEX,kBAAkB;AAId,YAAI,KAAK,mBAAmB;AACxB,iBAAO;AAAA;AAEX,eAAO,gBAAgB,QAAQ,gBAAgB,KAAK;AAAA;AAAA,MAExD,iBAAiB,SAAS;AACtB,YAAI,IAAI,IAAI,IAAI,IAAI;AACpB,aAAK,YAAY,SAAS,eAAe,GAAG;AAC5C,aAAK,YAAY,SAAS,aAAc,MAAK,KAAK,cAAc,QAAQ,OAAO,SAAS,SAAS,GAAG;AACpG,aAAK,YAAY,SAAS,aAAc,MAAK,KAAK,cAAc,QAAQ,OAAO,SAAS,SAAS,GAAG;AACpG,aAAK,YAAY,SAAS,SAAU,MAAK,KAAK,cAAc,QAAQ,OAAO,SAAS,SAAS,GAAG;AAChG,aAAK,YAAY,SAAS,WAAY,MAAK,KAAK,cAAc,QAAQ,OAAO,SAAS,SAAS,GAAG,OAAO;AACzG,aAAK,YAAY,SAAS,WAAY,MAAK,KAAK,cAAc,QAAQ,OAAO,SAAS,SAAS,GAAG,OAAO;AAGzG,YAAI,KAAK,mBAAmB;AACxB,kBAAQ,qBAAqB;AAAA,YACzB,aAAa,gBAAgB,QAAQ,eAAe,KAAK;AAAA,YACzD,aAAa,gBAAgB,QAAQ,eAAe,KAAK;AAAA;AAAA;AAAA;AAAA,MAIrE,UAAU;AACN,YAAI,CAAC,KAAK,MAAM;AACZ,gBAAM,eAAe,KAAK,oBAAoB,KAAK,KAAK;AACxD,eAAK,OAAO,IAAI,YAAY,UAAU;AAAA;AAE1C,eAAO,KAAK;AAAA;AAAA,MAEhB,YAAY,SAAS,KAAK,OAAO;AAC7B,YAAI,OAAO;AACP,kBAAQ,YAAY,KAAK;AAAA;AAAA;AAAA;AAIrC,YAAQ,iBAAiB;AAAA;AAAA;;;ACrHzB;AAAA;AAAA;AAeA,QAAI,YAAa,WAAQ,QAAK,aAAc,SAAU,SAAS,YAAY,GAAG,WAAW;AACrF,qBAAe,OAAO;AAAE,eAAO,iBAAiB,IAAI,QAAQ,IAAI,EAAE,SAAU,SAAS;AAAE,kBAAQ;AAAA;AAAA;AAC/F,aAAO,IAAK,MAAM,KAAI,UAAU,SAAU,SAAS,QAAQ;AACvD,2BAAmB,OAAO;AAAE,cAAI;AAAE,iBAAK,UAAU,KAAK;AAAA,mBAAkB,GAAP;AAAY,mBAAO;AAAA;AAAA;AACpF,0BAAkB,OAAO;AAAE,cAAI;AAAE,iBAAK,UAAU,SAAS;AAAA,mBAAkB,GAAP;AAAY,mBAAO;AAAA;AAAA;AACvF,sBAAc,QAAQ;AAAE,iBAAO,OAAO,QAAQ,OAAO,SAAS,MAAM,OAAO,OAAO,KAAK,WAAW;AAAA;AAClG,aAAM,aAAY,UAAU,MAAM,SAAS,cAAc,KAAK;AAAA;AAAA;AAGtE,WAAO,eAAe,SAAS,cAAc,EAAE,OAAO;AACtD,QAAM,kBAAkB;AACxB,QAAM,cAAc;AACpB,QAAM,UAAU;AAChB,QAAM,WAAW;AACjB,QAAM,WAAW;AACjB,+BAAqB;AAAA,MACjB,QAAQ;AACJ,eAAO,UAAU,MAAM,QAAQ,QAAQ,aAAa;AAChD,cAAI;AACA,iBAAK,WAAW,MAAM,QAAQ,MAAM;AACpC,gBAAI,KAAK,UAAU;AACf,qBAAO;AAAA;AAEX,mBAAO;AAAA,mBAEJ,GAAP;AACI,qBAAS,IAAI;AACb,mBAAO;AAAA;AAAA;AAAA;AAAA,MAInB,UAAU;AACN,YAAI,CAAC,gBAAgB,QAAQ,aAAa;AACtC,mBAAS,IAAI;AACb,iBAAO;AAAA;AAEX,eAAO,gBAAgB,QAAQ;AAAA;AAAA,MAEnC,UAAU;AACN,YAAI,KAAK,UAAU;AACf,iBAAO;AAAA;AAGX,eAAO;AAAA;AAAA,MAEX,kBAAkB;AACd,eAAO,gBAAgB,QAAQ,eAAe,gBAAgB,QAAQ,eAAe,GAAG,KAAK;AAAA;AAAA,MAEjG,iBAAiB,SAAS;AACtB,YAAI,KAAK,UAAU;AACf,kBAAQ,YAAY,WAAW,KAAK,SAAS;AAC7C,kBAAQ,YAAY,cAAc,KAAK,SAAS;AAChD,kBAAQ,YAAY,gBAAgB,KAAK,SAAS;AAClD,kBAAQ,YAAY,aAAa,KAAK,SAAS;AAC/C,kBAAQ,YAAY,oBAAoB,KAAK,SAAS;AAAA;AAAA;AAAA,MAG9D,UAAU;AACN,YAAI,CAAC,KAAK,MAAM;AACZ,eAAK,OAAO,IAAI,YAAY,UAAU,KAAK,mBAAmB,gBAAgB,QAAQ;AAAA;AAE1F,eAAO,KAAK;AAAA;AAAA;AAGpB,YAAQ,iBAAiB;AAAA;AAAA;;;AC/EzB;AAAA;AAAA;AAeA,WAAO,eAAe,SAAS,cAAc,EAAE,OAAO;AACtD,QAAM,gBAAgB;AACtB,kCAAwB;AAAA,MACpB,QAAQ;AACJ,eAAO,QAAQ,QAAQ,QAAQ,IAAI,2BAA2B,OAAO;AAAA;AAAA,MAEzE,UAAU;AACN,eAAO,QAAQ,IAAI,4BAA4B;AAAA;AAAA,MAEnD,UAAU;AACN,eAAO;AAAA;AAAA,MAEX,kBAAkB;AACd,eAAO,KAAK;AAAA;AAAA,MAEhB,iBAAiB,SAAS;AACtB,aAAK,YAAY,SAAS,wBAAwB,QAAQ,IAAI;AAC9D,aAAK,YAAY,SAAS,cAAc,QAAQ,IAAI;AACpD,aAAK,YAAY,SAAS,mBAAmB,QAAQ,IAAI;AACzD,aAAK,YAAY,SAAS,eAAe,QAAQ,IAAI;AACrD,cAAM,QAAQ,KAAK;AACnB,YAAI,OAAO;AACP,eAAK,YAAY,SAAS,WAAW;AAAA;AAAA;AAAA,MAG7C,UAAU;AACN,YAAI,CAAC,KAAK,MAAM;AACZ,eAAK,OAAO,IAAI,cAAc;AAAA;AAElC,eAAO,KAAK;AAAA;AAAA,MAEhB,YAAY,SAAS,KAAK,OAAO;AAC7B,YAAI,OAAO;AACP,kBAAQ,YAAY,KAAK;AAAA;AAAA;AAAA,MAGjC,kBAAkB;AAEd,YAAI,QAAQ,IAAI,oBAAoB,QAAQ,IAAI,iBAAiB,SAAS,cAAc;AACpF,iBAAO,QAAQ,IAAI;AAAA;AAAA;AAAA;AAI/B,YAAQ,oBAAoB;AAAA;AAAA;;;AC1D5B;AAAA;AAAA;AAeA,WAAO,eAAe,SAAS,cAAc,EAAE,OAAO;AACtD,QAAM,kBAAkB;AACxB,QAAM,WAAW;AACjB,QAAM,gBAAgB;AACtB,iCAAuB;AAAA,MACnB,QAAQ;AAIJ,eAAO,QAAQ,QAAQ;AAAA;AAAA,MAE3B,UAAU;AACN,YAAI,CAAC,gBAAgB,QAAQ,aAAa;AACtC,mBAAS,IAAI;AACb,iBAAO;AAAA;AAEX,eAAO,gBAAgB,QAAQ;AAAA;AAAA,MAEnC,UAAU;AACN,YAAI,CAAC,gBAAgB,QAAQ,aAAa;AACtC,mBAAS,IAAI;AACb,iBAAO;AAAA;AAEX,eAAO,gBAAgB,QAAQ;AAAA;AAAA,MAEnC,kBAAkB;AACd,eAAO,gBAAgB,QAAQ,eAAe,gBAAgB,QAAQ,eAAe,GAAG,KAAK;AAAA;AAAA,MAEjG,mBAAmB;AAAA;AAAA,MAGnB,UAAU;AACN,YAAI,CAAC,KAAK,MAAM;AACZ,eAAK,OAAO,IAAI,cAAc;AAAA;AAElC,eAAO,KAAK;AAAA;AAAA;AAGpB,YAAQ,mBAAmB;AAAA;AAAA;;;ACrD3B;AAAA;AAAA;AAeA,QAAI,YAAa,WAAQ,QAAK,aAAc,SAAU,SAAS,YAAY,GAAG,WAAW;AACrF,qBAAe,OAAO;AAAE,eAAO,iBAAiB,IAAI,QAAQ,IAAI,EAAE,SAAU,SAAS;AAAE,kBAAQ;AAAA;AAAA;AAC/F,aAAO,IAAK,MAAM,KAAI,UAAU,SAAU,SAAS,QAAQ;AACvD,2BAAmB,OAAO;AAAE,cAAI;AAAE,iBAAK,UAAU,KAAK;AAAA,mBAAkB,GAAP;AAAY,mBAAO;AAAA;AAAA;AACpF,0BAAkB,OAAO;AAAE,cAAI;AAAE,iBAAK,UAAU,SAAS;AAAA,mBAAkB,GAAP;AAAY,mBAAO;AAAA;AAAA;AACvF,sBAAc,QAAQ;AAAE,iBAAO,OAAO,QAAQ,OAAO,SAAS,MAAM,OAAO,OAAO,KAAK,WAAW;AAAA;AAClG,aAAM,aAAY,UAAU,MAAM,SAAS,cAAc,KAAK;AAAA;AAAA;AAGtE,WAAO,eAAe,SAAS,cAAc,EAAE,OAAO;AACtD,QAAM,WAAW;AACjB,QAAM,uBAAuB;AAC7B,QAAM,mBAAmB;AACzB,QAAM,mBAAmB;AACzB,QAAM,sBAAsB;AAC5B,QAAM,kBAAkB;AACxB,QAAM,iBAAiB;AACvB,QAAM,qBAAqB;AAC3B,QAAM,oBAAoB,IAAI,oBAAoB;AAClD,QAAM,iBAAiB,IAAI,iBAAiB;AAC5C,QAAM,iBAAiB,IAAI,iBAAiB;AAC5C,QAAM,qBAAqB,IAAI,qBAAqB;AAKpD,QAAM,eAAe,CAAC,mBAAmB,gBAAgB;AACzD,QAAI,cAAc;AAClB,QAAM,6BAA6B,MAAM;AAErC,cAAQ,gBAAgB,QAAQ;AAAA,aACvB,eAAe,QAAQ;AACxB,iBAAO;AAAA,aACN,eAAe,QAAQ;AACxB,iBAAO;AAAA,aACN,eAAe,QAAQ;AACxB,iBAAO;AAAA,aACN,eAAe,QAAQ;AACxB,iBAAO;AAAA,aACN,eAAe,QAAQ;AACxB,iBAAO,IAAI,mBAAmB;AAAA,aAC7B,eAAe,QAAQ;AAAA;AAExB,iBAAO;AAAA;AAAA;AAGnB,QAAM,sBAAsB,MAAM,UAAU,QAAQ,QAAQ,QAAQ,aAAa;AAC7E,eAAS,IAAI;AACb,iBAAW,gBAAgB,cAAc;AACrC,iBAAS,IAAI,YAAY,aAAa,YAAY;AAClD,YAAI;AACA,cAAI,MAAM,aAAa,SAAS;AAC5B,mBAAO;AAAA;AAAA,iBAGR,GAAP;AACI,mBAAS,IAAI,iBAAiB,aAAa,YAAY;AAAA;AAAA;AAG/D,aAAO;AAAA;AAEX,QAAM,sBAAsB,MAAM,UAAU,QAAQ,QAAQ,QAAQ,aAAa;AAC7E,eAAS,IAAI;AACb,UAAI,aAAa;AACb,eAAO;AAAA;AAEX,UAAI,gBAAgB,QAAQ,qBAAqB;AAC7C,iBAAS,IAAI,iCAAiC,gBAAgB,QAAQ;AAEtE,sBAAc;AACd,YAAI,aAAa;AACb,iBAAO;AAAA,eAEN;AACD,mBAAS,IAAI,iEAAiE,gBAAgB,QAAQ;AAAA;AAAA;AAG9G,oBAAc,MAAM;AACpB,aAAO;AAAA;AAMX,QAAM,qBAAqB;AAC3B,QAAM,qBAAqB,MAAM,UAAU,QAAQ,QAAQ,QAAQ,aAAa;AAC5E,aAAO;AAAA;AAEX,YAAQ,qBAAqB;AAE7B,QAAM,0BAA0B,MAAM,UAAU,QAAQ,QAAQ,QAAQ,aAAa;AACjF,YAAM;AACN,oBAAc;AACd,aAAO,MAAM;AAAA;AAEjB,YAAQ,0BAA0B;AAAA;AAAA;;;AC9GlC;AAAA;AAAA;AAeA,WAAO,eAAe,SAAS,cAAc,EAAE,OAAO;AACtD,QAAM,MAAM;AACZ,QAAM,wBAAwB;AAC9B,QAAM,mBAAmB;AACzB,QAAM,sBAAsB,MAAM;AAC9B,YAAM,UAAU,iBAAiB,eAAe;AAChD,YAAM,SAAS,IAAI,IAAI,cAAc,sBAAsB,oBAAoB;AAC/E,aAAO;AAAA;AAEX,YAAQ,sBAAsB;AAAA;AAAA;;;ACxB9B;AAAA;AAAA;AAeA,QAAI,YAAa,WAAQ,QAAK,aAAc,SAAU,SAAS,YAAY,GAAG,WAAW;AACrF,qBAAe,OAAO;AAAE,eAAO,iBAAiB,IAAI,QAAQ,IAAI,EAAE,SAAU,SAAS;AAAE,kBAAQ;AAAA;AAAA;AAC/F,aAAO,IAAK,MAAM,KAAI,UAAU,SAAU,SAAS,QAAQ;AACvD,2BAAmB,OAAO;AAAE,cAAI;AAAE,iBAAK,UAAU,KAAK;AAAA,mBAAkB,GAAP;AAAY,mBAAO;AAAA;AAAA;AACpF,0BAAkB,OAAO;AAAE,cAAI;AAAE,iBAAK,UAAU,SAAS;AAAA,mBAAkB,GAAP;AAAY,mBAAO;AAAA;AAAA;AACvF,sBAAc,QAAQ;AAAE,iBAAO,OAAO,QAAQ,OAAO,SAAS,MAAM,OAAO,OAAO,KAAK,WAAW;AAAA;AAClG,aAAM,aAAY,UAAU,MAAM,SAAS,cAAc,KAAK;AAAA;AAAA;AAGtE,WAAO,eAAe,SAAS,cAAc,EAAE,OAAO;AACtD,QAAM,WAAW;AACjB,QAAM,yBAAyB;AAI/B,QAAM,eAAc,CAAC,aAAY;AAC7B,YAAM,iBAAiB,IAAI,SAAS,UAAU,QAAQ,QAAQ,QAAQ,aAAa;AAC/E,cAAM,UAAU,uBAAuB;AACvC,YAAI;AACA,iBAAO,MAAM,SAAQ,SAAS,GAAG;AAAA,kBAErC;AACI,cAAI;AACA,kBAAM,QAAQ;AAAA,mBAEX,GAAP;AACI,qBAAS,IAAI,2BAA2B;AAAA;AAAA;AAAA;AAIpD,aAAO;AAAA;AAEX,YAAQ,cAAc;AAAA;AAAA;;;AC/CtB;AAAA;AAAA;AAeA,WAAO,eAAe,SAAS,cAAc,EAAE,OAAO;AACtD,QAAI;AACJ,IAAC,UAAU,OAAM;AACb,YAAK,aAAa;AAClB,YAAK,kBAAkB;AACvB,YAAK,kBAAkB;AACvB,YAAK,WAAW;AAChB,YAAK,eAAe;AACpB,YAAK,eAAe;AACpB,YAAK,eAAe;AACpB,YAAK,eAAe;AACpB,YAAK,UAAU;AACf,YAAK,cAAc;AACnB,YAAK,cAAc;AACnB,YAAK,cAAc;AACnB,YAAK,cAAc;AACnB,YAAK,aAAa;AAClB,YAAK,WAAW;AAChB,YAAK,oBAAoB;AACzB,YAAK,wBAAwB;AAC7B,YAAK,wBAAwB;AAC7B,YAAK,wBAAwB;AAC7B,YAAK,wBAAwB;AAC7B,YAAK,mBAAmB;AACxB,YAAK,uBAAuB;AAC5B,YAAK,uBAAuB;AAC5B,YAAK,uBAAuB;AAC5B,YAAK,uBAAuB;AAC5B,YAAK,oBAAoB;AACzB,YAAK,UAAU;AAAA,OAChB,QAAO,QAAQ,QAAS,SAAQ,OAAO;AAAA;AAAA;;;AC7C1C;AAAA;AAAA;AAeA,WAAO,eAAe,SAAS,cAAc,EAAE,OAAO;AACtD,QAAI,kBAAkB;AACtB,YAAQ,gBAAgB,gBAAgB;AACxC,QAAI,gBAAgB;AACpB,YAAQ,YAAY,cAAc;AAClC,QAAI,cAAc;AAClB,YAAQ,YAAY,YAAY;AAChC,QAAI,gBAAgB;AACpB,YAAQ,cAAc,cAAc;AACpC,QAAI,yBAAyB;AAC7B,YAAQ,sBAAsB,uBAAuB;AACrD,QAAI,SAAS;AACb,YAAQ,OAAO,OAAO;AACtB,QAAM,kBAAkB;AACxB,YAAQ,gBAAgB,gBAAgB;AAAA;AAAA;;;AC7BxC;AAAA;AAAA;AAAA,kCAAkC;AAElC,UAAqB;;;ACFrB,qBAAoB;AAEb,oBAAoB,MAAsB;AAC/C,QAAM,SAAS,mBAAI;AACnB,MAAI,CAAC,QAAQ;AACX,UAAM,IAAI,MAAM,yDAAyD;AAAA;AAE3E,SAAO;AAAA;;;ACPF,IAAM,oBAAoB;AAE1B,IAAW;AAAX,UAAW,aAAX;AACL,gCAAe;AAAA,GADC;;;AFIlB,IAAM,kBAAkB,WAAW;AACnC,IAAM,cAAc,WAAW;AAE/B,uBAA8B,OAAgB,SAAkB;AAC9D,UAAQ,IAAI,UAAU,KAAK,UAAU,OAAO,MAAM;AAElD,MAAI,MAAM,QAAQ,WAAW,GAAG;AAC9B;AAAA;AAGF,QAAM,6CAAY,CAAC,YAAY,MAAM;AAEnC,YAAQ;AAER,YAAQ,aAAa;AAErB,UAAM,MAAM,KAAK;AACjB,eAAW,UAAU,MAAM,SAAS;AAClC,YAAM,MAAM,MAAM,IAAI,KAAK,OAAO,WAAW;AAC7C,cAAQ,UAAU,WAAW,cAAc,KAAK,iCAAK;AAAA;AAAA;AAIzD,QAAM,KAAK,IAAQ;AACnB,QAAM,sBAAgE;AAAA,IACpE,gBAAgB;AAAA,IAChB,mBAAmB;AAAA,MACjB,OAAO;AAAA,QACL,UAAU,MAAM,QAAQ;AAAA,QACxB,OAAO,MAAM,QAAQ,IAAI,CAAC,WAAW,GAAG,cAAc,OAAO,GAAG,OAAO;AAAA;AAAA,MAEzE,iBAAiB,QAAQ;AAAA;AAAA;AAG7B,UAAQ,IAAI,KAAK,UAAU,EAAE,oBAAoB;AACjD,QAAM,uBAAuB,GAAG,mBAAmB,qBAAqB;AACxE,UAAQ,IAAI,KAAK,UAAU,EAAE;AAC7B,SAAO;AAAA;",
|
6
|
-
"names": []
|
7
|
-
}
|
@@ -1,7 +0,0 @@
|
|
1
|
-
import * as lambda from '@aws-cdk/aws-lambda';
|
2
|
-
import { Construct } from '@aws-cdk/core';
|
3
|
-
export interface HandlerProps extends lambda.FunctionOptions {
|
4
|
-
}
|
5
|
-
export declare class Handler extends lambda.Function {
|
6
|
-
constructor(scope: Construct, id: string, props?: HandlerProps);
|
7
|
-
}
|
@@ -1,19 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.Handler = void 0;
|
4
|
-
// ~~ Generated by projen. To modify, edit .projenrc.js and run "npx projen".
|
5
|
-
const path = require("path");
|
6
|
-
const lambda = require("@aws-cdk/aws-lambda");
|
7
|
-
class Handler extends lambda.Function {
|
8
|
-
constructor(scope, id, props) {
|
9
|
-
super(scope, id, {
|
10
|
-
description: 'webapp/cache-invalidator/handler.lambda.ts',
|
11
|
-
...props,
|
12
|
-
runtime: lambda.Runtime.NODEJS_14_X,
|
13
|
-
handler: 'index.handler',
|
14
|
-
code: lambda.Code.fromAsset(path.join(__dirname, '/handler.bundle')),
|
15
|
-
});
|
16
|
-
}
|
17
|
-
}
|
18
|
-
exports.Handler = Handler;
|
19
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy93ZWJhcHAvY2FjaGUtaW52YWxpZGF0b3IvaGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2RUFBNkU7QUFDN0UsNkJBQTZCO0FBQzdCLDhDQUE4QztBQU05QyxNQUFhLE9BQVEsU0FBUSxNQUFNLENBQUMsUUFBUTtJQUMxQyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQW9CO1FBQzVELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQ2YsV0FBVyxFQUFFLDRDQUE0QztZQUN6RCxHQUFHLEtBQUs7WUFDUixPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXO1lBQ25DLE9BQU8sRUFBRSxlQUFlO1lBQ3hCLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1NBQ3JFLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQVZELDBCQVVDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gfn4gR2VuZXJhdGVkIGJ5IHByb2plbi4gVG8gbW9kaWZ5LCBlZGl0IC5wcm9qZW5yYy5qcyBhbmQgcnVuIFwibnB4IHByb2plblwiLlxuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIGxhbWJkYSBmcm9tICdAYXdzLWNkay9hd3MtbGFtYmRhJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ0Bhd3MtY2RrL2NvcmUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEhhbmRsZXJQcm9wcyBleHRlbmRzIGxhbWJkYS5GdW5jdGlvbk9wdGlvbnMge1xufVxuXG5leHBvcnQgY2xhc3MgSGFuZGxlciBleHRlbmRzIGxhbWJkYS5GdW5jdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzPzogSGFuZGxlclByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICBkZXNjcmlwdGlvbjogJ3dlYmFwcC9jYWNoZS1pbnZhbGlkYXRvci9oYW5kbGVyLmxhbWJkYS50cycsXG4gICAgICAuLi5wcm9wcyxcbiAgICAgIHJ1bnRpbWU6IGxhbWJkYS5SdW50aW1lLk5PREVKU18xNF9YLFxuICAgICAgaGFuZGxlcjogJ2luZGV4LmhhbmRsZXInLFxuICAgICAgY29kZTogbGFtYmRhLkNvZGUuZnJvbUFzc2V0KHBhdGguam9pbihfX2Rpcm5hbWUsICcvaGFuZGxlci5idW5kbGUnKSksXG4gICAgfSk7XG4gIH1cbn0iXX0=
|
@@ -1,42 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.handler = void 0;
|
4
|
-
const aws_embedded_metrics_1 = require("aws-embedded-metrics");
|
5
|
-
const AWS = require("aws-sdk");
|
6
|
-
const env_lambda_shared_1 = require("../../backend/shared/env.lambda-shared");
|
7
|
-
const constants_1 = require("./constants");
|
8
|
-
const DISTRIBUTION_ID = env_lambda_shared_1.requireEnv('DISTRIBUTION_ID');
|
9
|
-
const PATH_PREFIX = env_lambda_shared_1.requireEnv('PATH_PREFIX');
|
10
|
-
async function handler(event, context) {
|
11
|
-
console.log(`Event: ${JSON.stringify(event, null, 2)}`);
|
12
|
-
if (event.Records.length === 0) {
|
13
|
-
return;
|
14
|
-
}
|
15
|
-
await aws_embedded_metrics_1.metricScope((metrics) => () => {
|
16
|
-
// Clear default dimensions, we don't need those.
|
17
|
-
metrics.setDimensions();
|
18
|
-
metrics.setNamespace(constants_1.METRICS_NAMESPACE);
|
19
|
-
const now = Date.now();
|
20
|
-
for (const record of event.Records) {
|
21
|
-
const age = now - new Date(record.eventTime).getTime();
|
22
|
-
metrics.putMetric("S3EventAge" /* S3_EVENT_AGE */, age, aws_embedded_metrics_1.Unit.Milliseconds);
|
23
|
-
}
|
24
|
-
})();
|
25
|
-
const cf = new AWS.CloudFront();
|
26
|
-
const invalidationRequest = {
|
27
|
-
DistributionId: DISTRIBUTION_ID,
|
28
|
-
InvalidationBatch: {
|
29
|
-
Paths: {
|
30
|
-
Quantity: event.Records.length,
|
31
|
-
Items: event.Records.map((record) => `${PATH_PREFIX}${record.s3.object.key}`),
|
32
|
-
},
|
33
|
-
CallerReference: context.awsRequestId,
|
34
|
-
},
|
35
|
-
};
|
36
|
-
console.log(JSON.stringify({ invalidationRequet: invalidationRequest }));
|
37
|
-
const invalidationResponse = cf.createInvalidation(invalidationRequest).promise();
|
38
|
-
console.log(JSON.stringify({ invalidationResponse }));
|
39
|
-
return invalidationResponse;
|
40
|
-
}
|
41
|
-
exports.handler = handler;
|
42
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlci5sYW1iZGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvd2ViYXBwL2NhY2hlLWludmFsaWRhdG9yL2hhbmRsZXIubGFtYmRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtEQUF5RDtBQUV6RCwrQkFBK0I7QUFDL0IsOEVBQW9FO0FBQ3BFLDJDQUE0RDtBQUU1RCxNQUFNLGVBQWUsR0FBRyw4QkFBVSxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFDdEQsTUFBTSxXQUFXLEdBQUcsOEJBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUV2QyxLQUFLLFVBQVUsT0FBTyxDQUFDLEtBQWMsRUFBRSxPQUFnQjtJQUM1RCxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUV4RCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtRQUM5QixPQUFPO0tBQ1I7SUFFRCxNQUFNLGtDQUFXLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRTtRQUNsQyxpREFBaUQ7UUFDakQsT0FBTyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBRXhCLE9BQU8sQ0FBQyxZQUFZLENBQUMsNkJBQWlCLENBQUMsQ0FBQztRQUV4QyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDdkIsS0FBSyxNQUFNLE1BQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFO1lBQ2xDLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDdkQsT0FBTyxDQUFDLFNBQVMsa0NBQTBCLEdBQUcsRUFBRSwyQkFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQ3BFO0lBQ0gsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUVMLE1BQU0sRUFBRSxHQUFHLElBQUksR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ2hDLE1BQU0sbUJBQW1CLEdBQTZDO1FBQ3BFLGNBQWMsRUFBRSxlQUFlO1FBQy9CLGlCQUFpQixFQUFFO1lBQ2pCLEtBQUssRUFBRTtnQkFDTCxRQUFRLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNO2dCQUM5QixLQUFLLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEdBQUcsV0FBVyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDO2FBQzlFO1lBQ0QsZUFBZSxFQUFFLE9BQU8sQ0FBQyxZQUFZO1NBQ3RDO0tBQ0YsQ0FBQztJQUNGLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLGtCQUFrQixFQUFFLG1CQUFtQixFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3pFLE1BQU0sb0JBQW9CLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixDQUFDLG1CQUFtQixDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDbEYsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdEQsT0FBTyxvQkFBb0IsQ0FBQztBQUM5QixDQUFDO0FBbkNELDBCQW1DQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG1ldHJpY1Njb3BlLCBVbml0IH0gZnJvbSAnYXdzLWVtYmVkZGVkLW1ldHJpY3MnO1xuaW1wb3J0IHsgQ29udGV4dCwgUzNFdmVudCB9IGZyb20gJ2F3cy1sYW1iZGEnO1xuaW1wb3J0ICogYXMgQVdTIGZyb20gJ2F3cy1zZGsnO1xuaW1wb3J0IHsgcmVxdWlyZUVudiB9IGZyb20gJy4uLy4uL2JhY2tlbmQvc2hhcmVkL2Vudi5sYW1iZGEtc2hhcmVkJztcbmltcG9ydCB7IE1FVFJJQ1NfTkFNRVNQQUNFLCBNZXRyaWNOYW1lIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG5jb25zdCBESVNUUklCVVRJT05fSUQgPSByZXF1aXJlRW52KCdESVNUUklCVVRJT05fSUQnKTtcbmNvbnN0IFBBVEhfUFJFRklYID0gcmVxdWlyZUVudignUEFUSF9QUkVGSVgnKTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGhhbmRsZXIoZXZlbnQ6IFMzRXZlbnQsIGNvbnRleHQ6IENvbnRleHQpIHtcbiAgY29uc29sZS5sb2coYEV2ZW50OiAke0pTT04uc3RyaW5naWZ5KGV2ZW50LCBudWxsLCAyKX1gKTtcblxuICBpZiAoZXZlbnQuUmVjb3Jkcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBhd2FpdCBtZXRyaWNTY29wZSgobWV0cmljcykgPT4gKCkgPT4ge1xuICAgIC8vIENsZWFyIGRlZmF1bHQgZGltZW5zaW9ucywgd2UgZG9uJ3QgbmVlZCB0aG9zZS5cbiAgICBtZXRyaWNzLnNldERpbWVuc2lvbnMoKTtcblxuICAgIG1ldHJpY3Muc2V0TmFtZXNwYWNlKE1FVFJJQ1NfTkFNRVNQQUNFKTtcblxuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgZm9yIChjb25zdCByZWNvcmQgb2YgZXZlbnQuUmVjb3Jkcykge1xuICAgICAgY29uc3QgYWdlID0gbm93IC0gbmV3IERhdGUocmVjb3JkLmV2ZW50VGltZSkuZ2V0VGltZSgpO1xuICAgICAgbWV0cmljcy5wdXRNZXRyaWMoTWV0cmljTmFtZS5TM19FVkVOVF9BR0UsIGFnZSwgVW5pdC5NaWxsaXNlY29uZHMpO1xuICAgIH1cbiAgfSkoKTtcblxuICBjb25zdCBjZiA9IG5ldyBBV1MuQ2xvdWRGcm9udCgpO1xuICBjb25zdCBpbnZhbGlkYXRpb25SZXF1ZXN0OiBBV1MuQ2xvdWRGcm9udC5DcmVhdGVJbnZhbGlkYXRpb25SZXF1ZXN0ID0ge1xuICAgIERpc3RyaWJ1dGlvbklkOiBESVNUUklCVVRJT05fSUQsXG4gICAgSW52YWxpZGF0aW9uQmF0Y2g6IHtcbiAgICAgIFBhdGhzOiB7XG4gICAgICAgIFF1YW50aXR5OiBldmVudC5SZWNvcmRzLmxlbmd0aCxcbiAgICAgICAgSXRlbXM6IGV2ZW50LlJlY29yZHMubWFwKChyZWNvcmQpID0+IGAke1BBVEhfUFJFRklYfSR7cmVjb3JkLnMzLm9iamVjdC5rZXl9YCksXG4gICAgICB9LFxuICAgICAgQ2FsbGVyUmVmZXJlbmNlOiBjb250ZXh0LmF3c1JlcXVlc3RJZCxcbiAgICB9LFxuICB9O1xuICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeSh7IGludmFsaWRhdGlvblJlcXVldDogaW52YWxpZGF0aW9uUmVxdWVzdCB9KSk7XG4gIGNvbnN0IGludmFsaWRhdGlvblJlc3BvbnNlID0gY2YuY3JlYXRlSW52YWxpZGF0aW9uKGludmFsaWRhdGlvblJlcXVlc3QpLnByb21pc2UoKTtcbiAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoeyBpbnZhbGlkYXRpb25SZXNwb25zZSB9KSk7XG4gIHJldHVybiBpbnZhbGlkYXRpb25SZXNwb25zZTtcbn1cbiJdfQ==
|
@@ -1,34 +0,0 @@
|
|
1
|
-
import { IDistribution } from '@aws-cdk/aws-cloudfront';
|
2
|
-
import { Metric, MetricOptions } from '@aws-cdk/aws-cloudwatch';
|
3
|
-
import { Bucket } from '@aws-cdk/aws-s3';
|
4
|
-
import { Construct } from '@aws-cdk/core';
|
5
|
-
export interface CacheInvalidatorProps {
|
6
|
-
/**
|
7
|
-
* The S3 Bucket served by the CloudFront distribution.
|
8
|
-
*/
|
9
|
-
readonly bucket: Bucket;
|
10
|
-
/**
|
11
|
-
* The CloudFront Distribution on which to perform automated invalidation.
|
12
|
-
*/
|
13
|
-
readonly distribution: IDistribution;
|
14
|
-
/**
|
15
|
-
* A path prefix to prepend to S3 object keys when computing the cache
|
16
|
-
* invalidation paths. The value is REQUIRED to begin with a leading `/`.
|
17
|
-
*
|
18
|
-
* @default '/'
|
19
|
-
*/
|
20
|
-
readonly pathPrefix?: string;
|
21
|
-
}
|
22
|
-
/**
|
23
|
-
* Automatically invalidates paths from a CloudFront distribution based on S3
|
24
|
-
* object updates. The invalidated paths are constructed from the S3 object keys
|
25
|
-
* being updated, combined with an optional path prefix.
|
26
|
-
*/
|
27
|
-
export declare class CacheInvalidator extends Construct {
|
28
|
-
constructor(scope: Construct, id: string, props: CacheInvalidatorProps);
|
29
|
-
/**
|
30
|
-
* The age of S3 events processed by the cache invalidator. By default this
|
31
|
-
* is the MAXIMUM value over a 5 minutes period.
|
32
|
-
*/
|
33
|
-
metricS3EventAge(opts: MetricOptions): Metric;
|
34
|
-
}
|
@@ -1,57 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.CacheInvalidator = void 0;
|
4
|
-
const aws_cloudwatch_1 = require("@aws-cdk/aws-cloudwatch");
|
5
|
-
const aws_iam_1 = require("@aws-cdk/aws-iam");
|
6
|
-
const aws_lambda_event_sources_1 = require("@aws-cdk/aws-lambda-event-sources");
|
7
|
-
const aws_s3_1 = require("@aws-cdk/aws-s3");
|
8
|
-
const core_1 = require("@aws-cdk/core");
|
9
|
-
const constants_1 = require("./constants");
|
10
|
-
const handler_1 = require("./handler");
|
11
|
-
/**
|
12
|
-
* Automatically invalidates paths from a CloudFront distribution based on S3
|
13
|
-
* object updates. The invalidated paths are constructed from the S3 object keys
|
14
|
-
* being updated, combined with an optional path prefix.
|
15
|
-
*/
|
16
|
-
class CacheInvalidator extends core_1.Construct {
|
17
|
-
constructor(scope, id, props) {
|
18
|
-
var _a;
|
19
|
-
super(scope, id);
|
20
|
-
if (props.pathPrefix != null && !core_1.Token.isUnresolved(props.pathPrefix) && !props.pathPrefix.startsWith('/')) {
|
21
|
-
throw new Error('The pathPrefix must start with a leading /');
|
22
|
-
}
|
23
|
-
const handler = new handler_1.Handler(this, 'Resource', {
|
24
|
-
description: `Automated cache invalidation on CloudFront distribution ${props.distribution.distributionId}`,
|
25
|
-
environment: {
|
26
|
-
DISTRIBUTION_ID: props.distribution.distributionId,
|
27
|
-
PATH_PREFIX: (_a = props.pathPrefix) !== null && _a !== void 0 ? _a : '/',
|
28
|
-
},
|
29
|
-
memorySize: 1024,
|
30
|
-
timeout: core_1.Duration.minutes(1),
|
31
|
-
});
|
32
|
-
handler.addToRolePolicy(new aws_iam_1.PolicyStatement({
|
33
|
-
effect: aws_iam_1.Effect.ALLOW,
|
34
|
-
actions: ['cloudfront:CreateInvalidation'],
|
35
|
-
resources: ['*'],
|
36
|
-
}));
|
37
|
-
// invalidate cache when a file was created/removed from the bucket
|
38
|
-
handler.addEventSource(new aws_lambda_event_sources_1.S3EventSource(props.bucket, {
|
39
|
-
events: [aws_s3_1.EventType.OBJECT_CREATED, aws_s3_1.EventType.OBJECT_REMOVED],
|
40
|
-
}));
|
41
|
-
}
|
42
|
-
/**
|
43
|
-
* The age of S3 events processed by the cache invalidator. By default this
|
44
|
-
* is the MAXIMUM value over a 5 minutes period.
|
45
|
-
*/
|
46
|
-
metricS3EventAge(opts) {
|
47
|
-
return new aws_cloudwatch_1.Metric({
|
48
|
-
period: core_1.Duration.minutes(5),
|
49
|
-
statistic: aws_cloudwatch_1.Statistic.MAXIMUM,
|
50
|
-
...opts,
|
51
|
-
metricName: "S3EventAge" /* S3_EVENT_AGE */,
|
52
|
-
namespace: constants_1.METRICS_NAMESPACE,
|
53
|
-
});
|
54
|
-
}
|
55
|
-
}
|
56
|
-
exports.CacheInvalidator = CacheInvalidator;
|
57
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvd2ViYXBwL2NhY2hlLWludmFsaWRhdG9yL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLDREQUEyRTtBQUMzRSw4Q0FBMkQ7QUFDM0QsZ0ZBQWtFO0FBQ2xFLDRDQUFvRDtBQUNwRCx3Q0FBMkQ7QUFDM0QsMkNBQTREO0FBQzVELHVDQUFvQztBQXNCcEM7Ozs7R0FJRztBQUNILE1BQWEsZ0JBQWlCLFNBQVEsZ0JBQVM7SUFDN0MsWUFBbUIsS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBNEI7O1FBQzNFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsSUFBSSxLQUFLLENBQUMsVUFBVSxJQUFJLElBQUksSUFBSSxDQUFDLFlBQUssQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDMUcsTUFBTSxJQUFJLEtBQUssQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO1NBQy9EO1FBRUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxpQkFBTyxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUU7WUFDNUMsV0FBVyxFQUFFLDJEQUEyRCxLQUFLLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRTtZQUMzRyxXQUFXLEVBQUU7Z0JBQ1gsZUFBZSxFQUFFLEtBQUssQ0FBQyxZQUFZLENBQUMsY0FBYztnQkFDbEQsV0FBVyxRQUFFLEtBQUssQ0FBQyxVQUFVLG1DQUFJLEdBQUc7YUFDckM7WUFDRCxVQUFVLEVBQUUsSUFBSztZQUNqQixPQUFPLEVBQUUsZUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7U0FDN0IsQ0FBQyxDQUFDO1FBRUgsT0FBTyxDQUFDLGVBQWUsQ0FBQyxJQUFJLHlCQUFlLENBQUM7WUFDMUMsTUFBTSxFQUFFLGdCQUFNLENBQUMsS0FBSztZQUNwQixPQUFPLEVBQUUsQ0FBQywrQkFBK0IsQ0FBQztZQUMxQyxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUM7U0FDakIsQ0FBQyxDQUFDLENBQUM7UUFFSixtRUFBbUU7UUFDbkUsT0FBTyxDQUFDLGNBQWMsQ0FBQyxJQUFJLHdDQUFhLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRTtZQUNyRCxNQUFNLEVBQUUsQ0FBQyxrQkFBUyxDQUFDLGNBQWMsRUFBRSxrQkFBUyxDQUFDLGNBQWMsQ0FBQztTQUM3RCxDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7SUFFRDs7O09BR0c7SUFDSSxnQkFBZ0IsQ0FBQyxJQUFtQjtRQUN6QyxPQUFPLElBQUksdUJBQU0sQ0FBQztZQUNoQixNQUFNLEVBQUUsZUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDM0IsU0FBUyxFQUFFLDBCQUFTLENBQUMsT0FBTztZQUM1QixHQUFHLElBQUk7WUFDUCxVQUFVLGlDQUF5QjtZQUNuQyxTQUFTLEVBQUUsNkJBQWlCO1NBQzdCLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQTNDRCw0Q0EyQ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJRGlzdHJpYnV0aW9uIH0gZnJvbSAnQGF3cy1jZGsvYXdzLWNsb3VkZnJvbnQnO1xuaW1wb3J0IHsgTWV0cmljLCBNZXRyaWNPcHRpb25zLCBTdGF0aXN0aWMgfSBmcm9tICdAYXdzLWNkay9hd3MtY2xvdWR3YXRjaCc7XG5pbXBvcnQgeyBFZmZlY3QsIFBvbGljeVN0YXRlbWVudCB9IGZyb20gJ0Bhd3MtY2RrL2F3cy1pYW0nO1xuaW1wb3J0IHsgUzNFdmVudFNvdXJjZSB9IGZyb20gJ0Bhd3MtY2RrL2F3cy1sYW1iZGEtZXZlbnQtc291cmNlcyc7XG5pbXBvcnQgeyBCdWNrZXQsIEV2ZW50VHlwZSB9IGZyb20gJ0Bhd3MtY2RrL2F3cy1zMyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QsIER1cmF0aW9uLCBUb2tlbiB9IGZyb20gJ0Bhd3MtY2RrL2NvcmUnO1xuaW1wb3J0IHsgTWV0cmljTmFtZSwgTUVUUklDU19OQU1FU1BBQ0UgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBIYW5kbGVyIH0gZnJvbSAnLi9oYW5kbGVyJztcblxuZXhwb3J0IGludGVyZmFjZSBDYWNoZUludmFsaWRhdG9yUHJvcHMge1xuICAvKipcbiAgICogVGhlIFMzIEJ1Y2tldCBzZXJ2ZWQgYnkgdGhlIENsb3VkRnJvbnQgZGlzdHJpYnV0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgYnVja2V0OiBCdWNrZXQ7XG5cbiAgLyoqXG4gICAqIFRoZSBDbG91ZEZyb250IERpc3RyaWJ1dGlvbiBvbiB3aGljaCB0byBwZXJmb3JtIGF1dG9tYXRlZCBpbnZhbGlkYXRpb24uXG4gICAqL1xuICByZWFkb25seSBkaXN0cmlidXRpb246IElEaXN0cmlidXRpb247XG5cbiAgLyoqXG4gICAqIEEgcGF0aCBwcmVmaXggdG8gcHJlcGVuZCB0byBTMyBvYmplY3Qga2V5cyB3aGVuIGNvbXB1dGluZyB0aGUgY2FjaGVcbiAgICogaW52YWxpZGF0aW9uIHBhdGhzLiBUaGUgdmFsdWUgaXMgUkVRVUlSRUQgdG8gYmVnaW4gd2l0aCBhIGxlYWRpbmcgYC9gLlxuICAgKlxuICAgKiBAZGVmYXVsdCAnLydcbiAgICovXG4gIHJlYWRvbmx5IHBhdGhQcmVmaXg/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQXV0b21hdGljYWxseSBpbnZhbGlkYXRlcyBwYXRocyBmcm9tIGEgQ2xvdWRGcm9udCBkaXN0cmlidXRpb24gYmFzZWQgb24gUzNcbiAqIG9iamVjdCB1cGRhdGVzLiBUaGUgaW52YWxpZGF0ZWQgcGF0aHMgYXJlIGNvbnN0cnVjdGVkIGZyb20gdGhlIFMzIG9iamVjdCBrZXlzXG4gKiBiZWluZyB1cGRhdGVkLCBjb21iaW5lZCB3aXRoIGFuIG9wdGlvbmFsIHBhdGggcHJlZml4LlxuICovXG5leHBvcnQgY2xhc3MgQ2FjaGVJbnZhbGlkYXRvciBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQ2FjaGVJbnZhbGlkYXRvclByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGlmIChwcm9wcy5wYXRoUHJlZml4ICE9IG51bGwgJiYgIVRva2VuLmlzVW5yZXNvbHZlZChwcm9wcy5wYXRoUHJlZml4KSAmJiAhcHJvcHMucGF0aFByZWZpeC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHBhdGhQcmVmaXggbXVzdCBzdGFydCB3aXRoIGEgbGVhZGluZyAvJyk7XG4gICAgfVxuXG4gICAgY29uc3QgaGFuZGxlciA9IG5ldyBIYW5kbGVyKHRoaXMsICdSZXNvdXJjZScsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBgQXV0b21hdGVkIGNhY2hlIGludmFsaWRhdGlvbiBvbiBDbG91ZEZyb250IGRpc3RyaWJ1dGlvbiAke3Byb3BzLmRpc3RyaWJ1dGlvbi5kaXN0cmlidXRpb25JZH1gLFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgRElTVFJJQlVUSU9OX0lEOiBwcm9wcy5kaXN0cmlidXRpb24uZGlzdHJpYnV0aW9uSWQsXG4gICAgICAgIFBBVEhfUFJFRklYOiBwcm9wcy5wYXRoUHJlZml4ID8/ICcvJyxcbiAgICAgIH0sXG4gICAgICBtZW1vcnlTaXplOiAxXzAyNCxcbiAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLm1pbnV0ZXMoMSksXG4gICAgfSk7XG5cbiAgICBoYW5kbGVyLmFkZFRvUm9sZVBvbGljeShuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgYWN0aW9uczogWydjbG91ZGZyb250OkNyZWF0ZUludmFsaWRhdGlvbiddLFxuICAgICAgcmVzb3VyY2VzOiBbJyonXSwgLy8gQ3JlYXRlSW52YWxpZGF0aW9uIGRvZXMgbm90IHN1cHBvcnQgcmVzb3VyY2Ugc2NvcGluZ1xuICAgIH0pKTtcblxuICAgIC8vIGludmFsaWRhdGUgY2FjaGUgd2hlbiBhIGZpbGUgd2FzIGNyZWF0ZWQvcmVtb3ZlZCBmcm9tIHRoZSBidWNrZXRcbiAgICBoYW5kbGVyLmFkZEV2ZW50U291cmNlKG5ldyBTM0V2ZW50U291cmNlKHByb3BzLmJ1Y2tldCwge1xuICAgICAgZXZlbnRzOiBbRXZlbnRUeXBlLk9CSkVDVF9DUkVBVEVELCBFdmVudFR5cGUuT0JKRUNUX1JFTU9WRURdLFxuICAgIH0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgYWdlIG9mIFMzIGV2ZW50cyBwcm9jZXNzZWQgYnkgdGhlIGNhY2hlIGludmFsaWRhdG9yLiBCeSBkZWZhdWx0IHRoaXNcbiAgICogaXMgdGhlIE1BWElNVU0gdmFsdWUgb3ZlciBhIDUgbWludXRlcyBwZXJpb2QuXG4gICAqL1xuICBwdWJsaWMgbWV0cmljUzNFdmVudEFnZShvcHRzOiBNZXRyaWNPcHRpb25zKTogTWV0cmljIHtcbiAgICByZXR1cm4gbmV3IE1ldHJpYyh7XG4gICAgICBwZXJpb2Q6IER1cmF0aW9uLm1pbnV0ZXMoNSksXG4gICAgICBzdGF0aXN0aWM6IFN0YXRpc3RpYy5NQVhJTVVNLFxuICAgICAgLi4ub3B0cyxcbiAgICAgIG1ldHJpY05hbWU6IE1ldHJpY05hbWUuUzNfRVZFTlRfQUdFLFxuICAgICAgbmFtZXNwYWNlOiBNRVRSSUNTX05BTUVTUEFDRSxcbiAgICB9KTtcbiAgfVxufVxuIl19
|