yzx преди 2 месеца
ревизия
014fe438c7
променени са 100 файла, в които са добавени 7406 реда и са изтрити 0 реда
  1. 24 0
      .hbuilderx/launch.json
  2. 51 0
      App.vue
  3. 11 0
      api/adv.js
  4. 15 0
      api/article.js
  5. 41 0
      api/common.js
  6. 26 0
      api/companyUser.js
  7. 17 0
      api/coupon.js
  8. 67 0
      api/course.js
  9. 12 0
      api/courseOrder.js
  10. 9 0
      api/department.js
  11. 16 0
      api/disease.js
  12. 24 0
      api/doctor.js
  13. 13 0
      api/doctorArticle.js
  14. 22 0
      api/drugReport.js
  15. 14 0
      api/follow.js
  16. 54 0
      api/healthRecords.js
  17. 21 0
      api/healthTongue.js
  18. 14 0
      api/hospital.js
  19. 39 0
      api/index.js
  20. 67 0
      api/inquiryOrder.js
  21. 42 0
      api/integral.js
  22. 25 0
      api/package.js
  23. 48 0
      api/packageOrder.js
  24. 39 0
      api/patient.js
  25. 38 0
      api/prescribe.js
  26. 29 0
      api/storeAfterSales.js
  27. 53 0
      api/storeOrder.js
  28. 24 0
      api/test.js
  29. 63 0
      api/user.js
  30. 49 0
      api/userAddress.js
  31. 12 0
      api/userVipOrder.js
  32. 156 0
      assets/css/common.less
  33. 2 0
      assets/iconfont/iconfont.css
  34. 9 0
      common/config.js
  35. 32 0
      common/css/flexCommon.css
  36. 85 0
      common/request.js
  37. 142 0
      components/CustomCamera/WeChat/Layout.vue
  38. 207 0
      components/CustomCamera/WeChat/index.vue
  39. 50 0
      components/Loading.vue
  40. 162 0
      components/Menu.vue
  41. BIN
      his_user_app.zip
  42. 20 0
      index.html
  43. 41 0
      main.js
  44. 72 0
      manifest.json
  45. 15 0
      node_modules/.bin/fxparser
  46. 17 0
      node_modules/.bin/fxparser.cmd
  47. 18 0
      node_modules/.bin/fxparser.ps1
  48. 15 0
      node_modules/.bin/json5
  49. 17 0
      node_modules/.bin/json5.cmd
  50. 18 0
      node_modules/.bin/json5.ps1
  51. 15 0
      node_modules/.bin/mime
  52. 17 0
      node_modules/.bin/mime.cmd
  53. 18 0
      node_modules/.bin/mime.ps1
  54. 15 0
      node_modules/.bin/nanoid
  55. 17 0
      node_modules/.bin/nanoid.cmd
  56. 18 0
      node_modules/.bin/nanoid.ps1
  57. 15 0
      node_modules/.bin/parser
  58. 17 0
      node_modules/.bin/parser.cmd
  59. 18 0
      node_modules/.bin/parser.ps1
  60. 15 0
      node_modules/.bin/sass
  61. 17 0
      node_modules/.bin/sass.cmd
  62. 18 0
      node_modules/.bin/sass.ps1
  63. 15 0
      node_modules/.bin/semver
  64. 17 0
      node_modules/.bin/semver.cmd
  65. 18 0
      node_modules/.bin/semver.ps1
  66. 15 0
      node_modules/.bin/tsc
  67. 17 0
      node_modules/.bin/tsc.cmd
  68. 18 0
      node_modules/.bin/tsc.ps1
  69. 15 0
      node_modules/.bin/tsserver
  70. 17 0
      node_modules/.bin/tsserver.cmd
  71. 18 0
      node_modules/.bin/tsserver.ps1
  72. 1073 0
      node_modules/@babel/parser/CHANGELOG.md
  73. 19 0
      node_modules/@babel/parser/LICENSE
  74. 19 0
      node_modules/@babel/parser/README.md
  75. 15 0
      node_modules/@babel/parser/bin/babel-parser.js
  76. 5 0
      node_modules/@babel/parser/index.cjs
  77. 1310 0
      node_modules/@babel/parser/lib/index.js
  78. 0 0
      node_modules/@babel/parser/lib/index.js.map
  79. 40 0
      node_modules/@babel/parser/lib/options.js
  80. 0 0
      node_modules/@babel/parser/lib/options.js.map
  81. 106 0
      node_modules/@babel/parser/lib/parse-error.js
  82. 0 0
      node_modules/@babel/parser/lib/parse-error.js.map
  83. 28 0
      node_modules/@babel/parser/lib/parse-error/credentials.js
  84. 0 0
      node_modules/@babel/parser/lib/parse-error/credentials.js.map
  85. 20 0
      node_modules/@babel/parser/lib/parse-error/module-errors.js
  86. 1 0
      node_modules/@babel/parser/lib/parse-error/module-errors.js.map
  87. 32 0
      node_modules/@babel/parser/lib/parse-error/pipeline-operator-errors.js
  88. 0 0
      node_modules/@babel/parser/lib/parse-error/pipeline-operator-errors.js.map
  89. 220 0
      node_modules/@babel/parser/lib/parse-error/standard-errors.js
  90. 0 0
      node_modules/@babel/parser/lib/parse-error/standard-errors.js.map
  91. 22 0
      node_modules/@babel/parser/lib/parse-error/strict-mode-errors.js
  92. 0 0
      node_modules/@babel/parser/lib/parse-error/strict-mode-errors.js.map
  93. 39 0
      node_modules/@babel/parser/lib/parse-error/to-node-description.js
  94. 0 0
      node_modules/@babel/parser/lib/parse-error/to-node-description.js.map
  95. 36 0
      node_modules/@babel/parser/lib/parser/base.js
  96. 0 0
      node_modules/@babel/parser/lib/parser/base.js.map
  97. 190 0
      node_modules/@babel/parser/lib/parser/comments.js
  98. 0 0
      node_modules/@babel/parser/lib/parser/comments.js.map
  99. 1824 0
      node_modules/@babel/parser/lib/parser/expression.js
  100. 0 0
      node_modules/@babel/parser/lib/parser/expression.js.map

+ 24 - 0
.hbuilderx/launch.json

@@ -0,0 +1,24 @@
+{ // launch.json 配置了启动调试时相关设置,configurations下节点名称可为 app-plus/h5/mp-weixin/mp-baidu/mp-alipay/mp-qq/mp-toutiao/mp-360/
+  // launchtype项可配置值为local或remote, local代表前端连本地云函数,remote代表前端连云端云函数
+    "version": "0.0",
+    "configurations": [{
+     	"app-plus" : 
+     	{
+     		"launchtype" : "local"
+     	},
+     	"default" : 
+     	{
+     		"launchtype" : "local"
+     	},
+     	"h5" : 
+     	{
+     		"launchtype" : "local"
+     	},
+     	"mp-weixin" : 
+     	{
+     		"launchtype" : "local"
+     	},
+     	"type" : "uniCloud"
+     }
+    ]
+}

Файловите разлики са ограничени, защото са твърде много
+ 51 - 0
App.vue


+ 11 - 0
api/adv.js

@@ -0,0 +1,11 @@
+import Request from '../common/request.js';
+let request = new Request().http
+
+ export function getAdvList(data) {
+	 return request('/app/adv/getAdvList',data,'GET');
+ }
+  
+ 
+
+ 
+ 

+ 15 - 0
api/article.js

@@ -0,0 +1,15 @@
+import Request from '../common/request.js';
+let request = new Request().http
+ 
+ export function getArticleList(data) {
+ 	 return request('/app/article/getArticleList',data,'GET');
+ }
+ export function getArticleById(data) {
+ 	 return request('/app/article/getArticleById',data,'GET');
+ }
+ export function getArticleCateList(data) {
+ 	 return request('/app/article/getArticleCateList',data,'GET');
+ }
+  
+  
+  

+ 41 - 0
api/common.js

@@ -0,0 +1,41 @@
+import Request from '../common/request.js';
+let request = new Request().http
+ export function getCitys(data) {
+	 return request('/app/common/getCitys',data,'GET');
+ }
+ export function getDicts(data) {
+	 return request('/app/common/getDicts',data,'GET');
+ }
+ export function uploadOSS(data) {
+ 	 return request('/app/common/uploadOSS',data,'POST','application/json;charset=UTF-8');
+ }
+ export function getTlsSig(data) {
+ 	 return request('/app/common/getTlsSig',data,'GET');
+ }
+ 
+ export function getDictByKey(data) {
+ 	 return request('/app/common/getDictByKey',data,'GET');
+ }
+ 
+ export function getConfigByKey(data) {
+ 	 return request('/app/common/getConfigByKey',data,'GET');
+ }
+ 
+ export function getWeixinOrderTemps() {
+ 	 return request('/app/common/getWeixinOrderTemps',null,'GET');
+ }
+ 
+ 
+ export function sendSmsCode(data) {
+ 	return request('/app/common/sendSmsCode',data,'POST','application/json;charset=UTF-8');
+ }
+ 
+ 
+
+ 
+ export function getHospitalList(data) {
+ 	 return request('/app/common/getHospitalList',data,'GET');
+ }
+ export function getDepartmentList(data) {
+ 	 return request('/app/common/getDepartmentList',data,'GET');
+ }

+ 26 - 0
api/companyUser.js

@@ -0,0 +1,26 @@
+import Request from '../common/request.js';
+let request = new Request().http
+ 
+ export function login(data) {
+ 	 return request('/app/companyUser/login',data,'POST','application/json;charset=UTF-8');
+ }
+ 
+ export function getUserInfo(data) {
+ 	 return request('/app/companyUser/getUserInfo',data,'GET','application/json;charset=UTF-8');
+ }
+ export function getQrImg(data) {
+ 	 return request('/app/companyUser/getQrImg',data,'GET','application/json;charset=UTF-8');
+ }
+ 
+ export function getCompanyUserCard(data) {
+ 	 return request('/app/companyUser/getCompanyUserCard',data,'GET','application/json;charset=UTF-8');
+ }
+ export function bindCompanyUser(data) {
+ 	 return request('/app/companyUser/bindCompanyUser',data,'POST','application/json;charset=UTF-8');
+ }
+ 
+ 
+ 
+  
+ 
+ 

+ 17 - 0
api/coupon.js

@@ -0,0 +1,17 @@
+import Request from '../common/request.js';
+let request = new Request().http
+ export function getCouponList(data) {
+	 return request('/app/coupon/getCouponList',data,'GET');
+ }
+ export function getCouponById(data) {
+	 return request('/app/coupon/getCouponById',data,'GET');
+ }
+ export function genCode(data) {
+ 	 return request('/app/coupon/genCode',data,'GET');
+ }
+ 
+ 
+ export function receive(data) {
+ 	 return request('/app/coupon/receive',data,'POST','application/json;charset=UTF-8');
+ }
+  

+ 67 - 0
api/course.js

@@ -0,0 +1,67 @@
+import Request from '../common/request.js';
+let request = new Request().http
+
+export function loginByMp(data) {
+ 	 return request('/app/wx/courseLogin',data,'POST','application/json;charset=UTF-8','https://h5api.his.cdwjyyh.com');
+ }
+
+// 获取真实链接
+export function getRealLink(data) {
+	return request('/app/course/getRealLink', data, 'GET','','https://h5api.his.cdwjyyh.com');
+}
+
+// h5课程简介
+export function getH5CourseByVideoId(data) {
+	return request('/app/course/getH5CourseByVideoId', data, 'GET','','https://h5api.his.cdwjyyh.com');
+}
+
+// h5课程详情加问答
+export function getH5CourseVideoDetails(data) {
+	return request('/app/course/getH5CourseVideoDetails', data, 'GET','','https://h5api.his.cdwjyyh.com');
+}
+
+// 答题发红包
+export function courseAnswer(data) {
+	return request('/app/course/courseAnswer', data, 'POST', 'application/json;charset=UTF-8','https://h5api.his.cdwjyyh.com');
+}
+
+// // 记录看课时间(旧)
+// export function getFinishCourseVideo(data) {
+// 	return request('/app/course/getFinishCourseVideo', data, 'POST', 'application/json;charset=UTF-8');
+// }
+
+// 记录看课时间(新)
+export function getFinishCourseVideo(data) {
+	return request('/app/course/updateWatchDuration', data, 'POST', 'application/json;charset=UTF-8','https://h5api.his.cdwjyyh.com');
+}
+
+// 关注客服
+export function getIsAddKf(data) {
+	return request('/app/course/isAddKf', data, 'POST', 'application/json;charset=UTF-8','https://h5api.his.cdwjyyh.com');
+}
+
+// 流量(缓冲百分比)
+export function getInternetTraffic(data) {
+	return request('/app/course/getInternetTraffic', data, 'POST', 'application/json;charset=UTF-8','https://h5api.his.cdwjyyh.com');
+}
+
+// 每十分钟获得积分
+export function getIntegralByH5Video(data) {
+	return request('/app/course/getIntegralByH5Video', data, 'POST', 'application/json;charset=UTF-8','https://h5api.his.cdwjyyh.com');
+}
+
+// 发送奖励
+export function sendReward(data) {
+	return request('/app/course/sendReward', data, 'POST', 'application/json;charset=UTF-8','https://h5api.his.cdwjyyh.com');
+}
+
+// 播放错误上报
+export function getErrMsg(data) {
+	return request('/app/course/getErrMsg', data, 'POST', 'application/x-www-form-urlencoded','https://h5api.his.cdwjyyh.com');
+}
+
+
+// 获取getWxConfig
+export function getWxConfig(data) {
+	return request('/app/wx/mp/getWxConfig', data, 'GET','','https://h5api.his.cdwjyyh.com');
+}

+ 12 - 0
api/courseOrder.js

@@ -0,0 +1,12 @@
+import Request from '../common/request.js';
+let request = new Request().http
+ 
+ 
+  
+ export function payment(data) {
+  	return request('/app/courseOrder/weChatPayment',data,'POST','application/json;charset=UTF-8');
+ }
+ export function getCourseOrderById(data) {
+ 	 return request('/app/courseOrder/getCourseOrderById',data,'GET');
+ }
+  

+ 9 - 0
api/department.js

@@ -0,0 +1,9 @@
+import Request from '../common/request.js';
+let request = new Request().http
+ 
+ export function getDepartmentList(data) {
+ 	 return request('/app/department/getDepartmentList',data,'GET');
+ }
+ 
+  
+  

+ 16 - 0
api/disease.js

@@ -0,0 +1,16 @@
+import Request from '../common/request.js';
+let request = new Request().http
+ 
+ export function getDiseaseList(data) {
+ 	 return request('/app/disease/getDiseaseList',data,'GET');
+ }
+ export function getDiseaseById(data) {
+ 	 return request('/app/disease/getDiseaseById',data,'GET');
+ }
+ 
+ 
+ 
+ 
+  
+  
+  

+ 24 - 0
api/doctor.js

@@ -0,0 +1,24 @@
+import Request from '../common/request.js';
+let request = new Request().http
+ 
+ export function getMyDoctorList(data) {
+ 	 return request('/app/doctor/getMyDoctorList',data,'GET');
+ }
+ export function getDoctorDetails(data) {
+ 	 return request('/app/doctor/getDoctorDetails',data,'GET');
+ }
+ export function getDoctorPingList(data) {
+ 	 return request('/app/doctor/getDoctorPingList',data,'GET');
+ }
+ export function getDoctorList(data) {
+ 	 return request('/app/doctor/getDoctorList',data,'GET');
+ }
+ export function checkFollow(data) {
+	return request('/app/doctor/checkFollow',data,'GET');
+ }
+  
+ export function doFollow(data) {
+  	return request('/app/doctor/doFollow',data,'POST','application/json;charset=UTF-8');
+ }
+  
+  

+ 13 - 0
api/doctorArticle.js

@@ -0,0 +1,13 @@
+import Request from '../common/request.js';
+let request = new Request().http
+ export function getDoctorArticleCateList(data) {
+ 	 return request('/app/doctorArticle/getDoctorArticleCateList',data,'GET');
+ }
+ export function getDoctorArticleList(data) {
+ 	 return request('/app/doctorArticle/getDoctorArticleList',data,'GET');
+ }
+ export function getDoctorArticleById(data) {
+ 	 return request('/app/doctorArticle/getDoctorArticleById',data,'GET');
+ }
+  
+   

+ 22 - 0
api/drugReport.js

@@ -0,0 +1,22 @@
+import Request from '../common/request.js';
+let request = new Request().http
+ 
+ export function getUserFollowDoctor() {
+ 	 return request('/app/drugReport/getUserFollowDoctor',null,'GET');
+ }
+ export function getDrugReportList(data) {
+ 	 return request('/app/drugReport/getDrugReportList',data,'GET');
+ }
+ export function getDrugReportById(data) {
+ 	 return request('/app/drugReport/getDrugReportById',data,'GET');
+ }
+ export function pingReport(data) {
+ 	 return request('/app/drugReport/pingReport',data,'POST','application/json;charset=UTF-8');
+ }
+ export function startDrugReport(data) {
+ 	 return request('/app/drugReport/startDrugReport',data,'POST','application/json;charset=UTF-8');
+ }
+ 
+  
+  
+  

+ 14 - 0
api/follow.js

@@ -0,0 +1,14 @@
+import Request from '../common/request.js';
+let request = new Request().http
+ 
+ export function getFollowList(data) {
+ 	 return request('/app/follow/getFollowList',data,'GET');
+ }
+ export function getFollowById(data) {
+ 	 return request('/app/follow/getFollowById',data,'GET');
+ }
+ export function doFollow(data) {
+ 	 return request('/app/follow/doFollow',data,'POST','application/json;charset=UTF-8');
+ }
+  
+  

+ 54 - 0
api/healthRecords.js

@@ -0,0 +1,54 @@
+import Request from '../common/request.js';
+let request = new Request().http
+
+// 获取我的健康档案
+export function myRecord() {
+	return request('/app/healthRecord/myRecord', null, 'GET');
+}
+
+// 查询今日健康生活
+export function HealthLife(data) {
+	return request('/app/healthRecord/HealthLife', data, 'GET');
+}
+
+ 
+
+// 查询健康史模板列表
+export function healthHistoryTempList() {
+	return request('/app/healthRecord/healthHistoryTempList', null, 'GET');
+}
+
+// 健康数据列表
+export function HealthDataList(data) {
+	return request('/app/healthRecord/HealthDataList', data, 'GET');
+}
+
+// 健康数据详细
+export function HealthData(id) {
+	return request('/app/healthRecord/HealthData/' + id, null, 'GET');
+}
+
+// 获取健康生活详细信息
+export function getHealthLife(id) {
+	return request('/app/healthRecord/getHealthLife/' + id, null, 'GET');
+}
+
+// 获取健康生活详细信息
+export function editRecord(data) {
+	return request('/app/healthRecord/editRecord', data, 'PUT','application/json;charset=UTF-8');
+}
+
+// 新增健康档案
+export function addRecord(data) {
+	return request('/app/healthRecord/addRecord', data, 'POST', 'application/json;charset=UTF-8');
+}
+
+// 新增健康生活
+export function addFsHealthLife(data) {
+	return request('/app/healthRecord/addFsHealthLife', data, 'POST', 'application/json;charset=UTF-8');
+}
+
+// 新增健康数据
+export function addFsHealthData(data) {
+	return request('/app/healthRecord/addFsHealthData', data, 'POST', 'application/json;charset=UTF-8');
+}

+ 21 - 0
api/healthTongue.js

@@ -0,0 +1,21 @@
+import Request from '../common/request.js';
+let request = new Request().http
+
+export function getHealthTongueList(data) {
+	return request('/app/healthTongue/getHealthTongueList', data, 'GET');
+}
+
+export function getCount(data) {
+	return request('/app/healthTongue/getCount', data, 'GET');
+}
+
+ 
+ export function getHealthTongueById(id) {
+ 	return request('/app/healthTongue/getHealthTongueById/'+id, null, 'GET');
+ }
+ 
+ 
+
+export function add(data) {
+	return request('/app/healthTongue/add', data, 'POST', 'application/json;charset=UTF-8');
+}

+ 14 - 0
api/hospital.js

@@ -0,0 +1,14 @@
+import Request from '../common/request.js';
+let request = new Request().http
+ 
+ export function getHospitalList(data) {
+ 	 return request('/app/hospital/getHospitalList',data,'GET');
+ }
+ export function getHospitalById(data) {
+ 	 return request('/app/hospital/getHospitalById',data,'GET');
+ }
+ 
+ 
+  
+  
+  

+ 39 - 0
api/index.js

@@ -0,0 +1,39 @@
+import Request from '../common/request.js';
+let request = new Request().http
+ export function getFamousPrescribeList(data) {
+	 return request('/app/index/getFamousPrescribeList',data,'GET');
+ }
+ export function getFamousPrescribeById(data) {
+	 return request('/app/index/getFamousPrescribeById',data,'GET');
+ }
+ export function getQuestionsList(data) {
+ 	 return request('/app/index/getQuestionsList',data,'GET');
+ }
+ export function getQuestionsById(data) {
+ 	 return request('/app/index/getQuestionsById',data,'GET');
+ }
+ export function getMedicatedFoodList(data) {
+ 	 return request('/app/index/getMedicatedFoodList',data,'GET');
+ }
+ export function getMedicatedFoodById(data) {
+ 	 return request('/app/index/getMedicatedFoodById',data,'GET');
+ }
+ export function getVesselList(data) {
+ 	 return request('/app/index/getVesselList',data,'GET');
+ }
+ export function getVesselById(data) {
+ 	 return request('/app/index/getVesselById',data,'GET');
+ }
+ export function getChineseMedicineList(data) {
+ 	 return request('/app/index/getChineseMedicineList',data,'GET');
+ }
+ export function getChineseMedicineById(data) {
+ 	 return request('/app/index/getChineseMedicineById',data,'GET');
+ }
+ 
+ 
+ 
+ 
+ 
+  
+  

+ 67 - 0
api/inquiryOrder.js

@@ -0,0 +1,67 @@
+import Request from '../common/request.js';
+let request = new Request().http
+ 
+ export function confirm(data) {
+  	return request('/app/inquiryOrder/confirm',data,'POST','application/json;charset=UTF-8');
+ }
+ export function create(data) {
+  	return request('/app/inquiryOrder/create',data,'POST','application/json;charset=UTF-8');
+ }
+ 
+ export function pay(data) {
+  	return request('/app/inquiryOrder/pay',data,'POST','application/json;charset=UTF-8');
+ }
+ 
+ export function compute(data) {
+  	return request('/app/inquiryOrder/compute',data,'POST','application/json;charset=UTF-8');
+ }
+ 
+ export function payment(data) {
+  	return request('/app/inquiryOrder/payment',data,'POST','application/json;charset=UTF-8');
+ }
+ 
+ export function cancel(data) {
+  	return request('/app/inquiryOrder/cancel',data,'POST','application/json;charset=UTF-8');
+ }
+ 
+ export function getMyInquiryOrderList(data) {
+ 	 return request('/app/inquiryOrder/getMyInquiryOrderList',data,'GET');
+ 
+ }
+ export function getMyInquiryOrderById(data) {
+ 	 return request('/app/inquiryOrder/getMyInquiryOrderById',data,'GET');
+ }
+ export function getMyInquiryOrderPingList(data) {
+ 	 return request('/app/inquiryOrder/getMyInquiryOrderPingList',data,'GET');
+ }
+ export function getInquiryOrderById(data) {
+ 	 return request('/app/inquiryOrder/getInquiryOrderById',data,'GET');
+ }
+ export function getCompanyUserInquiryOrderById(data) {
+ 	 return request('/app/inquiryOrder/getCompanyUserInquiryOrderById',data,'GET');
+ }
+ 
+ 
+ export function pingOrder(data) {
+  	return request('/app/inquiryOrder/pingOrder',data,'POST','application/json;charset=UTF-8');
+ }
+ 
+ export function getInquiryTemp(data) {
+ 	 return request('/app/inquiryOrder/getInquiryTemp',data,'GET');
+ }
+ export function getInquiryOrderReport(data) {
+ 	 return request('/app/inquiryOrder/getInquiryOrderReport',data,'GET');
+ }
+ export function getCurrentImInquiryOrderId(data) {
+ 	 return request('/app/inquiryOrder/getCurrentImInquiryOrderId',data,'GET');
+ }
+ 
+ export function getCompanyUserInquiryOrderList(data) {
+ 	 return request('/app/inquiryOrder/getCompanyUserInquiryOrderList',data,'GET');
+ 
+ }
+ 
+ 
+ 
+ 
+  

+ 42 - 0
api/integral.js

@@ -0,0 +1,42 @@
+import Request from '../common/request.js';
+let request = new Request().http
+ 
+ export function getIntegralGoodsList(data) {
+ 	 return request('/app/integral/getIntegralGoodsList',data,'GET');
+ }
+ export function getIntegralGoodsById(data) {
+ 	 return request('/app/integral/getIntegralGoodsById',data,'GET');
+ }
+ export function getUserIntegralLogsList(data) {
+ 	 return request('/app/integral/getUserIntegralLogsList',data,'GET');
+ }
+ export function getIntegralOrderList(data) {
+ 	 return request('/app/integral/getIntegralOrderList',data,'GET');
+ }
+ export function getIntegralOrderById(data) {
+ 	 return request('/app/integral/getIntegralOrderById',data,'GET');
+ }
+ 
+ export function createOrder(data) {
+  	return request('/app/integral/createOrder',data,'POST','application/json;charset=UTF-8');
+ }
+ 
+ export function getUserSign() {
+ 	 return request('/app/integral/getUserSign',null,'GET');
+ }
+ 
+ export function doSign(data) {
+ 	 return request('/app/integral/sign',data,'POST','application/json;charset=UTF-8');
+ }
+ 
+ 
+  
+  
+ 
+ 
+ 
+ 
+ 
+  
+  
+  

+ 25 - 0
api/package.js

@@ -0,0 +1,25 @@
+import Request from '../common/request.js';
+let request = new Request().http
+ 
+ 
+ 
+ export function getPackagCateList(data) {
+ 	 return request('/app/package/getPackagCateList',data,'GET');
+ }
+ export function getPackageList(data) {
+ 	 return request('/app/package/getPackageList',data,'GET');
+ }
+ export function getPackageById(data) {
+ 	 return request('/app/package/getPackageById',data,'GET');
+ }
+ export function getPackageDoctorList(data) {
+ 	 return request('/app/package/getPackageDoctorList',data,'GET');
+ }
+ 
+ 
+ 
+ 
+ 
+  
+  
+  

+ 48 - 0
api/packageOrder.js

@@ -0,0 +1,48 @@
+import Request from '../common/request.js';
+let request = new Request().http
+ 
+ 
+ export function create(data) {
+  	return request('/app/packageOrder/create',data,'POST','application/json;charset=UTF-8');
+ }
+ export function compute(data) {
+  	return request('/app/packageOrder/compute',data,'POST','application/json;charset=UTF-8');
+ }
+ export function pay(data) {
+  	return request('/app/packageOrder/pay',data,'POST','application/json;charset=UTF-8');
+ }
+ export function payment(data) {
+  	return request('/app/packageOrder/payment',data,'POST','application/json;charset=UTF-8');
+ }
+ export function getPackageOrderById(data) {
+ 	 return request('/app/packageOrder/getPackageOrderById',data,'GET');
+ }
+ export function getMyPackageOrderList(data) {
+ 	 return request('/app/packageOrder/getMyPackageOrderList',data,'GET');
+ }
+ export function getCompanyUserPackageOrderList(data) {
+ 	 return request('/app/packageOrder/getCompanyUserPackageOrderList',data,'GET');
+ }
+ export function getSharePackageOrderById(data) {
+ 	 return request('/app/packageOrder/getSharePackageOrderById',data,'GET');
+ }
+ export function getCompanyUserPackageOrderById(data) {
+ 	 return request('/app/packageOrder/getCompanyUserPackageOrderById',data,'GET');
+ }
+ 
+ export function cancelOrder(data) {
+  	return request('/app/packageOrder/cancel',data,'POST','application/json;charset=UTF-8');
+ }
+ 
+ 
+ export function getOrderCount(data) {
+ 	 return request('/app/packageOrder/getOrderCount',data,'GET');
+ }
+ 
+  
+ 
+ 
+ 
+ 
+ 
+  

+ 39 - 0
api/patient.js

