├── .gitignore ├── README.md ├── index.d.ts ├── lib └── index.js ├── package-lock.json ├── package.json ├── rollup.config.js ├── src ├── core │ ├── app.ts │ ├── component.ts │ ├── page.ts │ └── wx.ts └── index.ts ├── test └── index.tsx ├── tsconfig.json └── types ├── wx.d.ts ├── wxml.d.ts └── wxss.d.ts /.gitignore: -------------------------------------------------------------------------------- 1 | .vscode 2 | node_modules -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # mpreact 2 | 3 | react like framework for wechat mini program 4 | 5 | ## usage for js 6 | 7 | ### app.js 8 | 9 | ```javascript 10 | import wx, {WxApp, AppConfig} from "mpreact"; 11 | 12 | @AppConfig({ 13 | /** content of app.json */ 14 | pages: ["pages/home/index"] 15 | }) 16 | class ExampleApp extends WxApp { 17 | 18 | // will be called after App.onLoad 19 | mounted() { 20 | this.login(); 21 | } 22 | 23 | async login() { 24 | const res = await wx.login(); 25 | // ... 26 | } 27 | } 28 | ``` 29 | 30 | ### page.jsx 31 | 32 | ```javascript 33 | import wx, {WxPage, PageConfig} from "mpreact"; 34 | 35 | import "../styles/home.scss"; 36 | 37 | import Tabs from "../components/tabs/index"; 38 | 39 | @PageConfig({ 40 | background: "#ddd" 41 | }) 42 | class Home extends WxPage { 43 | 44 | /** content of page.wxml, jsx syntax */ 45 | template = ( 46 | 47 | 48 | 49 | ); 50 | 51 | // will be called after Page.onLoad 52 | mounted() { 53 | this.setState({ 54 | tabs: ["wxss", "wxml", "wxs"] 55 | }) 56 | } 57 | } 58 | ``` 59 | 60 | ### component.jsx 61 | 62 | ```javascript 63 | import wx, {WxComponent} from "mpreact"; 64 | 65 | import "../styles/tabs.scss"; 66 | 67 | export default class Tabs extends WxComponent { 68 | 69 | static propTypes = { 70 | tabs: Array 71 | }; 72 | 73 | /** content of page.wxml, jsx syntax */ 74 | template = ( 75 | 76 | {item} 77 | {this.state.selectedTab} 78 | 79 | ); 80 | 81 | // will be called after Component.attached 82 | mounted() { 83 | } 84 | 85 | onTabsChange(curr, prev) { 86 | console.log(curr) 87 | } 88 | 89 | selectTab(e) { 90 | this.setState({ 91 | selectedTab: this.props.tabs[e.currentTarget.dataset.index] 92 | }) 93 | } 94 | } 95 | ``` 96 | 97 | ## usage for ts 98 | 99 | ### app.ts 100 | 101 | ```javascript 102 | import wx, {WxApp, AppConfig} from "mpreact"; 103 | 104 | @AppConfig({ 105 | /** content of app.json */ 106 | pages: ["pages/home/index"] 107 | }) 108 | class ExampleApp extends WxApp { 109 | 110 | // will be called after App.onLoad 111 | mounted() { 112 | this.login(); 113 | } 114 | 115 | async login() { 116 | const res = await wx.login(); 117 | // ... 118 | } 119 | } 120 | ``` 121 | 122 | ### page.tsx 123 | 124 | ```javascript 125 | import wx, {WxPage, PageConfig} from "mpreact"; 126 | 127 | import "../styles/home.scss"; 128 | 129 | import Tabs from "../components/tabs/index"; 130 | 131 | @PageConfig({ 132 | background: "#ddd" 133 | }) 134 | class Home extends WxPage<{}, {tabs: Array}> { 135 | 136 | /** content of page.wxml, jsx syntax */ 137 | template = ( 138 | 139 | 140 | 141 | ); 142 | 143 | // will be called after Page.onLoad 144 | mounted() { 145 | this.setState({ 146 | tabs: ["wxss", "wxml", "wxs"] 147 | }) 148 | } 149 | } 150 | ``` 151 | 152 | ### component.tsx 153 | 154 | ```javascript 155 | import wx, {WxComponent} from "mpreact"; 156 | 157 | import "../styles/tabs.scss"; 158 | 159 | export default class Tabs extends WxComponent<{tabs: Array}, {selectedTab: string}> { 160 | 161 | /** content of page.wxml, jsx syntax */ 162 | template = ( 163 | 164 | {item} 165 | {this.state.selectedTab} 166 | 167 | ); 168 | 169 | // will be called after Component.attached 170 | mounted() { 171 | } 172 | 173 | onTabsChange(curr, prev) { 174 | console.log(curr) 175 | } 176 | 177 | selectTab(e) { 178 | this.setState({ 179 | selectedTab: this.props.tabs[e.currentTarget.dataset.index] 180 | }) 181 | } 182 | } 183 | ``` 184 | 185 | ## api 186 | 187 | ### wx 188 | 189 | promisified wx; 190 | 191 | ### page 192 | 193 | * state: Object; 194 | 195 | * query: Object; 页面参数; 196 | 197 | * setState(state: Partial\, cb?: Function): Promise 198 | 199 | * navigateTo(page: string, query?: { [key: string]: number | string | boolean }): Promise; 200 | 201 | * setTitle(title: string): Promise; 202 | 203 | ### component 204 | 205 | * props: Object; 206 | 207 | * state: Object; 208 | 209 | * setState(state: Partial\): Promise; 210 | -------------------------------------------------------------------------------- /index.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | 4 | declare namespace mp { 5 | /********** App **********/ 6 | 7 | /** 8 | * App生命周期 9 | */ 10 | interface AppLifeCycle { 11 | /** 12 | * 生命周期函数--监听小程序初始化 当小程序初始化完成时,会触发 onLaunch(全局只触发一次) 13 | */ 14 | onLaunch?(): void; 15 | /** 16 | * 生命周期函数--监听小程序显示 当小程序启动,或从后台进入前台显示,会触发 onShow 17 | */ 18 | onShow?(): void; 19 | /** 20 | * 生命周期函数--监听小程序隐藏 当小程序从前台进入后台,会触发 onHide 21 | */ 22 | onHide?(): void; 23 | /** 24 | * 错误监听函数 当小程序发生脚本错误,或者 api 调用失败时,会触发 onError 并带上错误信息 25 | */ 26 | onError?(): void; 27 | } 28 | 29 | interface WxApp extends AppLifeCycle { } 30 | 31 | class WxApp { 32 | mounted?(): void; 33 | } 34 | 35 | /********** Page **********/ 36 | 37 | /** 38 | * Page生命周期 39 | */ 40 | interface PageLifeCycle { 41 | /** 42 | * 生命周期函数--监听页面加载 43 | */ 44 | onLoad?(): void; 45 | /** 46 | * 生命周期函数--监听页面初次渲染完成 47 | */ 48 | onReady?(): void; 49 | /** 50 | * 生命周期函数--监听页面显示 51 | */ 52 | onShow?(): void; 53 | /** 54 | * 生命周期函数--监听页面隐藏 55 | */ 56 | onHide?(): void; 57 | /** 58 | * 生命周期函数--监听页面卸载 59 | */ 60 | onUnload?(): void; 61 | /** 62 | * 页面相关事件处理函数--监听用户下拉动作 63 | */ 64 | onPullDownRefresh?(): void; 65 | /** 66 | * 页面上拉触底事件的处理函数 67 | */ 68 | onReachBottom?(): void; 69 | /** 70 | * 用户点击右上角转发 71 | */ 72 | onShareAppMessage?(): void; 73 | /** 74 | * 页面滚动触发事件的处理函数 75 | */ 76 | onPageScroll?(): void; 77 | } 78 | 79 | interface Page { 80 | data: S; 81 | setData(data: Partial, cb?: Function): void; 82 | } 83 | 84 | interface WxPage extends PageLifeCycle { } 85 | 86 | class WxPage { 87 | 88 | state: Readonly>; 89 | query: P; 90 | 91 | constructor(page: Page, options: P); 92 | 93 | setState(state: Partial, cb?: Function): Promise 94 | 95 | navigateTo(page: string, query?: { [key: string]: number | string | boolean }): Promise; 96 | 97 | redirectTo(page: string, query?: { [key: string]: number | string | boolean }): Promise; 98 | 99 | setTitle(title: string): Promise; 100 | 101 | } 102 | 103 | /********** 组件 **********/ 104 | 105 | /** 106 | * 组件生命周期 107 | */ 108 | interface ComponentLifeCycle { 109 | /** 110 | * 组件生命周期函数,在组件实例进入页面节点树时执行,注意此时不能调用 setData 111 | */ 112 | created?(): void; 113 | /** 114 | * 组件生命周期函数,在组件实例进入页面节点树时执行 115 | */ 116 | attached?(): void; 117 | /** 118 | * 组件生命周期函数,在组件布局完成后执行,此时可以获取节点信息(使用 SelectorQuery ) 119 | */ 120 | ready?(): void; 121 | /** 122 | * 组件生命周期函数,在组件实例被移动到节点树另一个位置时执行 123 | */ 124 | moved?(): void; 125 | /** 126 | * 组件生命周期函数,在组件实例被从页面节点树移除时执行 127 | */ 128 | detached?(): void; 129 | } 130 | 131 | 132 | interface Component { 133 | /** 134 | * 组件的文件路径 135 | */ 136 | is: string; 137 | /** 138 | * 节点id 139 | */ 140 | id: string; 141 | /** 142 | * 节点dataset 143 | */ 144 | dataset: string; 145 | /** 146 | * 组件数据,包括内部数据和属性值 147 | */ 148 | data: S; 149 | properties: any; 150 | methods: { 151 | [method: string]: Function; 152 | }; 153 | /** 154 | * 155 | * 设置data并执行视图层渲染 156 | */ 157 | setData: (data: Partial, cb?: Function) => void; 158 | /** 159 | * 检查组件是否具有 behavior (检查时会递归检查被直接或间接引入的所有behavior) 160 | */ 161 | hasBehavior: (behavior: object) => boolean; 162 | /** 163 | * 164 | * 触发事件,参见 组件事件 165 | */ 166 | triggerEvent: (name: string, detail: object, options: any) => void; 167 | /** 168 | * 创建一个 SelectorQuery 对象,选择器选取范围为这个组件实例内 169 | */ 170 | createSelectorQuery: () => any; 171 | /** 172 | * 使用选择器选择组件实例节点,返回匹配到的第一个组件实例对象 173 | */ 174 | selectComponent: (selector: string) => void; 175 | /** 176 | * 使用选择器选择组件实例节点,返回匹配到的全部组件实例对象组成的数组 177 | */ 178 | selectAllComponents: (selector: string) => void; 179 | /** 180 | * 获取所有这个关系对应的所有关联节点,参见 组件间关系 181 | */ 182 | getRelationNodes: (relationKey: string) => Array; 183 | } 184 | 185 | interface WxComponent extends ComponentLifeCycle { } 186 | 187 | class WxComponent { 188 | constructor(component: Component); 189 | /** 190 | * 组件属性 191 | */ 192 | props: Readonly

