fmui-base 2.2.30 → 2.2.32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -3,6 +3,8 @@
3
3
  ---npm publish
4
4
 
5
5
  ## 更新日志
6
+ - 2.2.32: 下拉多选支持联动
7
+ - 2.2.31: 移动端结束流程修改,下拉字段支持计算,下拉多选支持联动
6
8
  - 2.2.30: 加签自动返回
7
9
  - 2.2.29: 关联表批示意见渲染
8
10
  - 2.2.28: 表单组件支持单独渲染
package/lib/form/form.js CHANGED
@@ -940,6 +940,8 @@ var PageHome = function (_React$Component) {
940
940
  dateFormat = "Y";
941
941
  } else if (dateDisplayFormat == "ODate") {
942
942
  dateFormat = "YMD";
943
+ } else if (dateDisplayFormat == "HourMin") {
944
+ dateFormat = "HM";
943
945
  } else if (dateDisplayFormat == "zhDate") {
944
946
  dateFormat = "YMD";
945
947
  dateFormatShow = "zhDate";
@@ -1413,6 +1415,7 @@ var PageHome = function (_React$Component) {
1413
1415
  }
1414
1416
  itemParam = t.dealwithLinkField(itemParam, data, status);
1415
1417
  itemParam = t.dealwithRelaField(itemParam, allForm);
1418
+
1416
1419
  if (itemType != 'weboffice') {
1417
1420
  itemParam.value = value;
1418
1421
  //处理特有按钮事件
@@ -1704,11 +1707,20 @@ var PageHome = function (_React$Component) {
1704
1707
  if (item.triggerTblName == mainTblName) {
1705
1708
  mainTblData.map(function (mainTblDataItem) {
1706
1709
  if (item.triggerFieldName == mainTblDataItem.key) {
1710
+ var nowValue = mainTblDataItem.value ? mainTblDataItem.value : "";
1711
+ if (nowValue && nowValue.indexOf("[") >= 0 && nowValue.indexOf("]") >= 0) {
1712
+ var nowValueArray = JSON.parse(nowValue);
1713
+ if (nowValueArray.length == 1) {
1714
+ nowValue = nowValueArray[0];
1715
+ } else {
1716
+ nowValue = nowValueArray.join(",");
1717
+ }
1718
+ }
1707
1719
  // if(item.triggerFieldVal == mainTblDataItem.value){
1708
1720
  var editType = item.editType;
1709
1721
  if (editType == 'hide' || editType == 'rowhide') {
1710
1722
  // relaFieldMap["key"]="isHidden";
1711
- if (item.triggerFieldVal == mainTblDataItem.value) {
1723
+ if (item.triggerFieldVal == nowValue || nowValue.split(',').indexOf(item.triggerFieldVal) != -1) {
1712
1724
  itemParam.isHidden = true;
1713
1725
  defaulthideFields.push(itemParam.uniqueName);
1714
1726
  console.log("true====" + itemParam.uniqueName);
@@ -1721,7 +1733,7 @@ var PageHome = function (_React$Component) {
1721
1733
  } else if (editType == 'must') {
1722
1734
  // relaFieldMap["key"]="required";
1723
1735
  var triggerFieldValBoolean = false;
1724
- if (item.triggerFieldVal == mainTblDataItem.value) {
1736
+ if (item.triggerFieldVal == nowValue || nowValue.split(',').indexOf(item.triggerFieldVal) != -1) {
1725
1737
  itemParam.required = true;
1726
1738
  triggerFieldValBoolean = true;
1727
1739
  } else {
@@ -1738,7 +1750,7 @@ var PageHome = function (_React$Component) {
1738
1750
  mainTblDataItem.required = triggerFieldValBoolean;
1739
1751
  }
1740
1752
  } else if (editType == 'edit') {
1741
- if (item.triggerFieldVal == mainTblDataItem.value) {
1753
+ if (item.triggerFieldVal == nowValue || nowValue.split(',').indexOf(item.triggerFieldVal) != -1) {
1742
1754
  itemParam.readOnly = false;
1743
1755
  } else {
1744
1756
  itemParam.readOnly = true;
@@ -1755,10 +1767,20 @@ var PageHome = function (_React$Component) {
1755
1767
  subTblData.map(function (mainTblDataItem) {
1756
1768
  if (item.triggerFieldName == mainTblDataItem.itemCode) {
1757
1769
  // if(item.triggerFieldVal == mainTblDataItem.value){
1770
+ var nowValue = mainTblDataItem.value ? mainTblDataItem.value : "";
1771
+ if (nowValue && nowValue.indexOf("[") >= 0 && nowValue.indexOf("]") >= 0) {
1772
+ var nowValueArray = JSON.parse(nowValue);
1773
+ if (nowValueArray.length == 1) {
1774
+ nowValue = nowValueArray[0];
1775
+ } else {
1776
+ nowValue = nowValueArray.join(",");
1777
+ }
1778
+ }
1779
+
1758
1780
  var editType = item.editType;
1759
1781
  if (editType == 'hide' || editType == 'rowhide') {
1760
1782
  // relaFieldMap["key"]="isHidden";
1761
- if (item.triggerFieldVal == mainTblDataItem.value) {
1783
+ if (item.triggerFieldVal == nowValue || nowValue.split(',').indexOf(item.triggerFieldVal) != -1) {
1762
1784
  itemParam.isHidden = true;
1763
1785
  } else {
1764
1786
  itemParam.isHidden = false;
@@ -1766,7 +1788,7 @@ var PageHome = function (_React$Component) {
1766
1788
  } else if (editType == 'must') {
1767
1789
  // relaFieldMap["key"]="required";
1768
1790
  var triggerFieldValBoolean = false;
1769
- if (item.triggerFieldVal == mainTblDataItem.value) {
1791
+ if (item.triggerFieldVal == nowValue || nowValue.split(',').indexOf(item.triggerFieldVal) != -1) {
1770
1792
  itemParam.required = true;
1771
1793
  triggerFieldValBoolean = true;
1772
1794
  } else {
@@ -1783,7 +1805,7 @@ var PageHome = function (_React$Component) {
1783
1805
  mainTblDataItem.required = triggerFieldValBoolean;
1784
1806
  }
1785
1807
  } else if (editType == 'edit') {
1786
- if (item.triggerFieldVal == mainTblDataItem.value) {
1808
+ if (item.triggerFieldVal == nowValue || nowValue.split(',').indexOf(item.triggerFieldVal) != -1) {
1787
1809
  itemParam.readOnly = false;
1788
1810
  } else {
1789
1811
  itemParam.readOnly = true;
@@ -1878,6 +1900,10 @@ var PageHome = function (_React$Component) {
1878
1900
  }
1879
1901
  } else {
1880
1902
  itemParam[key] = itemNew[i].value;
1903
+ //隐藏时取消必填
1904
+ if (key == 'isHidden' && itemNew[i].value) {
1905
+ itemParam.required = false;
1906
+ }
1881
1907
  }
1882
1908
  }
1883
1909
  this.setState({
package/lib/form/table.js CHANGED
@@ -5,6 +5,8 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = undefined;
7
7
 
8
+ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
9
+
8
10
  var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
9
11
 
10
12
  var _react = require('react');
@@ -445,7 +447,7 @@ var PageHome = function (_React$Component) {
445
447
  });
446
448
  }
447
449
  var uniqueName = itemParam.uniqueName;
448
- if (itemParam.itemType == 'text' || itemParam.itemType == 'datetime' || itemParam.itemType == 'detail') {
450
+ if (itemParam.itemType == 'text' || itemParam.itemType == 'datetime' || itemParam.itemType == 'detail' || itemParam.itemType == 'select' || itemParam.itemType == 'radio') {
449
451
  //当等于单行文本或者时间时
450
452
  this.forCalculateExpList(data, itemParam, uniqueName);
451
453
  if (data.subCalculateExpList) {
@@ -943,12 +945,14 @@ var PageHome = function (_React$Component) {
943
945
  var nowValueArray = JSON.parse(nowValue);
944
946
  if (nowValueArray.length == 1) {
945
947
  nowValue = nowValueArray[0];
948
+ } else {
949
+ nowValue = nowValueArray.join(",");
946
950
  }
947
951
  }
948
952
  var relaFieldMap = {};
949
953
  if (editType == 'hide' || editType == 'rowhide') {
950
954
  relaFieldMap["key"] = "isHidden";
951
- if (triggerFieldVal == nowValue) {
955
+ if (triggerFieldVal == nowValue || nowValue.split(',').indexOf(triggerFieldVal) != -1) {
952
956
  relaFieldMap["value"] = true;
953
957
  hideFlag = true;
954
958
  hideFields.push(relaFieldTblNameArrayItem);
@@ -961,10 +965,41 @@ var PageHome = function (_React$Component) {
961
965
  } else {
962
966
  relaFieldMap["value"] = false;
963
967
  }
968
+
969
+ if (relaFieldMap["value"]) {
970
+ //如果隐藏 则不必填
971
+ var relaFieldNameArray = formRelaFieldMapsObjItem.relaFieldTblName.split(",");
972
+ for (var i = 0; i < mainTblData.length; i++) {
973
+ var item = mainTblData[i];
974
+ if (mainTblName + "_" + item.key == relaFieldNameArray[index]) {
975
+ item.required = false;
976
+ }
977
+ }
978
+ for (var i = 0; i < subTbl.length; i++) {
979
+ var subTblData = subTbl[i].subTblData;
980
+ if (isNowSub) {
981
+ var subTblDataItem = subTblData[thisSubTblNo];
982
+ for (var b = 0; b < subTblDataItem.length; b++) {
983
+ if (subTblDataItem[b].uniqueName == relaFieldNameArray[index]) {
984
+ subTbl[i].subTblData[thisSubTblNo][b].required = false;
985
+ }
986
+ }
987
+ } else {
988
+ for (var a = 0; a < subTblData.length; a++) {
989
+ var subTblDataItem = subTblData[a];
990
+ for (var b = 0; b < subTblDataItem.length; b++) {
991
+ if (subTblDataItem[b].uniqueName == relaFieldNameArray[index]) {
992
+ subTbl[i].subTblData[a][b].required = false;
993
+ }
994
+ }
995
+ }
996
+ }
997
+ }
998
+ }
964
999
  } else if (editType == 'must') {
965
1000
  relaFieldMap["key"] = "required";
966
1001
  var triggerFieldValBoolean = mustFlag;
967
- if (triggerFieldVal == nowValue) {
1002
+ if (triggerFieldVal == nowValue || nowValue.split(',').indexOf(triggerFieldVal) != -1) {
968
1003
  relaFieldMap["value"] = true;
969
1004
  triggerFieldValBoolean = true;
970
1005
  mustFlag = true;
@@ -976,6 +1011,9 @@ var PageHome = function (_React$Component) {
976
1011
  } else {
977
1012
  relaFieldMap["value"] = true;
978
1013
  }
1014
+ if (hideFlag) {
1015
+ relaFieldMap["value"] = false;
1016
+ }
979
1017
  var relaFieldNameArray = formRelaFieldMapsObjItem.relaFieldTblName.split(",");
980
1018
  for (var i = 0; i < mainTblData.length; i++) {
981
1019
  var item = mainTblData[i];
@@ -1005,7 +1043,7 @@ var PageHome = function (_React$Component) {
1005
1043
  }
1006
1044
  } else if (editType == 'edit') {
1007
1045
  relaFieldMap["key"] = "readOnly";
1008
- if (triggerFieldVal == nowValue && defaultshowFields.indexOf(relaFieldTblNameArrayItem) != -1) {
1046
+ if ((triggerFieldVal == nowValue || nowValue.split(',').indexOf(triggerFieldVal) != -1) && defaultshowFields.indexOf(relaFieldTblNameArrayItem) != -1) {
1009
1047
  relaFieldMap["value"] = false;
1010
1048
  editFlag = true;
1011
1049
  } else if (!editFlag && defaultshowFields.indexOf(relaFieldTblNameArrayItem) != -1) {
@@ -1053,6 +1091,7 @@ var PageHome = function (_React$Component) {
1053
1091
  }
1054
1092
  }
1055
1093
  if (isSubField) {} else {
1094
+
1056
1095
  t.refs[relaFieldTblNameArrayItem].reloadItemParam([relaFieldMap]);
1057
1096
  }
1058
1097
  }
@@ -1105,7 +1144,11 @@ var PageHome = function (_React$Component) {
1105
1144
  }
1106
1145
  } else {
1107
1146
  fieldItemArray.push(fieldItem);
1108
- filedItemValue = fieldItem.value;
1147
+ if (_typeof(fieldItem.value) == 'object' && fieldItem.value != null) {
1148
+ filedItemValue = fieldItem.value.value;
1149
+ } else {
1150
+ filedItemValue = fieldItem.value;
1151
+ }
1109
1152
  }
1110
1153
 
1111
1154
  if (itemParam.itemType == 'datetime') {
@@ -1271,7 +1314,11 @@ var PageHome = function (_React$Component) {
1271
1314
  }
1272
1315
  } else {
1273
1316
  fieldItemArray.push(fieldItem);
1274
- filedItemValue = fieldItem.value;
1317
+ if (_typeof(fieldItem.value) == 'object' && fieldItem.value != null) {
1318
+ filedItemValue = fieldItem.value.value;
1319
+ } else {
1320
+ filedItemValue = fieldItem.value;
1321
+ }
1275
1322
  }
1276
1323
 
1277
1324
  if (itemParam.itemType == 'datetime') {
@@ -437,6 +437,7 @@ var PageHome = function (_React$Component) {
437
437
  backShortMessage: '0',
438
438
  addlotsShortMessage: '0',
439
439
  handleInvalidShortMessage: '0',
440
+ endShortMessage: '0',
440
441
  sysSMSsetting: '0',
441
442
  newspyj: {},
442
443
  spyj: newComment,
@@ -478,6 +479,8 @@ var PageHome = function (_React$Component) {
478
479
  param.backAttachId = ""; //退回增加附件
479
480
  param.backInitList = [];
480
481
  param.allActivity = [];
482
+ param.designActivityEnd = '';
483
+ param.allActivityEnd = [];
481
484
  param.designActivity = '';
482
485
  param.processData = '1';
483
486
  param.processDataList = [];
@@ -960,7 +963,8 @@ var PageHome = function (_React$Component) {
960
963
  transferShortMessage: '1,2',
961
964
  jumpShortMessage: '1,2',
962
965
  backShortMessage: '1,2',
963
- handleInvalidShortMessage: '1,2'
966
+ handleInvalidShortMessage: '1,2',
967
+ endShortMessage: '1,2'
964
968
  });
965
969
  } else if (sysSMSsetting && sysSMSsetting == '2') {
966
970
  t.setState({
@@ -969,7 +973,8 @@ var PageHome = function (_React$Component) {
969
973
  transferShortMessage: '1',
970
974
  jumpShortMessage: '1',
971
975
  backShortMessage: '1',
972
- handleInvalidShortMessage: '1'
976
+ handleInvalidShortMessage: '1',
977
+ endShortMessage: '1'
973
978
  });
974
979
  } else if (evoRemind && evoRemind == '2') {
975
980
  t.setState({
@@ -978,7 +983,8 @@ var PageHome = function (_React$Component) {
978
983
  transferShortMessage: '2',
979
984
  jumpShortMessage: '2',
980
985
  backShortMessage: '2',
981
- handleInvalidShortMessage: '2'
986
+ handleInvalidShortMessage: '2',
987
+ endShortMessage: '2'
982
988
  });
983
989
  } else {
984
990
  t.setState({
@@ -987,7 +993,8 @@ var PageHome = function (_React$Component) {
987
993
  transferShortMessage: '0',
988
994
  jumpShortMessage: '0',
989
995
  backShortMessage: '0',
990
- handleInvalidShortMessage: '0'
996
+ handleInvalidShortMessage: '0',
997
+ endShortMessage: '0'
991
998
  });
992
999
  }
993
1000
 
@@ -3030,7 +3037,42 @@ var PageHome = function (_React$Component) {
3030
3037
  this.recallClick();
3031
3038
  } else if (operate == 8) {
3032
3039
  //结束
3033
- this.handleEnd();
3040
+
3041
+ _db2.default.FlowModuleAPI.getAllActivity({
3042
+ processInstanceId: t.state.processInstanceId
3043
+ }).then(function (content) {
3044
+ var allActivity = content;
3045
+ if (allActivity != null && allActivity != '' && allActivity.length > 0) {
3046
+ var selectOptions = [];
3047
+ allActivity.map(function (item, index) {
3048
+ var option = {};
3049
+ option.value = item.id;
3050
+ option.text = item.name;
3051
+ option.disable = false;
3052
+ if (index == 0) {
3053
+ option.checked = true;
3054
+ } else {
3055
+ option.checked = false;
3056
+ }
3057
+ option.name = item.name;
3058
+
3059
+ selectOptions.push(option);
3060
+ });
3061
+ t.setState({
3062
+ allActivityEnd: selectOptions, //所有环节名称
3063
+ designActivityEnd: selectOptions[0].value, //选择的提醒环节id
3064
+ operate: operate,
3065
+ endReason: '',
3066
+ pageStatus: '1'
3067
+ }, function () {
3068
+ $(window).scrollTop(0);
3069
+ });
3070
+ }
3071
+ }).catch(function (error) {
3072
+ console.error(error);
3073
+ });
3074
+
3075
+ // this.handleEnd();
3034
3076
  } else if (operate == 9) {
3035
3077
  //作废
3036
3078
 
@@ -3951,6 +3993,9 @@ var PageHome = function (_React$Component) {
3951
3993
  } else if (operate == 5) {
3952
3994
  //跳转
3953
3995
  this.jump();
3996
+ } else if (operate == 8) {
3997
+ //结束
3998
+ this.handleEnd();
3954
3999
  } else if (operate == 9) {
3955
4000
  //作废
3956
4001
  this.handleInvalid();
@@ -5119,22 +5164,23 @@ var PageHome = function (_React$Component) {
5119
5164
  var isPush = t.state.isPush;
5120
5165
  var db = _db2.default;
5121
5166
 
5122
- // Dialog.confirm({
5123
- // locale: 'zh_CN',
5124
- // title: '提示',
5125
- // content: '是否要'+t.state.finalButtons.get("BASE_END")+'审批?',
5126
- // onConfirm() {
5127
-
5128
- // },
5129
- // onCancel() {
5130
- // console.log('confirm cancel');
5131
- // },
5132
- // });
5167
+ if (t.state.endReason == null || t.state.endReason.trim() == '') {
5168
+ _Toast2.default.show({
5169
+ type: 'error',
5170
+ content: '结束原因不能为空'
5171
+ });
5172
+ return false;
5173
+ }
5133
5174
  db.FlowModuleAPI.forceEnd({
5134
5175
  taskId: t.state.taskId,
5176
+ dataId: t.state.dataId,
5177
+ formId: t.state.formId,
5135
5178
  processInstanceId: t.state.processInstanceId,
5136
5179
  module: t.state.module,
5137
- permissionCode: t.state.permissionCode
5180
+ permissionCode: t.state.permissionCode,
5181
+ designActivity: t.state.designActivityEnd,
5182
+ reminders: t.state.endShortMessage,
5183
+ endReason: t.state.endReason
5138
5184
  }).then(function (content) {
5139
5185
  _Toast2.default.show({
5140
5186
  type: 'success',
@@ -5227,6 +5273,33 @@ var PageHome = function (_React$Component) {
5227
5273
  t.sendFlow(param);
5228
5274
  }
5229
5275
  }
5276
+ }, {
5277
+ key: 'selectEndActivityChange',
5278
+ value: function selectEndActivityChange(data) {
5279
+ var designActivity = '';
5280
+ for (var i = 0; i < data.length; i++) {
5281
+ if (data[i].value != '') {
5282
+ designActivity += ',' + data[i].value;
5283
+ }
5284
+ }
5285
+ if (designActivity != '') {
5286
+ designActivity = designActivity.substring(1);
5287
+ }
5288
+ this.setState({
5289
+ designActivityEnd: designActivity
5290
+ });
5291
+ }
5292
+ }, {
5293
+ key: 'changEndShortMessage',
5294
+ value: function changEndShortMessage(data) {
5295
+ var newremindStyle = "";
5296
+ for (var i = 0; i < data.length; i++) {
5297
+ if (i == data.length - 1) newremindStyle += data[i].value;else newremindStyle += data[i].value + ',';
5298
+ }
5299
+ this.setState({
5300
+ endShortMessage: newremindStyle
5301
+ });
5302
+ }
5230
5303
  }, {
5231
5304
  key: 'selectProcessDataListChange',
5232
5305
  value: function selectProcessDataListChange(value) {
@@ -6886,6 +6959,27 @@ var PageHome = function (_React$Component) {
6886
6959
  });
6887
6960
  }
6888
6961
 
6962
+ //结束
6963
+
6964
+ }, {
6965
+ key: 'changeEndReasonText',
6966
+ value: function changeEndReasonText(newValue) {
6967
+ var regRule = /(\ud83c[\udf00-\udfff])|(\ud83d[\udc00-\ude4f\ude80-\udeff])|[\u2600-\u2B55]/g;
6968
+ if (newValue.match(regRule)) {
6969
+ _Toast2.default.show({
6970
+ type: 'error',
6971
+ content: '请输入非表情字符'
6972
+ });
6973
+ return false;
6974
+ }
6975
+ if (newValue.length > 50) {
6976
+ newValue = newValue.substring(0, 50);
6977
+ }
6978
+ this.setState({
6979
+ endReason: newValue
6980
+ });
6981
+ }
6982
+
6889
6983
  /**
6890
6984
  * 取消操作
6891
6985
  **/
@@ -8302,6 +8396,42 @@ var PageHome = function (_React$Component) {
8302
8396
  value: this.state.sendMailText,
8303
8397
  onChange: this.changeSendMailText.bind(this) })
8304
8398
  ),
8399
+ _react2.default.createElement(
8400
+ _Group2.default.List,
8401
+ { className: this.state.operate == 8 ? '' : 't-DN' },
8402
+ _react2.default.createElement(
8403
+ 'div',
8404
+ { style: { background: '#f2f3f5', padding: '10px 5px' } },
8405
+ _react2.default.createElement(
8406
+ 'span',
8407
+ { className: 'theme-color' },
8408
+ _react2.default.createElement('i', { className: 'iconfont icon-back t-rotate-180 t-FS14 t-FR' }),
8409
+ '\u4F5C\u5E9F\u73AF\u8282'
8410
+ )
8411
+ ),
8412
+ _react2.default.createElement(_TextareaField2.default, {
8413
+ readOnly: false,
8414
+ label: '结束原因',
8415
+ required: true,
8416
+ minRows: 3, maxRows: 6,
8417
+ placeholder: '请输入结束原因',
8418
+ value: this.state.endReason,
8419
+ onChange: this.changeEndReasonText.bind(this) }),
8420
+ _react2.default.createElement(_CheckboxField2.default, {
8421
+ className: 't-W100',
8422
+ required: false,
8423
+ label: "提醒对象",
8424
+ readOnly: false,
8425
+ data: this.state.allActivityEnd,
8426
+ onChange: this.selectEndActivityChange.bind(this)
8427
+ }),
8428
+ _react2.default.createElement(_CheckboxField2.default, {
8429
+ data: this.state.shortMessageList,
8430
+ className: '',
8431
+ mode: 'list',
8432
+ onChange: this.changEndShortMessage.bind(this),
8433
+ required: false })
8434
+ ),
8305
8435
  _react2.default.createElement(
8306
8436
  _Group2.default.List,
8307
8437
  { className: this.state.operate == 9 ? '' : 't-DN' },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fmui-base",
3
- "version": "2.2.30",
3
+ "version": "2.2.32",
4
4
  "title": "fmui-base",
5
5
  "description": "fmui移动端组件",
6
6
  "main": "lib/index.js",