@@ -0,0 +1,39 @@
+import Request from '../common/request.js';
+let request = new Request().http
+ export function getPatientList() {
+ 	 return request('/app/patient/getPatientList',null,'GET');
+ }
+ export function getPatientById(data) {
+ 	 return request('/app/patient/getPatientById',data,'GET');
+ }
+ export function delPatient(data) {
+ 	return request('/app/patient/delPatient',data,'POST','application/json;charset=UTF-8');
+ }
+ export function addPatient(data) {
+ 	return request('/app/patient/addPatient',data,'POST','application/json;charset=UTF-8');
+ }
+ export function editPatient(data) {
+ 	return request('/app/patient/editPatient',data,'POST','application/json;charset=UTF-8');
+ }
+ 
+ 
+ 
+ 
+ 
+
+ 
+ 
+ 
+ 
+  
+  
+ 
+ 
+ 
+ 
+
+ 
+ 
+ 
+ 
+ 

+ 38 - 0
api/prescribe.js

@@ -0,0 +1,38 @@
+import Request from '../common/request.js';
+let request = new Request().http
+
+
+export function getPrescribeList(data) {
+ 	return request('/app/prescribe/getPrescribeList',data,'GET');
+}
+export function getPrescribeById(data) {
+ 	return request('/app/prescribe/getPrescribeById',data,'GET');
+}
+ 
+
+
+
+
+
+ 
+ 
+ 
+ 
+ 
+
+ 
+ 
+ 
+ 
+  
+  
+ 
+ 
+ 
+ 
+
+ 
+ 
+ 
+ 
+ 

+ 29 - 0
api/storeAfterSales.js

@@ -0,0 +1,29 @@
+import Request from '../common/request.js';
+let request = new Request().http
+ 
+ export function getStoreOrderItems(data) {
+ 	 return request('/app/storeAfterSales/getStoreOrderItems',data,'GET');
+ } 
+ export function applyAfterSales(data) {
+ 	 return request('/app/storeAfterSales/applyAfterSales',data,'POST','application/json;charset=UTF-8');
+ }
+ 
+ export function getStoreAfterSalesList(data) {
+ 	 return request('/app/storeAfterSales/getStoreAfterSalesList',data,'GET');
+ } 
+ 
+ export function getStoreAfterSalesById(data) {
+ 	 return request('/app/storeAfterSales/getStoreAfterSalesById',data,'GET');
+ } 
+ export function revoke(data) {
+ 	 return request('/app/storeAfterSales/revoke',data,'POST','application/json;charset=UTF-8');
+ }
+ export function addDelivery(data) {
+ 	 return request('/app/storeAfterSales/addDelivery',data,'POST','application/json;charset=UTF-8');
+ }
+ 
+ 
+ 
+ 
+ 
+ 

+ 53 - 0
api/storeOrder.js

@@ -0,0 +1,53 @@
+import Request from '../common/request.js';
+let request = new Request().http
+
+ 
+ export function getMyStoreOrderList(data) {
+ 	 return request('/app/storeOrder/getMyStoreOrderList',data,'GET');
+ } 
+ 
+ export function getCompanyUserStoreOrderList(data) {
+ 	 return request('/app/storeOrder/getCompanyUserStoreOrderList',data,'GET');
+ }
+ 
+ 
+ export function getMyStoreOrderById(data) {
+ 	 return request('/app/storeOrder/getMyStoreOrderById',data,'GET');
+ } 
+ 
+ export function getStoreOrderById(data) {
+ 	 return request('/app/storeOrder/getStoreOrderById',data,'GET');
+ } 
+ 
+ export function getCompanyUserStoreOrderById(data) {
+ 	 return request('/app/storeOrder/getCompanyUserStoreOrderById',data,'GET');
+ } 
+ 
+ 
+  
+ export function pay(data) {
+ 	 return request('/app/storeOrder/pay',data,'POST','application/json;charset=UTF-8');
+ }
+ export function payment(data) {
+  	return request('/app/storeOrder/payment',data,'POST','application/json;charset=UTF-8');
+ }
+ 
+ export function compute(data) {
+ 	 return request('/app/storeOrder/compute',data,'POST','application/json;charset=UTF-8');
+ }
+ export function cancelOrder(data) {
+ 	 return request('/app/storeOrder/cancelOrder',data,'POST','application/json;charset=UTF-8');
+ }
+ export function finishOrder(data) {
+ 	 return request('/app/storeOrder/finishOrder',data,'POST','application/json;charset=UTF-8');
+ }
+ export function getExpress(data) {
+ 	 return request('/app/storeOrder/getExpress',data,'POST','application/json;charset=UTF-8');
+ }
+ export function getOrderCount() {
+ 	 return request('/app/storeOrder/getOrderCount',null,'GET');
+ } 
+ 
+ 
+ 
+ 

+ 24 - 0
api/test.js

@@ -0,0 +1,24 @@
+import Request from '../common/request.js';
+let request = new Request().http
+
+ export function getTestList(data) {
+ 	 return request('/app/test/getTestList',data,'GET');
+ }
+ export function getTestDetails(data) {
+ 	 return request('/app/test/getTestDetails',data,'GET');
+ }
+ 
+ export function getTestTempDetails(data) {
+ 	 return request('/app/test/getTestTempDetails',data,'GET');
+ }
+ export function getTestReport(data) {
+ 	 return request('/app/test/getTestReport',data,'GET');
+ }
+ export function getTestReportImg(data) {
+ 	 return request('/app/test/getTestReportImg',data,'GET');
+ }
+ export function doReport(data) {
+  	return request('/app/test/doReport',data,'POST','application/json;charset=UTF-8');
+ }
+  
+  

+ 63 - 0
api/user.js

@@ -0,0 +1,63 @@
+import Request from '../common/request.js';
+let request = new Request().http
+ 
+
+ export function wxLogin(data) {
+ 	 return request('/app/wx/login',data,'POST','application/json;charset=UTF-8');
+ }
+ export function loginByMiniApp(data) {
+ 	 return request('/app/wx/loginByMiniApp',data,'POST','application/json;charset=UTF-8');
+ }
+ 
+ 
+ export function getUserInfo() {
+ 	 return request('/app/user/getUserInfo',null,'GET');
+ }
+ 
+ 
+ 
+ export function checkLogin() {
+ 	 return request('/app/user/checkLogin',null,'GET');
+ }
+ 
+ export function editUser(data) {
+ 	return request('/app/user/editUser',data,'POST','application/json;charset=UTF-8');
+ }
+ 
+ export function registerDoctor(data) {
+ 	return request('/app/user/registerDoctor',data,'POST','application/json;charset=UTF-8');
+ }
+ 
+ 
+ export function getMyCouponList(data) {
+ 	 return request('/app/user/getMyCouponList',data,'GET');
+ }
+ 
+ export function getMyEnableCouponList(data) {
+ 	 return request('/app/user/getMyEnableCouponList',data,'GET');
+ }
+ 
+ 
+  // 健康管家二维码
+  export function getAppContactWay(userId) {
+  	 return request('/app/user/getAppContactWay/'+userId,null,'GET');
+  }
+ 
+ 
+  
+ 
+ 
+ 
+ 
+  
+  
+ 
+ 
+ 
+ 
+
+ 
+ 
+ 
+ 
+ 

+ 49 - 0
api/userAddress.js

@@ -0,0 +1,49 @@
+import Request from '../common/request.js';
+let request = new Request().http
+ 
+
+ export function getAddressByDefault() {
+ 	 return request('/app/userAddress/getAddressByDefault',null,'GET');
+ }
+ export function getAddressList() {
+ 	 return request('/app/userAddress/getAddressList',null,'GET');
+ }
+ export function getAddressById(data) {
+ 	 return request('/app/userAddress/getAddressById',data,'GET');
+ }
+ export function delAddress(data) {
+ 	return request('/app/userAddress/delAddress',data,'POST','application/json;charset=UTF-8');
+ }
+ export function addAddress(data) {
+ 	return request('/app/userAddress/addAddress',data,'POST','application/json;charset=UTF-8');
+ }
+ export function editAddress(data) {
+ 	return request('/app/userAddress/editAddress',data,'POST','application/json;charset=UTF-8');
+ }
+ export function parseAddress(data) {
+ 	return request('/app/userAddress/parseAddress',data,'POST','application/json;charset=UTF-8');
+ }
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+
+ 
+ 
+ 
+ 
+  
+  
+ 
+ 
+ 
+ 
+
+ 
+ 
+ 
+ 
+ 

+ 12 - 0
api/userVipOrder.js

@@ -0,0 +1,12 @@
+import Request from '../common/request.js';
+let request = new Request().http
+ 
+ 
+  
+ export function payment(data) {
+  	return request('/app/userVip/weChatPayment',data,'POST','application/json;charset=UTF-8');
+ }
+ export function getVipOrderById(data) {
+ 	 return request('/app/userVip/getVipOrderById',data,'GET');
+ }
+  

+ 156 - 0
assets/css/common.less

@@ -0,0 +1,156 @@
+  
+ page {
+   background: #f5f5f5;
+   height: 100%;
+ }
+ .container{
+   height: 100%;
+ } 
+  
+  /*单行文本溢出省略号*/
+  .one-t {
+    overflow: hidden;
+    white-space: nowrap;
+    text-overflow: ellipsis;
+    transition: all linear 0.2s;
+  }
+  
+  /*多行文本溢出省略号*/
+  .more-t {
+    overflow: hidden;
+    text-overflow: ellipsis;
+    display: -webkit-box;
+    -webkit-line-clamp: 2;
+    -webkit-box-orient: vertical;
+    transition: all linear 0.2s;
+  }
+  
+  /* ==================
+            flex布局(colorui里面也有相关基础样式)
+   ==================== */
+  /* x水平排列*/
+  .x-f {
+    display: flex;
+    align-items: center;
+  }
+  
+  /*x两端且水平居中*/
+  .x-bc {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+  }
+  
+  /*x平分且水平居中*/
+  .x-ac {
+    display: flex;
+    justify-content: space-around;
+    align-items: center;
+  }
+  
+  /*x水平靠上对齐*/
+  .x-start {
+    display: flex;
+    align-items: flex-start;
+  }
+  
+  /*x水平靠下对齐*/
+  .x-end {
+    display: flex;
+    align-items: flex-end;
+  }
+  
+  /*上下左右居中*/
+  .x-c {
+    display: flex;
+    justify-content: center;
+    align-items: center;
+  }
+  
+  /*y竖直靠左*/
+  .y-start {
+    display: flex;
+    flex-direction: column;
+    align-items: flex-start;
+  }
+  
+  /*y竖直靠右*/
+  .y-end {
+    display: flex;
+    flex-direction: column;
+    align-items: flex-end;
+  }
+  
+  /*y竖直居中*/
+  .y-f {
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+  }
+  
+  // y竖直两端
+  .y-b {
+    display: flex;
+    flex-direction: column;
+    justify-content: space-between;
+  }
+  
+  /*y竖直两端居中*/
+  .y-bc {
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+    justify-content: space-between;
+  }
+ /* layout */
+ .acea-row {
+   display: flex;
+   flex-wrap: wrap;
+   /* 辅助类 */
+ }
+ .acea-row.row-middle {
+   align-items: center;
+ }
+ .acea-row.row-top {
+   align-items: flex-start;
+ }
+ .acea-row.row-bottom {
+   align-items: flex-end;
+ }
+ .acea-row.row-center {
+   justify-content: center;
+ }
+ .acea-row.row-right {
+   justify-content: flex-end;
+ }
+ .acea-row.row-left {
+   justify-content: flex-start;
+ }
+ .acea-row.row-between {
+   justify-content: space-between;
+ }
+ .acea-row.row-around {
+   justify-content: space-around;
+ }
+ .acea-row.row-column-around {
+   flex-direction: column;
+   justify-content: space-around;
+ }
+ .acea-row.row-column {
+   flex-direction: column;
+ }
+ .acea-row.row-column-between {
+   flex-direction: column;
+   justify-content: space-between;
+ }
+ /* 上下左右垂直居中 */
+ .acea-row.row-center-wrapper {
+   align-items: center;
+   justify-content: center;
+ }
+ /* 上下两边居中对齐 */
+ .acea-row.row-between-wrapper {
+   align-items: center;
+   justify-content: space-between;
+ }
+  

Файловите разлики са ограничени, защото са твърде много
+ 2 - 0
assets/iconfont/iconfont.css


+ 9 - 0
common/config.js

@@ -0,0 +1,9 @@
+/**
+ * 本项目只有这里修改相应配置信息
+ */
+
+const config={};
+export default{
+	config:config,
+ 
+}

+ 32 - 0
common/css/flexCommon.css

@@ -0,0 +1,32 @@
+/* flex布局 */
+.u-f,
+.u-f-ac,
+.u-f-ajc {
+	display: flex;
+}
+
+.u-f-ac,
+.u-f-ajc {
+	align-items: center;
+}
+
+.u-f-ajc {
+	justify-content: center;
+}
+
+.u-f-jsb {
+	justify-content: space-between;
+}
+
+.u-f-fc {
+	flex-direction: column;
+}
+.u-f-ww{
+	flex-wrap: wrap;
+}
+/* @mixin u-flex($flexD, $alignI, $justifyC) {
+		display: flex;
+		flex-direction: $flexD;
+		align-items: $alignI;
+		justify-content: $justifyC;
+	} */

+ 85 - 0
common/request.js

@@ -0,0 +1,85 @@
+// uni-app请求封装
+export default class Request {
+	http(router, data = {}, method,contentType,url) {
+		let that = this;
+		// let path = 'http://127.0.0.1:8113';
+		// var path=uni.getStorageSync('requestPath')
+		// var path = 'https://userapp.his.cdwjyyh.com';
+		var path = 'https://app.rtys.cdwjyyh.com';
+		let token="";
+		if(url!=null){
+			path= url;
+			token= uni.getStorageSync('AppTokenmini_RTCourse')
+		}
+		else{
+			path= 'https://app.rtys.cdwjyyh.com';
+			uni.setStorageSync('requestPath',path)
+			token= uni.getStorageSync('AppToken');
+		}
+		// uni.showLoading({
+		// 	title: '加载中'
+		// });
+		// var path = 'https://test.userapp.his.cdwjyyh.com';
+		return new Promise((resolve, reject) => {
+			// let token = uni.getStorageSync('AppToken');
+			let CompanyUserToken = uni.getStorageSync('CompanyUserToken');
+			var httpContentType='application/x-www-form-urlencoded';
+			if(contentType!=undefined){
+				//application/json;charset=UTF-8
+				httpContentType=contentType;
+			}
+			var routers=router;
+			// 请求
+			uni.request({
+				header: {
+					// 'Content-Type': 'application/x-www-form-urlencoded',
+					'Content-Type': httpContentType,
+					'AppToken': token,
+					'CompanyUserToken':CompanyUserToken
+				},
+				url: `${path}${router}`,
+				data: data,
+				method: method,
+				success: (res) => {
+					//收到开发者服务器成功返回的回调函数
+					if(res.data.code==401){//没有权限直接退出到登录界面
+						let pages = getCurrentPages();
+						let url = pages[ pages.length - 1]; //当前页页面实例
+						console.log(url)
+						//如果登录界面已打开,自动关闭
+						if(url!=undefined&&url.route=="pages/auth/login"){
+							resolve(res.data)
+							return;
+						}
+						uni.navigateTo({
+							url:'/pages/auth/login',
+							success: () => {
+								
+							},
+							fail: () => {
+							}
+						})
+						return;
+					}
+					if (res.data.token) {
+						uni.setStorageSync('AppToken',res.data.token)
+					}
+					resolve(res.data)
+				},
+				fail:(res) =>{
+					//接口调用失败的回调函数
+				},
+				complete:(res) =>{
+					//接口调用结束的回调函数(调用成功、失败都会执行)
+					if (res.data.code == 401) {
+						return false
+					}
+					//uni.hideLoading();
+				}
+				
+			})
+		})
+		 
+	}
+	
+}

+ 142 - 0
components/CustomCamera/WeChat/Layout.vue

@@ -0,0 +1,142 @@
+<!-- 公共布局组件 -->
+<template>
+	<view class="custom-camera">
+		<view class="camera-wrap" :style="{height:cameraHeight+'px'}">
+			<slot></slot>
+		</view>
+		<view class="camera-footer" id="camera-footer">
+			<view class="usenum">当前可免费试用<text style="color: #F54D04;margin: 0 6rpx;">{{counts || 0}}</text>次</view>
+			<view class="camera-options">
+				<view class="camera-options-left camera-item">
+					<image :src="baseUrl+'/images/album_icon.png'" mode="scaleToFill" style="width: 65rpx;height:60rpx;" @click="handleClikFn('album')"></image>
+					<text>相册上传</text>
+				</view>
+				<view class="camera-options-center camera-item" @click="takePhoto()">
+					<view class="photograph-btn"></view>
+				</view>
+				<view class="camera-options-ritht camera-item"  @click="switchCamera()">
+					<image :src="baseUrl+'/images/tongue_info.png'" mode="scaleToFill" style="width: 67rpx;height:60rpx;" @click="handleClikFn('reportlist')"></image>
+					<text>切换摄像头</text>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {getCount} from '@/api/healthTongue.js'
+	// 提供一个相机的插槽位置
+	// 底部可以自定义最右侧按钮(相册/反转)
+	export default {
+		data() {
+			return {
+				baseUrl:uni.getStorageSync('requestPath'),
+				cameraHeight: '', //相机画面宽度
+				optionsHeight: '', //操作区域
+				counts: 0,
+				url:null,
+			}
+		},
+		onLoad() {
+			
+			this.getCount()
+		},
+		methods: {
+			switchCamera(){
+				this.$emit('switchCamera')
+			},
+			getCount(){
+				getCount().then(
+					res => {
+						if(res.code==200){
+							this.counts=res.data;
+						}else{
+							uni.showToast({
+								icon:'none',
+								title: "请求失败",
+							});
+						}
+					},
+					rej => {}
+				);
+			},
+			takePhoto() {
+				let that= this
+				const ctx = wx.createCameraContext()
+				console.log("ctx", ctx);
+				ctx.takePhoto({
+				  quality: 'high',
+				  success: (res) => {
+					  uni.setStorageSync("tongueUrl",res.tempImagePath)
+					  console.log("res", res.tempImagePath);
+					  this.$emit('takePhoto')
+				  }
+				})
+			},
+			handleClikFn(instruct) {
+				this.$emit('instruct', instruct)
+			}
+		},
+		mounted() {
+			const query = uni.createSelectorQuery().in(this);
+			query
+			  .select("#camera-footer")
+			  .boundingClientRect((data) => {
+				this.cameraHeight = uni.getSystemInfoSync().screenHeight - data.height
+			  })
+			  .exec();
+		},
+	}
+</script>
+
+<style lang="scss" scoped>
+	.custom-camera {
+		height: 100vh;
+		background-color: #000;
+		
+		.usenum {
+			font-family: SourceHanSansCN;
+			font-weight: 400;
+			font-size: 24rpx;
+			color: #FFFFFF;
+			padding: 14rpx;
+			text-align: center;
+		}
+		.camera-options {
+			width: 100%;
+			padding-top: 13rpx;
+			padding-bottom: 60rpx;
+			box-sizing: border-box;
+			font-family: SourceHanSansCN;
+			font-weight: 400;
+			font-size: 27rpx;
+			color: #FFFFFF;
+			display: flex;
+			align-items: center;
+			justify-content: space-evenly;
+			.camera-item {
+				display: flex;
+				flex-direction: column;
+				align-items: center;
+				image {
+					margin-bottom: 21rpx;
+				}
+			}
+			.camera-options-center {
+				width: 131rpx;
+				height: 131rpx;
+				border-radius: 50%;
+				border: 3px solid #FFFFFF;
+				display: flex;
+				align-items: center;
+				justify-content: center;
+			}
+			.photograph-btn {
+				width: 109rpx;
+				height: 109rpx;
+				background: #F54D04;
+				border-radius: 50%;
+			}
+		}
+	}
+</style>

+ 207 - 0
components/CustomCamera/WeChat/index.vue