; 193 | /** 194 | * 组件状态 195 | */ 196 | state: Readonly>; 197 | 198 | template: JSX.Element; 199 | 200 | setState(state: Partial): Promise; 201 | 202 | } 203 | 204 | } 205 | 206 | declare global { 207 | namespace JSX { 208 | interface ElementAttributesProperty { props: {}; } 209 | interface Element { } 210 | interface IntrinsicElements { 211 | template: WXML.Template; 212 | block: WXML.Block; 213 | import: WXML.Import; 214 | view: WXML.View; 215 | 'scroll-view': WXML.ScrollView; 216 | swiper: WXML.Swiper; 217 | 'swiper-item': WXML.SwiperItem; 218 | icon: WXML.Icon; 219 | text: WXML.Text; 220 | progress: WXML.Progress; 221 | button: WXML.Form.Button; 222 | 'checkbox-group': WXML.Form.CheckboxGroup; 223 | checkbox: WXML.Form.Checkbox; 224 | form: WXML.Form.Form; 225 | input: WXML.Form.Input; 226 | label: WXML.Form.Label; 227 | picker: WXML.Form.Picker; 228 | 'radio-group': WXML.Form.RadioGroup; 229 | radio: WXML.Form.Radio; 230 | slider: WXML.Form.Slider; 231 | switch: WXML.Form.Switch; 232 | textarea: WXML.Form.TextArea; 233 | navigator: WXML.Navigator; 234 | audio: WXML.Audio; 235 | image: WXML.Image; 236 | video: WXML.Video; 237 | map: WXML.Map; 238 | canvas: WXML.Canvas; 239 | slot: WXML.Slot; 240 | } 241 | } 242 | } 243 | 244 | export default wx; 245 | 246 | export declare class WxApp extends mp.WxApp { } 247 | export declare abstract class WxPage extends mp.WxPage { 248 | abstract template: JSX.Element; 249 | } 250 | export declare abstract class WxComponent extends mp.WxComponent{ 251 | abstract template: JSX.Element; 252 | } 253 | export function AppConfig(config: { 254 | /** 255 | * 设置页面路径 256 | */ 257 | pages: Array; 258 | /** 259 | * 设置默认页面的窗口表现 260 | */ 261 | window?: { 262 | /** 263 | * #000000 导航栏背景颜色,如#000000 264 | */ 265 | navigationBarBackgroundColor?: string; 266 | /** 267 | * white 导航栏标题颜色,仅支持 black/white 268 | */ 269 | navigationBarTextStyle?: string; 270 | /** 271 | * 导航栏标题文字内容 272 | */ 273 | navigationBarTitleText?: string; 274 | /** 275 | * default 导航栏样式,仅支持 default/custom。custom 模式可自定义导航栏,只保留右上角胶囊状的按钮 微信版本 6.6.0 276 | */ 277 | navigationStyle?: string; 278 | /** 279 | * #ffffff 窗口的背景色 280 | */ 281 | backgroundColor?: string; 282 | /** 283 | * dark 下拉背景字体、loading 图的样式,仅支持 dark/light 284 | */ 285 | backgroundTextStyle?: string; 286 | /** 287 | * #ffffff 顶部窗口的背景色,仅 iOS 支持 微信版本 6.5.16 288 | */ 289 | backgroundColorTop?: string; 290 | /** 291 | * #ffffff 底部窗口的背景色,仅 iOS 支持 微信版本 6.5.16 292 | */ 293 | backgroundColorBottom?: string; 294 | /** 295 | * false 是否开启下拉刷新,详见页面相关事件处理函数 296 | */ 297 | enablePullDownRefresh?: boolean; 298 | /** 299 | * 50 页面上拉触底事件触发时距页面底部距离,单位为px 300 | */ 301 | onReachBottomDistance?: number; 302 | }; 303 | /** 304 | * 设置底部 tab 的表现 305 | */ 306 | tabBar?: { 307 | /** 308 | * tab 上的文字默认颜色 309 | */ 310 | color: string; 311 | /** 312 | * tab 上的文字选中时的颜色 313 | */ 314 | selectedColor: string; 315 | /** 316 | * tab 的背景色 317 | */ 318 | backgroundColor: string; 319 | /** 320 | * black tabbar上边框的颜色, 仅支持 black/white 321 | */ 322 | borderStyle?: string; 323 | /** 324 | * tab 的列表,详见 list 属性说明,最少2个、最多5个 tab 325 | */ 326 | list: Array<{ 327 | /** 328 | * 页面路径,必须在 pages 中先定义 329 | */ 330 | pagePath: string; 331 | /** 332 | * tab 上按钮文字 333 | */ 334 | text: string; 335 | /** 336 | * 图片路径,icon 大小限制为40kb,建议尺寸为 81px * 81px,当 postion 为 top 时,此参数无效,不支持网络图片 337 | */ 338 | iconPath?: string; 339 | /** 340 | * 选中时的图片路径,icon 大小限制为40kb,建议尺寸为 81px * 81px ,当 postion 为 top 时,此参数无效 341 | */ 342 | selectedIconPath?: string 343 | }>; 344 | /** 345 | *bottom 可选值 bottom、top 346 | */ 347 | position?: string; 348 | }; 349 | /** 350 | * 设置网络超时时间 351 | */ 352 | networkTimeout?: { 353 | /** 354 | * wx.request的超时时间,单位毫秒,默认为:60000 355 | */ 356 | request?: number; 357 | /** 358 | * wx.connectSocket的超时时间,单位毫秒,默认为:60000 359 | */ 360 | connectSocket?: number; 361 | /** 362 | * wx.uploadFile的超时时间,单位毫秒,默认为:60000 363 | */ 364 | uploadFile?: number; 365 | /** 366 | * wx.downloadFile的超时时间,单位毫秒,默认为:60000 367 | */ 368 | downloadFile?: number; 369 | }; 370 | /** 371 | * 设置是否开启 debug 模式 372 | */ 373 | debug?: boolean; 374 | }): (constructor: T) => any; 375 | 376 | 377 | export function PageConfig(config: { 378 | /** 379 | * #000000 导航栏背景颜色,如"#000000" 380 | */ 381 | navigationBarBackgroundColor?: string; 382 | /** 383 | * white 导航栏标题颜色,仅支持 black/white 384 | */ 385 | navigationBarTextStyle?: string; 386 | /** 387 | * 导航栏标题文字内容 388 | */ 389 | navigationBarTitleText?: string; 390 | /** 391 | * #ffffff 窗口的背景色 392 | */ 393 | backgroundColor?: string; 394 | /** 395 | * dark 下拉背景字体、loading 图的样式,仅支持 dark/light 396 | */ 397 | backgroundTextStyle?: string; 398 | /** 399 | * false 是否开启下拉刷新,详见页面相关事件处理函数。 400 | */ 401 | enablePullDownRefresh?: boolean; 402 | /** 403 | * false 设置为 true 则页面整体不能上下滚动;只在 page.json 中有效,无法在 app.json 中设置该项 404 | */ 405 | disableScroll?: boolean; 406 | /** 407 | * 50 页面上拉触底事件触发时距页面底部距离,单位为px 408 | */ 409 | onReachBottomDistance?: number; 410 | }): (constructor: T) => any; 411 | -------------------------------------------------------------------------------- /lib/index.js: -------------------------------------------------------------------------------- 1 | (function (global, factory) { 2 | typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : 3 | typeof define === 'function' && define.amd ? define(['exports'], factory) : 4 | (factory((global.mpreact = {}))); 5 | }(this, (function (exports) { 'use strict'; 6 | 7 | function isSyncApi(api) { 8 | return /^(on|create|stop|pause|hide)/.test(api) 9 | || /Sync$/.test(api) 10 | || ["pageScrollTo", "showNavigationBarLoading", "navigateBack"].indexOf(api) !== -1; 11 | } 12 | function promisifyWxApi() { 13 | // 命令空间 14 | let ns = {}; 15 | Object.keys(wx).forEach(api => { 16 | if (!isSyncApi(api)) { 17 | ns[api] = function (obj = {}, ...args) { 18 | return new Promise((resolve, reject) => { 19 | obj.success = resolve; 20 | obj.fail = reject; 21 | wx[api](obj, ...args); 22 | }); 23 | }; 24 | } 25 | else { 26 | ns[api] = wx[api]; 27 | } 28 | }); 29 | ns.getApp = function () { 30 | return getApp(); 31 | }; 32 | ns.getCurrentPages = function () { 33 | return getCurrentPages(); 34 | }; 35 | ns.sleep = function (time = 500) { 36 | return new Promise((resolve, reject) => { 37 | setTimeout(() => { 38 | resolve(); 39 | }, time); 40 | }); 41 | }; 42 | return ns; 43 | } 44 | var wx$1 = promisifyWxApi(); 45 | 46 | class WxComponent { 47 | constructor(component) { 48 | this.component = component; 49 | this.state = {}; 50 | this.props = Object.assign({}, this.component.properties); 51 | [ 52 | // 实例方法 53 | ...Object.getOwnPropertyNames(Object.getPrototypeOf(this)), 54 | ].forEach(method => { 55 | if (typeof this[method] == "function" && ['constructor', 'mounted'].indexOf(method) === -1) { 56 | component[method] = this[method].bind(this); 57 | } 58 | }); 59 | } 60 | setState(state, cb) { 61 | this.state = Object.assign({}, this.state, state); 62 | this.component.setData(state, () => { 63 | cb && cb(); 64 | }); 65 | } 66 | } 67 | 68 | /** 69 | * 小程序Page类, P为page query,S为Page state 70 | */ 71 | class WxPage { 72 | constructor(page, options) { 73 | this.page = page; 74 | this.query = options; 75 | [ 76 | // 实例方法 77 | ...Object.getOwnPropertyNames(Object.getPrototypeOf(this)), 78 | ].forEach(method => { 79 | if (typeof this[method] == "function" && ['constructor', 'mounted'].indexOf(method) === -1) { 80 | page[method] = this[method].bind(this); 81 | } 82 | }); 83 | } 84 | setState(state, cb) { 85 | this.state = Object.assign({}, this.state, state); 86 | return new Promise((resolve, reject) => { 87 | this.page.setData(state, () => { 88 | cb && cb(); 89 | resolve(); 90 | }); 91 | }); 92 | } 93 | navigateTo(page, query = {}) { 94 | let url = page + `?${Object.keys(query).map(key => `${key}=${query[key]}`).join('&')}`; 95 | return wx.navigateTo({ url }); 96 | } 97 | redirectTo(page, query = {}) { 98 | let url = page + `?${Object.keys(query).map(key => `${key}=${query[key]}`).join('&')}`; 99 | return wx.redirectTo({ url }); 100 | } 101 | setTitle(title) { 102 | wx.setNavigationBarTitle({ title }); 103 | } 104 | } 105 | 106 | class WxApp { 107 | constructor(app, options) { 108 | this.app = app; 109 | this.options = options; 110 | } 111 | } 112 | 113 | exports.default = wx$1; 114 | exports.WxComponent = WxComponent; 115 | exports.WxPage = WxPage; 116 | exports.WxApp = WxApp; 117 | 118 | Object.defineProperty(exports, '__esModule', { value: true }); 119 | 120 | }))); 121 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "mpreact", 3 | "version": "0.0.4", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@mrmlnc/readdir-enhanced": { 8 | "version": "2.2.1", 9 | "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", 10 | "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", 11 | "dev": true, 12 | "requires": { 13 | "call-me-maybe": "^1.0.1", 14 | "glob-to-regexp": "^0.3.0" 15 | } 16 | }, 17 | "@nodelib/fs.stat": { 18 | "version": "1.1.2", 19 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.2.tgz", 20 | "integrity": "sha512-yprFYuno9FtNsSHVlSWd+nRlmGoAbqbeCwOryP6sC/zoCjhpArcRMYp19EvpSUSizJAlsXEwJv+wcWS9XaXdMw==", 21 | "dev": true 22 | }, 23 | "arr-diff": { 24 | "version": "4.0.0", 25 | "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", 26 | "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", 27 | "dev": true 28 | }, 29 | "arr-flatten": { 30 | "version": "1.1.0", 31 | "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", 32 | "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", 33 | "dev": true 34 | }, 35 | "arr-union": { 36 | "version": "3.1.0", 37 | "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", 38 | "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", 39 | "dev": true 40 | }, 41 | "array-unique": { 42 | "version": "0.3.2", 43 | "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", 44 | "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", 45 | "dev": true 46 | }, 47 | "assign-symbols": { 48 | "version": "1.0.0", 49 | "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", 50 | "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", 51 | "dev": true 52 | }, 53 | "atob": { 54 | "version": "2.1.2", 55 | "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", 56 | "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", 57 | "dev": true 58 | }, 59 | "balanced-match": { 60 | "version": "1.0.0", 61 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 62 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", 63 | "dev": true 64 | }, 65 | "base": { 66 | "version": "0.11.2", 67 | "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", 68 | "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", 69 | "dev": true, 70 | "requires": { 71 | "cache-base": "^1.0.1", 72 | "class-utils": "^0.3.5", 73 | "component-emitter": "^1.2.1", 74 | "define-property": "^1.0.0", 75 | "isobject": "^3.0.1", 76 | "mixin-deep": "^1.2.0", 77 | "pascalcase": "^0.1.1" 78 | }, 79 | "dependencies": { 80 | "define-property": { 81 | "version": "1.0.0", 82 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", 83 | "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", 84 | "dev": true, 85 | "requires": { 86 | "is-descriptor": "^1.0.0" 87 | } 88 | }, 89 | "is-accessor-descriptor": { 90 | "version": "1.0.0", 91 | "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", 92 | "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", 93 | "dev": true, 94 | "requires": { 95 | "kind-of": "^6.0.0" 96 | } 97 | }, 98 | "is-data-descriptor": { 99 | "version": "1.0.0", 100 | "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", 101 | "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", 102 | "dev": true, 103 | "requires": { 104 | "kind-of": "^6.0.0" 105 | } 106 | }, 107 | "is-descriptor": { 108 | "version": "1.0.2", 109 | "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", 110 | "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", 111 | "dev": true, 112 | "requires": { 113 | "is-accessor-descriptor": "^1.0.0", 114 | "is-data-descriptor": "^1.0.0", 115 | "kind-of": "^6.0.2" 116 | } 117 | } 118 | } 119 | }, 120 | "brace-expansion": { 121 | "version": "1.1.11", 122 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 123 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 124 | "dev": true, 125 | "requires": { 126 | "balanced-match": "^1.0.0", 127 | "concat-map": "0.0.1" 128 | } 129 | }, 130 | "braces": { 131 | "version": "2.3.2", 132 | "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", 133 | "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", 134 | "dev": true, 135 | "requires": { 136 | "arr-flatten": "^1.1.0", 137 | "array-unique": "^0.3.2", 138 | "extend-shallow": "^2.0.1", 139 | "fill-range": "^4.0.0", 140 | "isobject": "^3.0.1", 141 | "repeat-element": "^1.1.2", 142 | "snapdragon": "^0.8.1", 143 | "snapdragon-node": "^2.0.1", 144 | "split-string": "^3.0.2", 145 | "to-regex": "^3.0.1" 146 | }, 147 | "dependencies": { 148 | "extend-shallow": { 149 | "version": "2.0.1", 150 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", 151 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", 152 | "dev": true, 153 | "requires": { 154 | "is-extendable": "^0.1.0" 155 | } 156 | } 157 | } 158 | }, 159 | "cache-base": { 160 | "version": "1.0.1", 161 | "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", 162 | "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", 163 | "dev": true, 164 | "requires": { 165 | "collection-visit": "^1.0.0", 166 | "component-emitter": "^1.2.1", 167 | "get-value": "^2.0.6", 168 | "has-value": "^1.0.0", 169 | "isobject": "^3.0.1", 170 | "set-value": "^2.0.0", 171 | "to-object-path": "^0.3.0", 172 | "union-value": "^1.0.0", 173 | "unset-value": "^1.0.0" 174 | } 175 | }, 176 | "call-me-maybe": { 177 | "version": "1.0.1", 178 | "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", 179 | "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=", 180 | "dev": true 181 | }, 182 | "class-utils": { 183 | "version": "0.3.6", 184 | "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", 185 | "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", 186 | "dev": true, 187 | "requires": { 188 | "arr-union": "^3.1.0", 189 | "define-property": "^0.2.5", 190 | "isobject": "^3.0.0", 191 | "static-extend": "^0.1.1" 192 | }, 193 | "dependencies": { 194 | "define-property": { 195 | "version": "0.2.5", 196 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", 197 | "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", 198 | "dev": true, 199 | "requires": { 200 | "is-descriptor": "^0.1.0" 201 | } 202 | } 203 | } 204 | }, 205 | "collection-visit": { 206 | "version": "1.0.0", 207 | "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", 208 | "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", 209 | "dev": true, 210 | "requires": { 211 | "map-visit": "^1.0.0", 212 | "object-visit": "^1.0.0" 213 | } 214 | }, 215 | "compare-versions": { 216 | "version": "2.0.1", 217 | "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-2.0.1.tgz", 218 | "integrity": "sha1-Htwfk2h/2XoyXFn1XkWgfbEGrKY=", 219 | "dev": true 220 | }, 221 | "component-emitter": { 222 | "version": "1.2.1", 223 | "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", 224 | "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", 225 | "dev": true 226 | }, 227 | "concat-map": { 228 | "version": "0.0.1", 229 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 230 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 231 | "dev": true 232 | }, 233 | "copy-descriptor": { 234 | "version": "0.1.1", 235 | "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", 236 | "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", 237 | "dev": true 238 | }, 239 | "debug": { 240 | "version": "2.6.9", 241 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 242 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 243 | "dev": true, 244 | "requires": { 245 | "ms": "2.0.0" 246 | } 247 | }, 248 | "decode-uri-component": { 249 | "version": "0.2.0", 250 | "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", 251 | "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", 252 | "dev": true 253 | }, 254 | "define-property": { 255 | "version": "2.0.2", 256 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", 257 | "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", 258 | "dev": true, 259 | "requires": { 260 | "is-descriptor": "^1.0.2", 261 | "isobject": "^3.0.1" 262 | }, 263 | "dependencies": { 264 | "is-accessor-descriptor": { 265 | "version": "1.0.0", 266 | "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", 267 | "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", 268 | "dev": true, 269 | "requires": { 270 | "kind-of": "^6.0.0" 271 | } 272 | }, 273 | "is-data-descriptor": { 274 | "version": "1.0.0", 275 | "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", 276 | "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", 277 | "dev": true, 278 | "requires": { 279 | "kind-of": "^6.0.0" 280 | } 281 | }, 282 | "is-descriptor": { 283 | "version": "1.0.2", 284 | "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", 285 | "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", 286 | "dev": true, 287 | "requires": { 288 | "is-accessor-descriptor": "^1.0.0", 289 | "is-data-descriptor": "^1.0.0", 290 | "kind-of": "^6.0.2" 291 | } 292 | } 293 | } 294 | }, 295 | "estree-walker": { 296 | "version": "0.2.1", 297 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.2.1.tgz", 298 | "integrity": "sha1-va/oCVOD2EFNXcLs9MkXO225QS4=", 299 | "dev": true 300 | }, 301 | "expand-brackets": { 302 | "version": "2.1.4", 303 | "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", 304 | "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", 305 | "dev": true, 306 | "requires": { 307 | "debug": "^2.3.3", 308 | "define-property": "^0.2.5", 309 | "extend-shallow": "^2.0.1", 310 | "posix-character-classes": "^0.1.0", 311 | "regex-not": "^1.0.0", 312 | "snapdragon": "^0.8.1", 313 | "to-regex": "^3.0.1" 314 | }, 315 | "dependencies": { 316 | "define-property": { 317 | "version": "0.2.5", 318 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", 319 | "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", 320 | "dev": true, 321 | "requires": { 322 | "is-descriptor": "^0.1.0" 323 | } 324 | }, 325 | "extend-shallow": { 326 | "version": "2.0.1", 327 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", 328 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", 329 | "dev": true, 330 | "requires": { 331 | "is-extendable": "^0.1.0" 332 | } 333 | } 334 | } 335 | }, 336 | "extend-shallow": { 337 | "version": "3.0.2", 338 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", 339 | "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", 340 | "dev": true, 341 | "requires": { 342 | "assign-symbols": "^1.0.0", 343 | "is-extendable": "^1.0.1" 344 | }, 345 | "dependencies": { 346 | "is-extendable": { 347 | "version": "1.0.1", 348 | "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", 349 | "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", 350 | "dev": true, 351 | "requires": { 352 | "is-plain-object": "^2.0.4" 353 | } 354 | } 355 | } 356 | }, 357 | "extglob": { 358 | "version": "2.0.4", 359 | "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", 360 | "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", 361 | "dev": true, 362 | "requires": { 363 | "array-unique": "^0.3.2", 364 | "define-property": "^1.0.0", 365 | "expand-brackets": "^2.1.4", 366 | "extend-shallow": "^2.0.1", 367 | "fragment-cache": "^0.2.1", 368 | "regex-not": "^1.0.0", 369 | "snapdragon": "^0.8.1", 370 | "to-regex": "^3.0.1" 371 | }, 372 | "dependencies": { 373 | "define-property": { 374 | "version": "1.0.0", 375 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", 376 | "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", 377 | "dev": true, 378 | "requires": { 379 | "is-descriptor": "^1.0.0" 380 | } 381 | }, 382 | "extend-shallow": { 383 | "version": "2.0.1", 384 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", 385 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", 386 | "dev": true, 387 | "requires": { 388 | "is-extendable": "^0.1.0" 389 | } 390 | }, 391 | "is-accessor-descriptor": { 392 | "version": "1.0.0", 393 | "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", 394 | "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", 395 | "dev": true, 396 | "requires": { 397 | "kind-of": "^6.0.0" 398 | } 399 | }, 400 | "is-data-descriptor": { 401 | "version": "1.0.0", 402 | "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", 403 | "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", 404 | "dev": true, 405 | "requires": { 406 | "kind-of": "^6.0.0" 407 | } 408 | }, 409 | "is-descriptor": { 410 | "version": "1.0.2", 411 | "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", 412 | "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", 413 | "dev": true, 414 | "requires": { 415 | "is-accessor-descriptor": "^1.0.0", 416 | "is-data-descriptor": "^1.0.0", 417 | "kind-of": "^6.0.2" 418 | } 419 | } 420 | } 421 | }, 422 | "fast-glob": { 423 | "version": "2.2.2", 424 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.2.tgz", 425 | "integrity": "sha512-TR6zxCKftDQnUAPvkrCWdBgDq/gbqx8A3ApnBrR5rMvpp6+KMJI0Igw7fkWPgeVK0uhRXTXdvO3O+YP0CaUX2g==", 426 | "dev": true, 427 | "requires": { 428 | "@mrmlnc/readdir-enhanced": "^2.2.1", 429 | "@nodelib/fs.stat": "^1.0.1", 430 | "glob-parent": "^3.1.0", 431 | "is-glob": "^4.0.0", 432 | "merge2": "^1.2.1", 433 | "micromatch": "^3.1.10" 434 | } 435 | }, 436 | "fill-range": { 437 | "version": "4.0.0", 438 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", 439 | "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", 440 | "dev": true, 441 | "requires": { 442 | "extend-shallow": "^2.0.1", 443 | "is-number": "^3.0.0", 444 | "repeat-string": "^1.6.1", 445 | "to-regex-range": "^2.1.0" 446 | }, 447 | "dependencies": { 448 | "extend-shallow": { 449 | "version": "2.0.1", 450 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", 451 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", 452 | "dev": true, 453 | "requires": { 454 | "is-extendable": "^0.1.0" 455 | } 456 | } 457 | } 458 | }, 459 | "for-in": { 460 | "version": "1.0.2", 461 | "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", 462 | "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", 463 | "dev": true 464 | }, 465 | "fragment-cache": { 466 | "version": "0.2.1", 467 | "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", 468 | "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", 469 | "dev": true, 470 | "requires": { 471 | "map-cache": "^0.2.2" 472 | } 473 | }, 474 | "fs-extra": { 475 | "version": "6.0.1", 476 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-6.0.1.tgz", 477 | "integrity": "sha512-GnyIkKhhzXZUWFCaJzvyDLEEgDkPfb4/TPvJCJVuS8MWZgoSsErf++QpiAlDnKFcqhRlm+tIOcencCjyJE6ZCA==", 478 | "dev": true, 479 | "requires": { 480 | "graceful-fs": "^4.1.2", 481 | "jsonfile": "^4.0.0", 482 | "universalify": "^0.1.0" 483 | } 484 | }, 485 | "get-value": { 486 | "version": "2.0.6", 487 | "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", 488 | "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", 489 | "dev": true 490 | }, 491 | "glob-parent": { 492 | "version": "3.1.0", 493 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", 494 | "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", 495 | "dev": true, 496 | "requires": { 497 | "is-glob": "^3.1.0", 498 | "path-dirname": "^1.0.0" 499 | }, 500 | "dependencies": { 501 | "is-glob": { 502 | "version": "3.1.0", 503 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", 504 | "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", 505 | "dev": true, 506 | "requires": { 507 | "is-extglob": "^2.1.0" 508 | } 509 | } 510 | } 511 | }, 512 | "glob-to-regexp": { 513 | "version": "0.3.0", 514 | "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", 515 | "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=", 516 | "dev": true 517 | }, 518 | "graceful-fs": { 519 | "version": "4.1.11", 520 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", 521 | "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", 522 | "dev": true 523 | }, 524 | "has-value": { 525 | "version": "1.0.0", 526 | "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", 527 | "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", 528 | "dev": true, 529 | "requires": { 530 | "get-value": "^2.0.6", 531 | "has-values": "^1.0.0", 532 | "isobject": "^3.0.0" 533 | } 534 | }, 535 | "has-values": { 536 | "version": "1.0.0", 537 | "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", 538 | "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", 539 | "dev": true, 540 | "requires": { 541 | "is-number": "^3.0.0", 542 | "kind-of": "^4.0.0" 543 | }, 544 | "dependencies": { 545 | "kind-of": { 546 | "version": "4.0.0", 547 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", 548 | "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", 549 | "dev": true, 550 | "requires": { 551 | "is-buffer": "^1.1.5" 552 | } 553 | } 554 | } 555 | }, 556 | "is-accessor-descriptor": { 557 | "version": "0.1.6", 558 | "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", 559 | "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", 560 | "dev": true, 561 | "requires": { 562 | "kind-of": "^3.0.2" 563 | }, 564 | "dependencies": { 565 | "kind-of": { 566 | "version": "3.2.2", 567 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 568 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 569 | "dev": true, 570 | "requires": { 571 | "is-buffer": "^1.1.5" 572 | } 573 | } 574 | } 575 | }, 576 | "is-buffer": { 577 | "version": "1.1.6", 578 | "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", 579 | "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", 580 | "dev": true 581 | }, 582 | "is-data-descriptor": { 583 | "version": "0.1.4", 584 | "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", 585 | "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", 586 | "dev": true, 587 | "requires": { 588 | "kind-of": "^3.0.2" 589 | }, 590 | "dependencies": { 591 | "kind-of": { 592 | "version": "3.2.2", 593 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 594 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 595 | "dev": true, 596 | "requires": { 597 | "is-buffer": "^1.1.5" 598 | } 599 | } 600 | } 601 | }, 602 | "is-descriptor": { 603 | "version": "0.1.6", 604 | "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", 605 | "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", 606 | "dev": true, 607 | "requires": { 608 | "is-accessor-descriptor": "^0.1.6", 609 | "is-data-descriptor": "^0.1.4", 610 | "kind-of": "^5.0.0" 611 | }, 612 | "dependencies": { 613 | "kind-of": { 614 | "version": "5.1.0", 615 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", 616 | "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", 617 | "dev": true 618 | } 619 | } 620 | }, 621 | "is-extendable": { 622 | "version": "0.1.1", 623 | "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", 624 | "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", 625 | "dev": true 626 | }, 627 | "is-extglob": { 628 | "version": "2.1.1", 629 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 630 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", 631 | "dev": true 632 | }, 633 | "is-glob": { 634 | "version": "4.0.0", 635 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", 636 | "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", 637 | "dev": true, 638 | "requires": { 639 | "is-extglob": "^2.1.1" 640 | } 641 | }, 642 | "is-number": { 643 | "version": "3.0.0", 644 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", 645 | "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", 646 | "dev": true, 647 | "requires": { 648 | "kind-of": "^3.0.2" 649 | }, 650 | "dependencies": { 651 | "kind-of": { 652 | "version": "3.2.2", 653 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 654 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 655 | "dev": true, 656 | "requires": { 657 | "is-buffer": "^1.1.5" 658 | } 659 | } 660 | } 661 | }, 662 | "is-plain-object": { 663 | "version": "2.0.4", 664 | "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", 665 | "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", 666 | "dev": true, 667 | "requires": { 668 | "isobject": "^3.0.1" 669 | } 670 | }, 671 | "is-windows": { 672 | "version": "1.0.2", 673 | "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", 674 | "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", 675 | "dev": true 676 | }, 677 | "isarray": { 678 | "version": "1.0.0", 679 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 680 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", 681 | "dev": true 682 | }, 683 | "isobject": { 684 | "version": "3.0.1", 685 | "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", 686 | "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", 687 | "dev": true 688 | }, 689 | "jsonfile": { 690 | "version": "4.0.0", 691 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", 692 | "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", 693 | "dev": true, 694 | "requires": { 695 | "graceful-fs": "^4.1.6" 696 | } 697 | }, 698 | "kind-of": { 699 | "version": "6.0.2", 700 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", 701 | "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", 702 | "dev": true 703 | }, 704 | "map-cache": { 705 | "version": "0.2.2", 706 | "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", 707 | "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", 708 | "dev": true 709 | }, 710 | "map-visit": { 711 | "version": "1.0.0", 712 | "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", 713 | "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", 714 | "dev": true, 715 | "requires": { 716 | "object-visit": "^1.0.0" 717 | } 718 | }, 719 | "merge2": { 720 | "version": "1.2.2", 721 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.2.tgz", 722 | "integrity": "sha512-bgM8twH86rWni21thii6WCMQMRMmwqqdW3sGWi9IipnVAszdLXRjwDwAnyrVXo6DuP3AjRMMttZKUB48QWIFGg==", 723 | "dev": true 724 | }, 725 | "micromatch": { 726 | "version": "3.1.10", 727 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", 728 | "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", 729 | "dev": true, 730 | "requires": { 731 | "arr-diff": "^4.0.0", 732 | "array-unique": "^0.3.2", 733 | "braces": "^2.3.1", 734 | "define-property": "^2.0.2", 735 | "extend-shallow": "^3.0.2", 736 | "extglob": "^2.0.4", 737 | "fragment-cache": "^0.2.1", 738 | "kind-of": "^6.0.2", 739 | "nanomatch": "^1.2.9", 740 | "object.pick": "^1.3.0", 741 | "regex-not": "^1.0.0", 742 | "snapdragon": "^0.8.1", 743 | "to-regex": "^3.0.2" 744 | } 745 | }, 746 | "minimatch": { 747 | "version": "3.0.4", 748 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 749 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 750 | "dev": true, 751 | "requires": { 752 | "brace-expansion": "^1.1.7" 753 | } 754 | }, 755 | "mixin-deep": { 756 | "version": "1.3.1", 757 | "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", 758 | "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", 759 | "dev": true, 760 | "requires": { 761 | "for-in": "^1.0.2", 762 | "is-extendable": "^1.0.1" 763 | }, 764 | "dependencies": { 765 | "is-extendable": { 766 | "version": "1.0.1", 767 | "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", 768 | "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", 769 | "dev": true, 770 | "requires": { 771 | "is-plain-object": "^2.0.4" 772 | } 773 | } 774 | } 775 | }, 776 | "ms": { 777 | "version": "2.0.0", 778 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 779 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", 780 | "dev": true 781 | }, 782 | "nanomatch": { 783 | "version": "1.2.13", 784 | "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", 785 | "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", 786 | "dev": true, 787 | "requires": { 788 | "arr-diff": "^4.0.0", 789 | "array-unique": "^0.3.2", 790 | "define-property": "^2.0.2", 791 | "extend-shallow": "^3.0.2", 792 | "fragment-cache": "^0.2.1", 793 | "is-windows": "^1.0.2", 794 | "kind-of": "^6.0.2", 795 | "object.pick": "^1.3.0", 796 | "regex-not": "^1.0.0", 797 | "snapdragon": "^0.8.1", 798 | "to-regex": "^3.0.1" 799 | } 800 | }, 801 | "object-assign": { 802 | "version": "4.1.1", 803 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 804 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", 805 | "dev": true 806 | }, 807 | "object-copy": { 808 | "version": "0.1.0", 809 | "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", 810 | "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", 811 | "dev": true, 812 | "requires": { 813 | "copy-descriptor": "^0.1.0", 814 | "define-property": "^0.2.5", 815 | "kind-of": "^3.0.3" 816 | }, 817 | "dependencies": { 818 | "define-property": { 819 | "version": "0.2.5", 820 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", 821 | "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", 822 | "dev": true, 823 | "requires": { 824 | "is-descriptor": "^0.1.0" 825 | } 826 | }, 827 | "kind-of": { 828 | "version": "3.2.2", 829 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 830 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 831 | "dev": true, 832 | "requires": { 833 | "is-buffer": "^1.1.5" 834 | } 835 | } 836 | } 837 | }, 838 | "object-visit": { 839 | "version": "1.0.1", 840 | "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", 841 | "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", 842 | "dev": true, 843 | "requires": { 844 | "isobject": "^3.0.0" 845 | } 846 | }, 847 | "object.pick": { 848 | "version": "1.3.0", 849 | "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", 850 | "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", 851 | "dev": true, 852 | "requires": { 853 | "isobject": "^3.0.1" 854 | } 855 | }, 856 | "pascalcase": { 857 | "version": "0.1.1", 858 | "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", 859 | "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", 860 | "dev": true 861 | }, 862 | "path-dirname": { 863 | "version": "1.0.2", 864 | "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", 865 | "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", 866 | "dev": true 867 | }, 868 | "posix-character-classes": { 869 | "version": "0.1.1", 870 | "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", 871 | "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", 872 | "dev": true 873 | }, 874 | "regex-not": { 875 | "version": "1.0.2", 876 | "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", 877 | "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", 878 | "dev": true, 879 | "requires": { 880 | "extend-shallow": "^3.0.2", 881 | "safe-regex": "^1.1.0" 882 | } 883 | }, 884 | "repeat-element": { 885 | "version": "1.1.3", 886 | "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", 887 | "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", 888 | "dev": true 889 | }, 890 | "repeat-string": { 891 | "version": "1.6.1", 892 | "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", 893 | "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", 894 | "dev": true 895 | }, 896 | "resolve-url": { 897 | "version": "0.2.1", 898 | "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", 899 | "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", 900 | "dev": true 901 | }, 902 | "ret": { 903 | "version": "0.1.15", 904 | "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", 905 | "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", 906 | "dev": true 907 | }, 908 | "rollup": { 909 | "version": "0.56.5", 910 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-0.56.5.tgz", 911 | "integrity": "sha512-IGPk5vdWrsc4vkiW9XMeXr5QMtxmvATTttTi59w2jBQWe9G/MMQtn8teIBAj+DdK51TrpVT6P0aQUaQUlUYCJA==", 912 | "dev": true 913 | }, 914 | "rollup-plugin-typescript": { 915 | "version": "0.8.1", 916 | "resolved": "https://registry.npmjs.org/rollup-plugin-typescript/-/rollup-plugin-typescript-0.8.1.tgz", 917 | "integrity": "sha1-L/fuzCHPa7K0P8J+W2iJUs5xkko=", 918 | "dev": true, 919 | "requires": { 920 | "compare-versions": "2.0.1", 921 | "object-assign": "^4.0.1", 922 | "rollup-pluginutils": "^1.3.1", 923 | "tippex": "^2.1.1", 924 | "typescript": "^1.8.9" 925 | }, 926 | "dependencies": { 927 | "typescript": { 928 | "version": "1.8.10", 929 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-1.8.10.tgz", 930 | "integrity": "sha1-tHXW4N/wv1DyluXKbvn7tccyDx4=", 931 | "dev": true 932 | } 933 | } 934 | }, 935 | "rollup-pluginutils": { 936 | "version": "1.5.2", 937 | "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-1.5.2.tgz", 938 | "integrity": "sha1-HhVud4+UtyVb+hs9AXi+j1xVJAg=", 939 | "dev": true, 940 | "requires": { 941 | "estree-walker": "^0.2.1", 942 | "minimatch": "^3.0.2" 943 | } 944 | }, 945 | "safe-regex": { 946 | "version": "1.1.0", 947 | "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", 948 | "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", 949 | "dev": true, 950 | "requires": { 951 | "ret": "~0.1.10" 952 | } 953 | }, 954 | "set-value": { 955 | "version": "2.0.0", 956 | "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", 957 | "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", 958 | "dev": true, 959 | "requires": { 960 | "extend-shallow": "^2.0.1", 961 | "is-extendable": "^0.1.1", 962 | "is-plain-object": "^2.0.3", 963 | "split-string": "^3.0.1" 964 | }, 965 | "dependencies": { 966 | "extend-shallow": { 967 | "version": "2.0.1", 968 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", 969 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", 970 | "dev": true, 971 | "requires": { 972 | "is-extendable": "^0.1.0" 973 | } 974 | } 975 | } 976 | }, 977 | "snapdragon": { 978 | "version": "0.8.2", 979 | "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", 980 | "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", 981 | "dev": true, 982 | "requires": { 983 | "base": "^0.11.1", 984 | "debug": "^2.2.0", 985 | "define-property": "^0.2.5", 986 | "extend-shallow": "^2.0.1", 987 | "map-cache": "^0.2.2", 988 | "source-map": "^0.5.6", 989 | "source-map-resolve": "^0.5.0", 990 | "use": "^3.1.0" 991 | }, 992 | "dependencies": { 993 | "define-property": { 994 | "version": "0.2.5", 995 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", 996 | "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", 997 | "dev": true, 998 | "requires": { 999 | "is-descriptor": "^0.1.0" 1000 | } 1001 | }, 1002 | "extend-shallow": { 1003 | "version": "2.0.1", 1004 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", 1005 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", 1006 | "dev": true, 1007 | "requires": { 1008 | "is-extendable": "^0.1.0" 1009 | } 1010 | } 1011 | } 1012 | }, 1013 | "snapdragon-node": { 1014 | "version": "2.1.1", 1015 | "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", 1016 | "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", 1017 | "dev": true, 1018 | "requires": { 1019 | "define-property": "^1.0.0", 1020 | "isobject": "^3.0.0", 1021 | "snapdragon-util": "^3.0.1" 1022 | }, 1023 | "dependencies": { 1024 | "define-property": { 1025 | "version": "1.0.0", 1026 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", 1027 | "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", 1028 | "dev": true, 1029 | "requires": { 1030 | "is-descriptor": "^1.0.0" 1031 | } 1032 | }, 1033 | "is-accessor-descriptor": { 1034 | "version": "1.0.0", 1035 | "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", 1036 | "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", 1037 | "dev": true, 1038 | "requires": { 1039 | "kind-of": "^6.0.0" 1040 | } 1041 | }, 1042 | "is-data-descriptor": { 1043 | "version": "1.0.0", 1044 | "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", 1045 | "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", 1046 | "dev": true, 1047 | "requires": { 1048 | "kind-of": "^6.0.0" 1049 | } 1050 | }, 1051 | "is-descriptor": { 1052 | "version": "1.0.2", 1053 | "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", 1054 | "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", 1055 | "dev": true, 1056 | "requires": { 1057 | "is-accessor-descriptor": "^1.0.0", 1058 | "is-data-descriptor": "^1.0.0", 1059 | "kind-of": "^6.0.2" 1060 | } 1061 | } 1062 | } 1063 | }, 1064 | "snapdragon-util": { 1065 | "version": "3.0.1", 1066 | "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", 1067 | "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", 1068 | "dev": true, 1069 | "requires": { 1070 | "kind-of": "^3.2.0" 1071 | }, 1072 | "dependencies": { 1073 | "kind-of": { 1074 | "version": "3.2.2", 1075 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 1076 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 1077 | "dev": true, 1078 | "requires": { 1079 | "is-buffer": "^1.1.5" 1080 | } 1081 | } 1082 | } 1083 | }, 1084 | "source-map": { 1085 | "version": "0.5.7", 1086 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", 1087 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", 1088 | "dev": true 1089 | }, 1090 | "source-map-resolve": { 1091 | "version": "0.5.2", 1092 | "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", 1093 | "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", 1094 | "dev": true, 1095 | "requires": { 1096 | "atob": "^2.1.1", 1097 | "decode-uri-component": "^0.2.0", 1098 | "resolve-url": "^0.2.1", 1099 | "source-map-url": "^0.4.0", 1100 | "urix": "^0.1.0" 1101 | } 1102 | }, 1103 | "source-map-url": { 1104 | "version": "0.4.0", 1105 | "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", 1106 | "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", 1107 | "dev": true 1108 | }, 1109 | "split-string": { 1110 | "version": "3.1.0", 1111 | "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", 1112 | "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", 1113 | "dev": true, 1114 | "requires": { 1115 | "extend-shallow": "^3.0.0" 1116 | } 1117 | }, 1118 | "static-extend": { 1119 | "version": "0.1.2", 1120 | "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", 1121 | "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", 1122 | "dev": true, 1123 | "requires": { 1124 | "define-property": "^0.2.5", 1125 | "object-copy": "^0.1.0" 1126 | }, 1127 | "dependencies": { 1128 | "define-property": { 1129 | "version": "0.2.5", 1130 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", 1131 | "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", 1132 | "dev": true, 1133 | "requires": { 1134 | "is-descriptor": "^0.1.0" 1135 | } 1136 | } 1137 | } 1138 | }, 1139 | "tippex": { 1140 | "version": "2.3.1", 1141 | "resolved": "https://registry.npmjs.org/tippex/-/tippex-2.3.1.tgz", 1142 | "integrity": "sha1-ov1bcIfXy/sgyYBqbBYQjCwPr9o=", 1143 | "dev": true 1144 | }, 1145 | "to-object-path": { 1146 | "version": "0.3.0", 1147 | "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", 1148 | "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", 1149 | "dev": true, 1150 | "requires": { 1151 | "kind-of": "^3.0.2" 1152 | }, 1153 | "dependencies": { 1154 | "kind-of": { 1155 | "version": "3.2.2", 1156 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 1157 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 1158 | "dev": true, 1159 | "requires": { 1160 | "is-buffer": "^1.1.5" 1161 | } 1162 | } 1163 | } 1164 | }, 1165 | "to-regex": { 1166 | "version": "3.0.2", 1167 | "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", 1168 | "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", 1169 | "dev": true, 1170 | "requires": { 1171 | "define-property": "^2.0.2", 1172 | "extend-shallow": "^3.0.2", 1173 | "regex-not": "^1.0.2", 1174 | "safe-regex": "^1.1.0" 1175 | } 1176 | }, 1177 | "to-regex-range": { 1178 | "version": "2.1.1", 1179 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", 1180 | "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", 1181 | "dev": true, 1182 | "requires": { 1183 | "is-number": "^3.0.0", 1184 | "repeat-string": "^1.6.1" 1185 | } 1186 | }, 1187 | "typescript": { 1188 | "version": "2.8.1", 1189 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.8.1.tgz", 1190 | "integrity": "sha512-Ao/f6d/4EPLq0YwzsQz8iXflezpTkQzqAyenTiw4kCUGr1uPiFLC3+fZ+gMZz6eeI/qdRUqvC+HxIJzUAzEFdg==", 1191 | "dev": true 1192 | }, 1193 | "union-value": { 1194 | "version": "1.0.0", 1195 | "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", 1196 | "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", 1197 | "dev": true, 1198 | "requires": { 1199 | "arr-union": "^3.1.0", 1200 | "get-value": "^2.0.6", 1201 | "is-extendable": "^0.1.1", 1202 | "set-value": "^0.4.3" 1203 | }, 1204 | "dependencies": { 1205 | "extend-shallow": { 1206 | "version": "2.0.1", 1207 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", 1208 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", 1209 | "dev": true, 1210 | "requires": { 1211 | "is-extendable": "^0.1.0" 1212 | } 1213 | }, 1214 | "set-value": { 1215 | "version": "0.4.3", 1216 | "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", 1217 | "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", 1218 | "dev": true, 1219 | "requires": { 1220 | "extend-shallow": "^2.0.1", 1221 | "is-extendable": "^0.1.1", 1222 | "is-plain-object": "^2.0.1", 1223 | "to-object-path": "^0.3.0" 1224 | } 1225 | } 1226 | } 1227 | }, 1228 | "universalify": { 1229 | "version": "0.1.2", 1230 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", 1231 | "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", 1232 | "dev": true 1233 | }, 1234 | "unset-value": { 1235 | "version": "1.0.0", 1236 | "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", 1237 | "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", 1238 | "dev": true, 1239 | "requires": { 1240 | "has-value": "^0.3.1", 1241 | "isobject": "^3.0.0" 1242 | }, 1243 | "dependencies": { 1244 | "has-value": { 1245 | "version": "0.3.1", 1246 | "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", 1247 | "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", 1248 | "dev": true, 1249 | "requires": { 1250 | "get-value": "^2.0.3", 1251 | "has-values": "^0.1.4", 1252 | "isobject": "^2.0.0" 1253 | }, 1254 | "dependencies": { 1255 | "isobject": { 1256 | "version": "2.1.0", 1257 | "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", 1258 | "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", 1259 | "dev": true, 1260 | "requires": { 1261 | "isarray": "1.0.0" 1262 | } 1263 | } 1264 | } 1265 | }, 1266 | "has-values": { 1267 | "version": "0.1.4", 1268 | "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", 1269 | "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", 1270 | "dev": true 1271 | } 1272 | } 1273 | }, 1274 | "urix": { 1275 | "version": "0.1.0", 1276 | "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", 1277 | "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", 1278 | "dev": true 1279 | }, 1280 | "use": { 1281 | "version": "3.1.1", 1282 | "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", 1283 | "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", 1284 | "dev": true 1285 | } 1286 | } 1287 | } 1288 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "mpreact", 3 | "version": "0.0.5", 4 | "description": "react like framework for mini program", 5 | "main": "lib/index.js", 6 | "files": [ 7 | "./lib/index.js", 8 | "./types/**/*", 9 | "./index.d.ts" 10 | ], 11 | "scripts": { 12 | "build": "node node_modules/rollup/bin/rollup -c" 13 | }, 14 | "keywords": [ 15 | "jsx", 16 | "typescript", 17 | "mini-program" 18 | ], 19 | "author": "qinjia@outlook.com", 20 | "license": "ISC", 21 | "devDependencies": { 22 | "fast-glob": "^2.2.2", 23 | "fs-extra": "^6.0.1", 24 | "rollup": "^0.56.5", 25 | "rollup-plugin-typescript": "^0.8.1", 26 | "typescript": "^2.7.2" 27 | }, 28 | "dependencies": {}, 29 | "types": "./index.d.ts" 30 | } 31 | -------------------------------------------------------------------------------- /rollup.config.js: -------------------------------------------------------------------------------- 1 | import typescript from 'rollup-plugin-typescript'; 2 | 3 | export default { 4 | input: 'src/index.ts', 5 | output: { 6 | format: 'umd', 7 | file: 'lib/index.js', 8 | name: 'mpreact', 9 | }, 10 | plugins: [ 11 | typescript() 12 | ] 13 | } -------------------------------------------------------------------------------- /src/core/app.ts: -------------------------------------------------------------------------------- 1 | 2 | interface AppOptions { 3 | /** 4 | * 打开小程序的路径 5 | */ 6 | path: string; 7 | /** 8 | * 打开小程序的query 9 | */ 10 | query: { [field: string]: number | string | boolean }; 11 | /** 12 | * 打开小程序的场景值 13 | */ 14 | scene: number; 15 | /** 16 | * shareTicket,详见 获取更多转发信息 17 | */ 18 | shareTicket: string; 19 | /** 20 | * 当场景为由从另一个小程序或公众号或App打开时,返回此字段 21 | */ 22 | referrerInfo: { 23 | /** 24 | * 来源小程序或公众号或App的 appId,详见下方说明 25 | */ 26 | appId: string 27 | /** 28 | * 来源小程序传过来的数据,scene=1037或1038时支持 29 | */ 30 | extraData: object; 31 | } 32 | } 33 | 34 | interface App { 35 | globalData: any; 36 | 37 | setData(data: any, cb?: Function): void; 38 | } 39 | 40 | export abstract class WxApp { 41 | 42 | constructor(private app: App, public options?: AppOptions) { 43 | 44 | } 45 | 46 | } 47 | 48 | export function AppConfig(config: { 49 | /** 50 | * 设置页面路径 51 | */ 52 | pages: Array; 53 | /** 54 | * 设置默认页面的窗口表现 55 | */ 56 | window?: { 57 | /** 58 | * #000000 导航栏背景颜色,如#000000 59 | */ 60 | navigationBarBackgroundColor?: string; 61 | /** 62 | * white 导航栏标题颜色,仅支持 black/white 63 | */ 64 | navigationBarTextStyle?: string; 65 | /** 66 | * 导航栏标题文字内容 67 | */ 68 | navigationBarTitleText?: string; 69 | /** 70 | * default 导航栏样式,仅支持 default/custom。custom 模式可自定义导航栏,只保留右上角胶囊状的按钮 微信版本 6.6.0 71 | */ 72 | navigationStyle?: string; 73 | /** 74 | * #ffffff 窗口的背景色 75 | */ 76 | backgroundColor?: string; 77 | /** 78 | * dark 下拉背景字体、loading 图的样式,仅支持 dark/light 79 | */ 80 | backgroundTextStyle?: string; 81 | /** 82 | * #ffffff 顶部窗口的背景色,仅 iOS 支持 微信版本 6.5.16 83 | */ 84 | backgroundColorTop?: string; 85 | /** 86 | * #ffffff 底部窗口的背景色,仅 iOS 支持 微信版本 6.5.16 87 | */ 88 | backgroundColorBottom?: string; 89 | /** 90 | * false 是否开启下拉刷新,详见页面相关事件处理函数 91 | */ 92 | enablePullDownRefresh?: boolean; 93 | /** 94 | * 50 页面上拉触底事件触发时距页面底部距离,单位为px 95 | */ 96 | onReachBottomDistance?: number; 97 | }; 98 | /** 99 | * 设置底部 tab 的表现 100 | */ 101 | tabBar?: { 102 | /** 103 | * tab 上的文字默认颜色 104 | */ 105 | color: string; 106 | /** 107 | * tab 上的文字选中时的颜色 108 | */ 109 | selectedColor: string; 110 | /** 111 | * tab 的背景色 112 | */ 113 | backgroundColor: string; 114 | /** 115 | * black tabbar上边框的颜色, 仅支持 black/white 116 | */ 117 | borderStyle?: string; 118 | /** 119 | * tab 的列表,详见 list 属性说明,最少2个、最多5个 tab 120 | */ 121 | list: Array<{ 122 | /** 123 | * 页面路径,必须在 pages 中先定义 124 | */ 125 | pagePath: string; 126 | /** 127 | * tab 上按钮文字 128 | */ 129 | text: string; 130 | /** 131 | * 图片路径,icon 大小限制为40kb,建议尺寸为 81px * 81px,当 postion 为 top 时,此参数无效,不支持网络图片 132 | */ 133 | iconPath?: string; 134 | /** 135 | * 选中时的图片路径,icon 大小限制为40kb,建议尺寸为 81px * 81px ,当 postion 为 top 时,此参数无效 136 | */ 137 | selectedIconPath?: string 138 | }>; 139 | /** 140 | *bottom 可选值 bottom、top 141 | */ 142 | position?: string; 143 | }; 144 | /** 145 | * 设置网络超时时间 146 | */ 147 | networkTimeout?: { 148 | /** 149 | * wx.request的超时时间,单位毫秒,默认为:60000 150 | */ 151 | request?: number; 152 | /** 153 | * wx.connectSocket的超时时间,单位毫秒,默认为:60000 154 | */ 155 | connectSocket?: number; 156 | /** 157 | * wx.uploadFile的超时时间,单位毫秒,默认为:60000 158 | */ 159 | uploadFile?: number; 160 | /** 161 | * wx.downloadFile的超时时间,单位毫秒,默认为:60000 162 | */ 163 | downloadFile?: number; 164 | }; 165 | /** 166 | * 设置是否开启 debug 模式 167 | */ 168 | debug?: boolean; 169 | }) { 170 | return (constructor: T) => { 171 | return class extends constructor { 172 | config = config; 173 | } 174 | } 175 | } -------------------------------------------------------------------------------- /src/core/component.ts: -------------------------------------------------------------------------------- 1 | interface Component { 2 | /** 3 | * 组件的文件路径 4 | */ 5 | is: string; 6 | /** 7 | * 节点id 8 | */ 9 | id: string; 10 | /** 11 | * 节点dataset 12 | */ 13 | dataset: string; 14 | /** 15 | * 组件数据,包括内部数据和属性值 16 | */ 17 | data: S; 18 | properties: any; 19 | methods: { 20 | [method: string]: Function; 21 | }; 22 | /** 23 | * 24 | * 设置data并执行视图层渲染 25 | */ 26 | setData: (data: Partial, cb?: Function) => void; 27 | /** 28 | * 检查组件是否具有 behavior (检查时会递归检查被直接或间接引入的所有behavior) 29 | */ 30 | hasBehavior: (behavior: object) => boolean; 31 | /** 32 | * 33 | * 触发事件,参见 组件事件 34 | */ 35 | triggerEvent: (name: string, detail: object, options: any) => void; 36 | /** 37 | * 创建一个 SelectorQuery 对象,选择器选取范围为这个组件实例内 38 | */ 39 | createSelectorQuery: () => any; 40 | /** 41 | * 使用选择器选择组件实例节点,返回匹配到的第一个组件实例对象 42 | */ 43 | selectComponent: (selector: string) => void; 44 | /** 45 | * 使用选择器选择组件实例节点,返回匹配到的全部组件实例对象组成的数组 46 | */ 47 | selectAllComponents: (selector: string) => void; 48 | /** 49 | * 获取所有这个关系对应的所有关联节点,参见 组件间关系 50 | */ 51 | getRelationNodes: (relationKey: string) => Array; 52 | } 53 | 54 | export abstract class WxComponent{ 55 | 56 | props: P; 57 | 58 | state: Partial = {}; 59 | 60 | abstract template: JSX.Element; 61 | 62 | mounted?(): void; 63 | 64 | constructor(public component: Component) { 65 | this.props = Object.assign({}, this.component.properties); 66 | [ 67 | // 实例方法 68 | ...Object.getOwnPropertyNames(Object.getPrototypeOf(this)), 69 | ].forEach(method => { 70 | if (typeof this[method] == "function" && ['constructor', 'mounted'].indexOf(method) === -1) { 71 | component[method] = this[method].bind(this); 72 | } 73 | }); 74 | } 75 | 76 | setState(state: Partial, cb?: Function) { 77 | this.state = Object.assign({}, this.state, state); 78 | this.component.setData(state, () => { 79 | cb && cb(); 80 | }); 81 | } 82 | 83 | } 84 | -------------------------------------------------------------------------------- /src/core/page.ts: -------------------------------------------------------------------------------- 1 | interface Page { 2 | data: S; 3 | setData(data: Partial, cb?: Function): void; 4 | } 5 | 6 | /** 7 | * 小程序Page类, P为page query,S为Page state 8 | */ 9 | export abstract class WxPage { 10 | 11 | state: Partial; 12 | query: P; 13 | 14 | constructor(private page: Page, options: P) { 15 | this.query = options; 16 | 17 | [ 18 | // 实例方法 19 | ...Object.getOwnPropertyNames(Object.getPrototypeOf(this)), 20 | ].forEach(method => { 21 | if (typeof this[method] == "function" && ['constructor', 'mounted'].indexOf(method) === -1) { 22 | page[method] = this[method].bind(this); 23 | } 24 | }); 25 | 26 | } 27 | 28 | abstract template: JSX.Element; 29 | 30 | mounted?(): void; 31 | 32 | setState(state: Partial, cb?: Function) { 33 | this.state = Object.assign({}, this.state, state); 34 | return new Promise((resolve, reject) => { 35 | this.page.setData(state, () => { 36 | cb && cb(); 37 | resolve(); 38 | }) 39 | }) 40 | } 41 | 42 | navigateTo(page: string, query: { [key: string]: number | string | boolean } = {}) { 43 | let url = page + `?${Object.keys(query).map(key => `${key}=${query[key]}`).join('&')}`; 44 | return wx.navigateTo({ url }); 45 | } 46 | 47 | redirectTo(page: string, query: { [key: string]: number | string | boolean } = {}) { 48 | let url = page + `?${Object.keys(query).map(key => `${key}=${query[key]}`).join('&')}`; 49 | return wx.redirectTo({ url }); 50 | } 51 | 52 | setTitle(title: string) { 53 | wx.setNavigationBarTitle({ title }) 54 | } 55 | } 56 | 57 | export function PageConfig(config: { 58 | /** 59 | * #000000 导航栏背景颜色,如"#000000" 60 | */ 61 | navigationBarBackgroundColor?: string; 62 | /** 63 | * white 导航栏标题颜色,仅支持 black/white 64 | */ 65 | navigationBarTextStyle?: string; 66 | /** 67 | * 导航栏标题文字内容 68 | */ 69 | navigationBarTitleText?: string; 70 | /** 71 | * #ffffff 窗口的背景色 72 | */ 73 | backgroundColor?: string; 74 | /** 75 | * dark 下拉背景字体、loading 图的样式,仅支持 dark/light 76 | */ 77 | backgroundTextStyle?: string; 78 | /** 79 | * false 是否开启下拉刷新,详见页面相关事件处理函数。 80 | */ 81 | enablePullDownRefresh?: boolean; 82 | /** 83 | * false 设置为 true 则页面整体不能上下滚动;只在 page.json 中有效,无法在 app.json 中设置该项 84 | */ 85 | disableScroll?: boolean; 86 | /** 87 | * 50 页面上拉触底事件触发时距页面底部距离,单位为px 88 | */ 89 | onReachBottomDistance?: number; 90 | }) { 91 | return (constructor: T) => { 92 | return class extends constructor { 93 | } 94 | } 95 | } 96 | -------------------------------------------------------------------------------- /src/core/wx.ts: -------------------------------------------------------------------------------- 1 | import { WxApp } from "./app"; 2 | import { WxPage } from "./page"; 3 | 4 | declare var getApp; 5 | declare var getCurrentPages; 6 | 7 | interface ExtendApi { 8 | getApp: () => WxApp; 9 | getCurrentPages: () => Array>; 10 | sleep: (time: number) => Promise; 11 | } 12 | 13 | function isSyncApi(api: string): boolean { 14 | return /^(on|create|stop|pause|hide)/.test(api) 15 | || /Sync$/.test(api) 16 | || ["pageScrollTo", "showNavigationBarLoading", "navigateBack"].indexOf(api) !== -1; 17 | } 18 | 19 | function promisifyWxApi() { 20 | // 命令空间 21 | let ns = {} as ExtendApi; 22 | 23 | Object.keys(wx).forEach(api => { 24 | if (!isSyncApi(api)) { 25 | ns[api] = function (obj: any = {}, ...args) { 26 | return new Promise((resolve, reject) => { 27 | obj.success = resolve; 28 | obj.fail = reject; 29 | wx[api](obj, ...args); 30 | }); 31 | } 32 | } else { 33 | ns[api] = wx[api]; 34 | } 35 | }); 36 | 37 | ns.getApp = function () { 38 | return getApp(); 39 | }; 40 | 41 | ns.getCurrentPages = function () { 42 | return getCurrentPages(); 43 | }; 44 | 45 | ns.sleep = function (time = 500) { 46 | return new Promise((resolve, reject) => { 47 | setTimeout(() => { 48 | resolve(); 49 | }, time) 50 | }) 51 | }; 52 | 53 | return ns; 54 | }; 55 | 56 | export default promisifyWxApi(); -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import wx from "./core/wx"; 2 | 3 | export { WxComponent } from "./core/component"; 4 | export { WxPage } from "./core/page"; 5 | export { WxApp } from "./core/app"; 6 | 7 | export default wx; -------------------------------------------------------------------------------- /test/index.tsx: -------------------------------------------------------------------------------- 1 | import wx, { WxApp, WxComponent, WxPage } from "../index" 2 | 3 | export class App extends WxApp { 4 | 5 | } 6 | 7 | export class Page extends WxPage<{}, {}> { 8 | 9 | template = ( 10 | 11 | 12 | 13 | ); 14 | 15 | mounted() { 16 | 17 | } 18 | 19 | 20 | } 21 | 22 | export class Component extends WxComponent<{ name: string; age: number }, {}> { 23 | 24 | template = ( 25 | 26 | ); 27 | 28 | } -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es2015", 4 | "module": "commonjs", 5 | "jsx": "preserve", 6 | "strictNullChecks": false 7 | } 8 | } -------------------------------------------------------------------------------- /types/wx.d.ts: -------------------------------------------------------------------------------- 1 | /************************************************ 2 | * * 3 | * 微信小程序 API * 4 | * * 5 | ************************************************/ 6 | 7 | declare namespace wx { 8 | 9 | interface WxAnimation { 10 | /** 11 | * 透明度,参数范围 0~1 12 | */ 13 | opacity(value: number): WxAnimation; 14 | /** 15 | * 颜色值 16 | */ 17 | backgroundColor(color: string): WxAnimation; 18 | /** 19 | * 长度值,如果传入 Number 则默认使用 px,可传入其他自定义单位的长度值 20 | */ 21 | width(length: number): WxAnimation; 22 | /** 23 | * 长度值,如果传入 Number 则默认使用 px,可传入其他自定义单位的长度值 24 | */ 25 | height(length: number): WxAnimation; 26 | /** 27 | * 长度值,如果传入 Number 则默认使用 px,可传入其他自定义单位的长度值 28 | */ 29 | top(length: number): WxAnimation; 30 | /** 31 | * 长度值,如果传入 Number 则默认使用 px,可传入其他自定义单位的长度值 32 | */ 33 | left(length: number): WxAnimation; 34 | /** 35 | * 长度值,如果传入 Number 则默认使用 px,可传入其他自定义单位的长度值 36 | */ 37 | bottom(length: number): WxAnimation; 38 | /** 39 | * 长度值,如果传入 Number 则默认使用 px,可传入其他自定义单位的长度值 40 | */ 41 | right(length: number): WxAnimation; 42 | /** 43 | * deg的范围-180~180,从原点顺时针旋转一个deg角度 44 | */ 45 | rotate(deg: number): WxAnimation; 46 | /** 47 | * deg的范围-180~180,在X轴旋转一个deg角度 48 | */ 49 | rotateX(deg: number): WxAnimation; 50 | /** 51 | * deg的范围-180~180,在Y轴旋转一个deg角度 52 | */ 53 | rotateY(deg: number): WxAnimation; 54 | /** 55 | * deg的范围-180~180,在Z轴旋转一个deg角度 56 | */ 57 | rotateZ(deg: number): WxAnimation; 58 | /** 59 | * 同transform-function rotate3d 60 | */ 61 | rotate3d(x: number, y: number, z: number, deg: number): WxAnimation; 62 | /** 63 | * 一个参数时,表示在X轴、Y轴同时缩放sx倍数;两个参数时表示在X轴缩放sx倍数,在Y轴缩放sy倍数 64 | */ 65 | scale(sx: number, sy?: number): WxAnimation; 66 | /** 67 | * 在X轴缩放sx倍数 68 | */ 69 | scaleX(sx: number): WxAnimation; 70 | /** 71 | * 在Y轴缩放sy倍数 72 | */ 73 | scaleY(sy: number): WxAnimation; 74 | /** 75 | * 在Z轴缩放sy倍数 76 | */ 77 | scaleZ(sz: number): WxAnimation; 78 | /** 79 | * 在X轴缩放sx倍数,在Y轴缩放sy倍数,在Z轴缩放sz倍数 80 | */ 81 | scale3d(sx: number, sy: number, sz: number): WxAnimation; 82 | /** 83 | * 一个参数时,表示在X轴偏移tx,单位px;两个参数时,表示在X轴偏移tx,在Y轴偏移ty,单位px。 84 | */ 85 | translate(tx: number, ty?: number): WxAnimation; 86 | /** 87 | * 在X轴偏移tx,单位px 88 | */ 89 | translateX(tx: number): WxAnimation; 90 | /** 91 | * 在Y轴偏移tx,单位px 92 | */ 93 | translateY(tx: number): WxAnimation; 94 | /** 95 | * 在Z轴偏移tx,单位px 96 | */ 97 | translateZ(tx: number): WxAnimation; 98 | /** 99 | * 在X轴偏移tx,在Y轴偏移ty,在Z轴偏移tz,单位px 100 | */ 101 | translate3d(tx: number, ty: number, tz: number): WxAnimation; 102 | /** 103 | * 参数范围-180~180;一个参数时,Y轴坐标不变,X轴坐标延顺时针倾斜ax度;两个参数时,分别在X轴倾斜ax度,在Y轴倾斜ay度 104 | */ 105 | skew(ax: number, ay?: number): WxAnimation; 106 | /** 107 | * 参数范围-180~180;Y轴坐标不变,X轴坐标延顺时针倾斜ax度 108 | */ 109 | skewX(ax: number): WxAnimation; 110 | /** 111 | * 参数范围-180~180;X轴坐标不变,Y轴坐标延顺时针倾斜ay度 112 | */ 113 | skewY(ay: number): WxAnimation; 114 | /** 115 | * 同transform-function matrix 116 | */ 117 | matrix(a: number, b: number, c: number, d: number, tx: number, ty: number): WxAnimation; 118 | /** 119 | * 同transform-function matrix3d 120 | */ 121 | matrix3d(): WxAnimation; 122 | } 123 | 124 | interface WxCanvasContext { 125 | /** 126 | * 设置填充色, 如果没有设置 fillStyle,默认颜色为 black。 127 | */ 128 | setFillStyle(color: string): void; 129 | /** 130 | * 设置边框颜色, 如果没有设置 fillStyle,默认颜色为 black。 131 | */ 132 | setStrokeStyle(color: string): void; 133 | /** 134 | * 设置阴影 135 | */ 136 | setShadow(offsetX: number, offsetY: number, blur: number, color: string): void; 137 | /** 138 | * 创建一个线性的渐变颜色。需要使用 addColorStop() 来指定渐变点,至少要两个。 139 | */ 140 | createLinearGradient(x0: number, y0: number, x1: number, y1: number): void; 141 | /** 142 | * 创建一个圆形的渐变颜色。 起点在圆心,终点在圆环。 需要使用 addColorStop() 来指定渐变点,至少要两个。 143 | */ 144 | createCircularGradient(x: number, y: number, r: number): void; 145 | /** 146 | * 创建一个颜色的渐变点。小于最小 stop 的部分会按最小 stop 的 color 来渲染,大于最大 stop 的部分会按最大 stop 的 color 来渲染。需要使用 addColorStop() 来指定渐变点,至少要两个。 147 | */ 148 | addColorStop(stop: number, color: string): void; 149 | /** 150 | * 设置线条端点的样式 151 | */ 152 | setLineCap(lineCap: 'butt' | 'round' | 'square'): void; 153 | /** 154 | * 设置两线相交处的样式 155 | */ 156 | setLineJoin(lineJoin: 'bevel' | 'round' | 'miter'): void; 157 | /** 158 | * 设置线条宽度 159 | */ 160 | setLineWidth(lineWidth: number): void; 161 | /** 162 | * 设置虚线 163 | */ 164 | setLineDash(patten: number[], offset: number); 165 | /** 166 | * 设置最大倾斜 167 | */ 168 | setMiterLimit(miterLimit: number): void; 169 | /** 170 | * 添加一个矩形路径到当前路径。 171 | */ 172 | rect(x: number, y: number, width: number, height: number): void; 173 | /** 174 | * 填充一个矩形。用 setFillStyle() 设置矩形的填充色,如果没设置默认是黑色。 175 | */ 176 | fillRect(x: number, y: number, width: number, height: number): void; 177 | /** 178 | * 一个矩形(非填充)。用 setFillStroke() 设置矩形线条的颜色,如果没设置默认是黑色。 179 | */ 180 | strokeRect(x: number, y: number, width: number, height: number): void; 181 | /** 182 | * 在给定的矩形区域内,清除画布上的像素 183 | */ 184 | clearRect(x: number, y: number, width: number, height: number): void; 185 | /** 186 | * 对当前路径进行填充 187 | */ 188 | fill(): void; 189 | /** 190 | * 对当前路径进行描边 191 | */ 192 | stroke(): void; 193 | /** 194 | * 开始一个路径 195 | */ 196 | beginPath(): void; 197 | /** 198 | * 关闭一个路径 199 | */ 200 | closePath(): void; 201 | /** 202 | * 把路径移动到画布中的指定点,但不创建线条。 203 | */ 204 | moveTo(x: number, y: number): void; 205 | /** 206 | * 添加一个新点,然后在画布中创建从该点到最后指定点的线条。 207 | */ 208 | lineTo(x: number, y: number): void; 209 | /** 210 | * 添加一个弧形路径到当前路径,顺时针绘制。 211 | */ 212 | arc(x: number, y: number, radius: number, startAngle: number, sweepAngle: number): void; 213 | /** 214 | * 创建二次方贝塞尔曲线 215 | */ 216 | quadraticCurveTo(cpx: number, cpy: number, x: number, y: number): void; 217 | /** 218 | * 创建三次方贝塞尔曲线 219 | */ 220 | bezierCurveTo(cpx1: number, cpy1: number, cpx2: number, cpy2: number, x: number, y: number): void; 221 | /** 222 | * 对横纵坐标进行缩放 223 | */ 224 | scale(scaleWidth: number/**横坐标缩放的倍数1 = 100%,0.5 = 50%,2 = 200%,依次类 */, scaleHeight: number/** 纵坐标轴缩放的倍数1 = 100%,0.5 = 50%,2 = 200%,依次类 */): void; 225 | /** 226 | * 对坐标轴进行顺时针旋转 227 | */ 228 | rotate(deg: number/**degrees * Math.PI/180;degrees范围为0~360;旋转角度,以弧度计 */): void; 229 | /** 230 | * 对坐标原点进行缩放 231 | */ 232 | translate(x: number/**水平坐标平移量 */, y: number/**竖直坐标平移量 */): void; 233 | /** 234 | * 设置字体字号 235 | */ 236 | setFontSize(size: number): void; 237 | /** 238 | * 在画布上绘制被填充的文本 239 | */ 240 | fillText(text: string, x: number, y: number): void; 241 | /** 242 | * 设置文字的对齐 243 | */ 244 | setTextAlign(align: "left" | "center" | "right"): void; 245 | /** 246 | * 设置文字水平对齐 247 | */ 248 | setTextBaseline(baseline: "top" | "bottom" | "middle" | "normal"): void; 249 | /** 250 | * 设置字体大小 251 | */ 252 | setFontSize(fontSize: number): void; 253 | /** 254 | * 在画布上绘制图像 255 | */ 256 | drawImage(imageResource: string, x: number, y: number, width: number, height: number): void; 257 | /** 258 | * 设置全局画笔透明度。 259 | */ 260 | setGlobalAlpha(alpha: number): void; 261 | /** 262 | * 保存当前坐标轴的缩放、旋转、平移信息 263 | */ 264 | save(): void; 265 | /** 266 | * 恢复之前保存过的坐标轴的缩放、旋转、平移信息 267 | */ 268 | restore(): void; 269 | /** 270 | * 进行绘图 271 | */ 272 | draw(reserve?: boolean): void; 273 | } 274 | 275 | interface WxAudioContext { 276 | /** 277 | * 播放 278 | */ 279 | play: () => void; 280 | /** 281 | * 暂停 282 | */ 283 | pause: () => void; 284 | /** 285 | * 跳转到指定位置,单位 s 286 | */ 287 | seek: (position: number) => void; 288 | } 289 | 290 | interface WxVideoContext { 291 | /** 292 | * 播放 293 | */ 294 | play: () => void; 295 | /** 296 | * 暂停 297 | */ 298 | pause: () => void; 299 | /** 300 | * 跳转到指定位置,单位 s 301 | */ 302 | seek: (position: number) => void; 303 | /** 304 | * 发送弹幕,danmu 包含两个属性 text, color。 305 | */ 306 | sendDanmu: (danmu: { text: string; color: string; }) => void; 307 | } 308 | 309 | interface WxMapContext { 310 | /** 311 | * 获取当前地图中心的经纬度,返回的是 gcj02 坐标系,可以用于 wx.openLocation 312 | */ 313 | getCenterLocation: (obj: { 314 | /** 315 | * 接口调用成功的回调函数 ,res = { longitude: "经度", latitude: "纬度"} 316 | */ 317 | success?: (res: { longitude: string; latitude: string }) => void; 318 | /** 319 | * 接口调用失败的回调函数 320 | */ 321 | fail?: () => void; 322 | /** 323 | * 接口调用结束的回调函数(调用成功、失败都会执行) 324 | */ 325 | complete?: () => void; 326 | }) => void; 327 | /** 328 | * 将地图中心移动到当前定位点,需要配合map组件的show-location使用 329 | */ 330 | moveToLocation: () => void; 331 | } 332 | 333 | interface WxBaseEvent { 334 | /** 335 | * 事件类型 336 | */ 337 | type: string; 338 | /** 339 | * 事件生成时的时间戳 340 | */ 341 | timeStamp: number; 342 | /** 343 | * 触发事件的组件的一些属性值集合 344 | */ 345 | target: { 346 | /** 347 | * 事件源组件的id 348 | */ 349 | id: string; 350 | /** 351 | * 当前组件的类型 352 | */ 353 | tagName: string; 354 | /** 355 | * 事件源组件上由data-开头的自定义属性组成的集合 356 | */ 357 | dataset: { 358 | [key: string]: any; 359 | }; 360 | offsetTop: number; 361 | offsetLeft: number; 362 | }; 363 | /** 364 | * 当前组件的一些属性值集合 365 | */ 366 | currentTarget: { 367 | /** 368 | * 事件源组件的id 369 | */ 370 | id: string; 371 | /** 372 | * 当前组件的类型 373 | */ 374 | tagName: string; 375 | /** 376 | * 事件源组件上由data-开头的自定义属性组成的集合 377 | */ 378 | dataset: { 379 | [key: string]: any; 380 | }; 381 | offsetTop: number; 382 | offsetLeft: number; 383 | }; 384 | } 385 | 386 | interface WxCanvasTouch { 387 | /** 388 | * 触摸点的标识符 389 | */ 390 | identifier: number; 391 | /** 392 | * 距离 Canvas 左上角的距离,Canvas 的左上角为原点 ,横向为X轴,纵向为Y轴 393 | */ 394 | x: number; 395 | y: number; 396 | } 397 | 398 | interface WxTouch { 399 | /** 400 | * 触摸点的标识符 401 | */ 402 | identifier: number; 403 | /** 404 | * 距离文档左上角的距离,文档的左上角为原点 ,横向为X轴,纵向为Y轴 405 | */ 406 | pageX: number; 407 | pageY: number; 408 | /** 409 | * 距离页面可显示区域(屏幕除去导航条)左上角距离,横向为X轴,纵向为Y轴 410 | */ 411 | clientX: number; 412 | clientY: number; 413 | } 414 | 415 | interface WxTouchEvent extends WxBaseEvent { 416 | touches: Array; 417 | changedTouches: Array; 418 | } 419 | 420 | interface SystemInfo { 421 | 422 | /** 423 | * 手机品牌 424 | */ 425 | brand: string; 426 | /** 427 | * 手机型号 428 | */ 429 | model: string; 430 | /** 431 | * 设备像素比 432 | */ 433 | pixelRatio: number; 434 | /** 435 | * 屏幕宽度 436 | */ 437 | screenWidth: number; 438 | /** 439 | * 屏幕高度 440 | */ 441 | screenHeight: number; 442 | /** 443 | * 可使用窗口宽度 444 | */ 445 | windowWidth: number; 446 | /** 447 | * 可使用窗口高度 448 | */ 449 | windowHeight: number; 450 | /** 451 | * 微信设置的语言 452 | */ 453 | language: string; 454 | /** 455 | * 微信版本号 456 | */ 457 | version: string; 458 | /** 459 | * 操作系统版本 460 | */ 461 | system: string; 462 | /** 463 | * 客户端平台 464 | */ 465 | platform: string; 466 | /** 467 | * 用户字体大小设置。以“我-设置-通用-字体大小”中的设置为准,单位:px 468 | */ 469 | fontSizeSetting: number; 470 | /** 471 | * 客户端基础库版本 472 | */ 473 | SDKVersion: string; 474 | 475 | } 476 | 477 | // # 网络 # 478 | 479 | /** 480 | * 发起网络请求。使用前请先阅读说明。 481 | */ 482 | export function request(obj: { 483 | /** 484 | * 485 | */ 486 | url: string; 487 | /** 488 | * 489 | */ 490 | data?: any; 491 | /** 492 | * 493 | */ 494 | header?: any; 495 | /** 496 | * GET 497 | */ 498 | method?: string; 499 | /** 500 | * json 501 | */ 502 | dataType?: string; 503 | }): Promise; 504 | 505 | /** 506 | * 将本地资源上传到开发者服务器,客户端发起一个 HTTPS POST 请求,其中 content-type 为 multipart/form-data 。使用前请先阅读说明。 507 | */ 508 | export function uploadFile(obj: { 509 | /** 510 | * 开发者服务器 url 511 | */ 512 | url: string; 513 | /** 514 | * 要上传文件资源的路径 515 | */ 516 | filePath: string; 517 | /** 518 | * 文件对应的 key , 开发者在服务器端通过这个 key 可以获取到文件二进制内容 519 | */ 520 | name: string; 521 | /** 522 | * HTTP 请求 Header, header 中不能设置 Referer 523 | */ 524 | header?: any; 525 | /** 526 | * HTTP 请求中其他额外的 form data 527 | */ 528 | formData?: any; 529 | }): Promise; 530 | 531 | /** 532 | * 下载文件资源到本地,客户端直接发起一个 HTTP GET 请求,返回文件的本地临时路径。使用前请先阅读说明。 533 | */ 534 | export function downloadFile(obj: { 535 | /** 536 | * 下载资源的 url 537 | */ 538 | url: string; 539 | /** 540 | * HTTP 请求 Header,header 中不能设置 Referer 541 | */ 542 | header?: any; 543 | }): Promise; 544 | 545 | /** 546 | * 创建一个 WebSocket 连接。使用前请先阅读说明。 547 | */ 548 | export function connectSocket(obj: { 549 | /** 550 | * 开发者服务器接口地址,必须是 wss 协议,且域名必须是后台配置的合法域名 551 | */ 552 | url: string; 553 | /** 554 | * HTTP Header , header 中不能设置 Referer 555 | */ 556 | header?: any; 557 | /** 558 | * 默认是GET,有效值:OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT 559 | */ 560 | method?: string; 561 | /** 562 | * 子协议数组 563 | */ 564 | protocols?: string[]; 565 | }): Promise; 566 | 567 | /** 568 | * 监听WebSocket连接打开事件。 569 | */ 570 | export function onSocketOpen(callback: Function): void; 571 | 572 | /** 573 | * 监听WebSocket错误。 574 | */ 575 | export function onSocketError(callback: Function): void; 576 | 577 | /** 578 | * 通过 WebSocket 连接发送数据,需要先 wx.connectSocket,并在 wx.onSocketOpen 回调之后才能发送。 579 | */ 580 | export function sendSocketMessage(obj: { 581 | /** 582 | * 需要发送的内容 583 | */ 584 | data: undefined; 585 | }): Promise; 586 | 587 | /** 588 | * 监听WebSocket接受到服务器的消息事件。 589 | */ 590 | export function onSocketMessage(callback: Function): void; 591 | 592 | /** 593 | * 关闭WebSocket连接。 594 | */ 595 | export function closeSocket(obj: { 596 | /** 597 | * 一个数字值表示关闭连接的状态号,表示连接被关闭的原因。如果这个参数没有被指定,默认的取值是1000 (表示正常连接关闭) 598 | */ 599 | code?: number; 600 | /** 601 | * 一个可读的字符串,表示连接被关闭的原因。这个字符串必须是不长于123字节的UTF-8 文本(不是字符) 602 | */ 603 | reason?: string; 604 | /** 605 | * 接口调用成功的回调函数 606 | */ 607 | success?: Function; 608 | /** 609 | * 接口调用失败的回调函数 610 | */ 611 | fail?: Function; 612 | /** 613 | * 接口调用结束的回调函数(调用成功、失败都会执行) 614 | */ 615 | complete?: Function; 616 | }): void; 617 | 618 | /** 619 | * 监听WebSocket关闭。 620 | */ 621 | export function onSocketClose(callback: Function): void; 622 | 623 | // # 媒体 # 624 | 625 | /** 626 | * 从本地相册选择图片或使用相机拍照。 627 | */ 628 | export function chooseImage(obj: { 629 | /** 630 | * 最多可以选择的图片张数,默认9 631 | */ 632 | count?: number; 633 | /** 634 | * original 原图,compressed 压缩图,默认二者都有 635 | */ 636 | sizeType?: string[]; 637 | /** 638 | * album 从相册选图,camera 使用相机,默认二者都有 639 | */ 640 | sourceType?: string[]; 641 | }): Promise; 642 | 643 | /** 644 | * 预览图片。 645 | */ 646 | export function previewImage(obj: { 647 | /** 648 | * 当前显示图片的链接,不填则默认为 urls 的第一张 649 | */ 650 | current?: string; 651 | /** 652 | * 需要预览的图片链接列表 653 | */ 654 | urls: string[]; 655 | }): Promise; 656 | 657 | /** 658 | * 获取图片信息 659 | */ 660 | export function getImageInfo(obj: { 661 | /** 662 | * 图片的路径,可以是相对路径,临时文件路径,存储文件路径,网络图片路径 663 | */ 664 | src: string; 665 | }): Promise; 666 | 667 | export function saveImageToPhotosAlbum(obj: { 668 | /** 669 | * 图片文件路径,可以是临时文件路径也可以是永久文件路径,不支持网络图片路径 670 | */ 671 | filePath: string; 672 | }): Promise; 673 | 674 | /** 675 | * 开始录音。当主动调用wx.stopRecord,或者录音超过1分钟时自动结束录音,返回录音文件的临时文件路径。当用户离开小程序时,此接口无法调用。 676 | */ 677 | export function startRecord(): Promise; 678 | 679 | /** 680 | * ​主动调用停止录音。 681 | */ 682 | export function stopRecord(): void; 683 | 684 | export function getRecorderManager(): Promise; 685 | 686 | /** 687 | * 开始播放语音,同时只允许一个语音文件正在播放,如果前一个语音文件还没播放完,将中断前一个语音播放。 688 | */ 689 | export function playVoice(obj: { 690 | /** 691 | * 需要播放的语音文件的文件路径 692 | */ 693 | filePath: string; 694 | /** 695 | * 指定录音时长,到达指定的录音时长后会自动停止录音,单位:秒,默认值:60 696 | */ 697 | duration?: number; 698 | }): Promise; 699 | 700 | /** 701 | * 暂停正在播放的语音。再次调用wx.playVoice播放同一个文件时,会从暂停处开始播放。如果想从头开始播放,需要先调用 wx.stopVoice。 702 | */ 703 | export function pauseVoice(): void; 704 | 705 | /** 706 | * 结束播放语音。 707 | */ 708 | export function stopVoice(): void; 709 | 710 | /** 711 | * 获取后台音乐播放状态。 712 | */ 713 | export function getBackgroundAudioPlayerState(): Promise; 714 | 715 | /** 716 | * 使用后台播放器播放音乐,对于微信客户端来说,只能同时有一个后台音乐在播放。当用户离开小程序后,音乐将暂停播放;当用户点击“显示在聊天顶部”时,音乐不会暂停播放;当用户在其他小程序占用了音乐播放器,原有小程序内的音乐将停止播放。 717 | */ 718 | export function playBackgroundAudio(obj: { 719 | /** 720 | * 音乐链接,目前支持的格式有 m4a, aac, mp3, wav 721 | */ 722 | dataUrl: string; 723 | /** 724 | * 音乐标题 725 | */ 726 | title?: string; 727 | /** 728 | * 封面URL 729 | */ 730 | coverImgUrl?: string; 731 | }): Promise; 732 | 733 | /** 734 | * 暂停播放音乐。 735 | */ 736 | export function pauseBackgroundAudio(): void; 737 | 738 | /** 739 | * 控制音乐播放进度。 740 | */ 741 | export function seekBackgroundAudio(obj: { 742 | /** 743 | * 音乐位置,单位:秒 744 | */ 745 | position: number; 746 | }): Promise; 747 | 748 | /** 749 | * 停止播放音乐。 750 | */ 751 | export function stopBackgroundAudio(): void; 752 | 753 | /** 754 | * 监听音乐播放。 755 | */ 756 | export function onBackgroundAudioPlay(callback: Function): void; 757 | 758 | /** 759 | * 监听音乐暂停。 760 | */ 761 | export function onBackgroundAudioPause(callback: Function): void; 762 | 763 | /** 764 | * 监听音乐停止。 765 | */ 766 | export function onBackgroundAudioStop(callback: Function): void; 767 | 768 | export function getBackgroundAudioManager(): Promise; 769 | 770 | /** 771 | * 1.6.0 版本开始,建议使用能力更强的 wx.createInnerAudioContext 接口 772 | */ 773 | export function createAudioContext(): WxAudioContext; 774 | 775 | /** 776 | * 拍摄视频或从手机相册中选视频,返回视频的临时文件路径。 777 | */ 778 | export function chooseVideo(obj: { 779 | /** 780 | * album 从相册选视频,camera 使用相机拍摄,默认为:['album', 'camera'] 781 | */ 782 | sourceType?: string[]; 783 | /** 784 | * 是否压缩所选的视频源文件,默认值为true,需要压缩 785 | */ 786 | compressed?: undefined; 787 | /** 788 | * 拍摄视频最长拍摄时间,单位秒。最长支持 60 秒 789 | */ 790 | maxDuration?: number; 791 | /** 792 | * 默认调起的为前置还是后置摄像头。front: 前置,back: 后置,默认 back 793 | */ 794 | camera?: string; 795 | }): Promise; 796 | 797 | export function saveVideoToPhotosAlbum(obj: { 798 | /** 799 | * 视频文件路径,可以是临时文件路径也可以是永久文件路径 800 | */ 801 | filePath: string; 802 | }): Promise; 803 | 804 | /** 805 | * 创建并返回 video 上下文 videoContext 对象 806 | */ 807 | export function createVideoContext(): WxVideoContext; 808 | 809 | export function createCameraContext(): void; 810 | 811 | // # 文件 # 812 | 813 | /** 814 | * 保存文件到本地。注意:saveFile 会把临时文件移动,因此调用成功后传入的 tempFilePath 将不可用 815 | */ 816 | export function saveFile(obj: { 817 | /** 818 | * 需要保存的文件的临时路径 819 | */ 820 | tempFilePath: string; 821 | }): Promise; 822 | 823 | /** 824 | * 获取本地已保存的文件列表 825 | */ 826 | export function getSavedFileList(): Promise; 827 | 828 | /** 829 | * 获取本地文件的文件信息。此接口只能用于获取已保存到本地的文件,若需要获取临时文件信息,请使用 wx.getFileInfo 接口。 830 | */ 831 | export function getSavedFileInfo(obj: { 832 | /** 833 | * 文件路径 834 | */ 835 | filePath: string; 836 | }): Promise; 837 | 838 | /** 839 | * 删除本地存储的文件 840 | */ 841 | export function removeSavedFile(obj: { 842 | /** 843 | * 需要删除的文件路径 844 | */ 845 | filePath: string; 846 | }): Promise; 847 | 848 | /** 849 | * 新开页面打开文档,支持格式:doc, xls, ppt, pdf, docx, xlsx, pptx 850 | */ 851 | export function openDocument(obj: { 852 | /** 853 | * 文件路径,可通过 downFile 获得 854 | */ 855 | filePath: string; 856 | /** 857 | * 文件类型,指定文件类型打开文件,有效值 doc, xls, ppt, pdf, docx, xlsx, pptx 858 | */ 859 | fileType?: string; 860 | }): Promise; 861 | 862 | export function getFileInfo(obj: { 863 | /** 864 | * 本地文件路径 865 | */ 866 | filePath: string; 867 | /** 868 | * 计算文件摘要的算法,默认值 md5,有效值:md5,sha1 869 | */ 870 | digestAlgorithm?: string; 871 | }): Promise; 872 | 873 | // # 数据缓存 # 874 | 875 | /** 876 | * 将数据存储在本地缓存中指定的 key 中,会覆盖掉原来该 key 对应的内容,这是一个异步接口。 877 | */ 878 | export function setStorage(obj: { 879 | /** 880 | * 本地缓存中的指定的 key 881 | */ 882 | key: string; 883 | /** 884 | * 需要存储的内容 885 | */ 886 | data: any; 887 | }): Promise; 888 | 889 | /** 890 | * 将 data 存储在本地缓存中指定的 key 中,会覆盖掉原来该 key 对应的内容,这是一个同步接口。 891 | */ 892 | export function setStorageSync(key: string, data: any, ): void; 893 | 894 | /** 895 | * 从本地缓存中异步获取指定 key 对应的内容。 896 | */ 897 | export function getStorage(obj: { 898 | /** 899 | * 本地缓存中的指定的 key 900 | */ 901 | key: string; 902 | }): Promise; 903 | 904 | /** 905 | * 从本地缓存中同步获取指定 key 对应的内容。 906 | */ 907 | export function getStorageSync(key: string): void; 908 | 909 | /** 910 | * 异步获取当前storage的相关信息 911 | */ 912 | export function getStorageInfo(): Promise; 913 | 914 | /** 915 | * 同步获取当前storage的相关信息 916 | */ 917 | export function getStorageInfoSync(): void; 918 | 919 | /** 920 | * 从本地缓存中异步移除指定 key 。 921 | */ 922 | export function removeStorage(obj: { 923 | /** 924 | * 本地缓存中的指定的 key 925 | */ 926 | key: string; 927 | }): Promise; 928 | 929 | /** 930 | * 从本地缓存中同步移除指定 key 。 931 | */ 932 | export function removeStorageSync(key: string): void; 933 | 934 | /** 935 | * 清理本地数据缓存。 936 | */ 937 | export function clearStorage(): void; 938 | 939 | /** 940 | * 同步清理本地数据缓存 941 | */ 942 | export function clearStorageSync(): void; 943 | 944 | // # 位置 # 945 | 946 | /** 947 | * 获取当前的地理位置、速度。当用户离开小程序后,此接口无法调用;当用户点击“显示在聊天顶部”时,此接口可继续调用。 948 | */ 949 | export function getLocation(obj: { 950 | /** 951 | * 默认为 wgs84 返回 gps 坐标,gcj02 返回可用于wx.openLocation的坐标 952 | */ 953 | type?: string; 954 | }): Promise; 955 | 956 | /** 957 | * 打开地图选择位置。 958 | */ 959 | export function chooseLocation(): Promise; 960 | 961 | /** 962 | * ​使用微信内置地图查看位置。 963 | */ 964 | export function openLocation(obj: { 965 | /** 966 | * 纬度,范围为-90~90,负数表示南纬 967 | */ 968 | latitude: number; 969 | /** 970 | * 经度,范围为-180~180,负数表示西经 971 | */ 972 | longitude: number; 973 | /** 974 | * 缩放比例,范围5~18,默认为18 975 | */ 976 | scale?: number; 977 | /** 978 | * 位置名 979 | */ 980 | name?: string; 981 | /** 982 | * 地址的详细说明 983 | */ 984 | address?: string; 985 | }): Promise; 986 | 987 | /** 988 | * 创建并返回 map 上下文 mapContext 对象 989 | */ 990 | export function createMapContext(): void; 991 | 992 | // # 设备 # 993 | 994 | /** 995 | * 获取系统信息。 996 | */ 997 | export function getSystemInfo(): Promise; 998 | 999 | /** 1000 | * 获取系统信息同步接口 1001 | */ 1002 | export function getSystemInfoSync(): SystemInfo; 1003 | 1004 | /** 1005 | * 获取网络类型。 1006 | */ 1007 | export function getNetworkType(): Promise; 1008 | 1009 | export function onNetworkStatusChange(callback: Function): void; 1010 | 1011 | export function setScreenBrightness(obj: { 1012 | /** 1013 | * 屏幕亮度值,范围 0~1,0 最暗,1 最亮 1014 | */ 1015 | value: number; 1016 | }): Promise; 1017 | 1018 | export function getScreenBrightness(): Promise; 1019 | 1020 | export function vibrateLong(): Promise; 1021 | 1022 | export function vibrateShort(): Promise; 1023 | 1024 | /** 1025 | * 监听加速度数据,频率:5次/秒,接口调用后会自动开始监听,可使用 wx.stopAccelerometer 停止监听。 1026 | */ 1027 | export function onAccelerometerChange(callback: Function): void; 1028 | 1029 | export function startAccelerometer(): Promise; 1030 | 1031 | export function stopAccelerometer(): void; 1032 | 1033 | /** 1034 | * 监听罗盘数据,频率:5次/秒,接口调用后会自动开始监听,可使用wx.stopCompass停止监听。 1035 | */ 1036 | export function onCompassChange(callback: Function): void; 1037 | 1038 | export function startCompass(): Promise; 1039 | 1040 | export function stopCompass(): void; 1041 | 1042 | export function makePhoneCall(obj: { 1043 | /** 1044 | * 需要拨打的电话号码 1045 | */ 1046 | phoneNumber: string; 1047 | }): Promise; 1048 | 1049 | /** 1050 | * 调起客户端扫码界面,扫码成功后返回对应的结果 1051 | */ 1052 | export function scanCode(obj: { 1053 | /** 1054 | * 是否只能从相机扫码,不允许从相册选择图片 1055 | */ 1056 | onlyFromCamera?: boolean; 1057 | }): Promise; 1058 | 1059 | export function setClipboardData(obj: { 1060 | /** 1061 | * 需要设置的内容 1062 | */ 1063 | data: string; 1064 | }): Promise; 1065 | 1066 | export function getClipboardData(): Promise; 1067 | 1068 | export function openBluetoothAdapter(): Promise; 1069 | 1070 | export function closeBluetoothAdapter(): void; 1071 | 1072 | export function getBluetoothAdapterState(): Promise; 1073 | 1074 | export function onBluetoothAdapterStateChange(callback: Function): void; 1075 | 1076 | export function startBluetoothDevicesDiscovery(obj: { 1077 | /** 1078 | * 蓝牙设备主 service 的 uuid 列表 1079 | */ 1080 | services?: Array; 1081 | /** 1082 | * 是否允许重复上报同一设备, 如果允许重复上报,则onDeviceFound 方法会多次上报同一设备,但是 RSSI 值会有不同 1083 | */ 1084 | allowDuplicatesKey?: boolean; 1085 | /** 1086 | * 上报设备的间隔,默认为0,意思是找到新设备立即上报,否则根据传入的间隔上报 1087 | */ 1088 | interval?: number; 1089 | }): Promise; 1090 | 1091 | export function stopBluetoothDevicesDiscovery(): void; 1092 | 1093 | export function getBluetoothDevices(): Promise; 1094 | 1095 | export function onBluetoothDeviceFound(callback: Function): void; 1096 | 1097 | export function getConnectedBluetoothDevices(obj: { 1098 | /** 1099 | * 蓝牙设备主 service 的 uuid 列表 1100 | */ 1101 | services: Array; 1102 | }): Promise; 1103 | 1104 | export function createBLEConnection(obj: { 1105 | /** 1106 | * 蓝牙设备 id,参考 getDevices 接口 1107 | */ 1108 | deviceId: string; 1109 | /** 1110 | * 成功则返回本机蓝牙适配器状态 1111 | */ 1112 | success: Function; 1113 | /** 1114 | * 接口调用失败的回调函数 1115 | */ 1116 | fail?: Function; 1117 | /** 1118 | * 接口调用结束的回调函数(调用成功、失败都会执行) 1119 | */ 1120 | complete?: Function; 1121 | }): void; 1122 | 1123 | export function closeBLEConnection(obj: { 1124 | /** 1125 | * 蓝牙设备 id,参考 getDevices 接口 1126 | */ 1127 | deviceId: string; 1128 | /** 1129 | * 成功则返回本机蓝牙适配器状态 1130 | */ 1131 | success: Function; 1132 | /** 1133 | * 接口调用失败的回调函数 1134 | */ 1135 | fail?: Function; 1136 | /** 1137 | * 接口调用结束的回调函数(调用成功、失败都会执行) 1138 | */ 1139 | complete?: Function; 1140 | }): void; 1141 | 1142 | export function onBLEConnectionStateChange(callback: Function): void; 1143 | 1144 | export function getBLEDeviceServices(obj: { 1145 | /** 1146 | * 蓝牙设备 id,参考 getDevices 接口 1147 | */ 1148 | deviceId: string; 1149 | }): Promise; 1150 | 1151 | export function getBLEDeviceCharacteristics(obj: { 1152 | /** 1153 | * 蓝牙设备 id,参考 device 对象 1154 | */ 1155 | deviceId: string; 1156 | /** 1157 | * 蓝牙服务 uuid 1158 | */ 1159 | serviceId: string; 1160 | }): Promise; 1161 | 1162 | export function readBLECharacteristicValue(obj: { 1163 | /** 1164 | * 蓝牙设备 id,参考 device 对象 1165 | */ 1166 | deviceId: string; 1167 | /** 1168 | * 蓝牙特征值对应服务的 uuid 1169 | */ 1170 | serviceId: string; 1171 | /** 1172 | * 蓝牙特征值的 uuid 1173 | */ 1174 | characteristicId: string; 1175 | }): Promise; 1176 | 1177 | export function writeBLECharacteristicValue(obj: { 1178 | /** 1179 | * 蓝牙设备 id,参考 device 对象 1180 | */ 1181 | deviceId: string; 1182 | /** 1183 | * 蓝牙特征值对应服务的 uuid 1184 | */ 1185 | serviceId: string; 1186 | /** 1187 | * 蓝牙特征值的 uuid 1188 | */ 1189 | characteristicId: string; 1190 | /** 1191 | * 蓝牙设备特征值对应的二进制值 1192 | */ 1193 | value: undefined; 1194 | }): Promise; 1195 | 1196 | export function notifyBLECharacteristicValueChange(obj: { 1197 | /** 1198 | * 蓝牙设备 id,参考 device 对象 1199 | */ 1200 | deviceId: string; 1201 | /** 1202 | * 蓝牙特征值对应服务的 uuid 1203 | */ 1204 | serviceId: string; 1205 | /** 1206 | * 蓝牙特征值的 uuid 1207 | */ 1208 | characteristicId: string; 1209 | /** 1210 | * true: 启用 notify; false: 停用 notify 1211 | */ 1212 | state: boolean; 1213 | }): Promise; 1214 | 1215 | export function onBLECharacteristicValueChange(callback: Function): void; 1216 | 1217 | export function startBeaconDiscovery(obj: { 1218 | /** 1219 | * iBeacon设备广播的 uuids 1220 | */ 1221 | uuids: string[]; 1222 | }): Promise; 1223 | 1224 | export function stopBeaconDiscovery(): void; 1225 | 1226 | export function getBeacons(): Promise; 1227 | 1228 | export function onBeaconUpdate(callback: Function): void; 1229 | 1230 | export function onBeaconServiceChange(callback: Function): void; 1231 | 1232 | export function onUserCaptureScreen(callback: Function): void; 1233 | 1234 | export function addPhoneContact(obj: { 1235 | /** 1236 | * 头像本地文件路径 1237 | */ 1238 | photoFilePath?: string; 1239 | /** 1240 | * 昵称 1241 | */ 1242 | nickName?: string; 1243 | /** 1244 | * 姓氏 1245 | */ 1246 | lastName?: string; 1247 | /** 1248 | * 中间名 1249 | */ 1250 | middleName?: string; 1251 | /** 1252 | * 名字 1253 | */ 1254 | firstName: string; 1255 | /** 1256 | * 备注 1257 | */ 1258 | remark?: string; 1259 | /** 1260 | * 手机号 1261 | */ 1262 | mobilePhoneNumber?: string; 1263 | /** 1264 | * 微信号 1265 | */ 1266 | weChatNumber?: string; 1267 | /** 1268 | * 联系地址国家 1269 | */ 1270 | addressCountry?: string; 1271 | /** 1272 | * 联系地址省份 1273 | */ 1274 | addressState?: string; 1275 | /** 1276 | * 联系地址城市 1277 | */ 1278 | addressCity?: string; 1279 | /** 1280 | * 联系地址街道 1281 | */ 1282 | addressStreet?: string; 1283 | /** 1284 | * 联系地址邮政编码 1285 | */ 1286 | addressPostalCode?: string; 1287 | /** 1288 | * 公司 1289 | */ 1290 | organization?: string; 1291 | /** 1292 | * 职位 1293 | */ 1294 | title?: string; 1295 | /** 1296 | * 工作传真 1297 | */ 1298 | workFaxNumber?: string; 1299 | /** 1300 | * 工作电话 1301 | */ 1302 | workPhoneNumber?: string; 1303 | /** 1304 | * 公司电话 1305 | */ 1306 | hostNumber?: string; 1307 | /** 1308 | * 电子邮件 1309 | */ 1310 | email?: string; 1311 | /** 1312 | * 网站 1313 | */ 1314 | url?: string; 1315 | /** 1316 | * 工作地址国家 1317 | */ 1318 | workAddressCountry?: string; 1319 | /** 1320 | * 工作地址省份 1321 | */ 1322 | workAddressState?: string; 1323 | /** 1324 | * 工作地址城市 1325 | */ 1326 | workAddressCity?: string; 1327 | /** 1328 | * 工作地址街道 1329 | */ 1330 | workAddressStreet?: string; 1331 | /** 1332 | * 工作地址邮政编码 1333 | */ 1334 | workAddressPostalCode?: string; 1335 | /** 1336 | * 住宅传真 1337 | */ 1338 | homeFaxNumber?: string; 1339 | /** 1340 | * 住宅电话 1341 | */ 1342 | homePhoneNumber?: string; 1343 | /** 1344 | * 住宅地址国家 1345 | */ 1346 | homeAddressCountry?: string; 1347 | /** 1348 | * 住宅地址省份 1349 | */ 1350 | homeAddressState?: string; 1351 | /** 1352 | * 住宅地址城市 1353 | */ 1354 | homeAddressCity?: string; 1355 | /** 1356 | * 住宅地址街道 1357 | */ 1358 | homeAddressStreet?: string; 1359 | /** 1360 | * 住宅地址邮政编码 1361 | */ 1362 | homeAddressPostalCode?: string; 1363 | }): Promise; 1364 | 1365 | // # 界面 # 1366 | 1367 | /** 1368 | * 显示消息提示框 1369 | */ 1370 | export function showToast(obj: { 1371 | /** 1372 | * 提示的内容 1373 | */ 1374 | title: string; 1375 | /** 1376 | * 图标,有效值 "success", "loading" 1377 | */ 1378 | icon?: string; 1379 | /** 1380 | * 自定义图标的本地路径,image 的优先级高于 icon 1381 | */ 1382 | image?: string; 1383 | /** 1384 | * 提示的延迟时间,单位毫秒,默认:1500 1385 | */ 1386 | duration?: number; 1387 | /** 1388 | * 是否显示透明蒙层,防止触摸穿透,默认:false 1389 | */ 1390 | mask?: boolean; 1391 | }): Promise; 1392 | 1393 | export function showLoading(obj: { 1394 | /** 1395 | * 提示的内容 1396 | */ 1397 | title: string; 1398 | /** 1399 | * 是否显示透明蒙层,防止触摸穿透,默认:false 1400 | */ 1401 | mask?: boolean; 1402 | }): Promise; 1403 | 1404 | /** 1405 | * 隐藏消息提示框 1406 | */ 1407 | export function hideToast(): void; 1408 | 1409 | export function hideLoading(): Promise; 1410 | 1411 | /** 1412 | * ​显示模态弹窗 1413 | */ 1414 | export function showModal(obj: { 1415 | /** 1416 | * 提示的标题 1417 | */ 1418 | title: string; 1419 | /** 1420 | * 提示的内容 1421 | */ 1422 | content: string; 1423 | /** 1424 | * 是否显示取消按钮,默认为 true 1425 | */ 1426 | showCancel?: boolean; 1427 | /** 1428 | * 取消按钮的文字,默认为"取消",最多 4 个字符 1429 | */ 1430 | cancelText?: string; 1431 | /** 1432 | * 取消按钮的文字颜色,默认为"#000000" 1433 | */ 1434 | cancelColor?: undefined; 1435 | /** 1436 | * 确定按钮的文字,默认为"确定",最多 4 个字符 1437 | */ 1438 | confirmText?: string; 1439 | /** 1440 | * 确定按钮的文字颜色,默认为"#3CC51F" 1441 | */ 1442 | confirmColor?: undefined; 1443 | }): Promise; 1444 | 1445 | /** 1446 | * ​显示操作菜单 1447 | */ 1448 | export function showActionSheet(obj: { 1449 | /** 1450 | * 按钮的文字数组,数组长度最大为6个 1451 | */ 1452 | itemList: undefined; 1453 | /** 1454 | * 按钮的文字颜色,默认为"#000000" 1455 | */ 1456 | itemColor?: undefined; 1457 | }): Promise; 1458 | 1459 | export function setTopBarText(obj: { 1460 | /** 1461 | * 置顶栏文字内容 1462 | */ 1463 | text: string; 1464 | }): Promise; 1465 | 1466 | /** 1467 | * 动态设置当前页面的标题。 1468 | */ 1469 | export function setNavigationBarTitle(obj: { 1470 | /** 1471 | * 页面标题 1472 | */ 1473 | title: string; 1474 | }): Promise; 1475 | 1476 | /** 1477 | * 在当前页面显示导航条加载动画。 1478 | */ 1479 | export function showNavigationBarLoading(): void; 1480 | 1481 | /** 1482 | * 隐藏导航条加载动画。 1483 | */ 1484 | export function hideNavigationBarLoading(): void; 1485 | 1486 | /** 1487 | * 保留当前页面,跳转到应用内的某个页面,使用wx.navigateBack可以返回到原页面。 1488 | */ 1489 | export function navigateTo(obj: { 1490 | /** 1491 | * 需要跳转的应用内非 tabBar 的页面的路径 , 路径后可以带参数。参数与路径之间使用?分隔,参数键与参数值用=相连,不同参数用&分隔;如 'path?key=value&key2=value2' 1492 | */ 1493 | url: string; 1494 | }): Promise; 1495 | 1496 | /** 1497 | * 关闭当前页面,跳转到应用内的某个页面。 1498 | */ 1499 | export function redirectTo(obj: { 1500 | /** 1501 | * 需要跳转的应用内非 tabBar 的页面的路径,路径后可以带参数。参数与路径之间使用?分隔,参数键与参数值用=相连,不同参数用&分隔;如 'path?key=value&key2=value2' 1502 | */ 1503 | url: string; 1504 | }): Promise; 1505 | 1506 | export function reLaunch(obj: { 1507 | /** 1508 | * 需要跳转的应用内页面路径 , 路径后可以带参数。参数与路径之间使用?分隔,参数键与参数值用=相连,不同参数用&分隔;如 'path?key=value&key2=value2',如果跳转的页面路径是 tabBar 页面则不能带参数 1509 | */ 1510 | url: string; 1511 | }): Promise; 1512 | 1513 | /** 1514 | * 跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面 1515 | */ 1516 | export function switchTab(obj: { 1517 | /** 1518 | * 需要跳转的 tabBar 页面的路径(需在 app.json 的 tabBar 字段定义的页面),路径后不能带参数 1519 | */ 1520 | url: string; 1521 | }): Promise; 1522 | 1523 | /** 1524 | * 关闭当前页面,返回上一页面或多级页面。可通过 getCurrentPages()) 获取当前的页面栈,决定需要返回几层。 1525 | */ 1526 | export function navigateBack(obj: { 1527 | /** 1528 | * 返回的页面数,如果 delta 大于现有页面数,则返回到首页。 1529 | */ 1530 | delta?: number; 1531 | }): Promise; 1532 | 1533 | /** 1534 | * 创建一个动画实例animation。调用实例的方法来描述动画。最后通过动画实例的export方法导出动画数据传递给组件的animation属性。 1535 | */ 1536 | export function createAnimation(obj: { 1537 | /** 1538 | * 400 1539 | */ 1540 | duration?: number; 1541 | /** 1542 | * "linear" 1543 | */ 1544 | timingFunction?: string; 1545 | /** 1546 | * 0 1547 | */ 1548 | delay?: number; 1549 | /** 1550 | * "50% 50% 0" 1551 | */ 1552 | transformOrigin?: string; 1553 | }): WxAnimation; 1554 | 1555 | export function pageScrollTo(obj: { 1556 | /** 1557 | * 滚动到页面的目标位置(单位px) 1558 | */ 1559 | scrollTop: number; 1560 | }): Promise; 1561 | 1562 | /** 1563 | * 创建 canvas 绘图上下文(指定 canvasId).Tip: 需要指定 canvasId,该绘图上下文只作用于对应的 1564 | */ 1565 | export function createCanvasContext(canvasId: string): WxCanvasContext; 1566 | 1567 | /** 1568 | * 把当前画布的内容导出生成图片,并返回文件路径 1569 | */ 1570 | export function canvasToTempFilePath(obj: { 1571 | /** 1572 | * 画布x轴起点(默认0) 1.2.0 1573 | */ 1574 | x?: number; 1575 | /** 1576 | * 画布y轴起点(默认0) 1.2.0 1577 | */ 1578 | y?: number; 1579 | /** 1580 | * 画布宽度(默认为canvas宽度-x) 1.2.0 1581 | */ 1582 | width?: number; 1583 | /** 1584 | * 画布高度(默认为canvas高度-y) 1.2.0 1585 | */ 1586 | height?: number; 1587 | /** 1588 | * 输出图片宽度(默认为width) 1.2.0 1589 | */ 1590 | destWidth?: number; 1591 | /** 1592 | * 输出图片高度(默认为height) 1.2.0 1593 | */ 1594 | destHeight?: number; 1595 | /** 1596 | * 画布标识,传入 的 cavas-id 1597 | */ 1598 | canvasId: string; 1599 | /** 1600 | * 目标文件的类型,只支持 'jpg' 或 'png'。默认为 'png' 1.7.0 1601 | */ 1602 | fileType?: string; 1603 | /** 1604 | * 图片的质量,取值范围为 (0, 1],不在范围内时当作1.0处理 1.7.0 1605 | */ 1606 | quality?: number; 1607 | }): Promise; 1608 | 1609 | export function startPullDownRefresh(): Promise; 1610 | 1611 | /** 1612 | * 停止当前页面下拉刷新。 1613 | */ 1614 | export function stopPullDownRefresh(): void; 1615 | 1616 | // # WXML节点信息 # 1617 | 1618 | // # 第三方平台 # 1619 | 1620 | export function getExtConfig(): Promise; 1621 | 1622 | export function getExtConfigSync(): void; 1623 | 1624 | // # 开放接口 # 1625 | 1626 | /** 1627 | * 调用接口获取登录凭证(code)进而换取用户登录态信息,包括用户的唯一标识(openid) 及本次登录的 会话密钥(session_key)等。用户数据的加解密通讯需要依赖会话密钥完成。 1628 | */ 1629 | export function login(): Promise; 1630 | 1631 | /** 1632 | * 通过上述接口获得的用户登录态拥有一定的时效性。用户越久未使用小程序,用户登录态越有可能失效。反之如果用户一直在使用小程序,则用户登录态一直保持有效。具体时效逻辑由微信维护,对开发者透明。开发者只需要调用wx.checkSession接口检测当前用户登录态是否有效。登录态过期后开发者可以再调用wx.login获取新的用户登录态。 1633 | */ 1634 | export function checkSession(): Promise; 1635 | 1636 | /** 1637 | * 获取用户信息,withCredentials 为 true 时需要先调用 wx.login 接口。 1638 | */ 1639 | export function getUserInfo(obj: { 1640 | /** 1641 | * 是否带上登录态信息 1642 | */ 1643 | withCredentials?: boolean; 1644 | /** 1645 | * 指定返回用户信息的语言,zh_CN 简体中文,zh_TW 繁体中文,en 英文。默认为en。 1646 | */ 1647 | lang?: string; 1648 | }): Promise; 1649 | 1650 | /** 1651 | * 发起微信支付。 1652 | */ 1653 | export function requestPayment(obj: { 1654 | /** 1655 | * 时间戳从1970年1月1日00:00:00至今的秒数,即当前的时间 1656 | */ 1657 | timeStamp: string; 1658 | /** 1659 | * 随机字符串,长度为32个字符以下。 1660 | */ 1661 | nonceStr: string; 1662 | /** 1663 | * 统一下单接口返回的 prepay_id 参数值,提交格式如:prepay_id=* 1664 | */ 1665 | package: string; 1666 | /** 1667 | * 签名算法,暂支持 MD5 1668 | */ 1669 | signType: string; 1670 | /** 1671 | * 签名,具体签名方案参见小程序支付接口文档; 1672 | */ 1673 | paySign: string; 1674 | }): Promise; 1675 | 1676 | export function chooseAddress(): Promise; 1677 | 1678 | export function addCard(obj: { 1679 | /** 1680 | * 需要添加的卡券列表,列表内对象说明请参见请求对象说明 1681 | */ 1682 | cardList: undefined; 1683 | }): Promise; 1684 | 1685 | export function openCard(obj: { 1686 | /** 1687 | * 需要打开的卡券列表,列表内参数详见openCard 请求对象说明 1688 | */ 1689 | cardList: undefined; 1690 | }): Promise; 1691 | 1692 | export function openSetting(): Promise; 1693 | 1694 | export function getSetting(): Promise; 1695 | 1696 | export function getWeRunData(): Promise; 1697 | 1698 | export function navigateToMiniProgram(obj: { 1699 | /** 1700 | * 要打开的小程序 appId 1701 | */ 1702 | appId: string; 1703 | /** 1704 | * 打开的页面路径,如果为空则打开首页 1705 | */ 1706 | path?: string; 1707 | /** 1708 | * 需要传递给目标小程序的数据,目标小程序可在 App.onLaunch(),App.onShow() 中获取到这份数据。详情 1709 | */ 1710 | extraData?: any; 1711 | /** 1712 | * 要打开的小程序版本,有效值 develop(开发版),trial(体验版),release(正式版) ,仅在当前小程序为开发版或体验版时此参数有效;如果当前小程序是体验版或正式版,则打开的小程序必定是正式版。默认值 release 1713 | */ 1714 | envVersion?: string; 1715 | }): Promise; 1716 | 1717 | export function chooseInvoiceTitle(): Promise; 1718 | 1719 | export function checkIsSupportSoterAuthentication(): Promise; 1720 | 1721 | // # 数据 # 1722 | 1723 | /** 1724 | * 自定义分析数据上报接口。使用前,需要在小程序管理后台自定义分析中新建事件,配置好事件名与字段。 1725 | */ 1726 | export function reportAnalytics(eventName: string, data: object): Promise; 1727 | 1728 | // # 拓展接口 # 1729 | 1730 | export function arrayBufferToBase64(): Promise; 1731 | 1732 | export function base64ToArrayBuffer(): Promise; 1733 | 1734 | // # 调试接口 # 1735 | 1736 | export function setEnableDebug(obj: { 1737 | /** 1738 | * 是否打开调试 1739 | */ 1740 | }): Promise; 1741 | 1742 | 1743 | } -------------------------------------------------------------------------------- /types/wxml.d.ts: -------------------------------------------------------------------------------- 1 | 2 | declare namespace WXML { 3 | 4 | interface WxBaseTag { 5 | wx_if?: Boolean; 6 | wx_elif?: Boolean; 7 | wx_else?: null; 8 | wx_for?: Array; 9 | wx_key?: string; 10 | wx_for_item?: string; 11 | wx_for_index?: string; 12 | } 13 | 14 | interface WxmlElement extends WxBaseTag { 15 | id?: string; 16 | class?: string; 17 | style?: string; 18 | [property: string]: any; 19 | } 20 | 21 | 22 | interface WxBaseEvent { 23 | /** 24 | * 事件类型 25 | */ 26 | type: string; 27 | /** 28 | * 事件生成时的时间戳 29 | */ 30 | timeStamp: number; 31 | /** 32 | * 触发事件的组件的一些属性值集合 33 | */ 34 | target: { 35 | /** 36 | * 事件源组件的id 37 | */ 38 | id: string; 39 | /** 40 | * 当前组件的类型 41 | */ 42 | tagName: string; 43 | /** 44 | * 事件源组件上由data-开头的自定义属性组成的集合 45 | */ 46 | dataset: { 47 | [key: string]: any; 48 | }; 49 | offsetTop: number; 50 | offsetLeft: number; 51 | }; 52 | /** 53 | * 当前组件的一些属性值集合 54 | */ 55 | currentTarget: { 56 | /** 57 | * 事件源组件的id 58 | */ 59 | id: string; 60 | /** 61 | * 当前组件的类型 62 | */ 63 | tagName: string; 64 | /** 65 | * 事件源组件上由data-开头的自定义属性组成的集合 66 | */ 67 | dataset: { 68 | [key: string]: any; 69 | }; 70 | offsetTop: number; 71 | offsetLeft: number; 72 | }; 73 | } 74 | 75 | interface WxCanvasTouch { 76 | /** 77 | * 触摸点的标识符 78 | */ 79 | identifier: number; 80 | /** 81 | * 距离 Canvas 左上角的距离,Canvas 的左上角为原点 ,横向为X轴,纵向为Y轴 82 | */ 83 | x: number; 84 | y: number; 85 | } 86 | 87 | interface WxTouch { 88 | /** 89 | * 触摸点的标识符 90 | */ 91 | identifier: number; 92 | /** 93 | * 距离文档左上角的距离,文档的左上角为原点 ,横向为X轴,纵向为Y轴 94 | */ 95 | pageX: number; 96 | pageY: number; 97 | /** 98 | * 距离页面可显示区域(屏幕除去导航条)左上角距离,横向为X轴,纵向为Y轴 99 | */ 100 | clientX: number; 101 | clientY: number; 102 | } 103 | 104 | interface WxEvent extends WxBaseEvent { 105 | touches: Array; 106 | changedTouches: Array; 107 | detail: any; 108 | } 109 | 110 | 111 | interface EventHandle { 112 | (e: WxEvent): void; 113 | } 114 | 115 | /** 视图容器。 */ 116 | interface View extends WxmlElement { 117 | 118 | /** 指定按下去的样式类。当 hover-class="none" 时,没有点击态效果; none */ 119 | 'hover-class'?: string; 120 | 121 | /** 指定是否阻止本节点的祖先节点出现点击态; false */ 122 | 'hover-stop-propagation'?: boolean; 123 | 124 | /** 按住后多久出现点击态,单位毫秒; 50 */ 125 | 'hover-start-time'?: number; 126 | 127 | /** 手指松开后点击态保留时间,单位毫秒; 400 */ 128 | 'hover-stay-time'?: number; 129 | 130 | } 131 | 132 | /** 可滚动视图区域。 */ 133 | interface ScrollView extends WxmlElement { 134 | 135 | /** 允许横向滚动; false */ 136 | 'scroll-x'?: boolean; 137 | 138 | /** 允许纵向滚动; false */ 139 | 'scroll-y'?: boolean; 140 | 141 | /** 距顶部/左边多远时(单位px),触发 scrolltoupper 事件; 50 */ 142 | 'upper-threshold'?: number; 143 | 144 | /** 距底部/右边多远时(单位px),触发 scrolltolower 事件; 50 */ 145 | 'lower-threshold'?: number; 146 | 147 | /** 设置竖向滚动条位置; */ 148 | 'scroll-top'?: number; 149 | 150 | /** 设置横向滚动条位置; */ 151 | 'scroll-left'?: number; 152 | 153 | /** 值应为某子元素id(id不能以数字开头)。设置哪个方向可滚动,则在哪个方向滚动到该元素; */ 154 | 'scroll-into-view'?: string; 155 | 156 | /** 在设置滚动条位置时使用动画过渡; false */ 157 | 'scroll-with-animation'?: boolean; 158 | 159 | /** iOS点击顶部状态栏、安卓双击标题栏时,滚动条返回顶部,只支持竖向; false */ 160 | 'enable-back-to-top'?: boolean; 161 | 162 | /** 滚动到顶部/左边,会触发 scrolltoupper 事件; */ 163 | bindscrolltoupper?: EventHandle; 164 | 165 | /** 滚动到底部/右边,会触发 scrolltolower 事件; */ 166 | bindscrolltolower?: EventHandle; 167 | 168 | /** 滚动时触发,event.detail = {scrollLeft, scrollTop, scrollHeight, scrollWidth, deltaX, deltaY}; */ 169 | bindscroll?: EventHandle; 170 | 171 | } 172 | 173 | /** 滑块视图容器。 */ 174 | interface Swiper extends WxmlElement { 175 | 176 | /** 是否显示面板指示点; false */ 177 | 'indicator-dots'?: boolean; 178 | 179 | /** 指示点颜色; rgba(0, 0, 0, .3) */ 180 | 'indicator-color'?: string; 181 | 182 | /** 当前选中的指示点颜色; #000000 */ 183 | 'indicator-active-color'?: string; 184 | 185 | /** 是否自动切换; false */ 186 | autoplay?: boolean; 187 | 188 | /** 当前所在滑块的 index; 0 */ 189 | current?: number; 190 | 191 | /** 当前所在滑块的 item-id ,不能与 current 被同时指定; "" */ 192 | 'current-item-id'?: string; 193 | 194 | /** 自动切换时间间隔; 5000 */ 195 | interval?: number; 196 | 197 | /** 滑动动画时长; 500 */ 198 | duration?: number; 199 | 200 | /** 是否采用衔接滑动; false */ 201 | circular?: boolean; 202 | 203 | /** 滑动方向是否为纵向; false */ 204 | vertical?: boolean; 205 | 206 | /** 前边距,可用于露出前一项的一小部分,接受 px 和 rpx 值; "0px" */ 207 | 'previous-margin'?: string; 208 | 209 | /** 后边距,可用于露出后一项的一小部分,接受 px 和 rpx 值; "0px" */ 210 | 'next-margin'?: string; 211 | 212 | /** 同时显示的滑块数量; 1 */ 213 | 'display-multiple-items'?: number; 214 | 215 | /** 是否跳过未显示的滑块布局,设为 true 可优化复杂情况下的滑动性能,但会丢失隐藏状态滑块的布局信息; false */ 216 | 'skip-hidden-item-layout'?: boolean; 217 | 218 | /** current 改变时会触发 change 事件,event.detail = {current: current, source: source}; */ 219 | bindchange?: EventHandle; 220 | 221 | /** 动画结束时会触发 animationfinish 事件,event.detail 同上; */ 222 | bindanimationfinish?: EventHandle; 223 | 224 | } 225 | 226 | /** 仅可放置在组件中,宽高自动设置为100%。 */ 227 | interface SwiperItem extends WxmlElement { 228 | 229 | /** 是否显示面板指示点; false */ 230 | 'indicator-dots'?: boolean; 231 | 232 | /** 指示点颜色; rgba(0, 0, 0, .3) */ 233 | 'indicator-color'?: string; 234 | 235 | /** 当前选中的指示点颜色; #000000 */ 236 | 'indicator-active-color'?: string; 237 | 238 | /** 是否自动切换; false */ 239 | autoplay?: boolean; 240 | 241 | /** 当前所在滑块的 index; 0 */ 242 | current?: number; 243 | 244 | /** 当前所在滑块的 item-id ,不能与 current 被同时指定; "" */ 245 | 'current-item-id'?: string; 246 | 247 | /** 自动切换时间间隔; 5000 */ 248 | interval?: number; 249 | 250 | /** 滑动动画时长; 500 */ 251 | duration?: number; 252 | 253 | /** 是否采用衔接滑动; false */ 254 | circular?: boolean; 255 | 256 | /** 滑动方向是否为纵向; false */ 257 | vertical?: boolean; 258 | 259 | /** 前边距,可用于露出前一项的一小部分,接受 px 和 rpx 值; "0px" */ 260 | 'previous-margin'?: string; 261 | 262 | /** 后边距,可用于露出后一项的一小部分,接受 px 和 rpx 值; "0px" */ 263 | 'next-margin'?: string; 264 | 265 | /** 同时显示的滑块数量; 1 */ 266 | 'display-multiple-items'?: number; 267 | 268 | /** 是否跳过未显示的滑块布局,设为 true 可优化复杂情况下的滑动性能,但会丢失隐藏状态滑块的布局信息; false */ 269 | 'skip-hidden-item-layout'?: boolean; 270 | 271 | /** current 改变时会触发 change 事件,event.detail = {current: current, source: source}; */ 272 | bindchange?: EventHandle; 273 | 274 | /** 动画结束时会触发 animationfinish 事件,event.detail 同上; */ 275 | bindanimationfinish?: EventHandle; 276 | 277 | } 278 | 279 | /** */ 280 | interface MovableArea extends WxmlElement { 281 | 282 | /** 当里面的movable-view设置为支持双指缩放时,设置此值可将缩放手势生效区域修改为整个movable-area; false */ 283 | 'scale-area'?: boolean; 284 | 285 | } 286 | 287 | /** */ 288 | interface MovableView extends WxmlElement { 289 | 290 | /** 当里面的movable-view设置为支持双指缩放时,设置此值可将缩放手势生效区域修改为整个movable-area; false */ 291 | 'scale-area'?: boolean; 292 | 293 | } 294 | 295 | /** */ 296 | interface CoverView extends WxmlElement { 297 | 298 | } 299 | 300 | /** */ 301 | interface CoverImage extends WxmlElement { 302 | 303 | } 304 | 305 | /** 图标。 */ 306 | interface Icon extends WxmlElement { 307 | 308 | /** icon的类型,有效值:success, success_no_circle, info, warn, waiting, cancel, download, search, clear; */ 309 | type?: string; 310 | 311 | /** icon的大小,单位px; 23 */ 312 | size?: number; 313 | 314 | /** icon的颜色,同css的color; */ 315 | color?: string; 316 | 317 | } 318 | 319 | /** 文本。 */ 320 | interface Text extends WxmlElement { 321 | 322 | /** 文本是否可选; false */ 323 | selectable?: boolean; 324 | 325 | /** 显示连续空格; false */ 326 | space?: string; 327 | 328 | /** 是否解码; false */ 329 | decode?: boolean; 330 | 331 | } 332 | 333 | /** */ 334 | interface RichText extends WxmlElement { 335 | 336 | /** 节点列表 / HTML String; [] */ 337 | nodes?: string|Array; 338 | 339 | } 340 | 341 | /** 进度条。 */ 342 | interface Progress extends WxmlElement { 343 | 344 | /** 百分比0~100; 无 */ 345 | percent?: number; 346 | 347 | /** 在进度条右侧显示百分比; false */ 348 | 'show-info'?: boolean; 349 | 350 | /** 进度条线的宽度,单位px; 6 */ 351 | 'stroke-width'?: number; 352 | 353 | /** 进度条颜色 (请使用 activeColor); #09BB07 */ 354 | color?: string; 355 | 356 | /** 已选择的进度条的颜色; */ 357 | activeColor?: string; 358 | 359 | /** 未选择的进度条的颜色; */ 360 | backgroundColor?: string; 361 | 362 | /** 进度条从左往右的动画; false */ 363 | active?: boolean; 364 | 365 | /** backwards: 动画从头播;forwards:动画从上次结束点接着播; backwards */ 366 | 'active-mode'?: string; 367 | 368 | } 369 | 370 | /** 按钮。 */ 371 | interface Button extends WxmlElement { 372 | 373 | /** 按钮的大小; default */ 374 | size?: string; 375 | 376 | /** 按钮的样式类型; default */ 377 | type?: string; 378 | 379 | /** 按钮是否镂空,背景色透明; false */ 380 | plain?: boolean; 381 | 382 | /** 是否禁用; false */ 383 | disabled?: boolean; 384 | 385 | /** 名称前是否带 loading 图标; false */ 386 | loading?: boolean; 387 | 388 | /** 用于

组件,点击分别会触发 组件的 submit/reset 事件; */ 389 | 'form-type'?: string; 390 | 391 | /** 微信开放能力; */ 392 | 'open-type'?: string; 393 | 394 | /** 打开 APP 时,向 APP 传递的参数; */ 395 | 'app-parameter'?: string; 396 | 397 | /** 指定按钮按下去的样式类。当 hover-class="none" 时,没有点击态效果; button-hover */ 398 | 'hover-class'?: string; 399 | 400 | /** 指定是否阻止本节点的祖先节点出现点击态; false */ 401 | 'hover-stop-propagation'?: boolean; 402 | 403 | /** 按住后多久出现点击态,单位毫秒; 20 */ 404 | 'hover-start-time'?: number; 405 | 406 | /** 手指松开后点击态保留时间,单位毫秒; 70 */ 407 | 'hover-stay-time'?: number; 408 | 409 | /** 用户点击该按钮时,会返回获取到的用户信息,从返回参数的detail中获取到的值同wx.getUserInfo; */ 410 | bindgetuserinfo?: EventHandle; 411 | 412 | /** 指定返回用户信息的语言,zh_CN 简体中文,zh_TW 繁体中文,en 英文。; en */ 413 | lang?: string; 414 | 415 | /** 会话来源; */ 416 | 'session-from'?: string; 417 | 418 | /** 会话内消息卡片标题; 当前标题 */ 419 | 'send-message-title'?: string; 420 | 421 | /** 会话内消息卡片点击跳转小程序路径; 当前分享路径 */ 422 | 'send-message-path'?: string; 423 | 424 | /** 会话内消息卡片图片; 截图 */ 425 | 'send-message-img'?: string; 426 | 427 | /** 显示会话内消息卡片; false */ 428 | 'show-message-card'?: boolean; 429 | 430 | /** 客服消息回调; */ 431 | bindcontact?: EventHandle; 432 | 433 | /** 获取用户手机号回调; */ 434 | bindgetphonenumber?: EventHandle; 435 | 436 | /** 当使用开放能力时,发生错误的回调; */ 437 | binderror?: EventHandle; 438 | 439 | } 440 | 441 | /** 多项选择器,内部由多个checkbox组成。 */ 442 | interface CheckboxGroup extends WxmlElement { 443 | 444 | /** 中选中项发生改变是触发 change 事件,detail = {value:[选中的checkbox的value的数组]}; */ 445 | bindchange?: EventHandle; 446 | 447 | } 448 | 449 | /** 多选项目。 */ 450 | interface Checkbox extends WxmlElement { 451 | 452 | /** 中选中项发生改变是触发 change 事件,detail = {value:[选中的checkbox的value的数组]}; */ 453 | bindchange?: EventHandle; 454 | 455 | } 456 | 457 | /** 表单,将组件内的用户输入的 提交。 */ 458 | interface Form extends WxmlElement { 459 | 460 | /** ; 是否返回 formId 用于发送模板消息 */ 461 | 'report-submit'?: boolean; 462 | 463 | /** ; 携带 form 中的数据触发 submit 事件,event.detail = {value : {'name': 'value'} , formId: ''} */ 464 | bindsubmit?: EventHandle; 465 | 466 | /** ; 表单重置时会触发 reset 事件 */ 467 | bindreset?: EventHandle; 468 | 469 | } 470 | 471 | /** 输入框。 */ 472 | interface Input extends WxmlElement { 473 | 474 | /** 输入框的初始内容; */ 475 | value?: string; 476 | 477 | /** input 的类型; "text" */ 478 | type?: string; 479 | 480 | /** 是否是密码类型; false */ 481 | password?: boolean; 482 | 483 | /** 输入框为空时占位符; */ 484 | placeholder?: string; 485 | 486 | /** 指定 placeholder 的样式; */ 487 | 'placeholder-style'?: string; 488 | 489 | /** 指定 placeholder 的样式类; "input-placeholder" */ 490 | 'placeholder-class'?: string; 491 | 492 | /** 是否禁用; false */ 493 | disabled?: boolean; 494 | 495 | /** 最大输入长度,设置为 -1 的时候不限制最大长度; 140 */ 496 | maxlength?: number; 497 | 498 | /** 指定光标与键盘的距离,单位 px 。取 input 距离底部的距离和 cursor-spacing 指定的距离的最小值作为光标与键盘的距离; 0 */ 499 | 'cursor-spacing'?: number; 500 | 501 | /** (即将废弃,请直接使用 focus )自动聚焦,拉起键盘; false */ 502 | 'auto-focus'?: boolean; 503 | 504 | /** 获取焦点; false */ 505 | focus?: boolean; 506 | 507 | /** 设置键盘右下角按钮的文字; "done" */ 508 | 'confirm-type'?: string; 509 | 510 | /** 点击键盘右下角按钮时是否保持键盘不收起; false */ 511 | 'confirm-hold'?: boolean; 512 | 513 | /** 指定focus时的光标位置; */ 514 | cursor?: number; 515 | 516 | /** 光标起始位置,自动聚集时有效,需与selection-end搭配使用; -1 */ 517 | 'selection-start'?: number; 518 | 519 | /** 光标结束位置,自动聚集时有效,需与selection-start搭配使用; -1 */ 520 | 'selection-end'?: number; 521 | 522 | /** 键盘弹起时,是否自动上推页面; true */ 523 | 'adjust-position'?: boolean; 524 | 525 | /** 当键盘输入时,触发input事件,event.detail = {value, cursor},处理函数可以直接 return 一个字符串,将替换输入框的内容。; */ 526 | bindinput?: EventHandle; 527 | 528 | /** 输入框聚焦时触发,event.detail = { value, height },height 参数在基础库 1.9.90 起支持; */ 529 | bindfocus?: EventHandle; 530 | 531 | /** 输入框失去焦点时触发,event.detail = {value: value}; */ 532 | bindblur?: EventHandle; 533 | 534 | /** 点击完成按钮时触发,event.detail = {value: value}; */ 535 | bindconfirm?: EventHandle; 536 | 537 | } 538 | 539 | /** 用来改进表单组件的可用性,使用for属性找到对应的id,或者将控件放在该标签下,当点击时,就会触发对应的控件。 */ 540 | interface Label extends WxmlElement { 541 | 542 | /** ; 绑定控件的 id */ 543 | for?: string; 544 | 545 | } 546 | 547 | /** 从底部弹起的滚动选择器,现支持五种选择器,通过mode来区分,分别是普通选择器,多列选择器,时间选择器,日期选择器,省市区选择器,默认是普通选择器。 */ 548 | interface Picker extends WxmlElement { 549 | 550 | /** mode为 selector 或 multiSelector 时,range 有效; [] */ 551 | range?: Array; 552 | 553 | /** 当 range 是一个 Object Array 时,通过 range-key 来指定 Object 中 key 的值作为选择器显示内容; */ 554 | 'range-key'?: string; 555 | 556 | /** value 的值表示选择了 range 中的第几个(下标从 0 开始); 0 */ 557 | value?: number; 558 | 559 | /** value 改变时触发 change 事件,event.detail = {value: value}; */ 560 | bindchange?: EventHandle; 561 | 562 | /** 是否禁用; false */ 563 | disabled?: boolean; 564 | 565 | /** 取消选择或点遮罩层收起 picker 时触发; */ 566 | bindcancel?: EventHandle; 567 | 568 | } 569 | 570 | /** 嵌入页面的滚动选择器 */ 571 | interface PickerView extends WxmlElement { 572 | 573 | /** ; 数组中的数字依次表示 picker-view 内的 picker-view-colume 选择的第几项(下标从 0 开始),数字大于 picker-view-column 可选项长度时,选择最后一项。 */ 574 | value?: Array; 575 | 576 | /** ; 设置选择器中间选中框的样式 */ 577 | 'indicator-style'?: string; 578 | 579 | /** 1.1.0; 设置选择器中间选中框的类名 */ 580 | 'indicator-class'?: string; 581 | 582 | /** 1.5.0; 设置蒙层的样式 */ 583 | 'mask-style'?: string; 584 | 585 | /** 1.5.0; 设置蒙层的类名 */ 586 | 'mask-class'?: string; 587 | 588 | /** ; 当滚动选择,value 改变时触发 change 事件,event.detail = {value: value};value为数组,表示 picker-view 内的 picker-view-column 当前选择的是第几项(下标从 0 开始) */ 589 | bindchange?: EventHandle; 590 | 591 | } 592 | 593 | /** 仅可放置于中,其孩子节点的高度会自动设置成与picker-view的选中框的高度一致 */ 594 | interface PickerViewColumn extends WxmlElement { 595 | 596 | /** ; 数组中的数字依次表示 picker-view 内的 picker-view-colume 选择的第几项(下标从 0 开始),数字大于 picker-view-column 可选项长度时,选择最后一项。 */ 597 | value?: Array; 598 | 599 | /** ; 设置选择器中间选中框的样式 */ 600 | 'indicator-style'?: string; 601 | 602 | /** 1.1.0; 设置选择器中间选中框的类名 */ 603 | 'indicator-class'?: string; 604 | 605 | /** 1.5.0; 设置蒙层的样式 */ 606 | 'mask-style'?: string; 607 | 608 | /** 1.5.0; 设置蒙层的类名 */ 609 | 'mask-class'?: string; 610 | 611 | /** ; 当滚动选择,value 改变时触发 change 事件,event.detail = {value: value};value为数组,表示 picker-view 内的 picker-view-column 当前选择的是第几项(下标从 0 开始) */ 612 | bindchange?: EventHandle; 613 | 614 | } 615 | 616 | /** */ 617 | interface Tips extends WxmlElement { 618 | 619 | /** ; 数组中的数字依次表示 picker-view 内的 picker-view-colume 选择的第几项(下标从 0 开始),数字大于 picker-view-column 可选项长度时,选择最后一项。 */ 620 | value?: Array; 621 | 622 | /** ; 设置选择器中间选中框的样式 */ 623 | 'indicator-style'?: string; 624 | 625 | /** 1.1.0; 设置选择器中间选中框的类名 */ 626 | 'indicator-class'?: string; 627 | 628 | /** 1.5.0; 设置蒙层的样式 */ 629 | 'mask-style'?: string; 630 | 631 | /** 1.5.0; 设置蒙层的类名 */ 632 | 'mask-class'?: string; 633 | 634 | /** ; 当滚动选择,value 改变时触发 change 事件,event.detail = {value: value};value为数组,表示 picker-view 内的 picker-view-column 当前选择的是第几项(下标从 0 开始) */ 635 | bindchange?: EventHandle; 636 | 637 | } 638 | 639 | /** 单项选择器,内部由多个组成。 */ 640 | interface RadioGroup extends WxmlElement { 641 | 642 | /** 中的选中项发生变化时触发 change 事件,event.detail = {value: 选中项radio的value}; */ 643 | bindchange?: EventHandle; 644 | 645 | } 646 | 647 | /** 单选项目 */ 648 | interface Radio extends WxmlElement { 649 | 650 | /** 中的选中项发生变化时触发 change 事件,event.detail = {value: 选中项radio的value}; */ 651 | bindchange?: EventHandle; 652 | 653 | } 654 | 655 | /** 滑动选择器。 */ 656 | interface Slider extends WxmlElement { 657 | 658 | /** 最小值; 0 */ 659 | min?: number; 660 | 661 | /** 最大值; 100 */ 662 | max?: number; 663 | 664 | /** 步长,取值必须大于 0,并且可被(max - min)整除; 1 */ 665 | step?: number; 666 | 667 | /** 是否禁用; false */ 668 | disabled?: boolean; 669 | 670 | /** 当前取值; 0 */ 671 | value?: number; 672 | 673 | /** 背景条的颜色(请使用 backgroundColor); #e9e9e9 */ 674 | color?: string; 675 | 676 | /** 已选择的颜色(请使用 activeColor); #1aad19 */ 677 | 'selected-color'?: string; 678 | 679 | /** 已选择的颜色; #1aad19 */ 680 | activeColor?: string; 681 | 682 | /** 背景条的颜色; #e9e9e9 */ 683 | backgroundColor?: string; 684 | 685 | /** 滑块的大小,取值范围为 12 - 28; 28 */ 686 | 'block-size'?: number; 687 | 688 | /** 滑块的颜色; #ffffff */ 689 | 'block-color'?: string; 690 | 691 | /** 是否显示当前 value; false */ 692 | 'show-value'?: boolean; 693 | 694 | /** 完成一次拖动后触发的事件,event.detail = {value: value}; */ 695 | bindchange?: EventHandle; 696 | 697 | /** 拖动过程中触发的事件,event.detail = {value: value}; */ 698 | bindchanging?: EventHandle; 699 | 700 | } 701 | 702 | /** 开关选择器。 */ 703 | interface Switch extends WxmlElement { 704 | 705 | /** 是否选中; false */ 706 | checked?: boolean; 707 | 708 | /** 样式,有效值:switch, checkbox; switch */ 709 | type?: string; 710 | 711 | /** checked 改变时触发 change 事件,event.detail={ value:checked}; */ 712 | bindchange?: EventHandle; 713 | 714 | /** switch 的颜色,同 css 的 color; */ 715 | color?: string; 716 | 717 | } 718 | 719 | /** 多行输入框。 */ 720 | interface Textarea extends WxmlElement { 721 | 722 | /** 输入框的内容; */ 723 | value?: string; 724 | 725 | /** 输入框为空时占位符; */ 726 | placeholder?: string; 727 | 728 | /** 指定 placeholder 的样式; */ 729 | 'placeholder-style'?: string; 730 | 731 | /** 指定 placeholder 的样式类; textarea-placeholder */ 732 | 'placeholder-class'?: string; 733 | 734 | /** 是否禁用; false */ 735 | disabled?: boolean; 736 | 737 | /** 最大输入长度,设置为 -1 的时候不限制最大长度; 140 */ 738 | maxlength?: number; 739 | 740 | /** 自动聚焦,拉起键盘。; false */ 741 | 'auto-focus'?: boolean; 742 | 743 | /** 获取焦点; false */ 744 | focus?: boolean; 745 | 746 | /** 是否自动增高,设置auto-height时,style.height不生效; false */ 747 | 'auto-height'?: boolean; 748 | 749 | /** 如果 textarea 是在一个 position:fixed 的区域,需要显示指定属性 fixed 为 true; false */ 750 | fixed?: boolean; 751 | 752 | /** 指定光标与键盘的距离,单位 px 。取 textarea 距离底部的距离和 cursor-spacing 指定的距离的最小值作为光标与键盘的距离; 0 */ 753 | 'cursor-spacing'?: number; 754 | 755 | /** 指定focus时的光标位置; */ 756 | cursor?: number; 757 | 758 | /** 是否显示键盘上方带有”完成“按钮那一栏; true */ 759 | 'show-confirm-bar'?: boolean; 760 | 761 | /** 光标起始位置,自动聚集时有效,需与selection-end搭配使用; -1 */ 762 | 'selection-start'?: number; 763 | 764 | /** 光标结束位置,自动聚集时有效,需与selection-start搭配使用; -1 */ 765 | 'selection-end'?: number; 766 | 767 | /** 键盘弹起时,是否自动上推页面; true */ 768 | 'adjust-position'?: boolean; 769 | 770 | /** 输入框聚焦时触发,event.detail = { value, height },height 参数在基础库 1.9.90 起支持; */ 771 | bindfocus?: EventHandle; 772 | 773 | /** 输入框失去焦点时触发,event.detail = {value, cursor}; */ 774 | bindblur?: EventHandle; 775 | 776 | /** 输入框行数变化时调用,event.detail = {height: 0, heightRpx: 0, lineCount: 0}; */ 777 | bindlinechange?: EventHandle; 778 | 779 | /** 当键盘输入时,触发 input 事件,event.detail = {value, cursor}, bindinput 处理函数的返回值并不会反映到 textarea 上 ; */ 780 | bindinput?: EventHandle; 781 | 782 | /** 点击完成时, 触发 confirm 事件,event.detail = {value: value}; */ 783 | bindconfirm?: EventHandle; 784 | 785 | } 786 | 787 | /** 页面链接。 */ 788 | interface Navigator extends WxmlElement { 789 | 790 | /** 应用内的跳转链接; */ 791 | url?: string; 792 | 793 | /** 跳转方式; navigate */ 794 | 'open-type'?: string; 795 | 796 | /** 当 open-type 为 'navigateBack' 时有效,表示回退的层数; */ 797 | delta?: number; 798 | 799 | /** 指定点击时的样式类,当hover-class="none"时,没有点击态效果; navigator-hover */ 800 | 'hover-class'?: string; 801 | 802 | /** 指定是否阻止本节点的祖先节点出现点击态; false */ 803 | 'hover-stop-propagation'?: boolean; 804 | 805 | /** 按住后多久出现点击态,单位毫秒; 50 */ 806 | 'hover-start-time'?: number; 807 | 808 | /** 手指松开后点击态保留时间,单位毫秒; 600 */ 809 | 'hover-stay-time'?: number; 810 | 811 | } 812 | 813 | /** 注意:1.6.0 版本开始,该组件不再维护。建议使用能力更强的 wx.createInnerAudioContext 接口 */ 814 | interface Audio extends WxmlElement { 815 | 816 | /** audio 组件的唯一标识符; */ 817 | id?: string; 818 | 819 | /** 要播放音频的资源地址; */ 820 | src?: string; 821 | 822 | /** 是否循环播放; false */ 823 | loop?: boolean; 824 | 825 | /** 是否显示默认控件; false */ 826 | controls?: boolean; 827 | 828 | /** 默认控件上的音频封面的图片资源地址,如果 controls 属性值为 false 则设置 poster 无效; */ 829 | poster?: string; 830 | 831 | /** 默认控件上的音频名字,如果 controls 属性值为 false 则设置 name 无效; 未知音频 */ 832 | name?: string; 833 | 834 | /** 默认控件上的作者名字,如果 controls 属性值为 false 则设置 author 无效; 未知作者 */ 835 | author?: string; 836 | 837 | /** 当发生错误时触发 error 事件,detail = {errMsg: MediaError.code}; */ 838 | binderror?: EventHandle; 839 | 840 | /** 当开始/继续播放时触发play事件; */ 841 | bindplay?: EventHandle; 842 | 843 | /** 当暂停播放时触发 pause 事件; */ 844 | bindpause?: EventHandle; 845 | 846 | /** 当播放进度改变时触发 timeupdate 事件,detail = {currentTime, duration}; */ 847 | bindtimeupdate?: EventHandle; 848 | 849 | /** 当播放到末尾时触发 ended 事件; */ 850 | bindended?: EventHandle; 851 | 852 | } 853 | 854 | /** 图片。 */ 855 | interface Image extends WxmlElement { 856 | 857 | /** 图片资源地址; */ 858 | src?: string; 859 | 860 | /** 图片裁剪、缩放的模式; 'scaleToFill' */ 861 | mode?: string; 862 | 863 | /** 图片懒加载。只针对page与scroll-view下的image有效; false */ 864 | 'lazy-load'?: boolean; 865 | 866 | /** 当错误发生时,发布到 AppService 的事件名,事件对象event.detail = {errMsg: 'something wrong'}; */ 867 | binderror?: EventHandle; 868 | 869 | /** 当图片载入完毕时,发布到 AppService 的事件名,事件对象event.detail = {height:'图片高度px', width:'图片宽度px'}; */ 870 | bindload?: EventHandle; 871 | 872 | } 873 | 874 | /** 视频。 */ 875 | interface Video extends WxmlElement { 876 | 877 | /** 要播放视频的资源地址; */ 878 | src?: string; 879 | 880 | /** 指定视频初始播放位置; */ 881 | 'initial-time'?: number; 882 | 883 | /** 指定视频时长; */ 884 | duration?: number; 885 | 886 | /** 是否显示默认播放控件(播放/暂停按钮、播放进度、时间); true */ 887 | controls?: boolean; 888 | 889 | /** 弹幕列表; */ 890 | 'danmu-list'?: Array; 891 | 892 | /** 是否显示弹幕按钮,只在初始化时有效,不能动态变更; false */ 893 | 'danmu-btn'?: boolean; 894 | 895 | /** 是否展示弹幕,只在初始化时有效,不能动态变更; false */ 896 | 'enable-danmu'?: boolean; 897 | 898 | /** 是否自动播放; false */ 899 | autoplay?: boolean; 900 | 901 | /** 是否循环播放; false */ 902 | loop?: boolean; 903 | 904 | /** 是否静音播放; false */ 905 | muted?: boolean; 906 | 907 | /** 在非全屏模式下,是否开启亮度与音量调节手势; false */ 908 | 'page-gesture'?: boolean; 909 | 910 | /** 设置全屏时视频的方向,不指定则根据宽高比自动判断。有效值为 0(正常竖向), 90(屏幕逆时针90度), -90(屏幕顺时针90度); */ 911 | direction?: number; 912 | 913 | /** 若不设置,宽度大于240时才会显示; true */ 914 | 'show-progress'?: boolean; 915 | 916 | /** 是否显示全屏按钮; true */ 917 | 'show-fullscreen-btn'?: boolean; 918 | 919 | /** 是否显示视频底部控制栏的播放按钮; true */ 920 | 'show-play-btn'?: boolean; 921 | 922 | /** 是否显示视频中间的播放按钮; true */ 923 | 'show-center-play-btn'?: boolean; 924 | 925 | /** 是否开启控制进度的手势; true */ 926 | 'enable-progress-gesture'?: boolean; 927 | 928 | /** 当视频大小与 video 容器大小不一致时,视频的表现形式。contain:包含,fill:填充,cover:覆盖; contain */ 929 | objectFit?: string; 930 | 931 | /** 视频封面的图片网络资源地址,如果 controls 属性值为 false 则设置 poster 无效; */ 932 | poster?: string; 933 | 934 | /** 当开始/继续播放时触发play事件; */ 935 | bindplay?: EventHandle; 936 | 937 | /** 当暂停播放时触发 pause 事件; */ 938 | bindpause?: EventHandle; 939 | 940 | /** 当播放到末尾时触发 ended 事件; */ 941 | bindended?: EventHandle; 942 | 943 | /** 播放进度变化时触发,event.detail = {currentTime, duration} 。触发频率 250ms 一次; */ 944 | bindtimeupdate?: EventHandle; 945 | 946 | /** 当视频进入和退出全屏是触发,event.detail = {fullScreen, direction},direction取为 vertical 或 horizontal; */ 947 | bindfullscreenchange?: EventHandle; 948 | 949 | /** 视频出现缓冲时触发; */ 950 | bindwaiting?: EventHandle; 951 | 952 | /** 视频播放出错时触发; */ 953 | binderror?: EventHandle; 954 | 955 | } 956 | 957 | /** */ 958 | interface Camera extends WxmlElement { 959 | 960 | /** 前置或后置,值为front, back; back */ 961 | 'device-position'?: string; 962 | 963 | /** 闪光灯,值为auto, on, off; auto */ 964 | flash?: string; 965 | 966 | /** 摄像头在非正常终止时触发,如退出后台等情况; */ 967 | bindstop?: EventHandle; 968 | 969 | /** 用户不允许使用摄像头时触发; */ 970 | binderror?: EventHandle; 971 | 972 | } 973 | 974 | /** */ 975 | interface LivePlayer extends WxmlElement { 976 | 977 | /** 音视频地址。目前仅支持 flv, rtmp 格式; */ 978 | src?: string; 979 | 980 | /** live(直播),RTC(实时通话); live */ 981 | mode?: string; 982 | 983 | /** 自动播放; false */ 984 | autoplay?: boolean; 985 | 986 | /** 是否静音; false */ 987 | muted?: boolean; 988 | 989 | /** 画面方向,可选值有 vertical,horizontal; vertical */ 990 | orientation?: string; 991 | 992 | /** 填充模式,可选值有 contain,fillCrop; contain */ 993 | 'object-fit'?: string; 994 | 995 | /** 进入后台时是否静音; false */ 996 | 'background-mute'?: boolean; 997 | 998 | /** 最小缓冲区,单位s; 1 */ 999 | 'min-cache'?: number; 1000 | 1001 | /** 最大缓冲区,单位s; 3 */ 1002 | 'max-cache'?: number; 1003 | 1004 | /** 播放状态变化事件,detail = {code}; */ 1005 | bindstatechange?: EventHandle; 1006 | 1007 | /** 全屏变化事件,detail = {direction, fullScreen}; */ 1008 | bindfullscreenchange?: EventHandle; 1009 | 1010 | /** 网络状态通知,detail = {info}; */ 1011 | bindnetstatus?: EventHandle; 1012 | 1013 | } 1014 | 1015 | /** */ 1016 | interface LivePusher extends WxmlElement { 1017 | 1018 | /** 推流地址。目前仅支持 flv, rtmp 格式; */ 1019 | url?: string; 1020 | 1021 | /** SD(标清), HD(高清), FHD(超清), RTC(实时通话); RTC */ 1022 | mode?: string; 1023 | 1024 | /** 自动推流; false */ 1025 | autopush?: boolean; 1026 | 1027 | /** 是否静音; false */ 1028 | muted?: boolean; 1029 | 1030 | /** 开启摄像头; true */ 1031 | 'enable-camera'?: boolean; 1032 | 1033 | /** 自动聚集; true */ 1034 | 'auto-focus'?: boolean; 1035 | 1036 | /** vertical,horizontal; vertical */ 1037 | orientation?: string; 1038 | 1039 | /** 美颜; 0 */ 1040 | beauty?: number; 1041 | 1042 | /** 美白; 0 */ 1043 | whiteness?: number; 1044 | 1045 | /** 宽高比,可选值有 3:4, 9:16; 9:16 */ 1046 | aspect?: string; 1047 | 1048 | /** 最小码率; 200 */ 1049 | 'min-bitrate'?: number; 1050 | 1051 | /** 最大码率; 1000 */ 1052 | 'max-bitrate'?: number; 1053 | 1054 | /** 进入后台时推流的等待画面; */ 1055 | 'waiting-image'?: string; 1056 | 1057 | /** 等待画面资源的MD5值; */ 1058 | 'waiting-image-md5'?: string; 1059 | 1060 | /** 进入后台时是否静音; false */ 1061 | 'background-mute'?: boolean; 1062 | 1063 | /** 状态变化事件,detail = {code}; */ 1064 | bindstatechange?: EventHandle; 1065 | 1066 | /** 网络状态通知,detail = {info}; */ 1067 | bindnetstatus?: EventHandle; 1068 | 1069 | /** 渲染错误事件,detail = {errMsg, errCode}; */ 1070 | binderror?: EventHandle; 1071 | 1072 | } 1073 | 1074 | /** 地图。 */ 1075 | interface Map extends WxmlElement { 1076 | 1077 | /** 中心经度; */ 1078 | longitude?: number; 1079 | 1080 | /** 中心纬度; */ 1081 | latitude?: number; 1082 | 1083 | /** 缩放级别,取值范围为5-18; 16 */ 1084 | scale?: number; 1085 | 1086 | /** 标记点; */ 1087 | markers?: Array; 1088 | 1089 | /** 即将移除,请使用 markers; */ 1090 | covers?: Array; 1091 | 1092 | /** 路线; */ 1093 | polyline?: Array; 1094 | 1095 | /** 圆; */ 1096 | circles?: Array; 1097 | 1098 | /** 控件; */ 1099 | controls?: Array; 1100 | 1101 | /** 缩放视野以包含所有给定的坐标点; */ 1102 | 'include-points'?: Array; 1103 | 1104 | /** 显示带有方向的当前定位点; */ 1105 | 'show-location'?: boolean; 1106 | 1107 | /** 点击标记点时触发; */ 1108 | bindmarkertap?: EventHandle; 1109 | 1110 | /** 点击标记点对应的气泡时触发; */ 1111 | bindcallouttap?: EventHandle; 1112 | 1113 | /** 点击控件时触发; */ 1114 | bindcontroltap?: EventHandle; 1115 | 1116 | /** 视野发生变化时触发; */ 1117 | bindregionchange?: EventHandle; 1118 | 1119 | /** 点击地图时触发; */ 1120 | bindtap?: EventHandle; 1121 | 1122 | /** 在地图渲染更新完成时触发; */ 1123 | bindupdated?: EventHandle; 1124 | 1125 | } 1126 | 1127 | /** 画布。 */ 1128 | interface Canvas extends WxmlElement { 1129 | 1130 | /** canvas 组件的唯一标识符; */ 1131 | 'canvas-id'?: string; 1132 | 1133 | /** 当在 canvas 中移动时且有绑定手势事件时,禁止屏幕滚动以及下拉刷新; false */ 1134 | 'disable-scroll'?: boolean; 1135 | 1136 | /** 手指触摸动作开始; */ 1137 | bindtouchstart?: EventHandle; 1138 | 1139 | /** 手指触摸后移动; */ 1140 | bindtouchmove?: EventHandle; 1141 | 1142 | /** 手指触摸动作结束; */ 1143 | bindtouchend?: EventHandle; 1144 | 1145 | /** 手指触摸动作被打断,如来电提醒,弹窗; */ 1146 | bindtouchcancel?: EventHandle; 1147 | 1148 | /** 手指长按 500ms 之后触发,触发了长按事件后进行移动不会触发屏幕的滚动; */ 1149 | bindlongtap?: EventHandle; 1150 | 1151 | /** 当发生错误时触发 error 事件,detail = {errMsg: 'something wrong'}; */ 1152 | binderror?: EventHandle; 1153 | 1154 | } 1155 | 1156 | /** */ 1157 | interface OpenData extends WxmlElement { 1158 | 1159 | /** 开放数据类型; */ 1160 | type?: string; 1161 | 1162 | /** 当 type="groupName" 时生效, 群id; */ 1163 | 'open-gid'?: string; 1164 | 1165 | /** 当 type="user*" 时生效,以哪种语言展示 userInfo,有效值有:en, zh_CN, zh_TW; en */ 1166 | lang?: string; 1167 | 1168 | } 1169 | 1170 | /** */ 1171 | interface WebView extends WxmlElement { 1172 | 1173 | /** webview 指向网页的链接。需登录小程序管理后台配置域名白名单。; */ 1174 | src?: string; 1175 | 1176 | /** 网页向小程序 postMessage 时,会在特定时机(小程序后退、组件销毁、分享)触发并收到消息。e.detail = { data }; */ 1177 | bindmessage?: EventHandle; 1178 | 1179 | } 1180 | 1181 | /** */ 1182 | interface Ad extends WxmlElement { 1183 | 1184 | /** 广告单元id,可在小程序管理后台的流量主模块新建; */ 1185 | 'unit-id'?: string; 1186 | 1187 | } 1188 | 1189 | /** 组件插槽 */ 1190 | interface Slot extends WxmlElement { 1191 | name?: string; 1192 | } 1193 | } 1194 | 1195 | declare global { 1196 | namespace JSX { 1197 | interface ElementAttributesProperty { props: {}; } 1198 | interface ElementChildrenAttribute { children: {}; } 1199 | interface Element { } 1200 | interface IntrinsicElements { 1201 | 1202 | 1203 | view: WXML.View; 1204 | 1205 | 'scroll-view': WXML.ScrollView; 1206 | 1207 | swiper: WXML.Swiper; 1208 | 1209 | 'swiper-item': WXML.SwiperItem; 1210 | 1211 | 'movable-area': WXML.MovableArea; 1212 | 1213 | 'movable-view': WXML.MovableView; 1214 | 1215 | 'cover-view': WXML.CoverView; 1216 | 1217 | 'cover-image': WXML.CoverImage; 1218 | 1219 | icon: WXML.Icon; 1220 | 1221 | text: WXML.Text; 1222 | 1223 | 'rich-text': WXML.RichText; 1224 | 1225 | progress: WXML.Progress; 1226 | 1227 | button: WXML.Button; 1228 | 1229 | 'checkbox-group': WXML.CheckboxGroup; 1230 | 1231 | checkbox: WXML.Checkbox; 1232 | 1233 | form: WXML.Form; 1234 | 1235 | input: WXML.Input; 1236 | 1237 | label: WXML.Label; 1238 | 1239 | picker: WXML.Picker; 1240 | 1241 | 'picker-view': WXML.PickerView; 1242 | 1243 | 'picker-view-column': WXML.PickerViewColumn; 1244 | 1245 | tips: WXML.Tips; 1246 | 1247 | 'radio-group': WXML.RadioGroup; 1248 | 1249 | radio: WXML.Radio; 1250 | 1251 | slider: WXML.Slider; 1252 | 1253 | switch: WXML.Switch; 1254 | 1255 | textarea: WXML.Textarea; 1256 | 1257 | navigator: WXML.Navigator; 1258 | 1259 | audio: WXML.Audio; 1260 | 1261 | image: WXML.Image; 1262 | 1263 | video: WXML.Video; 1264 | 1265 | camera: WXML.Camera; 1266 | 1267 | 'live-player': WXML.LivePlayer; 1268 | 1269 | 'live-pusher': WXML.LivePusher; 1270 | 1271 | map: WXML.Map; 1272 | 1273 | canvas: WXML.Canvas; 1274 | 1275 | 'open-data': WXML.OpenData; 1276 | 1277 | 'web-view': WXML.WebView; 1278 | 1279 | ad: WXML.Ad; 1280 | 1281 | } 1282 | } 1283 | } --------------------------------------------------------------------------------