Commit 2190ab02 by tangjiale

更新代码

parent 74a19195
unpackage/
*/unpackage/*
.idea/
node_modules
package-lock.json
.hbuilderx
{ // 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": [{
"type": "uniCloud",
"default": {
"launchtype": "local"
}
}
]
}
{
"git.ignoreLimitWarning": true
}
\ No newline at end of file
<script>
export default {
onLaunch: function() {
},
onShow: function() {
},
onHide: function() {
}
}
</script>
<style lang="scss">
/*每个页面公共css */
@import "uview-ui/index.scss";
</style>
# 代码/业务基本规范
- 组件封装优化:
· 开发时不要出现大段js代码重复,业务上的代码封装到service,工具性质的代码封装到utils里面
· 模板里面for循环内的代码一般来说封装成组件更方便维护
· 生命周期相关的通用代码,可以封装成mixin按需或者全局引用
- css优化:
· class名需要有一定的业务含义,不能随便写
· 善用less语法的能力,比如通用颜色定义颜色常量、善用css的集成方法(.extend)
- 用户交互优化:
· 加载页面数据时,页面至少不要空白,如果不好展示的话,加个loading的状态或者弹窗都可以
· 点击按钮都需要有反馈,如操作成功、操作失败等,至少要让用户明确知道他点了按钮有什么结果。除非结果会使页面变化较大,可以不做toast或弹窗提示
· 进行某些操作时,可能会引起上一个页面的数据发生变化,常见的比如在订单详情进行取消或者支付等,需要通过事件通知更新订单列表
- 业务逻辑梳理:
·页面之间的跳转,根据业务场景是否已经完成闭环,哪些功能可以复用需要在项目开始开发前就考虑好,以免做重复工作
# 开发文档
- [uni-app官方文档](https://uniapp.dcloud.net.cn/)
- [uview-ui官方文档](https://www.uviewui.com/)
- [api接口文档]()
- [ui交互地址]()
/*
* @Author: tangjiale
* @eMail: 932055106@qq.com
* @Date: 2022-01-13 17:47:44
* @LastEditors: tangjiale
* @LastEditTime: 2022-06-07 15:08:24
*/
// wx.setStorageSync('host', 'https://sdb.youchengzhang.cn/'); //正式环境
wx.setStorageSync('host', 'https://test.xiaobentiyu.cn'); //测试环境
//引入混合模式
require('./wx-mixins.js')
//ai姿势识别
const fetchWechat = require('fetch-wechat')
const tf = require('@tensorflow/tfjs-core')
const webgl = require('@tensorflow/tfjs-backend-webgl')
const plugins = requirePlugin('tfjsPlugin')
wx.setStorageSync('index', 0);
App({
onLaunch: function () {
this.autoUpdate();
wx.setStorageSync('appId', 'wxd56eb1b3b99e5cf0');
plugins.configPlugin({
// polyfill fetch function
fetchFunc: fetchWechat.fetchFunc(),
// inject tfjs runtime
tf,
// inject webgl backend
webgl,
// provide webgl canvas
canvas: wx.createOffscreenCanvas()
})
},
//强制更新
autoUpdate:function(){
var self=this
// 获取小程序更新机制兼容
if (wx.canIUse('getUpdateManager')) {
const updateManager = wx.getUpdateManager()
//1. 检查小程序是否有新版本发布
updateManager.onCheckForUpdate(function (res) {
// console.log(res)
// 请求完新版本信息的回调
if (res.hasUpdate) {
//2. 小程序有新版本,则静默下载新版本,做好更新准备
updateManager.onUpdateReady(function () {
wx.showModal({
title: '更新提示',
content: '新版本已经准备好,是否重启应用?',
success: function (res) {
if (res.confirm) {
//3. 新的版本已经下载好,调用 applyUpdate 应用新版本并重启
updateManager.applyUpdate()
} else if (res.cancel) {
//如果需要强制更新,则给出二次弹窗,如果不需要,则这里的代码都可以删掉了
wx.showModal({
title: '温馨提示~',
content: '本次版本更新涉及到新的功能添加,旧版本无法正常访问的哦~',
success: function (res) {
self.autoUpdate()
//第二次提示后,强制更新
if (res.confirm) {
// 新的版本已经下载好,调用 applyUpdate 应用新版本并重启
updateManager.applyUpdate()
} else if (res.cancel) {
//重新回到版本更新提示
self.autoUpdate()
}
}
})
}
}
})
})
updateManager.onUpdateFailed(function () {
// 新的版本下载失败
wx.showModal({
title: '已经有新版本了哟~',
content: '新版本已经上线啦~,请您删除当前小程序,重新搜索打开哟~',
})
})
}
})
} else {
// 如果希望用户在最新版本的客户端上体验您的小程序,可以这样子提示
wx.showModal({
title: '提示',
content: '当前微信版本过低,无法使用该功能,请升级到最新微信版本后重试。'
})
}
},
//定义全局配置跳转事件,当切换身份时指定跳转到对应身份的首页
checkUserType(){
let type = wx.getStorageSync('peopleType')
if(type == 'Teacher'){
wx.switchTab({url:'/pages/index/index'})
}else if(type == 'School'){
wx.switchTab({url:'/pages/index/index'})
}
},
globalData: {
userInfo: null,
navHeight: 0,
movenet: null
},
})
{
"pages": [
"pages/index/index",
"pages/organ-my/organ-my",
"pages/my/my",
"pages/sport/sport"
],
"subpackages": [
{
"root": "subPages/organ",
"name": "organ",
"pages": []
},{
"root": "subPages/sport",
"name": "sport",
"pages": [
"detail/detail",
"ai-sport/ai-sport"
]
},{
"root": "subPages/login",
"name": "login",
"pages": [
"login/index"
]
}
],
"tabBar": {
"custom": true,
"color": "#222222",
"selectedColor": "#39BF3E",
"backgroundColor": "#fff",
"list": [
{
"pagePath": "pages/index/index",
"text": "选课"
},
{
"pagePath": "pages/sport/sport",
"text": "运动"
},
{
"pagePath": "pages/organ-my/organ-my",
"text": "我的"
}
]
},
"usingComponents": {
"van-cell": "@vant/weapp/cell/index",
"van-button": "@vant/weapp/button/index",
"van-popup": "@vant/weapp/popup/index",
"van-cell-group": "@vant/weapp/cell-group/index",
"van-swipe-cell": "@vant/weapp/swipe-cell/index",
"van-radio": "@vant/weapp/radio/index",
"van-radio-group": "@vant/weapp/radio-group/index",
"van-search": "@vant/weapp/search/index",
"van-tab": "@vant/weapp/tab/index",
"van-tabs": "@vant/weapp/tabs/index",
"van-sticky": "@vant/weapp/sticky/index",
"van-rate": "@vant/weapp/rate/index",
"van-picker": "@vant/weapp/picker/index",
"van-dialog": "@vant/weapp/dialog/index"
},
"window": {
"backgroundTextStyle": "light",
"navigationBarBackgroundColor": "#fff",
"navigationBarTitleText": "奔腾宝贝",
"navigationBarTextStyle": "black"
},
"sitemapLocation": "sitemap.json",
"plugins": {
"tfjsPlugin": {
"version": "0.1.0",
"provider": "wx6afed118d9e81df9"
}
}
}
\ No newline at end of file
.mr-70{margin-right: 70rpx;}
.mt-20{margin-top: 20rpx;}
.c-0{color: #333333 !important;}
.border-none{border:none !important}
/* 圈子列表 */
.circle-list-item {padding: 30rpx 30rpx;box-sizing: border-box;background: #ffffff;border-top: 1rpx solid #e0e0e0;position: relative}
.circle-list-item .left{display: inline-block;vertical-align: top; height: 173rpx;width: 230rpx;border-radius: 10rpx;margin-right: 30rpx;}
.circle-list-item .left image{width: 100%;height: 100%;border-radius: 10rpx;}
.circle-list-item .right{display: inline-block;vertical-align: top;height: 173rpx; box-sizing: border-box;position: relative;width: 430rpx;}
.circle-list-item .title{font-size: 32rpx;color: #333333;line-height: 40rpx;font-weight: bold}
.circle-list-item .one-line{text-overflow: -o-ellipsis-lastline;overflow: hidden;text-overflow: ellipsis;}
.circle-list-item .one-line{display: -webkit-box;-webkit-line-clamp: 1;-webkit-box-orient: vertical;align-content: center;}
.circle-list-item .name{height: 30rpx;font-size: 24rpx;color: #6b6b6b;line-height: 30rpx;position: absolute;bottom: 90rpx;}
.circle-list-item .time{height: 30rpx;font-size: 24rpx;color: #6b6b6b;line-height: 30rpx;position: absolute;bottom: 50rpx;}
.circle-list-item .name image{height: 30rpx;width: 30rpx;border-radius: 50%;display: inline-block;vertical-align: text-top;margin-right: 10rpx;}
.circle-list-item .num{height: 28rpx;font-size: 24rpx;position: absolute;bottom: 10rpx;color: #6b6b6b}
.circle-list-item .num view{display: inline-block;font-size: 24rpx;height: 24rpx;line-height: 28rpx;box-sizing: border-box;color: #6b6b6b}
.circle-list-item .cj{padding-right: 20rpx;margin-right: 20rpx;border-right: 1px solid #dbdbdb;}
.circle-list-item .right-img image{width: 32rpx; height: 32rpx;right: 20rpx;top:100rpx;position: absolute}
.circle-list-item .right-img view{width: 32rpx; height: 32rpx;border-radius: 50%;border:1rpx solid #6b6b6b;right: 20rpx;top:100rpx;position: absolute}
.circle-list-item .right-flag image{width: 84rpx; height: 42rpx;right: 0rpx;top:30rpx;position: absolute}
.circle-list-item .right-flag view{width: 64rpx; height: 42rpx;right: 5rpx;top:30rpx;position: absolute;font-size: 20rpx;line-height: 42rpx;text-align: right;z-index: 1000;color: #ffffff;}
/* nav样式 */
.nav{display: flex;background: #ffffff;padding: 30rpx;border-bottom:1rpx solid #e0e0e0}
.nav .nav-item{flex: 1;text-align: center;font-size: 30rpx;color: #b7b7b7;}
.nav image{display: block;width: 46rpx;height: 18rpx;margin: 0 auto;}
.no-data image{width: 300rpx;height: 209rpx;display: block;margin: 40rpx auto 0 auto;}
.no-data{position: relative;text-align: center}
.no-data view{position: absolute;width: 100%;top:200rpx;color: #cecece;font-size: 24rpx;}
\ No newline at end of file
<!--components/icon/icon.wxml-->
<view class="hnfont iconfont {{type}} custom-class" style='{{ styleObj ||"" }}{{ color ? "color:" + color + ";" : "" }}font-size: {{size}}rpx;'></view>
\ No newline at end of file
// components/icon/icon.js
Component({
externalClasses: ['custom-class'],
/**
* 组件的属性列表
*/
properties: {
// 图标名称 icon-xuanze
type: {
type: String,
value: ''
},
// 颜色
color: {
type: String,
value: '',
},
//自定义的样式输入
styleObj:{
type: String,
value: '',
},
// 大小
size: {
type: [String, Number],
value: 24
},
},
/**
* 组件的初始数据
*/
data: {
},
/**
* 组件的方法列表
*/
methods: {
}
})
\ No newline at end of file
{
"component": true,
"usingComponents": {}
}
\ No newline at end of file
/* components/icon/icon.wxss */
@import '/css/iconfont.wxss';
.hnfont{
display: inline-block;
vertical-align: middle;
}
\ No newline at end of file
/*
* @Author: tangjiale
* @eMail: 932055106@qq.com
* @Date: 2022-05-17 16:10:59
* @LastEditors: tangjiale
* @LastEditTime: 2022-06-06 17:42:22
*/
// components/t-popup/index.js
Component({
/**
* 组件的属性列表
*/
properties: {
show: {
type: Boolean,
value: false,
observer: function (val) {
this._showpropertiesChange(val);
//Sunrise.event.fire('$pop-show', [val, Sunrise.util.getCurrentPage()])
}
},
// 是否有遮罩层
overlay: {
type: Boolean,
value: true
},
//透明度
opacity:{
type: Number,
value: .7
},
// 遮罩层是否会显示
showOverlay: {
type: Boolean,
value: true
},
top: {
type: String,
value: '0'
},
// 内容从哪个方向出,可选 center top bottom left right
type: {
type: String,
value: 'center'
},
customStyle: String,
overlayStyle: String,
},
/**
* 组件的初始数据
*/
data: {
},
/**
* 组件的方法列表
*/
methods: {
init() {
this._showpropertiesChange(this.data.show)
},
_showpropertiesChange(newVal) {
// console.log(this.hasComplete)
// debugger
// debugger
// this.hasComplete && Sunrise.event.fire('$pop-show', [newVal, Sunrise.util.getCurrentPage()])
},
handleMaskClick: function handleMaskClick() {
this.triggerEvent('clickmask', {});
}
}
})
{
"component": true
}
\ No newline at end of file
<view class="pop pop--{{ type }} {{ show ? 'pop--show' : '' }}">
<view
wx:if="{{ overlay }}"
class="pop__mask {{ showOverlay ? '' : 'pop__mask--hide' }}"
catchtap="handleMaskClick"
style="opacity:{{opacity}}; {{ overlayStyle }}"
catchtouchmove="ture"
></view>
<view class="pop__container" style="{{ type == 'top' ? 'top:'+ top + ';' : '' }} {{ customStyle }}">
<slot></slot>
</view>
</view>
.pop {
visibility: hidden
}
.pop--show {
visibility: visible
}
.pop__mask {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
z-index: 99999;
background: #000;
display: none
}
.pop__mask--hide {
background: 0 0
}
.pop__container {
position: fixed;
left: 50%;
top: 50%;
-webkit-transform: translate3d(-50%, -50%, 0);
transform: translate3d(-50%, -50%, 0);
-webkit-transform-origin: center;
transform-origin: center;
transition: all .4s ease;
z-index: 100002;
opacity: 0
}
.pop--show .pop__container {
opacity: 1
}
.pop--show .pop__mask {
display: block
}
.pop--left .pop__container {
left: 0;
top: 50%;
-webkit-transform: translate3d(-100%, -50%, 0);
transform: translate3d(-100%, -50%, 0)
}
.pop--show.pop--left .pop__container {
-webkit-transform: translate3d(0, -50%, 0);
transform: translate3d(0, -50%, 0)
}
.pop--right .pop__container {
right: 0;
top: 50%;
left: auto;
-webkit-transform: translate3d(100%, -50%, 0);
transform: translate3d(100%, -50%, 0)
}
.pop--show.pop--right .pop__container {
-webkit-transform: translate3d(0, -50%, 0);
transform: translate3d(0, -50%, 0)
}
.pop--bottom .pop__container {
top: auto;
left: 50%;
bottom: 0;
-webkit-transform: translate3d(-50%, 100%, 0);
transform: translate3d(-50%, 100%, 0)
}
.pop--show.pop--bottom .pop__container {
-webkit-transform: translate3d(-50%, 0, 0);
transform: translate3d(-50%, 0, 0)
}
.pop--top .pop__container {
left: 50%;
-webkit-transform: translate3d(-50%, -100%, 0);
transform: translate3d(-50%, -100%, 0)
}
.pop--show.pop--top .pop__container {
-webkit-transform: translate3d(-50%, 0, 0);
transform: translate3d(-50%, 0, 0)
}
\ No newline at end of file
// components/t-popup/index.js
Component({
/**
* 组件的属性列表
*/
properties: {
show: {
type: Boolean,
value: false
},
overlay: {
type: Boolean,
value: true
},
closeOnClickOverlay: {
type: Boolean,
value: true
},
// 弹出方向
type: {
type: String,
value: 'center'
},
//透明度
opacity:{
type: Number,
value: .7
},
customStyle: String,
overlayStyle: String,
},
/**
* 组件的初始数据
*/
data: {
},
/**
* 组件的方法列表
*/
methods: {
handleMaskClick: function handleMaskClick() {
this.triggerEvent('click-overlay', {});
if (!this.data.closeOnClickOverlay) {
return;
}
this.setData({
show:false
});
this.triggerEvent('close');
}
}
})
{
"component": true,
"usingComponents": {
"pop-manager": "../t-pop-manager/index"
}
}
\ No newline at end of file
<pop-manager
show="{{ show }}"
type="{{ type }}"
opacity="{{ opacity }}"
show-overlay="{{ overlay }}"
custom-style="{{ customStyle }}"
overlay-style="{{ overlayStyle }}"
bindclickmask="handleMaskClick">
<!-- 解决供应大厅筛选右侧弹窗问题 -->
<view class="{{ customStyle ? '' : 'popper-dialog_body--' + type }}">
<slot></slot>
</view>
</pop-manager>
\ No newline at end of file
.popper-dialog_body--bottom {
width: 100vw;
overflow: hidden;
}
.popper-dialog_body--left,
.popper-dialog_body--right {
height: 100vh;
width: 100vw;
overflow: hidden;
/* TODO: 此处会修改公共样式造成全局污染 待修改方案 */
background: #fff;
margin-top: 50rpx;
}
\ No newline at end of file
<template>
<div v-show="capsule && capsule.top">
<div class="user-card" :class="showBack?'between' : 'center'" :style="{marginTop:(capsule.top)+'px',height:capsule.height+'px'}">
<div @click="gotoBack" v-if="showBack">
<u-icon name="arrow-left" color="#fff" size="32"></u-icon>
</div>
{{title}}
<div style="opacity: 0;" v-if="showBack"><u-icon name="arrow-left" color="#fff" size="16"></u-icon></div>
</div>
</div>
</template>
<script>
export default{
props:{
title:String,
showBack:{
type:Boolean,
default:false
}
},
data(){
return{
capsule:{}
}
},
mounted() {
//获取右上角胶囊信息
let capsule = wx.getMenuButtonBoundingClientRect()
this.capsule = capsule
},
methods:{
gotoBack(){
uni.navigateBack()
}
}
}
</script>
<style scoped lang="less">
.user-card{
position: relative;
display: flex;
align-items: center;
width: calc(100% - 70upx);
padding: 0upx 40upx 0upx 30upx;
font-size: 34upx;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #FFFFFF;
}
.center{
justify-content: center;
}
.between{
justify-content: space-between;
}
</style>
<template>
<i class="xbfont iconfont" :class="type" :style="{ color: color, fontSize: size + 'rpx' }"></i>
</template>
<script>
export default{
props:{
type: {
type: String,
default: ''
},
color: {
type: String,
default: '',
},
styleObj:{
type: String,
default: '',
},
size: {
type: [String, Number],
default:32
},
}
}
</script>
<style scoped>
@import "/static/css/iconfont.css";
.xbfont{
display: inline-block;
vertical-align: middle;
}
</style>
......@@ -9,6 +9,7 @@
.iconfont {
font-family: "iconfont" !important;
font-size: 16px;
font-style: normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
......
/*
* @Author: tangjiale
* @eMail: 932055106@qq.com
* @Date: 2022-06-06 11:29:18
* @LastEditors: tangjiale
* @LastEditTime: 2022-06-06 16:54:53
*/
const organTab = [
{
pagePath: "/pages/index/index",
type:'page',
iconPath: "/tabBarImg/xztab-0.png",
selectedIconPath: "/tabBarImg/xztab-1-active.png",
text: "首页"
}, {
pagePath: "/pages/mine/mine",
type:'page',
iconPath: "/tabBarImg/xztab-0.png",
selectedIconPath: "/tabBarImg/xztab-1-active.png",
text: "我的"
}
]
const parentTab = [
{
pagePath: "/pages/index/index",
type:'page',
iconPath: "/tabBarImg/xztab-0.png",
selectedIconPath: "/tabBarImg/xztab-1-active.png",
text: "首页"
},{
pagePath: "/pages/sport/sport",
type:'page',
iconPath: "/tabBarImg/xztab-0.png",
selectedIconPath: "/tabBarImg/xztab-1-active.png",
text: "运动"
},{
pagePath: "/pages/mine/mine",
type:'page',
iconPath: "/tabBarImg/xztab-0.png",
selectedIconPath: "/tabBarImg/xztab-1-active.png",
text: "我的"
}
]
Component({
data: {
selected: 0,
color: "#B3B3B3",
selectedColor: "#333333",
list: []
},
attached() {
},
methods: {
switchTab(e) {
const data = e.currentTarget.dataset
const url = data.path
//因为添加页面在分包中 因此只能使用wx.navigateTo跳转
if (data.type == "subPages") {
wx.navigateTo({
url: url, //因为添加页面在分包中 因此只能使用wx.navigateTo跳转
})
} else {
wx.switchTab({url})
this.setData({
selected: data.index
})
}
},
upDateBar(){
let type = wx.getStorageSync('peopleType') || 'Organ'
if(type){
this.setData({
list:type == 'Parent' ? organTab : parentTab
})
}
}
}
})
\ No newline at end of file
{
"component": true
}
\ No newline at end of file
<!--miniprogram/custom-tab-bar/index.wxml-->
<cover-view class="tab-bar">
<cover-view class="tab-bar-border"></cover-view>
<cover-view wx:for="{{list}}" wx:key="index" class="tab-bar-item" data-path="{{item.pagePath}}" data-index="{{index}}" data-type="{{item.type}}" bindtap="switchTab">
<cover-image src="{{selected === index ? item.selectedIconPath : item.iconPath}}"></cover-image>
<cover-view style="color: {{selected === index ? selectedColor : color}}">{{item.text}}</cover-view>
</cover-view>
</cover-view>
.tab-bar {
position: fixed;
bottom: 0;
left: 0;
right: 0;
height: 94rpx;
background: white;
display: flex;
padding-bottom: env(safe-area-inset-bottom);
}
.tab-bar-border {
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 1px;
transform: scaleY(0.5);
}
.tab-bar-item {
flex: 1;
}
.tab-bar-item cover-image {
margin-top: 21rpx;
margin-left: auto;
margin-right: auto;
width: 34rpx;
height: 34rpx;
}
.tab-bar-item cover-view {
margin-top: 10rpx;
font-size: 20rpx;
font-family: PingFang SC;
font-weight: 500;
text-align: center;
}
let config = process.env.FRAMEWORK_CONFIG
config.platform = process.env.UNI_PLATFORM // h5 公众号 mp-weixin 微信小程序
// 小程序要加上头部的一些信息
//设备顶部状态高度
const statusBarHeight = uni.getSystemInfoSync().statusBarHeight
//小程序头部与胶囊平行高度
const titleBarHeight = (uni.getMenuButtonBoundingClientRect().top - uni.getSystemInfoSync().statusBarHeight) * 2 +
uni.getMenuButtonBoundingClientRect().height
//自定义头部高度
const topBarHeight = statusBarHeight + titleBarHeight
config = {
...config,
statusBarHeight,
titleBarHeight,
topBarHeight
}
export default config
import hooks from '../utils/hooks.js'
import config from '../config.js'
const CONTENT_TYPE_MAP = {
'json': 'application/json',
'form': 'application/x-www-form-urlencoded'
};
export default {
// 发送请求
async send(options) {
options = Object.assign({
isToastError: true,
contentType: "form",
returnAll: false,
loadingText: "",
headers: {
loginFrom:'mini'
},
allError: false // 是否返回所有的错误信息,默认只返回message
}, options)
options.loadingText && uni.showLoading({
title: options.loadingText,
mask: true
});
options.url = (options.url.indexOf('http://') === 0 || options.url.indexOf('https://') === 0) ? options
.url : ((
config.baseUrl) + options.url);
await hooks.callHook('beforeHttp', options)
return uni.request({
url: options.url,
method: options.method || 'post',
timeout: options.timeout || 10000,
header: {
...options.headers,
'content-type': CONTENT_TYPE_MAP[(options.contentType || 'json').toLowerCase()]
},
data: options.data
}).then(res => {
options.loadingText && uni.hideLoading()
if (res[1]) {
if (res[1].statusCode === 200) {
//处理data里面异常处理
if(res[1].data && res[1].data.code != 0){
return hooks.callHook('catchHttpError', res[1].data, options)
}
//异常code后端放在data
if(res[1].data && res[1].data.code == 401){
return hooks.callHook('catchHttpError', res[1].data, options)
}
return hooks.callHook('resolveHttpSuccess', res[1], options)
} else {
return hooks.callHook('catchHttpError', res[1], options)
}
} else {
return hooks.callHook('catchHttpError', res[0], options)
}
}).catch(err => {
options.isToastError && uni.showToast({
icon: 'none',
title: err.msg ? err.msg : err.toString()
})
return Promise.reject(err)
})
},
get(options) {
options.method = 'get';
return this.send(options);
},
postJson(options) {
options.contentType = 'json';
return this.send(options);
},
postForm(options) {
options.contentType = 'form';
return this.post(options);
},
post(options) {
options.method = 'post';
return this.send(options);
},
put(options) {
options.method = 'put';
return this.send(options);
},
delete(options) {
options.method = 'delete';
return this.send(options);
}
}
import Vuex from 'vuex'
import service from './core/service.js';
import utils from './utils'
import common from './utils/common'
import config from './config.js'
import store_user from './store/user.js'
let store = null;
export {
utils,
common,
config,
service,
store
}
export default {
install(vue, options) {
vue.prototype.$utils = utils
vue.prototype.$config = config
Object.keys(common).forEach(v => {
vue.prototype[v] = common[v]
})
vue.use(Vuex)
store = new Vuex.Store({
modules: options.store ? {
user: store_user,
...options.store
} : {
user: store_user
}
})
vue.prototype.$store = store
if (options.hooks) {
Object.keys(options.hooks).forEach(v => {
utils.hooks.on(v, options.hooks[v])
})
}
vue.mixin(require('./mixins/event'))
vue.mixin(require('./mixins/user-info.js'))
}
}
module.exports = {
mounted() {
let {
events
} = this.$options
if (events) {
Object.keys(events).forEach(v => {
uni.$on(v, this[events[v]])
})
}
},
destroyed() {
let {
events
} = this.$options
if (events) {
Object.keys(events).forEach(v => {
uni.$off(v, this[events[v]])
})
}
}
}
export default {
data() {
return {
list: [],
total: 0,
pageNum: 1,
listParam: {},
loading: false,
finish: false
}
},
onReachBottom() {
if (this.loading) return
this.loading = true
this.loadList()
},
mounted() {
this.loading = true
this.loadList()
},
methods: {
onSelectChange(listParam) {
this.listParam = listParam
this.reload()
},
reload() {
this.finish = false
this.pageNum = 1
this.total = 0
this.list = []
this.loading = true
this.loadList()
}
}
}
import {
mapState,
mapGetters
} from 'vuex'
module.exports = {
computed: {
...mapState({
myUserId: state => state.user.myUserId,
myUserInfo: state => state.user.myUserInfo,
myUserTicket: state => state.user.myUserTicket
})
}
}
const user = {
state: {
myUserId: 0,
myUserInfo: null,
myUserTicket: ''
},
mutations: {
setMyUserTicket(state, ticket) {
// state.myUserTicket = ticket
},
setMyUserId(state, id) {
// state.myUserId = id
},
setMyUserInfo(state, userInfo) {
// state.myUserInfo = userInfo
}
}
}
export default user
import Vue from 'vue'
import dayjs from './dayjs.js'
/**
* 这里的工具类使用比较频繁,自动挂到vue实例下
*/
export default {
$formatQuery(obj, noQst) {
if (!obj) return ''
let str = ''
Object.keys(obj).forEach((v, i) => {
str += (i ? '&' : '') + v + '=' + (typeof(obj[v]) === 'object' ? JSON.stringify(obj[v]) : obj[v])
})
return (!noQst && '?') + str
},
$toast(msg, icon, duration = 1500) {
return new Promise(resolve => {
uni.showToast({
title: msg,
duration,
icon: icon || 'none'
})
setTimeout(() => {
resolve()
}, duration)
})
},
$showModal(o) {
return uni.showModal(o).then(res => {
if (!res[1].confirm) {
return Promise.reject('')
}
})
},
$setPrePageData(func, data) {
const prevPage = getCurrentPages()[getCurrentPages().length - 2] //获取上一级页面实例
prevPage.$vm[func](data)
uni.navigateBack({
delta: 1
})
},
// 检测是否登录了,拓展业务
$checkLogin() {
let USER_TICLET = uni.getStorageSync("ticket") || "";
let USER_INFO = uni.getStorageSync('userInfo') || "{}";
return new Promise((resolve, reject) => {
if (USER_TICLET) {
resolve(JSON.parse(USER_INFO))
} else {
reject()
}
})
},
// 返回两个时间的差值
$getTimeGaps(start, end) {
start = new Date(this.$utils.dayjs(start)).getTime()
end = new Date(this.$utils.dayjs(end)).getTime()
if (start >= end) {
return {
finish: true,
gap: 0,
day: 0,
hour: '00',
minute: '00',
second: '00'
}
}
let v = Math.abs(end - start)
let day = Math.floor(v / 86400000);
let hour = Math.floor((v % 86400000) / 3600000);
let minute = Math.floor(((v % 86400000) % 3600000) / 60000);
let second = Math.floor((((v % 86400000) % 3600000) % 60000) / 1000);
hour = hour > 9 ? hour : "0" + hour;
minute = minute > 9 ? minute : "0" + minute;
second = second > 9 ? second : "0" + second;
return {
finish: start >= end, // 是否已结束
gap: v, // 相差的时间戳
day,
hour,
minute,
second
}
},
/**
* 前端加密
* @param {*} num 加密的数字或者字符
* @param {*} all 收尾是否全部加密
* @param {*} flag 加密的标识
*/
$setSafe(num = "", all = false, flag = "*",min=6 ) {
let strArr = String(num || '').split("");
strArr.length<min&& (strArr.length = min)
let destArr = [];
strArr.forEach((item, i) => {
// 不是全部加密,首位不加密
if (!all && (i == 0 || strArr.length - 1 == i)) {
destArr.push(item||'')
} else {
destArr.push(flag)
}
})
return destArr.join("")
},
/**
* 复制到剪贴板
* @param {Object} content
*/
$copy(content) {
uni.setClipboardData({
data: content
})
},
}
/**
* 日期工具类选用day.js
* 文档:https://dayjs.gitee.io/docs/zh-CN/parse/parse
*
*
* 简单用法:
* dayjs('2018-08-08') // parse
dayjs().format('{YYYY} MM-DDTHH:mm:ss SSS [Z] A') // display
dayjs().set('month', 3).month() // get & set
dayjs().add(1, 'year') // manipulate
dayjs().isBefore(dayjs()) // query
*/
import dayjs from 'dayjs'
var relativeTime = require('dayjs/plugin/relativeTime')
dayjs.extend(relativeTime)
require('dayjs/locale/zh-cn')
dayjs.locale('zh-cn') // 全局使用
export default dayjs
let _hooks = {}
const flatHooks = function (configHooks, hooks = {}, parentName) {
for (const key in configHooks) {
const subHook = configHooks[key]
const name = parentName ? `${parentName}:${key}` : key
if (typeof subHook === 'object' && subHook !== null) {
flatHooks(subHook, hooks, name)
} else {
hooks[name] = subHook
}
}
return hooks
}
const serial = function(tasks, fn) {
return tasks.reduce((promise, task) => promise.then((previous) => fn(task, previous)), Promise.resolve(null))
}
export default {
on(name, fn) {
if (!name || typeof fn !== 'function') {
return this;
}
_hooks[name] = _hooks[name] || []
_hooks[name].push(fn)
return this;
},
addHooks(configHooks) {
const hooks = flatHooks(configHooks)
for (const key in hooks) {
this.on(key, hooks[key])
}
return this;
},
callHook(name, ...args) {
if (!_hooks[name]) {
return
}
return serial(_hooks[name], fn=>fn(...args))
},
clearHook(name) {
if (name) {
delete _hooks[name]
}
return this;
},
clearHooks() {
_hooks = {}
return this;
}
}
\ No newline at end of file
import dayjs from "./dayjs.js"
import hooks from "./hooks.js"
import common from "./common.js"
import update from "./update.js"
import md5 from './md5.js'
export default {
dayjs,
hooks,
common,
update,
md5
}
module.exports = () => {
const updateManager = uni.getUpdateManager();
updateManager.onCheckForUpdate(function(res) {
console.info('检测到版本更新', res.hasUpdate);
});
updateManager.onUpdateReady(function() {
console.info('版本更新成功');
uni.showModal({
title: '更新提示',
content: '新版本已经准备好,是否重启应用?',
success(res) {
if (res.confirm) {
updateManager.applyUpdate();
}
}
})
});
updateManager.onUpdateFailed(function() {
console.error('版本更新失败');
});
}
@font-face {font-family: "xapp-icon";
src: url('iconfont.eot?t=1541754785875'); /* IE9*/
src: url('iconfont.eot?t=1541754785875#iefix') format('embedded-opentype'), /* IE6-IE8 */
url('data:application/x-font-woff;charset=utf-8;base64,d09GRgABAAAAAARkAAsAAAAABqwAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABCAAAADMAAABCsP6z7U9TLzIAAAE8AAAARAAAAFY8dkfyY21hcAAAAYAAAABKAAABcOcotapnbHlmAAABzAAAAKIAAACo5jm/V2hlYWQAAAJwAAAALwAAADYTNiU/aGhlYQAAAqAAAAAcAAAAJAfeA4NobXR4AAACvAAAAAgAAAAICAAAAGxvY2EAAALEAAAABgAAAAYAVAAAbWF4cAAAAswAAAAeAAAAIAENAD9uYW1lAAAC7AAAAVIAAAJ5VMPz4nBvc3QAAARAAAAAIwAAADRIXOPeeJxjYGRgYOBikGPQYWB0cfMJYeBgYGGAAJAMY05meiJQDMoDyrGAaQ4gZoOIAgCKIwNPAHicY2BkYWCcwMDKwMHUyXSGgYGhH0IzvmYwYuRgYGBiYGVmwAoC0lxTGByeMTxjYG7438AQw9zA0AAUZgTJAQDdJQvjeJztkLENgDAQA8/KQ4EYgSo1s1Cxf8kaycfAFrF0lnz66oEFKMmZBOhGjFxpZV/Y7IPqmxj+obW/c4cbrczs7uNb/tUL6ijqCWkAAHicHccxDoIwFIDh91ppoaUPawRJaDBhgA0TB9yUuzBzKKIHMTHRnQMw6hmcFB3+5PsBAT5XfuMt7AG8codlEaGQNZ6wma/G46xfzSHHLf5jIkKakUjB3qF6GGfuWsc5r5ivBy2C2Ey0ER3llIhOJjTROhBq0D6rFsuwRa+XsvcQi/RFTl105iwvmDVjhkhmNJYV3DqnzjqLnunKAnwBxfoYKQAAeJxjYGRgYADi1Ezvc/H8Nl8ZuFkYQOAGd8FCBP3/AAsDswOQy8HABBIFABYdCZAAeJxjYGRgYG7438AQw8IAAkCSkQEVMAEARwgCawQAAAAEAAAAAAAAAABUAAB4nGNgZGBgYGIwZgDRIBYDAxcQMjD8B/MZAA2SAU0AAHicbZE9TsNAEIWf84fiCIogKGEbKEBxfhqklERKCroU6R1n7SSyvdZ6EyVH4DycgRPQ03EGWl6cxUXAqx198+bNeKQF0MYnHBy/K94jO2gyO3IFZ7ixXKV+Z7lG9izX0cKT5Qb1Z8suHvFiuYVLbDnBqTWZPeDVssMd3ixXcIF3y1XqH5Zr5C/LdVzj23IDbefcsouZc2u5hXtn44609I1ciPlerAKVhio17s7Pss4hm8poE/u6zEuYSZ2vVCr6Xq/UJjKV+ndWvo0GxoQi1CoRYw6VcaxEptVaBsZbGpMNu93Q6l6gEq42goaED8O4gMAce8YVAiikCIto6NvRk/F0ytqUHRE2iFnR/9T/KjN2aOTMD5lAn8/U+8c3oS8tvKd75XyoCAOqhrsJXs2OhDS2m0ruE5MFJx5qayoBdQ/LoivDEF2e8MTvFf9OfgAzHHCmAAB4nGNgYoAALgbsgImRiZGZgau8NCszMb8iMy+dgQEAI6wEZQA=') format('woff'),
url('iconfont.ttf?t=1541754785875') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/
url('iconfont.svg?t=1541754785875#xapp-icon') format('svg'); /* iOS 4.1- */
}
@font-face {
font-family: 'iconfont'; /* Project id 2804669 */
src: url('//at.alicdn.com/t/font_2804669_t90edttnz7.woff2?t=1636014691761') format('woff2'),
url('//at.alicdn.com/t/font_2804669_t90edttnz7.woff?t=1636014691761') format('woff'),
url('//at.alicdn.com/t/font_2804669_t90edttnz7.ttf?t=1636014691761') format('truetype');
}
.xapp-icon {
font-family:"xapp-icon" !important;
font-size:16px;
font-style:normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.icon-wujiaoxing:before { content: "\e600"; }
import Vue from 'vue'
import App from './App'
import framework, {
store,
utils
} from './framework'
Vue.config.productionTip = false
App.mpType = 'app'
const app = new Vue({
...App
})
import uView from 'uview-ui'
Vue.use(uView)
uni.$u.config.unit = 'rpx'
import services from './service/index.js'
Vue.prototype.$service = services
Vue.use(framework, {
store: {},
hooks: {
beforeHttp: options => { // 发请求前的钩子
let token = uni.getStorageSync("XT_TOKEN")
if (!options.isLogin && !token) {
services.user.reAuth()
return Promise.reject('token为空,请先登陆');
}
options.headers = {
...(options.headers || {}),
'token': token || ''
}
},
resolveHttpSuccess: (res, options) => { // statusCode等于200,认为接口调用成功,进入此钩子
console.log('request => ', options, res)
return options.returnAll ? res.data : (res.data.data || res.data);
},
catchHttpError: (err, options) => { // statusCode不等于200,进入此钩子
console.error('request => ', err, options)
if(err.code != 0){
if(err.code == 115){
services.user.reAuth()
}
return Promise.reject(err.msg || '网络连接失败');
}
if (err.data) {
return Promise.reject(err.data.msg || err.data.error || err.data.message || err.data.status)
}
return Promise.reject(err.errMsg || '网络连接失败');
}
}
})
app.$mount()
{
"name" : "sport-train",
"appid" : "__UNI__ED7B062",
"description" : "多平台快速开发的UI框架",
"versionName" : "1.0.0",
"versionCode" : 1,
"transformPx" : false,
"app-plus" : {
"optimization" : {
"subPackages" : false
},
"safearea" : {
"bottom" : {
"offset" : "none"
}
},
"splashscreen" : {
"alwaysShowBeforeRender" : true,
"waiting" : true,
"autoclose" : true,
"delay" : 0
},
"usingComponents" : true,
"nvueCompiler" : "uni-app",
"compilerVersion" : 3,
"modules" : {
"Webview-x5" : {}
},
"distribute" : {
"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.READ_CONTACTS\"/>",
"<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.WRITE_CONTACTS\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
"<uses-permission android:name=\"android.permission.CAMERA\"/>",
"<uses-permission android:name=\"android.permission.RECORD_AUDIO\"/>",
"<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
"<uses-permission android:name=\"android.permission.MODIFY_AUDIO_SETTINGS\"/>",
"<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.CALL_PHONE\"/>",
"<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\"/>",
"<uses-feature android:name=\"android.hardware.camera\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\"/>",
"<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
],
"abiFilters" : [ "armeabi-v7a", "arm64-v8a" ]
},
"ios" : {
"idfa" : false
},
"sdkConfigs" : {
"ad" : {}
},
"icons" : {
"android" : {
"hdpi" : "unpackage/res/icons/72x72.png",
"xhdpi" : "unpackage/res/icons/96x96.png",
"xxhdpi" : "unpackage/res/icons/144x144.png",
"xxxhdpi" : "unpackage/res/icons/192x192.png"
},
"ios" : {
"appstore" : "unpackage/res/icons/1024x1024.png",
"ipad" : {
"app" : "unpackage/res/icons/76x76.png",
"app@2x" : "unpackage/res/icons/152x152.png",
"notification" : "unpackage/res/icons/20x20.png",
"notification@2x" : "unpackage/res/icons/40x40.png",
"proapp@2x" : "unpackage/res/icons/167x167.png",
"settings" : "unpackage/res/icons/29x29.png",
"settings@2x" : "unpackage/res/icons/58x58.png",
"spotlight" : "unpackage/res/icons/40x40.png",
"spotlight@2x" : "unpackage/res/icons/80x80.png"
},
"iphone" : {
"app@2x" : "unpackage/res/icons/120x120.png",
"app@3x" : "unpackage/res/icons/180x180.png",
"notification@2x" : "unpackage/res/icons/40x40.png",
"notification@3x" : "unpackage/res/icons/60x60.png",
"settings@2x" : "unpackage/res/icons/58x58.png",
"settings@3x" : "unpackage/res/icons/87x87.png",
"spotlight@2x" : "unpackage/res/icons/80x80.png",
"spotlight@3x" : "unpackage/res/icons/120x120.png"
}
}
}
}
},
"quickapp" : {},
"mp-weixin" : {
"appid" : "wx6a8a8bc94fc25b89",
"setting" : {
"urlCheck" : false,
"es6" : false,
"minified" : true,
"postcss" : false
},
"optimization" : {
"subPackages" : false
},
"usingComponents" : true
},
"mp-alipay" : {
"usingComponents" : true,
"component2" : true
},
"mp-qq" : {
"optimization" : {
"subPackages" : false
},
"appid" : "15646153"
},
"mp-baidu" : {
"usingComponents" : true,
"appid" : ""
},
"mp-toutiao" : {
"usingComponents" : true,
"appid" : ""
},
"h5" : {
"router" : {
"mode" : "history",
"base" : ""
},
"optimization" : {
"treeShaking" : {
"enable" : false
}
},
"title" : "uView UI",
"sdkConfigs" : {
"maps" : {
"qqmap" : {
"key" : ""
}
}
},
"domain" : ""
}
}
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
module.exports = (function() {
var __MODS__ = {};
var __DEFINE__ = function(modId, func, req) { var m = { exports: {}, _tempexports: {} }; __MODS__[modId] = { status: 0, func: func, req: req, m: m }; };
var __REQUIRE__ = function(modId, source) { if(!__MODS__[modId]) return require(source); if(!__MODS__[modId].status) { var m = __MODS__[modId].m; m._exports = m._tempexports; var desp = Object.getOwnPropertyDescriptor(m, "exports"); if (desp && desp.configurable) Object.defineProperty(m, "exports", { set: function (val) { if(typeof val === "object" && val !== m._exports) { m._exports.__proto__ = val.__proto__; Object.keys(val).forEach(function (k) { m._exports[k] = val[k]; }); } m._tempexports = val }, get: function () { return m._tempexports; } }); __MODS__[modId].status = 1; __MODS__[modId].func(__MODS__[modId].req, m, m.exports); } return __MODS__[modId].m.exports; };
var __REQUIRE_WILDCARD__ = function(obj) { if(obj && obj.__esModule) { return obj; } else { var newObj = {}; if(obj != null) { for(var k in obj) { if (Object.prototype.hasOwnProperty.call(obj, k)) newObj[k] = obj[k]; } } newObj.default = obj; return newObj; } };
var __REQUIRE_DEFAULT__ = function(obj) { return obj && obj.__esModule ? obj.default : obj; };
__DEFINE__(1654568288080, function(require, module, exports) {
var wrappy = require('wrappy')
var reqs = Object.create(null)
var once = require('once')
module.exports = wrappy(inflight)
function inflight (key, cb) {
if (reqs[key]) {
reqs[key].push(cb)
return null
} else {
reqs[key] = [cb]
return makeres(key)
}
}
function makeres (key) {
return once(function RES () {
var cbs = reqs[key]
var len = cbs.length
var args = slice(arguments)
// XXX It's somewhat ambiguous whether a new callback added in this
// pass should be queued for later execution if something in the
// list of callbacks throws, or if it should just be discarded.
// However, it's such an edge case that it hardly matters, and either
// choice is likely as surprising as the other.
// As it happens, we do go ahead and schedule it for later execution.
try {
for (var i = 0; i < len; i++) {
cbs[i].apply(null, args)
}
} finally {
if (cbs.length > len) {
// added more in the interim.
// de-zalgo, just in case, but don't call again.
cbs.splice(0, len)
process.nextTick(function () {
RES.apply(null, args)
})
} else {
delete reqs[key]
}
}
})
}
function slice (args) {
var length = args.length
var array = []
for (var i = 0; i < length; i++) array[i] = args[i]
return array
}
}, function(modId) {var map = {}; return __REQUIRE__(map[modId], modId); })
return __REQUIRE__(1654568288080);
})()
//miniprogram-npm-outsideDeps=["wrappy","once"]
//# sourceMappingURL=index.js.map
\ No newline at end of file
{"version":3,"sources":["inflight.js"],"names":[],"mappings":";;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"index.js","sourcesContent":["var wrappy = require('wrappy')\nvar reqs = Object.create(null)\nvar once = require('once')\n\nmodule.exports = wrappy(inflight)\n\nfunction inflight (key, cb) {\n if (reqs[key]) {\n reqs[key].push(cb)\n return null\n } else {\n reqs[key] = [cb]\n return makeres(key)\n }\n}\n\nfunction makeres (key) {\n return once(function RES () {\n var cbs = reqs[key]\n var len = cbs.length\n var args = slice(arguments)\n\n // XXX It's somewhat ambiguous whether a new callback added in this\n // pass should be queued for later execution if something in the\n // list of callbacks throws, or if it should just be discarded.\n // However, it's such an edge case that it hardly matters, and either\n // choice is likely as surprising as the other.\n // As it happens, we do go ahead and schedule it for later execution.\n try {\n for (var i = 0; i < len; i++) {\n cbs[i].apply(null, args)\n }\n } finally {\n if (cbs.length > len) {\n // added more in the interim.\n // de-zalgo, just in case, but don't call again.\n cbs.splice(0, len)\n process.nextTick(function () {\n RES.apply(null, args)\n })\n } else {\n delete reqs[key]\n }\n }\n })\n}\n\nfunction slice (args) {\n var length = args.length\n var array = []\n\n for (var i = 0; i < length; i++) array[i] = args[i]\n return array\n}\n"]}
\ No newline at end of file
module.exports = (function() {
var __MODS__ = {};
var __DEFINE__ = function(modId, func, req) { var m = { exports: {}, _tempexports: {} }; __MODS__[modId] = { status: 0, func: func, req: req, m: m }; };
var __REQUIRE__ = function(modId, source) { if(!__MODS__[modId]) return require(source); if(!__MODS__[modId].status) { var m = __MODS__[modId].m; m._exports = m._tempexports; var desp = Object.getOwnPropertyDescriptor(m, "exports"); if (desp && desp.configurable) Object.defineProperty(m, "exports", { set: function (val) { if(typeof val === "object" && val !== m._exports) { m._exports.__proto__ = val.__proto__; Object.keys(val).forEach(function (k) { m._exports[k] = val[k]; }); } m._tempexports = val }, get: function () { return m._tempexports; } }); __MODS__[modId].status = 1; __MODS__[modId].func(__MODS__[modId].req, m, m.exports); } return __MODS__[modId].m.exports; };
var __REQUIRE_WILDCARD__ = function(obj) { if(obj && obj.__esModule) { return obj; } else { var newObj = {}; if(obj != null) { for(var k in obj) { if (Object.prototype.hasOwnProperty.call(obj, k)) newObj[k] = obj[k]; } } newObj.default = obj; return newObj; } };
var __REQUIRE_DEFAULT__ = function(obj) { return obj && obj.__esModule ? obj.default : obj; };
__DEFINE__(1654568288078, function(require, module, exports) {
var wrappy = require('wrappy')
module.exports = wrappy(once)
module.exports.strict = wrappy(onceStrict)
once.proto = once(function () {
Object.defineProperty(Function.prototype, 'once', {
value: function () {
return once(this)
},
configurable: true
})
Object.defineProperty(Function.prototype, 'onceStrict', {
value: function () {
return onceStrict(this)
},
configurable: true
})
})
function once (fn) {
var f = function () {
if (f.called) return f.value
f.called = true
return f.value = fn.apply(this, arguments)
}
f.called = false
return f
}
function onceStrict (fn) {
var f = function () {
if (f.called)
throw new Error(f.onceError)
f.called = true
return f.value = fn.apply(this, arguments)
}
var name = fn.name || 'Function wrapped with `once`'
f.onceError = name + " shouldn't be called more than once"
f.called = false
return f
}
}, function(modId) {var map = {}; return __REQUIRE__(map[modId], modId); })
return __REQUIRE__(1654568288078);
})()
//miniprogram-npm-outsideDeps=["wrappy"]
//# sourceMappingURL=index.js.map
\ No newline at end of file
{"version":3,"sources":["once.js"],"names":[],"mappings":";;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"index.js","sourcesContent":["var wrappy = require('wrappy')\nmodule.exports = wrappy(once)\nmodule.exports.strict = wrappy(onceStrict)\n\nonce.proto = once(function () {\n Object.defineProperty(Function.prototype, 'once', {\n value: function () {\n return once(this)\n },\n configurable: true\n })\n\n Object.defineProperty(Function.prototype, 'onceStrict', {\n value: function () {\n return onceStrict(this)\n },\n configurable: true\n })\n})\n\nfunction once (fn) {\n var f = function () {\n if (f.called) return f.value\n f.called = true\n return f.value = fn.apply(this, arguments)\n }\n f.called = false\n return f\n}\n\nfunction onceStrict (fn) {\n var f = function () {\n if (f.called)\n throw new Error(f.onceError)\n f.called = true\n return f.value = fn.apply(this, arguments)\n }\n var name = fn.name || 'Function wrapped with `once`'\n f.onceError = name + \" shouldn't be called more than once\"\n f.called = false\n return f\n}\n"]}
\ No newline at end of file
module.exports = (function() {
var __MODS__ = {};
var __DEFINE__ = function(modId, func, req) { var m = { exports: {}, _tempexports: {} }; __MODS__[modId] = { status: 0, func: func, req: req, m: m }; };
var __REQUIRE__ = function(modId, source) { if(!__MODS__[modId]) return require(source); if(!__MODS__[modId].status) { var m = __MODS__[modId].m; m._exports = m._tempexports; var desp = Object.getOwnPropertyDescriptor(m, "exports"); if (desp && desp.configurable) Object.defineProperty(m, "exports", { set: function (val) { if(typeof val === "object" && val !== m._exports) { m._exports.__proto__ = val.__proto__; Object.keys(val).forEach(function (k) { m._exports[k] = val[k]; }); } m._tempexports = val }, get: function () { return m._tempexports; } }); __MODS__[modId].status = 1; __MODS__[modId].func(__MODS__[modId].req, m, m.exports); } return __MODS__[modId].m.exports; };
var __REQUIRE_WILDCARD__ = function(obj) { if(obj && obj.__esModule) { return obj; } else { var newObj = {}; if(obj != null) { for(var k in obj) { if (Object.prototype.hasOwnProperty.call(obj, k)) newObj[k] = obj[k]; } } newObj.default = obj; return newObj; } };
var __REQUIRE_DEFAULT__ = function(obj) { return obj && obj.__esModule ? obj.default : obj; };
__DEFINE__(1654568288077, function(require, module, exports) {
// Returns a wrapper function that returns a wrapped callback
// The wrapper function should do some stuff, and return a
// presumably different callback function.
// This makes sure that own properties are retained, so that
// decorations and such are not lost along the way.
module.exports = wrappy
function wrappy (fn, cb) {
if (fn && cb) return wrappy(fn)(cb)
if (typeof fn !== 'function')
throw new TypeError('need wrapper function')
Object.keys(fn).forEach(function (k) {
wrapper[k] = fn[k]
})
return wrapper
function wrapper() {
var args = new Array(arguments.length)
for (var i = 0; i < args.length; i++) {
args[i] = arguments[i]
}
var ret = fn.apply(this, args)
var cb = args[args.length-1]
if (typeof ret === 'function' && ret !== cb) {
Object.keys(cb).forEach(function (k) {
ret[k] = cb[k]
})
}
return ret
}
}
}, function(modId) {var map = {}; return __REQUIRE__(map[modId], modId); })
return __REQUIRE__(1654568288077);
})()
//miniprogram-npm-outsideDeps=[]
//# sourceMappingURL=index.js.map
\ No newline at end of file
{"version":3,"sources":["wrappy.js"],"names":[],"mappings":";;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"index.js","sourcesContent":["// Returns a wrapper function that returns a wrapped callback\n// The wrapper function should do some stuff, and return a\n// presumably different callback function.\n// This makes sure that own properties are retained, so that\n// decorations and such are not lost along the way.\nmodule.exports = wrappy\nfunction wrappy (fn, cb) {\n if (fn && cb) return wrappy(fn)(cb)\n\n if (typeof fn !== 'function')\n throw new TypeError('need wrapper function')\n\n Object.keys(fn).forEach(function (k) {\n wrapper[k] = fn[k]\n })\n\n return wrapper\n\n function wrapper() {\n var args = new Array(arguments.length)\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i]\n }\n var ret = fn.apply(this, args)\n var cb = args[args.length-1]\n if (typeof ret === 'function' && ret !== cb) {\n Object.keys(cb).forEach(function (k) {\n ret[k] = cb[k]\n })\n }\n return ret\n }\n}\n"]}
\ No newline at end of file
module.exports = (function() {
var __MODS__ = {};
var __DEFINE__ = function(modId, func, req) { var m = { exports: {}, _tempexports: {} }; __MODS__[modId] = { status: 0, func: func, req: req, m: m }; };
var __REQUIRE__ = function(modId, source) { if(!__MODS__[modId]) return require(source); if(!__MODS__[modId].status) { var m = __MODS__[modId].m; m._exports = m._tempexports; var desp = Object.getOwnPropertyDescriptor(m, "exports"); if (desp && desp.configurable) Object.defineProperty(m, "exports", { set: function (val) { if(typeof val === "object" && val !== m._exports) { m._exports.__proto__ = val.__proto__; Object.keys(val).forEach(function (k) { m._exports[k] = val[k]; }); } m._tempexports = val }, get: function () { return m._tempexports; } }); __MODS__[modId].status = 1; __MODS__[modId].func(__MODS__[modId].req, m, m.exports); } return __MODS__[modId].m.exports; };
var __REQUIRE_WILDCARD__ = function(obj) { if(obj && obj.__esModule) { return obj; } else { var newObj = {}; if(obj != null) { for(var k in obj) { if (Object.prototype.hasOwnProperty.call(obj, k)) newObj[k] = obj[k]; } } newObj.default = obj; return newObj; } };
var __REQUIRE_DEFAULT__ = function(obj) { return obj && obj.__esModule ? obj.default : obj; };
__DEFINE__(1654568288079, function(require, module, exports) {
// Returns a wrapper function that returns a wrapped callback
// The wrapper function should do some stuff, and return a
// presumably different callback function.
// This makes sure that own properties are retained, so that
// decorations and such are not lost along the way.
module.exports = wrappy
function wrappy (fn, cb) {
if (fn && cb) return wrappy(fn)(cb)
if (typeof fn !== 'function')
throw new TypeError('need wrapper function')
Object.keys(fn).forEach(function (k) {
wrapper[k] = fn[k]
})
return wrapper
function wrapper() {
var args = new Array(arguments.length)
for (var i = 0; i < args.length; i++) {
args[i] = arguments[i]
}
var ret = fn.apply(this, args)
var cb = args[args.length-1]
if (typeof ret === 'function' && ret !== cb) {
Object.keys(cb).forEach(function (k) {
ret[k] = cb[k]
})
}
return ret
}
}
}, function(modId) {var map = {}; return __REQUIRE__(map[modId], modId); })
return __REQUIRE__(1654568288079);
})()
//miniprogram-npm-outsideDeps=[]
//# sourceMappingURL=index.js.map
\ No newline at end of file
{"version":3,"sources":["wrappy.js"],"names":[],"mappings":";;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"index.js","sourcesContent":["// Returns a wrapper function that returns a wrapped callback\n// The wrapper function should do some stuff, and return a\n// presumably different callback function.\n// This makes sure that own properties are retained, so that\n// decorations and such are not lost along the way.\nmodule.exports = wrappy\nfunction wrappy (fn, cb) {\n if (fn && cb) return wrappy(fn)(cb)\n\n if (typeof fn !== 'function')\n throw new TypeError('need wrapper function')\n\n Object.keys(fn).forEach(function (k) {\n wrapper[k] = fn[k]\n })\n\n return wrapper\n\n function wrapper() {\n var args = new Array(arguments.length)\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i]\n }\n var ret = fn.apply(this, args)\n var cb = args[args.length-1]\n if (typeof ret === 'function' && ret !== cb) {\n Object.keys(cb).forEach(function (k) {\n ret[k] = cb[k]\n })\n }\n return ret\n }\n}\n"]}
\ No newline at end of file
module.exports = (function() {
var __MODS__ = {};
var __DEFINE__ = function(modId, func, req) { var m = { exports: {}, _tempexports: {} }; __MODS__[modId] = { status: 0, func: func, req: req, m: m }; };
var __REQUIRE__ = function(modId, source) { if(!__MODS__[modId]) return require(source); if(!__MODS__[modId].status) { var m = __MODS__[modId].m; m._exports = m._tempexports; var desp = Object.getOwnPropertyDescriptor(m, "exports"); if (desp && desp.configurable) Object.defineProperty(m, "exports", { set: function (val) { if(typeof val === "object" && val !== m._exports) { m._exports.__proto__ = val.__proto__; Object.keys(val).forEach(function (k) { m._exports[k] = val[k]; }); } m._tempexports = val }, get: function () { return m._tempexports; } }); __MODS__[modId].status = 1; __MODS__[modId].func(__MODS__[modId].req, m, m.exports); } return __MODS__[modId].m.exports; };
var __REQUIRE_WILDCARD__ = function(obj) { if(obj && obj.__esModule) { return obj; } else { var newObj = {}; if(obj != null) { for(var k in obj) { if (Object.prototype.hasOwnProperty.call(obj, k)) newObj[k] = obj[k]; } } newObj.default = obj; return newObj; } };
var __REQUIRE_DEFAULT__ = function(obj) { return obj && obj.__esModule ? obj.default : obj; };
__DEFINE__(1654568288081, function(require, module, exports) {
try {
var util = require('util');
/* istanbul ignore next */
if (typeof util.inherits !== 'function') throw '';
module.exports = util.inherits;
} catch (e) {
/* istanbul ignore next */
module.exports = require('./inherits_browser.js');
}
}, function(modId) {var map = {"./inherits_browser.js":1654568288082}; return __REQUIRE__(map[modId], modId); })
__DEFINE__(1654568288082, function(require, module, exports) {
if (typeof Object.create === 'function') {
// implementation from standard node.js 'util' module
module.exports = function inherits(ctor, superCtor) {
if (superCtor) {
ctor.super_ = superCtor
ctor.prototype = Object.create(superCtor.prototype, {
constructor: {
value: ctor,
enumerable: false,
writable: true,
configurable: true
}
})
}
};
} else {
// old school shim for old browsers
module.exports = function inherits(ctor, superCtor) {
if (superCtor) {
ctor.super_ = superCtor
var TempCtor = function () {}
TempCtor.prototype = superCtor.prototype
ctor.prototype = new TempCtor()
ctor.prototype.constructor = ctor
}
}
}
}, function(modId) { var map = {}; return __REQUIRE__(map[modId], modId); })
return __REQUIRE__(1654568288081);
})()
//miniprogram-npm-outsideDeps=["util"]
//# sourceMappingURL=index.js.map
\ No newline at end of file
{"version":3,"sources":["inherits.js","inherits_browser.js"],"names":[],"mappings":";;;;;;;AAAA;AACA;AACA;AACA,ACHA;ADIA,ACHA;ADIA,ACHA;ADIA,ACHA;ADIA,ACHA;ADIA,ACHA;ADIA,ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"index.js","sourcesContent":["try {\n var util = require('util');\n /* istanbul ignore next */\n if (typeof util.inherits !== 'function') throw '';\n module.exports = util.inherits;\n} catch (e) {\n /* istanbul ignore next */\n module.exports = require('./inherits_browser.js');\n}\n","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n"]}
\ No newline at end of file
module.exports = (function() {
var __MODS__ = {};
var __DEFINE__ = function(modId, func, req) { var m = { exports: {}, _tempexports: {} }; __MODS__[modId] = { status: 0, func: func, req: req, m: m }; };
var __REQUIRE__ = function(modId, source) { if(!__MODS__[modId]) return require(source); if(!__MODS__[modId].status) { var m = __MODS__[modId].m; m._exports = m._tempexports; var desp = Object.getOwnPropertyDescriptor(m, "exports"); if (desp && desp.configurable) Object.defineProperty(m, "exports", { set: function (val) { if(typeof val === "object" && val !== m._exports) { m._exports.__proto__ = val.__proto__; Object.keys(val).forEach(function (k) { m._exports[k] = val[k]; }); } m._tempexports = val }, get: function () { return m._tempexports; } }); __MODS__[modId].status = 1; __MODS__[modId].func(__MODS__[modId].req, m, m.exports); } return __MODS__[modId].m.exports; };
var __REQUIRE_WILDCARD__ = function(obj) { if(obj && obj.__esModule) { return obj; } else { var newObj = {}; if(obj != null) { for(var k in obj) { if (Object.prototype.hasOwnProperty.call(obj, k)) newObj[k] = obj[k]; } } newObj.default = obj; return newObj; } };
var __REQUIRE_DEFAULT__ = function(obj) { return obj && obj.__esModule ? obj.default : obj; };
__DEFINE__(1654568288085, function(require, module, exports) {
var concatMap = require('concat-map');
var balanced = require('balanced-match');
module.exports = expandTop;
var escSlash = '\0SLASH'+Math.random()+'\0';
var escOpen = '\0OPEN'+Math.random()+'\0';
var escClose = '\0CLOSE'+Math.random()+'\0';
var escComma = '\0COMMA'+Math.random()+'\0';
var escPeriod = '\0PERIOD'+Math.random()+'\0';
function numeric(str) {
return parseInt(str, 10) == str
? parseInt(str, 10)
: str.charCodeAt(0);
}
function escapeBraces(str) {
return str.split('\\\\').join(escSlash)
.split('\\{').join(escOpen)
.split('\\}').join(escClose)
.split('\\,').join(escComma)
.split('\\.').join(escPeriod);
}
function unescapeBraces(str) {
return str.split(escSlash).join('\\')
.split(escOpen).join('{')
.split(escClose).join('}')
.split(escComma).join(',')
.split(escPeriod).join('.');
}
// Basically just str.split(","), but handling cases
// where we have nested braced sections, which should be
// treated as individual members, like {a,{b,c},d}
function parseCommaParts(str) {
if (!str)
return [''];
var parts = [];
var m = balanced('{', '}', str);
if (!m)
return str.split(',');
var pre = m.pre;
var body = m.body;
var post = m.post;
var p = pre.split(',');
p[p.length-1] += '{' + body + '}';
var postParts = parseCommaParts(post);
if (post.length) {
p[p.length-1] += postParts.shift();
p.push.apply(p, postParts);
}
parts.push.apply(parts, p);
return parts;
}
function expandTop(str) {
if (!str)
return [];
// I don't know why Bash 4.3 does this, but it does.
// Anything starting with {} will have the first two bytes preserved
// but *only* at the top level, so {},a}b will not expand to anything,
// but a{},b}c will be expanded to [a}c,abc].
// One could argue that this is a bug in Bash, but since the goal of
// this module is to match Bash's rules, we escape a leading {}
if (str.substr(0, 2) === '{}') {
str = '\\{\\}' + str.substr(2);
}
return expand(escapeBraces(str), true).map(unescapeBraces);
}
function identity(e) {
return e;
}
function embrace(str) {
return '{' + str + '}';
}
function isPadded(el) {
return /^-?0\d/.test(el);
}
function lte(i, y) {
return i <= y;
}
function gte(i, y) {
return i >= y;
}
function expand(str, isTop) {
var expansions = [];
var m = balanced('{', '}', str);
if (!m || /\$$/.test(m.pre)) return [str];
var isNumericSequence = /^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(m.body);
var isAlphaSequence = /^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(m.body);
var isSequence = isNumericSequence || isAlphaSequence;
var isOptions = m.body.indexOf(',') >= 0;
if (!isSequence && !isOptions) {
// {a},b}
if (m.post.match(/,.*\}/)) {
str = m.pre + '{' + m.body + escClose + m.post;
return expand(str);
}
return [str];
}
var n;
if (isSequence) {
n = m.body.split(/\.\./);
} else {
n = parseCommaParts(m.body);
if (n.length === 1) {
// x{{a,b}}y ==> x{a}y x{b}y
n = expand(n[0], false).map(embrace);
if (n.length === 1) {
var post = m.post.length
? expand(m.post, false)
: [''];
return post.map(function(p) {
return m.pre + n[0] + p;
});
}
}
}
// at this point, n is the parts, and we know it's not a comma set
// with a single entry.
// no need to expand pre, since it is guaranteed to be free of brace-sets
var pre = m.pre;
var post = m.post.length
? expand(m.post, false)
: [''];
var N;
if (isSequence) {
var x = numeric(n[0]);
var y = numeric(n[1]);
var width = Math.max(n[0].length, n[1].length)
var incr = n.length == 3
? Math.abs(numeric(n[2]))
: 1;
var test = lte;
var reverse = y < x;
if (reverse) {
incr *= -1;
test = gte;
}
var pad = n.some(isPadded);
N = [];
for (var i = x; test(i, y); i += incr) {
var c;
if (isAlphaSequence) {
c = String.fromCharCode(i);
if (c === '\\')
c = '';
} else {
c = String(i);
if (pad) {
var need = width - c.length;
if (need > 0) {
var z = new Array(need + 1).join('0');
if (i < 0)
c = '-' + z + c.slice(1);
else
c = z + c;
}
}
}
N.push(c);
}
} else {
N = concatMap(n, function(el) { return expand(el, false) });
}
for (var j = 0; j < N.length; j++) {
for (var k = 0; k < post.length; k++) {
var expansion = pre + N[j] + post[k];
if (!isTop || isSequence || expansion)
expansions.push(expansion);
}
}
return expansions;
}
}, function(modId) {var map = {}; return __REQUIRE__(map[modId], modId); })
return __REQUIRE__(1654568288085);
})()
//miniprogram-npm-outsideDeps=["concat-map","balanced-match"]
//# sourceMappingURL=index.js.map
\ No newline at end of file
{"version":3,"sources":["index.js"],"names":[],"mappings":";;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"index.js","sourcesContent":["var concatMap = require('concat-map');\nvar balanced = require('balanced-match');\n\nmodule.exports = expandTop;\n\nvar escSlash = '\\0SLASH'+Math.random()+'\\0';\nvar escOpen = '\\0OPEN'+Math.random()+'\\0';\nvar escClose = '\\0CLOSE'+Math.random()+'\\0';\nvar escComma = '\\0COMMA'+Math.random()+'\\0';\nvar escPeriod = '\\0PERIOD'+Math.random()+'\\0';\n\nfunction numeric(str) {\n return parseInt(str, 10) == str\n ? parseInt(str, 10)\n : str.charCodeAt(0);\n}\n\nfunction escapeBraces(str) {\n return str.split('\\\\\\\\').join(escSlash)\n .split('\\\\{').join(escOpen)\n .split('\\\\}').join(escClose)\n .split('\\\\,').join(escComma)\n .split('\\\\.').join(escPeriod);\n}\n\nfunction unescapeBraces(str) {\n return str.split(escSlash).join('\\\\')\n .split(escOpen).join('{')\n .split(escClose).join('}')\n .split(escComma).join(',')\n .split(escPeriod).join('.');\n}\n\n\n// Basically just str.split(\",\"), but handling cases\n// where we have nested braced sections, which should be\n// treated as individual members, like {a,{b,c},d}\nfunction parseCommaParts(str) {\n if (!str)\n return [''];\n\n var parts = [];\n var m = balanced('{', '}', str);\n\n if (!m)\n return str.split(',');\n\n var pre = m.pre;\n var body = m.body;\n var post = m.post;\n var p = pre.split(',');\n\n p[p.length-1] += '{' + body + '}';\n var postParts = parseCommaParts(post);\n if (post.length) {\n p[p.length-1] += postParts.shift();\n p.push.apply(p, postParts);\n }\n\n parts.push.apply(parts, p);\n\n return parts;\n}\n\nfunction expandTop(str) {\n if (!str)\n return [];\n\n // I don't know why Bash 4.3 does this, but it does.\n // Anything starting with {} will have the first two bytes preserved\n // but *only* at the top level, so {},a}b will not expand to anything,\n // but a{},b}c will be expanded to [a}c,abc].\n // One could argue that this is a bug in Bash, but since the goal of\n // this module is to match Bash's rules, we escape a leading {}\n if (str.substr(0, 2) === '{}') {\n str = '\\\\{\\\\}' + str.substr(2);\n }\n\n return expand(escapeBraces(str), true).map(unescapeBraces);\n}\n\nfunction identity(e) {\n return e;\n}\n\nfunction embrace(str) {\n return '{' + str + '}';\n}\nfunction isPadded(el) {\n return /^-?0\\d/.test(el);\n}\n\nfunction lte(i, y) {\n return i <= y;\n}\nfunction gte(i, y) {\n return i >= y;\n}\n\nfunction expand(str, isTop) {\n var expansions = [];\n\n var m = balanced('{', '}', str);\n if (!m || /\\$$/.test(m.pre)) return [str];\n\n var isNumericSequence = /^-?\\d+\\.\\.-?\\d+(?:\\.\\.-?\\d+)?$/.test(m.body);\n var isAlphaSequence = /^[a-zA-Z]\\.\\.[a-zA-Z](?:\\.\\.-?\\d+)?$/.test(m.body);\n var isSequence = isNumericSequence || isAlphaSequence;\n var isOptions = m.body.indexOf(',') >= 0;\n if (!isSequence && !isOptions) {\n // {a},b}\n if (m.post.match(/,.*\\}/)) {\n str = m.pre + '{' + m.body + escClose + m.post;\n return expand(str);\n }\n return [str];\n }\n\n var n;\n if (isSequence) {\n n = m.body.split(/\\.\\./);\n } else {\n n = parseCommaParts(m.body);\n if (n.length === 1) {\n // x{{a,b}}y ==> x{a}y x{b}y\n n = expand(n[0], false).map(embrace);\n if (n.length === 1) {\n var post = m.post.length\n ? expand(m.post, false)\n : [''];\n return post.map(function(p) {\n return m.pre + n[0] + p;\n });\n }\n }\n }\n\n // at this point, n is the parts, and we know it's not a comma set\n // with a single entry.\n\n // no need to expand pre, since it is guaranteed to be free of brace-sets\n var pre = m.pre;\n var post = m.post.length\n ? expand(m.post, false)\n : [''];\n\n var N;\n\n if (isSequence) {\n var x = numeric(n[0]);\n var y = numeric(n[1]);\n var width = Math.max(n[0].length, n[1].length)\n var incr = n.length == 3\n ? Math.abs(numeric(n[2]))\n : 1;\n var test = lte;\n var reverse = y < x;\n if (reverse) {\n incr *= -1;\n test = gte;\n }\n var pad = n.some(isPadded);\n\n N = [];\n\n for (var i = x; test(i, y); i += incr) {\n var c;\n if (isAlphaSequence) {\n c = String.fromCharCode(i);\n if (c === '\\\\')\n c = '';\n } else {\n c = String(i);\n if (pad) {\n var need = width - c.length;\n if (need > 0) {\n var z = new Array(need + 1).join('0');\n if (i < 0)\n c = '-' + z + c.slice(1);\n else\n c = z + c;\n }\n }\n }\n N.push(c);\n }\n } else {\n N = concatMap(n, function(el) { return expand(el, false) });\n }\n\n for (var j = 0; j < N.length; j++) {\n for (var k = 0; k < post.length; k++) {\n var expansion = pre + N[j] + post[k];\n if (!isTop || isSequence || expansion)\n expansions.push(expansion);\n }\n }\n\n return expansions;\n}\n\n"]}
\ No newline at end of file
module.exports = (function() {
var __MODS__ = {};
var __DEFINE__ = function(modId, func, req) { var m = { exports: {}, _tempexports: {} }; __MODS__[modId] = { status: 0, func: func, req: req, m: m }; };
var __REQUIRE__ = function(modId, source) { if(!__MODS__[modId]) return require(source); if(!__MODS__[modId].status) { var m = __MODS__[modId].m; m._exports = m._tempexports; var desp = Object.getOwnPropertyDescriptor(m, "exports"); if (desp && desp.configurable) Object.defineProperty(m, "exports", { set: function (val) { if(typeof val === "object" && val !== m._exports) { m._exports.__proto__ = val.__proto__; Object.keys(val).forEach(function (k) { m._exports[k] = val[k]; }); } m._tempexports = val }, get: function () { return m._tempexports; } }); __MODS__[modId].status = 1; __MODS__[modId].func(__MODS__[modId].req, m, m.exports); } return __MODS__[modId].m.exports; };
var __REQUIRE_WILDCARD__ = function(obj) { if(obj && obj.__esModule) { return obj; } else { var newObj = {}; if(obj != null) { for(var k in obj) { if (Object.prototype.hasOwnProperty.call(obj, k)) newObj[k] = obj[k]; } } newObj.default = obj; return newObj; } };
var __REQUIRE_DEFAULT__ = function(obj) { return obj && obj.__esModule ? obj.default : obj; };
__DEFINE__(1654568288083, function(require, module, exports) {
module.exports = balanced;
function balanced(a, b, str) {
if (a instanceof RegExp) a = maybeMatch(a, str);
if (b instanceof RegExp) b = maybeMatch(b, str);
var r = range(a, b, str);
return r && {
start: r[0],
end: r[1],
pre: str.slice(0, r[0]),
body: str.slice(r[0] + a.length, r[1]),
post: str.slice(r[1] + b.length)
};
}
function maybeMatch(reg, str) {
var m = str.match(reg);
return m ? m[0] : null;
}
balanced.range = range;
function range(a, b, str) {
var begs, beg, left, right, result;
var ai = str.indexOf(a);
var bi = str.indexOf(b, ai + 1);
var i = ai;
if (ai >= 0 && bi > 0) {
if(a===b) {
return [ai, bi];
}
begs = [];
left = str.length;
while (i >= 0 && !result) {
if (i == ai) {
begs.push(i);
ai = str.indexOf(a, i + 1);
} else if (begs.length == 1) {
result = [ begs.pop(), bi ];
} else {
beg = begs.pop();
if (beg < left) {
left = beg;
right = bi;
}
bi = str.indexOf(b, i + 1);
}
i = ai < bi && ai >= 0 ? ai : bi;
}
if (begs.length) {
result = [ left, right ];
}
}
return result;
}
}, function(modId) {var map = {}; return __REQUIRE__(map[modId], modId); })
return __REQUIRE__(1654568288083);
})()
//miniprogram-npm-outsideDeps=[]
//# sourceMappingURL=index.js.map
\ No newline at end of file
{"version":3,"sources":["index.js"],"names":[],"mappings":";;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"index.js","sourcesContent":["\nmodule.exports = balanced;\nfunction balanced(a, b, str) {\n if (a instanceof RegExp) a = maybeMatch(a, str);\n if (b instanceof RegExp) b = maybeMatch(b, str);\n\n var r = range(a, b, str);\n\n return r && {\n start: r[0],\n end: r[1],\n pre: str.slice(0, r[0]),\n body: str.slice(r[0] + a.length, r[1]),\n post: str.slice(r[1] + b.length)\n };\n}\n\nfunction maybeMatch(reg, str) {\n var m = str.match(reg);\n return m ? m[0] : null;\n}\n\nbalanced.range = range;\nfunction range(a, b, str) {\n var begs, beg, left, right, result;\n var ai = str.indexOf(a);\n var bi = str.indexOf(b, ai + 1);\n var i = ai;\n\n if (ai >= 0 && bi > 0) {\n if(a===b) {\n return [ai, bi];\n }\n begs = [];\n left = str.length;\n\n while (i >= 0 && !result) {\n if (i == ai) {\n begs.push(i);\n ai = str.indexOf(a, i + 1);\n } else if (begs.length == 1) {\n result = [ begs.pop(), bi ];\n } else {\n beg = begs.pop();\n if (beg < left) {\n left = beg;\n right = bi;\n }\n\n bi = str.indexOf(b, i + 1);\n }\n\n i = ai < bi && ai >= 0 ? ai : bi;\n }\n\n if (begs.length) {\n result = [ left, right ];\n }\n }\n\n return result;\n}\n"]}
\ No newline at end of file
module.exports = (function() {
var __MODS__ = {};
var __DEFINE__ = function(modId, func, req) { var m = { exports: {}, _tempexports: {} }; __MODS__[modId] = { status: 0, func: func, req: req, m: m }; };
var __REQUIRE__ = function(modId, source) { if(!__MODS__[modId]) return require(source); if(!__MODS__[modId].status) { var m = __MODS__[modId].m; m._exports = m._tempexports; var desp = Object.getOwnPropertyDescriptor(m, "exports"); if (desp && desp.configurable) Object.defineProperty(m, "exports", { set: function (val) { if(typeof val === "object" && val !== m._exports) { m._exports.__proto__ = val.__proto__; Object.keys(val).forEach(function (k) { m._exports[k] = val[k]; }); } m._tempexports = val }, get: function () { return m._tempexports; } }); __MODS__[modId].status = 1; __MODS__[modId].func(__MODS__[modId].req, m, m.exports); } return __MODS__[modId].m.exports; };
var __REQUIRE_WILDCARD__ = function(obj) { if(obj && obj.__esModule) { return obj; } else { var newObj = {}; if(obj != null) { for(var k in obj) { if (Object.prototype.hasOwnProperty.call(obj, k)) newObj[k] = obj[k]; } } newObj.default = obj; return newObj; } };
var __REQUIRE_DEFAULT__ = function(obj) { return obj && obj.__esModule ? obj.default : obj; };
__DEFINE__(1654568288084, function(require, module, exports) {
module.exports = function (xs, fn) {
var res = [];
for (var i = 0; i < xs.length; i++) {
var x = fn(xs[i], i);
if (isArray(x)) res.push.apply(res, x);
else res.push(x);
}
return res;
};
var isArray = Array.isArray || function (xs) {
return Object.prototype.toString.call(xs) === '[object Array]';
};
}, function(modId) {var map = {}; return __REQUIRE__(map[modId], modId); })
return __REQUIRE__(1654568288084);
})()
//miniprogram-npm-outsideDeps=[]
//# sourceMappingURL=index.js.map
\ No newline at end of file
{"version":3,"sources":["index.js"],"names":[],"mappings":";;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"index.js","sourcesContent":["module.exports = function (xs, fn) {\n var res = [];\n for (var i = 0; i < xs.length; i++) {\n var x = fn(xs[i], i);\n if (isArray(x)) res.push.apply(res, x);\n else res.push(x);\n }\n return res;\n};\n\nvar isArray = Array.isArray || function (xs) {\n return Object.prototype.toString.call(xs) === '[object Array]';\n};\n"]}
\ No newline at end of file
module.exports = (function() {
var __MODS__ = {};
var __DEFINE__ = function(modId, func, req) { var m = { exports: {}, _tempexports: {} }; __MODS__[modId] = { status: 0, func: func, req: req, m: m }; };
var __REQUIRE__ = function(modId, source) { if(!__MODS__[modId]) return require(source); if(!__MODS__[modId].status) { var m = __MODS__[modId].m; m._exports = m._tempexports; var desp = Object.getOwnPropertyDescriptor(m, "exports"); if (desp && desp.configurable) Object.defineProperty(m, "exports", { set: function (val) { if(typeof val === "object" && val !== m._exports) { m._exports.__proto__ = val.__proto__; Object.keys(val).forEach(function (k) { m._exports[k] = val[k]; }); } m._tempexports = val }, get: function () { return m._tempexports; } }); __MODS__[modId].status = 1; __MODS__[modId].func(__MODS__[modId].req, m, m.exports); } return __MODS__[modId].m.exports; };
var __REQUIRE_WILDCARD__ = function(obj) { if(obj && obj.__esModule) { return obj; } else { var newObj = {}; if(obj != null) { for(var k in obj) { if (Object.prototype.hasOwnProperty.call(obj, k)) newObj[k] = obj[k]; } } newObj.default = obj; return newObj; } };
var __REQUIRE_DEFAULT__ = function(obj) { return obj && obj.__esModule ? obj.default : obj; };
__DEFINE__(1654568288088, function(require, module, exports) {
var wrappy = require('wrappy')
module.exports = wrappy(once)
module.exports.strict = wrappy(onceStrict)
once.proto = once(function () {
Object.defineProperty(Function.prototype, 'once', {
value: function () {
return once(this)
},
configurable: true
})
Object.defineProperty(Function.prototype, 'onceStrict', {
value: function () {
return onceStrict(this)
},
configurable: true
})
})
function once (fn) {
var f = function () {
if (f.called) return f.value
f.called = true
return f.value = fn.apply(this, arguments)
}
f.called = false
return f
}
function onceStrict (fn) {
var f = function () {
if (f.called)
throw new Error(f.onceError)
f.called = true
return f.value = fn.apply(this, arguments)
}
var name = fn.name || 'Function wrapped with `once`'
f.onceError = name + " shouldn't be called more than once"
f.called = false
return f
}
}, function(modId) {var map = {}; return __REQUIRE__(map[modId], modId); })
return __REQUIRE__(1654568288088);
})()
//miniprogram-npm-outsideDeps=["wrappy"]
//# sourceMappingURL=index.js.map
\ No newline at end of file
{"version":3,"sources":["once.js"],"names":[],"mappings":";;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"index.js","sourcesContent":["var wrappy = require('wrappy')\nmodule.exports = wrappy(once)\nmodule.exports.strict = wrappy(onceStrict)\n\nonce.proto = once(function () {\n Object.defineProperty(Function.prototype, 'once', {\n value: function () {\n return once(this)\n },\n configurable: true\n })\n\n Object.defineProperty(Function.prototype, 'onceStrict', {\n value: function () {\n return onceStrict(this)\n },\n configurable: true\n })\n})\n\nfunction once (fn) {\n var f = function () {\n if (f.called) return f.value\n f.called = true\n return f.value = fn.apply(this, arguments)\n }\n f.called = false\n return f\n}\n\nfunction onceStrict (fn) {\n var f = function () {\n if (f.called)\n throw new Error(f.onceError)\n f.called = true\n return f.value = fn.apply(this, arguments)\n }\n var name = fn.name || 'Function wrapped with `once`'\n f.onceError = name + \" shouldn't be called more than once\"\n f.called = false\n return f\n}\n"]}
\ No newline at end of file
module.exports = (function() {
var __MODS__ = {};
var __DEFINE__ = function(modId, func, req) { var m = { exports: {}, _tempexports: {} }; __MODS__[modId] = { status: 0, func: func, req: req, m: m }; };
var __REQUIRE__ = function(modId, source) { if(!__MODS__[modId]) return require(source); if(!__MODS__[modId].status) { var m = __MODS__[modId].m; m._exports = m._tempexports; var desp = Object.getOwnPropertyDescriptor(m, "exports"); if (desp && desp.configurable) Object.defineProperty(m, "exports", { set: function (val) { if(typeof val === "object" && val !== m._exports) { m._exports.__proto__ = val.__proto__; Object.keys(val).forEach(function (k) { m._exports[k] = val[k]; }); } m._tempexports = val }, get: function () { return m._tempexports; } }); __MODS__[modId].status = 1; __MODS__[modId].func(__MODS__[modId].req, m, m.exports); } return __MODS__[modId].m.exports; };
var __REQUIRE_WILDCARD__ = function(obj) { if(obj && obj.__esModule) { return obj; } else { var newObj = {}; if(obj != null) { for(var k in obj) { if (Object.prototype.hasOwnProperty.call(obj, k)) newObj[k] = obj[k]; } } newObj.default = obj; return newObj; } };
var __REQUIRE_DEFAULT__ = function(obj) { return obj && obj.__esModule ? obj.default : obj; };
__DEFINE__(1654568288087, function(require, module, exports) {
// Returns a wrapper function that returns a wrapped callback
// The wrapper function should do some stuff, and return a
// presumably different callback function.
// This makes sure that own properties are retained, so that
// decorations and such are not lost along the way.
module.exports = wrappy
function wrappy (fn, cb) {
if (fn && cb) return wrappy(fn)(cb)
if (typeof fn !== 'function')
throw new TypeError('need wrapper function')
Object.keys(fn).forEach(function (k) {
wrapper[k] = fn[k]
})
return wrapper
function wrapper() {
var args = new Array(arguments.length)
for (var i = 0; i < args.length; i++) {
args[i] = arguments[i]
}
var ret = fn.apply(this, args)
var cb = args[args.length-1]
if (typeof ret === 'function' && ret !== cb) {
Object.keys(cb).forEach(function (k) {
ret[k] = cb[k]
})
}
return ret
}
}
}, function(modId) {var map = {}; return __REQUIRE__(map[modId], modId); })
return __REQUIRE__(1654568288087);
})()
//miniprogram-npm-outsideDeps=[]
//# sourceMappingURL=index.js.map
\ No newline at end of file
{"version":3,"sources":["wrappy.js"],"names":[],"mappings":";;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"index.js","sourcesContent":["// Returns a wrapper function that returns a wrapped callback\n// The wrapper function should do some stuff, and return a\n// presumably different callback function.\n// This makes sure that own properties are retained, so that\n// decorations and such are not lost along the way.\nmodule.exports = wrappy\nfunction wrappy (fn, cb) {\n if (fn && cb) return wrappy(fn)(cb)\n\n if (typeof fn !== 'function')\n throw new TypeError('need wrapper function')\n\n Object.keys(fn).forEach(function (k) {\n wrapper[k] = fn[k]\n })\n\n return wrapper\n\n function wrapper() {\n var args = new Array(arguments.length)\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i]\n }\n var ret = fn.apply(this, args)\n var cb = args[args.length-1]\n if (typeof ret === 'function' && ret !== cb) {\n Object.keys(cb).forEach(function (k) {\n ret[k] = cb[k]\n })\n }\n return ret\n }\n}\n"]}
\ No newline at end of file
module.exports = (function() {
var __MODS__ = {};
var __DEFINE__ = function(modId, func, req) { var m = { exports: {}, _tempexports: {} }; __MODS__[modId] = { status: 0, func: func, req: req, m: m }; };
var __REQUIRE__ = function(modId, source) { if(!__MODS__[modId]) return require(source); if(!__MODS__[modId].status) { var m = __MODS__[modId].m; m._exports = m._tempexports; var desp = Object.getOwnPropertyDescriptor(m, "exports"); if (desp && desp.configurable) Object.defineProperty(m, "exports", { set: function (val) { if(typeof val === "object" && val !== m._exports) { m._exports.__proto__ = val.__proto__; Object.keys(val).forEach(function (k) { m._exports[k] = val[k]; }); } m._tempexports = val }, get: function () { return m._tempexports; } }); __MODS__[modId].status = 1; __MODS__[modId].func(__MODS__[modId].req, m, m.exports); } return __MODS__[modId].m.exports; };
var __REQUIRE_WILDCARD__ = function(obj) { if(obj && obj.__esModule) { return obj; } else { var newObj = {}; if(obj != null) { for(var k in obj) { if (Object.prototype.hasOwnProperty.call(obj, k)) newObj[k] = obj[k]; } } newObj.default = obj; return newObj; } };
var __REQUIRE_DEFAULT__ = function(obj) { return obj && obj.__esModule ? obj.default : obj; };
__DEFINE__(1654568288089, function(require, module, exports) {
function posix(path) {
return path.charAt(0) === '/';
}
function win32(path) {
// https://github.com/nodejs/node/blob/b3fcc245fb25539909ef1d5eaa01dbf92e168633/lib/path.js#L56
var splitDeviceRe = /^([a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/]+[^\\\/]+)?([\\\/])?([\s\S]*?)$/;
var result = splitDeviceRe.exec(path);
var device = result[1] || '';
var isUnc = Boolean(device && device.charAt(1) !== ':');
// UNC paths are always absolute
return Boolean(result[2] || isUnc);
}
module.exports = process.platform === 'win32' ? win32 : posix;
module.exports.posix = posix;
module.exports.win32 = win32;
}, function(modId) {var map = {}; return __REQUIRE__(map[modId], modId); })
return __REQUIRE__(1654568288089);
})()
//miniprogram-npm-outsideDeps=[]
//# sourceMappingURL=index.js.map
\ No newline at end of file
{"version":3,"sources":["index.js"],"names":[],"mappings":";;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"index.js","sourcesContent":["\n\nfunction posix(path) {\n\treturn path.charAt(0) === '/';\n}\n\nfunction win32(path) {\n\t// https://github.com/nodejs/node/blob/b3fcc245fb25539909ef1d5eaa01dbf92e168633/lib/path.js#L56\n\tvar splitDeviceRe = /^([a-zA-Z]:|[\\\\\\/]{2}[^\\\\\\/]+[\\\\\\/]+[^\\\\\\/]+)?([\\\\\\/])?([\\s\\S]*?)$/;\n\tvar result = splitDeviceRe.exec(path);\n\tvar device = result[1] || '';\n\tvar isUnc = Boolean(device && device.charAt(1) !== ':');\n\n\t// UNC paths are always absolute\n\treturn Boolean(result[2] || isUnc);\n}\n\nmodule.exports = process.platform === 'win32' ? win32 : posix;\nmodule.exports.posix = posix;\nmodule.exports.win32 = win32;\n"]}
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment