@things-factory/weather 9.0.0-beta.41
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +8 -0
- package/assets/images/wind.png +0 -0
- package/client/bootstrap.ts +1 -0
- package/client/index.ts +0 -0
- package/client/ol-components/webgl-canvas-layer.ts +413 -0
- package/client/ol-components/webgl-image-static.ts +174 -0
- package/client/ol-components/wind.ts +120 -0
- package/client/pages/weather-page.ts +318 -0
- package/client/route.ts +7 -0
- package/client/tsconfig.json +11 -0
- package/config/config.development.js +25 -0
- package/config/config.production.js +7 -0
- package/data/geo-json/countries-max-geo.json +1 -0
- package/dist-client/bootstrap.d.ts +1 -0
- package/dist-client/bootstrap.js +2 -0
- package/dist-client/bootstrap.js.map +1 -0
- package/dist-client/index.d.ts +0 -0
- package/dist-client/index.js +2 -0
- package/dist-client/index.js.map +1 -0
- package/dist-client/ol-components/webgl-canvas-layer.d.ts +61 -0
- package/dist-client/ol-components/webgl-canvas-layer.js +364 -0
- package/dist-client/ol-components/webgl-canvas-layer.js.map +1 -0
- package/dist-client/ol-components/webgl-image-static.d.ts +41 -0
- package/dist-client/ol-components/webgl-image-static.js +135 -0
- package/dist-client/ol-components/webgl-image-static.js.map +1 -0
- package/dist-client/ol-components/wind.d.ts +3 -0
- package/dist-client/ol-components/wind.js +104 -0
- package/dist-client/ol-components/wind.js.map +1 -0
- package/dist-client/pages/weather-page.d.ts +18 -0
- package/dist-client/pages/weather-page.js +300 -0
- package/dist-client/pages/weather-page.js.map +1 -0
- package/dist-client/route.d.ts +1 -0
- package/dist-client/route.js +8 -0
- package/dist-client/route.js.map +1 -0
- package/dist-client/tsconfig.tsbuildinfo +1 -0
- package/dist-server/controllers/open-meteo-adapter.d.ts +4 -0
- package/dist-server/controllers/open-meteo-adapter.js +83 -0
- package/dist-server/controllers/open-meteo-adapter.js.map +1 -0
- package/dist-server/controllers/types.d.ts +55 -0
- package/dist-server/controllers/types.js +3 -0
- package/dist-server/controllers/types.js.map +1 -0
- package/dist-server/controllers/weather-controller.d.ts +12 -0
- package/dist-server/controllers/weather-controller.js +164 -0
- package/dist-server/controllers/weather-controller.js.map +1 -0
- package/dist-server/index.d.ts +1 -0
- package/dist-server/index.js +4 -0
- package/dist-server/index.js.map +1 -0
- package/dist-server/routers/geo-router.d.ts +59 -0
- package/dist-server/routers/geo-router.js +277 -0
- package/dist-server/routers/geo-router.js.map +1 -0
- package/dist-server/routers/weather-router.d.ts +1 -0
- package/dist-server/routers/weather-router.js +10 -0
- package/dist-server/routers/weather-router.js.map +1 -0
- package/dist-server/routes.d.ts +1 -0
- package/dist-server/routes.js +11 -0
- package/dist-server/routes.js.map +1 -0
- package/dist-server/services/chrome-renderer.d.ts +13 -0
- package/dist-server/services/chrome-renderer.js +137 -0
- package/dist-server/services/chrome-renderer.js.map +1 -0
- package/dist-server/services/headless-pool.d.ts +4 -0
- package/dist-server/services/headless-pool.js +89 -0
- package/dist-server/services/headless-pool.js.map +1 -0
- package/dist-server/tsconfig.tsbuildinfo +1 -0
- package/dist-server/utils/svg-utils.d.ts +35 -0
- package/dist-server/utils/svg-utils.js +89 -0
- package/dist-server/utils/svg-utils.js.map +1 -0
- package/dist-server/utils/tile-utils.d.ts +38 -0
- package/dist-server/utils/tile-utils.js +64 -0
- package/dist-server/utils/tile-utils.js.map +1 -0
- package/package.json +45 -0
- package/server/controllers/open-meteo-adapter.ts +91 -0
- package/server/controllers/types.ts +63 -0
- package/server/controllers/weather-controller.ts +176 -0
- package/server/index.ts +1 -0
- package/server/routers/geo-router.ts +297 -0
- package/server/routers/weather-router.ts +8 -0
- package/server/routes.ts +10 -0
- package/server/services/chrome-renderer.ts +175 -0
- package/server/services/data.json +8438 -0
- package/server/services/headless-pool.ts +97 -0
- package/server/tsconfig.json +10 -0
- package/server/utils/svg-utils.ts +108 -0
- package/server/utils/tile-utils.ts +77 -0
- package/things-factory.config.js +8 -0
- package/translations/en.json +1 -0
- package/translations/ja.json +1 -0
- package/translations/ko.json +1 -0
- package/translations/ms.json +1 -0
- package/translations/zh.json +1 -0
|
@@ -0,0 +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.es2019.d.ts","../../../node_modules/typescript/lib/lib.es2020.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.arraybuffer.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.es2019.array.d.ts","../../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../../node_modules/typescript/lib/lib.decorators.d.ts","../../../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../../node_modules/tslib/tslib.d.ts","../client/bootstrap.ts","../client/index.ts","../../../node_modules/@lit/reactive-element/css-tag.d.ts","../../../node_modules/@lit/reactive-element/reactive-controller.d.ts","../../../node_modules/@lit/reactive-element/reactive-element.d.ts","../../../node_modules/lit-html/directive.d.ts","../../../node_modules/@types/trusted-types/lib/index.d.ts","../../../node_modules/lit-html/lit-html.d.ts","../../../node_modules/lit-element/lit-element.d.ts","../../../node_modules/lit-html/is-server.d.ts","../../../node_modules/lit/index.d.ts","../../../node_modules/@lit/reactive-element/decorators/base.d.ts","../../../node_modules/@lit/reactive-element/decorators/custom-element.d.ts","../../../node_modules/@lit/reactive-element/decorators/property.d.ts","../../../node_modules/@lit/reactive-element/decorators/state.d.ts","../../../node_modules/@lit/reactive-element/decorators/event-options.d.ts","../../../node_modules/@lit/reactive-element/decorators/query.d.ts","../../../node_modules/@lit/reactive-element/decorators/query-all.d.ts","../../../node_modules/@lit/reactive-element/decorators/query-async.d.ts","../../../node_modules/@lit/reactive-element/decorators/query-assigned-nodes.d.ts","../../../node_modules/@lit/reactive-element/decorators/query-assigned-elements.d.ts","../../../node_modules/lit/decorators.d.ts","../../../node_modules/@operato/shell/dist/src/types/domain.d.ts","../../../node_modules/@operato/shell/dist/src/types/user.d.ts","../../../node_modules/@operato/shell/dist/src/types/role.d.ts","../../../node_modules/@operato/shell/dist/src/types/privilege.d.ts","../../../node_modules/@operato/shell/dist/src/types/types.d.ts","../../../node_modules/@operato/shell/dist/src/types/index.d.ts","../../../node_modules/redux/index.d.ts","../../../node_modules/pwa-helpers/lazy-reducer-enhancer.d.ts","../../../node_modules/@operato/shell/dist/src/store.d.ts","../../../node_modules/@operato/shell/dist/src/actions/app.d.ts","../../../node_modules/@operato/shell/dist/src/actions/route.d.ts","../../../node_modules/@operato/shell/dist/src/actions/busy.d.ts","../../../node_modules/@operato/shell/dist/src/actions/const.d.ts","../../../node_modules/@operato/shell/dist/src/actions/index.d.ts","../../../node_modules/@operato/shell/dist/src/app/pages/page-view.d.ts","../../../node_modules/@operato/shell/dist/src/object-store.d.ts","../../../node_modules/@operato/shell/dist/src/custom-alert.d.ts","../../../node_modules/@operato/shell/dist/src/index.d.ts","../../../node_modules/ol/structs/priorityqueue.d.ts","../../../node_modules/ol/disposable.d.ts","../../../node_modules/ol/events/event.d.ts","../../../node_modules/ol/events.d.ts","../../../node_modules/ol/events/target.d.ts","../../../node_modules/ol/observable.d.ts","../../../node_modules/ol/objecteventtype.d.ts","../../../node_modules/ol/object.d.ts","../../../node_modules/ol/proj/units.d.ts","../../../node_modules/ol/proj/projection.d.ts","../../../node_modules/ol/proj.d.ts","../../../node_modules/ol/geom/geometry.d.ts","../../../node_modules/ol/pixel.d.ts","../../../node_modules/ol/transform.d.ts","../../../node_modules/ol/geom/simplegeometry.d.ts","../../../node_modules/ol/geom/circle.d.ts","../../../node_modules/ol/coordinate.d.ts","../../../node_modules/ol/size.d.ts","../../../node_modules/ol/extent.d.ts","../../../node_modules/ol/tilerange.d.ts","../../../node_modules/ol/array.d.ts","../../../node_modules/ol/tilegrid/tilegrid.d.ts","../../../node_modules/ol/tilecoord.d.ts","../../../node_modules/ol/tile.d.ts","../../../node_modules/ol/tilequeue.d.ts","../../../node_modules/ol/collection.d.ts","../../../node_modules/ol/mapevent.d.ts","../../../node_modules/ol/mapbrowserevent.d.ts","../../../node_modules/ol/centerconstraint.d.ts","../../../node_modules/ol/resolutionconstraint.d.ts","../../../node_modules/ol/rotationconstraint.d.ts","../../../node_modules/ol/view.d.ts","../../../node_modules/ol/render/eventtype.d.ts","../../../node_modules/ol/render/event.d.ts","../../../node_modules/ol/source/source.d.ts","../../../node_modules/ol/color.d.ts","../../../node_modules/ol/colorlike.d.ts","../../../node_modules/ol/style/fill.d.ts","../../../node_modules/ol/style/stroke.d.ts","../../../node_modules/ol/geom/geometrycollection.d.ts","../../../node_modules/ol/geom/linearring.d.ts","../../../node_modules/ol/geom/linestring.d.ts","../../../node_modules/ol/geom/multilinestring.d.ts","../../../node_modules/ol/geom/point.d.ts","../../../node_modules/ol/geom/multipoint.d.ts","../../../node_modules/ol/geom/polygon.d.ts","../../../node_modules/ol/geom/multipolygon.d.ts","../../../node_modules/ol/geom.d.ts","../../../node_modules/ol/render/feature.d.ts","../../../node_modules/ol/datatile.d.ts","../../../node_modules/ol/style/image.d.ts","../../../node_modules/ol/render/canvas/zindexcontext.d.ts","../../../node_modules/ol/style/text.d.ts","../../../node_modules/@types/rbush/index.d.ts","../../../node_modules/ol/structs/rbush.d.ts","../../../node_modules/ol/render/canvas/executor.d.ts","../../../node_modules/ol/render/canvas.d.ts","../../../node_modules/ol/render/vectorcontext.d.ts","../../../node_modules/ol/render/canvas/immediate.d.ts","../../../node_modules/ol/render.d.ts","../../../node_modules/ol/style/style.d.ts","../../../node_modules/ol/feature.d.ts","../../../node_modules/ol/render/canvas/buildergroup.d.ts","../../../node_modules/ol/renderer/vector.d.ts","../../../node_modules/ol/renderer/map.d.ts","../../../node_modules/ol/resolution.d.ts","../../../node_modules/ol/image.d.ts","../../../node_modules/ol/renderer/layer.d.ts","../../../node_modules/ol/layer/layer.d.ts","../../../node_modules/ol/layer/base.d.ts","../../../node_modules/ol/layer/group.d.ts","../../../node_modules/ol/control/control.d.ts","../../../node_modules/ol/interaction/interaction.d.ts","../../../node_modules/ol/overlay.d.ts","../../../node_modules/ol/mapbrowsereventtype.d.ts","../../../node_modules/ol/mapeventtype.d.ts","../../../node_modules/ol/map.d.ts","../../../node_modules/ol/renderer/canvas/layer.d.ts","../../../node_modules/ol/structs/lrucache.d.ts","../../../node_modules/ol/format/feature.d.ts","../../../node_modules/ol/featureloader.d.ts","../../../node_modules/ol/vectortile.d.ts","../../../node_modules/ol/source/tileeventtype.d.ts","../../../node_modules/ol/tilegrid/wmts.d.ts","../../../node_modules/ol/tilegrid.d.ts","../../../node_modules/ol/source/tile.d.ts","../../../node_modules/ol/source/urltile.d.ts","../../../node_modules/ol/render/canvas/executorgroup.d.ts","../../../node_modules/ol/vectorrendertile.d.ts","../../../node_modules/ol/source/vectortile.d.ts","../../../node_modules/ol/renderer/canvas/vectortilelayer.d.ts","../../../node_modules/ol/source/vectoreventtype.d.ts","../../../node_modules/ol/source/vector.d.ts","../../../node_modules/ol/style/icon.d.ts","../../../node_modules/ol/expr/expression.d.ts","../../../node_modules/ol/style/flat.d.ts","../../../node_modules/ol/renderer/canvas/vectorlayer.d.ts","../../../node_modules/ol/source/image.d.ts","../../../node_modules/ol/layer/baseimage.d.ts","../../../node_modules/ol/layer/image.d.ts","../../../node_modules/ol/renderer/canvas/imagelayer.d.ts","../../../node_modules/ol/layer/vectorimage.d.ts","../../../node_modules/ol/renderer/canvas/vectorimagelayer.d.ts","../../../node_modules/ol/webgl.d.ts","../../../node_modules/ol/webgl/buffer.d.ts","../../../node_modules/ol/webgl/rendertarget.d.ts","../../../node_modules/ol/webgl/helper.d.ts","../../../node_modules/ol/renderer/webgl/layer.d.ts","../../../node_modules/ol/renderer/webgl/pointslayer.d.ts","../../../node_modules/ol/layer/basevector.d.ts","../../../node_modules/ol/layer/vectortile.d.ts","../../../node_modules/ol/imagetile.d.ts","../../../node_modules/ol/reproj/tile.d.ts","../../../node_modules/ol/source/tileimage.d.ts","../../../node_modules/ol/source/bingmaps.d.ts","../../../node_modules/ol/source/xyz.d.ts","../../../node_modules/ol/source/cartodb.d.ts","../../../node_modules/ol/source/cluster.d.ts","../../../node_modules/ol/source/datatile.d.ts","../../../node_modules/geotiff/dist-node/compression/basedecoder.d.ts","../../../node_modules/geotiff/dist-node/source/client/base.d.ts","../../../node_modules/geotiff/dist-node/globals.d.ts","../../../node_modules/geotiff/dist-node/rgb.d.ts","../../../node_modules/geotiff/dist-node/compression/index.d.ts","../../../node_modules/geotiff/dist-node/logging.d.ts","../../../node_modules/geotiff/dist-node/pool.d.ts","../../../node_modules/geotiff/dist-node/source/basesource.d.ts","../../../node_modules/geotiff/dist-node/geotiffimage.d.ts","../../../node_modules/geotiff/dist-node/dataslice.d.ts","../../../node_modules/geotiff/dist-node/geotiff.d.ts","../../../node_modules/ol/source/geotiff.d.ts","../../../node_modules/ol/source/google.d.ts","../../../node_modules/ol/source/iiif.d.ts","../../../node_modules/ol/source/imagearcgisrest.d.ts","../../../node_modules/ol/imagecanvas.d.ts","../../../node_modules/ol/source/imagecanvas.d.ts","../../../node_modules/ol/source/imagemapguide.d.ts","../../../node_modules/ol/source/imagestatic.d.ts","../../../node_modules/ol/source/imagetile.d.ts","../../../node_modules/ol/source/wms.d.ts","../../../node_modules/ol/source/imagewms.d.ts","../../../node_modules/ol/source/ogcmaptile.d.ts","../../../node_modules/ol/source/ogcvectortile.d.ts","../../../node_modules/ol/source/osm.d.ts","../../../node_modules/ol/source/raster.d.ts","../../../node_modules/ol/source/stadiamaps.d.ts","../../../node_modules/ol/source/tilearcgisrest.d.ts","../../../node_modules/ol/source/tiledebug.d.ts","../../../node_modules/ol/source/tilejson.d.ts","../../../node_modules/ol/source/tilewms.d.ts","../../../node_modules/ol/source/utfgrid.d.ts","../../../node_modules/ol/source/wmts.d.ts","../../../node_modules/ol/source/zoomify.d.ts","../../../node_modules/ol/source/arcgisrest.d.ts","../../../node_modules/ol/source/static.d.ts","../../../node_modules/ol/source/mapguide.d.ts","../../../node_modules/ol/source.d.ts","../../../node_modules/ol/renderer/canvas/tilelayer.d.ts","../../../node_modules/ol/layer/basetile.d.ts","../../../node_modules/ol/layer/tile.d.ts","../../../node_modules/ol/format/jsonfeature.d.ts","../../../node_modules/ol/format/esrijson.d.ts","../../../node_modules/ol/format/geojson.d.ts","../../../node_modules/ol/format/xmlfeature.d.ts","../../../node_modules/ol/xml.d.ts","../../../node_modules/ol/format/gmlbase.d.ts","../../../node_modules/ol/format/gml3.d.ts","../../../node_modules/ol/format/gml.d.ts","../../../node_modules/ol/format/gpx.d.ts","../../../node_modules/ol/format/textfeature.d.ts","../../../node_modules/ol/format/igc.d.ts","../../../node_modules/ol/format/iiifinfo.d.ts","../../../node_modules/ol/format/kml.d.ts","../../../node_modules/ol/format/mvt.d.ts","../../../node_modules/ol/format/xml.d.ts","../../../node_modules/ol/format/ows.d.ts","../../../node_modules/ol/format/polyline.d.ts","../../../node_modules/ol/format/topojson.d.ts","../../../node_modules/ol/format/filter/filter.d.ts","../../../node_modules/ol/format/wfs.d.ts","../../../node_modules/ol/format/wkb.d.ts","../../../node_modules/ol/format/wkt.d.ts","../../../node_modules/ol/format/wmscapabilities.d.ts","../../../node_modules/ol/format/wmsgetfeatureinfo.d.ts","../../../node_modules/ol/format/wmtscapabilities.d.ts","../../../node_modules/ol/format.d.ts","../../../node_modules/ol/has.d.ts","../../../node_modules/ol/webgl/basetilerepresentation.d.ts","../../../node_modules/ol/webgl/tiletexture.d.ts","../../../node_modules/ol/renderer/webgl/tilelayerbase.d.ts","../../../node_modules/ol/webgl/palettetexture.d.ts","../../../node_modules/ol/layer/webgltile.d.ts","../../../node_modules/ol/renderer/webgl/tilelayer.d.ts","../../../node_modules/ol/renderer/webgl/flowlayer.d.ts","../../../node_modules/ol/layer/flow.d.ts","../client/ol-components/webgl-image-static.ts","../../../node_modules/@types/colormap/index.d.ts","../../../node_modules/ol/layer/heatmap.d.ts","../../../node_modules/ol/style/regularshape.d.ts","../../../node_modules/ol/style/circle.d.ts","../../../node_modules/ol/style/iconimage.d.ts","../../../node_modules/ol/style.d.ts","../client/ol-components/wind.ts","../client/pages/weather-page.ts","../client/route.ts","../client/ol-components/webgl-canvas-layer.ts","../../../node_modules/@types/node/compatibility/disposable.d.ts","../../../node_modules/@types/node/compatibility/indexable.d.ts","../../../node_modules/@types/node/compatibility/iterators.d.ts","../../../node_modules/@types/node/compatibility/index.d.ts","../../../node_modules/@types/node/globals.typedarray.d.ts","../../../node_modules/@types/node/buffer.buffer.d.ts","../../../node_modules/buffer/index.d.ts","../../../node_modules/undici-types/header.d.ts","../../../node_modules/undici-types/readable.d.ts","../../../node_modules/undici-types/file.d.ts","../../../node_modules/undici-types/fetch.d.ts","../../../node_modules/undici-types/formdata.d.ts","../../../node_modules/undici-types/connector.d.ts","../../../node_modules/undici-types/client.d.ts","../../../node_modules/undici-types/errors.d.ts","../../../node_modules/undici-types/dispatcher.d.ts","../../../node_modules/undici-types/global-dispatcher.d.ts","../../../node_modules/undici-types/global-origin.d.ts","../../../node_modules/undici-types/pool-stats.d.ts","../../../node_modules/undici-types/pool.d.ts","../../../node_modules/undici-types/handlers.d.ts","../../../node_modules/undici-types/balanced-pool.d.ts","../../../node_modules/undici-types/agent.d.ts","../../../node_modules/undici-types/mock-interceptor.d.ts","../../../node_modules/undici-types/mock-agent.d.ts","../../../node_modules/undici-types/mock-client.d.ts","../../../node_modules/undici-types/mock-pool.d.ts","../../../node_modules/undici-types/mock-errors.d.ts","../../../node_modules/undici-types/proxy-agent.d.ts","../../../node_modules/undici-types/env-http-proxy-agent.d.ts","../../../node_modules/undici-types/retry-handler.d.ts","../../../node_modules/undici-types/retry-agent.d.ts","../../../node_modules/undici-types/api.d.ts","../../../node_modules/undici-types/interceptors.d.ts","../../../node_modules/undici-types/util.d.ts","../../../node_modules/undici-types/cookies.d.ts","../../../node_modules/undici-types/patch.d.ts","../../../node_modules/undici-types/websocket.d.ts","../../../node_modules/undici-types/eventsource.d.ts","../../../node_modules/undici-types/filereader.d.ts","../../../node_modules/undici-types/diagnostics-channel.d.ts","../../../node_modules/undici-types/content-type.d.ts","../../../node_modules/undici-types/cache.d.ts","../../../node_modules/undici-types/index.d.ts","../../../node_modules/@types/node/globals.d.ts","../../../node_modules/@types/node/assert.d.ts","../../../node_modules/@types/node/assert/strict.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/diagnostics_channel.d.ts","../../../node_modules/@types/node/dns.d.ts","../../../node_modules/@types/node/dns/promises.d.ts","../../../node_modules/@types/node/domain.d.ts","../../../node_modules/@types/node/dom-events.d.ts","../../../node_modules/@types/node/events.d.ts","../../../node_modules/@types/node/fs.d.ts","../../../node_modules/@types/node/fs/promises.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/readline/promises.d.ts","../../../node_modules/@types/node/repl.d.ts","../../../node_modules/@types/node/sea.d.ts","../../../node_modules/@types/node/sqlite.d.ts","../../../node_modules/@types/node/stream.d.ts","../../../node_modules/@types/node/stream/promises.d.ts","../../../node_modules/@types/node/stream/consumers.d.ts","../../../node_modules/@types/node/stream/web.d.ts","../../../node_modules/@types/node/string_decoder.d.ts","../../../node_modules/@types/node/test.d.ts","../../../node_modules/@types/node/timers.d.ts","../../../node_modules/@types/node/timers/promises.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/wasi.d.ts","../../../node_modules/@types/node/worker_threads.d.ts","../../../node_modules/@types/node/zlib.d.ts","../../../node_modules/@types/node/index.d.ts","../../../node_modules/@jest/expect-utils/build/index.d.ts","../../../node_modules/chalk/index.d.ts","../../../node_modules/@sinclair/typebox/typebox.d.ts","../../../node_modules/@jest/schemas/build/index.d.ts","../../../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/index.d.ts"],"fileIdsList":[[300,343],[300,343,396],[60,300,343],[53,60,300,343],[53,60,68,300,343],[62,300,343],[51,52,300,343],[80,81,82,83,300,343],[59,300,343],[76,79,84,85,86,87,300,343],[77,78,300,343],[71,72,73,74,75,300,343],[72,73,300,343],[71,72,74,300,343],[300,343,398,401],[300,340,343],[300,342,343],[343],[300,343,348,378],[300,343,344,349,355,356,363,375,386],[300,343,344,345,355,363],[295,296,297,300,343],[300,343,346,387],[300,343,347,348,356,364],[300,343,348,375,383],[300,343,349,351,355,363],[300,342,343,350],[300,343,351,352],[300,343,355],[300,343,353,355],[300,342,343,355],[300,343,355,356,357,375,386],[300,343,355,356,357,370,375,378],[300,338,343,391],[300,338,343,351,355,358,363,375,386],[300,343,355,356,358,359,363,375,383,386],[300,343,358,360,375,383,386],[298,299,300,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392],[300,343,355,361],[300,343,362,386],[300,343,351,355,363,375],[300,343,364],[300,343,365],[300,342,343,366],[300,340,341,342,343,344,345,346,347,348,349,350,351,352,353,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392],[300,343,368],[300,343,369],[300,343,355,370,371],[300,343,370,372,387,389],[300,343,355,375,376,378],[300,343,375,377],[300,343,375,376],[300,343,378],[300,343,379],[300,340,343,375],[300,343,355,381,382],[300,343,381,382],[300,343,348,363,375,383],[300,343,384],[300,343,363,385],[300,343,358,369,386],[300,343,348,387],[300,343,375,388],[300,343,362,389],[300,343,390],[300,343,348,355,357,366,375,386,389,391],[300,343,375,392],[300,343,394,400],[208,209,210,211,212,213,214,216,217,300,343],[214,215,218,300,343],[300,343,398],[300,343,395,399],[53,56,300,343],[56,300,343],[54,55,300,343],[61,62,63,64,65,66,67,68,69,300,343],[53,56,57,58,300,343],[105,106,107,300,343],[91,92,94,95,96,300,343],[106,124,300,343],[92,96,115,165,300,343],[98,104,300,343],[106,111,112,300,343],[91,93,300,343],[91,300,343],[90,91,92,300,343],[100,124,137,300,343],[98,99,105,106,300,343],[91,92,94,95,96,100,137,149,300,343],[98,107,136,150,168,300,343],[250,251,256,257,259,260,261,262,264,265,266,268,269,270,271,272,273,300,343],[100,150,168,249,300,343],[98,99,100,107,136,137,150,300,343],[99,100,150,168,249,300,343],[255,300,343],[100,107,129,130,131,132,133,134,135,150,168,253,254,300,343],[100,107,129,130,131,132,133,134,135,150,252,253,300,343],[150,252,300,343],[258,300,343],[221,300,343],[98,100,150,168,300,343],[126,127,139,141,149,182,252,300,343],[98,137,150,168,300,343],[263,300,343],[100,130,150,168,258,300,343],[99,100,150,249,300,343],[107,150,252,254,267,300,343],[252,300,343],[100,103,104,128,129,130,131,132,133,134,135,300,343],[100,103,105,300,343],[96,99,105,107,300,343],[100,300,343],[100,103,105,130,300,343],[100,103,105,132,300,343],[100,103,105,133,134,300,343],[100,103,104,105,107,129,132,300,343],[100,102,105,300,343],[93,107,138,154,155,300,343],[107,155,300,343],[111,112,300,343],[91,92,94,95,96,105,116,120,165,300,343],[91,92,94,95,96,107,123,157,300,343],[107,156,157,165,186,300,343],[91,92,94,96,107,121,122,156,157,158,165,174,300,343],[107,148,149,150,157,158,165,178,179,181,184,185,191,197,300,343],[107,138,165,183,207,247,282,300,343],[91,92,94,96,107,114,158,300,343],[107,136,150,181,197,198,300,343],[186,187,189,300,343],[91,92,94,96,101,107,120,121,122,123,150,156,157,158,165,300,343],[112,174,199,245,246,247,300,343],[107,148,149,150,158,165,181,184,191,198,300,343],[91,92,94,96,107,121,122,148,149,150,157,158,165,178,179,198,300,343],[107,138,165,183,195,200,207,247,279,281,300,343],[91,92,94,95,96,101,102,103,105,106,107,112,113,114,115,116,120,121,122,123,142,144,150,153,157,158,159,160,161,162,163,164,300,343],[101,105,115,165,300,343],[91,165,300,343],[91,92,94,95,300,343],[91,92,93,300,343],[91,92,94,95,96,101,105,106,107,165,300,343],[97,98,105,107,300,343],[97,105,107,110,300,343],[101,103,106,122,147,150,300,343],[96,102,106,125,126,127,140,141,144,300,343],[107,145,146,300,343],[102,103,105,106,107,140,142,143,145,149,150,300,343],[102,103,105,106,107,140,142,144,145,150,300,343],[99,100,102,104,107,128,130,131,132,133,134,135,137,139,141,146,149,150,300,343],[91,102,165,300,343],[99,107,136,149,150,300,343],[100,103,104,126,127,128,130,131,132,133,134,135,137,139,141,145,149,150,300,343],[101,138,155,165,166,188,300,343],[102,105,107,138,140,156,157,165,300,343],[98,101,107,112,165,166,167,174,199,200,245,248,300,343],[101,150,189,190,300,343],[99,101,149,150,151,165,166,176,198,300,343],[102,107,149,150,151,157,165,177,178,199,246,300,343],[94,101,105,150,152,153,155,157,165,300,343],[90,103,105,150,152,157,165,300,343],[91,99,103,123,149,150,151,157,300,343],[165,281,283,300,343],[156,157,165,195,300,343],[105,132,150,157,165,195,196,300,343],[101,195,196,277,278,279,280,283,300,343],[102,105,106,107,111,112,165,167,174,195,196,247,276,300,343],[98,110,111,112,200,300,343],[106,107,300,343],[107,110,111,123,174,175,178,181,186,202,203,204,205,206,207,219,220,221,222,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,300,343],[98,99,107,138,155,300,343],[109,111,112,202,300,343],[99,109,123,204,300,343],[100,107,123,132,150,181,300,343],[91,98,99,102,106,109,110,112,123,138,173,174,300,343],[99,138,207,218,300,343],[109,112,202,300,343],[99,106,107,109,123,202,300,343],[91,92,94,95,96,98,99,107,123,155,300,343],[99,123,155,186,300,343],[98,99,106,107,123,186,223,300,343],[99,155,186,300,343],[99,107,123,155,186,300,343],[99,106,109,110,123,138,200,207,300,343],[99,105,123,155,186,228,300,343],[138,155,300,343],[99,112,123,202,300,343],[99,109,123,137,150,168,170,178,300,343],[109,112,123,204,300,343],[90,91,92,94,95,96,98,107,123,157,165,186,223,300,343],[96,98,99,120,123,300,343],[109,112,204,300,343],[107,138,155,300,343],[91,92,94,95,96,98,99,106,109,110,111,112,123,171,173,300,343],[99,109,110,112,123,202,300,343],[99,109,110,112,174,227,300,343],[98,99,109,110,112,123,173,175,200,201,300,343],[106,109,112,123,202,300,343],[99,105,109,110,112,123,200,202,228,300,343],[91,98,99,109,110,111,112,123,174,300,343],[98,105,107,109,111,112,174,237,300,343],[91,92,94,95,96,98,105,107,114,123,136,137,150,168,169,180,300,343],[98,99,106,107,109,110,112,123,137,150,168,170,175,177,300,343],[98,99,105,106,107,138,155,228,300,343],[99,109,112,123,172,200,202,300,343],[99,106,109,112,123,173,202,300,343],[99,106,107,109,111,112,123,200,202,300,343],[107,142,300,343],[126,127,139,141,149,182,287,288,289,300,343],[106,126,127,149,287,300,343],[124,125,300,343],[124,149,182,183,300,343],[106,124,139,149,300,343],[93,106,124,300,343],[91,106,138,149,300,343],[106,125,126,127,139,149,300,343],[100,105,126,127,137,139,141,148,150,300,343],[106,126,127,149,300,343],[93,98,111,300,343],[110,300,343],[98,99,106,107,110,111,172,300,343],[105,106,107,108,109,111,300,343],[105,106,107,110,300,343],[89,91,105,111,112,165,300,343],[106,111,300,343],[101,105,300,343],[111,112,148,157,170,176,300,343],[98,107,111,112,150,168,169,300,343],[91,92,94,95,96,98,99,101,103,105,106,107,117,118,119,157,300,343],[93,110,112,195,300,343],[192,300,343],[90,102,165,192,193,194,300,343],[195,300,343],[138,193,200,201,276,300,343],[300,343,397],[77,300,343],[300,310,314,343,386],[300,310,343,375,386],[300,305,343],[300,307,310,343,383,386],[300,343,363,383],[300,343,393],[300,305,343,393],[300,307,310,343,363,386],[300,302,303,306,309,343,355,375,386],[300,310,317,343],[300,302,308,343],[300,310,331,332,343],[300,306,310,343,378,386,393],[300,331,343,393],[300,304,305,343,393],[300,310,343],[300,304,305,306,307,308,309,310,311,312,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,332,333,334,335,336,337,343],[300,310,325,343],[300,310,317,318,343],[300,308,310,318,319,343],[300,309,343],[300,302,305,310,343],[300,310,314,318,319,343],[300,314,343],[300,308,310,313,343,386],[300,302,307,310,317,343],[300,343,375],[300,305,310,331,343,391,393],[48,300,343],[48,99,188,224,300,343],[48,99,107,123,155,226,300,343],[48,99,173,207,300,343],[48,59,70,88,99,120,132,150,165,181,188,199,245,248,274,275,283,284,285,286,290,291,300,343],[48,292,300,343]],"fileInfos":[{"version":"69684132aeb9b5642cbcd9e22dff7818ff0ee1aa831728af0ecf97d3364d5546","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"092c2bfe125ce69dbb1223c85d68d4d2397d7d8411867b5cc03cec902c233763","affectsGlobalScope":true,"impliedFormat":1},{"version":"07f073f19d67f74d732b1adea08e1dc66b1b58d77cb5b43931dee3d798a2fd53","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","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":"936e80ad36a2ee83fc3caf008e7c4c5afe45b3cf3d5c24408f039c1d47bdc1df","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"fef8cfad2e2dc5f5b3d97a6f4f2e92848eb1b88e897bb7318cef0e2820bceaab","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","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":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"a6a5253138c5432c68a1510c70fe78a644fe2e632111ba778e1978010d6edfec","impliedFormat":1},{"version":"1f8f1bd57f21c36cc25547a0cb99a097f5e5443815789833d230741315a3a948","signature":"aac4ddff3d5c1247433870879e9838b1e23b81a9b62c75f59c3e1b64802f2b16"},"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",{"version":"e056bb30bf82271634daeee81f772f4a7960085f01f6d4d09c8da1ebe5f6a623","impliedFormat":99},{"version":"5e30131b6a5587fe666926ad1d9807e733c0a597ed12d682669fcaa331aea576","impliedFormat":99},{"version":"86492a546c3308feaf1dde967afd325c321483b5e96f5fa9e9b6e691dc23fa9e","affectsGlobalScope":true,"impliedFormat":99},{"version":"00cb63103f9670f8094c238a4a7e252c8b4c06ba371fea5c44add7e41b7247e4","impliedFormat":99},{"version":"15fe687c59d62741b4494d5e623d497d55eb38966ecf5bea7f36e48fc3fbe15e","impliedFormat":1},{"version":"43f58358870effc43ba93c92c040dee2285cbd8685ddfa77658e498780727c4e","impliedFormat":99},{"version":"9a318e3a8900672b85cd3c8c3a5acf51b88049557a3ae897ccdcf2b85a8f61f9","impliedFormat":99},{"version":"1bcd560deed90a43c51b08aa18f7f55229f2e30974ab5ed1b7bb5721be379013","impliedFormat":99},{"version":"dc08fe04e50bc24d1baded4f33e942222bbdd5d77d6341a93cfe6e4e4586a3be","impliedFormat":99},{"version":"cdeae34aca6700620ebf3f27cf7d439c3af97595dd6e2729fa4780483add5680","impliedFormat":99},{"version":"3ff87ea3471b51beaf4aa8fd8f4422862b11d343fdbb55bf383e0f8cc195a445","impliedFormat":99},{"version":"1cc188904259bd0985b24d9dc2a160891cb5e94210901466b951716fcdb4ff62","impliedFormat":99},{"version":"732fb71ecb695d6f36ddcbb72ebfe4ff6b6491d45101a00fa2b75a26b80d640f","impliedFormat":99},{"version":"039cb05125d7621f8143616c495b8e6b54249c4e64d2754b80ff93867f7f4b01","impliedFormat":99},{"version":"1b81f1fa82ad30af01ab1cae91ccaddc10c48f5916bbd6d282155e44a65d858d","impliedFormat":99},{"version":"a0fc7a02a75802678a67000607f20266cf1a49dc0e787967efe514e31b9ed0c3","impliedFormat":99},{"version":"5ebf098a1d81d400b8af82807cf19893700335cf91a7b9dbd83a5d737af34b11","impliedFormat":99},{"version":"101cf83ac3f9c5e1a7355a02e4fbe988877ef83c4ebec0ff0f02b2af022254a3","impliedFormat":99},{"version":"d017e2fcd44b46ca80cd2b592a6314e75f5caab5bda230f0f4a45e964049a43a","impliedFormat":99},{"version":"a8992b852521a66f63e0cedc6e1f054b28f972232b6fa5ca59771db6a1c8bbea","impliedFormat":99},{"version":"4d4cf93a6b4c81851ad759e4569b6feb7a701e80b13a6f9d8d9c6012bbb86bd6","impliedFormat":99},{"version":"2e6035af8f3e43bf95e4983329c8277d66f9b271106af27b99a85d1c1b9daf4a","impliedFormat":99},{"version":"df32d43311e85715e2a573239a4bbc5b78ebaf29af2af5fa8c85370197997515","impliedFormat":99},{"version":"3a792bbf677343364a1d9b7197c6e4e512764f17364efd656b1a3598f2a9e820","impliedFormat":99},{"version":"3d7c0b593a29d717b2b2ba3f03f819c3c48bf9e250d79c4a31860af80f177e8c","impliedFormat":99},{"version":"e576aa80090f8b6020355ca8d7f4184067c84389f4b92125be29e03b1f6c5194","impliedFormat":99},{"version":"fd624f7d7b264922476685870f08c5e1c6d6a0f05dee2429a9747b41f6b699d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"701978f3975f96e76e3ffc2e1762e3a97e3d323812049fb6fdfd559579b89708","impliedFormat":1},{"version":"4ab17f80ced148d509345cee706b2b85941515dd76e32cf47118bcdf6a4bd56a","affectsGlobalScope":true,"impliedFormat":99},{"version":"641089f0b8094ef74b9d4b3364d5dec1592d5e3b8a51c1ba491bc8872049e79a","impliedFormat":99},{"version":"950fc6ac97ce76785f03282f907aac4b2cbd8ac74b17c963f1389847962cbc20","impliedFormat":99},{"version":"b42033bf1067564808e4d360d79281667c2b3b0792c2d615ab641eb85974d4ba","impliedFormat":99},{"version":"7af29b0589483f7bb8a99405ddb849f34bc053146184561ed4179e02f5fe4d0f","impliedFormat":99},{"version":"ad3ee9f7d14ad8b7ae8094d0f1a2276656f7a970827d4030d1dead7c2d765f75","impliedFormat":99},{"version":"9c7568f9c75cf6a7d35dc9f18c5971cd5b21344c686c7cce56b3558d3305d40f","impliedFormat":99},{"version":"fc48282c397084016a939e1b3f91dcaf4199b6cba339d91d8b2dc2acade79762","impliedFormat":99},{"version":"3e62a55b950132d6eeacc607b7a1bff990d5484347b2be5a1f54db51af30ff25","impliedFormat":99},{"version":"cfe1163736972c7c0d23497a09d6349a435ec7a0e0622509693c4fc142e7a403","impliedFormat":99},{"version":"261da6052ff839095013024c2335572ef33d90437ef78ad70d82de8e01d29ee0","impliedFormat":99},{"version":"78e0700d5cfee6fa7fafe57dc3732d1fab553fc2d77f9fef78a1c03795c43d5b","impliedFormat":99},{"version":"93b1357e5a7f4e265fb8822b3bcc73e97b32629159dedff864a364d3d159f744","impliedFormat":99},{"version":"2188c6f8b838c719f0ab7a6a849670568f3e9816bc9600371695235368b265c5","impliedFormat":99},{"version":"9a3bb7fab877b1e0a56b14e5b8a675c06f47f5cdbf7ad48e1b98befb2071e7d1","impliedFormat":99},{"version":"23cf89320d50b837464d0a61f97f29474163b61c85536aba708dac242c8e46bc","impliedFormat":99},{"version":"e611eb41b1011a75bb70b3dab7c4014aa21869e0abc913b683d460e1d5239096","impliedFormat":99},{"version":"ed9a169e2efa9375a76347824eaba2294bfd76e7a228b5311ae3a5fbba2ba6ff","impliedFormat":99},{"version":"8428a068f743ef3e4fe4ce2bc5771529c07166f2ecad51dc4bcaa6cca6af19a9","impliedFormat":99},{"version":"40a1b984d98d7a61a9009d13595358d66d7a18b261b1bd46a29b5cdb98c5589b","impliedFormat":99},{"version":"43673598d2278a3779d2dd42c1f2cfa88c239210f345712f3739b640e792e31c","impliedFormat":99},{"version":"370187d4e2162f8f1302d5e67a809cef2b8b767ce8b3633fd11a4c4a93858c9f","impliedFormat":99},{"version":"4d31a5ff8148704d12f3328be1b68e90bd2b130b9bc08f4f3430edcf2b45a0ad","impliedFormat":99},{"version":"be2f1713ebfb0162ad9bfcd9a57ede0d4f152190e2bc7d32fe134300c3dffc9f","impliedFormat":99},{"version":"91c827a7e576be8e6cca560b49407278db1a3af5a7be6c35d5db4f81e625ec89","impliedFormat":99},{"version":"d4ddb74a12b931efebb962fa107cda8ae2f11ba5e157ebb1a809c35a4bcb2fc8","impliedFormat":99},{"version":"23b22738e54210908adf1817beb446b3ded355d1e5dc48d0478ffc36da109cfc","impliedFormat":99},{"version":"fcefdb7e69ef57581df9020cc3edff22a05d1a339c418c5024ffe5d1faed6bb4","impliedFormat":99},{"version":"503f82e586fc5301bf172a4f09f21a94203df080c958cb40be8aa5fc21b9545f","impliedFormat":99},{"version":"b218186e3418edd8a6cfc40684dde8b5168aeabfb5320719ab8b9dee43115059","impliedFormat":99},{"version":"3e169ab20fc4ffdc9eaee1667ce489d69daa23bc2b6a8c4f0491c8152be91d67","impliedFormat":99},{"version":"a5c65f18f87c12e6c71ba12a86c2e78c63c0e463ac94a33a63302ac9eb16ae4d","impliedFormat":99},{"version":"2d4d285547b7708d7b15fa4f65789b431039ee5b11796f0a09e905569aecb8bb","impliedFormat":99},{"version":"56bedb380581d0fe5cb37923fe2d3f5e9070088aa9f5e3a28bd464c32e9f36c6","impliedFormat":99},{"version":"085f41a730903385a40ea316898c243faf2d950e5326f90e54b49915e04d0d14","impliedFormat":99},{"version":"529adc07b75c4956de5071d56ed9b0a669a48f58026880be44fe354ab41408a6","impliedFormat":99},{"version":"2eb045594821f2cc4bdac3a88e5b5a32143aa986cb3e299a72fe63ad4a33fa6f","impliedFormat":99},{"version":"23a80307ba743cacb826833b44e34135a8a782b0ad7ce28434f1f48854156ffc","impliedFormat":99},{"version":"7bf22c59a9dfe9d5e33fd6091dfa10a0ca276bba712d35d01ed7b0eaa1fd2096","impliedFormat":99},{"version":"d6f2121d2023c626815d60049122dfeca076952bab59f5450c39ba1574f8c426","impliedFormat":99},{"version":"7b373e227015a57fd7b84be825e4c4916758743480b2f9837af778c9b21f8339","impliedFormat":99},{"version":"cb67e9865f6f0de3653f619d81f51fa2f04e02af1e55d79778634b7e997661ea","impliedFormat":99},{"version":"9e5e9ec7e39f35b0efd97514d71fe394baf93a08daa6de33635f80aa2c093f89","impliedFormat":99},{"version":"1acf8c9c969b76fc913ae3e50bfa6a8bc7167bccb347f799ff7fb858c081be87","impliedFormat":99},{"version":"e617028b9ff500b2d22dcc9666d3334ebc0f57b95b099404497811ed1bd3c839","impliedFormat":99},{"version":"911abee4c23fb825a7b0684ef486b77232404563a4e6fb84ff529f8765e10620","impliedFormat":99},{"version":"fe191844f9d99f633bbfba3e8bb5019bd8be726cef8357aa09b71e703f354d90","impliedFormat":99},{"version":"97d132def672ed1b3e19440ad9cdb0a7d5f66523de4b8564d23e3c4bf140616f","impliedFormat":99},{"version":"ebd1d745d673485a77a188e03bb41628b0adac8d9a1096df0c53f8140f97ab31","impliedFormat":99},{"version":"ba09d5d046b117224a1acab381959f88d62892bfef15c137f843c3a6873d7f85","impliedFormat":99},{"version":"101bf6691d57310408183815749bd1865734e9ca2c35713ac6c254552b063e64","impliedFormat":99},{"version":"8c345f51910014c4f5158337a4c89fc70b8a5cb7604a4666d81a92ab085b8c89","impliedFormat":99},{"version":"1ba7f7098246ddbc1862b9bd10a2fbc4fd766070f3138022d2fa2fc592e9aafc","impliedFormat":99},{"version":"7fdab7a3b3b9f9be65a3464f850fe9cfe76def54b1e6381a9dab439c9dad54ec","impliedFormat":99},{"version":"82f921deabc01275a495ec59ec5d29eff93fc0410b4611271ec3b225516ce3e5","impliedFormat":99},{"version":"427b3687642b5b2063852ef405e54a4ea137683558034b219f081434308fb328","impliedFormat":99},{"version":"710d8fd2a94048a1c3df7b05e4cf46fe52da5d28e105314118c3ad45f3f6a528","impliedFormat":99},{"version":"88630a73cd73a75e5c14994a20befa316293f01e4c774746929ba54c5cf75f5b","impliedFormat":99},{"version":"f4e2998f632caf3fc7c41e1f9f53d3bd80dbb6c77869a36863502e327b56d0c5","impliedFormat":99},{"version":"ce8ef6b6d7d546db85bb3deb287e77644aa8c014377ab539bd66b4dd657e7b25","impliedFormat":99},{"version":"016c400bd9b0db95e6febfc7ad7c130b8ccf56f6f92ec6abbf636fc1f6e7ebaf","impliedFormat":99},{"version":"8c6b6e3c12525ba61a7c22cdb265944644241e8d25ca6e7ec03ca849b53f8c65","impliedFormat":99},{"version":"f725a19eee1c6d33ff7c41b99f7c12527e1809dc2a08049d548bb539056092bf","impliedFormat":99},{"version":"68ef208a6d046c09cc2b3ca7012b0801881d850b681d26992c9b881f0912d8c8","impliedFormat":99},{"version":"ca7170f793a54e995011b25335430c0839802856930783abb9bec9552055ae66","impliedFormat":99},{"version":"852b25f58723452f88a9469a1c6be5e1c3183316309984cb32c00906e6a2d6a3","impliedFormat":99},{"version":"271cca9fb8d20de0f354035907d724d8435cd9f4cd920b378285560b90fc5144","impliedFormat":99},{"version":"ed7f781863bfbd7a8a524af01c70e3863ad81dc3f98224f3e846ae6184236d83","impliedFormat":99},{"version":"f9f79f279bd50332cb3f79430205a7f56742d4fdb1b88193958f9268480767ae","impliedFormat":99},{"version":"60f9645f6ef67398249ac0115afb05c6487c12b484e27797f62a1650829442d8","impliedFormat":99},{"version":"89fede2e1221350b82c2f8a75c407ef9128aa4db1b0178ec57178cab82f49f13","impliedFormat":99},{"version":"fbaf35a566f84251a84595949510f6df995c64b916c711b68e8baf87841a6ab0","impliedFormat":99},{"version":"069167438c236bbbfd13f0b45d7ff0c6742ea6df4ba728ecdc72c7e172cc7de9","impliedFormat":99},{"version":"da92d8321f8e3987c73f5f0ac3b3dc6270f031a6ec46f9244947e0457f120c1d","impliedFormat":99},{"version":"333a9a3d50a800b65b27a10a1b9cb89885ccaaa851b63e709af9d82118615163","impliedFormat":99},{"version":"5c8e27e1f7e4215a644c80191f14b8de3345be23f8fca21f0bbb8eb92d674b12","impliedFormat":99},{"version":"34f1d2b615ded10cfdf2c1dae7fb261adb449e0e6718c3a6b37e31b516f66599","impliedFormat":99},{"version":"af44e32b52be312d4028fa0bfa3f4c2e8050f2f53d4628e0e297eebe86fd5341","impliedFormat":99},{"version":"f57c812065e63002e6d300a5103e2183be5d7f55aafd174ef0945d9fd3db1266","impliedFormat":99},{"version":"5dcfbfcfafbd4da3919a70a71d07dace263e118e0be6b61cdf9ffedc2b80b575","impliedFormat":99},{"version":"067c70dfabdc0c4266f4667611eddbf21920cfed4ef4f22230c2899f1ef54966","impliedFormat":99},{"version":"f46a317e2d8b4b2f757950eb1f27aa679239857bf96fb3b825bcd79e8bd604c5","impliedFormat":99},{"version":"979b2d38cf02b25be1841c2c5362cda9a25963078f53d0adceb12590962a75da","impliedFormat":99},{"version":"aeb6c21b7d06de5e8b1b6789ef3df110f26f03998bd428003b9122dbe5bb22b7","impliedFormat":99},{"version":"5c6a0e4f80a901200dbc18d76928404c8fc84fe396deb5aa5b9c59ad980238b1","impliedFormat":99},{"version":"f663ff94b785e9fed08b51baccf39440a04319a601d54e6d199acc3c62972702","impliedFormat":99},{"version":"94711e587ba9a6655afc359beb58d6effa6781214bd68e587991f6a37f713280","impliedFormat":99},{"version":"2bdcadce69f3229ca7b3ecc54f128c58f213de3e928c0e96aa6431764d920d29","impliedFormat":99},{"version":"2bed5bb75d3d99bc80836fba4dfe2b45bfdc39112701caac7d270e4463219582","impliedFormat":99},{"version":"68405aed107780db0fab1bfb31824d8392c3e11426db0db86043ee912d739125","impliedFormat":99},{"version":"8813ad340b126a83fb2eca3ba6c51c2f5556b9782d1eedd226b71712fcdc6765","impliedFormat":99},{"version":"550677286a30f8b45948880d3895a30bfe83ee339474f611c41a7d0df4254722","impliedFormat":99},{"version":"3ed26cb2eeb1a8e5e980efb84d004cc5130c67d28f2eff2bc1633b8c7b9ca34a","impliedFormat":99},{"version":"c6189bf4a418d4152e2c81c5b136cea2a31b4f8f9df8ab13fa736caf81561724","impliedFormat":99},{"version":"aeb5b6bb82fb970a3d3285935dd02b9cb603f83e694bc8f3d12597c829d24d8f","impliedFormat":99},{"version":"4cf476bfe6a26031792500ea683dde34646825a0d1a601d2d4d66667012db283","impliedFormat":99},{"version":"e8ce241c68b68559e450730a389b1c83269091792defd929618739a232675244","impliedFormat":99},{"version":"38b452a90e4fdfd5e2c8986c9f0d3ce35121ef862c4f0c2d36dad54034da3c04","impliedFormat":99},{"version":"0c316e94263441039f85593b7b42ba3de5624c385d7c452ef362dd2373359384","impliedFormat":99},{"version":"5042efd2c7f3d24661d3fc13b3bd08f8f6a269919901b79140a6e8f274518dcd","impliedFormat":99},{"version":"babfd3f6afc9147b24dc82c86277586b1e1ddbbae2f525a3a37f26689fb0b82b","impliedFormat":99},{"version":"857938981acc22fa6ba18af8c52edccdb5962a7a2a0dbfe3b0bc452465835b57","impliedFormat":99},{"version":"76604f5d1896c37026298470b9397596d020519cd046926a8aad1b559f64d048","impliedFormat":99},{"version":"a898a705be8bed5da9539786d746b373e7e44bab502e34d3783c0b8a82cf00be","impliedFormat":99},{"version":"839e2ff8ba51ac6655e41bc5cdc66c13d48d0c381d46bb2b7141481cc32755fa","impliedFormat":99},{"version":"22240d7d19870a33a2523bbb1d8e5d1351c11296ef1c8101f9b8af746c2b6adf","impliedFormat":99},{"version":"b9e458ee9d04109e8f8b6f671960dad8fafeec3386377014d9baf6fb010235c5","impliedFormat":99},{"version":"ec4316737802d50f62625d4b7b9fdee264639354500ac856b890c8da8a879212","impliedFormat":99},{"version":"1d6cdbd0ba794491f00bf9082e5242b386cbacf49c4515a91d759a1fd46b88a7","impliedFormat":99},{"version":"c64dde964d01d9fcc877d9c15b4ca33084ae4949e9434be66a5f35e7e8ae5d83","impliedFormat":99},{"version":"744b76ad16a5a9c9bee6bbae5bacfe012ba2c39d3f3b38dc49e1f49ad22f54da","impliedFormat":99},{"version":"c4f4b601b2bb1edab1ca65965c3fbe6b1ca4c9aca015b120d2844e4ab3ad0782","impliedFormat":99},{"version":"6f045c888e0c92efe8a750ea70e6d7b5f3d0d440bdf31ae1d0e16376a376dac3","impliedFormat":99},{"version":"8192fcbbc66420833a88488191bb8929560a4196ae139dccb99150db622ad175","impliedFormat":99},{"version":"4ffaaf0003d0ce137f1a7b1f346cce5ee1b3a9f3a23ad25acbb23a26ebe3b48f","impliedFormat":99},{"version":"ae068ae70df27502cce6833ef62029dc898a29d0ccd289023083dff5bc1d1922","impliedFormat":99},{"version":"262604693aeff2fee03b9209416d9759325e64bbea0fcf9cf4b4579229859133","impliedFormat":99},{"version":"4ef03b9b10ad1a7d5a099a9a05dda193dc6c45e56f94c2b28a3cd37b1574317d","impliedFormat":99},{"version":"9c0b02a54ac616212e8a92d85fe7ac9ee2c31ece1ab6ab979008f9e286d4346b","impliedFormat":99},{"version":"3f3f25ff2bcf1f01b794990cef10acc006d896b697d0085d49b5212d110ebcc5","impliedFormat":99},{"version":"87ad3434e0823177cdd43d41760b22eac2adcbb6efbc0cefbbfb6764c8665be0","impliedFormat":99},{"version":"2619998b9dd04bd9d86c71803813ae3662253ada041e6a7da93f962f14c936c0","impliedFormat":99},{"version":"6dc9d8ecaeeb95709cb5bd18097cbf905ec034d7e4d8b52a6e9b841eaf6508c9","impliedFormat":99},{"version":"6eda8dfaaad01d6ca718d13db1a405ca983cd516ef13319cefcccab7776a2caf","impliedFormat":99},{"version":"bb1de3940ca3d5ebeb6ed335f95813f4e4e98179c11101d21fedc791543be533","impliedFormat":99},{"version":"84b9ba41b35b1822743cdda112789b25b3896cec9b90c401cb404b62b2d15022","impliedFormat":99},{"version":"01ec3cf79878d990f020bbc32fbd6db517de50c19da098d6aadf32610d39ad1c","impliedFormat":99},{"version":"d690d447c5ab5f382822ed06156783005b129c3d1c04f1b94b388cef5467a77b","impliedFormat":99},{"version":"1a73011edf93748ae1f36a30caf9ff1a2e519256c034274428dafa701fceeb43","impliedFormat":99},{"version":"968c86ea522ac75cfbac169fe1ce62b7e516a349977d096fd278745a904e15fa","impliedFormat":1},{"version":"bd6eb2d8f0fe35a3b03fae4d8379598a03ba457a5855c3cdbd6d433d5b0563a3","impliedFormat":1},{"version":"4f939b79e8e418243667c1fb8d57bc57c3a262339be3711329f62f33168acacc","impliedFormat":1},{"version":"edf3dd0ee1a18fe37295ab356a4d74e518152e10a537dfd4f8bcdc3eb15df48d","impliedFormat":1},{"version":"7590f7364c7a3508abf82f947ce28cf95c0fa466ccb512ec1560e91eda011130","impliedFormat":1},{"version":"517c05c84964a6ad32acfce14e3f46728d616f63493a65fd81243b57c9dfae71","impliedFormat":1},{"version":"3e01edf7da69b1e5254dd93b9290f5960131020794c76e099d0f0bc1601e1a44","impliedFormat":1},{"version":"77ba7e377d71da0a3f515f7a36a98bef0c307d697dfc9ac4426e724b2c78d16d","impliedFormat":1},{"version":"394444676ae4e11a7e6b6ffae53d5217747e2dba778c3baac1ea2891f92ea352","impliedFormat":1},{"version":"6d0ad34e057ed35c6b904ffa212c8ae5198243296bd0420a890942f08293ba4c","impliedFormat":1},{"version":"fc7190be5bd6b4ee2212e8f2526a69ee8d47feb71986d61a2c8ce9270c19835f","impliedFormat":1},{"version":"ac96035bcf7da1250c4f1e9993124cf65eee008ce18d7ecac92f4664eb081c7c","impliedFormat":99},{"version":"e354e3214e8c80e9bc7883df983f2e6a25d86a21f3f8b8149e4c716bfd6d642c","impliedFormat":99},{"version":"898379517a9503b6452f0beadcf58e2dc15da54b305c396395104843314c76eb","impliedFormat":99},{"version":"7960de51ce632ff7aec40e01c57c6d81c0241c3c55c2bf6de685f4959a44c9ca","impliedFormat":99},{"version":"cd782fa83504e10a2bd1687e63b56edee36a49a8e27ff67fc0ef0a2cc5961f71","impliedFormat":99},{"version":"b60fffe89a5c85a5650b7f2fdb3945f76d01541a8f7acd187fe701e4423e480b","impliedFormat":99},{"version":"12454daaa70207289f335a12640ca19f383b51688b7d130c5333ca7710dce7e5","impliedFormat":99},{"version":"e0f08f082e6fcce59507ad573b36c6564580c73c6838c598554183181202d2e3","impliedFormat":99},{"version":"9ae11becfa2272bf3bbfc55927ee42a0804259034089dbf6b175e569062060e2","impliedFormat":99},{"version":"d2dac6c339bc8defe1c211038f6673aa95ceb66c411246b2763011817c7807ba","impliedFormat":99},{"version":"8b122a8af09b332c8026c2505a393e71f7cbf81f43748660bac6bf343a9741cf","impliedFormat":99},{"version":"3380bf74c243d337c980bde1c4f6e0b45b659368833a8a5a44cf8e311183fef4","impliedFormat":99},{"version":"af812610d1bde5d6bf3cc3d70acad2710e329e3e765877cd9e24f27c4b8417fd","impliedFormat":99},{"version":"1134b7955b65f8cd12f59dbb71994c6f8d6ddfaa735305d05f23be05706540cb","impliedFormat":99},{"version":"90be4d092cd5c8d11bbb58c22cc69ba17bd9ebfa111c77349fb8287db9faf94e","impliedFormat":99},{"version":"835cafc075f7957c3a2dcb2c3da6814176188e6f1937c79663b903d9f1c8d828","impliedFormat":99},{"version":"d4ce9597538b1a813eddecfb49609aa4bf5cdfc9bf8a793be8c76439ed2743c5","impliedFormat":99},{"version":"5a93f4eed1fe73f373d3a63a567c5f94f357ff8a8d204416eea0bd32d72bc19b","impliedFormat":99},{"version":"c5069a3ee9b87a08da54f77d61a7729c57a5f35b59a6fd7bc5359e1c41e90949","impliedFormat":99},{"version":"e94714d8a777e1636b1f2ce78f6e27381625a6c34215279cfed617f3a6d01c2c","impliedFormat":99},{"version":"56307c07e40b2ce2fb2d329a7336baba7b7ed40ea69a4f3fa098a25f44f2697e","impliedFormat":99},{"version":"80d09ab0aab91d17d4c4b9822564b52816bf9eae233c164704c63c05c4693b59","impliedFormat":99},{"version":"c9202dce2d38a56ea05fb1322a1fe35d944757623539f194349951e31ad10061","impliedFormat":99},{"version":"da454af05fedf8991e2811f4fa74ebbef456fa793aeb0b46e76683a0c94772fc","impliedFormat":99},{"version":"a41b3337ee74152ec675b0ffcbc1ff00acf013b6ec741624a29f8cf424e91dc1","impliedFormat":99},{"version":"69acfd7533bcb6ee419ebb08813ba3902fa1d559c15b98ae7cbe61bff96883eb","impliedFormat":99},{"version":"02662102bcd8c53acbb40af2310a2ef995e98252de631c8df373b20daad39493","impliedFormat":99},{"version":"e9451a9c7f066ad322b37d4329919db203b817d92c52d750feae900d5ab60977","impliedFormat":99},{"version":"517df67961cd492a7de92349b15d7e8bd8fe50a5d9a31a2d8c6fe6262c826c51","impliedFormat":99},{"version":"d5f9abfcfecaf37adb295a7bd7045bee9276dd568b73d492a700c030ae0ba378","impliedFormat":99},{"version":"61b97f6ddf056b50c1eb7ea31dd0320344fb21ae47b5decc37e10183deb161a2","impliedFormat":99},{"version":"8fbe02bd66774e6743a2b0743e109c989bcb81542ac529be5a67e021567da3f2","impliedFormat":99},{"version":"2503339aa4a7e2df4419d64253edff2ae62595b0fbb71c253fb7b05eae2445f4","impliedFormat":99},{"version":"e496b9c94b2e11a3b6c1878a0098be26cf2f688017fb1a9de5a88eb84afe2277","impliedFormat":99},{"version":"1c363823c31f00011173948693e1178a2607cc93a8ea0c9e95237e28f2951788","impliedFormat":99},{"version":"5dc94a6533c634cb2195639019a6d17935cdb7393e5e242c3dd8d86167bbd1f3","impliedFormat":99},{"version":"4345ead44d445f53649d26f56933e03a66cc5de301d1751316cf2c9ca454b0d3","impliedFormat":99},{"version":"88c080c98c6d44c6ddacef79643f5e6ca637841a4d6c6d797be719c1a7490721","impliedFormat":99},{"version":"b39a6d6e27dff3f55cb9a72bb942961a1ff6232568dca6d5ec32f6c4621b101a","impliedFormat":99},{"version":"3ab4b9df2313ff11fe7bc11e98fbea97d0a315a75eb8f1cdadf03d751357eb7c","impliedFormat":99},{"version":"402338b4a012060dad60b5588100d565f88cd15ae78c32f8751e243d079e68ba","impliedFormat":99},{"version":"725e3b80b00e73495f8d23e223e4c7be5df6b5257e8473e1f4edaf1544a8a586","impliedFormat":99},{"version":"dc0d5dd93e00a40527fa0d05ed2bc5f1408bbaae1b440311743a17f33451a3fe","impliedFormat":99},{"version":"f94a0f42c73c1e16550ecce72f9018662f598675a6a4856813782783e0b583cc","impliedFormat":99},{"version":"6225ab7cb06d57b17339bb1bdb4ead82b797763a4ac6532df4abace1350c3568","impliedFormat":99},{"version":"63f97d112645dbd83f6dbe91aaca623b58926f12a4cc72ed1fc7c1c245308c73","impliedFormat":99},{"version":"a5cfc934e137b413f836dcdba60fa8bdadcb3e118aaa864915168a81c23db481","impliedFormat":99},{"version":"e88fe325bb31eb5574d47596ee6cc76c8aac20437d9171e32bbbea8ce86412b2","impliedFormat":99},{"version":"4e2a9d94696142cc77ce5f4343b82c6d94524db1a04f1ffbdc0944ec8072b391","impliedFormat":99},{"version":"0b70391466dce932b034a8d442f3d5e15b0314fbfdd5aba433a90636808acd41","impliedFormat":99},{"version":"aaa2e186beb9309b0deb3c3b618bd78154978ce518727b7487cc367519537ab9","impliedFormat":99},{"version":"1eddc2eed4e74d2ad9ff75409127e940d0f0532d8db7bb33cda6421c17ddbffe","impliedFormat":99},{"version":"34f1dac4c7d5ee8bd568d74542a643017224876eba31a33d3e9ab81147a41b4f","impliedFormat":99},{"version":"e6000fb1767f0012f0c11226f54400a344dd08a953f19861283ac0501312897f","impliedFormat":99},{"version":"aa25a5b9beca1fc20f8ce2db768e1dcc3e6b0034778a8c7d001a84912154a4f2","impliedFormat":99},{"version":"1aef75f5b49b65e155e900e5bf96814facc03c4b0211f5c489340c99d99c1069","impliedFormat":99},{"version":"2f6a3408e9ac8df85a2a650ab50e664cd3f0b4196bf5dc83c6fd514a6f7d18f3","impliedFormat":99},{"version":"b44f2a70e212d495ed5afd6ffeaee1e4800831bd0be92b5b160d2bae38a8fd91","impliedFormat":99},{"version":"3a51ff1304b1d9de9e0d13594517524021053f93cd7ff93440cc3bccf4dd01ca","impliedFormat":99},{"version":"c459144bb0783d962b6c073ebd87032428bb1343346aec7dc4aeef2d15092bfd","impliedFormat":99},{"version":"967249081f9c04089181e272d6131fc56d6e7e93181a3d683d90528229e1569e","impliedFormat":99},{"version":"50aebdbc4b04cf04bc09535386c11d5e242c7414eab76430f264f3d0ed1523ef","impliedFormat":99},{"version":"08a84066c739e081362fcd1c3bb359c4686a8a27656e0e8b1b288c42c9c64196","impliedFormat":99},{"version":"a678ee5b5aa6767bf6939bd22b99059fc033902801aee73289d09eda4033d46f","impliedFormat":99},{"version":"b21e23816a304b135156caeaa3d4960eb558c8bdd34c84507a9baa2ffaca8b7a","impliedFormat":99},{"version":"c3c326deda0799d1065945d9c8745e610ce5858e51ab82c5e1344a15f869d84d","signature":"7c29e435bfc77d3d85ad187e2c9ee075567788d0e8a29a589206eb6555857a08"},{"version":"870b25cc99f76ab0a18561f07a95eb37de2f326b5af8cb50b65de0b2735a8b74","impliedFormat":1},{"version":"dbf748a34ce13d4c04121aa627a5cd245c845854aba9e31f6d612f1563d08676","impliedFormat":99},{"version":"33f36c612d8a2bc43fdae586314fe8cc5ee1b13a7d2009831abdc7a3c17efd42","impliedFormat":99},{"version":"3ec44efa78dfe6bacb23a12557eda9d05b90c0d25f48408f846ef447e6d5b00b","impliedFormat":99},{"version":"52c1724346bc2c26cb7e9590029bbd0699444e7dbff7413885b492bc32a29d6d","impliedFormat":99},{"version":"b1cbfdc4eedf72f55c03828f8ade1cce571ed1971b89d9f2de1b7e1455022339","impliedFormat":99},{"version":"23935dc27bcd86f1dad70d8a09f42013019ef93ba53daa8fd83eb178c94bfa33","signature":"4fb885e3791248279c1072ecea127631385bed86f5911349ffd35cb89217aed4"},{"version":"492dcd7821705f97b4d3f749f8511ad91d8540bc6ae1fc32e484afe9129b1898","signature":"f5e63fd1f89ce15d4b20df09c5d3a997f9c73c48162b6fc4741c87c71915b58e"},{"version":"3fd2f722fb0e1a7cd26ddd932e003005db8727a5dd2156f664efd351235976ad","signature":"5b9ee00d7624a3593c80eba220bad97f0d432b725b27323392d6f80b77e85562"},{"version":"93cb640d577bcf2d3b4ded07fd141a9a212e4de8b003fdd02237383074c43378","signature":"382a33de14b8f8b73ef33d356d339b6d24337bab1afa17ad259eab8cccc57b07"},{"version":"70521b6ab0dcba37539e5303104f29b721bfb2940b2776da4cc818c07e1fefc1","affectsGlobalScope":true,"impliedFormat":1},{"version":"030e350db2525514580ed054f712ffb22d273e6bc7eddc1bb7eda1e0ba5d395e","affectsGlobalScope":true,"impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"a79e62f1e20467e11a904399b8b18b18c0c6eea6b50c1168bf215356d5bebfaf","affectsGlobalScope":true,"impliedFormat":1},{"version":"8fa51737611c21ba3a5ac02c4e1535741d58bec67c9bdf94b1837a31c97a2263","affectsGlobalScope":true,"impliedFormat":1},{"version":"4967529644e391115ca5592184d4b63980569adf60ee685f968fd59ab1557188","impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"24bd580b5743dc56402c440dc7f9a4f5d592ad7a419f25414d37a7bfe11e342b","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"6bdc71028db658243775263e93a7db2fd2abfce3ca569c3cca5aee6ed5eb186d","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"d2bc987ae352271d0d615a420dcf98cc886aa16b87fb2b569358c1fe0ca0773d","affectsGlobalScope":true,"impliedFormat":1},{"version":"4f0539c58717cbc8b73acb29f9e992ab5ff20adba5f9b57130691c7f9b186a4d","impliedFormat":1},{"version":"7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","impliedFormat":1},{"version":"76103716ba397bbb61f9fa9c9090dca59f39f9047cb1352b2179c5d8e7f4e8d0","impliedFormat":1},{"version":"f9677e434b7a3b14f0a9367f9dfa1227dfe3ee661792d0085523c3191ae6a1a4","affectsGlobalScope":true,"impliedFormat":1},{"version":"4314c7a11517e221f7296b46547dbc4df047115b182f544d072bdccffa57fc72","impliedFormat":1},{"version":"115971d64632ea4742b5b115fb64ed04bcaae2c3c342f13d9ba7e3f9ee39c4e7","impliedFormat":1},{"version":"c2510f124c0293ab80b1777c44d80f812b75612f297b9857406468c0f4dafe29","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"9057f224b79846e3a95baf6dad2c8103278de2b0c5eebda23fc8188171ad2398","affectsGlobalScope":true,"impliedFormat":1},{"version":"19d5f8d3930e9f99aa2c36258bf95abbe5adf7e889e6181872d1cdba7c9a7dd5","impliedFormat":1},{"version":"e6f5a38687bebe43a4cef426b69d34373ef68be9a6b1538ec0a371e69f309354","impliedFormat":1},{"version":"a6bf63d17324010ca1fbf0389cab83f93389bb0b9a01dc8a346d092f65b3605f","impliedFormat":1},{"version":"e009777bef4b023a999b2e5b9a136ff2cde37dc3f77c744a02840f05b18be8ff","impliedFormat":1},{"version":"1e0d1f8b0adfa0b0330e028c7941b5a98c08b600efe7f14d2d2a00854fb2f393","impliedFormat":1},{"version":"ee1ee365d88c4c6c0c0a5a5701d66ebc27ccd0bcfcfaa482c6e2e7fe7b98edf7","affectsGlobalScope":true,"impliedFormat":1},{"version":"88bc59b32d0d5b4e5d9632ac38edea23454057e643684c3c0b94511296f2998c","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ff5a53a58e756d2661b73ba60ffe274231a4432d21f7a2d0d9e4f6aa99f4283","impliedFormat":1},{"version":"1e289f30a48126935a5d408a91129a13a59c9b0f8c007a816f9f16ef821e144e","impliedFormat":1},{"version":"2ea254f944dfe131df1264d1fb96e4b1f7d110195b21f1f5dbb68fdd394e5518","impliedFormat":1},{"version":"5135bdd72cc05a8192bd2e92f0914d7fc43ee077d1293dc622a049b7035a0afb","impliedFormat":1},{"version":"4f80de3a11c0d2f1329a72e92c7416b2f7eab14f67e92cac63bb4e8d01c6edc8","impliedFormat":1},{"version":"6d386bc0d7f3afa1d401afc3e00ed6b09205a354a9795196caed937494a713e6","impliedFormat":1},{"version":"f579f267a2f4c2278cca2ec84613e95059368b503ce96586972d304e5e40125b","affectsGlobalScope":true,"impliedFormat":1},{"version":"23459c1915878a7c1e86e8bdb9c187cddd3aea105b8b1dfce512f093c969bc7e","impliedFormat":1},{"version":"b1b6ee0d012aeebe11d776a155d8979730440082797695fc8e2a5c326285678f","impliedFormat":1},{"version":"45875bcae57270aeb3ebc73a5e3fb4c7b9d91d6b045f107c1d8513c28ece71c0","impliedFormat":1},{"version":"1dc73f8854e5c4506131c4d95b3a6c24d0c80336d3758e95110f4c7b5cb16397","affectsGlobalScope":true,"impliedFormat":1},{"version":"5f6f1d54779d0b9ed152b0516b0958cd34889764c1190434bbf18e7a8bb884cd","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f16a7e4deafa527ed9995a772bb380eb7d3c2c0fd4ae178c5263ed18394db2c","impliedFormat":1},{"version":"c6b4e0a02545304935ecbf7de7a8e056a31bb50939b5b321c9d50a405b5a0bba","impliedFormat":1},{"version":"fab29e6d649aa074a6b91e3bdf2bff484934a46067f6ee97a30fcd9762ae2213","impliedFormat":1},{"version":"8145e07aad6da5f23f2fcd8c8e4c5c13fb26ee986a79d03b0829b8fce152d8b2","impliedFormat":1},{"version":"e1120271ebbc9952fdc7b2dd3e145560e52e06956345e6fdf91d70ca4886464f","impliedFormat":1},{"version":"814118df420c4e38fe5ae1b9a3bafb6e9c2aa40838e528cde908381867be6466","impliedFormat":1},{"version":"f7b1df115dbd1b8522cba4f404a9f4fdcd5169e2137129187ffeee9d287e4fd1","impliedFormat":1},{"version":"c878f74b6d10b267f6075c51ac1d8becd15b4aa6a58f79c0cfe3b24908357f60","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"93452d394fdd1dc551ec62f5042366f011a00d342d36d50793b3529bfc9bd633","impliedFormat":1},{"version":"fbf68fc8057932b1c30107ebc37420f8d8dc4bef1253c4c2f9e141886c0df5ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"2754d8221d77c7b382096651925eb476f1066b3348da4b73fe71ced7801edada","impliedFormat":1},{"version":"993985beef40c7d113f6dd8f0ba26eed63028b691fbfeb6a5b63f26408dd2c6d","affectsGlobalScope":true,"impliedFormat":1},{"version":"bef91efa0baea5d0e0f0f27b574a8bc100ce62a6d7e70220a0d58af6acab5e89","affectsGlobalScope":true,"impliedFormat":1},{"version":"282fd2a1268a25345b830497b4b7bf5037a5e04f6a9c44c840cb605e19fea841","impliedFormat":1},{"version":"5360a27d3ebca11b224d7d3e38e3e2c63f8290cb1fcf6c3610401898f8e68bc3","impliedFormat":1},{"version":"66ba1b2c3e3a3644a1011cd530fb444a96b1b2dfe2f5e837a002d41a1a799e60","impliedFormat":1},{"version":"7e514f5b852fdbc166b539fdd1f4e9114f29911592a5eb10a94bb3a13ccac3c4","impliedFormat":1},{"version":"7d6ff413e198d25639f9f01f16673e7df4e4bd2875a42455afd4ecc02ef156da","affectsGlobalScope":true,"impliedFormat":1},{"version":"cb094bb347d7df3380299eb69836c2c8758626ecf45917577707c03cf816b6f4","affectsGlobalScope":true,"impliedFormat":1},{"version":"f689c4237b70ae6be5f0e4180e8833f34ace40529d1acc0676ab8fb8f70457d7","impliedFormat":1},{"version":"b02784111b3fc9c38590cd4339ff8718f9329a6f4d3fd66e9744a1dcd1d7e191","impliedFormat":1},{"version":"ac5ed35e649cdd8143131964336ab9076937fa91802ec760b3ea63b59175c10a","impliedFormat":1},{"version":"52a8e7e8a1454b6d1b5ad428efae3870ffc56f2c02d923467f2940c454aa9aec","affectsGlobalScope":true,"impliedFormat":1},{"version":"78dc0513cc4f1642906b74dda42146bcbd9df7401717d6e89ea6d72d12ecb539","impliedFormat":1},{"version":"ad90122e1cb599b3bc06a11710eb5489101be678f2920f2322b0ac3e195af78d","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":"f8db4fea512ab759b2223b90ecbbe7dae919c02f8ce95ec03f7fb1cf757cfbeb","affectsGlobalScope":true,"impliedFormat":1}],"root":[49,50,284,[291,294]],"options":{"allowJs":true,"allowSyntheticDefaultImports":true,"declaration":true,"emitDecoratorMetadata":true,"esModuleInterop":true,"experimentalDecorators":true,"importHelpers":true,"inlineSources":true,"module":99,"noEmitOnError":true,"noImplicitAny":false,"outDir":"./","skipLibCheck":true,"sourceMap":true,"strict":true,"target":4,"useDefineForClassFields":false},"referencedMap":[[394,1],[397,2],[51,1],[60,1],[61,3],[64,4],[62,4],[66,4],[69,5],[68,4],[67,4],[65,4],[63,6],[52,1],[53,7],[80,1],[82,1],[83,1],[84,8],[81,1],[85,9],[87,1],[88,10],[86,1],[79,11],[71,1],[76,12],[74,13],[73,14],[75,1],[72,1],[396,1],[285,1],[402,15],[340,16],[341,16],[342,17],[300,18],[343,19],[344,20],[345,21],[295,1],[298,22],[296,1],[297,1],[346,23],[347,24],[348,25],[349,26],[350,27],[351,28],[352,28],[354,29],[353,30],[355,31],[356,32],[357,33],[339,34],[299,1],[358,35],[359,36],[360,37],[393,38],[361,39],[362,40],[363,41],[364,42],[365,43],[366,44],[367,45],[368,46],[369,47],[370,48],[371,48],[372,49],[373,1],[374,1],[375,50],[377,51],[376,52],[378,53],[379,54],[380,55],[381,56],[382,57],[383,58],[384,59],[385,60],[386,61],[387,62],[388,63],[389,64],[390,65],[391,66],[392,67],[142,1],[55,1],[301,1],[395,1],[401,68],[208,1],[212,1],[217,1],[218,69],[216,70],[210,1],[213,1],[214,1],[211,1],[215,1],[209,1],[399,71],[400,72],[57,73],[54,74],[58,1],[56,75],[70,76],[59,77],[109,1],[117,78],[114,79],[124,1],[125,80],[160,81],[105,82],[138,83],[90,1],[92,84],[91,85],[93,86],[183,87],[107,88],[150,89],[169,90],[274,91],[250,92],[168,93],[267,1],[251,94],[256,95],[255,96],[254,97],[257,98],[259,99],[260,100],[249,101],[261,102],[262,103],[264,104],[265,105],[258,101],[266,106],[268,107],[269,101],[270,99],[271,104],[272,108],[273,104],[263,1],[252,101],[136,109],[104,110],[100,111],[128,112],[129,110],[130,110],[131,113],[133,114],[135,115],[132,110],[134,116],[103,117],[275,1],[155,118],[223,119],[200,120],[161,121],[158,122],[187,123],[247,124],[198,125],[283,126],[159,127],[286,128],[188,129],[157,130],[248,131],[190,132],[199,133],[280,134],[165,135],[116,136],[163,1],[115,137],[164,1],[96,138],[95,1],[94,139],[162,140],[101,1],[99,141],[98,142],[97,1],[148,143],[145,144],[151,145],[144,146],[176,147],[147,148],[140,1],[122,149],[121,1],[137,150],[146,151],[189,152],[166,153],[246,154],[191,155],[185,156],[179,157],[156,158],[153,159],[152,160],[282,161],[196,162],[197,163],[281,164],[278,165],[201,166],[154,1],[118,167],[119,1],[106,1],[245,168],[242,169],[203,170],[205,171],[206,172],[207,173],[219,174],[220,175],[221,176],[186,177],[222,178],[224,179],[225,180],[226,181],[227,182],[229,183],[244,184],[230,185],[231,186],[232,187],[233,188],[123,189],[234,190],[243,191],[174,192],[235,193],[236,194],[171,1],[202,195],[237,196],[238,197],[175,198],[239,199],[181,200],[180,1],[178,201],[228,202],[240,203],[204,204],[241,205],[167,1],[89,1],[143,206],[290,207],[288,208],[126,209],[184,210],[182,211],[289,212],[139,213],[287,214],[127,209],[149,215],[141,216],[112,217],[111,218],[173,219],[110,220],[172,221],[113,222],[108,223],[102,224],[177,225],[170,226],[120,227],[192,1],[276,228],[193,229],[195,230],[279,1],[194,231],[277,232],[253,1],[398,233],[78,234],[77,1],[48,1],[46,1],[47,1],[8,1],[9,1],[11,1],[10,1],[2,1],[12,1],[13,1],[14,1],[15,1],[16,1],[17,1],[18,1],[19,1],[3,1],[20,1],[21,1],[4,1],[22,1],[26,1],[23,1],[24,1],[25,1],[27,1],[28,1],[29,1],[5,1],[30,1],[31,1],[32,1],[33,1],[6,1],[37,1],[34,1],[35,1],[36,1],[38,1],[7,1],[39,1],[44,1],[45,1],[40,1],[41,1],[42,1],[43,1],[1,1],[317,235],[327,236],[316,235],[337,237],[308,238],[307,239],[336,240],[330,241],[335,242],[310,243],[324,244],[309,245],[333,246],[305,247],[304,240],[334,248],[306,249],[311,250],[312,1],[315,250],[302,1],[338,251],[328,252],[319,253],[320,254],[322,255],[318,256],[321,257],[331,240],[313,258],[314,259],[323,260],[303,261],[326,252],[325,250],[329,1],[332,262],[49,263],[50,1],[294,264],[284,265],[291,266],[292,267],[293,268]],"version":"5.8.2"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { WeatherData, WeatherAround, Location } from './types.js';
|
|
2
|
+
export declare function getWeatherByLocation(location: Location): Promise<WeatherData>;
|
|
3
|
+
export declare function getWeatherAroundLocation(location: Location, radius: number): Promise<WeatherAround>;
|
|
4
|
+
export declare function getGlobalWeatherData(gridResolution?: number): Promise<WeatherAround[]>;
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getWeatherByLocation = getWeatherByLocation;
|
|
4
|
+
exports.getWeatherAroundLocation = getWeatherAroundLocation;
|
|
5
|
+
exports.getGlobalWeatherData = getGlobalWeatherData;
|
|
6
|
+
const baseUrl = 'https://api.open-meteo.com/v1/forecast';
|
|
7
|
+
async function getWeatherByLocation(location) {
|
|
8
|
+
const url = `${baseUrl}?latitude=${location.latitude}&longitude=${location.longitude}¤t=temperature_2m,windspeed_10m,cloudcover,relative_humidity_2m,shortwave_radiation&timezone=UTC`;
|
|
9
|
+
const response = await fetch(url);
|
|
10
|
+
if (!response.ok)
|
|
11
|
+
throw new Error(`OpenMeteo API request failed: ${response.status}`);
|
|
12
|
+
const data = await response.json();
|
|
13
|
+
return {
|
|
14
|
+
location,
|
|
15
|
+
temperature: { current: data.current.temperature_2m, unit: '°C' },
|
|
16
|
+
wind: { speed: data.current.windspeed_10m, unit: 'm/s', direction: null },
|
|
17
|
+
humidity: data.current.relative_humidity_2m,
|
|
18
|
+
cloudCoverage: data.current.cloudcover,
|
|
19
|
+
solarRadiation: data.current.shortwave_radiation,
|
|
20
|
+
weatherDescription: 'N/A',
|
|
21
|
+
timestamp: new Date().toISOString()
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
async function getWeatherAroundLocation(location, radius) {
|
|
25
|
+
// 그리드 크기를 도 단위로 명확히 정의
|
|
26
|
+
const gridSizeDegrees = 0.2; // 약 22km (적도 기준)
|
|
27
|
+
// Open-Meteo API는 grid 파라미터에 도 단위 사용
|
|
28
|
+
const url = `${baseUrl}?latitude=${location.latitude}&longitude=${location.longitude}&grid=${gridSizeDegrees}&hourly=temperature_2m,windspeed_10m,wind_direction_10m,cloudcover,relative_humidity_2m,shortwave_radiation&timezone=UTC`;
|
|
29
|
+
const response = await fetch(url);
|
|
30
|
+
if (!response.ok)
|
|
31
|
+
throw new Error(`OpenMeteo API request failed: ${response.status}`);
|
|
32
|
+
const data = await response.json();
|
|
33
|
+
const weatherPoints = [];
|
|
34
|
+
// 2D 격자 구성 (API 응답에서 grid_latitude와 grid_longitude 배열 사용)
|
|
35
|
+
const latitudes = data.grid_latitude || [location.latitude];
|
|
36
|
+
const longitudes = data.grid_longitude || [location.longitude];
|
|
37
|
+
// 2차원 그리드 구성
|
|
38
|
+
for (let latIndex = 0; latIndex < latitudes.length; latIndex++) {
|
|
39
|
+
for (let lonIndex = 0; lonIndex < longitudes.length; lonIndex++) {
|
|
40
|
+
const pointIndex = latIndex * longitudes.length + lonIndex;
|
|
41
|
+
// 데이터 포인트가 있는 경우만 추가
|
|
42
|
+
if (data.hourly.temperature_2m[pointIndex] !== undefined) {
|
|
43
|
+
weatherPoints.push({
|
|
44
|
+
location: {
|
|
45
|
+
latitude: latitudes[latIndex],
|
|
46
|
+
longitude: longitudes[lonIndex]
|
|
47
|
+
},
|
|
48
|
+
temperature: {
|
|
49
|
+
current: data.hourly.temperature_2m[pointIndex],
|
|
50
|
+
unit: '°C'
|
|
51
|
+
},
|
|
52
|
+
wind: {
|
|
53
|
+
speed: data.hourly.windspeed_10m[pointIndex],
|
|
54
|
+
unit: 'm/s',
|
|
55
|
+
direction: data.hourly.wind_direction_10m[pointIndex]
|
|
56
|
+
},
|
|
57
|
+
humidity: data.hourly.relative_humidity_2m[pointIndex],
|
|
58
|
+
cloudCoverage: data.hourly.cloudcover[pointIndex],
|
|
59
|
+
solarRadiation: data.hourly.shortwave_radiation[pointIndex],
|
|
60
|
+
weatherDescription: 'N/A',
|
|
61
|
+
timestamp: new Date().toISOString()
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return { center: location, radius, weatherPoints };
|
|
67
|
+
}
|
|
68
|
+
async function getGlobalWeatherData(gridResolution = 10) {
|
|
69
|
+
const globalWeatherData = [];
|
|
70
|
+
for (let lat = -90; lat <= 90; lat += gridResolution) {
|
|
71
|
+
for (let lon = -180; lon <= 180; lon += gridResolution) {
|
|
72
|
+
try {
|
|
73
|
+
const regionWeather = await getWeatherAroundLocation({ latitude: lat, longitude: lon }, gridResolution);
|
|
74
|
+
globalWeatherData.push(regionWeather);
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
console.error(`Failed to fetch weather for (${lat}, ${lon}):`, error);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return globalWeatherData;
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=open-meteo-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"open-meteo-adapter.js","sourceRoot":"","sources":["../../server/controllers/open-meteo-adapter.ts"],"names":[],"mappings":"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","sourcesContent":["import { WeatherService, WeatherData, WeatherAround, Location } from './types.js'\n\nconst baseUrl = 'https://api.open-meteo.com/v1/forecast'\n\nexport async function getWeatherByLocation(location: Location): Promise<WeatherData> {\n const url = `${baseUrl}?latitude=${location.latitude}&longitude=${location.longitude}¤t=temperature_2m,windspeed_10m,cloudcover,relative_humidity_2m,shortwave_radiation&timezone=UTC`\n\n const response = await fetch(url)\n if (!response.ok) throw new Error(`OpenMeteo API request failed: ${response.status}`)\n\n const data = await response.json()\n\n return {\n location,\n temperature: { current: data.current.temperature_2m, unit: '°C' },\n wind: { speed: data.current.windspeed_10m, unit: 'm/s', direction: null },\n humidity: data.current.relative_humidity_2m,\n cloudCoverage: data.current.cloudcover,\n solarRadiation: data.current.shortwave_radiation,\n weatherDescription: 'N/A',\n timestamp: new Date().toISOString()\n }\n}\n\nexport async function getWeatherAroundLocation(location: Location, radius: number): Promise<WeatherAround> {\n // 그리드 크기를 도 단위로 명확히 정의\n const gridSizeDegrees = 0.2 // 약 22km (적도 기준)\n\n // Open-Meteo API는 grid 파라미터에 도 단위 사용\n const url = `${baseUrl}?latitude=${location.latitude}&longitude=${location.longitude}&grid=${gridSizeDegrees}&hourly=temperature_2m,windspeed_10m,wind_direction_10m,cloudcover,relative_humidity_2m,shortwave_radiation&timezone=UTC`\n\n const response = await fetch(url)\n if (!response.ok) throw new Error(`OpenMeteo API request failed: ${response.status}`)\n\n const data = await response.json()\n const weatherPoints = []\n\n // 2D 격자 구성 (API 응답에서 grid_latitude와 grid_longitude 배열 사용)\n const latitudes = data.grid_latitude || [location.latitude]\n const longitudes = data.grid_longitude || [location.longitude]\n\n // 2차원 그리드 구성\n for (let latIndex = 0; latIndex < latitudes.length; latIndex++) {\n for (let lonIndex = 0; lonIndex < longitudes.length; lonIndex++) {\n const pointIndex = latIndex * longitudes.length + lonIndex\n\n // 데이터 포인트가 있는 경우만 추가\n if (data.hourly.temperature_2m[pointIndex] !== undefined) {\n weatherPoints.push({\n location: {\n latitude: latitudes[latIndex],\n longitude: longitudes[lonIndex]\n },\n temperature: {\n current: data.hourly.temperature_2m[pointIndex],\n unit: '°C'\n },\n wind: {\n speed: data.hourly.windspeed_10m[pointIndex],\n unit: 'm/s',\n direction: data.hourly.wind_direction_10m[pointIndex]\n },\n humidity: data.hourly.relative_humidity_2m[pointIndex],\n cloudCoverage: data.hourly.cloudcover[pointIndex],\n solarRadiation: data.hourly.shortwave_radiation[pointIndex],\n weatherDescription: 'N/A',\n timestamp: new Date().toISOString()\n })\n }\n }\n }\n\n return { center: location, radius, weatherPoints }\n}\n\nexport async function getGlobalWeatherData(gridResolution: number = 10): Promise<WeatherAround[]> {\n const globalWeatherData: WeatherAround[] = []\n\n for (let lat = -90; lat <= 90; lat += gridResolution) {\n for (let lon = -180; lon <= 180; lon += gridResolution) {\n try {\n const regionWeather = await getWeatherAroundLocation({ latitude: lat, longitude: lon }, gridResolution)\n globalWeatherData.push(regionWeather)\n } catch (error) {\n console.error(`Failed to fetch weather for (${lat}, ${lon}):`, error)\n }\n }\n }\n\n return globalWeatherData\n}\n"]}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/** 🌍 위치 정보 */
|
|
2
|
+
export interface Location {
|
|
3
|
+
latitude: number;
|
|
4
|
+
longitude: number;
|
|
5
|
+
}
|
|
6
|
+
/** 🌡️ 기온 정보 */
|
|
7
|
+
export interface Temperature {
|
|
8
|
+
current: number;
|
|
9
|
+
unit: '°C' | '°F';
|
|
10
|
+
}
|
|
11
|
+
/** 💨 바람 정보 */
|
|
12
|
+
export interface Wind {
|
|
13
|
+
speed: number;
|
|
14
|
+
unit: 'm/s' | 'km/h' | 'mph';
|
|
15
|
+
direction: number | null;
|
|
16
|
+
}
|
|
17
|
+
/** 🌤️ 날씨 공통 데이터 모델 */
|
|
18
|
+
export interface WeatherData {
|
|
19
|
+
location: Location;
|
|
20
|
+
temperature: Temperature;
|
|
21
|
+
wind: Wind;
|
|
22
|
+
humidity: number;
|
|
23
|
+
cloudCoverage: number;
|
|
24
|
+
solarRadiation: number | null;
|
|
25
|
+
weatherDescription: string;
|
|
26
|
+
timestamp: string;
|
|
27
|
+
}
|
|
28
|
+
/** 🌍 특정 위치의 주변 날씨 데이터 (여러 개의 WeatherData 포함) */
|
|
29
|
+
export interface WeatherAround {
|
|
30
|
+
center: Location;
|
|
31
|
+
radius: number;
|
|
32
|
+
weatherPoints: WeatherData[];
|
|
33
|
+
}
|
|
34
|
+
export type WeatherType = 'temperature' | 'humidity' | 'wind' | 'precipitation';
|
|
35
|
+
export interface WeatherService {
|
|
36
|
+
/**
|
|
37
|
+
* 특정 위치의 날씨 데이터를 가져온다.
|
|
38
|
+
* @param location - 조회할 위치 (위도, 경도)
|
|
39
|
+
* @returns WeatherData - 표준화된 날씨 데이터
|
|
40
|
+
*/
|
|
41
|
+
getWeatherByLocation(location: Location): Promise<WeatherData>;
|
|
42
|
+
/**
|
|
43
|
+
* 특정 위치를 중심으로 주변 반경 내의 날씨 데이터를 가져온다.
|
|
44
|
+
* @param location - 중심 위치 (위도, 경도)
|
|
45
|
+
* @param radius - 검색할 반경 (단위: km)
|
|
46
|
+
* @returns WeatherAround - 주변의 날씨 데이터 리스트
|
|
47
|
+
*/
|
|
48
|
+
getWeatherAroundLocation(location: Location, radius: number): Promise<WeatherAround>;
|
|
49
|
+
/**
|
|
50
|
+
* 전 세계 날씨 데이터를 가져온다.
|
|
51
|
+
* @param gridResolution - 격자 크기 (단위: km)
|
|
52
|
+
* @returns WeatherAround[] - 전 세계의 날씨 데이터 리스트
|
|
53
|
+
*/
|
|
54
|
+
getGlobalWeatherData(gridResolution: number): Promise<WeatherAround[]>;
|
|
55
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../server/controllers/types.ts"],"names":[],"mappings":"","sourcesContent":["/** 🌍 위치 정보 */\nexport interface Location {\n latitude: number\n longitude: number\n}\n\n/** 🌡️ 기온 정보 */\nexport interface Temperature {\n current: number // 현재 기온\n unit: '°C' | '°F'\n}\n\n/** 💨 바람 정보 */\nexport interface Wind {\n speed: number // 풍속\n unit: 'm/s' | 'km/h' | 'mph'\n direction: number | null // 풍향 (0~360도, 0=북쪽), 일부 API에서 제공되지 않을 수 있음\n}\n\n/** 🌤️ 날씨 공통 데이터 모델 */\nexport interface WeatherData {\n location: Location\n temperature: Temperature\n wind: Wind\n humidity: number // 상대 습도 (%)\n cloudCoverage: number // 구름량 (%)\n solarRadiation: number | null // 태양광량 (W/m²), 일부 API에서 제공되지 않음\n weatherDescription: string // 날씨 상태 (예: \"clear\", \"partly cloudy\")\n timestamp: string // 데이터 수집 시간 (ISO8601)\n}\n\n/** 🌍 특정 위치의 주변 날씨 데이터 (여러 개의 WeatherData 포함) */\nexport interface WeatherAround {\n center: Location // 중심 좌표\n radius: number // 반경 (km)\n weatherPoints: WeatherData[] // 반경 내의 날씨 데이터 리스트\n}\n\nexport type WeatherType = 'temperature' | 'humidity' | 'wind' | 'precipitation'\n\nexport interface WeatherService {\n /**\n * 특정 위치의 날씨 데이터를 가져온다.\n * @param location - 조회할 위치 (위도, 경도)\n * @returns WeatherData - 표준화된 날씨 데이터\n */\n getWeatherByLocation(location: Location): Promise<WeatherData>\n\n /**\n * 특정 위치를 중심으로 주변 반경 내의 날씨 데이터를 가져온다.\n * @param location - 중심 위치 (위도, 경도)\n * @param radius - 검색할 반경 (단위: km)\n * @returns WeatherAround - 주변의 날씨 데이터 리스트\n */\n getWeatherAroundLocation(location: Location, radius: number): Promise<WeatherAround>\n\n /**\n * 전 세계 날씨 데이터를 가져온다.\n * @param gridResolution - 격자 크기 (단위: km)\n * @returns WeatherAround[] - 전 세계의 날씨 데이터 리스트\n */\n getGlobalWeatherData(gridResolution: number): Promise<WeatherAround[]>\n}\n"]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Context } from 'koa';
|
|
2
|
+
import { WeatherType } from './types.js';
|
|
3
|
+
/**
|
|
4
|
+
* 전체 날씨 지도 이미지 컨트롤러
|
|
5
|
+
*/
|
|
6
|
+
export declare function globalWeatherController(ctx: Context): Promise<void>;
|
|
7
|
+
/**
|
|
8
|
+
* 전체 날씨 이미지 가져오기
|
|
9
|
+
* @param type 날씨 타입 (temperature, humidity, wind, precipitation)
|
|
10
|
+
* @param forceRefresh 캐시 무시하고 새로 가져오기
|
|
11
|
+
*/
|
|
12
|
+
export declare function getGlobalWeatherImage(type: WeatherType, forceRefresh?: boolean): Promise<Buffer>;
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.globalWeatherController = globalWeatherController;
|
|
4
|
+
exports.getGlobalWeatherImage = getGlobalWeatherImage;
|
|
5
|
+
const env_1 = require("@things-factory/env");
|
|
6
|
+
const cache_service_1 = require("@things-factory/cache-service");
|
|
7
|
+
const open_meteo_adapter_js_1 = require("./open-meteo-adapter.js");
|
|
8
|
+
const chrome_renderer_js_1 = require("../services/chrome-renderer.js");
|
|
9
|
+
/**
|
|
10
|
+
* 전체 날씨 지도 이미지 컨트롤러
|
|
11
|
+
*/
|
|
12
|
+
async function globalWeatherController(ctx) {
|
|
13
|
+
const type = ctx.params.type;
|
|
14
|
+
const forceRefresh = ctx.query.refresh === 'true';
|
|
15
|
+
try {
|
|
16
|
+
// 유효한 날씨 타입인지 확인
|
|
17
|
+
if (!['temperature', 'humidity', 'wind', 'precipitation'].includes(type)) {
|
|
18
|
+
ctx.status = 400;
|
|
19
|
+
ctx.body = {
|
|
20
|
+
error: `유효하지 않은 날씨 타입: ${type}`,
|
|
21
|
+
validTypes: ['temperature', 'humidity', 'wind', 'precipitation']
|
|
22
|
+
};
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
// 날씨 이미지 가져오기
|
|
26
|
+
const imageBuffer = await getGlobalWeatherImage(type, forceRefresh);
|
|
27
|
+
// 이미지 데이터 응답
|
|
28
|
+
ctx.body = Buffer.from(imageBuffer);
|
|
29
|
+
// 이미지 응답 헤더 설정
|
|
30
|
+
ctx.status = 200;
|
|
31
|
+
ctx.set('Content-Type', 'image/png');
|
|
32
|
+
ctx.set('Cache-Control', 'public, max-age=3600'); // 1시간 캐싱
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
console.error(`날씨 지도 생성 오류 (${type}):`, error);
|
|
36
|
+
ctx.status = 500;
|
|
37
|
+
ctx.body = {
|
|
38
|
+
error: '날씨 지도 생성 중 오류가 발생했습니다',
|
|
39
|
+
message: error.message
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* 전체 날씨 이미지 가져오기
|
|
45
|
+
* @param type 날씨 타입 (temperature, humidity, wind, precipitation)
|
|
46
|
+
* @param forceRefresh 캐시 무시하고 새로 가져오기
|
|
47
|
+
*/
|
|
48
|
+
async function getGlobalWeatherImage(type, forceRefresh = false) {
|
|
49
|
+
if (!['temperature', 'humidity', 'wind', 'precipitation'].includes(type)) {
|
|
50
|
+
throw new Error(`유효하지 않은 날씨 타입: ${type}`);
|
|
51
|
+
}
|
|
52
|
+
// 캐시 유효 시간 (분)
|
|
53
|
+
const cacheLifetime = env_1.config.get('WEATHER_CACHE_LIFETIME') || 60;
|
|
54
|
+
try {
|
|
55
|
+
// 캐시에서 데이터 확인
|
|
56
|
+
if (!forceRefresh) {
|
|
57
|
+
const { value: cachedDataJson } = (await cache_service_1.cacheService.getFromCache(`global-weather-image`, { type })) || {};
|
|
58
|
+
// Buffer.from이 객체를 직접 처리할 수 없으므로 타입에 따라 적절하게 처리
|
|
59
|
+
let cachedData = null;
|
|
60
|
+
if (cachedDataJson) {
|
|
61
|
+
if (Buffer.isBuffer(cachedDataJson)) {
|
|
62
|
+
cachedData = cachedDataJson;
|
|
63
|
+
}
|
|
64
|
+
else if (typeof cachedDataJson === 'string') {
|
|
65
|
+
// 문자열이면 버퍼로 변환
|
|
66
|
+
cachedData = cachedDataJson;
|
|
67
|
+
}
|
|
68
|
+
else if (Array.isArray(cachedDataJson)) {
|
|
69
|
+
// 배열이면 버퍼로 변환
|
|
70
|
+
cachedData = cachedDataJson;
|
|
71
|
+
}
|
|
72
|
+
else if (typeof cachedDataJson === 'object') {
|
|
73
|
+
// 객체인 경우 처리 (JSON.stringify된 버퍼일 수 있음)
|
|
74
|
+
try {
|
|
75
|
+
// JSON 문자열로 변환했다가 다시 파싱하면 배열로 변환될 수 있음
|
|
76
|
+
cachedData = Object.keys(cachedDataJson)
|
|
77
|
+
.filter(key => !isNaN(Number(key)))
|
|
78
|
+
.sort((a, b) => Number(a) - Number(b))
|
|
79
|
+
.map(key => cachedDataJson[key]);
|
|
80
|
+
}
|
|
81
|
+
catch (conversionError) {
|
|
82
|
+
console.error('캐시 데이터 변환 실패:', conversionError);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
if (cachedData) {
|
|
87
|
+
console.log(`전체 날씨 이미지 캐시 사용 (타입: ${type})`);
|
|
88
|
+
return cachedData;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
console.log(`전체 날씨 이미지 생성 (타입: ${type})`);
|
|
92
|
+
var { value: weatherPoints } = (await cache_service_1.cacheService.getFromCache(`weather-points`, {})) || {};
|
|
93
|
+
if (!weatherPoints) {
|
|
94
|
+
const weatherData = await (0, open_meteo_adapter_js_1.getGlobalWeatherData)(10);
|
|
95
|
+
const flattenedWeatherPoints = weatherData.reduce((acc, area) => {
|
|
96
|
+
return acc.concat(area.weatherPoints);
|
|
97
|
+
}, []);
|
|
98
|
+
weatherPoints = flattenedWeatherPoints.map(point => {
|
|
99
|
+
var _a, _b, _c, _d;
|
|
100
|
+
return {
|
|
101
|
+
lat: point.location.latitude,
|
|
102
|
+
lng: point.location.longitude,
|
|
103
|
+
value: (_a = point.temperature) === null || _a === void 0 ? void 0 : _a.current,
|
|
104
|
+
description: point.weatherDescription,
|
|
105
|
+
temperature: (_b = point.temperature) === null || _b === void 0 ? void 0 : _b.current,
|
|
106
|
+
humidity: point.humidity,
|
|
107
|
+
cloudCoverage: point.cloudCoverage,
|
|
108
|
+
solarRadiation: point.solarRadiation,
|
|
109
|
+
windSpeed: (_c = point.wind) === null || _c === void 0 ? void 0 : _c.speed,
|
|
110
|
+
windDirection: (_d = point.wind) === null || _d === void 0 ? void 0 : _d.direction
|
|
111
|
+
// precipitation: point.precipitation.current
|
|
112
|
+
};
|
|
113
|
+
});
|
|
114
|
+
await cache_service_1.cacheService.setInCache(`weather-points`, {}, weatherPoints, cacheLifetime * 60);
|
|
115
|
+
}
|
|
116
|
+
// Headless Chrome으로 이미지 생성
|
|
117
|
+
const imageBuffer = await (0, chrome_renderer_js_1.renderWeatherMap)(type, weatherPoints, 1800, 900);
|
|
118
|
+
// 캐시에 저장 (초 단위로 TTL 설정)
|
|
119
|
+
await cache_service_1.cacheService.setInCache(`global-weather-image`, { type }, imageBuffer, cacheLifetime * 60);
|
|
120
|
+
return imageBuffer;
|
|
121
|
+
}
|
|
122
|
+
catch (error) {
|
|
123
|
+
console.error(`전체 날씨 이미지 생성 실패 (타입: ${type}):`, error);
|
|
124
|
+
// 에러 발생 시 캐시에서 데이터 확인
|
|
125
|
+
const { value: cachedDataJson } = (await cache_service_1.cacheService.getFromCache(`global-weather-image`, { type })) || {};
|
|
126
|
+
// Buffer.from이 객체를 직접 처리할 수 없으므로 타입에 따라 적절하게 처리
|
|
127
|
+
let cachedData = null;
|
|
128
|
+
if (cachedDataJson) {
|
|
129
|
+
if (Buffer.isBuffer(cachedDataJson)) {
|
|
130
|
+
cachedData = cachedDataJson;
|
|
131
|
+
}
|
|
132
|
+
else if (typeof cachedDataJson === 'string') {
|
|
133
|
+
// 문자열이면 버퍼로 변환
|
|
134
|
+
cachedData = Buffer.from(cachedDataJson);
|
|
135
|
+
}
|
|
136
|
+
else if (Array.isArray(cachedDataJson)) {
|
|
137
|
+
// 배열이면 버퍼로 변환
|
|
138
|
+
cachedData = Buffer.from(cachedDataJson);
|
|
139
|
+
}
|
|
140
|
+
else if (typeof cachedDataJson === 'object') {
|
|
141
|
+
// 객체인 경우 처리 (JSON.stringify된 버퍼일 수 있음)
|
|
142
|
+
try {
|
|
143
|
+
// JSON 문자열로 변환했다가 다시 파싱하면 배열로 변환될 수 있음
|
|
144
|
+
const dataArray = Object.keys(cachedDataJson)
|
|
145
|
+
.filter(key => !isNaN(Number(key)))
|
|
146
|
+
.sort((a, b) => Number(a) - Number(b))
|
|
147
|
+
.map(key => cachedDataJson[key]);
|
|
148
|
+
if (dataArray.length > 0) {
|
|
149
|
+
cachedData = Buffer.from(dataArray);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
catch (conversionError) {
|
|
153
|
+
console.error('캐시 데이터 변환 실패:', conversionError);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
if (cachedData) {
|
|
158
|
+
console.log(`에러로 인해 캐시된 날씨 이미지 사용 (타입: ${type})`);
|
|
159
|
+
return cachedData;
|
|
160
|
+
}
|
|
161
|
+
throw error;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=weather-controller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"weather-controller.js","sourceRoot":"","sources":["../../server/controllers/weather-controller.ts"],"names":[],"mappings":";;AAYA,0DAiCC;AAOD,sDA2HC;AA7KD,6CAA4C;AAC5C,iEAA4D;AAG5D,mEAA8D;AAC9D,uEAAiE;AAEjE;;GAEG;AACI,KAAK,UAAU,uBAAuB,CAAC,GAAY;IACxD,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAA;IAC5B,MAAM,YAAY,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,KAAK,MAAM,CAAA;IAEjD,IAAI,CAAC;QACH,iBAAiB;QACjB,IAAI,CAAC,CAAC,aAAa,EAAE,UAAU,EAAE,MAAM,EAAE,eAAe,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACzE,GAAG,CAAC,MAAM,GAAG,GAAG,CAAA;YAChB,GAAG,CAAC,IAAI,GAAG;gBACT,KAAK,EAAE,kBAAkB,IAAI,EAAE;gBAC/B,UAAU,EAAE,CAAC,aAAa,EAAE,UAAU,EAAE,MAAM,EAAE,eAAe,CAAC;aACjE,CAAA;YACD,OAAM;QACR,CAAC;QAED,cAAc;QACd,MAAM,WAAW,GAAG,MAAM,qBAAqB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAA;QAEnE,aAAa;QACb,GAAG,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;QAEnC,eAAe;QACf,GAAG,CAAC,MAAM,GAAG,GAAG,CAAA;QAChB,GAAG,CAAC,GAAG,CAAC,cAAc,EAAE,WAAW,CAAC,CAAA;QACpC,GAAG,CAAC,GAAG,CAAC,eAAe,EAAE,sBAAsB,CAAC,CAAA,CAAC,SAAS;IAC5D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,gBAAgB,IAAI,IAAI,EAAE,KAAK,CAAC,CAAA;QAC9C,GAAG,CAAC,MAAM,GAAG,GAAG,CAAA;QAChB,GAAG,CAAC,IAAI,GAAG;YACT,KAAK,EAAE,uBAAuB;YAC9B,OAAO,EAAE,KAAK,CAAC,OAAO;SACvB,CAAA;IACH,CAAC;AACH,CAAC;AAED;;;;GAIG;AACI,KAAK,UAAU,qBAAqB,CAAC,IAAiB,EAAE,eAAwB,KAAK;IAC1F,IAAI,CAAC,CAAC,aAAa,EAAE,UAAU,EAAE,MAAM,EAAE,eAAe,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACzE,MAAM,IAAI,KAAK,CAAC,kBAAkB,IAAI,EAAE,CAAC,CAAA;IAC3C,CAAC;IAED,eAAe;IACf,MAAM,aAAa,GAAG,YAAM,CAAC,GAAG,CAAC,wBAAwB,CAAC,IAAI,EAAE,CAAA;IAEhE,IAAI,CAAC;QACH,cAAc;QACd,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,GAAG,CAAC,MAAM,4BAAY,CAAC,YAAY,CAAC,sBAAsB,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;YAE3G,gDAAgD;YAChD,IAAI,UAAU,GAAG,IAAI,CAAA;YACrB,IAAI,cAAc,EAAE,CAAC;gBACnB,IAAI,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;oBACpC,UAAU,GAAG,cAAc,CAAA;gBAC7B,CAAC;qBAAM,IAAI,OAAO,cAAc,KAAK,QAAQ,EAAE,CAAC;oBAC9C,eAAe;oBACf,UAAU,GAAG,cAAc,CAAA;gBAC7B,CAAC;qBAAM,IAAI,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC;oBACzC,cAAc;oBACd,UAAU,GAAG,cAAc,CAAA;gBAC7B,CAAC;qBAAM,IAAI,OAAO,cAAc,KAAK,QAAQ,EAAE,CAAC;oBAC9C,uCAAuC;oBACvC,IAAI,CAAC;wBACH,uCAAuC;wBACvC,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC;6BACrC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;6BAClC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;6BACrC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAA;oBACpC,CAAC;oBAAC,OAAO,eAAe,EAAE,CAAC;wBACzB,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,eAAe,CAAC,CAAA;oBACjD,CAAC;gBACH,CAAC;YACH,CAAC;YAED,IAAI,UAAU,EAAE,CAAC;gBACf,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,GAAG,CAAC,CAAA;gBAC5C,OAAO,UAAU,CAAA;YACnB,CAAC;QACH,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,GAAG,CAAC,CAAA;QAEzC,IAAI,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,CAAC,MAAM,4BAAY,CAAC,YAAY,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;QAE5F,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,MAAM,WAAW,GAAG,MAAM,IAAA,4CAAoB,EAAC,EAAE,CAAC,CAAA;YAElD,MAAM,sBAAsB,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;gBAC9D,OAAO,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;YACvC,CAAC,EAAE,EAAE,CAAC,CAAA;YAEN,aAAa,GAAG,sBAAsB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;;gBACjD,OAAO;oBACL,GAAG,EAAE,KAAK,CAAC,QAAQ,CAAC,QAAQ;oBAC5B,GAAG,EAAE,KAAK,CAAC,QAAQ,CAAC,SAAS;oBAC7B,KAAK,EAAE,MAAA,KAAK,CAAC,WAAW,0CAAE,OAAO;oBACjC,WAAW,EAAE,KAAK,CAAC,kBAAkB;oBACrC,WAAW,EAAE,MAAA,KAAK,CAAC,WAAW,0CAAE,OAAO;oBACvC,QAAQ,EAAE,KAAK,CAAC,QAAQ;oBACxB,aAAa,EAAE,KAAK,CAAC,aAAa;oBAClC,cAAc,EAAE,KAAK,CAAC,cAAc;oBACpC,SAAS,EAAE,MAAA,KAAK,CAAC,IAAI,0CAAE,KAAK;oBAC5B,aAAa,EAAE,MAAA,KAAK,CAAC,IAAI,0CAAE,SAAS;oBACpC,6CAA6C;iBAC9C,CAAA;YACH,CAAC,CAAC,CAAA;YAEF,MAAM,4BAAY,CAAC,UAAU,CAAC,gBAAgB,EAAE,EAAE,EAAE,aAAa,EAAE,aAAa,GAAG,EAAE,CAAC,CAAA;QACxF,CAAC;QAED,2BAA2B;QAC3B,MAAM,WAAW,GAAG,MAAM,IAAA,qCAAgB,EAAC,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,GAAG,CAAC,CAAA;QAE1E,wBAAwB;QACxB,MAAM,4BAAY,CAAC,UAAU,CAAC,sBAAsB,EAAE,EAAE,IAAI,EAAE,EAAE,WAAW,EAAE,aAAa,GAAG,EAAE,CAAC,CAAA;QAEhG,OAAO,WAAW,CAAA;IACpB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,wBAAwB,IAAI,IAAI,EAAE,KAAK,CAAC,CAAA;QAEtD,sBAAsB;QACtB,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,GAAG,CAAC,MAAM,4BAAY,CAAC,YAAY,CAAC,sBAAsB,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;QAE3G,gDAAgD;QAChD,IAAI,UAAU,GAAG,IAAI,CAAA;QACrB,IAAI,cAAc,EAAE,CAAC;YACnB,IAAI,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;gBACpC,UAAU,GAAG,cAAc,CAAA;YAC7B,CAAC;iBAAM,IAAI,OAAO,cAAc,KAAK,QAAQ,EAAE,CAAC;gBAC9C,eAAe;gBACf,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;YAC1C,CAAC;iBAAM,IAAI,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC;gBACzC,cAAc;gBACd,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;YAC1C,CAAC;iBAAM,IAAI,OAAO,cAAc,KAAK,QAAQ,EAAE,CAAC;gBAC9C,uCAAuC;gBACvC,IAAI,CAAC;oBACH,uCAAuC;oBACvC,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC;yBAC1C,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;yBAClC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;yBACrC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAA;oBAElC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACzB,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;oBACrC,CAAC;gBACH,CAAC;gBAAC,OAAO,eAAe,EAAE,CAAC;oBACzB,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,eAAe,CAAC,CAAA;gBACjD,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,6BAA6B,IAAI,GAAG,CAAC,CAAA;YACjD,OAAO,UAAU,CAAA;QACnB,CAAC;QAED,MAAM,KAAK,CAAA;IACb,CAAC;AACH,CAAC","sourcesContent":["import { Context } from 'koa'\n\nimport { config } from '@things-factory/env'\nimport { cacheService } from '@things-factory/cache-service'\n\nimport { WeatherType } from './types.js'\nimport { getGlobalWeatherData } from './open-meteo-adapter.js'\nimport { renderWeatherMap } from '../services/chrome-renderer.js'\n\n/**\n * 전체 날씨 지도 이미지 컨트롤러\n */\nexport async function globalWeatherController(ctx: Context) {\n const type = ctx.params.type\n const forceRefresh = ctx.query.refresh === 'true'\n\n try {\n // 유효한 날씨 타입인지 확인\n if (!['temperature', 'humidity', 'wind', 'precipitation'].includes(type)) {\n ctx.status = 400\n ctx.body = {\n error: `유효하지 않은 날씨 타입: ${type}`,\n validTypes: ['temperature', 'humidity', 'wind', 'precipitation']\n }\n return\n }\n\n // 날씨 이미지 가져오기\n const imageBuffer = await getGlobalWeatherImage(type, forceRefresh)\n\n // 이미지 데이터 응답\n ctx.body = Buffer.from(imageBuffer)\n\n // 이미지 응답 헤더 설정\n ctx.status = 200\n ctx.set('Content-Type', 'image/png')\n ctx.set('Cache-Control', 'public, max-age=3600') // 1시간 캐싱\n } catch (error) {\n console.error(`날씨 지도 생성 오류 (${type}):`, error)\n ctx.status = 500\n ctx.body = {\n error: '날씨 지도 생성 중 오류가 발생했습니다',\n message: error.message\n }\n }\n}\n\n/**\n * 전체 날씨 이미지 가져오기\n * @param type 날씨 타입 (temperature, humidity, wind, precipitation)\n * @param forceRefresh 캐시 무시하고 새로 가져오기\n */\nexport async function getGlobalWeatherImage(type: WeatherType, forceRefresh: boolean = false): Promise<Buffer> {\n if (!['temperature', 'humidity', 'wind', 'precipitation'].includes(type)) {\n throw new Error(`유효하지 않은 날씨 타입: ${type}`)\n }\n\n // 캐시 유효 시간 (분)\n const cacheLifetime = config.get('WEATHER_CACHE_LIFETIME') || 60\n\n try {\n // 캐시에서 데이터 확인\n if (!forceRefresh) {\n const { value: cachedDataJson } = (await cacheService.getFromCache(`global-weather-image`, { type })) || {}\n\n // Buffer.from이 객체를 직접 처리할 수 없으므로 타입에 따라 적절하게 처리\n let cachedData = null\n if (cachedDataJson) {\n if (Buffer.isBuffer(cachedDataJson)) {\n cachedData = cachedDataJson\n } else if (typeof cachedDataJson === 'string') {\n // 문자열이면 버퍼로 변환\n cachedData = cachedDataJson\n } else if (Array.isArray(cachedDataJson)) {\n // 배열이면 버퍼로 변환\n cachedData = cachedDataJson\n } else if (typeof cachedDataJson === 'object') {\n // 객체인 경우 처리 (JSON.stringify된 버퍼일 수 있음)\n try {\n // JSON 문자열로 변환했다가 다시 파싱하면 배열로 변환될 수 있음\n cachedData = Object.keys(cachedDataJson)\n .filter(key => !isNaN(Number(key)))\n .sort((a, b) => Number(a) - Number(b))\n .map(key => cachedDataJson[key])\n } catch (conversionError) {\n console.error('캐시 데이터 변환 실패:', conversionError)\n }\n }\n }\n\n if (cachedData) {\n console.log(`전체 날씨 이미지 캐시 사용 (타입: ${type})`)\n return cachedData\n }\n }\n\n console.log(`전체 날씨 이미지 생성 (타입: ${type})`)\n\n var { value: weatherPoints } = (await cacheService.getFromCache(`weather-points`, {})) || {}\n\n if (!weatherPoints) {\n const weatherData = await getGlobalWeatherData(10)\n\n const flattenedWeatherPoints = weatherData.reduce((acc, area) => {\n return acc.concat(area.weatherPoints)\n }, [])\n\n weatherPoints = flattenedWeatherPoints.map(point => {\n return {\n lat: point.location.latitude,\n lng: point.location.longitude,\n value: point.temperature?.current,\n description: point.weatherDescription,\n temperature: point.temperature?.current,\n humidity: point.humidity,\n cloudCoverage: point.cloudCoverage,\n solarRadiation: point.solarRadiation,\n windSpeed: point.wind?.speed,\n windDirection: point.wind?.direction\n // precipitation: point.precipitation.current\n }\n })\n\n await cacheService.setInCache(`weather-points`, {}, weatherPoints, cacheLifetime * 60)\n }\n\n // Headless Chrome으로 이미지 생성\n const imageBuffer = await renderWeatherMap(type, weatherPoints, 1800, 900)\n\n // 캐시에 저장 (초 단위로 TTL 설정)\n await cacheService.setInCache(`global-weather-image`, { type }, imageBuffer, cacheLifetime * 60)\n\n return imageBuffer\n } catch (error) {\n console.error(`전체 날씨 이미지 생성 실패 (타입: ${type}):`, error)\n\n // 에러 발생 시 캐시에서 데이터 확인\n const { value: cachedDataJson } = (await cacheService.getFromCache(`global-weather-image`, { type })) || {}\n\n // Buffer.from이 객체를 직접 처리할 수 없으므로 타입에 따라 적절하게 처리\n let cachedData = null\n if (cachedDataJson) {\n if (Buffer.isBuffer(cachedDataJson)) {\n cachedData = cachedDataJson\n } else if (typeof cachedDataJson === 'string') {\n // 문자열이면 버퍼로 변환\n cachedData = Buffer.from(cachedDataJson)\n } else if (Array.isArray(cachedDataJson)) {\n // 배열이면 버퍼로 변환\n cachedData = Buffer.from(cachedDataJson)\n } else if (typeof cachedDataJson === 'object') {\n // 객체인 경우 처리 (JSON.stringify된 버퍼일 수 있음)\n try {\n // JSON 문자열로 변환했다가 다시 파싱하면 배열로 변환될 수 있음\n const dataArray = Object.keys(cachedDataJson)\n .filter(key => !isNaN(Number(key)))\n .sort((a, b) => Number(a) - Number(b))\n .map(key => cachedDataJson[key])\n\n if (dataArray.length > 0) {\n cachedData = Buffer.from(dataArray)\n }\n } catch (conversionError) {\n console.error('캐시 데이터 변환 실패:', conversionError)\n }\n }\n }\n\n if (cachedData) {\n console.log(`에러로 인해 캐시된 날씨 이미지 사용 (타입: ${type})`)\n return cachedData\n }\n\n throw error\n }\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import './routes';
|