@@ -0,0 +1,207 @@
+<template>
+	<Layout @instruct="handleInstruct" @switchCamera="switchCamera()" @takePhoto="takePhoto" >
+		<camera class="camera"  mode="normal" :device-position="device" @error="error"
+			style="width: 100%; height: 100%;">
+			<cover-view class="cover-view">
+				<cover-view class="uni-nav-bar">
+					<cover-view :style="{height: statusBarHeight,width: '100%'}"></cover-view>
+					<cover-view class="uni-nav-barbox"  :style="{width: menuLeft}">
+						<cover-view class="uni-nav-back" @click="back">返回
+							<!-- <uni-icons color="#fff" type="left" size="20" /> -->
+						</cover-view>
+						<cover-view class="uni-nav-title">
+							<cover-view>使用教程</cover-view>
+							<cover-image class="ques" :src="baseUrl+'/images/ques.png'" mode="aspectFill"></cover-image>
+						</cover-view>
+					</cover-view>
+				</cover-view>
+				<cover-view class="title">请拍摄舌面</cover-view>
+				<cover-view class="tips">舌尖放松,舌面平展,舌尖略向下,口张大不要太用力</cover-view>
+				<cover-view class="imagebox">
+					<cover-image class="tongue" :src="baseUrl+'/images/tongue.png'"  mode="aspectFill"></cover-image>
+				</cover-view>
+			</cover-view>
+			<!-- <cover-image v-if="coverImage" :src="coverImage" style="width: 100%;height: 100%;"></cover-image> -->
+		</camera>
+	</Layout>
+</template>
+
+<script>
+	import Layout from './Layout.vue'
+
+	export default {
+		components: {
+			Layout
+		},
+		data() {
+			return {
+				baseUrl:uni.getStorageSync('requestPath'),
+				statusBarHeight: uni.getSystemInfoSync().statusBarHeight + 'px',
+				// 前置或后置摄像头,值为front, back
+				device: 'back',
+				cameraContext: null,
+				shutterShow: false,
+				coverImage: null,
+				menuLeft: '100%'
+			}
+		},
+		mounted() {
+			uni.getSystemInfo({
+				success: (result) => {
+					// 获取右侧胶囊的信息 单位px
+					//#ifndef H5 || APP-PLUS
+					const menuButtonInfo = uni.getMenuButtonBoundingClientRect()
+					//left:   胶囊左侧距离屏幕左侧的距离
+					this.menuLeft = menuButtonInfo.left + 'px'
+					//#endif
+				},
+				fail: (error) => {
+					console.log(error)
+				}
+			})
+			this.cameraContext = uni.createCameraContext();
+			// this.coverImage = '/static/images/portrait.jpg'
+		},
+		methods: {
+			switchCamera(){
+				this.device = this.device === 'back' ? 'front' : 'back';
+			},
+			back(){
+				uni.navigateBack()
+			},
+			error(err) {
+				console.log(err)
+			},
+			takePhoto(){
+				this.$emit('takePhoto')
+				
+			},
+			handleInstruct(instruct) {
+				switch (instruct) {
+					// 返回
+					case 'back':
+						this.$emit('back')
+						break;
+						// 快门
+					case 'shutter':
+						this.cameraContext.takePhoto({
+							quality: 'high',
+							success: (res) => {
+								// console.log(res)
+								this.$emit('getImage', res.tempImagePath)
+							}
+						})
+						break;
+						// 反转
+					case 'reversal':
+						this.device = this.device === 'back' ? 'front' : 'back'
+						break;
+						// 相册
+					case 'album':
+						uni.chooseImage({
+							count: 1, //默认9
+							sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
+							sourceType: ['album'], //从相册选择
+							success: (res) => {
+								 uni.setStorageSync("tongueUrl",res.tempFilePaths[0])
+								this.$emit('getImage')
+							}
+						})
+						break;
+				}
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	@mixin u-flex($flexD, $alignI, $justifyC) {
+		display: flex;
+		flex-direction: $flexD;
+		align-items: $alignI;
+		justify-content: $justifyC;
+	}
+	.imagebox {
+		width: 100%;
+		margin-top: 30rpx;
+		@include u-flex(column, center, center);
+	}
+	.tongue {
+		width: 531rpx;
+		height: 592rpx;
+		margin: 0 auto;
+		margin-top: 30rpx;
+	}
+	.cover-view {
+		width: 100%;
+		position: absolute;
+		z-index: 99;
+		top: 0;
+		left: 0;
+	}
+	.title {
+		margin-top: calc(var(--status-bar-height) + 130rpx);;
+		font-family: SourceHanSansCN-Medium;
+		font-weight: 500;
+		font-size: 43rpx;
+		color: #FFFFFF;
+		text-align: center;
+	}
+	.tips {
+		margin-top: 38rpx;
+		font-family: SourceHanSansSC-Regular;
+		font-weight: 400;
+		font-size: 24rpx;
+		color: #FFFFFF;
+		text-align: center;
+	}
+	.uni-nav-bar {
+		position: fixed;
+		top: 0;
+		left: 0;
+		width: 100%;
+		z-index: 999;
+		overflow: hidden;
+		font-family: PingFang SC, PingFang SC;
+		font-weight: 500;
+		color: #FFFFFF;
+		.uni-nav-barbox {
+			width: 100%;
+			height: 88rpx;
+			padding: 0 24rpx;
+			box-sizing: border-box;
+			@include u-flex(row, center, space-between);
+			position: relative;
+			font-size: 32rpx;
+		}
+		.uni-nav-title {
+			flex-shrink: 0;
+			font-family: SourceHanSansSC;
+			font-weight: 400;
+			// font-size: 32rpx;
+			color: #FFFFFF;
+			/* #ifdef APP-PLUS */
+			font-size: 32rpx;
+			/* #endif */
+			/* #ifndef APP-PLUS */
+			font-size: 32rpx;
+			/* #endif */
+			@include u-flex(row, center, flex-start);
+			.ques {
+				flex-shrink: 0;
+				width: 33rpx;
+				height: 33rpx;
+				margin-left: 9rpx;
+			}
+		}
+		.uni-nav-back {
+			width: 100%;
+			height: 88rpx;
+			line-height: 88rpx;
+		}
+	}
+
+	.camera {
+		position: relative;
+	}
+</style>

+ 50 - 0
components/Loading.vue

@@ -0,0 +1,50 @@
+<template>
+  <view class="Loads acea-row row-center-wrapper" v-if="loading || !loaded" style="margin-top: 20rpx;">
+    <template v-if="loading">
+      <view class="iconfont icon-jiazai loading acea-row row-center-wrapper"></view>
+      正在加载中
+    </template>
+    <template v-if="!loading">
+      上拉加载更多
+    </template>
+  </view>
+</template>
+
+<script>
+  export default {
+    name: "Loading",
+    props: {
+      loaded: Boolean,
+      loading: Boolean
+    }
+  };
+</script>
+<style lang="less">
+	.Loads {
+	  height: 0.8*100rpx;
+	  font-size: 0.25*100rpx;
+	  color: #000;
+	}
+	.Loads .iconfont {
+	  font-size: 0.3*100rpx;
+	  margin-right: 0.1*100rpx;
+	  height: 0.32*100rpx;
+	  line-height: 0.32*100rpx;
+	}
+	/*加载动画*/
+	@keyframes load {
+	  from {
+	    transform: rotate(0deg);
+	  }
+	  to {
+	    transform: rotate(360deg);
+	  }
+	}
+	.loadingpic {
+	  animation: load 3s linear 1s infinite;
+	}
+	.loading {
+	  animation: load linear 1s infinite;
+	}
+	
+</style>

+ 162 - 0
components/Menu.vue

@@ -0,0 +1,162 @@
+<template>
+	<view class="menu-list-box" v-if="carousel" :style="list.length <= menu ? `height:160rpx` : `height:320rpx`">
+		<swiper
+			class="menu-swiper-box"
+			:style="list.length <= menu ? `height:160rpx` : `height:320rpx`"
+			@change="onSwiper"
+			circular
+			:autoplay="false"
+			:interval="3000"
+			:duration="1000"
+		>
+			<swiper-item class="menu-swiper-item" v-for="(itemList, index) in carousel" :key="index" :style="list.length <= menu ? `height:200rpx` : `height:340rpx`">
+				<view class="menu-tab-box">
+					<view class="tab-list"  v-for="item in itemList" :key="item.cateId" @tap="routerTo(item)">
+						<image class="tab-img" :style="{ width: imgW + 'rpx', height: imgW + 'rpx' }" :src="item.imgUrl"></image>
+						<text :class="cateId == item.cateId?'tab-title active':'tab-title'"  >{{ item.cateName }}</text>
+						
+					</view>
+				</view>
+			</swiper-item>
+		</swiper>
+		<view class="menu-dots" v-if="carousel.length > 1">
+			<text :class="menuCurrent === index ? 'dot-active' : 'dot'" v-for="(dot, index) in carousel.length" :key="index"></text>
+		</view>
+	</view>
+</template>
+
+<script>
+export default {
+	components: {},
+	data() {
+		return {
+			cateId:0,
+			menuCurrent: 0 //轮播下标
+		};
+	},
+	props: {
+		list: {
+			type: Array,
+			default: []
+		},
+		menu: {
+			default: 4
+		},
+		imgW: {
+			type: Number,
+			default: 88
+		}
+	},
+	computed: {
+		carousel() {
+			if (this.list) {
+				let data = this.sortData(this.list, this.menu * 2);
+				return data;
+			}
+		}
+	},
+	created() {},
+	methods: {
+		// 数据分层
+		sortData(oArr, length) {
+			let arr = [];
+			let minArr = [];
+			oArr.forEach(c => {
+				if (minArr.length === length) {
+					minArr = [];
+				}
+				if (minArr.length === 0) {
+					arr.push(minArr);
+				}
+				minArr.push(c);
+			});
+		 
+			return arr;
+		},
+		// 轮播
+		onSwiper(e) {
+			this.menuCurrent = e.detail.current;
+		},
+		routerTo(item) {
+			this.cateId=item.cateId;
+			this.$emit('menuClick',item);
+		}
+	}
+};
+</script>
+
+<style lang="scss">
+.menu-list-box {
+	padding: 0rpx;
+	background: #fff;
+	box-sizing: border-box;
+	
+}
+.menu-list-box,
+.menu-swiper-box {
+	position: relative;
+	background: #fff;
+	.menu-swiper-item {
+		background: #fff;
+		height: 100%;
+		width: 100%;
+	}
+	.menu-tab-box {
+		display: flex;
+		flex-wrap: wrap;
+		.tab-list {
+			width: 25%;
+			display: -webkit-box;
+			display: -webkit-flex;
+			display: flex;
+			-webkit-box-orient: vertical;
+			-webkit-box-direction: normal;
+			-webkit-flex-direction: column;
+			flex-direction: column;
+			-webkit-box-align: center;
+			-webkit-align-items: center;
+			align-items: center;
+			font-size: 22rpx;
+			font-family: PingFang SC;
+			font-weight: 500;
+			color: rgba(51, 51, 51, 1);
+			padding-bottom: 30rpx;
+			.tab-img {
+				border-radius: 25rpx;
+				margin-bottom: 10rpx;
+			}
+			.tab-title{
+				font-size: 24upx;
+				font-family: PingFang SC;
+				font-weight: 500;
+				color: #111;
+				margin-top: 10rpx;
+				 
+			}
+			.active{
+				color: #E2C99E;
+				
+			}
+		}
+	}
+	.menu-dots {
+		display: flex;
+		position: absolute;
+		left: 50%;
+		transform: translateX(-50%);
+		.dot {
+			width: 40rpx;
+			height: 3rpx;
+			background: #eeeeee;
+			margin-right: 10rpx;
+		}
+
+		.dot-active {
+			width: 40rpx;
+			height: 3rpx;
+			background: #2BC7B9;
+			margin-right: 10rpx;
+		}
+	}
+}
+</style>

BIN
his_user_app.zip


+ 20 - 0
index.html

@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="UTF-8" />
+    <script>
+      var coverSupport = 'CSS' in window && typeof CSS.supports === 'function' && (CSS.supports('top: env(a)') ||
+        CSS.supports('top: constant(a)'))
+      document.write(
+        '<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0' +
+        (coverSupport ? ', viewport-fit=cover' : '') + '" />')
+    </script>
+    <title></title>
+    <!--preload-links-->
+    <!--app-context-->
+  </head>
+  <body>
+    <div id="app"><!--app-html--></div>
+    <script type="module" src="/main.js"></script>
+  </body>
+</html>

+ 41 - 0
main.js

@@ -0,0 +1,41 @@
+import App from './App'
+import uviewPlus from '@/uni_modules/uview-plus'
+
+import {isEmpty,parseIDCardInfo,parseText,urlToObj,clearHisSearch,getHisSearch,addHisSearch,logout,getDictLabelName,getProvider,parsePhone,isLogin,getAge,parseIdCard,isLoginCourse} from './utils/common.js'
+// #ifndef VUE3
+import Vue from 'vue'
+Vue.config.productionTip = false
+App.mpType = 'app'
+const app = new Vue({
+    ...App
+})
+app.$mount()
+// #endif
+
+// #ifdef VUE3
+
+import { createSSRApp } from 'vue'
+export function createApp() {
+  const app = createSSRApp(App)
+  app.config.globalProperties.$getProvider = getProvider
+  app.config.globalProperties.$parsePhone = parsePhone
+  app.config.globalProperties.$isLogin = isLogin
+  app.config.globalProperties.$isEmpty = isEmpty
+  app.config.globalProperties.$getAge = getAge
+  app.config.globalProperties.$parseIdCard = parseIdCard
+  app.config.globalProperties.$getDictLabelName = getDictLabelName
+  app.config.globalProperties.$logout = logout
+  app.config.globalProperties.$clearHisSearch = clearHisSearch
+  app.config.globalProperties.$getHisSearch = getHisSearch
+  app.config.globalProperties.$addHisSearch = addHisSearch
+  app.config.globalProperties.$urlToObj = urlToObj
+  app.config.globalProperties.$parseText = parseText
+  app.config.globalProperties.$parseIDCardInfo = parseIDCardInfo
+  app.config.globalProperties.$isLoginCourse = isLoginCourse
+  
+  app.use(uviewPlus)
+  return {
+    app
+  }
+}
+// #endif

+ 72 - 0
manifest.json

@@ -0,0 +1,72 @@
+{
+    "name" : "his_user_app",
+    "appid" : "__UNI__61DDDA4",
+    "description" : "",
+    "versionName" : "1.0.0",
+    "versionCode" : "100",
+    "transformPx" : false,
+    /* 5+App特有相关 */
+    "app-plus" : {
+        "usingComponents" : true,
+        "nvueStyleCompiler" : "uni-app",
+        "compilerVersion" : 3,
+        "splashscreen" : {
+            "alwaysShowBeforeRender" : true,
+            "waiting" : true,
+            "autoclose" : true,
+            "delay" : 0
+        },
+        /* 模块配置 */
+        "modules" : {},
+        /* 应用发布信息 */
+        "distribute" : {
+            /* android打包配置 */
+            "android" : {
+                "permissions" : [
+                    "<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
+                    "<uses-permission android:name=\"android.permission.VIBRATE\"/>",
+                    "<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
+                    "<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
+                    "<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
+                    "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.CAMERA\"/>",
+                    "<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
+                    "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
+                    "<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
+                    "<uses-feature android:name=\"android.hardware.camera\"/>",
+                    "<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
+                ]
+            },
+            /* ios打包配置 */
+            "ios" : {},
+            /* SDK配置 */
+            "sdkConfigs" : {}
+        }
+    },
+    /* 快应用特有相关 */
+    "quickapp" : {},
+    /* 小程序特有相关 */
+    "mp-weixin" : {
+        "appid" : "wx73f85f8d62769119",
+        "setting" : {
+            "urlCheck" : false
+        },
+        "usingComponents" : true
+    },
+    "mp-alipay" : {
+        "usingComponents" : true
+    },
+    "mp-baidu" : {
+        "usingComponents" : true
+    },
+    "mp-toutiao" : {
+        "usingComponents" : true
+    },
+    "uniStatistics" : {
+        "enable" : false
+    },
+    "vueVersion" : "3"
+}

+ 15 - 0
node_modules/.bin/fxparser

@@ -0,0 +1,15 @@
+#!/bin/sh
+basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
+
+case `uname` in
+    *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
+esac
+
+if [ -x "$basedir/node" ]; then
+  "$basedir/node"  "$basedir/../fast-xml-parser/src/cli/cli.js" "$@"
+  ret=$?
+else 
+  node  "$basedir/../fast-xml-parser/src/cli/cli.js" "$@"
+  ret=$?
+fi
+exit $ret

+ 17 - 0
node_modules/.bin/fxparser.cmd

@@ -0,0 +1,17 @@
+@ECHO off
+SETLOCAL
+CALL :find_dp0
+
+IF EXIST "%dp0%\node.exe" (
+  SET "_prog=%dp0%\node.exe"
+) ELSE (
+  SET "_prog=node"
+  SET PATHEXT=%PATHEXT:;.JS;=;%
+)
+
+"%_prog%"  "%dp0%\..\fast-xml-parser\src\cli\cli.js" %*
+ENDLOCAL
+EXIT /b %errorlevel%
+:find_dp0
+SET dp0=%~dp0
+EXIT /b

+ 18 - 0
node_modules/.bin/fxparser.ps1

@@ -0,0 +1,18 @@
+#!/usr/bin/env pwsh
+$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
+
+$exe=""
+if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
+  # Fix case when both the Windows and Linux builds of Node
+  # are installed in the same directory
+  $exe=".exe"
+}
+$ret=0
+if (Test-Path "$basedir/node$exe") {
+  & "$basedir/node$exe"  "$basedir/../fast-xml-parser/src/cli/cli.js" $args
+  $ret=$LASTEXITCODE
+} else {
+  & "node$exe"  "$basedir/../fast-xml-parser/src/cli/cli.js" $args
+  $ret=$LASTEXITCODE
+}
+exit $ret

+ 15 - 0
node_modules/.bin/json5

@@ -0,0 +1,15 @@
+#!/bin/sh
+basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
+
+case `uname` in
+    *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
+esac
+
+if [ -x "$basedir/node" ]; then
+  "$basedir/node"  "$basedir/../json5/lib/cli.js" "$@"
+  ret=$?
+else 
+  node  "$basedir/../json5/lib/cli.js" "$@"
+  ret=$?
+fi
+exit $ret

+ 17 - 0
node_modules/.bin/json5.cmd

@@ -0,0 +1,17 @@
+@ECHO off
+SETLOCAL
+CALL :find_dp0
+
+IF EXIST "%dp0%\node.exe" (
+  SET "_prog=%dp0%\node.exe"
+) ELSE (
+  SET "_prog=node"
+  SET PATHEXT=%PATHEXT:;.JS;=;%
+)
+
+"%_prog%"  "%dp0%\..\json5\lib\cli.js" %*
+ENDLOCAL
+EXIT /b %errorlevel%
+:find_dp0
+SET dp0=%~dp0
+EXIT /b

+ 18 - 0
node_modules/.bin/json5.ps1

@@ -0,0 +1,18 @@
+#!/usr/bin/env pwsh
+$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
+
+$exe=""
+if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
+  # Fix case when both the Windows and Linux builds of Node
+  # are installed in the same directory
+  $exe=".exe"
+}
+$ret=0
+if (Test-Path "$basedir/node$exe") {
+  & "$basedir/node$exe"  "$basedir/../json5/lib/cli.js" $args
+  $ret=$LASTEXITCODE
+} else {
+  & "node$exe"  "$basedir/../json5/lib/cli.js" $args
+  $ret=$LASTEXITCODE
+}
+exit $ret

+ 15 - 0
node_modules/.bin/mime

@@ -0,0 +1,15 @@
+#!/bin/sh
+basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
+
+case `uname` in
+    *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
+esac
+
+if [ -x "$basedir/node" ]; then
+  "$basedir/node"  "$basedir/../mime/cli.js" "$@"
+  ret=$?
+else 
+  node  "$basedir/../mime/cli.js" "$@"
+  ret=$?
+fi
+exit $ret

+ 17 - 0
node_modules/.bin/mime.cmd

@@ -0,0 +1,17 @@
+@ECHO off
+SETLOCAL
+CALL :find_dp0
+
+IF EXIST "%dp0%\node.exe" (
+  SET "_prog=%dp0%\node.exe"
+) ELSE (
+  SET "_prog=node"
+  SET PATHEXT=%PATHEXT:;.JS;=;%
+)
+
+"%_prog%"  "%dp0%\..\mime\cli.js" %*
+ENDLOCAL
+EXIT /b %errorlevel%
+:find_dp0
+SET dp0=%~dp0
+EXIT /b

+ 18 - 0
node_modules/.bin/mime.ps1

@@ -0,0 +1,18 @@
+#!/usr/bin/env pwsh
+$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
+
+$exe=""
+if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
+  # Fix case when both the Windows and Linux builds of Node
+  # are installed in the same directory
+  $exe=".exe"
+}
+$ret=0
+if (Test-Path "$basedir/node$exe") {
+  & "$basedir/node$exe"  "$basedir/../mime/cli.js" $args
+  $ret=$LASTEXITCODE
+} else {
+  & "node$exe"  "$basedir/../mime/cli.js" $args
+  $ret=$LASTEXITCODE
+}
+exit $ret

+ 15 - 0
node_modules/.bin/nanoid

@@ -0,0 +1,15 @@
+#!/bin/sh
+basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
+
+case `uname` in
+    *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
+esac
+
+if [ -x "$basedir/node" ]; then
+  "$basedir/node"  "$basedir/../nanoid/bin/nanoid.cjs" "$@"
+  ret=$?
+else 
+  node  "$basedir/../nanoid/bin/nanoid.cjs" "$@"
+  ret=$?
+fi
+exit $ret

+ 17 - 0
node_modules/.bin/nanoid.cmd

@@ -0,0 +1,17 @@
+@ECHO off
+SETLOCAL
+CALL :find_dp0
+
+IF EXIST "%dp0%\node.exe" (
+  SET "_prog=%dp0%\node.exe"
+) ELSE (
+  SET "_prog=node"
+  SET PATHEXT=%PATHEXT:;.JS;=;%
+)
+
+"%_prog%"  "%dp0%\..\nanoid\bin\nanoid.cjs" %*
+ENDLOCAL
+EXIT /b %errorlevel%
+:find_dp0
+SET dp0=%~dp0
+EXIT /b

+ 18 - 0
node_modules/.bin/nanoid.ps1

@@ -0,0 +1,18 @@
+#!/usr/bin/env pwsh
+$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
+
+$exe=""
+if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
+  # Fix case when both the Windows and Linux builds of Node
+  # are installed in the same directory
+  $exe=".exe"
+}
+$ret=0
+if (Test-Path "$basedir/node$exe") {
+  & "$basedir/node$exe"  "$basedir/../nanoid/bin/nanoid.cjs" $args
+  $ret=$LASTEXITCODE
+} else {
+  & "node$exe"  "$basedir/../nanoid/bin/nanoid.cjs" $args
+  $ret=$LASTEXITCODE
+}
+exit $ret

+ 15 - 0
node_modules/.bin/parser

@@ -0,0 +1,15 @@
+#!/bin/sh
+basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
+
+case `uname` in
+    *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
+esac
+
+if [ -x "$basedir/node" ]; then
+  "$basedir/node"  "$basedir/../@babel/parser/bin/babel-parser.js" "$@"
+  ret=$?
+else 
+  node  "$basedir/../@babel/parser/bin/babel-parser.js" "$@"
+  ret=$?
+fi
+exit $ret

+ 17 - 0
node_modules/.bin/parser.cmd

@@ -0,0 +1,17 @@
+@ECHO off
+SETLOCAL
+CALL :find_dp0
+
+IF EXIST "%dp0%\node.exe" (
+  SET "_prog=%dp0%\node.exe"
+) ELSE (
+  SET "_prog=node"
+  SET PATHEXT=%PATHEXT:;.JS;=;%
+)
+
+"%_prog%"  "%dp0%\..\@babel\parser\bin\babel-parser.js" %*
+ENDLOCAL
+EXIT /b %errorlevel%
+:find_dp0
+SET dp0=%~dp0
+EXIT /b

+ 18 - 0
node_modules/.bin/parser.ps1

@@ -0,0 +1,18 @@
+#!/usr/bin/env pwsh
+$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
+
+$exe=""
+if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
+  # Fix case when both the Windows and Linux builds of Node
+  # are installed in the same directory
+  $exe=".exe"
+}
+$ret=0
+if (Test-Path "$basedir/node$exe") {
+  & "$basedir/node$exe"  "$basedir/../@babel/parser/bin/babel-parser.js" $args
+  $ret=$LASTEXITCODE
+} else {
+  & "node$exe"  "$basedir/../@babel/parser/bin/babel-parser.js" $args
+  $ret=$LASTEXITCODE
+}
+exit $ret

+ 15 - 0
node_modules/.bin/sass

@@ -0,0 +1,15 @@
+#!/bin/sh
+basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
+
+case `uname` in
+    *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
+esac
+
+if [ -x "$basedir/node" ]; then
+  "$basedir/node"  "$basedir/../sass/sass.js" "$@"
+  ret=$?
+else 
+  node  "$basedir/../sass/sass.js" "$@"
+  ret=$?
+fi
+exit $ret

+ 17 - 0
node_modules/.bin/sass.cmd

@@ -0,0 +1,17 @@
+@ECHO off
+SETLOCAL
+CALL :find_dp0
+
+IF EXIST "%dp0%\node.exe" (
+  SET "_prog=%dp0%\node.exe"
+) ELSE (
+  SET "_prog=node"
+  SET PATHEXT=%PATHEXT:;.JS;=;%
+)
+
+"%_prog%"  "%dp0%\..\sass\sass.js" %*
+ENDLOCAL
+EXIT /b %errorlevel%
+:find_dp0
+SET dp0=%~dp0
+EXIT /b

+ 18 - 0
node_modules/.bin/sass.ps1

@@ -0,0 +1,18 @@
+#!/usr/bin/env pwsh
+$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
+
+$exe=""
+if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
+  # Fix case when both the Windows and Linux builds of Node
+  # are installed in the same directory
+  $exe=".exe"
+}
+$ret=0
+if (Test-Path "$basedir/node$exe") {
+  & "$basedir/node$exe"  "$basedir/../sass/sass.js" $args
+  $ret=$LASTEXITCODE
+} else {
+  & "node$exe"  "$basedir/../sass/sass.js" $args
+  $ret=$LASTEXITCODE
+}
+exit $ret

+ 15 - 0
node_modules/.bin/semver

@@ -0,0 +1,15 @@
+#!/bin/sh
+basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
+
+case `uname` in
+    *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
+esac
+
+if [ -x "$basedir/node" ]; then
+  "$basedir/node"  "$basedir/../semver/bin/semver.js" "$@"
+  ret=$?
+else 
+  node  "$basedir/../semver/bin/semver.js" "$@"
+  ret=$?
+fi
+exit $ret

+ 17 - 0
node_modules/.bin/semver.cmd

@@ -0,0 +1,17 @@
+@ECHO off
+SETLOCAL
+CALL :find_dp0
+
+IF EXIST "%dp0%\node.exe" (
+  SET "_prog=%dp0%\node.exe"
+) ELSE (
+  SET "_prog=node"
+  SET PATHEXT=%PATHEXT:;.JS;=;%
+)
+
+"%_prog%"  "%dp0%\..\semver\bin\semver.js" %*
+ENDLOCAL
+EXIT /b %errorlevel%
+:find_dp0
+SET dp0=%~dp0
+EXIT /b

+ 18 - 0
node_modules/.bin/semver.ps1

@@ -0,0 +1,18 @@
+#!/usr/bin/env pwsh
+$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
+
+$exe=""
+if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
+  # Fix case when both the Windows and Linux builds of Node
+  # are installed in the same directory
+  $exe=".exe"
+}
+$ret=0
+if (Test-Path "$basedir/node$exe") {
+  & "$basedir/node$exe"  "$basedir/../semver/bin/semver.js" $args
+  $ret=$LASTEXITCODE
+} else {
+  & "node$exe"  "$basedir/../semver/bin/semver.js" $args
+  $ret=$LASTEXITCODE
+}
+exit $ret

+ 15 - 0
node_modules/.bin/tsc

@@ -0,0 +1,15 @@
+#!/bin/sh
+basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
+
+case `uname` in
+    *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
+esac
+
+if [ -x "$basedir/node" ]; then
+  "$basedir/node"  "$basedir/../typescript/bin/tsc" "$@"
+  ret=$?
+else 
+  node  "$basedir/../typescript/bin/tsc" "$@"
+  ret=$?
+fi
+exit $ret

+ 17 - 0
node_modules/.bin/tsc.cmd

@@ -0,0 +1,17 @@
+@ECHO off
+SETLOCAL
+CALL :find_dp0
+
+IF EXIST "%dp0%\node.exe" (
+  SET "_prog=%dp0%\node.exe"
+) ELSE (
+  SET "_prog=node"
+  SET PATHEXT=%PATHEXT:;.JS;=;%
+)
+
+"%_prog%"  "%dp0%\..\typescript\bin\tsc" %*
+ENDLOCAL
+EXIT /b %errorlevel%
+:find_dp0
+SET dp0=%~dp0
+EXIT /b

+ 18 - 0
node_modules/.bin/tsc.ps1

@@ -0,0 +1,18 @@
+#!/usr/bin/env pwsh
+$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
+
+$exe=""
+if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
+  # Fix case when both the Windows and Linux builds of Node
+  # are installed in the same directory
+  $exe=".exe"
+}
+$ret=0
+if (Test-Path "$basedir/node$exe") {
+  & "$basedir/node$exe"  "$basedir/../typescript/bin/tsc" $args
+  $ret=$LASTEXITCODE
+} else {
+  & "node$exe"  "$basedir/../typescript/bin/tsc" $args
+  $ret=$LASTEXITCODE
+}
+exit $ret

+ 15 - 0
node_modules/.bin/tsserver

@@ -0,0 +1,15 @@
+#!/bin/sh
+basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
+
+case `uname` in
+    *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
+esac
+
+if [ -x "$basedir/node" ]; then
+  "$basedir/node"  "$basedir/../typescript/bin/tsserver" "$@"
+  ret=$?
+else 
+  node  "$basedir/../typescript/bin/tsserver" "$@"
+  ret=$?
+fi
+exit $ret

+ 17 - 0
node_modules/.bin/tsserver.cmd

@@ -0,0 +1,17 @@
+@ECHO off
+SETLOCAL
+CALL :find_dp0
+
+IF EXIST "%dp0%\node.exe" (
+  SET "_prog=%dp0%\node.exe"
+) ELSE (
+  SET "_prog=node"
+  SET PATHEXT=%PATHEXT:;.JS;=;%
+)
+
+"%_prog%"  "%dp0%\..\typescript\bin\tsserver" %*
+ENDLOCAL
+EXIT /b %errorlevel%
+:find_dp0
+SET dp0=%~dp0
+EXIT /b

+ 18 - 0
node_modules/.bin/tsserver.ps1

@@ -0,0 +1,18 @@
+#!/usr/bin/env pwsh
+$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
+
+$exe=""
+if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
+  # Fix case when both the Windows and Linux builds of Node
+  # are installed in the same directory
+  $exe=".exe"
+}
+$ret=0
+if (Test-Path "$basedir/node$exe") {
+  & "$basedir/node$exe"  "$basedir/../typescript/bin/tsserver" $args
+  $ret=$LASTEXITCODE
+} else {
+  & "node$exe"  "$basedir/../typescript/bin/tsserver" $args
+  $ret=$LASTEXITCODE
+}
+exit $ret

+ 1073 - 0
node_modules/@babel/parser/CHANGELOG.md

@@ -0,0 +1,1073 @@
+# Changelog
+
+> **Tags:**
+> - :boom:       [Breaking Change]
+> - :eyeglasses: [Spec Compliance]
+> - :rocket:     [New Feature]
+> - :bug:        [Bug Fix]
+> - :memo:       [Documentation]
+> - :house:      [Internal]
+> - :nail_care:  [Polish]
+
+> Semver Policy: https://github.com/babel/babel/tree/main/packages/babel-parser#semver
+
+_Note: Gaps between patch versions are faulty, broken or test releases._
+
+See the [Babel Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) for the pre-6.8.0 version Changelog.
+
+## 6.17.1 (2017-05-10)
+
+### :bug: Bug Fix
+ * Fix typo in flow spread operator error (Brian Ng)
+ * Fixed invalid number literal parsing ([#473](https://github.com/babel/babylon/pull/473)) (Alex Kuzmenko)
+ * Fix number parser ([#433](https://github.com/babel/babylon/pull/433)) (Alex Kuzmenko)
+ * Ensure non pattern shorthand props are checked for reserved words ([#479](https://github.com/babel/babylon/pull/479)) (Brian Ng)
+ * Remove jsx context when parsing arrow functions ([#475](https://github.com/babel/babylon/pull/475)) (Brian Ng)
+ * Allow super in class properties ([#499](https://github.com/babel/babylon/pull/499)) (Brian Ng)
+ * Allow flow class field to be named constructor ([#510](https://github.com/babel/babylon/pull/510)) (Brian Ng)
+
+## 6.17.0 (2017-04-20)
+
+### :bug: Bug Fix
+ * Cherry-pick #418 to 6.x ([#476](https://github.com/babel/babylon/pull/476)) (Sebastian McKenzie)
+ * Add support for invalid escapes in tagged templates ([#274](https://github.com/babel/babylon/pull/274)) (Kevin Gibbons)
+ * Throw error if new.target is used outside of a function ([#402](https://github.com/babel/babylon/pull/402)) (Brian Ng)
+ * Fix parsing of class properties ([#351](https://github.com/babel/babylon/pull/351)) (Kevin Gibbons)
+ * Fix parsing yield with dynamicImport ([#383](https://github.com/babel/babylon/pull/383)) (Brian Ng)
+ * Ensure consistent start args for parseParenItem ([#386](https://github.com/babel/babylon/pull/386)) (Brian Ng)
+
+## 7.0.0-beta.8 (2017-04-04)
+
+### New Feature
+* Add support for flow type spread (#418) (Conrad Buck)
+* Allow statics in flow interfaces (#427) (Brian Ng)
+
+### Bug Fix
+* Fix predicate attachment to match flow parser (#428) (Brian Ng)
+* Add extra.raw back to JSXText and JSXAttribute (#344) (Alex Rattray)
+* Fix rest parameters with array and objects (#424) (Brian Ng)
+* Fix number parser (#433) (Alex Kuzmenko)
+
+### Docs
+* Fix CONTRIBUTING.md [skip ci] (#432) (Alex Kuzmenko)
+
+### Internal
+* Use babel-register script when running babel smoke tests (#442) (Brian Ng)
+
+## 7.0.0-beta.7 (2017-03-22)
+
+### Spec Compliance
+* Remove babylon plugin for template revision since it's stage-4 (#426) (Henry Zhu)
+
+### Bug Fix
+
+* Fix push-pop logic in flow (#405) (Daniel Tschinder)
+
+## 7.0.0-beta.6 (2017-03-21)
+
+### New Feature
+* Add support for invalid escapes in tagged templates (#274) (Kevin Gibbons)
+
+### Polish
+* Improves error message when super is called outside of constructor (#408) (Arshabh Kumar Agarwal)
+
+### Docs
+
+* [7.0] Moved value field in spec from ObjectMember to ObjectProperty as ObjectMethod's don't have it (#415) [skip ci] (James Browning)
+
+## 7.0.0-beta.5 (2017-03-21)
+
+### Bug Fix
+* Throw error if new.target is used outside of a function (#402) (Brian Ng)
+* Fix parsing of class properties (#351) (Kevin Gibbons)
+
+### Other
+ * Test runner: Detect extra property in 'actual' but not in 'expected'. (#407) (Andy)
+ * Optimize travis builds (#419) (Daniel Tschinder)
+ * Update codecov to 2.0 (#412) (Daniel Tschinder)
+ * Fix spec for ClassMethod: It doesn't have a function, it *is* a function. (#406) [skip ci] (Andy)
+ * Changed Non-existent RestPattern to RestElement which is what is actually parsed (#409) [skip ci] (James Browning)
+ * Upgrade flow to 0.41 (Daniel Tschinder)
+ * Fix watch command (#403) (Brian Ng)
+ * Update yarn lock (Daniel Tschinder)
+ * Fix watch command (#403) (Brian Ng)
+ * chore(package): update flow-bin to version 0.41.0 (#395) (greenkeeper[bot])
+ * Add estree test for correct order of directives (Daniel Tschinder)
+ * Add DoExpression to spec (#364) (Alex Kuzmenko)
+ * Mention cloning of repository in CONTRIBUTING.md (#391) [skip ci] (Sumedh Nimkarde)
+ * Explain how to run only one test (#389) [skip ci] (Aaron Ang)
+
+ ## 7.0.0-beta.4 (2017-03-01)
+
+* Don't consume async when checking for async func decl (#377) (Brian Ng)
+* add `ranges` option [skip ci] (Henry Zhu)
+* Don't parse class properties without initializers when classProperties is disabled and Flow is enabled (#300) (Andrew Levine)
+
+## 7.0.0-beta.3 (2017-02-28)
+
+- [7.0] Change RestProperty/SpreadProperty to RestElement/SpreadElement (#384)
+- Merge changes from 6.x
+
+## 7.0.0-beta.2 (2017-02-20)
+
+- estree: correctly change literals in all cases (#368) (Daniel Tschinder)
+
+## 7.0.0-beta.1 (2017-02-20)
+
+- Fix negative number literal typeannotations (#366) (Daniel Tschinder)
+- Update contributing with more test info [skip ci] (#355) (Brian Ng)
+
+## 7.0.0-beta.0 (2017-02-15)
+
+- Reintroduce Variance node (#333) (Daniel Tschinder)
+- Rename NumericLiteralTypeAnnotation to NumberLiteralTypeAnnotation (#332) (Charles Pick)
+- [7.0] Remove ForAwaitStatement, add await flag to ForOfStatement (#349) (Brandon Dail)
+- chore(package): update ava to version 0.18.0 (#345) (greenkeeper[bot])
+- chore(package): update babel-plugin-istanbul to version 4.0.0 (#350) (greenkeeper[bot])
+- Change location of ObjectTypeIndexer to match flow (#228) (Daniel Tschinder)
+- Rename flow AST Type ExistentialTypeParam to ExistsTypeAnnotation (#322) (Toru Kobayashi)
+- Revert "Temporary rollback for erroring on trailing comma with spread (#154)" (#290) (Daniel Tschinder)
+- Remove classConstructorCall plugin (#291) (Brian Ng)
+- Update yarn.lock (Daniel Tschinder)
+- Update cross-env to 3.x (Daniel Tschinder)
+- [7.0] Remove node 0.10, 0.12 and 5 from Travis (#284) (Sergey Rubanov)
+- Remove `String.fromCodePoint` shim (#279) (Mathias Bynens)
+
+## 6.16.1 (2017-02-23)
+
+### :bug: Regression
+
+- Revert "Fix export default async function to be FunctionDeclaration" ([#375](https://github.com/babel/babylon/pull/375))
+
+Need to modify Babel for this AST node change, so moving to 7.0.
+
+- Revert "Don't parse class properties without initializers when classProperties plugin is disabled, and Flow is enabled" ([#376](https://github.com/babel/babylon/pull/376))
+
+[react-native](https://github.com/facebook/react-native/issues/12542) broke with this so we reverted.
+
+## 6.16.0 (2017-02-23)
+
+### :rocket: New Feature
+
+***ESTree*** compatibility as plugin ([#277](https://github.com/babel/babylon/pull/277)) (Daniel Tschinder)
+
+We finally introduce a new compatibility layer for ESTree. To put babylon into ESTree-compatible mode the new plugin `estree` can be enabled. In this mode the parser will output an AST that is compliant to the specs of [ESTree](https://github.com/estree/estree/)
+
+We highly recommend everyone who uses babylon outside of babel to use this plugin. This will make it much easier for users to switch between different ESTree-compatible parsers. We so far tested several projects with different parsers and exchanged their parser to babylon and in nearly all cases it worked out of the box. Some other estree-compatible parsers include `acorn`, `esprima`, `espree`, `flow-parser`, etc.
+
+To enable `estree` mode simply add the plugin in the config:
+```json
+{
+  "plugins": [ "estree" ]
+}
+```
+
+If you want to migrate your project from non-ESTree mode to ESTree, have a look at our [Readme](https://github.com/babel/babylon/#output), where all deviations are mentioned.
+
+Add a parseExpression public method ([#213](https://github.com/babel/babylon/pull/213)) (jeromew)
+
+Babylon exports a new function to parse a single expression
+
+```js
+import { parseExpression } from 'babylon';
+
+const ast = parseExpression('x || y && z', options);
+```
+
+The returned AST will only consist of the expression. The options are the same as for `parse()`
+
+Add startLine option ([#346](https://github.com/babel/babylon/pull/346)) (Raphael Mu)
+
+A new option was added to babylon allowing to change the initial linenumber for the first line which is usually `1`.
+Changing this for example to `100` will make line `1` of the input source to be marked as line `100`, line `2` as `101`, line `3` as `102`, ...
+
+Function predicate declaration ([#103](https://github.com/babel/babylon/pull/103)) (Panagiotis Vekris)
+
+Added support for function predicates which flow introduced in version 0.33.0
+
+```js
+declare function is_number(x: mixed): boolean %checks(typeof x === "number");
+```
+
+Allow imports in declare module ([#315](https://github.com/babel/babylon/pull/315)) (Daniel Tschinder)
+
+Added support for imports within module declarations which flow introduced in version 0.37.0
+
+```js
+declare module "C" {
+  import type { DT } from "D";
+  declare export type CT = { D: DT };
+}
+```
+
+### :eyeglasses: Spec Compliance
+
+Forbid semicolons after decorators in classes ([#352](https://github.com/babel/babylon/pull/352)) (Kevin Gibbons)
+
+This example now correctly throws an error when there is a semicolon after the decorator:
+
+```js
+class A {
+@a;
+foo(){}
+}
+```
+
+Keywords are not allowed as local specifier ([#307](https://github.com/babel/babylon/pull/307)) (Daniel Tschinder)
+
+Using keywords in imports is not allowed anymore:
+
+```js
+import { default } from "foo";
+import { a as debugger } from "foo";
+```
+
+Do not allow overwritting of primitive types ([#314](https://github.com/babel/babylon/pull/314)) (Daniel Tschinder)
+
+In flow it is now forbidden to overwrite the primitive types `"any"`, `"mixed"`, `"empty"`, `"bool"`, `"boolean"`, `"number"`, `"string"`, `"void"` and `"null"` with your own type declaration.
+
+Disallow import type { type a } from … ([#305](https://github.com/babel/babylon/pull/305)) (Daniel Tschinder)
+
+The following code now correctly throws an error
+
+```js
+import type { type a } from "foo";
+```
+
+Don't parse class properties without initializers when classProperties is disabled and Flow is enabled ([#300](https://github.com/babel/babylon/pull/300)) (Andrew Levine)
+
+Ensure that you enable the `classProperties` plugin in order to enable correct parsing of class properties. Prior to this version it was possible to parse them by enabling the `flow` plugin but this was not intended the behaviour.
+
+If you enable the flow plugin you can only define the type of the class properties, but not initialize them.
+
+Fix export default async function to be FunctionDeclaration ([#324](https://github.com/babel/babylon/pull/324)) (Daniel Tschinder)
+
+Parsing the following code now returns a `FunctionDeclaration` AST node instead of `FunctionExpression`.
+
+```js
+export default async function bar() {};
+```
+
+### :nail_care: Polish
+
+Improve error message on attempt to destructure named import ([#288](https://github.com/babel/babylon/pull/288)) (Brian Ng)
+
+### :bug: Bug Fix
+
+Fix negative number literal typeannotations ([#366](https://github.com/babel/babylon/pull/366)) (Daniel Tschinder)
+
+Ensure takeDecorators is called on exported class ([#358](https://github.com/babel/babylon/pull/358)) (Brian Ng)
+
+ESTree: correctly change literals in all cases ([#368](https://github.com/babel/babylon/pull/368)) (Daniel Tschinder)
+
+Correctly convert RestProperty to Assignable ([#339](https://github.com/babel/babylon/pull/339)) (Daniel Tschinder)
+
+Fix #321 by allowing question marks in type params ([#338](https://github.com/babel/babylon/pull/338)) (Daniel Tschinder)
+
+Fix #336 by correctly setting arrow-param ([#337](https://github.com/babel/babylon/pull/337)) (Daniel Tschinder)
+
+Fix parse error when destructuring `set` with default value ([#317](https://github.com/babel/babylon/pull/317)) (Brian Ng)
+
+Fix ObjectTypeCallProperty static ([#298](https://github.com/babel/babylon/pull/298)) (Dan Harper)
+
+
+### :house: Internal
+
+Fix generator-method-with-computed-name spec ([#360](https://github.com/babel/babylon/pull/360)) (Alex Rattray)
+
+Fix flow type-parameter-declaration test with unintended semantic ([#361](https://github.com/babel/babylon/pull/361)) (Alex Rattray)
+
+Cleanup and splitup parser functions ([#295](https://github.com/babel/babylon/pull/295)) (Daniel Tschinder)
+
+chore(package): update flow-bin to version 0.38.0 ([#313](https://github.com/babel/babylon/pull/313)) (greenkeeper[bot])
+
+Call inner function instead of 1:1 copy to plugin ([#294](https://github.com/babel/babylon/pull/294)) (Daniel Tschinder)
+
+Update eslint-config-babel to the latest version 🚀 ([#299](https://github.com/babel/babylon/pull/299)) (greenkeeper[bot])
+
+Update eslint-config-babel to the latest version 🚀 ([#293](https://github.com/babel/babylon/pull/293)) (greenkeeper[bot])
+
+devDeps: remove eslint-plugin-babel ([#292](https://github.com/babel/babylon/pull/292)) (Kai Cataldo)
+
+Correct indent eslint rule config ([#276](https://github.com/babel/babylon/pull/276)) (Daniel Tschinder)
+
+Fail tests that have expected.json and throws-option ([#285](https://github.com/babel/babylon/pull/285)) (Daniel Tschinder)
+
+### :memo: Documentation
+
+Update contributing with more test info [skip ci] ([#355](https://github.com/babel/babylon/pull/355)) (Brian Ng)
+
+Update API documentation ([#330](https://github.com/babel/babylon/pull/330)) (Timothy Gu)
+
+Added keywords to package.json ([#323](https://github.com/babel/babylon/pull/323)) (Dmytro)
+
+AST spec: fix casing of `RegExpLiteral` ([#318](https://github.com/babel/babylon/pull/318)) (Mathias Bynens)
+
+## 6.15.0 (2017-01-10)
+
+### :eyeglasses: Spec Compliance
+
+Add support for Flow shorthand import type ([#267](https://github.com/babel/babylon/pull/267)) (Jeff Morrison)
+
+This change implements flows new shorthand import syntax
+and where previously you had to write this code:
+
+```js
+import {someValue} from "blah";
+import type {someType} from "blah";
+import typeof {someOtherValue} from "blah";
+```
+
+you can now write it like this:
+
+```js
+import {
+  someValue,
+  type someType,
+  typeof someOtherValue,
+} from "blah";
+```
+
+For more information look at [this](https://github.com/facebook/flow/pull/2890) pull request.
+
+flow: allow leading pipes in all positions ([#256](https://github.com/babel/babylon/pull/256)) (Vladimir Kurchatkin)
+
+This change now allows a leading pipe everywhere types can be used:
+```js
+var f = (x): | 1 | 2 => 1;
+```
+
+Throw error when exporting non-declaration ([#241](https://github.com/babel/babylon/pull/241)) (Kai Cataldo)
+
+Previously babylon parsed the following exports, although they are not valid:
+```js
+export typeof foo;
+export new Foo();
+export function() {};
+export for (;;);
+export while(foo);
+```
+
+### :bug: Bug Fix
+
+Don't set inType flag when parsing property names ([#266](https://github.com/babel/babylon/pull/266)) (Vladimir Kurchatkin)
+
+This fixes parsing of this case:
+
+```js
+const map = {
+  [age <= 17] : 'Too young'
+};
+```
+
+Fix source location for JSXEmptyExpression nodes (fixes #248) ([#249](https://github.com/babel/babylon/pull/249)) (James Long)
+
+The following case produced an invalid AST
+```js
+<div>{/* foo */}</div>
+```
+
+Use fromCodePoint to convert high value unicode entities ([#243](https://github.com/babel/babylon/pull/243)) (Ryan Duffy)
+
+When high value unicode entities (e.g. 💩) were used in the input source code they are now correctly encoded in the resulting AST.
+
+Rename folder to avoid Windows-illegal characters ([#281](https://github.com/babel/babylon/pull/281)) (Ryan Plant)
+
+Allow this.state.clone() when parsing decorators ([#262](https://github.com/babel/babylon/pull/262)) (Alex Rattray)
+
+### :house: Internal
+
+User external-helpers ([#254](https://github.com/babel/babylon/pull/254)) (Daniel Tschinder)
+
+Add watch script for dev ([#234](https://github.com/babel/babylon/pull/234)) (Kai Cataldo)
+
+Freeze current plugins list for "*" option, and remove from README.md ([#245](https://github.com/babel/babylon/pull/245)) (Andrew Levine)
+
+Prepare tests for multiple fixture runners. ([#240](https://github.com/babel/babylon/pull/240)) (Daniel Tschinder)
+
+Add some test coverage for decorators stage-0 plugin ([#250](https://github.com/babel/babylon/pull/250)) (Andrew Levine)
+
+Refactor tokenizer types file ([#263](https://github.com/babel/babylon/pull/263)) (Sven SAULEAU)
+
+Update eslint-config-babel to the latest version 🚀 ([#273](https://github.com/babel/babylon/pull/273)) (greenkeeper[bot])
+
+chore(package): update rollup to version 0.41.0 ([#272](https://github.com/babel/babylon/pull/272)) (greenkeeper[bot])
+
+chore(package): update flow-bin to version 0.37.0 ([#255](https://github.com/babel/babylon/pull/255)) (greenkeeper[bot])
+
+## 6.14.1 (2016-11-17)
+
+### :bug: Bug Fix
+
+Allow `"plugins": ["*"]` ([#229](https://github.com/babel/babylon/pull/229)) (Daniel Tschinder)
+
+```js
+{
+  "plugins": ["*"]
+}
+```
+
+Will include all parser plugins instead of specifying each one individually. Useful for tools like babel-eslint, jscodeshift, and ast-explorer.
+
+## 6.14.0 (2016-11-16)
+
+### :eyeglasses: Spec Compliance
+
+Throw error for reserved words `enum` and `await` ([#195](https://github.com/babel/babylon/pull/195)) (Kai Cataldo)
+
+[11.6.2.2 Future Reserved Words](http://www.ecma-international.org/ecma-262/6.0/#sec-future-reserved-words)
+
+Babylon will throw for more reserved words such as `enum` or `await` (in strict mode).
+
+```
+class enum {} // throws
+class await {} // throws in strict mode (module)
+```
+
+Optional names for function types and object type indexers ([#197](https://github.com/babel/babylon/pull/197)) (Gabe Levi)
+
+So where you used to have to write
+
+```js
+type A = (x: string, y: boolean) => number;
+type B = (z: string) => number;
+type C = { [key: string]: number };
+```
+
+you can now write (with flow 0.34.0)
+
+```js
+type A = (string, boolean) => number;
+type B = string => number;
+type C = { [string]: number };
+```
+
+Parse flow nested array type annotations like `number[][]` ([#219](https://github.com/babel/babylon/pull/219)) (Bernhard Häussner)
+
+Supports these form now of specifying array types:
+
+```js
+var a: number[][][][];
+var b: string[][];
+```
+
+### :bug: Bug Fix
+
+Correctly eat semicolon at the end of `DelcareModuleExports` ([#223](https://github.com/babel/babylon/pull/223))  (Daniel Tschinder)
+
+```
+declare module "foo" { declare module.exports: number }
+declare module "foo" { declare module.exports: number; }  // also allowed now
+```
+
+### :house: Internal
+
+ * Count Babel tests towards Babylon code coverage ([#182](https://github.com/babel/babylon/pull/182)) (Moti Zilberman)
+ * Fix strange line endings ([#214](https://github.com/babel/babylon/pull/214)) (Thomas Grainger)
+ * Add node 7 (Daniel Tschinder)
+ * chore(package): update flow-bin to version 0.34.0 ([#204](https://github.com/babel/babylon/pull/204)) (Greenkeeper)
+
+## v6.13.1 (2016-10-26)
+
+### :nail_care: Polish
+
+- Use rollup for bundling to speed up startup time ([#190](https://github.com/babel/babylon/pull/190)) ([@drewml](https://github.com/DrewML))
+
+```js
+const babylon = require('babylon');
+const ast = babylon.parse('var foo = "lol";');
+```
+
+With that test case, there was a ~95ms savings by removing the need for node to build/traverse the dependency graph.
+
+**Without bundling**
+![image](https://cloud.githubusercontent.com/assets/5233399/19420264/3133497e-93ad-11e6-9a6a-2da59c4f5c13.png)
+
+**With bundling**
+![image](https://cloud.githubusercontent.com/assets/5233399/19420267/388f556e-93ad-11e6-813e-7c5c396be322.png)
+
+- add clean command [skip ci] ([#201](https://github.com/babel/babylon/pull/201)) (Henry Zhu)
+- add ForAwaitStatement (async generator already added) [skip ci] ([#196](https://github.com/babel/babylon/pull/196)) (Henry Zhu)
+
+## v6.13.0 (2016-10-21)
+
+### :eyeglasses: Spec Compliance
+
+Property variance type annotations for Flow plugin ([#161](https://github.com/babel/babylon/pull/161)) (Sam Goldman)
+
+> See https://flowtype.org/docs/variance.html for more information
+
+```js
+type T = { +p: T };
+interface T { -p: T };
+declare class T { +[k:K]: V };
+class T { -[k:K]: V };
+class C2 { +p: T = e };
+```
+
+Raise error on duplicate definition of __proto__ ([#183](https://github.com/babel/babylon/pull/183)) (Moti Zilberman)
+
+```js
+({ __proto__: 1, __proto__: 2 }) // Throws an error now
+```
+
+### :bug: Bug Fix
+
+Flow: Allow class properties to be named `static` ([#184](https://github.com/babel/babylon/pull/184)) (Moti Zilberman)
+
+```js
+declare class A {
+  static: T;
+}
+```
+
+Allow "async" as identifier for object literal property shorthand ([#187](https://github.com/babel/babylon/pull/187)) (Andrew Levine)
+
+```js
+var foo = { async, bar };
+```
+
+### :nail_care: Polish
+
+Fix flowtype and add inType to state ([#189](https://github.com/babel/babylon/pull/189)) (Daniel Tschinder)
+
+> This improves the performance slightly (because of hidden classes)
+
+### :house: Internal
+
+Fix .gitattributes line ending setting ([#191](https://github.com/babel/babylon/pull/191)) (Moti Zilberman)
+
+Increase test coverage ([#175](https://github.com/babel/babylon/pull/175) (Moti Zilberman)
+
+Readd missin .eslinignore for IDEs (Daniel Tschinder)
+
+Error on missing expected.json fixture in CI ([#188](https://github.com/babel/babylon/pull/188)) (Moti Zilberman)
+
+Add .gitattributes and .editorconfig for LF line endings ([#179](https://github.com/babel/babylon/pull/179)) (Moti Zilberman)
+
+Fixes two tests that are failing after the merge of #172 ([#177](https://github.com/babel/babylon/pull/177)) (Moti Zilberman)
+
+## v6.12.0 (2016-10-14)
+
+### :eyeglasses: Spec Compliance
+
+Implement import() syntax ([#163](https://github.com/babel/babylon/pull/163)) (Jordan Gensler)
+
+#### Dynamic Import
+
+- Proposal Repo: https://github.com/domenic/proposal-dynamic-import
+- Championed by [@domenic](https://github.com/domenic)
+- stage-2
+- [sept-28 tc39 notes](https://github.com/rwaldron/tc39-notes/blob/master/es7/2016-09/sept-28.md#113a-import)
+
+> This repository contains a proposal for adding a "function-like" import() module loading syntactic form to JavaScript
+
+```js
+import(`./section-modules/${link.dataset.entryModule}.js`)
+.then(module => {
+  module.loadPageInto(main);
+})
+```
+
+Add EmptyTypeAnnotation ([#171](https://github.com/babel/babylon/pull/171)) (Sam Goldman)
+
+#### EmptyTypeAnnotation
+
+Just wasn't covered before.
+
+```js
+type T = empty;
+```
+
+### :bug: Bug Fix
+
+Fix crash when exporting with destructuring and sparse array ([#170](https://github.com/babel/babylon/pull/170)) (Jeroen Engels)
+
+```js
+// was failing due to sparse array
+export const { foo: [ ,, qux7 ] } = bar;
+```
+
+Allow keyword in Flow object declaration property names with type parameters ([#146](https://github.com/babel/babylon/pull/146)) (Dan Harper)
+
+```js
+declare class X {
+  foobar<T>(): void;
+  static foobar<T>(): void;
+}
+```
+
+Allow keyword in object/class property names with Flow type parameters ([#145](https://github.com/babel/babylon/pull/145)) (Dan Harper)
+
+```js
+class Foo {
+  delete<T>(item: T): T {
+    return item;
+  }
+}
+```
+
+Allow typeAnnotations for yield expressions ([#174](https://github.com/babel/babylon/pull/174))) (Daniel Tschinder)
+
+```js
+function *foo() {
+  const x = (yield 5: any);
+}
+```
+
+### :nail_care: Polish
+
+Annotate more errors with expected token ([#172](https://github.com/babel/babylon/pull/172))) (Moti Zilberman)
+
+```js
+// Unexpected token, expected ; (1:6)
+{ set 1 }
+```
+
+### :house: Internal
+
+Remove kcheck ([#173](https://github.com/babel/babylon/pull/173)))  (Daniel Tschinder)
+
+Also run flow, linting, babel tests on separate instances (add back node 0.10)
+
+## v6.11.6 (2016-10-12)
+
+### :bug: Bug Fix/Regression
+
+Fix crash when exporting with destructuring and sparse array ([#170](https://github.com/babel/babylon/pull/170)) (Jeroen Engels)
+
+```js
+// was failing with `Cannot read property 'type' of null` because of null identifiers
+export const { foo: [ ,, qux7 ] } = bar;
+```
+
+## v6.11.5 (2016-10-12)
+
+### :eyeglasses: Spec Compliance
+
+Fix: Check for duplicate named exports in exported destructuring assignments ([#144](https://github.com/babel/babylon/pull/144)) (Kai Cataldo)
+
+```js
+// `foo` has already been exported. Exported identifiers must be unique. (2:20)
+export function foo() {};
+export const { a: [{foo}] } = bar;
+```
+
+Fix: Check for duplicate named exports in exported rest elements/properties ([#164](https://github.com/babel/babylon/pull/164)) (Kai Cataldo)
+
+```js
+// `foo` has already been exported. Exported identifiers must be unique. (2:22)
+export const foo = 1;
+export const [bar, ...foo] = baz;
+```
+
+### :bug: Bug Fix
+
+Fix: Allow identifier `async` for default param in arrow expression ([#165](https://github.com/babel/babylon/pull/165)) (Kai Cataldo)
+
+```js
+// this is ok now
+const test = ({async = true}) => {};
+```
+
+### :nail_care: Polish
+
+Babylon will now print out the token it's expecting if there's a `SyntaxError` ([#150](https://github.com/babel/babylon/pull/150)) (Daniel Tschinder)
+
+```bash
+# So in the case of a missing ending curly (`}`)
+Module build failed: SyntaxError: Unexpected token, expected } (30:0)
+  28 |   }
+  29 |
+> 30 |
+     | ^
+```
+
+## v6.11.4 (2016-10-03)
+
+Temporary rollback for erroring on trailing comma with spread (#154) (Henry Zhu)
+
+## v6.11.3 (2016-10-01)
+
+### :eyeglasses: Spec Compliance
+
+Add static errors for object rest (#149) ([@danez](https://github.com/danez))
+
+> https://github.com/sebmarkbage/ecmascript-rest-spread
+
+Object rest copies the *rest* of properties from the right hand side `obj` starting from the left to right.
+
+```js
+let { x, y, ...z } =  { x: 1, y: 2, z: 3 };
+// x = 1
+// y = 2
+// z = { z: 3 }
+```
+
+#### New Syntax Errors:
+
+**SyntaxError**: The rest element has to be the last element when destructuring (1:10)
+```bash
+> 1 | let { ...x, y, z } = { x: 1, y: 2, z: 3};
+    |           ^
+# Previous behavior:
+# x = { x: 1, y: 2, z: 3 }
+# y = 2
+# z = 3
+```
+
+Before, this was just a more verbose way of shallow copying `obj` since it doesn't actually do what you think.
+
+**SyntaxError**: Cannot have multiple rest elements when destructuring (1:13)
+
+```bash
+> 1 | let { x, ...y, ...z } = { x: 1, y: 2, z: 3};
+    |              ^
+# Previous behavior:
+# x = 1
+# y = { y: 2, z: 3 }
+# z = { y: 2, z: 3 }
+```
+
+Before y and z would just be the same value anyway so there is no reason to need to have both.
+
+**SyntaxError**: A trailing comma is not permitted after the rest element (1:16)
+
+```js
+let { x, y, ...z, } = obj;
+```
+
+The rationale for this is that the use case for trailing comma is that you can add something at the end without affecting the line above. Since a RestProperty always has to be the last property it doesn't make sense.
+
+---
+
+get / set are valid property names in default assignment (#142) ([@jezell](https://github.com/jezell))
+
+```js
+// valid
+function something({ set = null, get = null }) {}
+```
+
+## v6.11.2 (2016-09-23)
+
+### Bug Fix
+
+- [#139](https://github.com/babel/babylon/issues/139) Don't do the duplicate check if not an identifier (#140) @hzoo
+
+```js
+// regression with duplicate export check
+SyntaxError: ./typography.js: `undefined` has already been exported. Exported identifiers must be unique. (22:13)
+  20 |
+  21 | export const { rhythm } = typography;
+> 22 | export const { TypographyStyle } = typography
+```
+
+Bail out for now, and make a change to account for destructuring in the next release.
+
+## 6.11.1 (2016-09-22)
+
+### Bug Fix
+- [#137](https://github.com/babel/babylon/pull/137) - Fix a regression with duplicate exports - it was erroring on all keys in `Object.prototype`. @danez
+
+```javascript
+export toString from './toString';
+```
+
+```bash
+`toString` has already been exported. Exported identifiers must be unique. (1:7)
+> 1 | export toString from './toString';
+    |        ^
+  2 |
+```
+
+## 6.11.0 (2016-09-22)
+
+### Spec Compliance (will break CI)
+
+- Disallow duplicate named exports ([#107](https://github.com/babel/babylon/pull/107)) @kaicataldo
+
+```js
+// Only one default export allowed per module. (2:9)
+export default function() {};
+export { foo as default };
+
+// Only one default export allowed per module. (2:0)
+export default {};
+export default function() {};
+
+// `Foo` has already been exported. Exported identifiers must be unique. (2:0)
+export { Foo };
+export class Foo {};
+```
+
+### New Feature (Syntax)
+
+- Add support for computed class property names ([#121](https://github.com/babel/babylon/pull/121)) @motiz88
+
+```js
+// AST
+interface ClassProperty <: Node {
+  type: "ClassProperty";
+  key: Identifier;
+  value: Expression;
+  computed: boolean; // added
+}
+```
+
+```js
+// with "plugins": ["classProperties"]
+class Foo {
+  [x]
+  ['y']
+}
+
+class Bar {
+  [p]
+  [m] () {}
+}
+ ```
+
+### Bug Fix
+
+- Fix `static` property falling through in the declare class Flow AST ([#135](https://github.com/babel/babylon/pull/135)) @danharper
+
+```js
+declare class X {
+    a: number;
+    static b: number; // static
+    c: number; // this was being marked as static in the AST as well
+}
+```
+
+### Polish
+
+- Rephrase "assigning/binding to rvalue" errors to include context ([#119](https://github.com/babel/babylon/pull/119)) @motiz88
+
+```js
+// Used to error with:
+// SyntaxError: Assigning to rvalue (1:0)
+
+// Now:
+// Invalid left-hand side in assignment expression (1:0)
+3 = 4
+
+// Invalid left-hand side in for-in statement (1:5)
+for (+i in {});
+```
+
+### Internal
+
+- Fix call to `this.parseMaybeAssign` with correct arguments ([#133](https://github.com/babel/babylon/pull/133)) @danez
+- Add semver note to changelog ([#131](https://github.com/babel/babylon/pull/131)) @hzoo
+
+## 6.10.0 (2016-09-19)
+
+> We plan to include some spec compliance bugs in patch versions. An example was the multiple default exports issue.
+
+### Spec Compliance
+
+* Implement ES2016 check for simple parameter list in strict mode ([#106](https://github.com/babel/babylon/pull/106)) (Timothy Gu)
+
+> It is a Syntax Error if ContainsUseStrict of FunctionBody is true and IsSimpleParameterList of FormalParameters is false. https://tc39.github.io/ecma262/2016/#sec-function-definitions-static-semantics-early-errors
+
+More Context: [tc39-notes](https://github.com/rwaldron/tc39-notes/blob/master/es7/2015-07/july-29.md#611-the-scope-of-use-strict-with-respect-to-destructuring-in-parameter-lists)
+
+For example:
+
+```js
+// this errors because it uses destructuring and default parameters
+// in a function with a "use strict" directive
+function a([ option1, option2 ] = []) {
+  "use strict";
+}
+ ```
+
+The solution would be to use a top level "use strict" or to remove the destructuring or default parameters when using a function + "use strict" or to.
+
+### New Feature
+
+* Exact object type annotations for Flow plugin ([#104](https://github.com/babel/babylon/pull/104)) (Basil Hosmer)
+
+Added to flow in https://github.com/facebook/flow/commit/c710c40aa2a115435098d6c0dfeaadb023cd39b8
+
+Looks like:
+
+```js
+var a : {| x: number, y: string |} = { x: 0, y: 'foo' };
+```
+
+### Bug Fixes
+
+* Include `typeParameter` location in `ArrowFunctionExpression` ([#126](https://github.com/babel/babylon/pull/126)) (Daniel Tschinder)
+* Error on invalid flow type annotation with default assignment ([#122](https://github.com/babel/babylon/pull/122)) (Dan Harper)
+* Fix Flow return types on arrow functions ([#124](https://github.com/babel/babylon/pull/124)) (Dan Harper)
+
+### Misc
+
+* Add tests for export extensions ([#127](https://github.com/babel/babylon/pull/127)) (Daniel Tschinder)
+* Fix Contributing guidelines [skip ci] (Daniel Tschinder)
+
+## 6.9.2 (2016-09-09)
+
+The only change is to remove the `babel-runtime` dependency by compiling with Babel's ES2015 loose mode. So using babylon standalone should be smaller.
+
+## 6.9.1 (2016-08-23)
+
+This release contains mainly small bugfixes but also updates babylons default mode to es2017. The features for `exponentiationOperator`, `asyncFunctions` and `trailingFunctionCommas` which previously needed to be activated via plugin are now enabled by default and the plugins are now no-ops.
+
+### Bug Fixes
+
+- Fix issues with default object params in async functions ([#96](https://github.com/babel/babylon/pull/96)) @danez
+- Fix issues with flow-types and async function ([#95](https://github.com/babel/babylon/pull/95)) @danez
+- Fix arrow functions with destructuring, types & default value ([#94](https://github.com/babel/babylon/pull/94)) @danharper
+- Fix declare class with qualified type identifier ([#97](https://github.com/babel/babylon/pull/97)) @danez
+- Remove exponentiationOperator, asyncFunctions, trailingFunctionCommas plugins and enable them by default ([#98](https://github.com/babel/babylon/pull/98)) @danez
+
+## 6.9.0 (2016-08-16)
+
+### New syntax support
+
+- Add JSX spread children ([#42](https://github.com/babel/babylon/pull/42)) @calebmer
+
+(Be aware that React is not going to support this syntax)
+
+```js
+<div>
+  {...todos.map(todo => <Todo key={todo.id} todo={todo}/>)}
+</div>
+```
+
+- Add support for declare module.exports ([#72](https://github.com/babel/babylon/pull/72)) @danez
+
+```js
+declare module "foo" {
+  declare module.exports: {}
+}
+```
+
+### New Features
+
+- If supplied, attach filename property to comment node loc. ([#80](https://github.com/babel/babylon/pull/80)) @divmain
+- Add identifier name to node loc field ([#90](https://github.com/babel/babylon/pull/90)) @kittens
+
+### Bug Fixes
+
+- Fix exponential operator to behave according to spec ([#75](https://github.com/babel/babylon/pull/75)) @danez
+- Fix lookahead to not add comments to arrays which are not cloned ([#76](https://github.com/babel/babylon/pull/76)) @danez
+- Fix accidental fall-through in Flow type parsing. ([#82](https://github.com/babel/babylon/pull/82)) @xiemaisi
+- Only allow declares inside declare module ([#73](https://github.com/babel/babylon/pull/73)) @danez
+- Small fix for parsing type parameter declarations ([#83](https://github.com/babel/babylon/pull/83)) @gabelevi
+- Fix arrow param locations with flow types ([#57](https://github.com/babel/babylon/pull/57)) @danez
+- Fixes SyntaxError position with flow optional type ([#65](https://github.com/babel/babylon/pull/65)) @danez
+
+### Internal
+
+- Add codecoverage to tests @danez
+- Fix tests to not save expected output if we expect the test to fail @danez
+- Make a shallow clone of babel for testing @danez
+- chore(package): update cross-env to version 2.0.0 ([#77](https://github.com/babel/babylon/pull/77)) @greenkeeperio-bot
+- chore(package): update ava to version 0.16.0 ([#86](https://github.com/babel/babylon/pull/86)) @greenkeeperio-bot
+- chore(package): update babel-plugin-istanbul to version 2.0.0 ([#89](https://github.com/babel/babylon/pull/89)) @greenkeeperio-bot
+- chore(package): update nyc to version 8.0.0 ([#88](https://github.com/babel/babylon/pull/88)) @greenkeeperio-bot
+
+## 6.8.4 (2016-07-06)
+
+### Bug Fixes
+
+- Fix the location of params, when flow and default value used ([#68](https://github.com/babel/babylon/pull/68)) @danez
+
+## 6.8.3 (2016-07-02)
+
+### Bug Fixes
+
+- Fix performance regression introduced in 6.8.2 with conditionals ([#63](https://github.com/babel/babylon/pull/63)) @danez
+
+## 6.8.2 (2016-06-24)
+
+### Bug Fixes
+
+- Fix parse error with yielding jsx elements in generators `function* it() { yield <a></a>; }` ([#31](https://github.com/babel/babylon/pull/31)) @eldereal
+- When cloning nodes do not clone its comments ([#24](https://github.com/babel/babylon/pull/24)) @danez
+- Fix parse errors when using arrow functions with an spread element and return type `(...props): void => {}` ([#10](https://github.com/babel/babylon/pull/10)) @danez
+- Fix leading comments added from previous node ([#23](https://github.com/babel/babylon/pull/23)) @danez
+- Fix parse errors with flow's optional arguments `(arg?) => {}` ([#19](https://github.com/babel/babylon/pull/19)) @danez
+- Support negative numeric type literals @kittens
+- Remove line terminator restriction after await keyword @kittens
+- Remove grouped type arrow restriction as it seems flow no longer has it @kittens
+- Fix parse error with generic methods that have the name `get` or `set` `class foo { get() {} }` ([#55](https://github.com/babel/babylon/pull/55)) @vkurchatkin
+- Fix parse error with arrow functions that have flow type parameter declarations `<T>(x: T): T => x;` ([#54](https://github.com/babel/babylon/pull/54)) @gabelevi
+
+### Documentation
+
+- Document AST differences from ESTree ([#41](https://github.com/babel/babylon/pull/41)) @nene
+- Move ast spec from babel/babel ([#46](https://github.com/babel/babylon/pull/46)) @hzoo
+
+### Internal
+
+- Enable skipped tests ([#16](https://github.com/babel/babylon/pull/16)) @danez
+- Add script to test latest version of babylon with babel ([#21](https://github.com/babel/babylon/pull/21)) @danez
+- Upgrade test runner ava @kittens
+- Add missing generate-identifier-regex script @kittens
+- Rename parser context types @kittens
+- Add node v6 to travis testing @hzoo
+- Update to Unicode v9 ([#45](https://github.com/babel/babylon/pull/45)) @mathiasbynens
+
+## 6.8.1 (2016-06-06)
+
+### New Feature
+
+- Parse type parameter declarations with defaults like `type Foo<T = string> = T`
+
+### Bug Fixes
+- Type parameter declarations need 1 or more type parameters.
+- The existential type `*` is not a valid type parameter.
+- The existential type `*` is a primary type
+
+### Spec Compliance
+- The param list for type parameter declarations now consists of `TypeParameter` nodes
+- New `TypeParameter` AST Node (replaces using the `Identifier` node before)
+
+```
+interface TypeParameter <: Node {
+  bound: TypeAnnotation;
+  default: TypeAnnotation;
+  name: string;
+  variance: "plus" | "minus";
+}
+```
+
+## 6.8.0 (2016-05-02)
+
+#### New Feature
+
+##### Parse Method Parameter Decorators ([#12](https://github.com/babel/babylon/pull/12))
+
+> [Method Parameter Decorators](https://goo.gl/8MmCMG) is now a TC39 [stage 0 proposal](https://github.com/tc39/ecma262/blob/master/stage0.md).
+
+Examples:
+
+```js
+class Foo {
+  constructor(@foo() x, @bar({ a: 123 }) @baz() y) {}
+}
+
+export default function func(@foo() x, @bar({ a: 123 }) @baz() y) {}
+
+var obj = {
+  method(@foo() x, @bar({ a: 123 }) @baz() y) {}
+};
+```
+
+##### Parse for-await statements (w/ `asyncGenerators` plugin) ([#17](https://github.com/babel/babylon/pull/17))
+
+There is also a new node type, `ForAwaitStatement`.
+
+> [Async generators and for-await](https://github.com/tc39/proposal-async-iteration) are now a [stage 2 proposal](https://github.com/tc39/ecma262#current-proposals).
+
+Example:
+
+```js
+async function f() {
+  for await (let x of y);
+}
+```

+ 19 - 0
node_modules/@babel/parser/LICENSE

@@ -0,0 +1,19 @@
+Copyright (C) 2012-2014 by various contributors (see AUTHORS)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.

+ 19 - 0
node_modules/@babel/parser/README.md

@@ -0,0 +1,19 @@
+# @babel/parser
+
+> A JavaScript parser
+
+See our website [@babel/parser](https://babeljs.io/docs/en/babel-parser) for more information or the [issues](https://github.com/babel/babel/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3A%22pkg%3A%20parser%20(babylon)%22+is%3Aopen) associated with this package.
+
+## Install
+
+Using npm:
+
+```sh
+npm install --save-dev @babel/parser
+```
+
+or using yarn:
+
+```sh
+yarn add @babel/parser --dev
+```

+ 15 - 0
node_modules/@babel/parser/bin/babel-parser.js

@@ -0,0 +1,15 @@
+#!/usr/bin/env node
+/* eslint no-var: 0 */
+
+var parser = require("..");
+var fs = require("fs");
+
+var filename = process.argv[2];
+if (!filename) {
+  console.error("no filename specified");
+} else {
+  var file = fs.readFileSync(filename, "utf8");
+  var ast = parser.parse(file);
+
+  console.log(JSON.stringify(ast, null, "  "));
+}

+ 5 - 0
node_modules/@babel/parser/index.cjs

@@ -0,0 +1,5 @@
+try {
+  module.exports = require("./lib/index.cjs");
+} catch {
+  module.exports = require("./lib/index.js");
+}

Файловите разлики са ограничени, защото са твърде много
+ 1310 - 0
node_modules/@babel/parser/lib/index.js


Файловите разлики са ограничени, защото са твърде много
+ 0 - 0
node_modules/@babel/parser/lib/index.js.map


+ 40 - 0
node_modules/@babel/parser/lib/options.js

@@ -0,0 +1,40 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.defaultOptions = void 0;
+exports.getOptions = getOptions;
+const defaultOptions = {
+  sourceType: "script",
+  sourceFilename: undefined,
+  startColumn: 0,
+  startLine: 1,
+  allowAwaitOutsideFunction: false,
+  allowReturnOutsideFunction: false,
+  allowNewTargetOutsideFunction: false,
+  allowImportExportEverywhere: false,
+  allowSuperOutsideMethod: false,
+  allowUndeclaredExports: false,
+  plugins: [],
+  strictMode: null,
+  ranges: false,
+  tokens: false,
+  createParenthesizedExpressions: false,
+  errorRecovery: false,
+  attachComment: true,
+  annexB: true
+};
+exports.defaultOptions = defaultOptions;
+function getOptions(opts) {
+  if (opts && opts.annexB != null && opts.annexB !== false) {
+    throw new Error("The `annexB` option can only be set to `false`.");
+  }
+  const options = {};
+  for (const key of Object.keys(defaultOptions)) {
+    options[key] = opts && opts[key] != null ? opts[key] : defaultOptions[key];
+  }
+  return options;
+}
+
+//# sourceMappingURL=options.js.map

Файловите разлики са ограничени, защото са твърде много
+ 0 - 0
node_modules/@babel/parser/lib/options.js.map


+ 106 - 0
node_modules/@babel/parser/lib/parse-error.js

@@ -0,0 +1,106 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+var _exportNames = {
+  ParseErrorEnum: true,
+  Errors: true
+};
+exports.Errors = void 0;
+exports.ParseErrorEnum = ParseErrorEnum;
+var _location = require("./util/location");
+var _credentials = require("./parse-error/credentials");
+Object.keys(_credentials).forEach(function (key) {
+  if (key === "default" || key === "__esModule") return;
+  if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
+  if (key in exports && exports[key] === _credentials[key]) return;
+  Object.defineProperty(exports, key, {
+    enumerable: true,
+    get: function () {
+      return _credentials[key];
+    }
+  });
+});
+var _moduleErrors = require("./parse-error/module-errors");
+var _standardErrors = require("./parse-error/standard-errors");
+var _strictModeErrors = require("./parse-error/strict-mode-errors");
+var _pipelineOperatorErrors = require("./parse-error/pipeline-operator-errors");
+const _excluded = ["toMessage"],
+  _excluded2 = ["message"];
+function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
+function toParseErrorConstructor(_ref) {
+  let {
+      toMessage
+    } = _ref,
+    properties = _objectWithoutPropertiesLoose(_ref, _excluded);
+  return function constructor({
+    loc,
+    details
+  }) {
+    return (0, _credentials.instantiate)(SyntaxError, Object.assign({}, properties, {
+      loc
+    }), {
+      clone(overrides = {}) {
+        const loc = overrides.loc || {};
+        return constructor({
+          loc: new _location.Position("line" in loc ? loc.line : this.loc.line, "column" in loc ? loc.column : this.loc.column, "index" in loc ? loc.index : this.loc.index),
+          details: Object.assign({}, this.details, overrides.details)
+        });
+      },
+      details: {
+        value: details,
+        enumerable: false
+      },
+      message: {
+        get() {
+          return `${toMessage(this.details)} (${this.loc.line}:${this.loc.column})`;
+        },
+        set(value) {
+          Object.defineProperty(this, "message", {
+            value
+          });
+        }
+      },
+      pos: {
+        reflect: "loc.index",
+        enumerable: true
+      },
+      missingPlugin: "missingPlugin" in details && {
+        reflect: "details.missingPlugin",
+        enumerable: true
+      }
+    });
+  };
+}
+function ParseErrorEnum(argument, syntaxPlugin) {
+  if (Array.isArray(argument)) {
+    return parseErrorTemplates => ParseErrorEnum(parseErrorTemplates, argument[0]);
+  }
+  const ParseErrorConstructors = {};
+  for (const reasonCode of Object.keys(argument)) {
+    const template = argument[reasonCode];
+    const _ref2 = typeof template === "string" ? {
+        message: () => template
+      } : typeof template === "function" ? {
+        message: template
+      } : template,
+      {
+        message
+      } = _ref2,
+      rest = _objectWithoutPropertiesLoose(_ref2, _excluded2);
+    const toMessage = typeof message === "string" ? () => message : message;
+    ParseErrorConstructors[reasonCode] = toParseErrorConstructor(Object.assign({
+      code: _credentials.ParseErrorCode.SyntaxError,
+      reasonCode,
+      toMessage
+    }, syntaxPlugin ? {
+      syntaxPlugin
+    } : {}, rest));
+  }
+  return ParseErrorConstructors;
+}
+const Errors = Object.assign({}, ParseErrorEnum(_moduleErrors.default), ParseErrorEnum(_standardErrors.default), ParseErrorEnum(_strictModeErrors.default), ParseErrorEnum`pipelineOperator`(_pipelineOperatorErrors.default));
+exports.Errors = Errors;
+
+//# sourceMappingURL=parse-error.js.map

Файловите разлики са ограничени, защото са твърде много
+ 0 - 0
node_modules/@babel/parser/lib/parse-error.js.map


+ 28 - 0
node_modules/@babel/parser/lib/parse-error/credentials.js

@@ -0,0 +1,28 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.instantiate = exports.ParseErrorCode = void 0;
+var ParseErrorCode = {
+  SyntaxError: "BABEL_PARSER_SYNTAX_ERROR",
+  SourceTypeModuleError: "BABEL_PARSER_SOURCETYPE_MODULE_REQUIRED"
+};
+exports.ParseErrorCode = ParseErrorCode;
+const reflect = (keys, last = keys.length - 1) => ({
+  get() {
+    return keys.reduce((object, key) => object[key], this);
+  },
+  set(value) {
+    keys.reduce((item, key, i) => i === last ? item[key] = value : item[key], this);
+  }
+});
+const instantiate = (constructor, properties, descriptors) => Object.keys(descriptors).map(key => [key, descriptors[key]]).filter(([, descriptor]) => !!descriptor).map(([key, descriptor]) => [key, typeof descriptor === "function" ? {
+  value: descriptor,
+  enumerable: false
+} : typeof descriptor.reflect === "string" ? Object.assign({}, descriptor, reflect(descriptor.reflect.split("."))) : descriptor]).reduce((instance, [key, descriptor]) => Object.defineProperty(instance, key, Object.assign({
+  configurable: true
+}, descriptor)), Object.assign(new constructor(), properties));
+exports.instantiate = instantiate;
+
+//# sourceMappingURL=credentials.js.map

Файловите разлики са ограничени, защото са твърде много
+ 0 - 0
node_modules/@babel/parser/lib/parse-error/credentials.js.map


+ 20 - 0
node_modules/@babel/parser/lib/parse-error/module-errors.js

@@ -0,0 +1,20 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = void 0;
+var _parseError = require("../parse-error");
+var _default = {
+  ImportMetaOutsideModule: {
+    message: `import.meta may appear only with 'sourceType: "module"'`,
+    code: _parseError.ParseErrorCode.SourceTypeModuleError
+  },
+  ImportOutsideModule: {
+    message: `'import' and 'export' may appear only with 'sourceType: "module"'`,
+    code: _parseError.ParseErrorCode.SourceTypeModuleError
+  }
+};
+exports.default = _default;
+
+//# sourceMappingURL=module-errors.js.map

+ 1 - 0
node_modules/@babel/parser/lib/parse-error/module-errors.js.map

@@ -0,0 +1 @@
+{"version":3,"names":["_parseError","require","_default","ImportMetaOutsideModule","message","code","ParseErrorCode","SourceTypeModuleError","ImportOutsideModule","exports","default"],"sources":["../../src/parse-error/module-errors.ts"],"sourcesContent":["import { ParseErrorCode } from \"../parse-error\";\n\nexport default {\n  ImportMetaOutsideModule: {\n    message: `import.meta may appear only with 'sourceType: \"module\"'`,\n    code: ParseErrorCode.SourceTypeModuleError,\n  },\n  ImportOutsideModule: {\n    message: `'import' and 'export' may appear only with 'sourceType: \"module\"'`,\n    code: ParseErrorCode.SourceTypeModuleError,\n  },\n};\n"],"mappings":";;;;;;AAAA,IAAAA,WAAA,GAAAC,OAAA;AAAgD,IAAAC,QAAA,GAEjC;EACbC,uBAAuB,EAAE;IACvBC,OAAO,EAAG,yDAAwD;IAClEC,IAAI,EAAEC,0BAAc,CAACC;EACvB,CAAC;EACDC,mBAAmB,EAAE;IACnBJ,OAAO,EAAG,mEAAkE;IAC5EC,IAAI,EAAEC,0BAAc,CAACC;EACvB;AACF,CAAC;AAAAE,OAAA,CAAAC,OAAA,GAAAR,QAAA"}

+ 32 - 0
node_modules/@babel/parser/lib/parse-error/pipeline-operator-errors.js

@@ -0,0 +1,32 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = exports.UnparenthesizedPipeBodyDescriptions = void 0;
+var _toNodeDescription = require("./to-node-description");
+const UnparenthesizedPipeBodyDescriptions = new Set(["ArrowFunctionExpression", "AssignmentExpression", "ConditionalExpression", "YieldExpression"]);
+exports.UnparenthesizedPipeBodyDescriptions = UnparenthesizedPipeBodyDescriptions;
+var _default = {
+  PipeBodyIsTighter: "Unexpected yield after pipeline body; any yield expression acting as Hack-style pipe body must be parenthesized due to its loose operator precedence.",
+  PipeTopicRequiresHackPipes: 'Topic reference is used, but the pipelineOperator plugin was not passed a "proposal": "hack" or "smart" option.',
+  PipeTopicUnbound: "Topic reference is unbound; it must be inside a pipe body.",
+  PipeTopicUnconfiguredToken: ({
+    token
+  }) => `Invalid topic token ${token}. In order to use ${token} as a topic reference, the pipelineOperator plugin must be configured with { "proposal": "hack", "topicToken": "${token}" }.`,
+  PipeTopicUnused: "Hack-style pipe body does not contain a topic reference; Hack-style pipes must use topic at least once.",
+  PipeUnparenthesizedBody: ({
+    type
+  }) => `Hack-style pipe body cannot be an unparenthesized ${(0, _toNodeDescription.default)({
+    type
+  })}; please wrap it in parentheses.`,
+  PipelineBodyNoArrow: 'Unexpected arrow "=>" after pipeline body; arrow function in pipeline body must be parenthesized.',
+  PipelineBodySequenceExpression: "Pipeline body may not be a comma-separated sequence expression.",
+  PipelineHeadSequenceExpression: "Pipeline head should not be a comma-separated sequence expression.",
+  PipelineTopicUnused: "Pipeline is in topic style but does not use topic reference.",
+  PrimaryTopicNotAllowed: "Topic reference was used in a lexical context without topic binding.",
+  PrimaryTopicRequiresSmartPipeline: 'Topic reference is used, but the pipelineOperator plugin was not passed a "proposal": "hack" or "smart" option.'
+};
+exports.default = _default;
+
+//# sourceMappingURL=pipeline-operator-errors.js.map

Файловите разлики са ограничени, защото са твърде много
+ 0 - 0
node_modules/@babel/parser/lib/parse-error/pipeline-operator-errors.js.map


+ 220 - 0
node_modules/@babel/parser/lib/parse-error/standard-errors.js

@@ -0,0 +1,220 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = void 0;
+var _toNodeDescription = require("./to-node-description");
+var _default = {
+  AccessorIsGenerator: ({
+    kind
+  }) => `A ${kind}ter cannot be a generator.`,
+  ArgumentsInClass: "'arguments' is only allowed in functions and class methods.",
+  AsyncFunctionInSingleStatementContext: "Async functions can only be declared at the top level or inside a block.",
+  AwaitBindingIdentifier: "Can not use 'await' as identifier inside an async function.",
+  AwaitBindingIdentifierInStaticBlock: "Can not use 'await' as identifier inside a static block.",
+  AwaitExpressionFormalParameter: "'await' is not allowed in async function parameters.",
+  AwaitUsingNotInAsyncContext: "'await using' is only allowed within async functions and at the top levels of modules.",
+  AwaitNotInAsyncContext: "'await' is only allowed within async functions and at the top levels of modules.",
+  AwaitNotInAsyncFunction: "'await' is only allowed within async functions.",
+  BadGetterArity: "A 'get' accessor must not have any formal parameters.",
+  BadSetterArity: "A 'set' accessor must have exactly one formal parameter.",
+  BadSetterRestParameter: "A 'set' accessor function argument must not be a rest parameter.",
+  ConstructorClassField: "Classes may not have a field named 'constructor'.",
+  ConstructorClassPrivateField: "Classes may not have a private field named '#constructor'.",
+  ConstructorIsAccessor: "Class constructor may not be an accessor.",
+  ConstructorIsAsync: "Constructor can't be an async function.",
+  ConstructorIsGenerator: "Constructor can't be a generator.",
+  DeclarationMissingInitializer: ({
+    kind
+  }) => `Missing initializer in ${kind} declaration.`,
+  DecoratorArgumentsOutsideParentheses: "Decorator arguments must be moved inside parentheses: use '@(decorator(args))' instead of '@(decorator)(args)'.",
+  DecoratorBeforeExport: "Decorators must be placed *before* the 'export' keyword. Remove the 'decoratorsBeforeExport: true' option to use the 'export @decorator class {}' syntax.",
+  DecoratorsBeforeAfterExport: "Decorators can be placed *either* before or after the 'export' keyword, but not in both locations at the same time.",
+  DecoratorConstructor: "Decorators can't be used with a constructor. Did you mean '@dec class { ... }'?",
+  DecoratorExportClass: "Decorators must be placed *after* the 'export' keyword. Remove the 'decoratorsBeforeExport: false' option to use the '@decorator export class {}' syntax.",
+  DecoratorSemicolon: "Decorators must not be followed by a semicolon.",
+  DecoratorStaticBlock: "Decorators can't be used with a static block.",
+  DeletePrivateField: "Deleting a private field is not allowed.",
+  DestructureNamedImport: "ES2015 named imports do not destructure. Use another statement for destructuring after the import.",
+  DuplicateConstructor: "Duplicate constructor in the same class.",
+  DuplicateDefaultExport: "Only one default export allowed per module.",
+  DuplicateExport: ({
+    exportName
+  }) => `\`${exportName}\` has already been exported. Exported identifiers must be unique.`,
+  DuplicateProto: "Redefinition of __proto__ property.",
+  DuplicateRegExpFlags: "Duplicate regular expression flag.",
+  ElementAfterRest: "Rest element must be last element.",
+  EscapedCharNotAnIdentifier: "Invalid Unicode escape.",
+  ExportBindingIsString: ({
+    localName,
+    exportName
+  }) => `A string literal cannot be used as an exported binding without \`from\`.\n- Did you mean \`export { '${localName}' as '${exportName}' } from 'some-module'\`?`,
+  ExportDefaultFromAsIdentifier: "'from' is not allowed as an identifier after 'export default'.",
+  ForInOfLoopInitializer: ({
+    type
+  }) => `'${type === "ForInStatement" ? "for-in" : "for-of"}' loop variable declaration may not have an initializer.`,
+  ForInUsing: "For-in loop may not start with 'using' declaration.",
+  ForOfAsync: "The left-hand side of a for-of loop may not be 'async'.",
+  ForOfLet: "The left-hand side of a for-of loop may not start with 'let'.",
+  GeneratorInSingleStatementContext: "Generators can only be declared at the top level or inside a block.",
+  IllegalBreakContinue: ({
+    type
+  }) => `Unsyntactic ${type === "BreakStatement" ? "break" : "continue"}.`,
+  IllegalLanguageModeDirective: "Illegal 'use strict' directive in function with non-simple parameter list.",
+  IllegalReturn: "'return' outside of function.",
+  ImportAttributesUseAssert: "The `assert` keyword in import attributes is deprecated and it has been replaced by the `with` keyword. You can enable the `deprecatedAssertSyntax: true` option in the import attributes plugin to suppress this error.",
+  ImportBindingIsString: ({
+    importName
+  }) => `A string literal cannot be used as an imported binding.\n- Did you mean \`import { "${importName}" as foo }\`?`,
+  ImportCallArgumentTrailingComma: "Trailing comma is disallowed inside import(...) arguments.",
+  ImportCallArity: ({
+    maxArgumentCount
+  }) => `\`import()\` requires exactly ${maxArgumentCount === 1 ? "one argument" : "one or two arguments"}.`,
+  ImportCallNotNewExpression: "Cannot use new with import(...).",
+  ImportCallSpreadArgument: "`...` is not allowed in `import()`.",
+  ImportJSONBindingNotDefault: "A JSON module can only be imported with `default`.",
+  ImportReflectionHasAssertion: "`import module x` cannot have assertions.",
+  ImportReflectionNotBinding: 'Only `import module x from "./module"` is valid.',
+  IncompatibleRegExpUVFlags: "The 'u' and 'v' regular expression flags cannot be enabled at the same time.",
+  InvalidBigIntLiteral: "Invalid BigIntLiteral.",
+  InvalidCodePoint: "Code point out of bounds.",
+  InvalidCoverInitializedName: "Invalid shorthand property initializer.",
+  InvalidDecimal: "Invalid decimal.",
+  InvalidDigit: ({
+    radix
+  }) => `Expected number in radix ${radix}.`,
+  InvalidEscapeSequence: "Bad character escape sequence.",
+  InvalidEscapeSequenceTemplate: "Invalid escape sequence in template.",
+  InvalidEscapedReservedWord: ({
+    reservedWord
+  }) => `Escape sequence in keyword ${reservedWord}.`,
+  InvalidIdentifier: ({
+    identifierName
+  }) => `Invalid identifier ${identifierName}.`,
+  InvalidLhs: ({
+    ancestor
+  }) => `Invalid left-hand side in ${(0, _toNodeDescription.default)(ancestor)}.`,
+  InvalidLhsBinding: ({
+    ancestor
+  }) => `Binding invalid left-hand side in ${(0, _toNodeDescription.default)(ancestor)}.`,
+  InvalidNumber: "Invalid number.",
+  InvalidOrMissingExponent: "Floating-point numbers require a valid exponent after the 'e'.",
+  InvalidOrUnexpectedToken: ({
+    unexpected
+  }) => `Unexpected character '${unexpected}'.`,
+  InvalidParenthesizedAssignment: "Invalid parenthesized assignment pattern.",
+  InvalidPrivateFieldResolution: ({
+    identifierName
+  }) => `Private name #${identifierName} is not defined.`,
+  InvalidPropertyBindingPattern: "Binding member expression.",
+  InvalidRecordProperty: "Only properties and spread elements are allowed in record definitions.",
+  InvalidRestAssignmentPattern: "Invalid rest operator's argument.",
+  LabelRedeclaration: ({
+    labelName
+  }) => `Label '${labelName}' is already declared.`,
+  LetInLexicalBinding: "'let' is not allowed to be used as a name in 'let' or 'const' declarations.",
+  LineTerminatorBeforeArrow: "No line break is allowed before '=>'.",
+  MalformedRegExpFlags: "Invalid regular expression flag.",
+  MissingClassName: "A class name is required.",
+  MissingEqInAssignment: "Only '=' operator can be used for specifying default value.",
+  MissingSemicolon: "Missing semicolon.",
+  MissingPlugin: ({
+    missingPlugin
+  }) => `This experimental syntax requires enabling the parser plugin: ${missingPlugin.map(name => JSON.stringify(name)).join(", ")}.`,
+  MissingOneOfPlugins: ({
+    missingPlugin
+  }) => `This experimental syntax requires enabling one of the following parser plugin(s): ${missingPlugin.map(name => JSON.stringify(name)).join(", ")}.`,
+  MissingUnicodeEscape: "Expecting Unicode escape sequence \\uXXXX.",
+  MixingCoalesceWithLogical: "Nullish coalescing operator(??) requires parens when mixing with logical operators.",
+  ModuleAttributeDifferentFromType: "The only accepted module attribute is `type`.",
+  ModuleAttributeInvalidValue: "Only string literals are allowed as module attribute values.",
+  ModuleAttributesWithDuplicateKeys: ({
+    key
+  }) => `Duplicate key "${key}" is not allowed in module attributes.`,
+  ModuleExportNameHasLoneSurrogate: ({
+    surrogateCharCode
+  }) => `An export name cannot include a lone surrogate, found '\\u${surrogateCharCode.toString(16)}'.`,
+  ModuleExportUndefined: ({
+    localName
+  }) => `Export '${localName}' is not defined.`,
+  MultipleDefaultsInSwitch: "Multiple default clauses.",
+  NewlineAfterThrow: "Illegal newline after throw.",
+  NoCatchOrFinally: "Missing catch or finally clause.",
+  NumberIdentifier: "Identifier directly after number.",
+  NumericSeparatorInEscapeSequence: "Numeric separators are not allowed inside unicode escape sequences or hex escape sequences.",
+  ObsoleteAwaitStar: "'await*' has been removed from the async functions proposal. Use Promise.all() instead.",
+  OptionalChainingNoNew: "Constructors in/after an Optional Chain are not allowed.",
+  OptionalChainingNoTemplate: "Tagged Template Literals are not allowed in optionalChain.",
+  OverrideOnConstructor: "'override' modifier cannot appear on a constructor declaration.",
+  ParamDupe: "Argument name clash.",
+  PatternHasAccessor: "Object pattern can't contain getter or setter.",
+  PatternHasMethod: "Object pattern can't contain methods.",
+  PrivateInExpectedIn: ({
+    identifierName
+  }) => `Private names are only allowed in property accesses (\`obj.#${identifierName}\`) or in \`in\` expressions (\`#${identifierName} in obj\`).`,
+  PrivateNameRedeclaration: ({
+    identifierName
+  }) => `Duplicate private name #${identifierName}.`,
+  RecordExpressionBarIncorrectEndSyntaxType: "Record expressions ending with '|}' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.",
+  RecordExpressionBarIncorrectStartSyntaxType: "Record expressions starting with '{|' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.",
+  RecordExpressionHashIncorrectStartSyntaxType: "Record expressions starting with '#{' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'hash'.",
+  RecordNoProto: "'__proto__' is not allowed in Record expressions.",
+  RestTrailingComma: "Unexpected trailing comma after rest element.",
+  SloppyFunction: "In non-strict mode code, functions can only be declared at top level or inside a block.",
+  SloppyFunctionAnnexB: "In non-strict mode code, functions can only be declared at top level, inside a block, or as the body of an if statement.",
+  StaticPrototype: "Classes may not have static property named prototype.",
+  SuperNotAllowed: "`super()` is only valid inside a class constructor of a subclass. Maybe a typo in the method name ('constructor') or not extending another class?",
+  SuperPrivateField: "Private fields can't be accessed on super.",
+  TrailingDecorator: "Decorators must be attached to a class element.",
+  TupleExpressionBarIncorrectEndSyntaxType: "Tuple expressions ending with '|]' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.",
+  TupleExpressionBarIncorrectStartSyntaxType: "Tuple expressions starting with '[|' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.",
+  TupleExpressionHashIncorrectStartSyntaxType: "Tuple expressions starting with '#[' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'hash'.",
+  UnexpectedArgumentPlaceholder: "Unexpected argument placeholder.",
+  UnexpectedAwaitAfterPipelineBody: 'Unexpected "await" after pipeline body; await must have parentheses in minimal proposal.',
+  UnexpectedDigitAfterHash: "Unexpected digit after hash token.",
+  UnexpectedImportExport: "'import' and 'export' may only appear at the top level.",
+  UnexpectedKeyword: ({
+    keyword
+  }) => `Unexpected keyword '${keyword}'.`,
+  UnexpectedLeadingDecorator: "Leading decorators must be attached to a class declaration.",
+  UnexpectedLexicalDeclaration: "Lexical declaration cannot appear in a single-statement context.",
+  UnexpectedNewTarget: "`new.target` can only be used in functions or class properties.",
+  UnexpectedNumericSeparator: "A numeric separator is only allowed between two digits.",
+  UnexpectedPrivateField: "Unexpected private name.",
+  UnexpectedReservedWord: ({
+    reservedWord
+  }) => `Unexpected reserved word '${reservedWord}'.`,
+  UnexpectedSuper: "'super' is only allowed in object methods and classes.",
+  UnexpectedToken: ({
+    expected,
+    unexpected
+  }) => `Unexpected token${unexpected ? ` '${unexpected}'.` : ""}${expected ? `, expected "${expected}"` : ""}`,
+  UnexpectedTokenUnaryExponentiation: "Illegal expression. Wrap left hand side or entire exponentiation in parentheses.",
+  UnexpectedUsingDeclaration: "Using declaration cannot appear in the top level when source type is `script`.",
+  UnsupportedBind: "Binding should be performed on object property.",
+  UnsupportedDecoratorExport: "A decorated export must export a class declaration.",
+  UnsupportedDefaultExport: "Only expressions, functions or classes are allowed as the `default` export.",
+  UnsupportedImport: "`import` can only be used in `import()` or `import.meta`.",
+  UnsupportedMetaProperty: ({
+    target,
+    onlyValidPropertyName
+  }) => `The only valid meta property for ${target} is ${target}.${onlyValidPropertyName}.`,
+  UnsupportedParameterDecorator: "Decorators cannot be used to decorate parameters.",
+  UnsupportedPropertyDecorator: "Decorators cannot be used to decorate object literal properties.",
+  UnsupportedSuper: "'super' can only be used with function calls (i.e. super()) or in property accesses (i.e. super.prop or super[prop]).",
+  UnterminatedComment: "Unterminated comment.",
+  UnterminatedRegExp: "Unterminated regular expression.",
+  UnterminatedString: "Unterminated string constant.",
+  UnterminatedTemplate: "Unterminated template.",
+  UsingDeclarationHasBindingPattern: "Using declaration cannot have destructuring patterns.",
+  VarRedeclaration: ({
+    identifierName
+  }) => `Identifier '${identifierName}' has already been declared.`,
+  YieldBindingIdentifier: "Can not use 'yield' as identifier inside a generator.",
+  YieldInParameter: "Yield expression is not allowed in formal parameters.",
+  ZeroDigitNumericSeparator: "Numeric separator can not be used after leading 0."
+};
+exports.default = _default;
+
+//# sourceMappingURL=standard-errors.js.map

Файловите разлики са ограничени, защото са твърде много
+ 0 - 0
node_modules/@babel/parser/lib/parse-error/standard-errors.js.map


+ 22 - 0
node_modules/@babel/parser/lib/parse-error/strict-mode-errors.js

@@ -0,0 +1,22 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = void 0;
+var _default = {
+  StrictDelete: "Deleting local variable in strict mode.",
+  StrictEvalArguments: ({
+    referenceName
+  }) => `Assigning to '${referenceName}' in strict mode.`,
+  StrictEvalArgumentsBinding: ({
+    bindingName
+  }) => `Binding '${bindingName}' in strict mode.`,
+  StrictFunction: "In strict mode code, functions can only be declared at top level or inside a block.",
+  StrictNumericEscape: "The only valid numeric escape in strict mode is '\\0'.",
+  StrictOctalLiteral: "Legacy octal literals are not allowed in strict mode.",
+  StrictWith: "'with' in strict mode."
+};
+exports.default = _default;
+
+//# sourceMappingURL=strict-mode-errors.js.map

Файловите разлики са ограничени, защото са твърде много
+ 0 - 0
node_modules/@babel/parser/lib/parse-error/strict-mode-errors.js.map


+ 39 - 0
node_modules/@babel/parser/lib/parse-error/to-node-description.js

@@ -0,0 +1,39 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = void 0;
+const NodeDescriptions = {
+  ArrayPattern: "array destructuring pattern",
+  AssignmentExpression: "assignment expression",
+  AssignmentPattern: "assignment expression",
+  ArrowFunctionExpression: "arrow function expression",
+  ConditionalExpression: "conditional expression",
+  CatchClause: "catch clause",
+  ForOfStatement: "for-of statement",
+  ForInStatement: "for-in statement",
+  ForStatement: "for-loop",
+  FormalParameters: "function parameter list",
+  Identifier: "identifier",
+  ImportSpecifier: "import specifier",
+  ImportDefaultSpecifier: "import default specifier",
+  ImportNamespaceSpecifier: "import namespace specifier",
+  ObjectPattern: "object destructuring pattern",
+  ParenthesizedExpression: "parenthesized expression",
+  RestElement: "rest element",
+  UpdateExpression: {
+    true: "prefix operation",
+    false: "postfix operation"
+  },
+  VariableDeclarator: "variable declaration",
+  YieldExpression: "yield expression"
+};
+const toNodeDescription = ({
+  type,
+  prefix
+}) => type === "UpdateExpression" ? NodeDescriptions.UpdateExpression[String(prefix)] : NodeDescriptions[type];
+var _default = toNodeDescription;
+exports.default = _default;
+
+//# sourceMappingURL=to-node-description.js.map

Файловите разлики са ограничени, защото са твърде много
+ 0 - 0
node_modules/@babel/parser/lib/parse-error/to-node-description.js.map


+ 36 - 0
node_modules/@babel/parser/lib/parser/base.js

@@ -0,0 +1,36 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = void 0;
+class BaseParser {
+  constructor() {
+    this.sawUnambiguousESM = false;
+    this.ambiguousScriptDifferentAst = false;
+  }
+  hasPlugin(pluginConfig) {
+    if (typeof pluginConfig === "string") {
+      return this.plugins.has(pluginConfig);
+    } else {
+      const [pluginName, pluginOptions] = pluginConfig;
+      if (!this.hasPlugin(pluginName)) {
+        return false;
+      }
+      const actualOptions = this.plugins.get(pluginName);
+      for (const key of Object.keys(pluginOptions)) {
+        if ((actualOptions == null ? void 0 : actualOptions[key]) !== pluginOptions[key]) {
+          return false;
+        }
+      }
+      return true;
+    }
+  }
+  getPluginOption(plugin, name) {
+    var _this$plugins$get;
+    return (_this$plugins$get = this.plugins.get(plugin)) == null ? void 0 : _this$plugins$get[name];
+  }
+}
+exports.default = BaseParser;
+
+//# sourceMappingURL=base.js.map

Файловите разлики са ограничени, защото са твърде много
+ 0 - 0
node_modules/@babel/parser/lib/parser/base.js.map


+ 190 - 0
node_modules/@babel/parser/lib/parser/comments.js

@@ -0,0 +1,190 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = void 0;
+exports.setInnerComments = setInnerComments;
+var _base = require("./base");
+function setTrailingComments(node, comments) {
+  if (node.trailingComments === undefined) {
+    node.trailingComments = comments;
+  } else {
+    node.trailingComments.unshift(...comments);
+  }
+}
+function setLeadingComments(node, comments) {
+  if (node.leadingComments === undefined) {
+    node.leadingComments = comments;
+  } else {
+    node.leadingComments.unshift(...comments);
+  }
+}
+function setInnerComments(node, comments) {
+  if (node.innerComments === undefined) {
+    node.innerComments = comments;
+  } else {
+    node.innerComments.unshift(...comments);
+  }
+}
+function adjustInnerComments(node, elements, commentWS) {
+  let lastElement = null;
+  let i = elements.length;
+  while (lastElement === null && i > 0) {
+    lastElement = elements[--i];
+  }
+  if (lastElement === null || lastElement.start > commentWS.start) {
+    setInnerComments(node, commentWS.comments);
+  } else {
+    setTrailingComments(lastElement, commentWS.comments);
+  }
+}
+class CommentsParser extends _base.default {
+  addComment(comment) {
+    if (this.filename) comment.loc.filename = this.filename;
+    this.state.comments.push(comment);
+  }
+  processComment(node) {
+    const {
+      commentStack
+    } = this.state;
+    const commentStackLength = commentStack.length;
+    if (commentStackLength === 0) return;
+    let i = commentStackLength - 1;
+    const lastCommentWS = commentStack[i];
+    if (lastCommentWS.start === node.end) {
+      lastCommentWS.leadingNode = node;
+      i--;
+    }
+    const {
+      start: nodeStart
+    } = node;
+    for (; i >= 0; i--) {
+      const commentWS = commentStack[i];
+      const commentEnd = commentWS.end;
+      if (commentEnd > nodeStart) {
+        commentWS.containingNode = node;
+        this.finalizeComment(commentWS);
+        commentStack.splice(i, 1);
+      } else {
+        if (commentEnd === nodeStart) {
+          commentWS.trailingNode = node;
+        }
+        break;
+      }
+    }
+  }
+  finalizeComment(commentWS) {
+    const {
+      comments
+    } = commentWS;
+    if (commentWS.leadingNode !== null || commentWS.trailingNode !== null) {
+      if (commentWS.leadingNode !== null) {
+        setTrailingComments(commentWS.leadingNode, comments);
+      }
+      if (commentWS.trailingNode !== null) {
+        setLeadingComments(commentWS.trailingNode, comments);
+      }
+    } else {
+      const {
+        containingNode: node,
+        start: commentStart
+      } = commentWS;
+      if (this.input.charCodeAt(commentStart - 1) === 44) {
+        switch (node.type) {
+          case "ObjectExpression":
+          case "ObjectPattern":
+          case "RecordExpression":
+            adjustInnerComments(node, node.properties, commentWS);
+            break;
+          case "CallExpression":
+          case "OptionalCallExpression":
+            adjustInnerComments(node, node.arguments, commentWS);
+            break;
+          case "FunctionDeclaration":
+          case "FunctionExpression":
+          case "ArrowFunctionExpression":
+          case "ObjectMethod":
+          case "ClassMethod":
+          case "ClassPrivateMethod":
+            adjustInnerComments(node, node.params, commentWS);
+            break;
+          case "ArrayExpression":
+          case "ArrayPattern":
+          case "TupleExpression":
+            adjustInnerComments(node, node.elements, commentWS);
+            break;
+          case "ExportNamedDeclaration":
+          case "ImportDeclaration":
+            adjustInnerComments(node, node.specifiers, commentWS);
+            break;
+          default:
+            {
+              setInnerComments(node, comments);
+            }
+        }
+      } else {
+        setInnerComments(node, comments);
+      }
+    }
+  }
+  finalizeRemainingComments() {
+    const {
+      commentStack
+    } = this.state;
+    for (let i = commentStack.length - 1; i >= 0; i--) {
+      this.finalizeComment(commentStack[i]);
+    }
+    this.state.commentStack = [];
+  }
+  resetPreviousNodeTrailingComments(node) {
+    const {
+      commentStack
+    } = this.state;
+    const {
+      length
+    } = commentStack;
+    if (length === 0) return;
+    const commentWS = commentStack[length - 1];
+    if (commentWS.leadingNode === node) {
+      commentWS.leadingNode = null;
+    }
+  }
+  resetPreviousIdentifierLeadingComments(node) {
+    const {
+      commentStack
+    } = this.state;
+    const {
+      length
+    } = commentStack;
+    if (length === 0) return;
+    if (commentStack[length - 1].trailingNode === node) {
+      commentStack[length - 1].trailingNode = null;
+    } else if (length >= 2 && commentStack[length - 2].trailingNode === node) {
+      commentStack[length - 2].trailingNode = null;
+    }
+  }
+  takeSurroundingComments(node, start, end) {
+    const {
+      commentStack
+    } = this.state;
+    const commentStackLength = commentStack.length;
+    if (commentStackLength === 0) return;
+    let i = commentStackLength - 1;
+    for (; i >= 0; i--) {
+      const commentWS = commentStack[i];
+      const commentEnd = commentWS.end;
+      const commentStart = commentWS.start;
+      if (commentStart === end) {
+        commentWS.leadingNode = node;
+      } else if (commentEnd === start) {
+        commentWS.trailingNode = node;
+      } else if (commentEnd < start) {
+        break;
+      }
+    }
+  }
+}
+exports.default = CommentsParser;
+
+//# sourceMappingURL=comments.js.map

Файловите разлики са ограничени, защото са твърде много
+ 0 - 0
node_modules/@babel/parser/lib/parser/comments.js.map


+ 1824 - 0
node_modules/@babel/parser/lib/parser/expression.js

@@ -0,0 +1,1824 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = void 0;
+var _types = require("../tokenizer/types");
+var _lval = require("./lval");
+var _identifier = require("../util/identifier");
+var _location = require("../util/location");
+var _scopeflags = require("../util/scopeflags");
+var _util = require("./util");
+var _productionParameter = require("../util/production-parameter");
+var _expressionScope = require("../util/expression-scope");
+var _parseError = require("../parse-error");
+var _pipelineOperatorErrors = require("../parse-error/pipeline-operator-errors");
+var _comments = require("./comments");
+var _node = require("./node");
+class ExpressionParser extends _lval.default {
+  checkProto(prop, isRecord, protoRef, refExpressionErrors) {
+    if (prop.type === "SpreadElement" || this.isObjectMethod(prop) || prop.computed || prop.shorthand) {
+      return;
+    }
+    const key = prop.key;
+    const name = key.type === "Identifier" ? key.name : key.value;
+    if (name === "__proto__") {
+      if (isRecord) {
+        this.raise(_parseError.Errors.RecordNoProto, {
+          at: key
+        });
+        return;
+      }
+      if (protoRef.used) {
+        if (refExpressionErrors) {
+          if (refExpressionErrors.doubleProtoLoc === null) {
+            refExpressionErrors.doubleProtoLoc = key.loc.start;
+          }
+        } else {
+          this.raise(_parseError.Errors.DuplicateProto, {
+            at: key
+          });
+        }
+      }
+      protoRef.used = true;
+    }
+  }
+  shouldExitDescending(expr, potentialArrowAt) {
+    return expr.type === "ArrowFunctionExpression" && expr.start === potentialArrowAt;
+  }
+  getExpression() {
+    this.enterInitialScopes();
+    this.nextToken();
+    const expr = this.parseExpression();
+    if (!this.match(137)) {
+      this.unexpected();
+    }
+    this.finalizeRemainingComments();
+    expr.comments = this.state.comments;
+    expr.errors = this.state.errors;
+    if (this.options.tokens) {
+      expr.tokens = this.tokens;
+    }
+    return expr;
+  }
+  parseExpression(disallowIn, refExpressionErrors) {
+    if (disallowIn) {
+      return this.disallowInAnd(() => this.parseExpressionBase(refExpressionErrors));
+    }
+    return this.allowInAnd(() => this.parseExpressionBase(refExpressionErrors));
+  }
+  parseExpressionBase(refExpressionErrors) {
+    const startLoc = this.state.startLoc;
+    const expr = this.parseMaybeAssign(refExpressionErrors);
+    if (this.match(12)) {
+      const node = this.startNodeAt(startLoc);
+      node.expressions = [expr];
+      while (this.eat(12)) {
+        node.expressions.push(this.parseMaybeAssign(refExpressionErrors));
+      }
+      this.toReferencedList(node.expressions);
+      return this.finishNode(node, "SequenceExpression");
+    }
+    return expr;
+  }
+  parseMaybeAssignDisallowIn(refExpressionErrors, afterLeftParse) {
+    return this.disallowInAnd(() => this.parseMaybeAssign(refExpressionErrors, afterLeftParse));
+  }
+  parseMaybeAssignAllowIn(refExpressionErrors, afterLeftParse) {
+    return this.allowInAnd(() => this.parseMaybeAssign(refExpressionErrors, afterLeftParse));
+  }
+  setOptionalParametersError(refExpressionErrors, resultError) {
+    var _resultError$loc;
+    refExpressionErrors.optionalParametersLoc = (_resultError$loc = resultError == null ? void 0 : resultError.loc) != null ? _resultError$loc : this.state.startLoc;
+  }
+  parseMaybeAssign(refExpressionErrors, afterLeftParse) {
+    const startLoc = this.state.startLoc;
+    if (this.isContextual(106)) {
+      if (this.prodParam.hasYield) {
+        let left = this.parseYield();
+        if (afterLeftParse) {
+          left = afterLeftParse.call(this, left, startLoc);
+        }
+        return left;
+      }
+    }
+    let ownExpressionErrors;
+    if (refExpressionErrors) {
+      ownExpressionErrors = false;
+    } else {
+      refExpressionErrors = new _util.ExpressionErrors();
+      ownExpressionErrors = true;
+    }
+    const {
+      type
+    } = this.state;
+    if (type === 10 || (0, _types.tokenIsIdentifier)(type)) {
+      this.state.potentialArrowAt = this.state.start;
+    }
+    let left = this.parseMaybeConditional(refExpressionErrors);
+    if (afterLeftParse) {
+      left = afterLeftParse.call(this, left, startLoc);
+    }
+    if ((0, _types.tokenIsAssignment)(this.state.type)) {
+      const node = this.startNodeAt(startLoc);
+      const operator = this.state.value;
+      node.operator = operator;
+      if (this.match(29)) {
+        this.toAssignable(left, true);
+        node.left = left;
+        const startIndex = startLoc.index;
+        if (refExpressionErrors.doubleProtoLoc != null && refExpressionErrors.doubleProtoLoc.index >= startIndex) {
+          refExpressionErrors.doubleProtoLoc = null;
+        }
+        if (refExpressionErrors.shorthandAssignLoc != null && refExpressionErrors.shorthandAssignLoc.index >= startIndex) {
+          refExpressionErrors.shorthandAssignLoc = null;
+        }
+        if (refExpressionErrors.privateKeyLoc != null && refExpressionErrors.privateKeyLoc.index >= startIndex) {
+          this.checkDestructuringPrivate(refExpressionErrors);
+          refExpressionErrors.privateKeyLoc = null;
+        }
+      } else {
+        node.left = left;
+      }
+      this.next();
+      node.right = this.parseMaybeAssign();
+      this.checkLVal(left, {
+        in: this.finishNode(node, "AssignmentExpression")
+      });
+      return node;
+    } else if (ownExpressionErrors) {
+      this.checkExpressionErrors(refExpressionErrors, true);
+    }
+    return left;
+  }
+  parseMaybeConditional(refExpressionErrors) {
+    const startLoc = this.state.startLoc;
+    const potentialArrowAt = this.state.potentialArrowAt;
+    const expr = this.parseExprOps(refExpressionErrors);
+    if (this.shouldExitDescending(expr, potentialArrowAt)) {
+      return expr;
+    }
+    return this.parseConditional(expr, startLoc, refExpressionErrors);
+  }
+  parseConditional(expr, startLoc, refExpressionErrors) {
+    if (this.eat(17)) {
+      const node = this.startNodeAt(startLoc);
+      node.test = expr;
+      node.consequent = this.parseMaybeAssignAllowIn();
+      this.expect(14);
+      node.alternate = this.parseMaybeAssign();
+      return this.finishNode(node, "ConditionalExpression");
+    }
+    return expr;
+  }
+  parseMaybeUnaryOrPrivate(refExpressionErrors) {
+    return this.match(136) ? this.parsePrivateName() : this.parseMaybeUnary(refExpressionErrors);
+  }
+  parseExprOps(refExpressionErrors) {
+    const startLoc = this.state.startLoc;
+    const potentialArrowAt = this.state.potentialArrowAt;
+    const expr = this.parseMaybeUnaryOrPrivate(refExpressionErrors);
+    if (this.shouldExitDescending(expr, potentialArrowAt)) {
+      return expr;
+    }
+    return this.parseExprOp(expr, startLoc, -1);
+  }
+  parseExprOp(left, leftStartLoc, minPrec) {
+    if (this.isPrivateName(left)) {
+      const value = this.getPrivateNameSV(left);
+      if (minPrec >= (0, _types.tokenOperatorPrecedence)(58) || !this.prodParam.hasIn || !this.match(58)) {
+        this.raise(_parseError.Errors.PrivateInExpectedIn, {
+          at: left,
+          identifierName: value
+        });
+      }
+      this.classScope.usePrivateName(value, left.loc.start);
+    }
+    const op = this.state.type;
+    if ((0, _types.tokenIsOperator)(op) && (this.prodParam.hasIn || !this.match(58))) {
+      let prec = (0, _types.tokenOperatorPrecedence)(op);
+      if (prec > minPrec) {
+        if (op === 39) {
+          this.expectPlugin("pipelineOperator");
+          if (this.state.inFSharpPipelineDirectBody) {
+            return left;
+          }
+          this.checkPipelineAtInfixOperator(left, leftStartLoc);
+        }
+        const node = this.startNodeAt(leftStartLoc);
+        node.left = left;
+        node.operator = this.state.value;
+        const logical = op === 41 || op === 42;
+        const coalesce = op === 40;
+        if (coalesce) {
+          prec = (0, _types.tokenOperatorPrecedence)(42);
+        }
+        this.next();
+        if (op === 39 && this.hasPlugin(["pipelineOperator", {
+          proposal: "minimal"
+        }])) {
+          if (this.state.type === 96 && this.prodParam.hasAwait) {
+            throw this.raise(_parseError.Errors.UnexpectedAwaitAfterPipelineBody, {
+              at: this.state.startLoc
+            });
+          }
+        }
+        node.right = this.parseExprOpRightExpr(op, prec);
+        const finishedNode = this.finishNode(node, logical || coalesce ? "LogicalExpression" : "BinaryExpression");
+        const nextOp = this.state.type;
+        if (coalesce && (nextOp === 41 || nextOp === 42) || logical && nextOp === 40) {
+          throw this.raise(_parseError.Errors.MixingCoalesceWithLogical, {
+            at: this.state.startLoc
+          });
+        }
+        return this.parseExprOp(finishedNode, leftStartLoc, minPrec);
+      }
+    }
+    return left;
+  }
+  parseExprOpRightExpr(op, prec) {
+    const startLoc = this.state.startLoc;
+    switch (op) {
+      case 39:
+        switch (this.getPluginOption("pipelineOperator", "proposal")) {
+          case "hack":
+            return this.withTopicBindingContext(() => {
+              return this.parseHackPipeBody();
+            });
+          case "smart":
+            return this.withTopicBindingContext(() => {
+              if (this.prodParam.hasYield && this.isContextual(106)) {
+                throw this.raise(_parseError.Errors.PipeBodyIsTighter, {
+                  at: this.state.startLoc
+                });
+              }
+              return this.parseSmartPipelineBodyInStyle(this.parseExprOpBaseRightExpr(op, prec), startLoc);
+            });
+          case "fsharp":
+            return this.withSoloAwaitPermittingContext(() => {
+              return this.parseFSharpPipelineBody(prec);
+            });
+        }
+      default:
+        return this.parseExprOpBaseRightExpr(op, prec);
+    }
+  }
+  parseExprOpBaseRightExpr(op, prec) {
+    const startLoc = this.state.startLoc;
+    return this.parseExprOp(this.parseMaybeUnaryOrPrivate(), startLoc, (0, _types.tokenIsRightAssociative)(op) ? prec - 1 : prec);
+  }
+  parseHackPipeBody() {
+    var _body$extra;
+    const {
+      startLoc
+    } = this.state;
+    const body = this.parseMaybeAssign();
+    const requiredParentheses = _pipelineOperatorErrors.UnparenthesizedPipeBodyDescriptions.has(body.type);
+    if (requiredParentheses && !((_body$extra = body.extra) != null && _body$extra.parenthesized)) {
+      this.raise(_parseError.Errors.PipeUnparenthesizedBody, {
+        at: startLoc,
+        type: body.type
+      });
+    }
+    if (!this.topicReferenceWasUsedInCurrentContext()) {
+      this.raise(_parseError.Errors.PipeTopicUnused, {
+        at: startLoc
+      });
+    }
+    return body;
+  }
+  checkExponentialAfterUnary(node) {
+    if (this.match(57)) {
+      this.raise(_parseError.Errors.UnexpectedTokenUnaryExponentiation, {
+        at: node.argument
+      });
+    }
+  }
+  parseMaybeUnary(refExpressionErrors, sawUnary) {
+    const startLoc = this.state.startLoc;
+    const isAwait = this.isContextual(96);
+    if (isAwait && this.isAwaitAllowed()) {
+      this.next();
+      const expr = this.parseAwait(startLoc);
+      if (!sawUnary) this.checkExponentialAfterUnary(expr);
+      return expr;
+    }
+    const update = this.match(34);
+    const node = this.startNode();
+    if ((0, _types.tokenIsPrefix)(this.state.type)) {
+      node.operator = this.state.value;
+      node.prefix = true;
+      if (this.match(72)) {
+        this.expectPlugin("throwExpressions");
+      }
+      const isDelete = this.match(89);
+      this.next();
+      node.argument = this.parseMaybeUnary(null, true);
+      this.checkExpressionErrors(refExpressionErrors, true);
+      if (this.state.strict && isDelete) {
+        const arg = node.argument;
+        if (arg.type === "Identifier") {
+          this.raise(_parseError.Errors.StrictDelete, {
+            at: node
+          });
+        } else if (this.hasPropertyAsPrivateName(arg)) {
+          this.raise(_parseError.Errors.DeletePrivateField, {
+            at: node
+          });
+        }
+      }
+      if (!update) {
+        if (!sawUnary) {
+          this.checkExponentialAfterUnary(node);
+        }
+        return this.finishNode(node, "UnaryExpression");
+      }
+    }
+    const expr = this.parseUpdate(node, update, refExpressionErrors);
+    if (isAwait) {
+      const {
+        type
+      } = this.state;
+      const startsExpr = this.hasPlugin("v8intrinsic") ? (0, _types.tokenCanStartExpression)(type) : (0, _types.tokenCanStartExpression)(type) && !this.match(54);
+      if (startsExpr && !this.isAmbiguousAwait()) {
+        this.raiseOverwrite(_parseError.Errors.AwaitNotInAsyncContext, {
+          at: startLoc
+        });
+        return this.parseAwait(startLoc);
+      }
+    }
+    return expr;
+  }
+  parseUpdate(node, update, refExpressionErrors) {
+    if (update) {
+      const updateExpressionNode = node;
+      this.checkLVal(updateExpressionNode.argument, {
+        in: this.finishNode(updateExpressionNode, "UpdateExpression")
+      });
+      return node;
+    }
+    const startLoc = this.state.startLoc;
+    let expr = this.parseExprSubscripts(refExpressionErrors);
+    if (this.checkExpressionErrors(refExpressionErrors, false)) return expr;
+    while ((0, _types.tokenIsPostfix)(this.state.type) && !this.canInsertSemicolon()) {
+      const node = this.startNodeAt(startLoc);
+      node.operator = this.state.value;
+      node.prefix = false;
+      node.argument = expr;
+      this.next();
+      this.checkLVal(expr, {
+        in: expr = this.finishNode(node, "UpdateExpression")
+      });
+    }
+    return expr;
+  }
+  parseExprSubscripts(refExpressionErrors) {
+    const startLoc = this.state.startLoc;
+    const potentialArrowAt = this.state.potentialArrowAt;
+    const expr = this.parseExprAtom(refExpressionErrors);
+    if (this.shouldExitDescending(expr, potentialArrowAt)) {
+      return expr;
+    }
+    return this.parseSubscripts(expr, startLoc);
+  }
+  parseSubscripts(base, startLoc, noCalls) {
+    const state = {
+      optionalChainMember: false,
+      maybeAsyncArrow: this.atPossibleAsyncArrow(base),
+      stop: false
+    };
+    do {
+      base = this.parseSubscript(base, startLoc, noCalls, state);
+      state.maybeAsyncArrow = false;
+    } while (!state.stop);
+    return base;
+  }
+  parseSubscript(base, startLoc, noCalls, state) {
+    const {
+      type
+    } = this.state;
+    if (!noCalls && type === 15) {
+      return this.parseBind(base, startLoc, noCalls, state);
+    } else if ((0, _types.tokenIsTemplate)(type)) {
+      return this.parseTaggedTemplateExpression(base, startLoc, state);
+    }
+    let optional = false;
+    if (type === 18) {
+      if (noCalls) {
+        this.raise(_parseError.Errors.OptionalChainingNoNew, {
+          at: this.state.startLoc
+        });
+        if (this.lookaheadCharCode() === 40) {
+          state.stop = true;
+          return base;
+        }
+      }
+      state.optionalChainMember = optional = true;
+      this.next();
+    }
+    if (!noCalls && this.match(10)) {
+      return this.parseCoverCallAndAsyncArrowHead(base, startLoc, state, optional);
+    } else {
+      const computed = this.eat(0);
+      if (computed || optional || this.eat(16)) {
+        return this.parseMember(base, startLoc, state, computed, optional);
+      } else {
+        state.stop = true;
+        return base;
+      }
+    }
+  }
+  parseMember(base, startLoc, state, computed, optional) {
+    const node = this.startNodeAt(startLoc);
+    node.object = base;
+    node.computed = computed;
+    if (computed) {
+      node.property = this.parseExpression();
+      this.expect(3);
+    } else if (this.match(136)) {
+      if (base.type === "Super") {
+        this.raise(_parseError.Errors.SuperPrivateField, {
+          at: startLoc
+        });
+      }
+      this.classScope.usePrivateName(this.state.value, this.state.startLoc);
+      node.property = this.parsePrivateName();
+    } else {
+      node.property = this.parseIdentifier(true);
+    }
+    if (state.optionalChainMember) {
+      node.optional = optional;
+      return this.finishNode(node, "OptionalMemberExpression");
+    } else {
+      return this.finishNode(node, "MemberExpression");
+    }
+  }
+  parseBind(base, startLoc, noCalls, state) {
+    const node = this.startNodeAt(startLoc);
+    node.object = base;
+    this.next();
+    node.callee = this.parseNoCallExpr();
+    state.stop = true;
+    return this.parseSubscripts(this.finishNode(node, "BindExpression"), startLoc, noCalls);
+  }
+  parseCoverCallAndAsyncArrowHead(base, startLoc, state, optional) {
+    const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;
+    let refExpressionErrors = null;
+    this.state.maybeInArrowParameters = true;
+    this.next();
+    const node = this.startNodeAt(startLoc);
+    node.callee = base;
+    const {
+      maybeAsyncArrow,
+      optionalChainMember
+    } = state;
+    if (maybeAsyncArrow) {
+      this.expressionScope.enter((0, _expressionScope.newAsyncArrowScope)());
+      refExpressionErrors = new _util.ExpressionErrors();
+    }
+    if (optionalChainMember) {
+      node.optional = optional;
+    }
+    if (optional) {
+      node.arguments = this.parseCallExpressionArguments(11);
+    } else {
+      node.arguments = this.parseCallExpressionArguments(11, base.type === "Import", base.type !== "Super", node, refExpressionErrors);
+    }
+    let finishedNode = this.finishCallExpression(node, optionalChainMember);
+    if (maybeAsyncArrow && this.shouldParseAsyncArrow() && !optional) {
+      state.stop = true;
+      this.checkDestructuringPrivate(refExpressionErrors);
+      this.expressionScope.validateAsPattern();
+      this.expressionScope.exit();
+      finishedNode = this.parseAsyncArrowFromCallExpression(this.startNodeAt(startLoc), finishedNode);
+    } else {
+      if (maybeAsyncArrow) {
+        this.checkExpressionErrors(refExpressionErrors, true);
+        this.expressionScope.exit();
+      }
+      this.toReferencedArguments(finishedNode);
+    }
+    this.state.maybeInArrowParameters = oldMaybeInArrowParameters;
+    return finishedNode;
+  }
+  toReferencedArguments(node, isParenthesizedExpr) {
+    this.toReferencedListDeep(node.arguments, isParenthesizedExpr);
+  }
+  parseTaggedTemplateExpression(base, startLoc, state) {
+    const node = this.startNodeAt(startLoc);
+    node.tag = base;
+    node.quasi = this.parseTemplate(true);
+    if (state.optionalChainMember) {
+      this.raise(_parseError.Errors.OptionalChainingNoTemplate, {
+        at: startLoc
+      });
+    }
+    return this.finishNode(node, "TaggedTemplateExpression");
+  }
+  atPossibleAsyncArrow(base) {
+    return base.type === "Identifier" && base.name === "async" && this.state.lastTokEndLoc.index === base.end && !this.canInsertSemicolon() && base.end - base.start === 5 && base.start === this.state.potentialArrowAt;
+  }
+  expectImportAttributesPlugin() {
+    if (!this.hasPlugin("importAssertions")) {
+      this.expectPlugin("importAttributes");
+    }
+  }
+  finishCallExpression(node, optional) {
+    if (node.callee.type === "Import") {
+      if (node.arguments.length === 2) {
+        {
+          if (!this.hasPlugin("moduleAttributes")) {
+            this.expectImportAttributesPlugin();
+          }
+        }
+      }
+      if (node.arguments.length === 0 || node.arguments.length > 2) {
+        this.raise(_parseError.Errors.ImportCallArity, {
+          at: node,
+          maxArgumentCount: this.hasPlugin("importAttributes") || this.hasPlugin("importAssertions") || this.hasPlugin("moduleAttributes") ? 2 : 1
+        });
+      } else {
+        for (const arg of node.arguments) {
+          if (arg.type === "SpreadElement") {
+            this.raise(_parseError.Errors.ImportCallSpreadArgument, {
+              at: arg
+            });
+          }
+        }
+      }
+    }
+    return this.finishNode(node, optional ? "OptionalCallExpression" : "CallExpression");
+  }
+  parseCallExpressionArguments(close, dynamicImport, allowPlaceholder, nodeForExtra, refExpressionErrors) {
+    const elts = [];
+    let first = true;
+    const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;
+    this.state.inFSharpPipelineDirectBody = false;
+    while (!this.eat(close)) {
+      if (first) {
+        first = false;
+      } else {
+        this.expect(12);
+        if (this.match(close)) {
+          if (dynamicImport && !this.hasPlugin("importAttributes") && !this.hasPlugin("importAssertions") && !this.hasPlugin("moduleAttributes")) {
+            this.raise(_parseError.Errors.ImportCallArgumentTrailingComma, {
+              at: this.state.lastTokStartLoc
+            });
+          }
+          if (nodeForExtra) {
+            this.addTrailingCommaExtraToNode(nodeForExtra);
+          }
+          this.next();
+          break;
+        }
+      }
+      elts.push(this.parseExprListItem(false, refExpressionErrors, allowPlaceholder));
+    }
+    this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;
+    return elts;
+  }
+  shouldParseAsyncArrow() {
+    return this.match(19) && !this.canInsertSemicolon();
+  }
+  parseAsyncArrowFromCallExpression(node, call) {
+    var _call$extra;
+    this.resetPreviousNodeTrailingComments(call);
+    this.expect(19);
+    this.parseArrowExpression(node, call.arguments, true, (_call$extra = call.extra) == null ? void 0 : _call$extra.trailingCommaLoc);
+    if (call.innerComments) {
+      (0, _comments.setInnerComments)(node, call.innerComments);
+    }
+    if (call.callee.trailingComments) {
+      (0, _comments.setInnerComments)(node, call.callee.trailingComments);
+    }
+    return node;
+  }
+  parseNoCallExpr() {
+    const startLoc = this.state.startLoc;
+    return this.parseSubscripts(this.parseExprAtom(), startLoc, true);
+  }
+  parseExprAtom(refExpressionErrors) {
+    let node;
+    let decorators = null;
+    const {
+      type
+    } = this.state;
+    switch (type) {
+      case 79:
+        return this.parseSuper();
+      case 83:
+        node = this.startNode();
+        this.next();
+        if (this.match(16)) {
+          return this.parseImportMetaProperty(node);
+        }
+        if (!this.match(10)) {
+          this.raise(_parseError.Errors.UnsupportedImport, {
+            at: this.state.lastTokStartLoc
+          });
+        }
+        return this.finishNode(node, "Import");
+      case 78:
+        node = this.startNode();
+        this.next();
+        return this.finishNode(node, "ThisExpression");
+      case 90:
+        {
+          return this.parseDo(this.startNode(), false);
+        }
+      case 56:
+      case 31:
+        {
+          this.readRegexp();
+          return this.parseRegExpLiteral(this.state.value);
+        }
+      case 132:
+        return this.parseNumericLiteral(this.state.value);
+      case 133:
+        return this.parseBigIntLiteral(this.state.value);
+      case 134:
+        return this.parseDecimalLiteral(this.state.value);
+      case 131:
+        return this.parseStringLiteral(this.state.value);
+      case 84:
+        return this.parseNullLiteral();
+      case 85:
+        return this.parseBooleanLiteral(true);
+      case 86:
+        return this.parseBooleanLiteral(false);
+      case 10:
+        {
+          const canBeArrow = this.state.potentialArrowAt === this.state.start;
+          return this.parseParenAndDistinguishExpression(canBeArrow);
+        }
+      case 2:
+      case 1:
+        {
+          return this.parseArrayLike(this.state.type === 2 ? 4 : 3, false, true);
+        }
+      case 0:
+        {
+          return this.parseArrayLike(3, true, false, refExpressionErrors);
+        }
+      case 6:
+      case 7:
+        {
+          return this.parseObjectLike(this.state.type === 6 ? 9 : 8, false, true);
+        }
+      case 5:
+        {
+          return this.parseObjectLike(8, false, false, refExpressionErrors);
+        }
+      case 68:
+        return this.parseFunctionOrFunctionSent();
+      case 26:
+        decorators = this.parseDecorators();
+      case 80:
+        return this.parseClass(this.maybeTakeDecorators(decorators, this.startNode()), false);
+      case 77:
+        return this.parseNewOrNewTarget();
+      case 25:
+      case 24:
+        return this.parseTemplate(false);
+      case 15:
+        {
+          node = this.startNode();
+          this.next();
+          node.object = null;
+          const callee = node.callee = this.parseNoCallExpr();
+          if (callee.type === "MemberExpression") {
+            return this.finishNode(node, "BindExpression");
+          } else {
+            throw this.raise(_parseError.Errors.UnsupportedBind, {
+              at: callee
+            });
+          }
+        }
+      case 136:
+        {
+          this.raise(_parseError.Errors.PrivateInExpectedIn, {
+            at: this.state.startLoc,
+            identifierName: this.state.value
+          });
+          return this.parsePrivateName();
+        }
+      case 33:
+        {
+          return this.parseTopicReferenceThenEqualsSign(54, "%");
+        }
+      case 32:
+        {
+          return this.parseTopicReferenceThenEqualsSign(44, "^");
+        }
+      case 37:
+      case 38:
+        {
+          return this.parseTopicReference("hack");
+        }
+      case 44:
+      case 54:
+      case 27:
+        {
+          const pipeProposal = this.getPluginOption("pipelineOperator", "proposal");
+          if (pipeProposal) {
+            return this.parseTopicReference(pipeProposal);
+          }
+          this.unexpected();
+          break;
+        }
+      case 47:
+        {
+          const lookaheadCh = this.input.codePointAt(this.nextTokenStart());
+          if ((0, _identifier.isIdentifierStart)(lookaheadCh) || lookaheadCh === 62) {
+            this.expectOnePlugin(["jsx", "flow", "typescript"]);
+          } else {
+            this.unexpected();
+          }
+          break;
+        }
+      default:
+        if ((0, _types.tokenIsIdentifier)(type)) {
+          if (this.isContextual(125) && this.lookaheadInLineCharCode() === 123) {
+            return this.parseModuleExpression();
+          }
+          const canBeArrow = this.state.potentialArrowAt === this.state.start;
+          const containsEsc = this.state.containsEsc;
+          const id = this.parseIdentifier();
+          if (!containsEsc && id.name === "async" && !this.canInsertSemicolon()) {
+            const {
+              type
+            } = this.state;
+            if (type === 68) {
+              this.resetPreviousNodeTrailingComments(id);
+              this.next();
+              return this.parseAsyncFunctionExpression(this.startNodeAtNode(id));
+            } else if ((0, _types.tokenIsIdentifier)(type)) {
+              if (this.lookaheadCharCode() === 61) {
+                return this.parseAsyncArrowUnaryFunction(this.startNodeAtNode(id));
+              } else {
+                return id;
+              }
+            } else if (type === 90) {
+              this.resetPreviousNodeTrailingComments(id);
+              return this.parseDo(this.startNodeAtNode(id), true);
+            }
+          }
+          if (canBeArrow && this.match(19) && !this.canInsertSemicolon()) {
+            this.next();
+            return this.parseArrowExpression(this.startNodeAtNode(id), [id], false);
+          }
+          return id;
+        } else {
+          this.unexpected();
+        }
+    }
+  }
+  parseTopicReferenceThenEqualsSign(topicTokenType, topicTokenValue) {
+    const pipeProposal = this.getPluginOption("pipelineOperator", "proposal");
+    if (pipeProposal) {
+      this.state.type = topicTokenType;
+      this.state.value = topicTokenValue;
+      this.state.pos--;
+      this.state.end--;
+      this.state.endLoc = (0, _location.createPositionWithColumnOffset)(this.state.endLoc, -1);
+      return this.parseTopicReference(pipeProposal);
+    } else {
+      this.unexpected();
+    }
+  }
+  parseTopicReference(pipeProposal) {
+    const node = this.startNode();
+    const startLoc = this.state.startLoc;
+    const tokenType = this.state.type;
+    this.next();
+    return this.finishTopicReference(node, startLoc, pipeProposal, tokenType);
+  }
+  finishTopicReference(node, startLoc, pipeProposal, tokenType) {
+    if (this.testTopicReferenceConfiguration(pipeProposal, startLoc, tokenType)) {
+      const nodeType = pipeProposal === "smart" ? "PipelinePrimaryTopicReference" : "TopicReference";
+      if (!this.topicReferenceIsAllowedInCurrentContext()) {
+        this.raise(pipeProposal === "smart" ? _parseError.Errors.PrimaryTopicNotAllowed : _parseError.Errors.PipeTopicUnbound, {
+          at: startLoc
+        });
+      }
+      this.registerTopicReference();
+      return this.finishNode(node, nodeType);
+    } else {
+      throw this.raise(_parseError.Errors.PipeTopicUnconfiguredToken, {
+        at: startLoc,
+        token: (0, _types.tokenLabelName)(tokenType)
+      });
+    }
+  }
+  testTopicReferenceConfiguration(pipeProposal, startLoc, tokenType) {
+    switch (pipeProposal) {
+      case "hack":
+        {
+          return this.hasPlugin(["pipelineOperator", {
+            topicToken: (0, _types.tokenLabelName)(tokenType)
+          }]);
+        }
+      case "smart":
+        return tokenType === 27;
+      default:
+        throw this.raise(_parseError.Errors.PipeTopicRequiresHackPipes, {
+          at: startLoc
+        });
+    }
+  }
+  parseAsyncArrowUnaryFunction(node) {
+    this.prodParam.enter((0, _productionParameter.functionFlags)(true, this.prodParam.hasYield));
+    const params = [this.parseIdentifier()];
+    this.prodParam.exit();
+    if (this.hasPrecedingLineBreak()) {
+      this.raise(_parseError.Errors.LineTerminatorBeforeArrow, {
+        at: this.state.curPosition()
+      });
+    }
+    this.expect(19);
+    return this.parseArrowExpression(node, params, true);
+  }
+  parseDo(node, isAsync) {
+    this.expectPlugin("doExpressions");
+    if (isAsync) {
+      this.expectPlugin("asyncDoExpressions");
+    }
+    node.async = isAsync;
+    this.next();
+    const oldLabels = this.state.labels;
+    this.state.labels = [];
+    if (isAsync) {
+      this.prodParam.enter(_productionParameter.PARAM_AWAIT);
+      node.body = this.parseBlock();
+      this.prodParam.exit();
+    } else {
+      node.body = this.parseBlock();
+    }
+    this.state.labels = oldLabels;
+    return this.finishNode(node, "DoExpression");
+  }
+  parseSuper() {
+    const node = this.startNode();
+    this.next();
+    if (this.match(10) && !this.scope.allowDirectSuper && !this.options.allowSuperOutsideMethod) {
+      this.raise(_parseError.Errors.SuperNotAllowed, {
+        at: node
+      });
+    } else if (!this.scope.allowSuper && !this.options.allowSuperOutsideMethod) {
+      this.raise(_parseError.Errors.UnexpectedSuper, {
+        at: node
+      });
+    }
+    if (!this.match(10) && !this.match(0) && !this.match(16)) {
+      this.raise(_parseError.Errors.UnsupportedSuper, {
+        at: node
+      });
+    }
+    return this.finishNode(node, "Super");
+  }
+  parsePrivateName() {
+    const node = this.startNode();
+    const id = this.startNodeAt((0, _location.createPositionWithColumnOffset)(this.state.startLoc, 1));
+    const name = this.state.value;
+    this.next();
+    node.id = this.createIdentifier(id, name);
+    return this.finishNode(node, "PrivateName");
+  }
+  parseFunctionOrFunctionSent() {
+    const node = this.startNode();
+    this.next();
+    if (this.prodParam.hasYield && this.match(16)) {
+      const meta = this.createIdentifier(this.startNodeAtNode(node), "function");
+      this.next();
+      if (this.match(102)) {
+        this.expectPlugin("functionSent");
+      } else if (!this.hasPlugin("functionSent")) {
+        this.unexpected();
+      }
+      return this.parseMetaProperty(node, meta, "sent");
+    }
+    return this.parseFunction(node);
+  }
+  parseMetaProperty(node, meta, propertyName) {
+    node.meta = meta;
+    const containsEsc = this.state.containsEsc;
+    node.property = this.parseIdentifier(true);
+    if (node.property.name !== propertyName || containsEsc) {
+      this.raise(_parseError.Errors.UnsupportedMetaProperty, {
+        at: node.property,
+        target: meta.name,
+        onlyValidPropertyName: propertyName
+      });
+    }
+    return this.finishNode(node, "MetaProperty");
+  }
+  parseImportMetaProperty(node) {
+    const id = this.createIdentifier(this.startNodeAtNode(node), "import");
+    this.next();
+    if (this.isContextual(100)) {
+      if (!this.inModule) {
+        this.raise(_parseError.Errors.ImportMetaOutsideModule, {
+          at: id
+        });
+      }
+      this.sawUnambiguousESM = true;
+    }
+    return this.parseMetaProperty(node, id, "meta");
+  }
+  parseLiteralAtNode(value, type, node) {
+    this.addExtra(node, "rawValue", value);
+    this.addExtra(node, "raw", this.input.slice(node.start, this.state.end));
+    node.value = value;
+    this.next();
+    return this.finishNode(node, type);
+  }
+  parseLiteral(value, type) {
+    const node = this.startNode();
+    return this.parseLiteralAtNode(value, type, node);
+  }
+  parseStringLiteral(value) {
+    return this.parseLiteral(value, "StringLiteral");
+  }
+  parseNumericLiteral(value) {
+    return this.parseLiteral(value, "NumericLiteral");
+  }
+  parseBigIntLiteral(value) {
+    return this.parseLiteral(value, "BigIntLiteral");
+  }
+  parseDecimalLiteral(value) {
+    return this.parseLiteral(value, "DecimalLiteral");
+  }
+  parseRegExpLiteral(value) {
+    const node = this.parseLiteral(value.value, "RegExpLiteral");
+    node.pattern = value.pattern;
+    node.flags = value.flags;
+    return node;
+  }
+  parseBooleanLiteral(value) {
+    const node = this.startNode();
+    node.value = value;
+    this.next();
+    return this.finishNode(node, "BooleanLiteral");
+  }
+  parseNullLiteral() {
+    const node = this.startNode();
+    this.next();
+    return this.finishNode(node, "NullLiteral");
+  }
+  parseParenAndDistinguishExpression(canBeArrow) {
+    const startLoc = this.state.startLoc;
+    let val;
+    this.next();
+    this.expressionScope.enter((0, _expressionScope.newArrowHeadScope)());
+    const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;
+    const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;
+    this.state.maybeInArrowParameters = true;
+    this.state.inFSharpPipelineDirectBody = false;
+    const innerStartLoc = this.state.startLoc;
+    const exprList = [];
+    const refExpressionErrors = new _util.ExpressionErrors();
+    let first = true;
+    let spreadStartLoc;
+    let optionalCommaStartLoc;
+    while (!this.match(11)) {
+      if (first) {
+        first = false;
+      } else {
+        this.expect(12, refExpressionErrors.optionalParametersLoc === null ? null : refExpressionErrors.optionalParametersLoc);
+        if (this.match(11)) {
+          optionalCommaStartLoc = this.state.startLoc;
+          break;
+        }
+      }
+      if (this.match(21)) {
+        const spreadNodeStartLoc = this.state.startLoc;
+        spreadStartLoc = this.state.startLoc;
+        exprList.push(this.parseParenItem(this.parseRestBinding(), spreadNodeStartLoc));
+        if (!this.checkCommaAfterRest(41)) {
+          break;
+        }
+      } else {
+        exprList.push(this.parseMaybeAssignAllowIn(refExpressionErrors, this.parseParenItem));
+      }
+    }
+    const innerEndLoc = this.state.lastTokEndLoc;
+    this.expect(11);
+    this.state.maybeInArrowParameters = oldMaybeInArrowParameters;
+    this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;
+    let arrowNode = this.startNodeAt(startLoc);
+    if (canBeArrow && this.shouldParseArrow(exprList) && (arrowNode = this.parseArrow(arrowNode))) {
+      this.checkDestructuringPrivate(refExpressionErrors);
+      this.expressionScope.validateAsPattern();
+      this.expressionScope.exit();
+      this.parseArrowExpression(arrowNode, exprList, false);
+      return arrowNode;
+    }
+    this.expressionScope.exit();
+    if (!exprList.length) {
+      this.unexpected(this.state.lastTokStartLoc);
+    }
+    if (optionalCommaStartLoc) this.unexpected(optionalCommaStartLoc);
+    if (spreadStartLoc) this.unexpected(spreadStartLoc);
+    this.checkExpressionErrors(refExpressionErrors, true);
+    this.toReferencedListDeep(exprList, true);
+    if (exprList.length > 1) {
+      val = this.startNodeAt(innerStartLoc);
+      val.expressions = exprList;
+      this.finishNode(val, "SequenceExpression");
+      this.resetEndLocation(val, innerEndLoc);
+    } else {
+      val = exprList[0];
+    }
+    return this.wrapParenthesis(startLoc, val);
+  }
+  wrapParenthesis(startLoc, expression) {
+    if (!this.options.createParenthesizedExpressions) {
+      this.addExtra(expression, "parenthesized", true);
+      this.addExtra(expression, "parenStart", startLoc.index);
+      this.takeSurroundingComments(expression, startLoc.index, this.state.lastTokEndLoc.index);
+      return expression;
+    }
+    const parenExpression = this.startNodeAt(startLoc);
+    parenExpression.expression = expression;
+    return this.finishNode(parenExpression, "ParenthesizedExpression");
+  }
+  shouldParseArrow(params) {
+    return !this.canInsertSemicolon();
+  }
+  parseArrow(node) {
+    if (this.eat(19)) {
+      return node;
+    }
+  }
+  parseParenItem(node, startLoc) {
+    return node;
+  }
+  parseNewOrNewTarget() {
+    const node = this.startNode();
+    this.next();
+    if (this.match(16)) {
+      const meta = this.createIdentifier(this.startNodeAtNode(node), "new");
+      this.next();
+      const metaProp = this.parseMetaProperty(node, meta, "target");
+      if (!this.scope.inNonArrowFunction && !this.scope.inClass && !this.options.allowNewTargetOutsideFunction) {
+        this.raise(_parseError.Errors.UnexpectedNewTarget, {
+          at: metaProp
+        });
+      }
+      return metaProp;
+    }
+    return this.parseNew(node);
+  }
+  parseNew(node) {
+    this.parseNewCallee(node);
+    if (this.eat(10)) {
+      const args = this.parseExprList(11);
+      this.toReferencedList(args);
+      node.arguments = args;
+    } else {
+      node.arguments = [];
+    }
+    return this.finishNode(node, "NewExpression");
+  }
+  parseNewCallee(node) {
+    node.callee = this.parseNoCallExpr();
+    if (node.callee.type === "Import") {
+      this.raise(_parseError.Errors.ImportCallNotNewExpression, {
+        at: node.callee
+      });
+    }
+  }
+  parseTemplateElement(isTagged) {
+    const {
+      start,
+      startLoc,
+      end,
+      value
+    } = this.state;
+    const elemStart = start + 1;
+    const elem = this.startNodeAt((0, _location.createPositionWithColumnOffset)(startLoc, 1));
+    if (value === null) {
+      if (!isTagged) {
+        this.raise(_parseError.Errors.InvalidEscapeSequenceTemplate, {
+          at: (0, _location.createPositionWithColumnOffset)(this.state.firstInvalidTemplateEscapePos, 1)
+        });
+      }
+    }
+    const isTail = this.match(24);
+    const endOffset = isTail ? -1 : -2;
+    const elemEnd = end + endOffset;
+    elem.value = {
+      raw: this.input.slice(elemStart, elemEnd).replace(/\r\n?/g, "\n"),
+      cooked: value === null ? null : value.slice(1, endOffset)
+    };
+    elem.tail = isTail;
+    this.next();
+    const finishedNode = this.finishNode(elem, "TemplateElement");
+    this.resetEndLocation(finishedNode, (0, _location.createPositionWithColumnOffset)(this.state.lastTokEndLoc, endOffset));
+    return finishedNode;
+  }
+  parseTemplate(isTagged) {
+    const node = this.startNode();
+    node.expressions = [];
+    let curElt = this.parseTemplateElement(isTagged);
+    node.quasis = [curElt];
+    while (!curElt.tail) {
+      node.expressions.push(this.parseTemplateSubstitution());
+      this.readTemplateContinuation();
+      node.quasis.push(curElt = this.parseTemplateElement(isTagged));
+    }
+    return this.finishNode(node, "TemplateLiteral");
+  }
+  parseTemplateSubstitution() {
+    return this.parseExpression();
+  }
+  parseObjectLike(close, isPattern, isRecord, refExpressionErrors) {
+    if (isRecord) {
+      this.expectPlugin("recordAndTuple");
+    }
+    const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;
+    this.state.inFSharpPipelineDirectBody = false;
+    const propHash = Object.create(null);
+    let first = true;
+    const node = this.startNode();
+    node.properties = [];
+    this.next();
+    while (!this.match(close)) {
+      if (first) {
+        first = false;
+      } else {
+        this.expect(12);
+        if (this.match(close)) {
+          this.addTrailingCommaExtraToNode(node);
+          break;
+        }
+      }
+      let prop;
+      if (isPattern) {
+        prop = this.parseBindingProperty();
+      } else {
+        prop = this.parsePropertyDefinition(refExpressionErrors);
+        this.checkProto(prop, isRecord, propHash, refExpressionErrors);
+      }
+      if (isRecord && !this.isObjectProperty(prop) && prop.type !== "SpreadElement") {
+        this.raise(_parseError.Errors.InvalidRecordProperty, {
+          at: prop
+        });
+      }
+      if (prop.shorthand) {
+        this.addExtra(prop, "shorthand", true);
+      }
+      node.properties.push(prop);
+    }
+    this.next();
+    this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;
+    let type = "ObjectExpression";
+    if (isPattern) {
+      type = "ObjectPattern";
+    } else if (isRecord) {
+      type = "RecordExpression";
+    }
+    return this.finishNode(node, type);
+  }
+  addTrailingCommaExtraToNode(node) {
+    this.addExtra(node, "trailingComma", this.state.lastTokStart);
+    this.addExtra(node, "trailingCommaLoc", this.state.lastTokStartLoc, false);
+  }
+  maybeAsyncOrAccessorProp(prop) {
+    return !prop.computed && prop.key.type === "Identifier" && (this.isLiteralPropertyName() || this.match(0) || this.match(55));
+  }
+  parsePropertyDefinition(refExpressionErrors) {
+    let decorators = [];
+    if (this.match(26)) {
+      if (this.hasPlugin("decorators")) {
+        this.raise(_parseError.Errors.UnsupportedPropertyDecorator, {
+          at: this.state.startLoc
+        });
+      }
+      while (this.match(26)) {
+        decorators.push(this.parseDecorator());
+      }
+    }
+    const prop = this.startNode();
+    let isAsync = false;
+    let isAccessor = false;
+    let startLoc;
+    if (this.match(21)) {
+      if (decorators.length) this.unexpected();
+      return this.parseSpread();
+    }
+    if (decorators.length) {
+      prop.decorators = decorators;
+      decorators = [];
+    }
+    prop.method = false;
+    if (refExpressionErrors) {
+      startLoc = this.state.startLoc;
+    }
+    let isGenerator = this.eat(55);
+    this.parsePropertyNamePrefixOperator(prop);
+    const containsEsc = this.state.containsEsc;
+    const key = this.parsePropertyName(prop, refExpressionErrors);
+    if (!isGenerator && !containsEsc && this.maybeAsyncOrAccessorProp(prop)) {
+      const keyName = key.name;
+      if (keyName === "async" && !this.hasPrecedingLineBreak()) {
+        isAsync = true;
+        this.resetPreviousNodeTrailingComments(key);
+        isGenerator = this.eat(55);
+        this.parsePropertyName(prop);
+      }
+      if (keyName === "get" || keyName === "set") {
+        isAccessor = true;
+        this.resetPreviousNodeTrailingComments(key);
+        prop.kind = keyName;
+        if (this.match(55)) {
+          isGenerator = true;
+          this.raise(_parseError.Errors.AccessorIsGenerator, {
+            at: this.state.curPosition(),
+            kind: keyName
+          });
+          this.next();
+        }
+        this.parsePropertyName(prop);
+      }
+    }
+    return this.parseObjPropValue(prop, startLoc, isGenerator, isAsync, false, isAccessor, refExpressionErrors);
+  }
+  getGetterSetterExpectedParamCount(method) {
+    return method.kind === "get" ? 0 : 1;
+  }
+  getObjectOrClassMethodParams(method) {
+    return method.params;
+  }
+  checkGetterSetterParams(method) {
+    var _params;
+    const paramCount = this.getGetterSetterExpectedParamCount(method);
+    const params = this.getObjectOrClassMethodParams(method);
+    if (params.length !== paramCount) {
+      this.raise(method.kind === "get" ? _parseError.Errors.BadGetterArity : _parseError.Errors.BadSetterArity, {
+        at: method
+      });
+    }
+    if (method.kind === "set" && ((_params = params[params.length - 1]) == null ? void 0 : _params.type) === "RestElement") {
+      this.raise(_parseError.Errors.BadSetterRestParameter, {
+        at: method
+      });
+    }
+  }
+  parseObjectMethod(prop, isGenerator, isAsync, isPattern, isAccessor) {
+    if (isAccessor) {
+      const finishedProp = this.parseMethod(prop, isGenerator, false, false, false, "ObjectMethod");
+      this.checkGetterSetterParams(finishedProp);
+      return finishedProp;
+    }
+    if (isAsync || isGenerator || this.match(10)) {
+      if (isPattern) this.unexpected();
+      prop.kind = "method";
+      prop.method = true;
+      return this.parseMethod(prop, isGenerator, isAsync, false, false, "ObjectMethod");
+    }
+  }
+  parseObjectProperty(prop, startLoc, isPattern, refExpressionErrors) {
+    prop.shorthand = false;
+    if (this.eat(14)) {
+      prop.value = isPattern ? this.parseMaybeDefault(this.state.startLoc) : this.parseMaybeAssignAllowIn(refExpressionErrors);
+      return this.finishNode(prop, "ObjectProperty");
+    }
+    if (!prop.computed && prop.key.type === "Identifier") {
+      this.checkReservedWord(prop.key.name, prop.key.loc.start, true, false);
+      if (isPattern) {
+        prop.value = this.parseMaybeDefault(startLoc, (0, _node.cloneIdentifier)(prop.key));
+      } else if (this.match(29)) {
+        const shorthandAssignLoc = this.state.startLoc;
+        if (refExpressionErrors != null) {
+          if (refExpressionErrors.shorthandAssignLoc === null) {
+            refExpressionErrors.shorthandAssignLoc = shorthandAssignLoc;
+          }
+        } else {
+          this.raise(_parseError.Errors.InvalidCoverInitializedName, {
+            at: shorthandAssignLoc
+          });
+        }
+        prop.value = this.parseMaybeDefault(startLoc, (0, _node.cloneIdentifier)(prop.key));
+      } else {
+        prop.value = (0, _node.cloneIdentifier)(prop.key);
+      }
+      prop.shorthand = true;
+      return this.finishNode(prop, "ObjectProperty");
+    }
+  }
+  parseObjPropValue(prop, startLoc, isGenerator, isAsync, isPattern, isAccessor, refExpressionErrors) {
+    const node = this.parseObjectMethod(prop, isGenerator, isAsync, isPattern, isAccessor) || this.parseObjectProperty(prop, startLoc, isPattern, refExpressionErrors);
+    if (!node) this.unexpected();
+    return node;
+  }
+  parsePropertyName(prop, refExpressionErrors) {
+    if (this.eat(0)) {
+      prop.computed = true;
+      prop.key = this.parseMaybeAssignAllowIn();
+      this.expect(3);
+    } else {
+      const {
+        type,
+        value
+      } = this.state;
+      let key;
+      if ((0, _types.tokenIsKeywordOrIdentifier)(type)) {
+        key = this.parseIdentifier(true);
+      } else {
+        switch (type) {
+          case 132:
+            key = this.parseNumericLiteral(value);
+            break;
+          case 131:
+            key = this.parseStringLiteral(value);
+            break;
+          case 133:
+            key = this.parseBigIntLiteral(value);
+            break;
+          case 134:
+            key = this.parseDecimalLiteral(value);
+            break;
+          case 136:
+            {
+              const privateKeyLoc = this.state.startLoc;
+              if (refExpressionErrors != null) {
+                if (refExpressionErrors.privateKeyLoc === null) {
+                  refExpressionErrors.privateKeyLoc = privateKeyLoc;
+                }
+              } else {
+                this.raise(_parseError.Errors.UnexpectedPrivateField, {
+                  at: privateKeyLoc
+                });
+              }
+              key = this.parsePrivateName();
+              break;
+            }
+          default:
+            this.unexpected();
+        }
+      }
+      prop.key = key;
+      if (type !== 136) {
+        prop.computed = false;
+      }
+    }
+    return prop.key;
+  }
+  initFunction(node, isAsync) {
+    node.id = null;
+    node.generator = false;
+    node.async = isAsync;
+  }
+  parseMethod(node, isGenerator, isAsync, isConstructor, allowDirectSuper, type, inClassScope = false) {
+    this.initFunction(node, isAsync);
+    node.generator = isGenerator;
+    this.scope.enter(_scopeflags.SCOPE_FUNCTION | _scopeflags.SCOPE_SUPER | (inClassScope ? _scopeflags.SCOPE_CLASS : 0) | (allowDirectSuper ? _scopeflags.SCOPE_DIRECT_SUPER : 0));
+    this.prodParam.enter((0, _productionParameter.functionFlags)(isAsync, node.generator));
+    this.parseFunctionParams(node, isConstructor);
+    const finishedNode = this.parseFunctionBodyAndFinish(node, type, true);
+    this.prodParam.exit();
+    this.scope.exit();
+    return finishedNode;
+  }
+  parseArrayLike(close, canBePattern, isTuple, refExpressionErrors) {
+    if (isTuple) {
+      this.expectPlugin("recordAndTuple");
+    }
+    const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;
+    this.state.inFSharpPipelineDirectBody = false;
+    const node = this.startNode();
+    this.next();
+    node.elements = this.parseExprList(close, !isTuple, refExpressionErrors, node);
+    this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;
+    return this.finishNode(node, isTuple ? "TupleExpression" : "ArrayExpression");
+  }
+  parseArrowExpression(node, params, isAsync, trailingCommaLoc) {
+    this.scope.enter(_scopeflags.SCOPE_FUNCTION | _scopeflags.SCOPE_ARROW);
+    let flags = (0, _productionParameter.functionFlags)(isAsync, false);
+    if (!this.match(5) && this.prodParam.hasIn) {
+      flags |= _productionParameter.PARAM_IN;
+    }
+    this.prodParam.enter(flags);
+    this.initFunction(node, isAsync);
+    const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;
+    if (params) {
+      this.state.maybeInArrowParameters = true;
+      this.setArrowFunctionParameters(node, params, trailingCommaLoc);
+    }
+    this.state.maybeInArrowParameters = false;
+    this.parseFunctionBody(node, true);
+    this.prodParam.exit();
+    this.scope.exit();
+    this.state.maybeInArrowParameters = oldMaybeInArrowParameters;
+    return this.finishNode(node, "ArrowFunctionExpression");
+  }
+  setArrowFunctionParameters(node, params, trailingCommaLoc) {
+    this.toAssignableList(params, trailingCommaLoc, false);
+    node.params = params;
+  }
+  parseFunctionBodyAndFinish(node, type, isMethod = false) {
+    this.parseFunctionBody(node, false, isMethod);
+    return this.finishNode(node, type);
+  }
+  parseFunctionBody(node, allowExpression, isMethod = false) {
+    const isExpression = allowExpression && !this.match(5);
+    this.expressionScope.enter((0, _expressionScope.newExpressionScope)());
+    if (isExpression) {
+      node.body = this.parseMaybeAssign();
+      this.checkParams(node, false, allowExpression, false);
+    } else {
+      const oldStrict = this.state.strict;
+      const oldLabels = this.state.labels;
+      this.state.labels = [];
+      this.prodParam.enter(this.prodParam.currentFlags() | _productionParameter.PARAM_RETURN);
+      node.body = this.parseBlock(true, false, hasStrictModeDirective => {
+        const nonSimple = !this.isSimpleParamList(node.params);
+        if (hasStrictModeDirective && nonSimple) {
+          this.raise(_parseError.Errors.IllegalLanguageModeDirective, {
+            at: (node.kind === "method" || node.kind === "constructor") && !!node.key ? node.key.loc.end : node
+          });
+        }
+        const strictModeChanged = !oldStrict && this.state.strict;
+        this.checkParams(node, !this.state.strict && !allowExpression && !isMethod && !nonSimple, allowExpression, strictModeChanged);
+        if (this.state.strict && node.id) {
+          this.checkIdentifier(node.id, _scopeflags.BIND_OUTSIDE, strictModeChanged);
+        }
+      });
+      this.prodParam.exit();
+      this.state.labels = oldLabels;
+    }
+    this.expressionScope.exit();
+  }
+  isSimpleParameter(node) {
+    return node.type === "Identifier";
+  }
+  isSimpleParamList(params) {
+    for (let i = 0, len = params.length; i < len; i++) {
+      if (!this.isSimpleParameter(params[i])) return false;
+    }
+    return true;
+  }
+  checkParams(node, allowDuplicates, isArrowFunction, strictModeChanged = true) {
+    const checkClashes = !allowDuplicates && new Set();
+    const formalParameters = {
+      type: "FormalParameters"
+    };
+    for (const param of node.params) {
+      this.checkLVal(param, {
+        in: formalParameters,
+        binding: _scopeflags.BIND_VAR,
+        checkClashes,
+        strictModeChanged
+      });
+    }
+  }
+  parseExprList(close, allowEmpty, refExpressionErrors, nodeForExtra) {
+    const elts = [];
+    let first = true;
+    while (!this.eat(close)) {
+      if (first) {
+        first = false;
+      } else {
+        this.expect(12);
+        if (this.match(close)) {
+          if (nodeForExtra) {
+            this.addTrailingCommaExtraToNode(nodeForExtra);
+          }
+          this.next();
+          break;
+        }
+      }
+      elts.push(this.parseExprListItem(allowEmpty, refExpressionErrors));
+    }
+    return elts;
+  }
+  parseExprListItem(allowEmpty, refExpressionErrors, allowPlaceholder) {
+    let elt;
+    if (this.match(12)) {
+      if (!allowEmpty) {
+        this.raise(_parseError.Errors.UnexpectedToken, {
+          at: this.state.curPosition(),
+          unexpected: ","
+        });
+      }
+      elt = null;
+    } else if (this.match(21)) {
+      const spreadNodeStartLoc = this.state.startLoc;
+      elt = this.parseParenItem(this.parseSpread(refExpressionErrors), spreadNodeStartLoc);
+    } else if (this.match(17)) {
+      this.expectPlugin("partialApplication");
+      if (!allowPlaceholder) {
+        this.raise(_parseError.Errors.UnexpectedArgumentPlaceholder, {
+          at: this.state.startLoc
+        });
+      }
+      const node = this.startNode();
+      this.next();
+      elt = this.finishNode(node, "ArgumentPlaceholder");
+    } else {
+      elt = this.parseMaybeAssignAllowIn(refExpressionErrors, this.parseParenItem);
+    }
+    return elt;
+  }
+  parseIdentifier(liberal) {
+    const node = this.startNode();
+    const name = this.parseIdentifierName(liberal);
+    return this.createIdentifier(node, name);
+  }
+  createIdentifier(node, name) {
+    node.name = name;
+    node.loc.identifierName = name;
+    return this.finishNode(node, "Identifier");
+  }
+  parseIdentifierName(liberal) {
+    let name;
+    const {
+      startLoc,
+      type
+    } = this.state;
+    if ((0, _types.tokenIsKeywordOrIdentifier)(type)) {
+      name = this.state.value;
+    } else {
+      this.unexpected();
+    }
+    const tokenIsKeyword = (0, _types.tokenKeywordOrIdentifierIsKeyword)(type);
+    if (liberal) {
+      if (tokenIsKeyword) {
+        this.replaceToken(130);
+      }
+    } else {
+      this.checkReservedWord(name, startLoc, tokenIsKeyword, false);
+    }
+    this.next();
+    return name;
+  }
+  checkReservedWord(word, startLoc, checkKeywords, isBinding) {
+    if (word.length > 10) {
+      return;
+    }
+    if (!(0, _identifier.canBeReservedWord)(word)) {
+      return;
+    }
+    if (checkKeywords && (0, _identifier.isKeyword)(word)) {
+      this.raise(_parseError.Errors.UnexpectedKeyword, {
+        at: startLoc,
+        keyword: word
+      });
+      return;
+    }
+    const reservedTest = !this.state.strict ? _identifier.isReservedWord : isBinding ? _identifier.isStrictBindReservedWord : _identifier.isStrictReservedWord;
+    if (reservedTest(word, this.inModule)) {
+      this.raise(_parseError.Errors.UnexpectedReservedWord, {
+        at: startLoc,
+        reservedWord: word
+      });
+      return;
+    } else if (word === "yield") {
+      if (this.prodParam.hasYield) {
+        this.raise(_parseError.Errors.YieldBindingIdentifier, {
+          at: startLoc
+        });
+        return;
+      }
+    } else if (word === "await") {
+      if (this.prodParam.hasAwait) {
+        this.raise(_parseError.Errors.AwaitBindingIdentifier, {
+          at: startLoc
+        });
+        return;
+      }
+      if (this.scope.inStaticBlock) {
+        this.raise(_parseError.Errors.AwaitBindingIdentifierInStaticBlock, {
+          at: startLoc
+        });
+        return;
+      }
+      this.expressionScope.recordAsyncArrowParametersError({
+        at: startLoc
+      });
+    } else if (word === "arguments") {
+      if (this.scope.inClassAndNotInNonArrowFunction) {
+        this.raise(_parseError.Errors.ArgumentsInClass, {
+          at: startLoc
+        });
+        return;
+      }
+    }
+  }
+  isAwaitAllowed() {
+    if (this.prodParam.hasAwait) return true;
+    if (this.options.allowAwaitOutsideFunction && !this.scope.inFunction) {
+      return true;
+    }
+    return false;
+  }
+  parseAwait(startLoc) {
+    const node = this.startNodeAt(startLoc);
+    this.expressionScope.recordParameterInitializerError(_parseError.Errors.AwaitExpressionFormalParameter, {
+      at: node
+    });
+    if (this.eat(55)) {
+      this.raise(_parseError.Errors.ObsoleteAwaitStar, {
+        at: node
+      });
+    }
+    if (!this.scope.inFunction && !this.options.allowAwaitOutsideFunction) {
+      if (this.isAmbiguousAwait()) {
+        this.ambiguousScriptDifferentAst = true;
+      } else {
+        this.sawUnambiguousESM = true;
+      }
+    }
+    if (!this.state.soloAwait) {
+      node.argument = this.parseMaybeUnary(null, true);
+    }
+    return this.finishNode(node, "AwaitExpression");
+  }
+  isAmbiguousAwait() {
+    if (this.hasPrecedingLineBreak()) return true;
+    const {
+      type
+    } = this.state;
+    return type === 53 || type === 10 || type === 0 || (0, _types.tokenIsTemplate)(type) || type === 101 && !this.state.containsEsc || type === 135 || type === 56 || this.hasPlugin("v8intrinsic") && type === 54;
+  }
+  parseYield() {
+    const node = this.startNode();
+    this.expressionScope.recordParameterInitializerError(_parseError.Errors.YieldInParameter, {
+      at: node
+    });
+    this.next();
+    let delegating = false;
+    let argument = null;
+    if (!this.hasPrecedingLineBreak()) {
+      delegating = this.eat(55);
+      switch (this.state.type) {
+        case 13:
+        case 137:
+        case 8:
+        case 11:
+        case 3:
+        case 9:
+        case 14:
+        case 12:
+          if (!delegating) break;
+        default:
+          argument = this.parseMaybeAssign();
+      }
+    }
+    node.delegate = delegating;
+    node.argument = argument;
+    return this.finishNode(node, "YieldExpression");
+  }
+  checkPipelineAtInfixOperator(left, leftStartLoc) {
+    if (this.hasPlugin(["pipelineOperator", {
+      proposal: "smart"
+    }])) {
+      if (left.type === "SequenceExpression") {
+        this.raise(_parseError.Errors.PipelineHeadSequenceExpression, {
+          at: leftStartLoc
+        });
+      }
+    }
+  }
+  parseSmartPipelineBodyInStyle(childExpr, startLoc) {
+    if (this.isSimpleReference(childExpr)) {
+      const bodyNode = this.startNodeAt(startLoc);
+      bodyNode.callee = childExpr;
+      return this.finishNode(bodyNode, "PipelineBareFunction");
+    } else {
+      const bodyNode = this.startNodeAt(startLoc);
+      this.checkSmartPipeTopicBodyEarlyErrors(startLoc);
+      bodyNode.expression = childExpr;
+      return this.finishNode(bodyNode, "PipelineTopicExpression");
+    }
+  }
+  isSimpleReference(expression) {
+    switch (expression.type) {
+      case "MemberExpression":
+        return !expression.computed && this.isSimpleReference(expression.object);
+      case "Identifier":
+        return true;
+      default:
+        return false;
+    }
+  }
+  checkSmartPipeTopicBodyEarlyErrors(startLoc) {
+    if (this.match(19)) {
+      throw this.raise(_parseError.Errors.PipelineBodyNoArrow, {
+        at: this.state.startLoc
+      });
+    }
+    if (!this.topicReferenceWasUsedInCurrentContext()) {
+      this.raise(_parseError.Errors.PipelineTopicUnused, {
+        at: startLoc
+      });
+    }
+  }
+  withTopicBindingContext(callback) {
+    const outerContextTopicState = this.state.topicContext;
+    this.state.topicContext = {
+      maxNumOfResolvableTopics: 1,
+      maxTopicIndex: null
+    };
+    try {
+      return callback();
+    } finally {
+      this.state.topicContext = outerContextTopicState;
+    }
+  }
+  withSmartMixTopicForbiddingContext(callback) {
+    if (this.hasPlugin(["pipelineOperator", {
+      proposal: "smart"
+    }])) {
+      const outerContextTopicState = this.state.topicContext;
+      this.state.topicContext = {
+        maxNumOfResolvableTopics: 0,
+        maxTopicIndex: null
+      };
+      try {
+        return callback();
+      } finally {
+        this.state.topicContext = outerContextTopicState;
+      }
+    } else {
+      return callback();
+    }
+  }
+  withSoloAwaitPermittingContext(callback) {
+    const outerContextSoloAwaitState = this.state.soloAwait;
+    this.state.soloAwait = true;
+    try {
+      return callback();
+    } finally {
+      this.state.soloAwait = outerContextSoloAwaitState;
+    }
+  }
+  allowInAnd(callback) {
+    const flags = this.prodParam.currentFlags();
+    const prodParamToSet = _productionParameter.PARAM_IN & ~flags;
+    if (prodParamToSet) {
+      this.prodParam.enter(flags | _productionParameter.PARAM_IN);
+      try {
+        return callback();
+      } finally {
+        this.prodParam.exit();
+      }
+    }
+    return callback();
+  }
+  disallowInAnd(callback) {
+    const flags = this.prodParam.currentFlags();
+    const prodParamToClear = _productionParameter.PARAM_IN & flags;
+    if (prodParamToClear) {
+      this.prodParam.enter(flags & ~_productionParameter.PARAM_IN);
+      try {
+        return callback();
+      } finally {
+        this.prodParam.exit();
+      }
+    }
+    return callback();
+  }
+  registerTopicReference() {
+    this.state.topicContext.maxTopicIndex = 0;
+  }
+  topicReferenceIsAllowedInCurrentContext() {
+    return this.state.topicContext.maxNumOfResolvableTopics >= 1;
+  }
+  topicReferenceWasUsedInCurrentContext() {
+    return this.state.topicContext.maxTopicIndex != null && this.state.topicContext.maxTopicIndex >= 0;
+  }
+  parseFSharpPipelineBody(prec) {
+    const startLoc = this.state.startLoc;
+    this.state.potentialArrowAt = this.state.start;
+    const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;
+    this.state.inFSharpPipelineDirectBody = true;
+    const ret = this.parseExprOp(this.parseMaybeUnaryOrPrivate(), startLoc, prec);
+    this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;
+    return ret;
+  }
+  parseModuleExpression() {
+    this.expectPlugin("moduleBlocks");
+    const node = this.startNode();
+    this.next();
+    if (!this.match(5)) {
+      this.unexpected(null, 5);
+    }
+    const program = this.startNodeAt(this.state.endLoc);
+    this.next();
+    const revertScopes = this.initializeScopes(true);
+    this.enterInitialScopes();
+    try {
+      node.body = this.parseProgram(program, 8, "module");
+    } finally {
+      revertScopes();
+    }
+    return this.finishNode(node, "ModuleExpression");
+  }
+  parsePropertyNamePrefixOperator(prop) {}
+}
+exports.default = ExpressionParser;
+
+//# sourceMappingURL=expression.js.map

Файловите разлики са ограничени, защото са твърде много
+ 0 - 0
node_modules/@babel/parser/lib/parser/expression.js.map


Някои файлове не бяха показани, защото твърде много файлове са промени