feat(plugin-gis-viewer): CB-664 moved types to LeafletMap.tsx

This commit is contained in:
Naumov Alexey
2021-03-26 17:25:44 +03:00
parent abac674d94
commit 103e45b44b
10 changed files with 191 additions and 134 deletions
@@ -1,24 +1,24 @@
const { resolve, join } = require('path');
const ModuleDependencyWarning = require('webpack/lib/ModuleDependencyWarning');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin');
const { resolve, join } = require('path')
const ModuleDependencyWarning = require('webpack/lib/ModuleDependencyWarning')
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
const ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin')
// const ESLintPlugin = require('eslint-webpack-plugin');
class IgnoreNotFoundExportPlugin {
apply(compiler) {
const messageRegExp = /export '.*'( \(imported as '.*'\))? was not found in/
function doneHook(stats) {
apply (compiler) {
const messageRegExp = /export '.*'( \(imported as '.*'\))? was not found in/;
function doneHook (stats) {
stats.compilation.warnings = stats.compilation.warnings.filter(warn => {
if (warn instanceof ModuleDependencyWarning && messageRegExp.test(warn.message)) {
return false
return false;
}
return true;
})
return true
});
}
if (compiler.hooks) {
compiler.hooks.done.tap('IgnoreNotFoundExportPlugin', doneHook)
compiler.hooks.done.tap('IgnoreNotFoundExportPlugin', doneHook);
} else {
compiler.plugin('done', doneHook)
compiler.plugin('done', doneHook);
}
}
}
@@ -27,37 +27,37 @@ const nodeModules = [
resolve('node_modules'), // product
resolve('../../node_modules'), // workspace
resolve('../../node_modules/@cloudbeaver/core-cli/node_modules'), // core-cli
]
];
module.exports = (env, argv) => {
process.env.NODE_ENV = argv.mode;
const devTool = 'source-map' in env && 'source-map';
const devMode = argv.mode !== 'production';
function getBaseStyleLoaders() {
const loaders = [];
process.env.NODE_ENV = argv.mode
const devTool = 'source-map' in env && 'source-map'
const devMode = argv.mode !== 'production'
function getBaseStyleLoaders () {
const loaders = []
// Broke styles order in dev mode
// if (devMode) {
// loaders.push('style-loader');
// } else {
loaders.push(MiniCssExtractPlugin.loader);
loaders.push(MiniCssExtractPlugin.loader)
// }
return loaders;
return loaders
}
function generateStyleLoaders(options = { hasModule: false }) {
const moduleScope = options.hasModule ? 'local' : 'global';
function generateStyleLoaders (options = { hasModule: false }) {
const moduleScope = options.hasModule ? 'local' : 'global'
const modules = {
mode: moduleScope,
localIdentName: '[local]___[hash:base64:5]',
};
}
const postCssPlugins = [
require('postcss-preset-env')({ stage: 0 }),
// require('postcss-discard-comments'),
require('reshadow/postcss')({ scopeBehaviour: moduleScope }),
];
]
return [
...getBaseStyleLoaders(),
@@ -88,7 +88,7 @@ module.exports = (env, argv) => {
},
},
},
];
]
}
var babelLoader = {
@@ -96,7 +96,7 @@ module.exports = (env, argv) => {
options: {
configFile: join(__dirname, 'babel.config.js'),
},
}
};
return {
// target: !devMode ? "web" : "browserslist",
@@ -149,7 +149,7 @@ module.exports = (env, argv) => {
],
},
{
test: /\.png$/,
test: /\.(png|jpg|gif)$/i,
use: [
{
loader: 'url-loader',
@@ -178,5 +178,5 @@ module.exports = (env, argv) => {
ignoreOrder: false, // Enable to remove warnings about conflicting order
}),
],
};
}
}
@@ -1,10 +1,8 @@
import { IExecutor, Executor } from '@cloudbeaver/core-executor';
import { ResultDataFormat } from '@cloudbeaver/core-sdk';
import type { IDatabaseResultSet } from '../../IDatabaseResultSet';
import { databaseDataAction } from '../DatabaseDataActionDecorator';
import type { IDatabaseResultDataAction } from '../IDatabaseDataAction';
import type { DatabaseDataEditorActionsData } from '../IDatabaseDataSelectAction';
import type { IResultSetElementKey } from './IResultSetElementKey';
@databaseDataAction()
@@ -12,12 +10,9 @@ export class ResultSetDataAction implements IDatabaseResultDataAction<IResultSet
static dataFormat = ResultDataFormat.Resultset;
result: IDatabaseResultSet;
readonly actions: IExecutor<DatabaseDataEditorActionsData<IResultSetElementKey>>;
constructor(
result: IDatabaseResultSet) {
this.result = result;
this.actions = new Executor();
}
getCellValue(cell: IResultSetElementKey): any {
@@ -7,16 +7,15 @@
*/
import { observer } from 'mobx-react-lite';
import { useCallback } from 'react';
import { useCallback, useMemo } from 'react';
import wkt from 'terraformer-wkt-parser';
import { TabContainerPanelComponent, TextPlaceholder } from '@cloudbeaver/core-blocks';
import { useTranslate } from '@cloudbeaver/core-localization';
import { IDataValuePanelProps, IDatabaseResultSet, ResultSetSelectAction, IResultSetElementKey } from '@cloudbeaver/plugin-data-viewer';
import { LeafletMap } from './LeafletMap';
import { IGeoJSONFeature, IAssociatedValue, LeafletMap } from './LeafletMap';
import { ResultSetGISAction } from './ResultSetGISAction';
import { useParseGISValues } from './useParseGISValues';
import type { AssociatedValue } from './useParseGISValues';
export const GISValuePresentation: TabContainerPanelComponent<IDataValuePanelProps<any, IDatabaseResultSet>> = observer(function GISValuePresentation({
model,
@@ -26,7 +25,7 @@ export const GISValuePresentation: TabContainerPanelComponent<IDataValuePanelPro
const modelResultData = model.getResult(resultIndex);
const selection = model.source.getAction(resultIndex, ResultSetSelectAction);
const GIS = model.source.getAction(resultIndex, ResultSetGISAction);
const gis = model.source.getAction(resultIndex, ResultSetGISAction);
const focusedCell = selection.getFocusedElement() as Required<IResultSetElementKey> | null;
const selectedCells = selection.getSelectedElements();
@@ -35,18 +34,36 @@ export const GISValuePresentation: TabContainerPanelComponent<IDataValuePanelPro
selectedCells.push(focusedCell);
}
const geoJSON = useParseGISValues(
model, resultIndex, GIS.getGISDataFor(selectedCells)
);
const parsedGISData = useMemo(() => {
const result: IGeoJSONFeature[] = [];
const getAssociatedValues = useCallback((cell: Required<IResultSetElementKey>): AssociatedValue[] => {
for (let i = 0; i < selectedCells.length; i++) {
try {
const cell = selectedCells[i];
const cellValue = gis.getCellValue(cell);
if (!cellValue) {
continue;
}
const parsedCellValue = wkt.parse(cellValue.mapText || cellValue.text);
result.push({ type: 'Feature', geometry: parsedCellValue, properties: { associatedCell: cell, srid: cellValue.srid } });
} catch {
continue;
}
}
return result;
}, [selectedCells, gis]);
const getAssociatedValues = useCallback((cell: Required<IResultSetElementKey>): IAssociatedValue[] => {
if (!modelResultData?.data?.columns || !modelResultData?.data?.rows) {
return [];
}
const { column: columnIndex, row: rowIndex } = cell;
return modelResultData.data.columns.reduce((result: AssociatedValue[], column, i) => {
return modelResultData.data.columns.reduce((result: IAssociatedValue[], column, i) => {
if (i !== columnIndex) {
result.push({
key: column.name!,
@@ -60,11 +77,11 @@ export const GISValuePresentation: TabContainerPanelComponent<IDataValuePanelPro
}, []);
}, [modelResultData, model, resultIndex]);
if (!geoJSON.length) {
if (!parsedGISData.length) {
return <TextPlaceholder>{translate('gis_presentation_placeholder')}</TextPlaceholder>;
}
return (
<LeafletMap geoJSON={geoJSON} getAssociatedValues={getAssociatedValues} />
<LeafletMap geoJSON={parsedGISData} getAssociatedValues={getAssociatedValues} />
);
});
@@ -8,7 +8,7 @@
import { Bootstrap, injectable } from '@cloudbeaver/core-di';
import { ResultDataFormat } from '@cloudbeaver/core-sdk';
import { DataValuePanelService, ResultSetDataAction, ResultSetSelectAction } from '@cloudbeaver/plugin-data-viewer';
import { DataValuePanelService, ResultSetSelectAction } from '@cloudbeaver/plugin-data-viewer';
import { GISValuePresentation } from './GISValuePresentation';
import { ResultSetGISAction } from './ResultSetGISAction';
@@ -32,23 +32,20 @@ export class GISViewerBootstrap extends Bootstrap {
}
const selection = context.model.source.getAction(context.resultIndex, ResultSetSelectAction);
const GIS = context.model.source.getAction(context.resultIndex, ResultSetGISAction);
const data = context.model.source.getAction(context.resultIndex, ResultSetDataAction);
const gis = context.model.source.getAction(context.resultIndex, ResultSetGISAction);
const focusedElement = selection.getFocusedElement();
if (focusedElement) {
const focusedElementValue = data.getCellValue(focusedElement);
return !GIS.isGISFormat(focusedElementValue);
return !gis.isGISFormat(focusedElement);
}
const selectedCells = selection.getSelectedElements();
if (selectedCells.length > 0) {
const firstSelectedCell = selectedCells[0];
const firstSelectedCellValue = data.getCellValue(firstSelectedCell);
return !GIS.isGISFormat(firstSelectedCellValue);
return !gis.isGISFormat(firstSelectedCell);
}
return true;
@@ -8,8 +8,11 @@
import type { IDatabaseDataResult, IDatabaseDataAction, IResultSetElementKey } from '@cloudbeaver/plugin-data-viewer';
import type { IGISType } from './ResultSetGISAction';
export interface IDatabaseDataGISAction<TKey, TResult extends IDatabaseDataResult>
extends IDatabaseDataAction<TResult> {
getGISDataFor: (selectedCells: Array<Required<IResultSetElementKey>>) => Array<Required<IResultSetElementKey>>;
isGISFormat: (value: any) => boolean;
getCellValue: (cell: IResultSetElementKey) => IGISType | undefined;
isGISFormat: (cell: IResultSetElementKey) => boolean;
}
@@ -11,6 +11,7 @@
import 'leaflet/dist/leaflet.css';
import type geojson from 'geojson';
import leaflet from 'leaflet';
import { useCallback, useEffect, useState } from 'react';
import { MapContainer, GeoJSON, LayersControl, TileLayer } from 'react-leaflet';
@@ -21,16 +22,29 @@ import { useSplit } from '@cloudbeaver/core-blocks';
import { useTranslate } from '@cloudbeaver/core-localization';
import type { IResultSetElementKey } from '@cloudbeaver/plugin-data-viewer';
import type { AssociatedValue, IGeoJSONFeature } from './useParseGISValues';
export interface IAssociatedValue {
key: string;
value: any;
}
export interface IBaseTile extends TileLayerProps {
interface IFeatureProperties {
srid: number;
associatedCell: Required<IResultSetElementKey>;
}
export interface IGeoJSONFeature extends GeoJSON.Feature<GeoJSON.GeometryObject, IFeatureProperties> {
type: 'Feature';
bbox?: geojson.BBox;
}
interface IBaseTile extends TileLayerProps {
name: string;
checked?: boolean;
}
interface Props {
geoJSON: IGeoJSONFeature[];
getAssociatedValues: (cell: Required<IResultSetElementKey>) => AssociatedValue[];
getAssociatedValues: (cell: Required<IResultSetElementKey>) => IAssociatedValue[];
}
const baseTiles: Record<'street' | 'topography', IBaseTile> = {
@@ -90,7 +104,7 @@ function getCRS(feature?: IGeoJSONFeature): leaflet.CRS {
}
}
const LEAFLET_STYLES = css`
const styles = css`
MapContainer {
width: 100%;
height: 100%;
@@ -160,7 +174,7 @@ export const LeafletMap: React.FC<Props> = function LeafletMap({ geoJSON, getAss
}
}, [splitContext.isResizing, splitContext.mode, mapRef, geoJSONLayerRef, crs, geoJSON]);
return styled(LEAFLET_STYLES)(
return styled(styles)(
<MapContainer crs={crs} whenCreated={setMapRef} zoom={12}>
<GeoJSON
// data is not optional property, see react-leaflet.d.ts
@@ -6,28 +6,37 @@
* you may not use this file except in compliance with the License.
*/
import { IExecutor, Executor } from '@cloudbeaver/core-executor';
import { ResultDataFormat } from '@cloudbeaver/core-sdk';
import { databaseDataAction, IResultSetElementKey, IDatabaseResultSet, DatabaseDataEditorActionsData } from '@cloudbeaver/plugin-data-viewer';
import { databaseDataAction, IResultSetElementKey, IDatabaseResultSet } from '@cloudbeaver/plugin-data-viewer';
import type { IDatabaseDataGISAction } from './IDatabaseDataGISAction';
export interface IGISType {
$type: string;
srid: number;
text: string;
mapText: string | null;
properties: Record<string, any> | null;
}
@databaseDataAction()
export class ResultSetGISAction implements IDatabaseDataGISAction<IResultSetElementKey, IDatabaseResultSet> {
GISValueType = 'geometry';
private readonly GISValueType = 'geometry';
static dataFormat = ResultDataFormat.Resultset;
result: IDatabaseResultSet;
readonly actions: IExecutor<DatabaseDataEditorActionsData<IResultSetElementKey>>;
constructor(
result: IDatabaseResultSet) {
this.result = result;
this.actions = new Executor();
}
isGISFormat(value: any): boolean {
isGISFormat(cell: IResultSetElementKey): boolean {
if (cell.row === undefined || cell.column === undefined) {
return false;
}
const value = this.result?.data?.rows?.[cell.row][cell.column];
if (value !== null && typeof value === 'object' && '$type' in value) {
return value.$type === this.GISValueType;
}
@@ -43,14 +52,21 @@ export class ResultSetGISAction implements IDatabaseDataGISAction<IResultSetElem
for (let i = 0; i < cells.length; i++) {
const cell = cells[i];
const cellValue = this.result.data?.rows[cell.row][cell.column];
if (this.isGISFormat(cellValue)) {
if (this.isGISFormat(cell)) {
result.push(cell);
}
}
return result;
}
getCellValue(cell: IResultSetElementKey): IGISType | undefined {
if (cell.row === undefined || cell.column === undefined || !this.result.data?.rows || !this.isGISFormat(cell)) {
return undefined;
}
return this.result.data.rows[cell.row][cell.column];
}
updateResult(result: IDatabaseResultSet) {
this.result = result;
}
@@ -1,6 +1,6 @@
export default [
['gis_presentation_title', 'Карта'],
['gis_presentation_placeholder', 'Нет доступных данных'],
['gis_presentation_base_tile_street_name', 'Улица'],
['gis_presentation_base_tile_topography_name', 'Рельеф'],
['gis_presentation_base_tile_street_name', 'Схема'],
['gis_presentation_base_tile_topography_name', 'Топографическая'],
];
@@ -1,65 +0,0 @@
/*
* CloudBeaver - Cloud Database Manager
* Copyright (C) 2020-2021 DBeaver Corp and others
*
* Licensed under the Apache License, Version 2.0.
* you may not use this file except in compliance with the License.
*/
import { useMemo } from 'react';
import wkt from 'terraformer-wkt-parser';
import type { IDatabaseDataModel, IDatabaseResultSet, IResultSetElementKey } from '@cloudbeaver/plugin-data-viewer';
import { ResultSetDataAction } from '@cloudbeaver/plugin-data-viewer';
interface GISType {
$type: string;
srid: number;
text: string;
mapText: string | null;
properties: Record<string, any> | null;
}
export interface AssociatedValue {
key: string;
value: any;
}
interface IFeatureProperties {
srid: number;
associatedCell: Required<IResultSetElementKey>;
}
export interface IGeoJSONFeature extends GeoJSON.Feature {
properties: IFeatureProperties;
}
export function useParseGISValues(
model: IDatabaseDataModel<any, IDatabaseResultSet>,
resultIndex: number,
values: Array<Required<IResultSetElementKey>>
) {
const geoJSON = useMemo(() => {
const result: IGeoJSONFeature[] = [];
const data = model.source.getAction(resultIndex, ResultSetDataAction);
for (let i = 0; i < values.length; i++) {
try {
const cell = values[i];
const cellValue = data.getCellValue(cell) as GISType | undefined;
if (!cellValue) {
continue;
}
const parsedCellValue = wkt.parse(cellValue.mapText || cellValue.text);
result.push({ type: 'Feature', geometry: parsedCellValue, properties: { associatedCell: cell, srid: cellValue.srid } });
} catch {
continue;
}
}
return result;
}, [model, resultIndex, values]);
return geoJSON;
}
+80
View File
@@ -2557,6 +2557,11 @@
resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.6.0.tgz#f022195afdfc942e088ee2101285a1d31c7d727f"
integrity sha512-cPqjjzuFWNK3BSKLm0abspP0sp/IGOli4p5I5fKFAzdS8fvjdOwDCfZqAaIiXd9lPkOWi3SUUfZof3hEb7J/uw==
"@react-leaflet/core@^1.0.2":
version "1.0.2"
resolved "https://registry.yarnpkg.com/@react-leaflet/core/-/core-1.0.2.tgz#39c6a73f61c666d5dcf673741cea2672fa4bbae1"
integrity sha512-QbleYZTMcgujAEyWGki8Lx6cXQqWkNtQlqf5c7NImlIp8bKW66bFpez/6EVatW7+p9WKBOEOVci/9W7WW70EZg==
"@reshadow/babel@^0.0.1-alpha.76", "@reshadow/babel@^0.0.1-issue-119.0":
version "0.0.1-issue-119.0"
resolved "https://registry.yarnpkg.com/@reshadow/babel/-/babel-0.0.1-issue-119.0.tgz#ef0e9228e06f821e3d2287f01569fb076153dbb5"
@@ -2745,6 +2750,16 @@
resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.45.tgz#e9387572998e5ecdac221950dab3e8c3b16af884"
integrity sha512-jnqIUKDUqJbDIUxm0Uj7bnlMnRm1T/eZ9N+AVMqhPgzrba2GhGG5o/jCTwmdPK709nEZsGoMzXEDUjcXHa3W0g==
"@types/geojson@*", "@types/geojson@^7946.0.0 || ^1.0.0":
version "7946.0.7"
resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-7946.0.7.tgz#c8fa532b60a0042219cdf173ca21a975ef0666ad"
integrity sha512-wE2v81i4C4Ol09RtsWFAqg3BUitWbHSpSlIo+bNdsCJijO9sjme+zm+73ZMCa/qMC8UEERxzGbvmr1cffo2SiQ==
"@types/geojson@^1.0.0":
version "1.0.6"
resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-1.0.6.tgz#3e02972728c69248c2af08d60a48cbb8680fffdf"
integrity sha512-Xqg/lIZMrUd0VRmSRbCAewtwGZiAk3mEUDvV4op1tGl+LvyPcb/MIOSxTl9z+9+J+R4/vpjiCAT4xeKzH9ji1w==
"@types/glob@^7.1.1":
version "7.1.3"
resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183"
@@ -2792,6 +2807,13 @@
dependencies:
"@types/node" "*"
"@types/leaflet@*":
version "1.7.0"
resolved "https://registry.yarnpkg.com/@types/leaflet/-/leaflet-1.7.0.tgz#3700fb5d29a8214fbd496565b08ec28e40cee808"
integrity sha512-ltv5jR+VjKSMtoDkxH61Rsbo0zLU7iqyOXpVPkAX4F+79fg2eymC7t0msWsfNaEZO1FGTIQATCCCQe+ijWoicg==
dependencies:
"@types/geojson" "*"
"@types/md5@^2.2.1":
version "2.2.1"
resolved "https://registry.yarnpkg.com/@types/md5/-/md5-2.2.1.tgz#0e2d65d8f6cc91aafbc9be5a4c08fee9250406ce"
@@ -2841,6 +2863,23 @@
dependencies:
"@types/react" "^16"
"@types/react-leaflet@^2.8.1":
version "2.8.1"
resolved "https://registry.yarnpkg.com/@types/react-leaflet/-/react-leaflet-2.8.1.tgz#acda592cf1b7dfe20ac81071c21c1e5521fe71a4"
integrity sha512-BbFyH9R/MecfXaz1Yt29oGBG8AxIKILgAniO61/kv9/sRe5/qj9yDxf3PW7M+nDl5Wn3V7Mp9inKF0LflV+KkQ==
dependencies:
"@types/leaflet" "*"
"@types/react" "*"
"@types/react@*":
version "17.0.3"
resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.3.tgz#ba6e215368501ac3826951eef2904574c262cc79"
integrity sha512-wYOUxIgs2HZZ0ACNiIayItyluADNbONl7kt8lkLjVK8IitMH5QMyAh75Fwhmo37r1m7L2JaFj03sIfxBVDvRAg==
dependencies:
"@types/prop-types" "*"
"@types/scheduler" "*"
csstype "^3.0.2"
"@types/react@^16", "@types/react@^16.9.49":
version "16.14.2"
resolved "https://registry.yarnpkg.com/@types/react/-/react-16.14.2.tgz#85dcc0947d0645349923c04ccef6018a1ab7538c"
@@ -2849,6 +2888,11 @@
"@types/prop-types" "*"
csstype "^3.0.2"
"@types/scheduler@*":
version "0.16.1"
resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.1.tgz#18845205e86ff0038517aab7a18a62a6b9f71275"
integrity sha512-EaCxbanVeyxDRTQBkdLb3Bvl/HK7PBK6UJjsSixB0iHKoWxE5uu2Q/DgtpOhPIojN0Zl1whvOd7PoHs2P0s5eA==
"@types/tern@*":
version "0.23.3"
resolved "https://registry.yarnpkg.com/@types/tern/-/tern-0.23.3.tgz#4b54538f04a88c9ff79de1f6f94f575a7f339460"
@@ -8247,6 +8291,11 @@ latest-version@5.1.0:
dependencies:
package-json "^6.3.0"
leaflet@^1.7.1:
version "1.7.1"
resolved "https://registry.yarnpkg.com/leaflet/-/leaflet-1.7.1.tgz#10d684916edfe1bf41d688a3b97127c0322a2a19"
integrity sha512-/xwPEBidtg69Q3HlqPdU3DnrXQOvQU/CCHA1tcDQVzOwm91YMYaILjNp7L4Eaw5Z4sOYdbBz6koWyibppd8Zqw==
lerna@^3.22.1:
version "3.22.1"
resolved "https://registry.yarnpkg.com/lerna/-/lerna-3.22.1.tgz#82027ac3da9c627fd8bf02ccfeff806a98e65b62"
@@ -11102,6 +11151,13 @@ react-is@^16.8.1:
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
react-leaflet@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/react-leaflet/-/react-leaflet-3.1.0.tgz#42deb5e454518016eff8bc85511ae58812f910f5"
integrity sha512-kdZS8NYbYFPmkQr7zSDR2gkKGFeWvkxqoqcmZEckzHL4d5c85dJ2gbbqhaPDpmWWgaRw9O29uA/77qpKmK4mTQ==
dependencies:
"@react-leaflet/core" "^1.0.2"
react-popper@^2.2.4:
version "2.2.4"
resolved "https://registry.yarnpkg.com/react-popper/-/react-popper-2.2.4.tgz#d2ad3d2474ac9f1abf93df3099d408e5aa6a2e22"
@@ -12769,6 +12825,21 @@ temp-write@^3.4.0:
temp-dir "^1.0.0"
uuid "^3.0.1"
terraformer-wkt-parser@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/terraformer-wkt-parser/-/terraformer-wkt-parser-1.2.1.tgz#8041e2aeb0c9f2b4cbbec8ec2c5c00c45ddfee02"
integrity sha512-+CJyNLWb3lJ9RsZMTM66BY0MT3yIo4l4l22Jd9CrZuwzk54fsu4Sc7zejuS9fCITTuTQy3p06d4MZMVI7v5wSg==
dependencies:
"@types/geojson" "^1.0.0"
terraformer "~1.0.5"
terraformer@~1.0.5:
version "1.0.12"
resolved "https://registry.yarnpkg.com/terraformer/-/terraformer-1.0.12.tgz#39e08f9c753606421acce02e122440c72dfa12d3"
integrity sha512-MokUp0+MFal4CmJDVL6VAO1bKegeXcBM2RnPVfqcFIp2IIv8EbPAjG0j/vEy/vuKB8NVMMSF2vfpVS/QLe4DBg==
optionalDependencies:
"@types/geojson" "^7946.0.0 || ^1.0.0"
terser-webpack-plugin@^5.1.1:
version "5.1.1"
resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.1.1.tgz#7effadee06f7ecfa093dbbd3e9ab23f5f3ed8673"
@@ -13249,6 +13320,15 @@ urix@^0.1.0:
resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72"
integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=
url-loader@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-4.1.1.tgz#28505e905cae158cf07c92ca622d7f237e70a4e2"
integrity sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==
dependencies:
loader-utils "^2.0.0"
mime-types "^2.1.27"
schema-utils "^3.0.0"
url-parse-lax@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c"