@financial-times/dotcom-build-sass 13.10.1-beta.2 → 13.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +0 -17
- package/dist/node/index.js +23 -2
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -2
- package/src/index.ts +23 -2
- package/dist/node/monitored-sass-loader.d.ts +0 -2
- package/dist/node/monitored-sass-loader.js +0 -214
- package/src/monitored-sass-loader.ts +0 -237
package/README.md
CHANGED
|
@@ -69,20 +69,3 @@ The CSS loader has `url()` resolution disabled as we don't use, nor recommend, t
|
|
|
69
69
|
| `implementation` | `sass\|sass-embedded` | `sass-embedded` | See [documentation] (we'll `require` the passed string first) |
|
|
70
70
|
|
|
71
71
|
[documentation]: https://webpack.js.org/loaders/sass-loader/#implementation
|
|
72
|
-
|
|
73
|
-
## Sass build monitoring
|
|
74
|
-
|
|
75
|
-
Sass build times are stored locally and remotely, where your project sets relevant API keys. Alternatively, you may turn both these features off using environment variable.
|
|
76
|
-
|
|
77
|
-
- Local reporting: A running total of your local Sass build times are stored in a temporary file on your machine. This statistic is reported periodically for your interest, along with a prompt to support FT efforts to move away from Sass.
|
|
78
|
-
- Alongside this, your local Sass build times are sent to the [biz-ops metrics api](https://github.com/Financial-Times/biz-ops-metrics-api), provided the below environment variables are set.
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
| Environment Variable | Required | Default | Description |
|
|
82
|
-
|--------------------------------------------|------------|------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
|
83
|
-
| `FT_SASS_STATS_NOTICE` | no | `throttle` | How often to log Sass statistics out to terminal. One of `throttle`, `never`, `always` |
|
|
84
|
-
| `FT_SASS_STATS_NOTICE_THROTTLE_SECONDS` | no | `1800` | How many seconds to wait between logging Sass statistics out to terminal. |
|
|
85
|
-
| `FT_SASS_STATS_NOTICE_THROTTLE_PERCENTAGE` | no | `30` | A percentage increase in total Sass build time in which to log out statistics to the terminal regardless of time. |
|
|
86
|
-
| `FT_SASS_STATS_MONITOR` | no | `off` | Set to `on` to send Sass build time statistics to [biz-ops metrics api](https://github.com/Financial-Times/biz-ops-metrics-api) Requires `FT_SASS_BIZ_OPS_API_KEY` and `FT_SASS_BIZ_OPS_SYSTEM_CODE`. |
|
|
87
|
-
| `FT_SASS_BIZ_OPS_API_KEY` | no | `` | A [Biz-Ops Metrics API Key](https://github.com/Financial-Times/biz-ops-metrics-api/blob/main/docs/API_DEFINITION.md#authentication) for your system. |
|
|
88
|
-
| `FT_SASS_BIZ_OPS_SYSTEM_CODE` | no | `` | The [biz-ops](https://biz-ops.in.ft.com/) system code of your project. Use `page-kit` if your system does not have a biz-ops code yet. |
|
package/dist/node/index.js
CHANGED
|
@@ -22,7 +22,28 @@ class PageKitSassPlugin {
|
|
|
22
22
|
// Disable formatting so that we don't spend time pretty printing
|
|
23
23
|
outputStyle: 'compressed',
|
|
24
24
|
// Enable Sass to @import source files from additional relative paths
|
|
25
|
-
includePaths: this.includePaths
|
|
25
|
+
includePaths: this.includePaths,
|
|
26
|
+
// Disable warnings for dependencies – we have lots of legacy origami
|
|
27
|
+
// libraries that are being migrated to modern CSS instead of updating
|
|
28
|
+
// these Sass deprecations.
|
|
29
|
+
quietDeps: true,
|
|
30
|
+
silenceDeprecations: [
|
|
31
|
+
// HACK:IM:260721 The current version of sass-loader does not support
|
|
32
|
+
// using the new JS API with Webpack's built-in module resolver.
|
|
33
|
+
// Rather than bumping the loader multiple major versions, let's just
|
|
34
|
+
// silence the deprecation warning as we're encouraging teams to
|
|
35
|
+
// adopt modern CSS instead.
|
|
36
|
+
'legacy-js-api',
|
|
37
|
+
// HACK:IM:260721 Whilst the quietDeps option will silence most
|
|
38
|
+
// deprecation warnings, it won't silence warnings for modules used
|
|
39
|
+
// as an entry point. We currently encourage consumers to include
|
|
40
|
+
// dotcom-ui-layout as an entry point, but its Sass includes some
|
|
41
|
+
// @imports, which are now deprecated, triggering additional
|
|
42
|
+
// warnings. Seeing as we're encouraging teams to move to modern CSS,
|
|
43
|
+
// let's just silence this deprecation warning rather than migrating
|
|
44
|
+
// the package to use @use.
|
|
45
|
+
'import'
|
|
46
|
+
]
|
|
26
47
|
}
|
|
27
48
|
};
|
|
28
49
|
const additionalCssLoaderOptions = {
|
|
@@ -40,7 +61,7 @@ class PageKitSassPlugin {
|
|
|
40
61
|
// Enable use of Sass for CSS preprocessing
|
|
41
62
|
// https://github.com/webpack-contrib/sass-loader
|
|
42
63
|
{
|
|
43
|
-
loader: require.resolve('
|
|
64
|
+
loader: require.resolve('sass-loader'),
|
|
44
65
|
options: sassLoaderOptions
|
|
45
66
|
}
|
|
46
67
|
]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"fileNames":["../../../node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/typescript/lib/lib.dom.d.ts","../../../node_modules/typescript/lib/lib.dom.iterable.d.ts","../../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../node_modules/typescript/lib/lib.es2017.date.d.ts","../../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/typescript/lib/lib.esnext.intl.d.ts","../../../node_modules/typescript/lib/lib.decorators.d.ts","../../../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../../node_modules/@types/estree/index.d.ts","../../../node_modules/@types/json-schema/index.d.ts","../../../node_modules/schema-utils/declarations/ValidationError.d.ts","../../../node_modules/ajv/lib/ajv.d.ts","../../../node_modules/schema-utils/declarations/validate.d.ts","../../../node_modules/schema-utils/declarations/index.d.ts","../../../node_modules/webpack/node_modules/tapable/tapable.d.ts","../../../node_modules/webpack/types.d.ts","../../dotcom-build-css/dist/node/index.d.ts","../src/index.ts","../src/monitored-sass-loader.ts","../../../node_modules/@types/aria-query/index.d.ts","../../../node_modules/@babel/types/lib/index.d.ts","../../../node_modules/@types/babel__generator/index.d.ts","../../../node_modules/@babel/parser/typings/babel-parser.d.ts","../../../node_modules/@types/babel__template/index.d.ts","../../../node_modules/@types/babel__traverse/index.d.ts","../../../node_modules/@types/babel__core/index.d.ts","../../../node_modules/@types/node/globals.d.ts","../../../node_modules/@types/node/async_hooks.d.ts","../../../node_modules/@types/node/buffer.d.ts","../../../node_modules/@types/node/child_process.d.ts","../../../node_modules/@types/node/cluster.d.ts","../../../node_modules/@types/node/console.d.ts","../../../node_modules/@types/node/constants.d.ts","../../../node_modules/@types/node/crypto.d.ts","../../../node_modules/@types/node/dgram.d.ts","../../../node_modules/@types/node/dns.d.ts","../../../node_modules/@types/node/domain.d.ts","../../../node_modules/@types/node/events.d.ts","../../../node_modules/@types/node/fs.d.ts","../../../node_modules/@types/node/http.d.ts","../../../node_modules/@types/node/http2.d.ts","../../../node_modules/@types/node/https.d.ts","../../../node_modules/@types/node/inspector.d.ts","../../../node_modules/@types/node/module.d.ts","../../../node_modules/@types/node/net.d.ts","../../../node_modules/@types/node/os.d.ts","../../../node_modules/@types/node/path.d.ts","../../../node_modules/@types/node/perf_hooks.d.ts","../../../node_modules/@types/node/process.d.ts","../../../node_modules/@types/node/punycode.d.ts","../../../node_modules/@types/node/querystring.d.ts","../../../node_modules/@types/node/readline.d.ts","../../../node_modules/@types/node/repl.d.ts","../../../node_modules/@types/node/stream.d.ts","../../../node_modules/@types/node/string_decoder.d.ts","../../../node_modules/@types/node/timers.d.ts","../../../node_modules/@types/node/tls.d.ts","../../../node_modules/@types/node/trace_events.d.ts","../../../node_modules/@types/node/tty.d.ts","../../../node_modules/@types/node/url.d.ts","../../../node_modules/@types/node/util.d.ts","../../../node_modules/@types/node/v8.d.ts","../../../node_modules/@types/node/vm.d.ts","../../../node_modules/@types/node/worker_threads.d.ts","../../../node_modules/@types/node/zlib.d.ts","../../../node_modules/@types/node/ts3.6/base.d.ts","../../../node_modules/@types/node/assert.d.ts","../../../node_modules/@types/node/base.d.ts","../../../node_modules/@types/node/index.d.ts","../../../node_modules/@types/connect/index.d.ts","../../../node_modules/@types/body-parser/index.d.ts","../../../node_modules/@types/cheerio/index.d.ts","../../../node_modules/@types/deep-freeze/index.d.ts","../../../node_modules/@types/range-parser/index.d.ts","../../../node_modules/@types/qs/index.d.ts","../../../node_modules/@types/express-serve-static-core/index.d.ts","../../../node_modules/@types/http-errors/index.d.ts","../../../node_modules/@types/mime/Mime.d.ts","../../../node_modules/@types/mime/index.d.ts","../../../node_modules/@types/serve-static/index.d.ts","../../../node_modules/@types/express/index.d.ts","../../../node_modules/@types/minimatch/index.d.ts","../../../node_modules/@types/glob/index.d.ts","../../../node_modules/@types/graceful-fs/index.d.ts","../../../node_modules/@types/istanbul-lib-coverage/index.d.ts","../../../node_modules/@types/istanbul-lib-report/index.d.ts","../../../node_modules/@types/istanbul-reports/index.d.ts","../../../node_modules/@jest/expect-utils/build/index.d.ts","../../../node_modules/jest-matcher-utils/node_modules/chalk/index.d.ts","../../../node_modules/@sinclair/typebox/typebox.d.ts","../../../node_modules/@jest/schemas/build/index.d.ts","../../../node_modules/jest-diff/node_modules/pretty-format/build/index.d.ts","../../../node_modules/jest-diff/build/index.d.ts","../../../node_modules/jest-matcher-utils/build/index.d.ts","../../../node_modules/expect/build/index.d.ts","../../../node_modules/@types/jest/node_modules/pretty-format/build/index.d.ts","../../../node_modules/@types/jest/index.d.ts","../../../node_modules/@types/jsdom/node_modules/parse5/dist/common/html.d.ts","../../../node_modules/@types/jsdom/node_modules/parse5/dist/common/token.d.ts","../../../node_modules/@types/jsdom/node_modules/parse5/dist/common/error-codes.d.ts","../../../node_modules/@types/jsdom/node_modules/parse5/dist/tokenizer/preprocessor.d.ts","../../../node_modules/@types/jsdom/node_modules/entities/lib/generated/decode-data-html.d.ts","../../../node_modules/@types/jsdom/node_modules/entities/lib/generated/decode-data-xml.d.ts","../../../node_modules/@types/jsdom/node_modules/entities/lib/decode_codepoint.d.ts","../../../node_modules/@types/jsdom/node_modules/entities/lib/decode.d.ts","../../../node_modules/@types/jsdom/node_modules/parse5/dist/tokenizer/index.d.ts","../../../node_modules/@types/jsdom/node_modules/parse5/dist/tree-adapters/interface.d.ts","../../../node_modules/@types/jsdom/node_modules/parse5/dist/parser/open-element-stack.d.ts","../../../node_modules/@types/jsdom/node_modules/parse5/dist/parser/formatting-element-list.d.ts","../../../node_modules/@types/jsdom/node_modules/parse5/dist/parser/index.d.ts","../../../node_modules/@types/jsdom/node_modules/parse5/dist/tree-adapters/default.d.ts","../../../node_modules/@types/jsdom/node_modules/parse5/dist/serializer/index.d.ts","../../../node_modules/@types/jsdom/node_modules/parse5/dist/common/foreign-content.d.ts","../../../node_modules/@types/jsdom/node_modules/parse5/dist/index.d.ts","../../../node_modules/@types/tough-cookie/index.d.ts","../../../node_modules/@types/jsdom/base.d.ts","../../../node_modules/@types/jsdom/index.d.ts","../../../node_modules/@types/json5/index.d.ts","../../../node_modules/@types/lodash/common/common.d.ts","../../../node_modules/@types/lodash/common/array.d.ts","../../../node_modules/@types/lodash/common/collection.d.ts","../../../node_modules/@types/lodash/common/date.d.ts","../../../node_modules/@types/lodash/common/function.d.ts","../../../node_modules/@types/lodash/common/lang.d.ts","../../../node_modules/@types/lodash/common/math.d.ts","../../../node_modules/@types/lodash/common/number.d.ts","../../../node_modules/@types/lodash/common/object.d.ts","../../../node_modules/@types/lodash/common/seq.d.ts","../../../node_modules/@types/lodash/common/string.d.ts","../../../node_modules/@types/lodash/common/util.d.ts","../../../node_modules/@types/lodash/index.d.ts","../../../node_modules/@types/lodash.uniqueid/index.d.ts","../../../node_modules/@types/parse-json/index.d.ts","../../../node_modules/@types/prop-types/index.d.ts","../../../node_modules/@types/react/global.d.ts","../../../node_modules/csstype/index.d.ts","../../../node_modules/@types/scheduler/tracing.d.ts","../../../node_modules/@types/react/index.d.ts","../../../node_modules/@types/react-dom/index.d.ts","../../../node_modules/@types/scheduler/index.d.ts","../../../node_modules/@types/semver/classes/semver.d.ts","../../../node_modules/@types/semver/functions/parse.d.ts","../../../node_modules/@types/semver/functions/valid.d.ts","../../../node_modules/@types/semver/functions/clean.d.ts","../../../node_modules/@types/semver/functions/inc.d.ts","../../../node_modules/@types/semver/functions/diff.d.ts","../../../node_modules/@types/semver/functions/major.d.ts","../../../node_modules/@types/semver/functions/minor.d.ts","../../../node_modules/@types/semver/functions/patch.d.ts","../../../node_modules/@types/semver/functions/prerelease.d.ts","../../../node_modules/@types/semver/functions/compare.d.ts","../../../node_modules/@types/semver/functions/rcompare.d.ts","../../../node_modules/@types/semver/functions/compare-loose.d.ts","../../../node_modules/@types/semver/functions/compare-build.d.ts","../../../node_modules/@types/semver/functions/sort.d.ts","../../../node_modules/@types/semver/functions/rsort.d.ts","../../../node_modules/@types/semver/functions/gt.d.ts","../../../node_modules/@types/semver/functions/lt.d.ts","../../../node_modules/@types/semver/functions/eq.d.ts","../../../node_modules/@types/semver/functions/neq.d.ts","../../../node_modules/@types/semver/functions/gte.d.ts","../../../node_modules/@types/semver/functions/lte.d.ts","../../../node_modules/@types/semver/functions/cmp.d.ts","../../../node_modules/@types/semver/functions/coerce.d.ts","../../../node_modules/@types/semver/classes/comparator.d.ts","../../../node_modules/@types/semver/classes/range.d.ts","../../../node_modules/@types/semver/functions/satisfies.d.ts","../../../node_modules/@types/semver/ranges/max-satisfying.d.ts","../../../node_modules/@types/semver/ranges/min-satisfying.d.ts","../../../node_modules/@types/semver/ranges/to-comparators.d.ts","../../../node_modules/@types/semver/ranges/min-version.d.ts","../../../node_modules/@types/semver/ranges/valid.d.ts","../../../node_modules/@types/semver/ranges/outside.d.ts","../../../node_modules/@types/semver/ranges/gtr.d.ts","../../../node_modules/@types/semver/ranges/ltr.d.ts","../../../node_modules/@types/semver/ranges/intersects.d.ts","../../../node_modules/@types/semver/ranges/simplify.d.ts","../../../node_modules/@types/semver/ranges/subset.d.ts","../../../node_modules/@types/semver/internals/identifiers.d.ts","../../../node_modules/@types/semver/index.d.ts","../../../node_modules/@types/stack-utils/index.d.ts","../../../node_modules/@types/testing-library__jest-dom/matchers.d.ts","../../../node_modules/@types/testing-library__jest-dom/index.d.ts","../../../node_modules/@types/yargs-parser/index.d.ts","../../../node_modules/@types/yargs/index.d.ts","../../../node_modules/@types/yauzl/index.d.ts"],"fileIdsList":[[47],[116],[47,48,49,50,51],[47,49],[66,95,96],[95],[66,95],[64,66,95,100,101],[97,101,102,106],[64,65,95,108],[65,95],[111],[112],[118,121,209],[117],[64,89,95,140,141,143],[142],[128,129,130],[125],[124,125],[124],[124,125,126,132,133,136,137,138,139],[125,133],[124,125,126,132,133,134,135],[124,133],[133,137],[125,126,127,131],[126],[124,125,133],[157],[145,147,148,149,150,151,152,153,154,155,156,157],[145,146,148,149,150,151,152,153,154,155,156,157],[146,147,148,149,150,151,152,153,154,155,156,157],[145,146,147,149,150,151,152,153,154,155,156,157],[145,146,147,148,150,151,152,153,154,155,156,157],[145,146,147,148,149,151,152,153,154,155,156,157],[145,146,147,148,149,150,152,153,154,155,156,157],[145,146,147,148,149,150,151,153,154,155,156,157],[145,146,147,148,149,150,151,152,154,155,156,157],[145,146,147,148,149,150,151,152,153,155,156,157],[145,146,147,148,149,150,151,152,153,154,156,157],[145,146,147,148,149,150,151,152,153,154,155,157],[145,146,147,148,149,150,151,152,153,154,155,156],[105],[104],[92,93],[64,71,80],[56,64,71],[80],[62,64,71],[64],[64,80,86],[64,71,80,86],[64,65,66,71,80,83,86],[64,66,83,86],[92,94],[62,64,80],[54],[64,80],[78,87,89],[60,62,71,80],[53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91],[71],[77],[164],[160,161,162,163],[167,206],[167,191,206],[206],[167],[167,192,206],[167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205],[192,206],[66,95,103,105],[121,123,208],[210],[64,80,95],[114,120],[118],[115,119],[36,39],[39],[36,37,38],[35,37,39,40,41,55,66,71,83,86,89],[42],[42,43],[65,68,72,73]],"fileInfos":[{"version":"44e584d4f6444f58791784f1d530875970993129442a847597db702a073ca68c","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"9a68c0c07ae2fa71b44384a839b7b8d81662a236d4b9ac30916718f7510b1b2d","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"9e8ca8ed051c2697578c023d9c29d6df689a083561feba5c14aedee895853999","affectsGlobalScope":true,"impliedFormat":1},{"version":"69e65d976bf166ce4a9e6f6c18f94d2424bf116e90837ace179610dbccad9b42","affectsGlobalScope":true,"impliedFormat":1},{"version":"6920e1448680767498a0b77c6a00a8e77d14d62c3da8967b171f1ddffa3c18e4","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"45d8ccb3dfd57355eb29749919142d4321a0aa4df6acdfc54e30433d7176600a","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"93495ff27b8746f55d19fcbcdbaccc99fd95f19d057aed1bd2c0cafe1335fbf0","affectsGlobalScope":true,"impliedFormat":1},{"version":"6fc23bb8c3965964be8c597310a2878b53a0306edb71d4b5a4dfe760186bcc01","affectsGlobalScope":true,"impliedFormat":1},{"version":"ea011c76963fb15ef1cdd7ce6a6808b46322c527de2077b6cfdf23ae6f5f9ec7","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"4738f2420687fd85629c9efb470793bb753709c2379e5f85bc1815d875ceadcd","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"9fc46429fbe091ac5ad2608c657201eb68b6f1b8341bd6d670047d32ed0a88fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"1a94697425a99354df73d9c8291e2ecd4dddd370aed4023c2d6dee6cccb32666","affectsGlobalScope":true,"impliedFormat":1},{"version":"479553e3779be7d4f68e9f40cdb82d038e5ef7592010100410723ceced22a0f7","affectsGlobalScope":true,"impliedFormat":1},{"version":"811c71eee4aa0ac5f7adf713323a5c41b0cf6c4e17367a34fbce379e12bbf0a4","affectsGlobalScope":true,"impliedFormat":1},{"version":"33358442698bb565130f52ba79bfd3d4d484ac85fe33f3cb1759c54d18201393","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"785b9d575b49124ce01b46f5b9402157c7611e6532effa562ac6aebec0074dfc","impliedFormat":1},{"version":"f3d8c757e148ad968f0d98697987db363070abada5f503da3c06aefd9d4248c1","impliedFormat":1},{"version":"dee5d387e2e6f3015cbf91fc0c13ed6f016f9c5c1f2ad9c62602f4fd398fa83a","impliedFormat":1},{"version":"67f129ed8b372622ff36b8b10e39d03e09e363a5ff7821105f92f085b8d1ccba","impliedFormat":1},{"version":"1b831600aabe1c065830d303d087189e1ccfc93a0ef1882eb58a336ec1ce9f2f","impliedFormat":1},{"version":"75f191b59fe7ce72d1d7d11d0f329a193843f54af93182fc5a65c37d0a82c85a","impliedFormat":1},{"version":"cd74c8275483d3fe0d07a9b4bba28845a8a611f0aa399e961dbd40e5d46dd9ad","impliedFormat":1},{"version":"f6451dc56be14d37a8b88ea62a143ea398ab44558cd530fb2cdeeea42695c849","impliedFormat":1},"1ffd0b4748a0e8e77b16bd4db1efa85266f24767efacdd8e6b87878ec44f5eef",{"version":"750603ec037233eb58b7308af75f463e9b1425314a0168ade8c96afa2dfd7eb0","signature":"035c4955bf4e062ce015bfca02d9de585cf36bb622c1a480cec856a8824f3728"},{"version":"7792194c38b38dc79682dd8bdc9ad91ddce6a578bad9a06065292208ddd75d48","signature":"d6c7e7fe7e8f3b80e77d715b5d0d632a6bdb41bfa6c96d464997d2f698366e9b"},{"version":"ae77d81a5541a8abb938a0efedf9ac4bea36fb3a24cc28cfa11c598863aba571","impliedFormat":1},{"version":"a28ac3e717907284b3910b8e9b3f9844a4e0b0a861bea7b923e5adf90f620330","impliedFormat":1},{"version":"2c8e55457aaf4902941dfdba4061935922e8ee6e120539c9801cd7b400fae050","impliedFormat":1},{"version":"82e5a50e17833a10eb091923b7e429dc846d42f1c6161eb6beeb964288d98a15","impliedFormat":1},{"version":"670a76db379b27c8ff42f1ba927828a22862e2ab0b0908e38b671f0e912cc5ed","impliedFormat":1},{"version":"691aea9772797ca98334eb743e7686e29325b02c6931391bcee4cc7bf27a9f3b","impliedFormat":1},{"version":"069bebfee29864e3955378107e243508b163e77ab10de6a5ee03ae06939f0bb9","impliedFormat":1},{"version":"fb928b21f5a16a1d64a8e2e74a3f389ace89da74820f070f893221213c50aa3c","affectsGlobalScope":true,"impliedFormat":1},{"version":"5cd9c902b221c5aca739cbc3fb4339c3c5115198808d4f5d7610a674e4b9c66d","impliedFormat":1},{"version":"fe892fea1e75a442fffb4a604d7eeb451e858787a9f2f01c4e83bf12a3b5048d","impliedFormat":1},{"version":"d5c80b931928fbd06f967ce4bdca24fbb37523773ac2c7c87458a689154351fb","impliedFormat":1},{"version":"fcd718b2feb2820a9844536a1a2fbc77a3da90820e02894d40f879a789f46560","impliedFormat":1},{"version":"525c8fc510d9632d2a0a9de2d41c3ac1cdd79ff44d3b45c6d81cacabb683528d","impliedFormat":1},{"version":"ece75b9bfc916f9ccc4e8a9ddee1dda5c987804fbe3b60a01fc120fae731c2ce","impliedFormat":1},{"version":"4e146a0b69c893ae1538aff8b76f4e8796755bdd45050a83099348d59863437e","impliedFormat":1},{"version":"a1dc9cfe8be39cbcef62692510b450ab35553ef39382715c88763d0c477704a9","impliedFormat":1},{"version":"05e732266b5a36789fd9eb846b1f45fec1b6e318b740e3f20fc22fd95f9ebf31","impliedFormat":1},{"version":"985c3d1b62a4a4f563e3ca3e3a47717cff7d82c81883d62ecf08d8417eb477c4","impliedFormat":1},{"version":"8059976d7f408e08be353de1833172139bbaa70fc33d01b98249f7226c122119","impliedFormat":1},{"version":"1733741cf2adc5926ac58c66004268cdc3d34b2ff6250f5114db14253ea02ce1","impliedFormat":1},{"version":"df18df925483862e8ff216d7b17e50b7311a3add2fb7feb128d321ec099352ca","impliedFormat":1},{"version":"b6b09f944889a23f19eba6e0f112030e55160c5e1a225012ab2349c582ba5595","impliedFormat":1},{"version":"152af7c23ec219f632afa2d861abc65993f56cd39a4f3a4018515dbc05950a74","impliedFormat":1},{"version":"3a0bdc4c5b6f84a1abb5356d7a7fa1f96ac6c5b5646eec3ef2b33c1ed095e155","impliedFormat":1},{"version":"03394bf8deb8781b490ae9266a843fbdf00647947d79e25fcbf1d89a9e9c8a66","impliedFormat":1},{"version":"56a15cc211894d79aa44cbb46c276bfd3f10458a61bff2dec99114db8a7e71e3","impliedFormat":1},{"version":"1a5366b0d4d0153955fd85777c72d35979dabc0537649da6eade09007c0d080a","impliedFormat":1},{"version":"61c84c3b0eb6e60196d15ae5e21793a1d4241c547f0bdd0529ffae838d1a073c","impliedFormat":1},{"version":"272522db288a7e03f14ff930407b776357082efce20369ea42239a57af9c7f81","impliedFormat":1},{"version":"3a8848a9c307429b861402cc69bc472ffe0c05b86474fc158723169161e16389","impliedFormat":1},{"version":"3f6a1fd73c9dc3bd7f4b79bc075297ca6527904df69b0f2c2c94e4c4c7d9a32c","impliedFormat":1},{"version":"8969e0b4d22ca77ad011c8fc4a25ec5d515bdfae4ecbd22608ed0d5c38829c1e","impliedFormat":1},{"version":"b2fe368abdc803b82d27bd27f168d106804422ade198c3c085e2519b195ebd26","impliedFormat":1},{"version":"93acebcaa2e94903a83cebf3f109eb2917acab902045ee8c3d8f69f29baafa68","impliedFormat":1},{"version":"8e2f9031210a8fc27af8844bf69f964307d6013c90336bea9fb5d6ba43248c78","impliedFormat":1},{"version":"17e157df6125098a1a34eb4d201ee4ac03bbe97e471ab5627bb2c40fce555948","impliedFormat":1},{"version":"b40652bf8ce4a18133b31349086523b219724dca8df3448c1a0742528e7ad5b9","impliedFormat":1},{"version":"4bdb7b15b3f9a3ee0b856c7b991d0e522f8ce92f7b66ae8ac00e61d1269dd10a","impliedFormat":1},{"version":"978aecd2e6bc2ac094e9a35eda98ff8586713857b3655e7c98ca5ed8f7d50662","impliedFormat":1},{"version":"a185b8e0d7a4ae078a79339d63e98177813aac39256f69f788eaf5c360aa756f","impliedFormat":1},{"version":"c6b71a0585467900820167370738cfc256e9635471725a7ba1d24a3a262984e5","impliedFormat":1},{"version":"8bf10278b5c28698a73f800fde911bcc33d405a15f7bddab1c4ade637b69a822","impliedFormat":1},{"version":"e880a08fbb0d9ee2f733f9183f4d1bdb75bc9e0e64060a8a1fc30540791fcded","impliedFormat":1},{"version":"b0b4974c11712db7a362ae6fa8ea0f0042a7c34da5f0c80302650ffe921e3d87","impliedFormat":1},{"version":"69fc4a10650eff3416ba5c2f7ce71744734928a7135ebe5a63c61d2d03ca3ec3","impliedFormat":1},{"version":"13918848c4e07d1094164112bd7fd151d61cbb949ceef340a2a4595cd609afb6","impliedFormat":1},{"version":"9af6a9de7bd818e68c4236f20027ff4b19387c2269a6952945d1a716c177cc4d","impliedFormat":1},{"version":"3497438242251378cf232f36a7fabac70e7bd8229d68dac8955534e63ffc8ff4","impliedFormat":1},{"version":"e61a21e9418f279bc480394a94d1581b2dee73747adcbdef999b6737e34d721b","impliedFormat":1},{"version":"e033253e77794e1595f01372623b631d986e04dcb47d08948301fd2652886a83","impliedFormat":1},{"version":"104c67f0da1bdf0d94865419247e20eded83ce7f9911a1aa75fc675c077ca66e","impliedFormat":1},{"version":"cc0d0b339f31ce0ab3b7a5b714d8e578ce698f1e13d7f8c60bfb766baeb1d35c","impliedFormat":1},{"version":"b8d8a69d95a2a0c585b6c0d4661d625d2449149525c22ff0bc1f58a8238f5bc1","affectsGlobalScope":true,"impliedFormat":1},{"version":"f96b9c87804c7d740a10f69271a74c9591435a8e3a3c2fa9bee4a71774cfce2f","impliedFormat":1},{"version":"2f5747b1508ccf83fad0c251ba1e5da2f5a30b78b09ffa1cfaf633045160afed","impliedFormat":1},{"version":"fedd311d427fdafac411b4e0edc0d1014668853679e021e04717a6de45ff5c0c","impliedFormat":1},{"version":"4881fd217f43f5bb1aedb124875448db8af1d5da1a25cd805946238d2f6038f7","affectsGlobalScope":true,"impliedFormat":1},{"version":"b71c603a539078a5e3a039b20f2b0a0d1708967530cf97dec8850a9ca45baa2b","impliedFormat":1},{"version":"d2a38ad7bb4676e7fd5d058a08105d81ac232c363ee56be0b401fc277d50dbb1","impliedFormat":1},{"version":"2ac2e08e0d0ed266849cb9da521c3be170a8bc111d25eeeb668c7dbf0ac4171a","impliedFormat":1},{"version":"34118be360cdd3381bbebbfd4b093c394460c8fc5df40688d58f45d86ab1448b","impliedFormat":1},{"version":"3b05c396564e51753e921e1cc4aae1cf7cd9be53c891cf2e81fa29f11c0bd373","impliedFormat":1},{"version":"963d59066dd6742da1918a6213a209bcc205b8ee53b1876ee2b4e6d80f97c85e","impliedFormat":1},{"version":"fd326577c62145816fe1acc306c734c2396487f76719d3785d4e825b34540b33","impliedFormat":1},{"version":"afe73051ff6a03a9565cbd8ebb0e956ee3df5e913ad5c1ded64218aabfa3dcb5","impliedFormat":1},{"version":"035a5df183489c2e22f3cf59fc1ed2b043d27f357eecc0eb8d8e840059d44245","impliedFormat":1},{"version":"a4809f4d92317535e6b22b01019437030077a76fec1d93b9881c9ed4738fcc54","impliedFormat":1},{"version":"5f53fa0bd22096d2a78533f94e02c899143b8f0f9891a46965294ee8b91a9434","impliedFormat":1},{"version":"cdcc132f207d097d7d3aa75615ab9a2e71d6a478162dde8b67f88ea19f3e54de","impliedFormat":1},{"version":"0d14fa22c41fdc7277e6f71473b20ebc07f40f00e38875142335d5b63cdfc9d2","impliedFormat":1},{"version":"c085e9aa62d1ae1375794c1fb927a445fa105fed891a7e24edbb1c3300f7384a","impliedFormat":1},{"version":"f315e1e65a1f80992f0509e84e4ae2df15ecd9ef73df975f7c98813b71e4c8da","impliedFormat":1},{"version":"5b9586e9b0b6322e5bfbd2c29bd3b8e21ab9d871f82346cb71020e3d84bae73e","impliedFormat":1},{"version":"3e70a7e67c2cb16f8cd49097360c0309fe9d1e3210ff9222e9dac1f8df9d4fb6","impliedFormat":1},{"version":"ab68d2a3e3e8767c3fba8f80de099a1cfc18c0de79e42cb02ae66e22dfe14a66","impliedFormat":1},{"version":"d96cc6598148bf1a98fb2e8dcf01c63a4b3558bdaec6ef35e087fd0562eb40ec","impliedFormat":1},{"version":"5b9586e9b0b6322e5bfbd2c29bd3b8e21ab9d871f82346cb71020e3d84bae73e","impliedFormat":1},{"version":"e9b76bb505b61fdb2b4347398776a0c3d081877cee7669f7ca09846aeb325c63","affectsGlobalScope":true,"impliedFormat":1},{"version":"19990350fca066265b2c190c9b6cde1229f35002ea2d4df8c9e397e9942f6c89","impliedFormat":99},{"version":"8fb8fdda477cd7382477ffda92c2bb7d9f7ef583b1aa531eb6b2dc2f0a206c10","impliedFormat":99},{"version":"66995b0c991b5c5d42eff1d950733f85482c7419f7296ab8952e03718169e379","impliedFormat":99},{"version":"9863f888da357e35e013ca3465b794a490a198226bd8232c2f81fb44e16ff323","impliedFormat":99},{"version":"3ee468ba409b231f05d8120a257d8fd52f81db173cfd55d2d38825d4a9e0d4d8","impliedFormat":1},{"version":"3ee468ba409b231f05d8120a257d8fd52f81db173cfd55d2d38825d4a9e0d4d8","impliedFormat":1},{"version":"8eda1b176639dc7e6dfb326bd10532e2de9e18c4f100ed9f3d0753b04e2c9f53","impliedFormat":1},{"version":"e61235deb17d4d200b1aebd5e1b78a9f7f03108d3fe73c522476de89f2169d88","impliedFormat":1},{"version":"fa292ea8941a603dc795593c5811d9b865b96e560f99dcfcec94705d5264296d","impliedFormat":99},{"version":"db085d2171d48938a99e851dafe0e486dce9859e5dfa73c21de5ed3d4d6fb0c5","impliedFormat":99},{"version":"fb741132c87a219532b69832d9389ed13db734b436ad3d0d62d722de86321869","impliedFormat":99},{"version":"a77be6fc44c876bc10c897107f84eaba10790913ebdcad40fcda7e47469b2160","impliedFormat":99},{"version":"0b098b627c5198819456b7466aef8253f562a6a64d66810804cfad6ff36204c6","impliedFormat":99},{"version":"91f5dbcdb25d145a56cffe957ec665256827892d779ef108eb2f3864faff523b","impliedFormat":99},{"version":"052ba354bab8fb943e0bc05a0769f7b81d7c3b3c6cd0f5cfa53c7b2da2a525c5","impliedFormat":99},{"version":"927955a3de5857e0a1c575ced5a4245e74e6821d720ed213141347dd1870197f","impliedFormat":99},{"version":"3eff03b683a39dd93f7fbac0c47d78ed2ac42d71089a04d1c999fa6c3307f9fd","impliedFormat":99},{"version":"03c258e060b7da220973f84b89615e4e9850e9b5d30b3a8e4840b3e3268ae8eb","impliedFormat":1},{"version":"fd0589ca571ad090b531d8c095e26caa53d4825c64d3ff2b2b1ab95d72294175","impliedFormat":1},{"version":"669843ecafb89ae1e944df06360e8966219e4c1c34c0d28aa2503272cdd444a7","affectsGlobalScope":true,"impliedFormat":1},{"version":"96d14f21b7652903852eef49379d04dbda28c16ed36468f8c9fa08f7c14c9538","impliedFormat":1},{"version":"7220461ab7f6d600b313ce621346c315c3a0ebc65b5c6f268488c5c55b68d319","impliedFormat":1},{"version":"f90d4c1ae3af9afb35920b984ba3e41bdd43f0dc7bae890b89fbd52b978f0cac","impliedFormat":1},{"version":"fcf79300e5257a23ed3bacaa6861d7c645139c6f7ece134d15e6669447e5e6db","impliedFormat":1},{"version":"187119ff4f9553676a884e296089e131e8cc01691c546273b1d0089c3533ce42","impliedFormat":1},{"version":"aa2c18a1b5a086bbcaae10a4efba409cc95ba7287d8cf8f2591b53704fea3dea","impliedFormat":1},{"version":"b88749bdb18fc1398370e33aa72bc4f88274118f4960e61ce26605f9b33c5ba2","impliedFormat":1},{"version":"0aaef8cded245bf5036a7a40b65622dd6c4da71f7a35343112edbe112b348a1e","impliedFormat":1},{"version":"00baffbe8a2f2e4875367479489b5d43b5fc1429ecb4a4cc98cfc3009095f52a","impliedFormat":1},{"version":"a873c50d3e47c21aa09fbe1e2023d9a44efb07cc0cb8c72f418bf301b0771fd3","impliedFormat":1},{"version":"7c14ccd2eaa82619fffc1bfa877eb68a012e9fb723d07ee98db451fadb618906","impliedFormat":1},{"version":"288d992cd0d35fd4bb5a0f23df62114b8bfbc53e55b96a4ad00dde7e6fb72e31","impliedFormat":1},{"version":"df996e25faa505f85aeb294d15ebe61b399cf1d1e49959cdfaf2cc0815c203f9","impliedFormat":1},{"version":"4f6a12044ee6f458db11964153830abbc499e73d065c51c329ec97407f4b13dd","impliedFormat":1},{"version":"f7bc2eb97d6cd2821d4b8cff502655b71bcafd633598d7acc46ef9cfe85b3915","impliedFormat":1},{"version":"916be7d770b0ae0406be9486ac12eb9825f21514961dd050594c4b250617d5a8","impliedFormat":1},{"version":"8c6aac56e9dddb1f02d8e75478b79da0d25a1d0e38e75d5b8947534f61f3785e","impliedFormat":1},{"version":"3b75495c77f85fef76a898491b2eff2e4eb80a37d798a8ad8b39a578c2303859","affectsGlobalScope":true,"impliedFormat":1},{"version":"4c68749a564a6facdf675416d75789ee5a557afda8960e0803cf6711fa569288","impliedFormat":1},{"version":"5f8f00356f6a82e21493b2d57b2178f11b00cf8960df00bd37bdcae24c9333ca","impliedFormat":1},{"version":"7577b9629b5506a5455712bcdaf427a46aecee09adf72fb8bfec5b6f10a2a724","affectsGlobalScope":true,"impliedFormat":1},{"version":"7c7542760e67c3ae72ef0fe76de9e867ed2cc54cd6fcff7a70e4a8c6f1753ad3","impliedFormat":1},{"version":"0c681cfae79b859ed0c5ddc1160c0ea0a529f5d81b3488fb0641105bd8757200","impliedFormat":1},{"version":"cc0700b1b97e18a3d5d9184470502d8762ec85158819d662730c3a8c5d702584","impliedFormat":1},{"version":"9871b7ee672bc16c78833bdab3052615834b08375cb144e4d2cba74473f4a589","impliedFormat":1},{"version":"c863198dae89420f3c552b5a03da6ed6d0acfa3807a64772b895db624b0de707","impliedFormat":1},{"version":"8b03a5e327d7db67112ebbc93b4f744133eda2c1743dbb0a990c61a8007823ef","impliedFormat":1},{"version":"86c73f2ee1752bac8eeeece234fd05dfcf0637a4fbd8032e4f5f43102faa8eec","impliedFormat":1},{"version":"42fad1f540271e35ca37cecda12c4ce2eef27f0f5cf0f8dd761d723c744d3159","impliedFormat":1},{"version":"ff3743a5de32bee10906aff63d1de726f6a7fd6ee2da4b8229054dfa69de2c34","impliedFormat":1},{"version":"83acd370f7f84f203e71ebba33ba61b7f1291ca027d7f9a662c6307d74e4ac22","impliedFormat":1},{"version":"1445cec898f90bdd18b2949b9590b3c012f5b7e1804e6e329fb0fe053946d5ec","impliedFormat":1},{"version":"0e5318ec2275d8da858b541920d9306650ae6ac8012f0e872fe66eb50321a669","impliedFormat":1},{"version":"cf530297c3fb3a92ec9591dd4fa229d58b5981e45fe6702a0bd2bea53a5e59be","impliedFormat":1},{"version":"c1f6f7d08d42148ddfe164d36d7aba91f467dbcb3caa715966ff95f55048b3a4","impliedFormat":1},{"version":"f4e9bf9103191ef3b3612d3ec0044ca4044ca5be27711fe648ada06fad4bcc85","impliedFormat":1},{"version":"0c1ee27b8f6a00097c2d6d91a21ee4d096ab52c1e28350f6362542b55380059a","impliedFormat":1},{"version":"7677d5b0db9e020d3017720f853ba18f415219fb3a9597343b1b1012cfd699f7","impliedFormat":1},{"version":"bc1c6bc119c1784b1a2be6d9c47addec0d83ef0d52c8fbe1f14a51b4dfffc675","impliedFormat":1},{"version":"52cf2ce99c2a23de70225e252e9822a22b4e0adb82643ab0b710858810e00bf1","impliedFormat":1},{"version":"770625067bb27a20b9826255a8d47b6b5b0a2d3dfcbd21f89904c731f671ba77","impliedFormat":1},{"version":"d1ed6765f4d7906a05968fb5cd6d1db8afa14dbe512a4884e8ea5c0f5e142c80","impliedFormat":1},{"version":"799c0f1b07c092626cf1efd71d459997635911bb5f7fc1196efe449bba87e965","impliedFormat":1},{"version":"2a184e4462b9914a30b1b5c41cf80c6d3428f17b20d3afb711fff3f0644001fd","impliedFormat":1},{"version":"9eabde32a3aa5d80de34af2c2206cdc3ee094c6504a8d0c2d6d20c7c179503cc","impliedFormat":1},{"version":"397c8051b6cfcb48aa22656f0faca2553c5f56187262135162ee79d2b2f6c966","impliedFormat":1},{"version":"a8ead142e0c87dcd5dc130eba1f8eeed506b08952d905c47621dc2f583b1bff9","impliedFormat":1},{"version":"a02f10ea5f73130efca046429254a4e3c06b5475baecc8f7b99a0014731be8b3","impliedFormat":1},{"version":"f77ff4cd234d3fd18ddd5aeadb6f94374511931976d41f4b9f594cb71f7ce6f3","impliedFormat":1},{"version":"4c9a0564bb317349de6a24eb4efea8bb79898fa72ad63a1809165f5bd42970dd","impliedFormat":1},{"version":"4f18b4e6081e5e980ef53ddf57b9c959d36cffe1eb153865f512a01aeffb5e1e","impliedFormat":1},{"version":"7f17d4846a88eca5fe71c4474ef687ee89c4acf9b5372ab9b2ee68644b7e0fe0","impliedFormat":1},{"version":"b444a410d34fb5e98aa5ee2b381362044f4884652e8bc8a11c8fe14bbd85518e","impliedFormat":1},{"version":"c35808c1f5e16d2c571aa65067e3cb95afeff843b259ecfa2fc107a9519b5392","impliedFormat":1},{"version":"14d5dc055143e941c8743c6a21fa459f961cbc3deedf1bfe47b11587ca4b3ef5","impliedFormat":1},{"version":"a3ad4e1fc542751005267d50a6298e6765928c0c3a8dce1572f2ba6ca518661c","impliedFormat":1},{"version":"f237e7c97a3a89f4591afd49ecb3bd8d14f51a1c4adc8fcae3430febedff5eb6","impliedFormat":1},{"version":"3ffdfbec93b7aed71082af62b8c3e0cc71261cc68d796665faa1e91604fbae8f","impliedFormat":1},{"version":"662201f943ed45b1ad600d03a90dffe20841e725203ced8b708c91fcd7f9379a","impliedFormat":1},{"version":"c9ef74c64ed051ea5b958621e7fb853fe3b56e8787c1587aefc6ea988b3c7e79","impliedFormat":1},{"version":"2462ccfac5f3375794b861abaa81da380f1bbd9401de59ffa43119a0b644253d","impliedFormat":1},{"version":"34baf65cfee92f110d6653322e2120c2d368ee64b3c7981dff08ed105c4f19b0","impliedFormat":1},{"version":"85f8ebd7f245e8bf29da270e8b53dcdd17528826ffd27176c5fc7e426213ef5a","impliedFormat":1},{"version":"ab82804a14454734010dcdcd43f564ff7b0389bee4c5692eec76ff5b30d4cf66","impliedFormat":1},{"version":"3f36c0c7508302f3dca3dc5ab0a66d822b2222f70c24bb1796ddb5c9d1168a05","impliedFormat":1},{"version":"b23d5b89c465872587e130f427b39458b8e3ad16385f98446e9e86151ba6eb15","affectsGlobalScope":true,"impliedFormat":1},{"version":"bae8d023ef6b23df7da26f51cea44321f95817c190342a36882e93b80d07a960","impliedFormat":1},{"version":"26a770cec4bd2e7dbba95c6e536390fffe83c6268b78974a93727903b515c4e7","impliedFormat":1},{"version":"74d5a87c3616cd5d8691059d531504403aa857e09cbaecb1c64dfb9ace0db185","impliedFormat":1}],"root":[44,45],"options":{"allowSyntheticDefaultImports":true,"composite":true,"esModuleInterop":true,"inlineSourceMap":false,"jsx":2,"module":1,"noUnusedLocals":true,"noUnusedParameters":true,"outDir":"./node","rootDir":"../src","skipLibCheck":true,"strict":false,"strictFunctionTypes":false,"target":5},"referencedMap":[[49,1],[117,2],[52,3],[48,1],[50,4],[51,1],[97,5],[98,6],[96,7],[102,8],[107,9],[109,10],[110,11],[112,12],[113,13],[123,14],[122,15],[142,16],[143,17],[131,18],[126,19],[139,20],[125,21],[140,22],[135,23],[136,24],[134,25],[138,26],[132,27],[127,28],[137,29],[133,20],[158,30],[146,31],[147,32],[145,33],[148,34],[149,35],[150,36],[151,37],[152,38],[153,39],[154,40],[155,41],[156,42],[157,43],[104,44],[105,45],[94,46],[56,47],[57,48],[60,49],[61,50],[63,51],[64,51],[65,52],[66,53],[67,54],[68,55],[95,56],[69,51],[71,57],[74,58],[78,59],[79,60],[80,51],[83,61],[92,62],[85,63],[86,64],[90,59],[91,49],[165,65],[164,66],[191,67],[192,68],[167,69],[170,69],[189,67],[190,67],[180,67],[179,70],[177,67],[172,67],[185,67],[183,67],[187,67],[171,67],[184,67],[188,67],[173,67],[174,67],[186,67],[168,67],[175,67],[176,67],[178,67],[182,67],[193,71],[181,67],[169,67],[206,72],[200,71],[202,73],[201,71],[194,71],[195,71],[197,71],[199,71],[203,73],[204,73],[196,73],[198,73],[106,74],[209,75],[211,76],[212,77],[121,78],[119,79],[118,15],[120,80],[37,81],[40,82],[39,83],[42,84],[43,85],[44,86],[45,87]],"latestChangedDtsFile":"./node/monitored-sass-loader.d.ts","version":"5.6.3"}
|
|
1
|
+
{"fileNames":["../../../node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/typescript/lib/lib.dom.d.ts","../../../node_modules/typescript/lib/lib.dom.iterable.d.ts","../../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../node_modules/typescript/lib/lib.es2017.date.d.ts","../../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/typescript/lib/lib.esnext.intl.d.ts","../../../node_modules/typescript/lib/lib.decorators.d.ts","../../../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../../node_modules/@types/estree/index.d.ts","../../../node_modules/@types/json-schema/index.d.ts","../../../node_modules/schema-utils/declarations/ValidationError.d.ts","../../../node_modules/ajv/lib/ajv.d.ts","../../../node_modules/schema-utils/declarations/validate.d.ts","../../../node_modules/schema-utils/declarations/index.d.ts","../../../node_modules/webpack/node_modules/tapable/tapable.d.ts","../../../node_modules/webpack/types.d.ts","../../dotcom-build-css/dist/node/index.d.ts","../src/index.ts","../../../node_modules/@types/aria-query/index.d.ts","../../../node_modules/@babel/types/lib/index.d.ts","../../../node_modules/@types/babel__generator/index.d.ts","../../../node_modules/@babel/parser/typings/babel-parser.d.ts","../../../node_modules/@types/babel__template/index.d.ts","../../../node_modules/@types/babel__traverse/index.d.ts","../../../node_modules/@types/babel__core/index.d.ts","../../../node_modules/@types/node/globals.d.ts","../../../node_modules/@types/node/async_hooks.d.ts","../../../node_modules/@types/node/buffer.d.ts","../../../node_modules/@types/node/child_process.d.ts","../../../node_modules/@types/node/cluster.d.ts","../../../node_modules/@types/node/console.d.ts","../../../node_modules/@types/node/constants.d.ts","../../../node_modules/@types/node/crypto.d.ts","../../../node_modules/@types/node/dgram.d.ts","../../../node_modules/@types/node/dns.d.ts","../../../node_modules/@types/node/domain.d.ts","../../../node_modules/@types/node/events.d.ts","../../../node_modules/@types/node/fs.d.ts","../../../node_modules/@types/node/http.d.ts","../../../node_modules/@types/node/http2.d.ts","../../../node_modules/@types/node/https.d.ts","../../../node_modules/@types/node/inspector.d.ts","../../../node_modules/@types/node/module.d.ts","../../../node_modules/@types/node/net.d.ts","../../../node_modules/@types/node/os.d.ts","../../../node_modules/@types/node/path.d.ts","../../../node_modules/@types/node/perf_hooks.d.ts","../../../node_modules/@types/node/process.d.ts","../../../node_modules/@types/node/punycode.d.ts","../../../node_modules/@types/node/querystring.d.ts","../../../node_modules/@types/node/readline.d.ts","../../../node_modules/@types/node/repl.d.ts","../../../node_modules/@types/node/stream.d.ts","../../../node_modules/@types/node/string_decoder.d.ts","../../../node_modules/@types/node/timers.d.ts","../../../node_modules/@types/node/tls.d.ts","../../../node_modules/@types/node/trace_events.d.ts","../../../node_modules/@types/node/tty.d.ts","../../../node_modules/@types/node/url.d.ts","../../../node_modules/@types/node/util.d.ts","../../../node_modules/@types/node/v8.d.ts","../../../node_modules/@types/node/vm.d.ts","../../../node_modules/@types/node/worker_threads.d.ts","../../../node_modules/@types/node/zlib.d.ts","../../../node_modules/@types/node/ts3.6/base.d.ts","../../../node_modules/@types/node/assert.d.ts","../../../node_modules/@types/node/base.d.ts","../../../node_modules/@types/node/index.d.ts","../../../node_modules/@types/connect/index.d.ts","../../../node_modules/@types/body-parser/index.d.ts","../../../node_modules/@types/deep-eql/index.d.ts","../../../node_modules/assertion-error/index.d.ts","../../../node_modules/@types/chai/index.d.ts","../../../node_modules/@types/cheerio/index.d.ts","../../../node_modules/@types/deep-freeze/index.d.ts","../../../node_modules/@types/doctrine/index.d.ts","../../../node_modules/@types/range-parser/index.d.ts","../../../node_modules/@types/qs/index.d.ts","../../../node_modules/@types/express-serve-static-core/index.d.ts","../../../node_modules/@types/http-errors/index.d.ts","../../../node_modules/@types/mime/Mime.d.ts","../../../node_modules/@types/mime/index.d.ts","../../../node_modules/@types/serve-static/index.d.ts","../../../node_modules/@types/express/index.d.ts","../../../node_modules/@types/minimatch/index.d.ts","../../../node_modules/@types/glob/index.d.ts","../../../node_modules/@types/graceful-fs/index.d.ts","../../../node_modules/@types/html-minifier-terser/index.d.ts","../../../node_modules/@types/istanbul-lib-coverage/index.d.ts","../../../node_modules/@types/istanbul-lib-report/index.d.ts","../../../node_modules/@types/istanbul-reports/index.d.ts","../../../node_modules/@jest/expect-utils/build/index.d.ts","../../../node_modules/jest-matcher-utils/node_modules/chalk/index.d.ts","../../../node_modules/@sinclair/typebox/typebox.d.ts","../../../node_modules/@jest/schemas/build/index.d.ts","../../../node_modules/jest-diff/node_modules/pretty-format/build/index.d.ts","../../../node_modules/jest-diff/build/index.d.ts","../../../node_modules/jest-matcher-utils/build/index.d.ts","../../../node_modules/expect/build/index.d.ts","../../../node_modules/@types/jest/node_modules/pretty-format/build/index.d.ts","../../../node_modules/@types/jest/index.d.ts","../../../node_modules/@types/jsdom/node_modules/parse5/dist/common/html.d.ts","../../../node_modules/@types/jsdom/node_modules/parse5/dist/common/token.d.ts","../../../node_modules/@types/jsdom/node_modules/parse5/dist/common/error-codes.d.ts","../../../node_modules/@types/jsdom/node_modules/parse5/dist/tokenizer/preprocessor.d.ts","../../../node_modules/@types/jsdom/node_modules/entities/lib/generated/decode-data-html.d.ts","../../../node_modules/@types/jsdom/node_modules/entities/lib/generated/decode-data-xml.d.ts","../../../node_modules/@types/jsdom/node_modules/entities/lib/decode_codepoint.d.ts","../../../node_modules/@types/jsdom/node_modules/entities/lib/decode.d.ts","../../../node_modules/@types/jsdom/node_modules/parse5/dist/tokenizer/index.d.ts","../../../node_modules/@types/jsdom/node_modules/parse5/dist/tree-adapters/interface.d.ts","../../../node_modules/@types/jsdom/node_modules/parse5/dist/parser/open-element-stack.d.ts","../../../node_modules/@types/jsdom/node_modules/parse5/dist/parser/formatting-element-list.d.ts","../../../node_modules/@types/jsdom/node_modules/parse5/dist/parser/index.d.ts","../../../node_modules/@types/jsdom/node_modules/parse5/dist/tree-adapters/default.d.ts","../../../node_modules/@types/jsdom/node_modules/parse5/dist/serializer/index.d.ts","../../../node_modules/@types/jsdom/node_modules/parse5/dist/common/foreign-content.d.ts","../../../node_modules/@types/jsdom/node_modules/parse5/dist/index.d.ts","../../../node_modules/@types/tough-cookie/index.d.ts","../../../node_modules/@types/jsdom/base.d.ts","../../../node_modules/@types/jsdom/index.d.ts","../../../node_modules/@types/json5/index.d.ts","../../../node_modules/@types/lodash/common/common.d.ts","../../../node_modules/@types/lodash/common/array.d.ts","../../../node_modules/@types/lodash/common/collection.d.ts","../../../node_modules/@types/lodash/common/date.d.ts","../../../node_modules/@types/lodash/common/function.d.ts","../../../node_modules/@types/lodash/common/lang.d.ts","../../../node_modules/@types/lodash/common/math.d.ts","../../../node_modules/@types/lodash/common/number.d.ts","../../../node_modules/@types/lodash/common/object.d.ts","../../../node_modules/@types/lodash/common/seq.d.ts","../../../node_modules/@types/lodash/common/string.d.ts","../../../node_modules/@types/lodash/common/util.d.ts","../../../node_modules/@types/lodash/index.d.ts","../../../node_modules/@types/lodash.uniqueid/index.d.ts","../../../node_modules/@types/parse-json/index.d.ts","../../../node_modules/@types/prop-types/index.d.ts","../../../node_modules/@types/react/global.d.ts","../../../node_modules/csstype/index.d.ts","../../../node_modules/@types/scheduler/tracing.d.ts","../../../node_modules/@types/react/index.d.ts","../../../node_modules/@types/react-dom/index.d.ts","../../../node_modules/@types/resolve/index.d.ts","../../../node_modules/@types/scheduler/index.d.ts","../../../node_modules/@types/semver/functions/inc.d.ts","../../../node_modules/@types/semver/classes/semver.d.ts","../../../node_modules/@types/semver/functions/parse.d.ts","../../../node_modules/@types/semver/functions/valid.d.ts","../../../node_modules/@types/semver/functions/clean.d.ts","../../../node_modules/@types/semver/functions/diff.d.ts","../../../node_modules/@types/semver/functions/major.d.ts","../../../node_modules/@types/semver/functions/minor.d.ts","../../../node_modules/@types/semver/functions/patch.d.ts","../../../node_modules/@types/semver/functions/prerelease.d.ts","../../../node_modules/@types/semver/functions/compare.d.ts","../../../node_modules/@types/semver/functions/rcompare.d.ts","../../../node_modules/@types/semver/functions/compare-loose.d.ts","../../../node_modules/@types/semver/functions/compare-build.d.ts","../../../node_modules/@types/semver/functions/sort.d.ts","../../../node_modules/@types/semver/functions/rsort.d.ts","../../../node_modules/@types/semver/functions/gt.d.ts","../../../node_modules/@types/semver/functions/lt.d.ts","../../../node_modules/@types/semver/functions/eq.d.ts","../../../node_modules/@types/semver/functions/neq.d.ts","../../../node_modules/@types/semver/functions/gte.d.ts","../../../node_modules/@types/semver/functions/lte.d.ts","../../../node_modules/@types/semver/functions/cmp.d.ts","../../../node_modules/@types/semver/functions/coerce.d.ts","../../../node_modules/@types/semver/classes/comparator.d.ts","../../../node_modules/@types/semver/classes/range.d.ts","../../../node_modules/@types/semver/functions/satisfies.d.ts","../../../node_modules/@types/semver/ranges/max-satisfying.d.ts","../../../node_modules/@types/semver/ranges/min-satisfying.d.ts","../../../node_modules/@types/semver/ranges/to-comparators.d.ts","../../../node_modules/@types/semver/ranges/min-version.d.ts","../../../node_modules/@types/semver/ranges/valid.d.ts","../../../node_modules/@types/semver/ranges/outside.d.ts","../../../node_modules/@types/semver/ranges/gtr.d.ts","../../../node_modules/@types/semver/ranges/ltr.d.ts","../../../node_modules/@types/semver/ranges/intersects.d.ts","../../../node_modules/@types/semver/ranges/simplify.d.ts","../../../node_modules/@types/semver/ranges/subset.d.ts","../../../node_modules/@types/semver/internals/identifiers.d.ts","../../../node_modules/@types/semver/index.d.ts","../../../node_modules/@types/stack-utils/index.d.ts","../../../node_modules/@types/testing-library__jest-dom/matchers.d.ts","../../../node_modules/@types/testing-library__jest-dom/index.d.ts","../../../node_modules/@types/yargs-parser/index.d.ts","../../../node_modules/@types/yargs/index.d.ts","../../../node_modules/@types/yauzl/index.d.ts"],"fileIdsList":[[46],[120],[46,47,48,49,50],[46,48],[65,94,95],[97,98],[94],[65,94],[63,65,94,103,104],[96,104,105,109],[63,64,94,111],[64,94],[115],[116],[122,125,214],[121],[63,88,94,144,145,147],[146],[132,133,134],[129],[128,129],[128],[128,129,130,136,137,140,141,142,143],[129,137],[128,129,130,136,137,138,139],[128,137],[137,141],[129,130,131,135],[130],[128,129,137],[161],[149,151,152,153,154,155,156,157,158,159,160,161],[149,150,152,153,154,155,156,157,158,159,160,161],[150,151,152,153,154,155,156,157,158,159,160,161],[149,150,151,153,154,155,156,157,158,159,160,161],[149,150,151,152,154,155,156,157,158,159,160,161],[149,150,151,152,153,155,156,157,158,159,160,161],[149,150,151,152,153,154,156,157,158,159,160,161],[149,150,151,152,153,154,155,157,158,159,160,161],[149,150,151,152,153,154,155,156,158,159,160,161],[149,150,151,152,153,154,155,156,157,159,160,161],[149,150,151,152,153,154,155,156,157,158,160,161],[149,150,151,152,153,154,155,156,157,158,159,161],[149,150,151,152,153,154,155,156,157,158,159,160],[108],[107],[91,92],[63,70,79],[55,63,70],[79],[61,63,70],[63],[63,79,85],[63,70,79,85],[63,64,65,70,79,82,85],[63,65,82,85],[91,93],[61,63,79],[53],[63,79],[77,86,88],[59,61,70,79],[52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90],[70],[76],[168],[164,165,166,167],[173,211],[173,196,211],[172,211],[211],[173],[173,197,211],[172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210],[197,211],[65,94,106,108],[125,127,213],[215],[63,79,94],[118,124],[122],[119,123],[36,39],[39],[36,37,38],[35,37,39,40,41,54,65,70,82,85,88],[42],[42,43]],"fileInfos":[{"version":"44e584d4f6444f58791784f1d530875970993129442a847597db702a073ca68c","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"9a68c0c07ae2fa71b44384a839b7b8d81662a236d4b9ac30916718f7510b1b2d","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"9e8ca8ed051c2697578c023d9c29d6df689a083561feba5c14aedee895853999","affectsGlobalScope":true,"impliedFormat":1},{"version":"69e65d976bf166ce4a9e6f6c18f94d2424bf116e90837ace179610dbccad9b42","affectsGlobalScope":true,"impliedFormat":1},{"version":"6920e1448680767498a0b77c6a00a8e77d14d62c3da8967b171f1ddffa3c18e4","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"45d8ccb3dfd57355eb29749919142d4321a0aa4df6acdfc54e30433d7176600a","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"93495ff27b8746f55d19fcbcdbaccc99fd95f19d057aed1bd2c0cafe1335fbf0","affectsGlobalScope":true,"impliedFormat":1},{"version":"6fc23bb8c3965964be8c597310a2878b53a0306edb71d4b5a4dfe760186bcc01","affectsGlobalScope":true,"impliedFormat":1},{"version":"ea011c76963fb15ef1cdd7ce6a6808b46322c527de2077b6cfdf23ae6f5f9ec7","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"4738f2420687fd85629c9efb470793bb753709c2379e5f85bc1815d875ceadcd","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"9fc46429fbe091ac5ad2608c657201eb68b6f1b8341bd6d670047d32ed0a88fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"1a94697425a99354df73d9c8291e2ecd4dddd370aed4023c2d6dee6cccb32666","affectsGlobalScope":true,"impliedFormat":1},{"version":"479553e3779be7d4f68e9f40cdb82d038e5ef7592010100410723ceced22a0f7","affectsGlobalScope":true,"impliedFormat":1},{"version":"811c71eee4aa0ac5f7adf713323a5c41b0cf6c4e17367a34fbce379e12bbf0a4","affectsGlobalScope":true,"impliedFormat":1},{"version":"33358442698bb565130f52ba79bfd3d4d484ac85fe33f3cb1759c54d18201393","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"785b9d575b49124ce01b46f5b9402157c7611e6532effa562ac6aebec0074dfc","impliedFormat":1},{"version":"f3d8c757e148ad968f0d98697987db363070abada5f503da3c06aefd9d4248c1","impliedFormat":1},{"version":"dee5d387e2e6f3015cbf91fc0c13ed6f016f9c5c1f2ad9c62602f4fd398fa83a","impliedFormat":1},{"version":"67f129ed8b372622ff36b8b10e39d03e09e363a5ff7821105f92f085b8d1ccba","impliedFormat":1},{"version":"1b831600aabe1c065830d303d087189e1ccfc93a0ef1882eb58a336ec1ce9f2f","impliedFormat":1},{"version":"75f191b59fe7ce72d1d7d11d0f329a193843f54af93182fc5a65c37d0a82c85a","impliedFormat":1},{"version":"cd74c8275483d3fe0d07a9b4bba28845a8a611f0aa399e961dbd40e5d46dd9ad","impliedFormat":1},{"version":"f6451dc56be14d37a8b88ea62a143ea398ab44558cd530fb2cdeeea42695c849","impliedFormat":1},"1ffd0b4748a0e8e77b16bd4db1efa85266f24767efacdd8e6b87878ec44f5eef",{"version":"2a3d5c8a802787a0c4896dee8c4df4f065fdc4e1ab315200c0100f47ba076d1b","signature":"035c4955bf4e062ce015bfca02d9de585cf36bb622c1a480cec856a8824f3728"},{"version":"ae77d81a5541a8abb938a0efedf9ac4bea36fb3a24cc28cfa11c598863aba571","impliedFormat":1},{"version":"556ccd493ec36c7d7cb130d51be66e147b91cc1415be383d71da0f1e49f742a9","impliedFormat":1},{"version":"2c8e55457aaf4902941dfdba4061935922e8ee6e120539c9801cd7b400fae050","impliedFormat":1},{"version":"95aba78013d782537cc5e23868e736bec5d377b918990e28ed56110e3ae8b958","impliedFormat":1},{"version":"670a76db379b27c8ff42f1ba927828a22862e2ab0b0908e38b671f0e912cc5ed","impliedFormat":1},{"version":"691aea9772797ca98334eb743e7686e29325b02c6931391bcee4cc7bf27a9f3b","impliedFormat":1},{"version":"069bebfee29864e3955378107e243508b163e77ab10de6a5ee03ae06939f0bb9","impliedFormat":1},{"version":"fb928b21f5a16a1d64a8e2e74a3f389ace89da74820f070f893221213c50aa3c","affectsGlobalScope":true,"impliedFormat":1},{"version":"5cd9c902b221c5aca739cbc3fb4339c3c5115198808d4f5d7610a674e4b9c66d","impliedFormat":1},{"version":"fe892fea1e75a442fffb4a604d7eeb451e858787a9f2f01c4e83bf12a3b5048d","impliedFormat":1},{"version":"d5c80b931928fbd06f967ce4bdca24fbb37523773ac2c7c87458a689154351fb","impliedFormat":1},{"version":"fcd718b2feb2820a9844536a1a2fbc77a3da90820e02894d40f879a789f46560","impliedFormat":1},{"version":"525c8fc510d9632d2a0a9de2d41c3ac1cdd79ff44d3b45c6d81cacabb683528d","impliedFormat":1},{"version":"ece75b9bfc916f9ccc4e8a9ddee1dda5c987804fbe3b60a01fc120fae731c2ce","impliedFormat":1},{"version":"4e146a0b69c893ae1538aff8b76f4e8796755bdd45050a83099348d59863437e","impliedFormat":1},{"version":"a1dc9cfe8be39cbcef62692510b450ab35553ef39382715c88763d0c477704a9","impliedFormat":1},{"version":"05e732266b5a36789fd9eb846b1f45fec1b6e318b740e3f20fc22fd95f9ebf31","impliedFormat":1},{"version":"985c3d1b62a4a4f563e3ca3e3a47717cff7d82c81883d62ecf08d8417eb477c4","impliedFormat":1},{"version":"8059976d7f408e08be353de1833172139bbaa70fc33d01b98249f7226c122119","impliedFormat":1},{"version":"1733741cf2adc5926ac58c66004268cdc3d34b2ff6250f5114db14253ea02ce1","impliedFormat":1},{"version":"df18df925483862e8ff216d7b17e50b7311a3add2fb7feb128d321ec099352ca","impliedFormat":1},{"version":"b6b09f944889a23f19eba6e0f112030e55160c5e1a225012ab2349c582ba5595","impliedFormat":1},{"version":"152af7c23ec219f632afa2d861abc65993f56cd39a4f3a4018515dbc05950a74","impliedFormat":1},{"version":"3a0bdc4c5b6f84a1abb5356d7a7fa1f96ac6c5b5646eec3ef2b33c1ed095e155","impliedFormat":1},{"version":"03394bf8deb8781b490ae9266a843fbdf00647947d79e25fcbf1d89a9e9c8a66","impliedFormat":1},{"version":"56a15cc211894d79aa44cbb46c276bfd3f10458a61bff2dec99114db8a7e71e3","impliedFormat":1},{"version":"1a5366b0d4d0153955fd85777c72d35979dabc0537649da6eade09007c0d080a","impliedFormat":1},{"version":"61c84c3b0eb6e60196d15ae5e21793a1d4241c547f0bdd0529ffae838d1a073c","impliedFormat":1},{"version":"272522db288a7e03f14ff930407b776357082efce20369ea42239a57af9c7f81","impliedFormat":1},{"version":"3a8848a9c307429b861402cc69bc472ffe0c05b86474fc158723169161e16389","impliedFormat":1},{"version":"3f6a1fd73c9dc3bd7f4b79bc075297ca6527904df69b0f2c2c94e4c4c7d9a32c","impliedFormat":1},{"version":"8969e0b4d22ca77ad011c8fc4a25ec5d515bdfae4ecbd22608ed0d5c38829c1e","impliedFormat":1},{"version":"b2fe368abdc803b82d27bd27f168d106804422ade198c3c085e2519b195ebd26","impliedFormat":1},{"version":"93acebcaa2e94903a83cebf3f109eb2917acab902045ee8c3d8f69f29baafa68","impliedFormat":1},{"version":"8e2f9031210a8fc27af8844bf69f964307d6013c90336bea9fb5d6ba43248c78","impliedFormat":1},{"version":"17e157df6125098a1a34eb4d201ee4ac03bbe97e471ab5627bb2c40fce555948","impliedFormat":1},{"version":"b40652bf8ce4a18133b31349086523b219724dca8df3448c1a0742528e7ad5b9","impliedFormat":1},{"version":"4bdb7b15b3f9a3ee0b856c7b991d0e522f8ce92f7b66ae8ac00e61d1269dd10a","impliedFormat":1},{"version":"978aecd2e6bc2ac094e9a35eda98ff8586713857b3655e7c98ca5ed8f7d50662","impliedFormat":1},{"version":"a185b8e0d7a4ae078a79339d63e98177813aac39256f69f788eaf5c360aa756f","impliedFormat":1},{"version":"c6b71a0585467900820167370738cfc256e9635471725a7ba1d24a3a262984e5","impliedFormat":1},{"version":"8bf10278b5c28698a73f800fde911bcc33d405a15f7bddab1c4ade637b69a822","impliedFormat":1},{"version":"e880a08fbb0d9ee2f733f9183f4d1bdb75bc9e0e64060a8a1fc30540791fcded","impliedFormat":1},{"version":"b0b4974c11712db7a362ae6fa8ea0f0042a7c34da5f0c80302650ffe921e3d87","impliedFormat":1},{"version":"69fc4a10650eff3416ba5c2f7ce71744734928a7135ebe5a63c61d2d03ca3ec3","impliedFormat":1},{"version":"13918848c4e07d1094164112bd7fd151d61cbb949ceef340a2a4595cd609afb6","impliedFormat":1},{"version":"9af6a9de7bd818e68c4236f20027ff4b19387c2269a6952945d1a716c177cc4d","impliedFormat":1},{"version":"3497438242251378cf232f36a7fabac70e7bd8229d68dac8955534e63ffc8ff4","impliedFormat":1},{"version":"e61a21e9418f279bc480394a94d1581b2dee73747adcbdef999b6737e34d721b","impliedFormat":1},{"version":"e033253e77794e1595f01372623b631d986e04dcb47d08948301fd2652886a83","impliedFormat":1},{"version":"104c67f0da1bdf0d94865419247e20eded83ce7f9911a1aa75fc675c077ca66e","impliedFormat":1},{"version":"cc0d0b339f31ce0ab3b7a5b714d8e578ce698f1e13d7f8c60bfb766baeb1d35c","impliedFormat":1},{"version":"427fe2004642504828c1476d0af4270e6ad4db6de78c0b5da3e4c5ca95052a99","impliedFormat":1},{"version":"2eeffcee5c1661ddca53353929558037b8cf305ffb86a803512982f99bcab50d","impliedFormat":99},{"version":"9afb4cb864d297e4092a79ee2871b5d3143ea14153f62ef0bb04ede25f432030","affectsGlobalScope":true,"impliedFormat":99},{"version":"b8d8a69d95a2a0c585b6c0d4661d625d2449149525c22ff0bc1f58a8238f5bc1","affectsGlobalScope":true,"impliedFormat":1},{"version":"f96b9c87804c7d740a10f69271a74c9591435a8e3a3c2fa9bee4a71774cfce2f","impliedFormat":1},{"version":"6382638cfd6a8f05ac8277689de17ba4cd46f8aacefd254a993a53fde9ddc797","impliedFormat":1},{"version":"2f5747b1508ccf83fad0c251ba1e5da2f5a30b78b09ffa1cfaf633045160afed","impliedFormat":1},{"version":"fedd311d427fdafac411b4e0edc0d1014668853679e021e04717a6de45ff5c0c","impliedFormat":1},{"version":"4881fd217f43f5bb1aedb124875448db8af1d5da1a25cd805946238d2f6038f7","affectsGlobalScope":true,"impliedFormat":1},{"version":"b71c603a539078a5e3a039b20f2b0a0d1708967530cf97dec8850a9ca45baa2b","impliedFormat":1},{"version":"d2a38ad7bb4676e7fd5d058a08105d81ac232c363ee56be0b401fc277d50dbb1","impliedFormat":1},{"version":"2ac2e08e0d0ed266849cb9da521c3be170a8bc111d25eeeb668c7dbf0ac4171a","impliedFormat":1},{"version":"34118be360cdd3381bbebbfd4b093c394460c8fc5df40688d58f45d86ab1448b","impliedFormat":1},{"version":"3b05c396564e51753e921e1cc4aae1cf7cd9be53c891cf2e81fa29f11c0bd373","impliedFormat":1},{"version":"963d59066dd6742da1918a6213a209bcc205b8ee53b1876ee2b4e6d80f97c85e","impliedFormat":1},{"version":"fd326577c62145816fe1acc306c734c2396487f76719d3785d4e825b34540b33","impliedFormat":1},{"version":"afe73051ff6a03a9565cbd8ebb0e956ee3df5e913ad5c1ded64218aabfa3dcb5","impliedFormat":1},{"version":"ee65fe452abe1309389c5f50710f24114e08a302d40708101c4aa950a2a7d044","impliedFormat":1},{"version":"035a5df183489c2e22f3cf59fc1ed2b043d27f357eecc0eb8d8e840059d44245","impliedFormat":1},{"version":"a4809f4d92317535e6b22b01019437030077a76fec1d93b9881c9ed4738fcc54","impliedFormat":1},{"version":"5f53fa0bd22096d2a78533f94e02c899143b8f0f9891a46965294ee8b91a9434","impliedFormat":1},{"version":"cdcc132f207d097d7d3aa75615ab9a2e71d6a478162dde8b67f88ea19f3e54de","impliedFormat":1},{"version":"0d14fa22c41fdc7277e6f71473b20ebc07f40f00e38875142335d5b63cdfc9d2","impliedFormat":1},{"version":"c085e9aa62d1ae1375794c1fb927a445fa105fed891a7e24edbb1c3300f7384a","impliedFormat":1},{"version":"f315e1e65a1f80992f0509e84e4ae2df15ecd9ef73df975f7c98813b71e4c8da","impliedFormat":1},{"version":"5b9586e9b0b6322e5bfbd2c29bd3b8e21ab9d871f82346cb71020e3d84bae73e","impliedFormat":1},{"version":"3e70a7e67c2cb16f8cd49097360c0309fe9d1e3210ff9222e9dac1f8df9d4fb6","impliedFormat":1},{"version":"ab68d2a3e3e8767c3fba8f80de099a1cfc18c0de79e42cb02ae66e22dfe14a66","impliedFormat":1},{"version":"d96cc6598148bf1a98fb2e8dcf01c63a4b3558bdaec6ef35e087fd0562eb40ec","impliedFormat":1},{"version":"5b9586e9b0b6322e5bfbd2c29bd3b8e21ab9d871f82346cb71020e3d84bae73e","impliedFormat":1},{"version":"e9b76bb505b61fdb2b4347398776a0c3d081877cee7669f7ca09846aeb325c63","affectsGlobalScope":true,"impliedFormat":1},{"version":"19990350fca066265b2c190c9b6cde1229f35002ea2d4df8c9e397e9942f6c89","impliedFormat":99},{"version":"8fb8fdda477cd7382477ffda92c2bb7d9f7ef583b1aa531eb6b2dc2f0a206c10","impliedFormat":99},{"version":"66995b0c991b5c5d42eff1d950733f85482c7419f7296ab8952e03718169e379","impliedFormat":99},{"version":"9863f888da357e35e013ca3465b794a490a198226bd8232c2f81fb44e16ff323","impliedFormat":99},{"version":"3ee468ba409b231f05d8120a257d8fd52f81db173cfd55d2d38825d4a9e0d4d8","impliedFormat":1},{"version":"3ee468ba409b231f05d8120a257d8fd52f81db173cfd55d2d38825d4a9e0d4d8","impliedFormat":1},{"version":"8eda1b176639dc7e6dfb326bd10532e2de9e18c4f100ed9f3d0753b04e2c9f53","impliedFormat":1},{"version":"e61235deb17d4d200b1aebd5e1b78a9f7f03108d3fe73c522476de89f2169d88","impliedFormat":1},{"version":"fa292ea8941a603dc795593c5811d9b865b96e560f99dcfcec94705d5264296d","impliedFormat":99},{"version":"db085d2171d48938a99e851dafe0e486dce9859e5dfa73c21de5ed3d4d6fb0c5","impliedFormat":99},{"version":"fb741132c87a219532b69832d9389ed13db734b436ad3d0d62d722de86321869","impliedFormat":99},{"version":"a77be6fc44c876bc10c897107f84eaba10790913ebdcad40fcda7e47469b2160","impliedFormat":99},{"version":"0b098b627c5198819456b7466aef8253f562a6a64d66810804cfad6ff36204c6","impliedFormat":99},{"version":"91f5dbcdb25d145a56cffe957ec665256827892d779ef108eb2f3864faff523b","impliedFormat":99},{"version":"052ba354bab8fb943e0bc05a0769f7b81d7c3b3c6cd0f5cfa53c7b2da2a525c5","impliedFormat":99},{"version":"927955a3de5857e0a1c575ced5a4245e74e6821d720ed213141347dd1870197f","impliedFormat":99},{"version":"3eff03b683a39dd93f7fbac0c47d78ed2ac42d71089a04d1c999fa6c3307f9fd","impliedFormat":99},{"version":"03c258e060b7da220973f84b89615e4e9850e9b5d30b3a8e4840b3e3268ae8eb","impliedFormat":1},{"version":"fd0589ca571ad090b531d8c095e26caa53d4825c64d3ff2b2b1ab95d72294175","impliedFormat":1},{"version":"669843ecafb89ae1e944df06360e8966219e4c1c34c0d28aa2503272cdd444a7","affectsGlobalScope":true,"impliedFormat":1},{"version":"96d14f21b7652903852eef49379d04dbda28c16ed36468f8c9fa08f7c14c9538","impliedFormat":1},{"version":"7220461ab7f6d600b313ce621346c315c3a0ebc65b5c6f268488c5c55b68d319","impliedFormat":1},{"version":"f90d4c1ae3af9afb35920b984ba3e41bdd43f0dc7bae890b89fbd52b978f0cac","impliedFormat":1},{"version":"fcf79300e5257a23ed3bacaa6861d7c645139c6f7ece134d15e6669447e5e6db","impliedFormat":1},{"version":"187119ff4f9553676a884e296089e131e8cc01691c546273b1d0089c3533ce42","impliedFormat":1},{"version":"aa2c18a1b5a086bbcaae10a4efba409cc95ba7287d8cf8f2591b53704fea3dea","impliedFormat":1},{"version":"b88749bdb18fc1398370e33aa72bc4f88274118f4960e61ce26605f9b33c5ba2","impliedFormat":1},{"version":"0aaef8cded245bf5036a7a40b65622dd6c4da71f7a35343112edbe112b348a1e","impliedFormat":1},{"version":"00baffbe8a2f2e4875367479489b5d43b5fc1429ecb4a4cc98cfc3009095f52a","impliedFormat":1},{"version":"a873c50d3e47c21aa09fbe1e2023d9a44efb07cc0cb8c72f418bf301b0771fd3","impliedFormat":1},{"version":"7c14ccd2eaa82619fffc1bfa877eb68a012e9fb723d07ee98db451fadb618906","impliedFormat":1},{"version":"288d992cd0d35fd4bb5a0f23df62114b8bfbc53e55b96a4ad00dde7e6fb72e31","impliedFormat":1},{"version":"df996e25faa505f85aeb294d15ebe61b399cf1d1e49959cdfaf2cc0815c203f9","impliedFormat":1},{"version":"4f6a12044ee6f458db11964153830abbc499e73d065c51c329ec97407f4b13dd","impliedFormat":1},{"version":"f7bc2eb97d6cd2821d4b8cff502655b71bcafd633598d7acc46ef9cfe85b3915","impliedFormat":1},{"version":"916be7d770b0ae0406be9486ac12eb9825f21514961dd050594c4b250617d5a8","impliedFormat":1},{"version":"8c6aac56e9dddb1f02d8e75478b79da0d25a1d0e38e75d5b8947534f61f3785e","impliedFormat":1},{"version":"3b75495c77f85fef76a898491b2eff2e4eb80a37d798a8ad8b39a578c2303859","affectsGlobalScope":true,"impliedFormat":1},{"version":"4c68749a564a6facdf675416d75789ee5a557afda8960e0803cf6711fa569288","impliedFormat":1},{"version":"5f8f00356f6a82e21493b2d57b2178f11b00cf8960df00bd37bdcae24c9333ca","impliedFormat":1},{"version":"7577b9629b5506a5455712bcdaf427a46aecee09adf72fb8bfec5b6f10a2a724","affectsGlobalScope":true,"impliedFormat":1},{"version":"7c7542760e67c3ae72ef0fe76de9e867ed2cc54cd6fcff7a70e4a8c6f1753ad3","impliedFormat":1},{"version":"5aca5a3bc07d2e16b6824a76c30378d6fb1b92e915d854315e1d1bd2d00974c9","impliedFormat":1},{"version":"0c681cfae79b859ed0c5ddc1160c0ea0a529f5d81b3488fb0641105bd8757200","impliedFormat":1},{"version":"ce6a3f09b8db73a7e9701aca91a04b4fabaf77436dd35b24482f9ee816016b17","impliedFormat":1},{"version":"20e086e5b64fdd52396de67761cc0e94693494deadb731264aac122adf08de3f","impliedFormat":1},{"version":"6e78f75403b3ec65efb41c70d392aeda94360f11cedc9fb2c039c9ea23b30962","impliedFormat":1},{"version":"c863198dae89420f3c552b5a03da6ed6d0acfa3807a64772b895db624b0de707","impliedFormat":1},{"version":"8b03a5e327d7db67112ebbc93b4f744133eda2c1743dbb0a990c61a8007823ef","impliedFormat":1},{"version":"42fad1f540271e35ca37cecda12c4ce2eef27f0f5cf0f8dd761d723c744d3159","impliedFormat":1},{"version":"ff3743a5de32bee10906aff63d1de726f6a7fd6ee2da4b8229054dfa69de2c34","impliedFormat":1},{"version":"83acd370f7f84f203e71ebba33ba61b7f1291ca027d7f9a662c6307d74e4ac22","impliedFormat":1},{"version":"1445cec898f90bdd18b2949b9590b3c012f5b7e1804e6e329fb0fe053946d5ec","impliedFormat":1},{"version":"0e5318ec2275d8da858b541920d9306650ae6ac8012f0e872fe66eb50321a669","impliedFormat":1},{"version":"cf530297c3fb3a92ec9591dd4fa229d58b5981e45fe6702a0bd2bea53a5e59be","impliedFormat":1},{"version":"c1f6f7d08d42148ddfe164d36d7aba91f467dbcb3caa715966ff95f55048b3a4","impliedFormat":1},{"version":"eefd2bbc8edb14c3bd1246794e5c070a80f9b8f3730bd42efb80df3cc50b9039","impliedFormat":1},{"version":"0c1ee27b8f6a00097c2d6d91a21ee4d096ab52c1e28350f6362542b55380059a","impliedFormat":1},{"version":"7677d5b0db9e020d3017720f853ba18f415219fb3a9597343b1b1012cfd699f7","impliedFormat":1},{"version":"bc1c6bc119c1784b1a2be6d9c47addec0d83ef0d52c8fbe1f14a51b4dfffc675","impliedFormat":1},{"version":"52cf2ce99c2a23de70225e252e9822a22b4e0adb82643ab0b710858810e00bf1","impliedFormat":1},{"version":"770625067bb27a20b9826255a8d47b6b5b0a2d3dfcbd21f89904c731f671ba77","impliedFormat":1},{"version":"d1ed6765f4d7906a05968fb5cd6d1db8afa14dbe512a4884e8ea5c0f5e142c80","impliedFormat":1},{"version":"799c0f1b07c092626cf1efd71d459997635911bb5f7fc1196efe449bba87e965","impliedFormat":1},{"version":"2a184e4462b9914a30b1b5c41cf80c6d3428f17b20d3afb711fff3f0644001fd","impliedFormat":1},{"version":"9eabde32a3aa5d80de34af2c2206cdc3ee094c6504a8d0c2d6d20c7c179503cc","impliedFormat":1},{"version":"397c8051b6cfcb48aa22656f0faca2553c5f56187262135162ee79d2b2f6c966","impliedFormat":1},{"version":"a8ead142e0c87dcd5dc130eba1f8eeed506b08952d905c47621dc2f583b1bff9","impliedFormat":1},{"version":"a02f10ea5f73130efca046429254a4e3c06b5475baecc8f7b99a0014731be8b3","impliedFormat":1},{"version":"c2576a4083232b0e2d9bd06875dd43d371dee2e090325a9eac0133fd5650c1cb","impliedFormat":1},{"version":"4c9a0564bb317349de6a24eb4efea8bb79898fa72ad63a1809165f5bd42970dd","impliedFormat":1},{"version":"f40ac11d8859092d20f953aae14ba967282c3bb056431a37fced1866ec7a2681","impliedFormat":1},{"version":"cc11e9e79d4746cc59e0e17473a59d6f104692fd0eeea1bdb2e206eabed83b03","impliedFormat":1},{"version":"b444a410d34fb5e98aa5ee2b381362044f4884652e8bc8a11c8fe14bbd85518e","impliedFormat":1},{"version":"c35808c1f5e16d2c571aa65067e3cb95afeff843b259ecfa2fc107a9519b5392","impliedFormat":1},{"version":"14d5dc055143e941c8743c6a21fa459f961cbc3deedf1bfe47b11587ca4b3ef5","impliedFormat":1},{"version":"a3ad4e1fc542751005267d50a6298e6765928c0c3a8dce1572f2ba6ca518661c","impliedFormat":1},{"version":"f237e7c97a3a89f4591afd49ecb3bd8d14f51a1c4adc8fcae3430febedff5eb6","impliedFormat":1},{"version":"3ffdfbec93b7aed71082af62b8c3e0cc71261cc68d796665faa1e91604fbae8f","impliedFormat":1},{"version":"662201f943ed45b1ad600d03a90dffe20841e725203ced8b708c91fcd7f9379a","impliedFormat":1},{"version":"c9ef74c64ed051ea5b958621e7fb853fe3b56e8787c1587aefc6ea988b3c7e79","impliedFormat":1},{"version":"2462ccfac5f3375794b861abaa81da380f1bbd9401de59ffa43119a0b644253d","impliedFormat":1},{"version":"34baf65cfee92f110d6653322e2120c2d368ee64b3c7981dff08ed105c4f19b0","impliedFormat":1},{"version":"a56fe175741cc8841835eb72e61fa5a34adcbc249ede0e3494c229f0750f6b85","impliedFormat":1},{"version":"ab82804a14454734010dcdcd43f564ff7b0389bee4c5692eec76ff5b30d4cf66","impliedFormat":1},{"version":"3f36c0c7508302f3dca3dc5ab0a66d822b2222f70c24bb1796ddb5c9d1168a05","impliedFormat":1},{"version":"b23d5b89c465872587e130f427b39458b8e3ad16385f98446e9e86151ba6eb15","affectsGlobalScope":true,"impliedFormat":1},{"version":"bae8d023ef6b23df7da26f51cea44321f95817c190342a36882e93b80d07a960","impliedFormat":1},{"version":"26a770cec4bd2e7dbba95c6e536390fffe83c6268b78974a93727903b515c4e7","impliedFormat":1},{"version":"74d5a87c3616cd5d8691059d531504403aa857e09cbaecb1c64dfb9ace0db185","impliedFormat":1}],"root":[44],"options":{"allowSyntheticDefaultImports":true,"composite":true,"esModuleInterop":true,"inlineSourceMap":false,"jsx":2,"module":1,"noUnusedLocals":true,"noUnusedParameters":true,"outDir":"./node","rootDir":"../src","skipLibCheck":true,"strict":false,"strictFunctionTypes":false,"target":5},"referencedMap":[[48,1],[121,2],[51,3],[47,1],[49,4],[50,1],[96,5],[99,6],[100,7],[95,8],[105,9],[110,10],[112,11],[113,12],[116,13],[117,14],[127,15],[126,16],[146,17],[147,18],[135,19],[130,20],[143,21],[129,22],[144,23],[139,24],[140,25],[138,26],[142,27],[136,28],[131,29],[141,30],[137,21],[162,31],[150,32],[151,33],[149,34],[152,35],[153,36],[154,37],[155,38],[156,39],[157,40],[158,41],[159,42],[160,43],[161,44],[107,45],[108,46],[93,47],[55,48],[56,49],[59,50],[60,51],[62,52],[63,52],[64,53],[65,54],[66,55],[67,56],[94,57],[68,52],[70,58],[73,59],[77,60],[78,61],[79,52],[82,62],[91,63],[84,64],[85,65],[89,60],[90,50],[169,66],[168,67],[196,68],[197,69],[173,70],[176,71],[194,68],[195,68],[185,68],[184,72],[182,68],[177,68],[190,68],[188,68],[192,68],[172,68],[189,68],[193,68],[178,68],[179,68],[191,68],[174,68],[180,68],[181,68],[183,68],[187,68],[198,73],[186,68],[175,68],[211,74],[205,73],[207,75],[206,73],[199,73],[200,73],[202,73],[204,73],[208,75],[209,75],[201,75],[203,75],[109,76],[214,77],[216,78],[217,79],[125,80],[123,81],[122,16],[124,82],[37,83],[40,84],[39,85],[42,86],[43,87],[44,88]],"latestChangedDtsFile":"./node/index.d.ts","version":"5.6.3"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@financial-times/dotcom-build-sass",
|
|
3
|
-
"version": "13.
|
|
3
|
+
"version": "13.12.0",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "dist/node/index.js",
|
|
6
6
|
"types": "dist/node/index.d.ts",
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
"webpack": "5.x"
|
|
21
21
|
},
|
|
22
22
|
"dependencies": {
|
|
23
|
-
"@financial-times/dotcom-build-css": "^13.
|
|
23
|
+
"@financial-times/dotcom-build-css": "^13.12.0",
|
|
24
24
|
"sass-embedded": "^1.67.0",
|
|
25
25
|
"sass-loader": "^13.3.2"
|
|
26
26
|
},
|
package/src/index.ts
CHANGED
|
@@ -39,7 +39,28 @@ export class PageKitSassPlugin {
|
|
|
39
39
|
// Disable formatting so that we don't spend time pretty printing
|
|
40
40
|
outputStyle: 'compressed',
|
|
41
41
|
// Enable Sass to @import source files from additional relative paths
|
|
42
|
-
includePaths: this.includePaths
|
|
42
|
+
includePaths: this.includePaths,
|
|
43
|
+
// Disable warnings for dependencies – we have lots of legacy origami
|
|
44
|
+
// libraries that are being migrated to modern CSS instead of updating
|
|
45
|
+
// these Sass deprecations.
|
|
46
|
+
quietDeps: true,
|
|
47
|
+
silenceDeprecations: [
|
|
48
|
+
// HACK:IM:260721 The current version of sass-loader does not support
|
|
49
|
+
// using the new JS API with Webpack's built-in module resolver.
|
|
50
|
+
// Rather than bumping the loader multiple major versions, let's just
|
|
51
|
+
// silence the deprecation warning as we're encouraging teams to
|
|
52
|
+
// adopt modern CSS instead.
|
|
53
|
+
'legacy-js-api',
|
|
54
|
+
// HACK:IM:260721 Whilst the quietDeps option will silence most
|
|
55
|
+
// deprecation warnings, it won't silence warnings for modules used
|
|
56
|
+
// as an entry point. We currently encourage consumers to include
|
|
57
|
+
// dotcom-ui-layout as an entry point, but its Sass includes some
|
|
58
|
+
// @imports, which are now deprecated, triggering additional
|
|
59
|
+
// warnings. Seeing as we're encouraging teams to move to modern CSS,
|
|
60
|
+
// let's just silence this deprecation warning rather than migrating
|
|
61
|
+
// the package to use @use.
|
|
62
|
+
'import'
|
|
63
|
+
]
|
|
43
64
|
}
|
|
44
65
|
}
|
|
45
66
|
|
|
@@ -60,7 +81,7 @@ export class PageKitSassPlugin {
|
|
|
60
81
|
// Enable use of Sass for CSS preprocessing
|
|
61
82
|
// https://github.com/webpack-contrib/sass-loader
|
|
62
83
|
{
|
|
63
|
-
loader: require.resolve('
|
|
84
|
+
loader: require.resolve('sass-loader'),
|
|
64
85
|
options: sassLoaderOptions
|
|
65
86
|
}
|
|
66
87
|
]
|
|
@@ -1,214 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
3
|
-
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
4
|
-
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
5
|
-
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
6
|
-
};
|
|
7
|
-
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
8
|
-
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
9
|
-
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
10
|
-
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
11
|
-
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
12
|
-
};
|
|
13
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
14
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
15
|
-
};
|
|
16
|
-
var _SassStats_monitorRemotely, _SassStats_noticeStrategies, _SassStats_noticeStrategy, _SassStats_noticeThrottleSeconds, _SassStats_noticeThrottlePercentage, _SassStats_stats, _SassStats_directory, _SassStats_file, _SassStats_startTime, _SassStats_endTime, _SassStats_read, _SassStats_write, _SassStats_report;
|
|
17
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
-
const fs_1 = __importDefault(require("fs"));
|
|
19
|
-
const path_1 = __importDefault(require("path"));
|
|
20
|
-
const os_1 = __importDefault(require("os"));
|
|
21
|
-
const sass_loader_1 = __importDefault(require("sass-loader"));
|
|
22
|
-
const https_1 = __importDefault(require("https"));
|
|
23
|
-
const logError = (message) => {
|
|
24
|
-
// eslint-disable-next-line no-console
|
|
25
|
-
console.log(`\n⛔️😭dotcom-build-sass: ${message}. Please report to #origami-support in Slack, so we can help move us away from Sass.\n`);
|
|
26
|
-
};
|
|
27
|
-
class SassStats {
|
|
28
|
-
constructor() {
|
|
29
|
-
_SassStats_monitorRemotely.set(this, process.env.FT_SASS_STATS_MONITOR === 'on');
|
|
30
|
-
_SassStats_noticeStrategies.set(this, ['throttle', 'never', 'always']);
|
|
31
|
-
_SassStats_noticeStrategy.set(this, __classPrivateFieldGet(this, _SassStats_noticeStrategies, "f").includes(process.env.FT_SASS_STATS_NOTICE)
|
|
32
|
-
? process.env.FT_SASS_STATS_NOTICE
|
|
33
|
-
: 'throttle');
|
|
34
|
-
_SassStats_noticeThrottleSeconds.set(this, typeof process.env.FT_SASS_STATS_NOTICE_THROTTLE_SECONDS === 'number'
|
|
35
|
-
? process.env.FT_SASS_STATS_NOTICE_THROTTLE_SECONDS
|
|
36
|
-
: 60 * 60 * 0.5); // show throttled notice given 30 mins since last notice
|
|
37
|
-
_SassStats_noticeThrottlePercentage.set(this, typeof process.env.FT_SASS_STATS_NOTICE_THROTTLE_PERCENTAGE === 'number'
|
|
38
|
-
? process.env.FT_SASS_STATS_NOTICE_THROTTLE_PERCENTAGE
|
|
39
|
-
: 30); // show throttled notice given a 30% increase
|
|
40
|
-
_SassStats_stats.set(this, { totalTime: 0, noticeDate: null, totalTimeAtLastNotice: 0 });
|
|
41
|
-
_SassStats_directory.set(this, path_1.default.join(os_1.default.tmpdir(), 'dotcom-build-sass'));
|
|
42
|
-
_SassStats_file.set(this, path_1.default.join(__classPrivateFieldGet(this, _SassStats_directory, "f"), 'sass-stats.json'));
|
|
43
|
-
_SassStats_startTime.set(this, void 0);
|
|
44
|
-
_SassStats_endTime.set(this, void 0);
|
|
45
|
-
this.buildCount = 0;
|
|
46
|
-
this.start = () => {
|
|
47
|
-
__classPrivateFieldGet(this, _SassStats_read, "f").call(this);
|
|
48
|
-
__classPrivateFieldSet(this, _SassStats_startTime, performance.now(), "f");
|
|
49
|
-
};
|
|
50
|
-
this.end = () => {
|
|
51
|
-
__classPrivateFieldSet(this, _SassStats_endTime, performance.now(), "f");
|
|
52
|
-
const updatedTotal = (__classPrivateFieldGet(this, _SassStats_stats, "f").totalTime += __classPrivateFieldGet(this, _SassStats_endTime, "f") - __classPrivateFieldGet(this, _SassStats_startTime, "f"));
|
|
53
|
-
__classPrivateFieldGet(this, _SassStats_write, "f").call(this, { totalTime: updatedTotal });
|
|
54
|
-
};
|
|
55
|
-
_SassStats_read.set(this, () => {
|
|
56
|
-
try {
|
|
57
|
-
// Restore stats from a temporary file if it exists.
|
|
58
|
-
// Reading from disk ensures that we can track stats across builds.
|
|
59
|
-
const statsFile = fs_1.default.readFileSync(__classPrivateFieldGet(this, _SassStats_file, "f"), 'utf-8');
|
|
60
|
-
__classPrivateFieldSet(this, _SassStats_stats, JSON.parse(statsFile), "f");
|
|
61
|
-
}
|
|
62
|
-
catch (_a) { }
|
|
63
|
-
return __classPrivateFieldGet(this, _SassStats_stats, "f");
|
|
64
|
-
});
|
|
65
|
-
_SassStats_write.set(this, (stats) => {
|
|
66
|
-
__classPrivateFieldSet(this, _SassStats_stats, Object.assign(__classPrivateFieldGet(this, _SassStats_stats, "f"), stats), "f");
|
|
67
|
-
fs_1.default.writeFileSync(__classPrivateFieldGet(this, _SassStats_file, "f"), JSON.stringify(__classPrivateFieldGet(this, _SassStats_stats, "f")));
|
|
68
|
-
});
|
|
69
|
-
this.sendMetric = () => {
|
|
70
|
-
if (!__classPrivateFieldGet(this, _SassStats_monitorRemotely, "f")) {
|
|
71
|
-
return;
|
|
72
|
-
}
|
|
73
|
-
if (!process.env.FT_SASS_BIZ_OPS_API_KEY) {
|
|
74
|
-
logError('We couldn\'t share your Sass build time, we\'re missing the environment variable "FT_SASS_BIZ_OPS_API_KEY". Please contact #origami-support with any questions.');
|
|
75
|
-
return;
|
|
76
|
-
}
|
|
77
|
-
if (!process.env.FT_SASS_BIZ_OPS_SYSTEM_CODE) {
|
|
78
|
-
logError('We couldn\'t share your Sass build time, we\'re missing the environment variable "FT_SASS_BIZ_OPS_SYSTEM_CODE". Please contact #origami-support with any questions.');
|
|
79
|
-
return;
|
|
80
|
-
}
|
|
81
|
-
const date = new Date();
|
|
82
|
-
const postData = JSON.stringify({
|
|
83
|
-
type: 'System',
|
|
84
|
-
metric: 'sass-build-time',
|
|
85
|
-
value: (__classPrivateFieldGet(this, _SassStats_endTime, "f") - __classPrivateFieldGet(this, _SassStats_startTime, "f")) / 1000,
|
|
86
|
-
date: date.toISOString(),
|
|
87
|
-
code: process.env.FT_SASS_BIZ_OPS_SYSTEM_CODE,
|
|
88
|
-
metadata: {
|
|
89
|
-
'node-env': process.env.NODE_ENV
|
|
90
|
-
}
|
|
91
|
-
});
|
|
92
|
-
const options = {
|
|
93
|
-
hostname: 'api.ft.com',
|
|
94
|
-
port: 443,
|
|
95
|
-
path: '/biz-ops-metrics/metric/add',
|
|
96
|
-
method: 'POST',
|
|
97
|
-
headers: {
|
|
98
|
-
'x-api-key': process.env.FT_SASS_BIZ_OPS_API_KEY,
|
|
99
|
-
'client-id': 'page-kit',
|
|
100
|
-
'Content-Type': 'application/json',
|
|
101
|
-
'Content-Length': postData.length
|
|
102
|
-
}
|
|
103
|
-
};
|
|
104
|
-
const request = https_1.default
|
|
105
|
-
.request(options, (response) => {
|
|
106
|
-
if (response.statusCode !== 200) {
|
|
107
|
-
logError(`We couldn\'t send your Sass build time metrics to biz-ops. Status code: ${response.statusCode}.`);
|
|
108
|
-
}
|
|
109
|
-
})
|
|
110
|
-
.on('error', (error) => {
|
|
111
|
-
logError(`We couldn\'t send your Sass build time metrics to biz-ops. Error: ${error}.`);
|
|
112
|
-
});
|
|
113
|
-
request.write(postData);
|
|
114
|
-
request.end();
|
|
115
|
-
};
|
|
116
|
-
this.reportAccordingToNoticeStrategy = () => {
|
|
117
|
-
let shouldReport;
|
|
118
|
-
switch (__classPrivateFieldGet(this, _SassStats_noticeStrategy, "f")) {
|
|
119
|
-
case 'never':
|
|
120
|
-
shouldReport = false;
|
|
121
|
-
break;
|
|
122
|
-
case 'always':
|
|
123
|
-
shouldReport = true;
|
|
124
|
-
break;
|
|
125
|
-
case 'throttle':
|
|
126
|
-
// Throttle notices to show a limited number per hour, or if the total sass build time
|
|
127
|
-
// has increased by a significant percentage. This favours more frequent reports to begin with.
|
|
128
|
-
const noticeTimeThrottle = Date.now() >= __classPrivateFieldGet(this, _SassStats_stats, "f").noticeDate + __classPrivateFieldGet(this, _SassStats_noticeThrottleSeconds, "f") * 1000;
|
|
129
|
-
const percentageTotalTimeThrottle = __classPrivateFieldGet(this, _SassStats_stats, "f").totalTime > 0 &&
|
|
130
|
-
(__classPrivateFieldGet(this, _SassStats_stats, "f").totalTime / __classPrivateFieldGet(this, _SassStats_stats, "f").totalTimeAtLastNotice - 1) * 100 >=
|
|
131
|
-
__classPrivateFieldGet(this, _SassStats_noticeThrottlePercentage, "f"); // % increase
|
|
132
|
-
shouldReport = !__classPrivateFieldGet(this, _SassStats_stats, "f").noticeDate || noticeTimeThrottle || percentageTotalTimeThrottle;
|
|
133
|
-
break;
|
|
134
|
-
default:
|
|
135
|
-
break;
|
|
136
|
-
}
|
|
137
|
-
if (shouldReport) {
|
|
138
|
-
__classPrivateFieldGet(this, _SassStats_report, "f").call(this);
|
|
139
|
-
}
|
|
140
|
-
};
|
|
141
|
-
_SassStats_report.set(this, () => {
|
|
142
|
-
const seconds = __classPrivateFieldGet(this, _SassStats_stats, "f").totalTime / 1000;
|
|
143
|
-
const minutes = seconds / 60;
|
|
144
|
-
const hours = seconds / 3600;
|
|
145
|
-
const time = hours > 1
|
|
146
|
-
? `${hours.toFixed(1)} hours`
|
|
147
|
-
: minutes > 1
|
|
148
|
-
? `${minutes.toFixed(0)} minutes`
|
|
149
|
-
: `${seconds.toFixed(0)} seconds`;
|
|
150
|
-
const emoji = hours > 2 ? ['🔥', '😭', '😱'] : hours >= 1 ? ['🔥', '😱'] : minutes > 10 ? ['⏱️', '😬'] : ['⏱️'];
|
|
151
|
-
let cta = `Share your high score in Slack #sass-to-css 🎉 And help us improve that:\n` +
|
|
152
|
-
`https://origami.ft.com/blog/2024/01/24/sass-build-times/\n\n`;
|
|
153
|
-
if (!__classPrivateFieldGet(this, _SassStats_monitorRemotely, "f")) {
|
|
154
|
-
cta =
|
|
155
|
-
`Help us improve build times by setting the "FT_SASS_STATS_MONITOR" environment variable.\n` +
|
|
156
|
-
`https://origami.ft.com/blog/2024/01/24/sass-build-times/ \n\n`;
|
|
157
|
-
}
|
|
158
|
-
// eslint-disable-next-line no-console
|
|
159
|
-
console.log(`\n\ndotcom-build-sass:\nYou have spent at least ${emoji.join(' ')} ${time} ${emoji
|
|
160
|
-
.reverse()
|
|
161
|
-
.join(' ')} waiting on FT Sass to compile.\n${cta}`);
|
|
162
|
-
__classPrivateFieldGet(this, _SassStats_write, "f").call(this, { noticeDate: Date.now(), totalTimeAtLastNotice: __classPrivateFieldGet(this, _SassStats_stats, "f").totalTime });
|
|
163
|
-
});
|
|
164
|
-
fs_1.default.mkdirSync(__classPrivateFieldGet(this, _SassStats_directory, "f"), { recursive: true });
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
_SassStats_monitorRemotely = new WeakMap(), _SassStats_noticeStrategies = new WeakMap(), _SassStats_noticeStrategy = new WeakMap(), _SassStats_noticeThrottleSeconds = new WeakMap(), _SassStats_noticeThrottlePercentage = new WeakMap(), _SassStats_stats = new WeakMap(), _SassStats_directory = new WeakMap(), _SassStats_file = new WeakMap(), _SassStats_startTime = new WeakMap(), _SassStats_endTime = new WeakMap(), _SassStats_read = new WeakMap(), _SassStats_write = new WeakMap(), _SassStats_report = new WeakMap();
|
|
168
|
-
// We're proxying a few functions for monitoring purposes,
|
|
169
|
-
// we want to catch any monitoring errors silently.
|
|
170
|
-
const forgivingProxy = (target, task) => {
|
|
171
|
-
return new Proxy(target, {
|
|
172
|
-
apply(...args) {
|
|
173
|
-
try {
|
|
174
|
-
return task(...args);
|
|
175
|
-
}
|
|
176
|
-
catch (error) {
|
|
177
|
-
Reflect.apply(...args);
|
|
178
|
-
logError(`Failed to monitor Sass build. Error: ${error}`);
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
});
|
|
182
|
-
};
|
|
183
|
-
const stats = new SassStats();
|
|
184
|
-
const monitoredSassLoaderProxy = forgivingProxy(sass_loader_1.default, (target, sassLoaderThis, argumentsList) => {
|
|
185
|
-
stats.buildCount++;
|
|
186
|
-
// Start the timer, sass-loader has been called with Sass content.
|
|
187
|
-
// https://github.com/webpack-contrib/sass-loader/blob/03773152760434a2dd845008c504a09c0eb3fd91/src/index.js#L19
|
|
188
|
-
if (stats.buildCount === 1) {
|
|
189
|
-
stats.start();
|
|
190
|
-
}
|
|
191
|
-
// Assign our proxy to sass-loaders async function.
|
|
192
|
-
// https://github.com/webpack-contrib/sass-loader/blob/03773152760434a2dd845008c504a09c0eb3fd91/src/index.js#L29
|
|
193
|
-
const sassLoaderAsyncProxy = forgivingProxy(sassLoaderThis.async, (target, thisArg, argumentsList) => {
|
|
194
|
-
// Run sass-loader's async function as normal.
|
|
195
|
-
// Proxy the callback it returns.
|
|
196
|
-
// https://github.com/webpack-contrib/sass-loader/blob/03773152760434a2dd845008c504a09c0eb3fd91/src/index.js#L113
|
|
197
|
-
const sassLoaderCallback = Reflect.apply(target, thisArg, argumentsList);
|
|
198
|
-
return forgivingProxy(sassLoaderCallback, (target, thisArg, argumentsList) => {
|
|
199
|
-
// sass-loader's callback has been... called.
|
|
200
|
-
// Either we have sass, or the build failed.
|
|
201
|
-
stats.buildCount--;
|
|
202
|
-
if (stats.buildCount === 0) {
|
|
203
|
-
stats.end();
|
|
204
|
-
stats.reportAccordingToNoticeStrategy();
|
|
205
|
-
stats.sendMetric();
|
|
206
|
-
}
|
|
207
|
-
return Reflect.apply(target, thisArg, argumentsList);
|
|
208
|
-
});
|
|
209
|
-
});
|
|
210
|
-
sassLoaderThis.async = sassLoaderAsyncProxy;
|
|
211
|
-
// Run sass-loader as normal.
|
|
212
|
-
return Reflect.apply(target, sassLoaderThis, argumentsList);
|
|
213
|
-
});
|
|
214
|
-
exports.default = monitoredSassLoaderProxy;
|
|
@@ -1,237 +0,0 @@
|
|
|
1
|
-
import fs from 'fs'
|
|
2
|
-
import path from 'path'
|
|
3
|
-
import os from 'os'
|
|
4
|
-
import sassLoader from 'sass-loader'
|
|
5
|
-
import https from 'https'
|
|
6
|
-
|
|
7
|
-
const logError = (message) => {
|
|
8
|
-
// eslint-disable-next-line no-console
|
|
9
|
-
console.log(
|
|
10
|
-
`\n⛔️😭dotcom-build-sass: ${message}. Please report to #origami-support in Slack, so we can help move us away from Sass.\n`
|
|
11
|
-
)
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
class SassStats {
|
|
15
|
-
#monitorRemotely = process.env.FT_SASS_STATS_MONITOR === 'on'
|
|
16
|
-
#noticeStrategies = ['throttle', 'never', 'always']
|
|
17
|
-
#noticeStrategy = this.#noticeStrategies.includes(process.env.FT_SASS_STATS_NOTICE)
|
|
18
|
-
? process.env.FT_SASS_STATS_NOTICE
|
|
19
|
-
: 'throttle'
|
|
20
|
-
#noticeThrottleSeconds =
|
|
21
|
-
typeof process.env.FT_SASS_STATS_NOTICE_THROTTLE_SECONDS === 'number'
|
|
22
|
-
? process.env.FT_SASS_STATS_NOTICE_THROTTLE_SECONDS
|
|
23
|
-
: 60 * 60 * 0.5 // show throttled notice given 30 mins since last notice
|
|
24
|
-
#noticeThrottlePercentage =
|
|
25
|
-
typeof process.env.FT_SASS_STATS_NOTICE_THROTTLE_PERCENTAGE === 'number'
|
|
26
|
-
? process.env.FT_SASS_STATS_NOTICE_THROTTLE_PERCENTAGE
|
|
27
|
-
: 30 // show throttled notice given a 30% increase
|
|
28
|
-
#stats = { totalTime: 0, noticeDate: null, totalTimeAtLastNotice: 0 }
|
|
29
|
-
#directory = path.join(os.tmpdir(), 'dotcom-build-sass')
|
|
30
|
-
#file = path.join(this.#directory, 'sass-stats.json')
|
|
31
|
-
#startTime
|
|
32
|
-
#endTime
|
|
33
|
-
buildCount: number = 0
|
|
34
|
-
|
|
35
|
-
constructor() {
|
|
36
|
-
fs.mkdirSync(this.#directory, { recursive: true })
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
start = () => {
|
|
40
|
-
this.#read()
|
|
41
|
-
this.#startTime = performance.now()
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
end = () => {
|
|
45
|
-
this.#endTime = performance.now()
|
|
46
|
-
const updatedTotal = (this.#stats.totalTime += this.#endTime - this.#startTime)
|
|
47
|
-
this.#write({ totalTime: updatedTotal })
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
#read = () => {
|
|
51
|
-
try {
|
|
52
|
-
// Restore stats from a temporary file if it exists.
|
|
53
|
-
// Reading from disk ensures that we can track stats across builds.
|
|
54
|
-
const statsFile = fs.readFileSync(this.#file, 'utf-8')
|
|
55
|
-
this.#stats = JSON.parse(statsFile)
|
|
56
|
-
} catch {}
|
|
57
|
-
return this.#stats
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
#write = (stats) => {
|
|
61
|
-
this.#stats = Object.assign(this.#stats, stats)
|
|
62
|
-
fs.writeFileSync(this.#file, JSON.stringify(this.#stats))
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
sendMetric = () => {
|
|
66
|
-
if (!this.#monitorRemotely) {
|
|
67
|
-
return
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
if (!process.env.FT_SASS_BIZ_OPS_API_KEY) {
|
|
71
|
-
logError(
|
|
72
|
-
'We couldn\'t share your Sass build time, we\'re missing the environment variable "FT_SASS_BIZ_OPS_API_KEY". Please contact #origami-support with any questions.'
|
|
73
|
-
)
|
|
74
|
-
return
|
|
75
|
-
}
|
|
76
|
-
if (!process.env.FT_SASS_BIZ_OPS_SYSTEM_CODE) {
|
|
77
|
-
logError(
|
|
78
|
-
'We couldn\'t share your Sass build time, we\'re missing the environment variable "FT_SASS_BIZ_OPS_SYSTEM_CODE". Please contact #origami-support with any questions.'
|
|
79
|
-
)
|
|
80
|
-
return
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
const date = new Date()
|
|
84
|
-
const postData = JSON.stringify({
|
|
85
|
-
type: 'System',
|
|
86
|
-
metric: 'sass-build-time',
|
|
87
|
-
value: (this.#endTime - this.#startTime) / 1000,
|
|
88
|
-
date: date.toISOString(),
|
|
89
|
-
code: process.env.FT_SASS_BIZ_OPS_SYSTEM_CODE,
|
|
90
|
-
metadata: {
|
|
91
|
-
'node-env': process.env.NODE_ENV
|
|
92
|
-
}
|
|
93
|
-
})
|
|
94
|
-
|
|
95
|
-
const options = {
|
|
96
|
-
hostname: 'api.ft.com',
|
|
97
|
-
port: 443,
|
|
98
|
-
path: '/biz-ops-metrics/metric/add',
|
|
99
|
-
method: 'POST',
|
|
100
|
-
headers: {
|
|
101
|
-
'x-api-key': process.env.FT_SASS_BIZ_OPS_API_KEY,
|
|
102
|
-
'client-id': 'page-kit',
|
|
103
|
-
'Content-Type': 'application/json',
|
|
104
|
-
'Content-Length': postData.length
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
const request = https
|
|
109
|
-
.request(options, (response) => {
|
|
110
|
-
if (response.statusCode !== 200) {
|
|
111
|
-
logError(
|
|
112
|
-
`We couldn\'t send your Sass build time metrics to biz-ops. Status code: ${response.statusCode}.`
|
|
113
|
-
)
|
|
114
|
-
}
|
|
115
|
-
})
|
|
116
|
-
.on('error', (error) => {
|
|
117
|
-
logError(`We couldn\'t send your Sass build time metrics to biz-ops. Error: ${error}.`)
|
|
118
|
-
})
|
|
119
|
-
request.write(postData)
|
|
120
|
-
request.end()
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
reportAccordingToNoticeStrategy = () => {
|
|
124
|
-
let shouldReport
|
|
125
|
-
|
|
126
|
-
switch (this.#noticeStrategy) {
|
|
127
|
-
case 'never':
|
|
128
|
-
shouldReport = false
|
|
129
|
-
break
|
|
130
|
-
|
|
131
|
-
case 'always':
|
|
132
|
-
shouldReport = true
|
|
133
|
-
break
|
|
134
|
-
|
|
135
|
-
case 'throttle':
|
|
136
|
-
// Throttle notices to show a limited number per hour, or if the total sass build time
|
|
137
|
-
// has increased by a significant percentage. This favours more frequent reports to begin with.
|
|
138
|
-
const noticeTimeThrottle = Date.now() >= this.#stats.noticeDate + this.#noticeThrottleSeconds * 1000
|
|
139
|
-
const percentageTotalTimeThrottle =
|
|
140
|
-
this.#stats.totalTime > 0 &&
|
|
141
|
-
(this.#stats.totalTime / this.#stats.totalTimeAtLastNotice - 1) * 100 >=
|
|
142
|
-
this.#noticeThrottlePercentage // % increase
|
|
143
|
-
shouldReport = !this.#stats.noticeDate || noticeTimeThrottle || percentageTotalTimeThrottle
|
|
144
|
-
break
|
|
145
|
-
|
|
146
|
-
default:
|
|
147
|
-
break
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
if (shouldReport) {
|
|
151
|
-
this.#report()
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
#report = () => {
|
|
156
|
-
const seconds = this.#stats.totalTime / 1000
|
|
157
|
-
const minutes = seconds / 60
|
|
158
|
-
const hours = seconds / 3600
|
|
159
|
-
const time =
|
|
160
|
-
hours > 1
|
|
161
|
-
? `${hours.toFixed(1)} hours`
|
|
162
|
-
: minutes > 1
|
|
163
|
-
? `${minutes.toFixed(0)} minutes`
|
|
164
|
-
: `${seconds.toFixed(0)} seconds`
|
|
165
|
-
const emoji =
|
|
166
|
-
hours > 2 ? ['🔥', '😭', '😱'] : hours >= 1 ? ['🔥', '😱'] : minutes > 10 ? ['⏱️', '😬'] : ['⏱️']
|
|
167
|
-
|
|
168
|
-
let cta =
|
|
169
|
-
`Share your high score in Slack #sass-to-css 🎉 And help us improve that:\n` +
|
|
170
|
-
`https://origami.ft.com/blog/2024/01/24/sass-build-times/\n\n`
|
|
171
|
-
|
|
172
|
-
if (!this.#monitorRemotely) {
|
|
173
|
-
cta =
|
|
174
|
-
`Help us improve build times by setting the "FT_SASS_STATS_MONITOR" environment variable.\n` +
|
|
175
|
-
`https://origami.ft.com/blog/2024/01/24/sass-build-times/ \n\n`
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
// eslint-disable-next-line no-console
|
|
179
|
-
console.log(
|
|
180
|
-
`\n\ndotcom-build-sass:\nYou have spent at least ${emoji.join(' ')} ${time} ${emoji
|
|
181
|
-
.reverse()
|
|
182
|
-
.join(' ')} waiting on FT Sass to compile.\n${cta}`
|
|
183
|
-
)
|
|
184
|
-
|
|
185
|
-
this.#write({ noticeDate: Date.now(), totalTimeAtLastNotice: this.#stats.totalTime })
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
// We're proxying a few functions for monitoring purposes,
|
|
190
|
-
// we want to catch any monitoring errors silently.
|
|
191
|
-
const forgivingProxy = (target, task) => {
|
|
192
|
-
return new Proxy(target, {
|
|
193
|
-
apply(...args) {
|
|
194
|
-
try {
|
|
195
|
-
return task(...args)
|
|
196
|
-
} catch (error) {
|
|
197
|
-
Reflect.apply(...args)
|
|
198
|
-
logError(`Failed to monitor Sass build. Error: ${error}`)
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
})
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
const stats = new SassStats()
|
|
205
|
-
const monitoredSassLoaderProxy = forgivingProxy(sassLoader, (target, sassLoaderThis, argumentsList) => {
|
|
206
|
-
stats.buildCount++
|
|
207
|
-
// Start the timer, sass-loader has been called with Sass content.
|
|
208
|
-
// https://github.com/webpack-contrib/sass-loader/blob/03773152760434a2dd845008c504a09c0eb3fd91/src/index.js#L19
|
|
209
|
-
if (stats.buildCount === 1) {
|
|
210
|
-
stats.start()
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
// Assign our proxy to sass-loaders async function.
|
|
214
|
-
// https://github.com/webpack-contrib/sass-loader/blob/03773152760434a2dd845008c504a09c0eb3fd91/src/index.js#L29
|
|
215
|
-
const sassLoaderAsyncProxy = forgivingProxy(sassLoaderThis.async, (target, thisArg, argumentsList) => {
|
|
216
|
-
// Run sass-loader's async function as normal.
|
|
217
|
-
// Proxy the callback it returns.
|
|
218
|
-
// https://github.com/webpack-contrib/sass-loader/blob/03773152760434a2dd845008c504a09c0eb3fd91/src/index.js#L113
|
|
219
|
-
const sassLoaderCallback = Reflect.apply(target, thisArg, argumentsList)
|
|
220
|
-
return forgivingProxy(sassLoaderCallback, (target, thisArg, argumentsList) => {
|
|
221
|
-
// sass-loader's callback has been... called.
|
|
222
|
-
// Either we have sass, or the build failed.
|
|
223
|
-
stats.buildCount--
|
|
224
|
-
if (stats.buildCount === 0) {
|
|
225
|
-
stats.end()
|
|
226
|
-
stats.reportAccordingToNoticeStrategy()
|
|
227
|
-
stats.sendMetric()
|
|
228
|
-
}
|
|
229
|
-
return Reflect.apply(target, thisArg, argumentsList)
|
|
230
|
-
})
|
|
231
|
-
})
|
|
232
|
-
sassLoaderThis.async = sassLoaderAsyncProxy
|
|
233
|
-
// Run sass-loader as normal.
|
|
234
|
-
return Reflect.apply(target, sassLoaderThis, argumentsList)
|
|
235
|
-
})
|
|
236
|
-
|
|
237
|
-
export default monitoredSassLoaderProxy
|