build: upgrade TS, babel plugin and to support optional chaining

This commit is contained in:
yuqi.pyq 2019-10-25 14:15:54 +08:00
parent b61be25c30
commit 5fc540f8fd
10 changed files with 40 additions and 23 deletions

3
.vscode/settings.json vendored Normal file
View File

@ -0,0 +1,3 @@
{
"typescript.tsdk": "node_modules/typescript/lib"
}

View File

@ -22,6 +22,7 @@ module.exports = (api) => {
'@babel/preset-typescript', '@babel/preset-typescript',
], ],
plugins: [ plugins: [
'@babel/plugin-proposal-optional-chaining',
[ [
'@babel/plugin-proposal-decorators', '@babel/plugin-proposal-decorators',
{ {

View File

@ -3,6 +3,7 @@
"devDependencies": { "devDependencies": {
"@babel/cli": "^7.5.5", "@babel/cli": "^7.5.5",
"@babel/core": "^7.5.5", "@babel/core": "^7.5.5",
"@babel/plugin-proposal-optional-chaining": "^7.6.0",
"@babel/preset-env": "^7.5.5", "@babel/preset-env": "^7.5.5",
"@babel/preset-react": "^7.0.0", "@babel/preset-react": "^7.0.0",
"@babel/preset-typescript": "^7.3.3", "@babel/preset-typescript": "^7.3.3",
@ -49,7 +50,7 @@
"npm-run-all": "^4.1.5", "npm-run-all": "^4.1.5",
"postcss": "^7.0.18", "postcss": "^7.0.18",
"postcss-plugin": "^1.0.0", "postcss-plugin": "^1.0.0",
"prettier": "^1.14.2", "prettier": "^1.18.2",
"raw-loader": "^1.0.0", "raw-loader": "^1.0.0",
"react": "^16.8.6", "react": "^16.8.6",
"react-docgen-typescript-loader": "^3.1.0", "react-docgen-typescript-loader": "^3.1.0",
@ -68,7 +69,7 @@
"tslint-config-prettier": "^1.15.0", "tslint-config-prettier": "^1.15.0",
"tslint-plugin-prettier": "^1.3.0", "tslint-plugin-prettier": "^1.3.0",
"tslint-react": "^3.6.0", "tslint-react": "^3.6.0",
"typescript": "^3.6.2", "typescript": "^3.7.0-beta",
"webpack": "^4.17.1", "webpack": "^4.17.1",
"webpack-cli": "^3.1.0", "webpack-cli": "^3.1.0",
"webpack-dev-server": "^3.1.7", "webpack-dev-server": "^3.1.7",

View File

@ -53,9 +53,9 @@ export default class StyleAttribute implements IStyleAttribute {
/** /**
* callback null , callback * callback null , callback
*/ */
if (this!.scale!.callback) { if (this.scale?.callback) {
// 使用用户返回的值处理 // 使用用户返回的值处理
const ret = this!.scale!.callback(params); const ret = this.scale?.callback(params);
if (!isNil(ret)) { if (!isNil(ret)) {
return [ret]; return [ret];
} }
@ -68,10 +68,10 @@ export default class StyleAttribute implements IStyleAttribute {
private defaultCallback = (params: unknown[]): unknown[] => { private defaultCallback = (params: unknown[]): unknown[] => {
// 没有 params 的情况,是指没有指定 fields直接返回配置的 values 常量 // 没有 params 的情况,是指没有指定 fields直接返回配置的 values 常量
if (params.length === 0) { if (params.length === 0) {
return this!.scale!.values; return this.scale?.values || [];
} }
return params.map((param, idx) => { return params.map((param, idx) => {
const scaleFunc = this.scale!.scalers![idx].func; const scaleFunc = this.scale?.scalers![idx].func;
// @ts-ignore // @ts-ignore
const value = scaleFunc(param); const value = scaleFunc(param);
return value; return value;

View File

@ -148,7 +148,7 @@ export default class PixelPickingPass implements IPass {
) { ) {
this.logger.info('picked'); this.logger.info('picked');
const pickedFeatureIdx = decodePickingColor(pickedColors); const pickedFeatureIdx = decodePickingColor(pickedColors);
const rawFeature = this.layer.getSource()!.data!.dataArray[ const rawFeature = this.layer.getSource()?.data?.dataArray[
pickedFeatureIdx pickedFeatureIdx
]; ];

View File

@ -213,7 +213,7 @@ export default class BaseLayer<ChildLayerStyleOptions = {}> implements ILayer {
}; };
return this; return this;
} }
public style(options: unknown): ILayer { public style(options: object): ILayer {
// @ts-ignore // @ts-ignore
this.styleOptions = { this.styleOptions = {
...this.styleOptions, ...this.styleOptions,

View File

@ -84,7 +84,7 @@ export default class DataMappingPlugin implements ILayerPlugin {
return []; return [];
} }
const scalers = attribute!.scale!.scalers || []; const scalers = attribute?.scale?.scalers || [];
const params: unknown[] = []; const params: unknown[] = [];
scalers.forEach(({ field }) => { scalers.forEach(({ field }) => {

View File

@ -71,8 +71,8 @@ export default class FeatureScalePlugin implements ILayerPlugin {
this.scaleCache = {}; this.scaleCache = {};
attributes.forEach((attribute) => { attributes.forEach((attribute) => {
if (attribute.scale) { if (attribute.scale) {
attribute!.scale!.scalers = this.parseFields( attribute.scale.scalers = this.parseFields(
attribute!.scale!.field || '', attribute.scale.field || '',
).map((field: string) => ({ ).map((field: string) => ({
field, field,
func: this.getOrCreateScale(field, attribute, dataArray), func: this.getOrCreateScale(field, attribute, dataArray),
@ -93,7 +93,7 @@ export default class FeatureScalePlugin implements ILayerPlugin {
this.scaleCache[field] = this.createScale(field, dataArray); this.scaleCache[field] = this.createScale(field, dataArray);
(this.scaleCache[field] as { (this.scaleCache[field] as {
range: (c: unknown[]) => void; range: (c: unknown[]) => void;
}).range(attribute!.scale!.values); }).range(attribute?.scale?.values || []);
return this.scaleCache[field]; return this.scaleCache[field];
} }
@ -114,7 +114,7 @@ export default class FeatureScalePlugin implements ILayerPlugin {
private createScale(field: string, data?: IParseDataItem[]): unknown { private createScale(field: string, data?: IParseDataItem[]): unknown {
// 首先查找全局默认配置例如 color // 首先查找全局默认配置例如 color
const scaleOption: IScale = this.configService.getConfig()!.scales![field]; const scaleOption: IScale | undefined = this.configService.getConfig()?.scales?.[field];
if (!data || !data.length) { if (!data || !data.length) {
// 数据为空 // 数据为空
@ -122,7 +122,7 @@ export default class FeatureScalePlugin implements ILayerPlugin {
? this.createDefaultScale(scaleOption) ? this.createDefaultScale(scaleOption)
: d3.scaleOrdinal([field]); : d3.scaleOrdinal([field]);
} }
const firstValue = data!.find((d) => !isNil(d[field]))![field]; const firstValue = data.find((d) => !isNil(d[field]))?.[field];
// 常量 Scale // 常量 Scale
if (isNumber(field) || (isNil(firstValue) && !scaleOption)) { if (isNumber(field) || (isNil(firstValue) && !scaleOption)) {
return d3.scaleOrdinal([field]); return d3.scaleOrdinal([field]);
@ -152,7 +152,7 @@ export default class FeatureScalePlugin implements ILayerPlugin {
const cfg: IScale = { const cfg: IScale = {
type, type,
}; };
const values = data!.map((item) => item[field]); const values = data?.map((item) => item[field]) || [];
// 默认类型为 Quantile Scales https://github.com/d3/d3-scale#quantile-scales // 默认类型为 Quantile Scales https://github.com/d3/d3-scale#quantile-scales
if (type !== ScaleTypes.CAT && type !== ScaleTypes.QUANTILE) { if (type !== ScaleTypes.CAT && type !== ScaleTypes.QUANTILE) {
cfg.domain = extent(values); cfg.domain = extent(values);

View File

@ -29,8 +29,6 @@ mapboxgl.accessToken =
'pk.eyJ1IjoieGlhb2l2ZXIiLCJhIjoiY2pxcmc5OGNkMDY3cjQzbG42cXk5NTl3YiJ9.hUC5Chlqzzh0FFd_aEc-uQ'; 'pk.eyJ1IjoieGlhb2l2ZXIiLCJhIjoiY2pxcmc5OGNkMDY3cjQzbG42cXk5NTl3YiJ9.hUC5Chlqzzh0FFd_aEc-uQ';
const LNGLAT_OFFSET_ZOOM_THRESHOLD = 12; const LNGLAT_OFFSET_ZOOM_THRESHOLD = 12;
let counter = 1;
/** /**
* AMapService * AMapService
*/ */
@ -166,7 +164,6 @@ export default class MapboxService implements IMapService {
public async init(mapConfig: IMapConfig): Promise<void> { public async init(mapConfig: IMapConfig): Promise<void> {
const { id, attributionControl = false, ...rest } = mapConfig; const { id, attributionControl = false, ...rest } = mapConfig;
this.$mapContainer = document.getElementById(id); this.$mapContainer = document.getElementById(id);
this.$mapContainer!.classList.add(`${counter++}`);
this.viewport = new Viewport(); this.viewport = new Viewport();

View File

@ -313,6 +313,14 @@
"@babel/helper-plugin-utils" "^7.0.0" "@babel/helper-plugin-utils" "^7.0.0"
"@babel/plugin-syntax-optional-catch-binding" "^7.2.0" "@babel/plugin-syntax-optional-catch-binding" "^7.2.0"
"@babel/plugin-proposal-optional-chaining@^7.6.0":
version "7.6.0"
resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.6.0.tgz#e9bf1f9b9ba10c77c033082da75f068389041af8"
integrity sha512-kj4gkZ6qUggkprRq3Uh5KP8XnE1MdIO0J7MhdDX8+rAbB6dJ2UrensGIS+0NPZAaaJ1Vr0PN6oLUgXMU1uMcSg==
dependencies:
"@babel/helper-plugin-utils" "^7.0.0"
"@babel/plugin-syntax-optional-chaining" "^7.2.0"
"@babel/plugin-proposal-unicode-property-regex@^7.4.4": "@babel/plugin-proposal-unicode-property-regex@^7.4.4":
version "7.4.4" version "7.4.4"
resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.4.4.tgz#501ffd9826c0b91da22690720722ac7cb1ca9c78" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.4.4.tgz#501ffd9826c0b91da22690720722ac7cb1ca9c78"
@ -378,6 +386,13 @@
dependencies: dependencies:
"@babel/helper-plugin-utils" "^7.0.0" "@babel/helper-plugin-utils" "^7.0.0"
"@babel/plugin-syntax-optional-chaining@^7.2.0":
version "7.2.0"
resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.2.0.tgz#a59d6ae8c167e7608eaa443fda9fa8fa6bf21dff"
integrity sha512-HtGCtvp5Uq/jH/WNUPkK6b7rufnCPLLlDAFN7cmACoIjaOOiXxUt3SswU5loHqrhtqTsa/WoLQ1OQ1AGuZqaWA==
dependencies:
"@babel/helper-plugin-utils" "^7.0.0"
"@babel/plugin-syntax-typescript@^7.2.0", "@babel/plugin-syntax-typescript@^7.3.3": "@babel/plugin-syntax-typescript@^7.2.0", "@babel/plugin-syntax-typescript@^7.3.3":
version "7.3.3" version "7.3.3"
resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.3.3.tgz#a7cc3f66119a9f7ebe2de5383cce193473d65991" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.3.3.tgz#a7cc3f66119a9f7ebe2de5383cce193473d65991"
@ -11815,7 +11830,7 @@ prepend-http@^1.0.0:
resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc"
integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=
prettier@^1.14.2, prettier@^1.16.4: prettier@^1.16.4, prettier@^1.18.2:
version "1.18.2" version "1.18.2"
resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.18.2.tgz#6823e7c5900017b4bd3acf46fe9ac4b4d7bda9ea" resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.18.2.tgz#6823e7c5900017b4bd3acf46fe9ac4b4d7bda9ea"
integrity sha512-OeHeMc0JhFE9idD4ZdtNibzY0+TPHSpSSb9h8FqtP+YnoZZ1sl8Vc9b1sasjfymH3SonAF4QcA2+mzHPhMvIiw== integrity sha512-OeHeMc0JhFE9idD4ZdtNibzY0+TPHSpSSb9h8FqtP+YnoZZ1sl8Vc9b1sasjfymH3SonAF4QcA2+mzHPhMvIiw==
@ -14755,10 +14770,10 @@ typedarray@^0.0.6:
resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
typescript@^3.6.2: typescript@^3.7.0-beta:
version "3.6.2" version "3.7.0-beta"
resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.6.2.tgz#105b0f1934119dde543ac8eb71af3a91009efe54" resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.7.0-beta.tgz#4ad556e0eee14b90ecc39261001690e16e5eeba9"
integrity sha512-lmQ4L+J6mnu3xweP8+rOrUwzmN+MRAj7TgtJtDaXE5PMyX2kCrklhg3rvOsOIfNeAWMQWO2F1GPc1kMD2vLAfw== integrity sha512-4jyCX+IQamrPJxgkABPq9xf+hUN+GWHVxoj+oey1TadCPa4snQl1RKwUba+1dyzYCamwlCxKvZQ3TjyWLhMGBA==
ua-parser-js@^0.7.18: ua-parser-js@^0.7.18:
version "0.7.20" version "0.7.20"