├── .gitignore ├── .history ├── .gitignore_20191203015604 └── .gitignore_20200803154703 ├── README.md ├── cloudfunctions ├── damai │ ├── detail.js │ ├── index.js │ ├── list.js │ ├── package-lock.json │ └── package.json └── douban │ ├── detail.js │ ├── index.js │ ├── list.js │ ├── package-lock.json │ └── package.json ├── ercode.png ├── miniprogram ├── app.js ├── app.json ├── app.wxss ├── components │ └── text-ellipsis │ │ ├── index.js │ │ ├── index.json │ │ ├── index.wxml │ │ └── index.wxss ├── images │ ├── 404.png │ ├── local-selected.png │ ├── local.png │ ├── movie-selected.png │ ├── movie.png │ ├── tv-selected.png │ ├── tv.png │ ├── yanchu-selected.png │ └── yanchu.png ├── package-lock.json ├── package.json ├── pages │ ├── detail │ │ ├── detail.js │ │ ├── detail.json │ │ ├── detail.wxml │ │ └── detail.wxss │ ├── local │ │ ├── detail │ │ │ ├── detail.js │ │ │ ├── detail.json │ │ │ ├── detail.wxml │ │ │ └── detail.wxss │ │ ├── local.js │ │ ├── local.json │ │ ├── local.wxml │ │ └── local.wxss │ ├── movie │ │ ├── movie.js │ │ ├── movie.json │ │ ├── movie.wxml │ │ └── movie.wxss │ └── tv │ │ ├── tv.js │ │ ├── tv.json │ │ ├── tv.wxml │ │ └── tv.wxss ├── scripts │ ├── common.js │ └── qqmap-wx-jssdk.min.js ├── sitemap.json └── style │ └── common.wxss └── project.config.json /.gitignore: -------------------------------------------------------------------------------- 1 | .idea/ 2 | .vscode 3 | .project 4 | cloudfunctions/**/node_modules 5 | miniprogram/miniprogram_npm 6 | miniprogram/node_modules 7 | -------------------------------------------------------------------------------- /.history/.gitignore_20191203015604: -------------------------------------------------------------------------------- 1 | .idea/ 2 | .vscode 3 | .project 4 | cloudfunctions/**/node_modules 5 | miniprogram/miniprogram_npm/node_modules 6 | -------------------------------------------------------------------------------- /.history/.gitignore_20200803154703: -------------------------------------------------------------------------------- 1 | .idea/ 2 | .vscode 3 | .project 4 | cloudfunctions/**/node_modules 5 | miniprogram/miniprogram_npm 6 | miniprogram/node_modules 7 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 看什么好? 2 | 3 | ![小程序码](./ercode.png) 4 | 5 | 这是一个基于小程序云开发的特别简单的项目,可以作为新手学习之用,一下文章是记录此小程序的开发过程和技术点: 6 | - [实战:在小程序中获取用户所在城市信息](https://blog.zhangbing.site/2019/12/08/%E5%AE%9E%E6%88%98%EF%BC%9A%E5%9C%A8%E5%B0%8F%E7%A8%8B%E5%BA%8F%E4%B8%AD%E8%8E%B7%E5%8F%96%E7%94%A8%E6%88%B7%E6%89%80%E5%9C%A8%E5%9F%8E%E5%B8%82%E4%BF%A1%E6%81%AF/) 7 | - [实战:小程序云开发之云函数开发](https://blog.zhangbing.site/2019/12/09/%E5%AE%9E%E6%88%98%EF%BC%9A%E5%B0%8F%E7%A8%8B%E5%BA%8F%E4%BA%91%E5%BC%80%E5%8F%91%E4%B9%8B%E4%BA%91%E5%87%BD%E6%95%B0%E5%BC%80%E5%8F%91/) 8 | 9 | ## 基本功能 10 | - 查最近最新电影 11 | - 查看最新最热电视节目、综艺、纪录片 12 | - 查询电影详情 13 | 14 | ## 界面 15 | |电影|电视|本地活动|详情| 16 | |:-----:|:-------:|:-------:|:-------:| 17 | |![](https://cdn.jsdelivr.net/gh/dunizb/cloudimg@jsdelivr/Screenshot_2019-12-03-18-51-21-533_com.tencent.mm.jpg)|![](https://cdn.jsdelivr.net/gh/dunizb/cloudimg@jsdelivr/Screenshot_2019-12-03-18-51-28-228_com.tencent.mm.jpg)|![](https://cdn.jsdelivr.net/gh/dunizb/cloudimg@jsdelivr/Screenshot_2019-12-03-18-51-43-257_com.tencent.mm.jpg)|![](https://cdn.jsdelivr.net/gh/dunizb/cloudimg@jsdelivr/Screenshot_2019-12-03-19-15-37-806_com.tencent.mm.jpg)| 18 | 19 | ## TODO 20 | - [ ] 详情页增加演职员内容等、美化等 21 | - [x] 演出活动频道的演出介绍 22 | - [ ] 电影频道预告片分类 23 | -------------------------------------------------------------------------------- /cloudfunctions/damai/detail.js: -------------------------------------------------------------------------------- 1 | const rp = require('request-promise'); 2 | const cheerio = require('cheerio'); 3 | 4 | const baseUrl = 'https://detail.damai.cn' 5 | exports.main = async (event, context) => { 6 | const { id, name } = event 7 | return rp(`${baseUrl}/item.htm?id=${id}&clicktitle=${encodeURI(name)}`) 8 | .then((html) => { 9 | console.log('html', html) 10 | const $ = cheerio.load(html) 11 | const detailHtml = $('#detail').find('.words').html(); //.replace(/\s/g, '') 12 | return detailHtml 13 | }).catch((err) => { 14 | console.log(err) 15 | }); 16 | } -------------------------------------------------------------------------------- /cloudfunctions/damai/index.js: -------------------------------------------------------------------------------- 1 | // 云函数入口文件 2 | const cloud = require('wx-server-sdk') 3 | const TcbRouter = require('tcb-router') 4 | 5 | cloud.init() 6 | 7 | // 云函数入口函数 8 | exports.main = async (event, context) => { 9 | const app = new TcbRouter({ event }) 10 | /** 查询列表 */ 11 | app.router('list', async (ctx, next) => { 12 | const list = require('./list.js') 13 | ctx.body = list.main(event, context) 14 | }) 15 | /** 查询详情 */ 16 | app.router('detail', async (ctx, next) => { 17 | const detail = require('./detail.js') 18 | ctx.body = detail.main(event, context) 19 | }) 20 | return app.serve(); 21 | } -------------------------------------------------------------------------------- /cloudfunctions/damai/list.js: -------------------------------------------------------------------------------- 1 | const rp = require('request-promise'); 2 | 3 | const baseUrl = 'https://search.damai.cn/searchajax.html?' 4 | 5 | exports.main = async (event, context) => { 6 | const { city, category, currPage, pageSize } = event 7 | const options = { 8 | uri: `${baseUrl}keyword=&cty=${encodeURI(city)}&ctl=${encodeURI(category)}&sctl=&tsg=0&st=&et=&order=1&pageSize=${pageSize}&currPage=${currPage}&tn=`, 9 | headers: { 10 | 'Host': 'search.damai.cn' 11 | }, 12 | json: true 13 | } 14 | return rp(options).then(function (res) { 15 | return { 16 | "ctl": res.ctl, 17 | "cty": res.cty, 18 | "totalPage": res.pageData.totalPage, 19 | "list": res.pageData.resultData 20 | } 21 | }).catch(function (err) { 22 | console.log(err) 23 | }); 24 | } -------------------------------------------------------------------------------- /cloudfunctions/damai/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "damai", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@cloudbase/database": { 8 | "version": "0.9.5", 9 | "resolved": "https://registry.npmjs.org/@cloudbase/database/-/database-0.9.5.tgz", 10 | "integrity": "sha512-7j+AIHmK9CUA/cf7Jej4ES4UMFvv5oFDWWm3jJb8dfdo/Ti3TlM2oAS6kqADN/qw+tiZQpaovpVcletgFgXLbg==", 11 | "requires": { 12 | "bson": "^4.0.2", 13 | "lodash.clonedeep": "4.5.0", 14 | "lodash.set": "4.3.2", 15 | "lodash.unset": "4.5.2", 16 | "ws": "^7.0.0" 17 | } 18 | }, 19 | "@protobufjs/aspromise": { 20 | "version": "1.1.2", 21 | "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", 22 | "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78=" 23 | }, 24 | "@protobufjs/base64": { 25 | "version": "1.1.2", 26 | "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", 27 | "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" 28 | }, 29 | "@protobufjs/codegen": { 30 | "version": "2.0.4", 31 | "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", 32 | "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" 33 | }, 34 | "@protobufjs/eventemitter": { 35 | "version": "1.1.0", 36 | "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", 37 | "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A=" 38 | }, 39 | "@protobufjs/fetch": { 40 | "version": "1.1.0", 41 | "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", 42 | "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=", 43 | "requires": { 44 | "@protobufjs/aspromise": "^1.1.1", 45 | "@protobufjs/inquire": "^1.1.0" 46 | } 47 | }, 48 | "@protobufjs/float": { 49 | "version": "1.0.2", 50 | "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", 51 | "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=" 52 | }, 53 | "@protobufjs/inquire": { 54 | "version": "1.1.0", 55 | "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", 56 | "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=" 57 | }, 58 | "@protobufjs/path": { 59 | "version": "1.1.2", 60 | "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", 61 | "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=" 62 | }, 63 | "@protobufjs/pool": { 64 | "version": "1.1.0", 65 | "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", 66 | "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=" 67 | }, 68 | "@protobufjs/utf8": { 69 | "version": "1.1.0", 70 | "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", 71 | "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" 72 | }, 73 | "@types/long": { 74 | "version": "4.0.0", 75 | "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.0.tgz", 76 | "integrity": "sha512-1w52Nyx4Gq47uuu0EVcsHBxZFJgurQ+rTKS3qMHxR1GY2T8c2AJYd6vZoZ9q1rupaDjU0yT+Jc2XTyXkjeMA+Q==" 77 | }, 78 | "@types/node": { 79 | "version": "10.17.6", 80 | "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.6.tgz", 81 | "integrity": "sha512-0a2X6cgN3RdPBL2MIlR6Lt0KlM7fOFsutuXcdglcOq6WvLnYXgPQSh0Mx6tO1KCAE8MxbHSOSTWDoUxRq+l3DA==" 82 | }, 83 | "ajv": { 84 | "version": "6.12.6", 85 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", 86 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", 87 | "requires": { 88 | "fast-deep-equal": "^3.1.1", 89 | "fast-json-stable-stringify": "^2.0.0", 90 | "json-schema-traverse": "^0.4.1", 91 | "uri-js": "^4.2.2" 92 | }, 93 | "dependencies": { 94 | "fast-deep-equal": { 95 | "version": "3.1.3", 96 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 97 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" 98 | } 99 | } 100 | }, 101 | "asn1": { 102 | "version": "0.2.4", 103 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", 104 | "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", 105 | "requires": { 106 | "safer-buffer": "~2.1.0" 107 | } 108 | }, 109 | "assert-plus": { 110 | "version": "1.0.0", 111 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 112 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" 113 | }, 114 | "async-limiter": { 115 | "version": "1.0.1", 116 | "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", 117 | "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" 118 | }, 119 | "asynckit": { 120 | "version": "0.4.0", 121 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 122 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" 123 | }, 124 | "aws-sign2": { 125 | "version": "0.7.0", 126 | "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", 127 | "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" 128 | }, 129 | "aws4": { 130 | "version": "1.9.0", 131 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.0.tgz", 132 | "integrity": "sha512-Uvq6hVe90D0B2WEnUqtdgY1bATGz3mw33nH9Y+dmA+w5DHvUmBgkr5rM/KCHpCsiFNRUfokW/szpPPgMK2hm4A==" 133 | }, 134 | "base64-js": { 135 | "version": "1.3.1", 136 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", 137 | "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" 138 | }, 139 | "bcrypt-pbkdf": { 140 | "version": "1.0.2", 141 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", 142 | "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", 143 | "requires": { 144 | "tweetnacl": "^0.14.3" 145 | } 146 | }, 147 | "bluebird": { 148 | "version": "3.7.2", 149 | "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", 150 | "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" 151 | }, 152 | "boolbase": { 153 | "version": "1.0.0", 154 | "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", 155 | "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" 156 | }, 157 | "bson": { 158 | "version": "4.0.2", 159 | "resolved": "https://registry.npmjs.org/bson/-/bson-4.0.2.tgz", 160 | "integrity": "sha512-rBdCxMBCg2aR420e1oKUejjcuPZLTibA7zEhWAlliFWEwzuBCC9Dkp5r7VFFIQB2t1WVsvTbohry575mc7Xw5A==", 161 | "requires": { 162 | "buffer": "^5.1.0", 163 | "long": "^4.0.0" 164 | } 165 | }, 166 | "buffer": { 167 | "version": "5.4.3", 168 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.4.3.tgz", 169 | "integrity": "sha512-zvj65TkFeIt3i6aj5bIvJDzjjQQGs4o/sNoezg1F1kYap9Nu2jcUdpwzRSJTHMMzG0H7bZkn4rNQpImhuxWX2A==", 170 | "requires": { 171 | "base64-js": "^1.0.2", 172 | "ieee754": "^1.1.4" 173 | } 174 | }, 175 | "buffer-equal-constant-time": { 176 | "version": "1.0.1", 177 | "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", 178 | "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" 179 | }, 180 | "caseless": { 181 | "version": "0.12.0", 182 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", 183 | "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" 184 | }, 185 | "cheerio": { 186 | "version": "1.0.0-rc.3", 187 | "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.3.tgz", 188 | "integrity": "sha512-0td5ijfUPuubwLUu0OBoe98gZj8C/AA+RW3v67GPlGOrvxWjZmBXiBCRU+I8VEiNyJzjth40POfHiz2RB3gImA==", 189 | "requires": { 190 | "css-select": "~1.2.0", 191 | "dom-serializer": "~0.1.1", 192 | "entities": "~1.1.1", 193 | "htmlparser2": "^3.9.1", 194 | "lodash": "^4.15.0", 195 | "parse5": "^3.0.1" 196 | } 197 | }, 198 | "combined-stream": { 199 | "version": "1.0.8", 200 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 201 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 202 | "requires": { 203 | "delayed-stream": "~1.0.0" 204 | } 205 | }, 206 | "core-util-is": { 207 | "version": "1.0.2", 208 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 209 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" 210 | }, 211 | "css-select": { 212 | "version": "1.2.0", 213 | "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", 214 | "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", 215 | "requires": { 216 | "boolbase": "~1.0.0", 217 | "css-what": "2.1", 218 | "domutils": "1.5.1", 219 | "nth-check": "~1.0.1" 220 | } 221 | }, 222 | "css-what": { 223 | "version": "2.1.3", 224 | "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", 225 | "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==" 226 | }, 227 | "dashdash": { 228 | "version": "1.14.1", 229 | "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", 230 | "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", 231 | "requires": { 232 | "assert-plus": "^1.0.0" 233 | } 234 | }, 235 | "define-properties": { 236 | "version": "1.1.3", 237 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", 238 | "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", 239 | "requires": { 240 | "object-keys": "^1.0.12" 241 | } 242 | }, 243 | "delayed-stream": { 244 | "version": "1.0.0", 245 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 246 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" 247 | }, 248 | "dom-serializer": { 249 | "version": "0.1.1", 250 | "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", 251 | "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", 252 | "requires": { 253 | "domelementtype": "^1.3.0", 254 | "entities": "^1.1.1" 255 | } 256 | }, 257 | "domelementtype": { 258 | "version": "1.3.1", 259 | "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", 260 | "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" 261 | }, 262 | "domhandler": { 263 | "version": "2.4.2", 264 | "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", 265 | "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", 266 | "requires": { 267 | "domelementtype": "1" 268 | } 269 | }, 270 | "domutils": { 271 | "version": "1.5.1", 272 | "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", 273 | "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", 274 | "requires": { 275 | "dom-serializer": "0", 276 | "domelementtype": "1" 277 | } 278 | }, 279 | "ecc-jsbn": { 280 | "version": "0.1.2", 281 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", 282 | "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", 283 | "requires": { 284 | "jsbn": "~0.1.0", 285 | "safer-buffer": "^2.1.0" 286 | } 287 | }, 288 | "ecdsa-sig-formatter": { 289 | "version": "1.0.11", 290 | "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", 291 | "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", 292 | "requires": { 293 | "safe-buffer": "^5.0.1" 294 | } 295 | }, 296 | "entities": { 297 | "version": "1.1.2", 298 | "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", 299 | "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" 300 | }, 301 | "es-abstract": { 302 | "version": "1.16.2", 303 | "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.16.2.tgz", 304 | "integrity": "sha512-jYo/J8XU2emLXl3OLwfwtuFfuF2w6DYPs+xy9ZfVyPkDcrauu6LYrw/q2TyCtrbc/KUdCiC5e9UajRhgNkVopA==", 305 | "requires": { 306 | "es-to-primitive": "^1.2.1", 307 | "function-bind": "^1.1.1", 308 | "has": "^1.0.3", 309 | "has-symbols": "^1.0.1", 310 | "is-callable": "^1.1.4", 311 | "is-regex": "^1.0.4", 312 | "object-inspect": "^1.7.0", 313 | "object-keys": "^1.1.1", 314 | "string.prototype.trimleft": "^2.1.0", 315 | "string.prototype.trimright": "^2.1.0" 316 | } 317 | }, 318 | "es-to-primitive": { 319 | "version": "1.2.1", 320 | "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", 321 | "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", 322 | "requires": { 323 | "is-callable": "^1.1.4", 324 | "is-date-object": "^1.0.1", 325 | "is-symbol": "^1.0.2" 326 | } 327 | }, 328 | "extend": { 329 | "version": "3.0.2", 330 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", 331 | "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" 332 | }, 333 | "extsprintf": { 334 | "version": "1.3.0", 335 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", 336 | "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" 337 | }, 338 | "fast-json-stable-stringify": { 339 | "version": "2.0.0", 340 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", 341 | "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" 342 | }, 343 | "forever-agent": { 344 | "version": "0.6.1", 345 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", 346 | "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" 347 | }, 348 | "form-data": { 349 | "version": "2.3.3", 350 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", 351 | "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", 352 | "requires": { 353 | "asynckit": "^0.4.0", 354 | "combined-stream": "^1.0.6", 355 | "mime-types": "^2.1.12" 356 | } 357 | }, 358 | "function-bind": { 359 | "version": "1.1.1", 360 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 361 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" 362 | }, 363 | "getpass": { 364 | "version": "0.1.7", 365 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", 366 | "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", 367 | "requires": { 368 | "assert-plus": "^1.0.0" 369 | } 370 | }, 371 | "har-schema": { 372 | "version": "2.0.0", 373 | "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", 374 | "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" 375 | }, 376 | "har-validator": { 377 | "version": "5.1.3", 378 | "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", 379 | "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", 380 | "requires": { 381 | "ajv": "^6.5.5", 382 | "har-schema": "^2.0.0" 383 | } 384 | }, 385 | "has": { 386 | "version": "1.0.3", 387 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 388 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 389 | "requires": { 390 | "function-bind": "^1.1.1" 391 | } 392 | }, 393 | "has-symbols": { 394 | "version": "1.0.1", 395 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", 396 | "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" 397 | }, 398 | "htmlparser2": { 399 | "version": "3.10.1", 400 | "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", 401 | "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", 402 | "requires": { 403 | "domelementtype": "^1.3.1", 404 | "domhandler": "^2.3.0", 405 | "domutils": "^1.5.1", 406 | "entities": "^1.1.1", 407 | "inherits": "^2.0.1", 408 | "readable-stream": "^3.1.1" 409 | } 410 | }, 411 | "http-signature": { 412 | "version": "1.2.0", 413 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", 414 | "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", 415 | "requires": { 416 | "assert-plus": "^1.0.0", 417 | "jsprim": "^1.2.2", 418 | "sshpk": "^1.7.0" 419 | } 420 | }, 421 | "ieee754": { 422 | "version": "1.1.13", 423 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", 424 | "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" 425 | }, 426 | "inherits": { 427 | "version": "2.0.4", 428 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 429 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 430 | }, 431 | "is-callable": { 432 | "version": "1.1.4", 433 | "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", 434 | "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==" 435 | }, 436 | "is-date-object": { 437 | "version": "1.0.1", 438 | "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", 439 | "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=" 440 | }, 441 | "is-regex": { 442 | "version": "1.0.4", 443 | "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", 444 | "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", 445 | "requires": { 446 | "has": "^1.0.1" 447 | } 448 | }, 449 | "is-symbol": { 450 | "version": "1.0.3", 451 | "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", 452 | "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", 453 | "requires": { 454 | "has-symbols": "^1.0.1" 455 | } 456 | }, 457 | "is-typedarray": { 458 | "version": "1.0.0", 459 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", 460 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" 461 | }, 462 | "isstream": { 463 | "version": "0.1.2", 464 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", 465 | "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" 466 | }, 467 | "jsbn": { 468 | "version": "0.1.1", 469 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", 470 | "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" 471 | }, 472 | "json-schema": { 473 | "version": "0.2.3", 474 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", 475 | "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" 476 | }, 477 | "json-schema-traverse": { 478 | "version": "0.4.1", 479 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 480 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" 481 | }, 482 | "json-stringify-safe": { 483 | "version": "5.0.1", 484 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 485 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" 486 | }, 487 | "jsonwebtoken": { 488 | "version": "8.5.1", 489 | "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", 490 | "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", 491 | "requires": { 492 | "jws": "^3.2.2", 493 | "lodash.includes": "^4.3.0", 494 | "lodash.isboolean": "^3.0.3", 495 | "lodash.isinteger": "^4.0.4", 496 | "lodash.isnumber": "^3.0.3", 497 | "lodash.isplainobject": "^4.0.6", 498 | "lodash.isstring": "^4.0.1", 499 | "lodash.once": "^4.0.0", 500 | "ms": "^2.1.1", 501 | "semver": "^5.6.0" 502 | } 503 | }, 504 | "jsprim": { 505 | "version": "1.4.1", 506 | "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", 507 | "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", 508 | "requires": { 509 | "assert-plus": "1.0.0", 510 | "extsprintf": "1.3.0", 511 | "json-schema": "0.2.3", 512 | "verror": "1.10.0" 513 | } 514 | }, 515 | "jwa": { 516 | "version": "1.4.1", 517 | "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", 518 | "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", 519 | "requires": { 520 | "buffer-equal-constant-time": "1.0.1", 521 | "ecdsa-sig-formatter": "1.0.11", 522 | "safe-buffer": "^5.0.1" 523 | } 524 | }, 525 | "jws": { 526 | "version": "3.2.2", 527 | "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", 528 | "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", 529 | "requires": { 530 | "jwa": "^1.4.1", 531 | "safe-buffer": "^5.0.1" 532 | } 533 | }, 534 | "lodash": { 535 | "version": "4.17.21", 536 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 537 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" 538 | }, 539 | "lodash.clonedeep": { 540 | "version": "4.5.0", 541 | "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", 542 | "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" 543 | }, 544 | "lodash.includes": { 545 | "version": "4.3.0", 546 | "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", 547 | "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=" 548 | }, 549 | "lodash.isboolean": { 550 | "version": "3.0.3", 551 | "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", 552 | "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" 553 | }, 554 | "lodash.isinteger": { 555 | "version": "4.0.4", 556 | "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", 557 | "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=" 558 | }, 559 | "lodash.isnumber": { 560 | "version": "3.0.3", 561 | "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", 562 | "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=" 563 | }, 564 | "lodash.isplainobject": { 565 | "version": "4.0.6", 566 | "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", 567 | "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" 568 | }, 569 | "lodash.isstring": { 570 | "version": "4.0.1", 571 | "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", 572 | "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" 573 | }, 574 | "lodash.merge": { 575 | "version": "4.6.2", 576 | "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", 577 | "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" 578 | }, 579 | "lodash.once": { 580 | "version": "4.1.1", 581 | "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", 582 | "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" 583 | }, 584 | "lodash.set": { 585 | "version": "4.3.2", 586 | "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz", 587 | "integrity": "sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM=" 588 | }, 589 | "lodash.unset": { 590 | "version": "4.5.2", 591 | "resolved": "https://registry.npmjs.org/lodash.unset/-/lodash.unset-4.5.2.tgz", 592 | "integrity": "sha1-Nw0dPoW3Kn4bDN8tJyEhMG8j5O0=" 593 | }, 594 | "long": { 595 | "version": "4.0.0", 596 | "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", 597 | "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" 598 | }, 599 | "mime-db": { 600 | "version": "1.42.0", 601 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.42.0.tgz", 602 | "integrity": "sha512-UbfJCR4UAVRNgMpfImz05smAXK7+c+ZntjaA26ANtkXLlOe947Aag5zdIcKQULAiF9Cq4WxBi9jUs5zkA84bYQ==" 603 | }, 604 | "mime-types": { 605 | "version": "2.1.25", 606 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.25.tgz", 607 | "integrity": "sha512-5KhStqB5xpTAeGqKBAMgwaYMnQik7teQN4IAzC7npDv6kzeU6prfkR67bc87J1kWMPGkoaZSq1npmexMgkmEVg==", 608 | "requires": { 609 | "mime-db": "1.42.0" 610 | } 611 | }, 612 | "ms": { 613 | "version": "2.1.2", 614 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 615 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 616 | }, 617 | "nth-check": { 618 | "version": "1.0.2", 619 | "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", 620 | "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", 621 | "requires": { 622 | "boolbase": "~1.0.0" 623 | } 624 | }, 625 | "oauth-sign": { 626 | "version": "0.9.0", 627 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", 628 | "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" 629 | }, 630 | "object-inspect": { 631 | "version": "1.7.0", 632 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", 633 | "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==" 634 | }, 635 | "object-keys": { 636 | "version": "1.1.1", 637 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", 638 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" 639 | }, 640 | "object.getownpropertydescriptors": { 641 | "version": "2.0.3", 642 | "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", 643 | "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", 644 | "requires": { 645 | "define-properties": "^1.1.2", 646 | "es-abstract": "^1.5.1" 647 | } 648 | }, 649 | "parse5": { 650 | "version": "3.0.3", 651 | "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", 652 | "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==", 653 | "requires": { 654 | "@types/node": "*" 655 | } 656 | }, 657 | "performance-now": { 658 | "version": "2.1.0", 659 | "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", 660 | "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" 661 | }, 662 | "protobufjs": { 663 | "version": "6.8.8", 664 | "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.8.8.tgz", 665 | "integrity": "sha512-AAmHtD5pXgZfi7GMpllpO3q1Xw1OYldr+dMUlAnffGTAhqkg72WdmSY71uKBF/JuyiKs8psYbtKrhi0ASCD8qw==", 666 | "requires": { 667 | "@protobufjs/aspromise": "^1.1.2", 668 | "@protobufjs/base64": "^1.1.2", 669 | "@protobufjs/codegen": "^2.0.4", 670 | "@protobufjs/eventemitter": "^1.1.0", 671 | "@protobufjs/fetch": "^1.1.0", 672 | "@protobufjs/float": "^1.0.2", 673 | "@protobufjs/inquire": "^1.1.0", 674 | "@protobufjs/path": "^1.1.2", 675 | "@protobufjs/pool": "^1.1.0", 676 | "@protobufjs/utf8": "^1.1.0", 677 | "@types/long": "^4.0.0", 678 | "@types/node": "^10.1.0", 679 | "long": "^4.0.0" 680 | } 681 | }, 682 | "psl": { 683 | "version": "1.5.0", 684 | "resolved": "https://registry.npmjs.org/psl/-/psl-1.5.0.tgz", 685 | "integrity": "sha512-4vqUjKi2huMu1OJiLhi3jN6jeeKvMZdI1tYgi/njW5zV52jNLgSAZSdN16m9bJFe61/cT8ulmw4qFitV9QRsEA==" 686 | }, 687 | "punycode": { 688 | "version": "2.1.1", 689 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 690 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" 691 | }, 692 | "qs": { 693 | "version": "6.5.2", 694 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", 695 | "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" 696 | }, 697 | "readable-stream": { 698 | "version": "3.4.0", 699 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", 700 | "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", 701 | "requires": { 702 | "inherits": "^2.0.3", 703 | "string_decoder": "^1.1.1", 704 | "util-deprecate": "^1.0.1" 705 | } 706 | }, 707 | "request": { 708 | "version": "2.88.0", 709 | "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", 710 | "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", 711 | "requires": { 712 | "aws-sign2": "~0.7.0", 713 | "aws4": "^1.8.0", 714 | "caseless": "~0.12.0", 715 | "combined-stream": "~1.0.6", 716 | "extend": "~3.0.2", 717 | "forever-agent": "~0.6.1", 718 | "form-data": "~2.3.2", 719 | "har-validator": "~5.1.0", 720 | "http-signature": "~1.2.0", 721 | "is-typedarray": "~1.0.0", 722 | "isstream": "~0.1.2", 723 | "json-stringify-safe": "~5.0.1", 724 | "mime-types": "~2.1.19", 725 | "oauth-sign": "~0.9.0", 726 | "performance-now": "^2.1.0", 727 | "qs": "~6.5.2", 728 | "safe-buffer": "^5.1.2", 729 | "tough-cookie": "~2.4.3", 730 | "tunnel-agent": "^0.6.0", 731 | "uuid": "^3.3.2" 732 | } 733 | }, 734 | "request-promise": { 735 | "version": "4.2.5", 736 | "resolved": "https://registry.npmjs.org/request-promise/-/request-promise-4.2.5.tgz", 737 | "integrity": "sha512-ZgnepCykFdmpq86fKGwqntyTiUrHycALuGggpyCZwMvGaZWgxW6yagT0FHkgo5LzYvOaCNvxYwWYIjevSH1EDg==", 738 | "requires": { 739 | "bluebird": "^3.5.0", 740 | "request-promise-core": "1.1.3", 741 | "stealthy-require": "^1.1.1", 742 | "tough-cookie": "^2.3.3" 743 | } 744 | }, 745 | "request-promise-core": { 746 | "version": "1.1.3", 747 | "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.3.tgz", 748 | "integrity": "sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ==", 749 | "requires": { 750 | "lodash": "^4.17.15" 751 | } 752 | }, 753 | "safe-buffer": { 754 | "version": "5.2.0", 755 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", 756 | "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" 757 | }, 758 | "safer-buffer": { 759 | "version": "2.1.2", 760 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 761 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 762 | }, 763 | "sax": { 764 | "version": "1.2.4", 765 | "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", 766 | "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" 767 | }, 768 | "semver": { 769 | "version": "5.7.1", 770 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 771 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" 772 | }, 773 | "sshpk": { 774 | "version": "1.16.1", 775 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", 776 | "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", 777 | "requires": { 778 | "asn1": "~0.2.3", 779 | "assert-plus": "^1.0.0", 780 | "bcrypt-pbkdf": "^1.0.0", 781 | "dashdash": "^1.12.0", 782 | "ecc-jsbn": "~0.1.1", 783 | "getpass": "^0.1.1", 784 | "jsbn": "~0.1.0", 785 | "safer-buffer": "^2.0.2", 786 | "tweetnacl": "~0.14.0" 787 | } 788 | }, 789 | "stealthy-require": { 790 | "version": "1.1.1", 791 | "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", 792 | "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=" 793 | }, 794 | "string.prototype.trimleft": { 795 | "version": "2.1.0", 796 | "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz", 797 | "integrity": "sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw==", 798 | "requires": { 799 | "define-properties": "^1.1.3", 800 | "function-bind": "^1.1.1" 801 | } 802 | }, 803 | "string.prototype.trimright": { 804 | "version": "2.1.0", 805 | "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz", 806 | "integrity": "sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg==", 807 | "requires": { 808 | "define-properties": "^1.1.3", 809 | "function-bind": "^1.1.1" 810 | } 811 | }, 812 | "string_decoder": { 813 | "version": "1.3.0", 814 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", 815 | "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", 816 | "requires": { 817 | "safe-buffer": "~5.2.0" 818 | } 819 | }, 820 | "tcb-admin-node": { 821 | "version": "1.16.3", 822 | "resolved": "https://registry.npmjs.org/tcb-admin-node/-/tcb-admin-node-1.16.3.tgz", 823 | "integrity": "sha512-tQT72ViRMAtrAkThrHvR4+pRO8bu7caRe2kRcCDiimUAwr12nSE6KsHpp8lhWAe/GRLlxD0/dkZ2P9qj1aRn0A==", 824 | "requires": { 825 | "@cloudbase/database": "^0.9.2", 826 | "is-regex": "^1.0.4", 827 | "jsonwebtoken": "^8.5.1", 828 | "lodash.merge": "^4.6.1", 829 | "request": "^2.87.0", 830 | "xml2js": "^0.4.19" 831 | } 832 | }, 833 | "tcb-router": { 834 | "version": "1.1.2", 835 | "resolved": "https://registry.npmjs.org/tcb-router/-/tcb-router-1.1.2.tgz", 836 | "integrity": "sha512-VB+83paVdYG0LWaodh73JUy660te2oleM5gETslbCHLnhTtgXXYfAR0dlHBU5dIhhH47V1nKp43lZUo6Xm9O4g==" 837 | }, 838 | "tough-cookie": { 839 | "version": "2.4.3", 840 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", 841 | "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", 842 | "requires": { 843 | "psl": "^1.1.24", 844 | "punycode": "^1.4.1" 845 | }, 846 | "dependencies": { 847 | "punycode": { 848 | "version": "1.4.1", 849 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", 850 | "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" 851 | } 852 | } 853 | }, 854 | "tslib": { 855 | "version": "1.10.0", 856 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", 857 | "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==" 858 | }, 859 | "tunnel-agent": { 860 | "version": "0.6.0", 861 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", 862 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", 863 | "requires": { 864 | "safe-buffer": "^5.0.1" 865 | } 866 | }, 867 | "tweetnacl": { 868 | "version": "0.14.5", 869 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", 870 | "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" 871 | }, 872 | "uri-js": { 873 | "version": "4.2.2", 874 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", 875 | "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", 876 | "requires": { 877 | "punycode": "^2.1.0" 878 | } 879 | }, 880 | "util-deprecate": { 881 | "version": "1.0.2", 882 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 883 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" 884 | }, 885 | "util.promisify": { 886 | "version": "1.0.0", 887 | "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", 888 | "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", 889 | "requires": { 890 | "define-properties": "^1.1.2", 891 | "object.getownpropertydescriptors": "^2.0.3" 892 | } 893 | }, 894 | "uuid": { 895 | "version": "3.3.3", 896 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz", 897 | "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==" 898 | }, 899 | "verror": { 900 | "version": "1.10.0", 901 | "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", 902 | "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", 903 | "requires": { 904 | "assert-plus": "^1.0.0", 905 | "core-util-is": "1.0.2", 906 | "extsprintf": "^1.2.0" 907 | } 908 | }, 909 | "ws": { 910 | "version": "7.2.0", 911 | "resolved": "https://registry.npmjs.org/ws/-/ws-7.2.0.tgz", 912 | "integrity": "sha512-+SqNqFbwTm/0DC18KYzIsMTnEWpLwJsiasW/O17la4iDRRIO9uaHbvKiAS3AHgTiuuWerK/brj4O6MYZkei9xg==", 913 | "requires": { 914 | "async-limiter": "^1.0.0" 915 | } 916 | }, 917 | "wx-server-sdk": { 918 | "version": "1.5.5", 919 | "resolved": "https://registry.npmjs.org/wx-server-sdk/-/wx-server-sdk-1.5.5.tgz", 920 | "integrity": "sha512-UhJWoFwnMQYmpr2PL2wMRTn4cGUXgbb73yvmbPE4VVGI5rrrzA1nw/a4MfQNOwL9KxlMv8wME5LaClFXepclYw==", 921 | "requires": { 922 | "protobufjs": "6.8.8", 923 | "tcb-admin-node": "1.16.3", 924 | "tslib": "^1.9.3" 925 | } 926 | }, 927 | "xml2js": { 928 | "version": "0.4.22", 929 | "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.22.tgz", 930 | "integrity": "sha512-MWTbxAQqclRSTnehWWe5nMKzI3VmJ8ltiJEco8akcC6j3miOhjjfzKum5sId+CWhfxdOs/1xauYr8/ZDBtQiRw==", 931 | "requires": { 932 | "sax": ">=0.6.0", 933 | "util.promisify": "~1.0.0", 934 | "xmlbuilder": "~11.0.0" 935 | } 936 | }, 937 | "xmlbuilder": { 938 | "version": "11.0.1", 939 | "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", 940 | "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" 941 | } 942 | } 943 | } 944 | -------------------------------------------------------------------------------- /cloudfunctions/damai/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "damai", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "dependencies": { 12 | "cheerio": "^1.0.0-rc.3", 13 | "request": "^2.88.0", 14 | "request-promise": "^4.2.5", 15 | "tcb-router": "^1.1.2", 16 | "wx-server-sdk": "latest" 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /cloudfunctions/douban/detail.js: -------------------------------------------------------------------------------- 1 | const rp = require('request-promise') 2 | const cheerio = require('cheerio') 3 | 4 | exports.main = async (event, context) => { 5 | const subjectId = event.id 6 | const baseUrl = 'https://movie.douban.com/j' 7 | const options = { 8 | uri: `${baseUrl}/subject_abstract?subject_id=${subjectId}`, 9 | headers: { 10 | 'Host': 'movie.douban.com', 11 | 'Referer': 'https://movie.douban.com/' 12 | }, 13 | json: true 14 | } 15 | return rp(options).then((res) => { 16 | return rp(`https://movie.douban.com/subject/${subjectId}/`) 17 | .then((html) => { 18 | const $ = cheerio.load(html) 19 | const plot = $('#link-report').find('span').text(); //.replace(/\s/g, '') 20 | res.subject.plot = plot 21 | return res 22 | }).catch((err) => { 23 | console.log(err) 24 | }); 25 | }).catch((err) => { 26 | console.log(err) 27 | }); 28 | 29 | } -------------------------------------------------------------------------------- /cloudfunctions/douban/index.js: -------------------------------------------------------------------------------- 1 | // 云函数入口文件 2 | const cloud = require('wx-server-sdk') 3 | const TcbRouter = require('tcb-router') 4 | 5 | cloud.init() 6 | 7 | // 云函数入口函数 8 | exports.main = async (event, context) => { 9 | const app = new TcbRouter({ event }) 10 | /** 查询列表 */ 11 | app.router('list', async (ctx, next) => { 12 | const list = require('./list.js') 13 | ctx.body = list.main(event, context) 14 | }) 15 | /** 查询详情 */ 16 | app.router('detail', async (ctx, next) => { 17 | const detail = require('./detail.js') 18 | ctx.body = detail.main(event, context) 19 | }) 20 | return app.serve(); 21 | } -------------------------------------------------------------------------------- /cloudfunctions/douban/list.js: -------------------------------------------------------------------------------- 1 | const rp = require('request-promise') 2 | 3 | exports.main = async (event, context) => { 4 | const type = event.type 5 | const tag = encodeURI(event.tag) 6 | const limit = event.limit || 50 7 | const start = event.start || 0 8 | 9 | const options = { 10 | uri: `https://movie.douban.com/j/search_subjects?type=${type}&tag=${tag}&page_limit=${limit}&page_start=${start}`, 11 | headers: { 12 | 'Host': 'movie.douban.com', 13 | 'Referer': 'https://movie.douban.com/' 14 | }, 15 | json: true 16 | } 17 | console.log('options.uri', options.uri) 18 | return rp(options).then(res => res).catch(err => { 19 | console.log(err) 20 | }) 21 | 22 | } -------------------------------------------------------------------------------- /cloudfunctions/douban/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "movielist", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@cloudbase/database": { 8 | "version": "0.9.5", 9 | "resolved": "https://registry.npmjs.org/@cloudbase/database/-/database-0.9.5.tgz", 10 | "integrity": "sha512-7j+AIHmK9CUA/cf7Jej4ES4UMFvv5oFDWWm3jJb8dfdo/Ti3TlM2oAS6kqADN/qw+tiZQpaovpVcletgFgXLbg==", 11 | "requires": { 12 | "bson": "^4.0.2", 13 | "lodash.clonedeep": "4.5.0", 14 | "lodash.set": "4.3.2", 15 | "lodash.unset": "4.5.2", 16 | "ws": "^7.0.0" 17 | } 18 | }, 19 | "@protobufjs/aspromise": { 20 | "version": "1.1.2", 21 | "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", 22 | "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78=" 23 | }, 24 | "@protobufjs/base64": { 25 | "version": "1.1.2", 26 | "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", 27 | "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" 28 | }, 29 | "@protobufjs/codegen": { 30 | "version": "2.0.4", 31 | "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", 32 | "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" 33 | }, 34 | "@protobufjs/eventemitter": { 35 | "version": "1.1.0", 36 | "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", 37 | "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A=" 38 | }, 39 | "@protobufjs/fetch": { 40 | "version": "1.1.0", 41 | "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", 42 | "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=", 43 | "requires": { 44 | "@protobufjs/aspromise": "^1.1.1", 45 | "@protobufjs/inquire": "^1.1.0" 46 | } 47 | }, 48 | "@protobufjs/float": { 49 | "version": "1.0.2", 50 | "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", 51 | "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=" 52 | }, 53 | "@protobufjs/inquire": { 54 | "version": "1.1.0", 55 | "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", 56 | "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=" 57 | }, 58 | "@protobufjs/path": { 59 | "version": "1.1.2", 60 | "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", 61 | "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=" 62 | }, 63 | "@protobufjs/pool": { 64 | "version": "1.1.0", 65 | "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", 66 | "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=" 67 | }, 68 | "@protobufjs/utf8": { 69 | "version": "1.1.0", 70 | "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", 71 | "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" 72 | }, 73 | "@types/long": { 74 | "version": "4.0.0", 75 | "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.0.tgz", 76 | "integrity": "sha512-1w52Nyx4Gq47uuu0EVcsHBxZFJgurQ+rTKS3qMHxR1GY2T8c2AJYd6vZoZ9q1rupaDjU0yT+Jc2XTyXkjeMA+Q==" 77 | }, 78 | "@types/node": { 79 | "version": "10.17.6", 80 | "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.6.tgz", 81 | "integrity": "sha512-0a2X6cgN3RdPBL2MIlR6Lt0KlM7fOFsutuXcdglcOq6WvLnYXgPQSh0Mx6tO1KCAE8MxbHSOSTWDoUxRq+l3DA==" 82 | }, 83 | "ajv": { 84 | "version": "6.12.6", 85 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", 86 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", 87 | "requires": { 88 | "fast-deep-equal": "^3.1.1", 89 | "fast-json-stable-stringify": "^2.0.0", 90 | "json-schema-traverse": "^0.4.1", 91 | "uri-js": "^4.2.2" 92 | }, 93 | "dependencies": { 94 | "fast-deep-equal": { 95 | "version": "3.1.3", 96 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 97 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" 98 | } 99 | } 100 | }, 101 | "asn1": { 102 | "version": "0.2.4", 103 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", 104 | "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", 105 | "requires": { 106 | "safer-buffer": "~2.1.0" 107 | } 108 | }, 109 | "assert-plus": { 110 | "version": "1.0.0", 111 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 112 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" 113 | }, 114 | "async-limiter": { 115 | "version": "1.0.1", 116 | "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", 117 | "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" 118 | }, 119 | "asynckit": { 120 | "version": "0.4.0", 121 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 122 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" 123 | }, 124 | "aws-sign2": { 125 | "version": "0.7.0", 126 | "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", 127 | "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" 128 | }, 129 | "aws4": { 130 | "version": "1.9.0", 131 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.0.tgz", 132 | "integrity": "sha512-Uvq6hVe90D0B2WEnUqtdgY1bATGz3mw33nH9Y+dmA+w5DHvUmBgkr5rM/KCHpCsiFNRUfokW/szpPPgMK2hm4A==" 133 | }, 134 | "base64-js": { 135 | "version": "1.3.1", 136 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", 137 | "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" 138 | }, 139 | "bcrypt-pbkdf": { 140 | "version": "1.0.2", 141 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", 142 | "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", 143 | "requires": { 144 | "tweetnacl": "^0.14.3" 145 | } 146 | }, 147 | "bluebird": { 148 | "version": "3.7.2", 149 | "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", 150 | "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" 151 | }, 152 | "boolbase": { 153 | "version": "1.0.0", 154 | "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", 155 | "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" 156 | }, 157 | "bson": { 158 | "version": "4.0.2", 159 | "resolved": "https://registry.npmjs.org/bson/-/bson-4.0.2.tgz", 160 | "integrity": "sha512-rBdCxMBCg2aR420e1oKUejjcuPZLTibA7zEhWAlliFWEwzuBCC9Dkp5r7VFFIQB2t1WVsvTbohry575mc7Xw5A==", 161 | "requires": { 162 | "buffer": "^5.1.0", 163 | "long": "^4.0.0" 164 | } 165 | }, 166 | "buffer": { 167 | "version": "5.4.3", 168 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.4.3.tgz", 169 | "integrity": "sha512-zvj65TkFeIt3i6aj5bIvJDzjjQQGs4o/sNoezg1F1kYap9Nu2jcUdpwzRSJTHMMzG0H7bZkn4rNQpImhuxWX2A==", 170 | "requires": { 171 | "base64-js": "^1.0.2", 172 | "ieee754": "^1.1.4" 173 | } 174 | }, 175 | "buffer-equal-constant-time": { 176 | "version": "1.0.1", 177 | "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", 178 | "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" 179 | }, 180 | "caseless": { 181 | "version": "0.12.0", 182 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", 183 | "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" 184 | }, 185 | "cheerio": { 186 | "version": "1.0.0-rc.3", 187 | "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.3.tgz", 188 | "integrity": "sha512-0td5ijfUPuubwLUu0OBoe98gZj8C/AA+RW3v67GPlGOrvxWjZmBXiBCRU+I8VEiNyJzjth40POfHiz2RB3gImA==", 189 | "requires": { 190 | "css-select": "~1.2.0", 191 | "dom-serializer": "~0.1.1", 192 | "entities": "~1.1.1", 193 | "htmlparser2": "^3.9.1", 194 | "lodash": "^4.15.0", 195 | "parse5": "^3.0.1" 196 | } 197 | }, 198 | "combined-stream": { 199 | "version": "1.0.8", 200 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 201 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 202 | "requires": { 203 | "delayed-stream": "~1.0.0" 204 | } 205 | }, 206 | "core-util-is": { 207 | "version": "1.0.2", 208 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 209 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" 210 | }, 211 | "css-select": { 212 | "version": "1.2.0", 213 | "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", 214 | "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", 215 | "requires": { 216 | "boolbase": "~1.0.0", 217 | "css-what": "2.1", 218 | "domutils": "1.5.1", 219 | "nth-check": "~1.0.1" 220 | } 221 | }, 222 | "css-what": { 223 | "version": "2.1.3", 224 | "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", 225 | "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==" 226 | }, 227 | "dashdash": { 228 | "version": "1.14.1", 229 | "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", 230 | "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", 231 | "requires": { 232 | "assert-plus": "^1.0.0" 233 | } 234 | }, 235 | "define-properties": { 236 | "version": "1.1.3", 237 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", 238 | "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", 239 | "requires": { 240 | "object-keys": "^1.0.12" 241 | } 242 | }, 243 | "delayed-stream": { 244 | "version": "1.0.0", 245 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 246 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" 247 | }, 248 | "dom-serializer": { 249 | "version": "0.1.1", 250 | "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", 251 | "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", 252 | "requires": { 253 | "domelementtype": "^1.3.0", 254 | "entities": "^1.1.1" 255 | } 256 | }, 257 | "domelementtype": { 258 | "version": "1.3.1", 259 | "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", 260 | "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" 261 | }, 262 | "domhandler": { 263 | "version": "2.4.2", 264 | "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", 265 | "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", 266 | "requires": { 267 | "domelementtype": "1" 268 | } 269 | }, 270 | "domutils": { 271 | "version": "1.5.1", 272 | "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", 273 | "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", 274 | "requires": { 275 | "dom-serializer": "0", 276 | "domelementtype": "1" 277 | } 278 | }, 279 | "ecc-jsbn": { 280 | "version": "0.1.2", 281 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", 282 | "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", 283 | "requires": { 284 | "jsbn": "~0.1.0", 285 | "safer-buffer": "^2.1.0" 286 | } 287 | }, 288 | "ecdsa-sig-formatter": { 289 | "version": "1.0.11", 290 | "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", 291 | "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", 292 | "requires": { 293 | "safe-buffer": "^5.0.1" 294 | } 295 | }, 296 | "entities": { 297 | "version": "1.1.2", 298 | "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", 299 | "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" 300 | }, 301 | "es-abstract": { 302 | "version": "1.16.2", 303 | "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.16.2.tgz", 304 | "integrity": "sha512-jYo/J8XU2emLXl3OLwfwtuFfuF2w6DYPs+xy9ZfVyPkDcrauu6LYrw/q2TyCtrbc/KUdCiC5e9UajRhgNkVopA==", 305 | "requires": { 306 | "es-to-primitive": "^1.2.1", 307 | "function-bind": "^1.1.1", 308 | "has": "^1.0.3", 309 | "has-symbols": "^1.0.1", 310 | "is-callable": "^1.1.4", 311 | "is-regex": "^1.0.4", 312 | "object-inspect": "^1.7.0", 313 | "object-keys": "^1.1.1", 314 | "string.prototype.trimleft": "^2.1.0", 315 | "string.prototype.trimright": "^2.1.0" 316 | } 317 | }, 318 | "es-to-primitive": { 319 | "version": "1.2.1", 320 | "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", 321 | "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", 322 | "requires": { 323 | "is-callable": "^1.1.4", 324 | "is-date-object": "^1.0.1", 325 | "is-symbol": "^1.0.2" 326 | } 327 | }, 328 | "extend": { 329 | "version": "3.0.2", 330 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", 331 | "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" 332 | }, 333 | "extsprintf": { 334 | "version": "1.3.0", 335 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", 336 | "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" 337 | }, 338 | "fast-json-stable-stringify": { 339 | "version": "2.0.0", 340 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", 341 | "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" 342 | }, 343 | "forever-agent": { 344 | "version": "0.6.1", 345 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", 346 | "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" 347 | }, 348 | "form-data": { 349 | "version": "2.3.3", 350 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", 351 | "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", 352 | "requires": { 353 | "asynckit": "^0.4.0", 354 | "combined-stream": "^1.0.6", 355 | "mime-types": "^2.1.12" 356 | } 357 | }, 358 | "function-bind": { 359 | "version": "1.1.1", 360 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 361 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" 362 | }, 363 | "getpass": { 364 | "version": "0.1.7", 365 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", 366 | "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", 367 | "requires": { 368 | "assert-plus": "^1.0.0" 369 | } 370 | }, 371 | "har-schema": { 372 | "version": "2.0.0", 373 | "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", 374 | "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" 375 | }, 376 | "har-validator": { 377 | "version": "5.1.3", 378 | "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", 379 | "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", 380 | "requires": { 381 | "ajv": "^6.5.5", 382 | "har-schema": "^2.0.0" 383 | } 384 | }, 385 | "has": { 386 | "version": "1.0.3", 387 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 388 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 389 | "requires": { 390 | "function-bind": "^1.1.1" 391 | } 392 | }, 393 | "has-symbols": { 394 | "version": "1.0.1", 395 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", 396 | "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" 397 | }, 398 | "htmlparser2": { 399 | "version": "3.10.1", 400 | "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", 401 | "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", 402 | "requires": { 403 | "domelementtype": "^1.3.1", 404 | "domhandler": "^2.3.0", 405 | "domutils": "^1.5.1", 406 | "entities": "^1.1.1", 407 | "inherits": "^2.0.1", 408 | "readable-stream": "^3.1.1" 409 | } 410 | }, 411 | "http-signature": { 412 | "version": "1.2.0", 413 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", 414 | "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", 415 | "requires": { 416 | "assert-plus": "^1.0.0", 417 | "jsprim": "^1.2.2", 418 | "sshpk": "^1.7.0" 419 | } 420 | }, 421 | "ieee754": { 422 | "version": "1.1.13", 423 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", 424 | "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" 425 | }, 426 | "inherits": { 427 | "version": "2.0.4", 428 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 429 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 430 | }, 431 | "is-callable": { 432 | "version": "1.1.4", 433 | "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", 434 | "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==" 435 | }, 436 | "is-date-object": { 437 | "version": "1.0.1", 438 | "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", 439 | "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=" 440 | }, 441 | "is-regex": { 442 | "version": "1.0.4", 443 | "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", 444 | "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", 445 | "requires": { 446 | "has": "^1.0.1" 447 | } 448 | }, 449 | "is-symbol": { 450 | "version": "1.0.3", 451 | "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", 452 | "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", 453 | "requires": { 454 | "has-symbols": "^1.0.1" 455 | } 456 | }, 457 | "is-typedarray": { 458 | "version": "1.0.0", 459 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", 460 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" 461 | }, 462 | "isstream": { 463 | "version": "0.1.2", 464 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", 465 | "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" 466 | }, 467 | "jsbn": { 468 | "version": "0.1.1", 469 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", 470 | "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" 471 | }, 472 | "json-schema": { 473 | "version": "0.2.3", 474 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", 475 | "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" 476 | }, 477 | "json-schema-traverse": { 478 | "version": "0.4.1", 479 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 480 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" 481 | }, 482 | "json-stringify-safe": { 483 | "version": "5.0.1", 484 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 485 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" 486 | }, 487 | "jsonwebtoken": { 488 | "version": "8.5.1", 489 | "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", 490 | "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", 491 | "requires": { 492 | "jws": "^3.2.2", 493 | "lodash.includes": "^4.3.0", 494 | "lodash.isboolean": "^3.0.3", 495 | "lodash.isinteger": "^4.0.4", 496 | "lodash.isnumber": "^3.0.3", 497 | "lodash.isplainobject": "^4.0.6", 498 | "lodash.isstring": "^4.0.1", 499 | "lodash.once": "^4.0.0", 500 | "ms": "^2.1.1", 501 | "semver": "^5.6.0" 502 | } 503 | }, 504 | "jsprim": { 505 | "version": "1.4.1", 506 | "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", 507 | "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", 508 | "requires": { 509 | "assert-plus": "1.0.0", 510 | "extsprintf": "1.3.0", 511 | "json-schema": "0.2.3", 512 | "verror": "1.10.0" 513 | } 514 | }, 515 | "jwa": { 516 | "version": "1.4.1", 517 | "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", 518 | "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", 519 | "requires": { 520 | "buffer-equal-constant-time": "1.0.1", 521 | "ecdsa-sig-formatter": "1.0.11", 522 | "safe-buffer": "^5.0.1" 523 | } 524 | }, 525 | "jws": { 526 | "version": "3.2.2", 527 | "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", 528 | "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", 529 | "requires": { 530 | "jwa": "^1.4.1", 531 | "safe-buffer": "^5.0.1" 532 | } 533 | }, 534 | "lodash": { 535 | "version": "4.17.21", 536 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 537 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" 538 | }, 539 | "lodash.clonedeep": { 540 | "version": "4.5.0", 541 | "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", 542 | "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" 543 | }, 544 | "lodash.includes": { 545 | "version": "4.3.0", 546 | "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", 547 | "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=" 548 | }, 549 | "lodash.isboolean": { 550 | "version": "3.0.3", 551 | "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", 552 | "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" 553 | }, 554 | "lodash.isinteger": { 555 | "version": "4.0.4", 556 | "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", 557 | "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=" 558 | }, 559 | "lodash.isnumber": { 560 | "version": "3.0.3", 561 | "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", 562 | "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=" 563 | }, 564 | "lodash.isplainobject": { 565 | "version": "4.0.6", 566 | "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", 567 | "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" 568 | }, 569 | "lodash.isstring": { 570 | "version": "4.0.1", 571 | "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", 572 | "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" 573 | }, 574 | "lodash.merge": { 575 | "version": "4.6.2", 576 | "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", 577 | "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" 578 | }, 579 | "lodash.once": { 580 | "version": "4.1.1", 581 | "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", 582 | "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" 583 | }, 584 | "lodash.set": { 585 | "version": "4.3.2", 586 | "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz", 587 | "integrity": "sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM=" 588 | }, 589 | "lodash.unset": { 590 | "version": "4.5.2", 591 | "resolved": "https://registry.npmjs.org/lodash.unset/-/lodash.unset-4.5.2.tgz", 592 | "integrity": "sha1-Nw0dPoW3Kn4bDN8tJyEhMG8j5O0=" 593 | }, 594 | "long": { 595 | "version": "4.0.0", 596 | "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", 597 | "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" 598 | }, 599 | "mime-db": { 600 | "version": "1.42.0", 601 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.42.0.tgz", 602 | "integrity": "sha512-UbfJCR4UAVRNgMpfImz05smAXK7+c+ZntjaA26ANtkXLlOe947Aag5zdIcKQULAiF9Cq4WxBi9jUs5zkA84bYQ==" 603 | }, 604 | "mime-types": { 605 | "version": "2.1.25", 606 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.25.tgz", 607 | "integrity": "sha512-5KhStqB5xpTAeGqKBAMgwaYMnQik7teQN4IAzC7npDv6kzeU6prfkR67bc87J1kWMPGkoaZSq1npmexMgkmEVg==", 608 | "requires": { 609 | "mime-db": "1.42.0" 610 | } 611 | }, 612 | "ms": { 613 | "version": "2.1.2", 614 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 615 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 616 | }, 617 | "nth-check": { 618 | "version": "1.0.2", 619 | "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", 620 | "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", 621 | "requires": { 622 | "boolbase": "~1.0.0" 623 | } 624 | }, 625 | "oauth-sign": { 626 | "version": "0.9.0", 627 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", 628 | "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" 629 | }, 630 | "object-inspect": { 631 | "version": "1.7.0", 632 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", 633 | "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==" 634 | }, 635 | "object-keys": { 636 | "version": "1.1.1", 637 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", 638 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" 639 | }, 640 | "object.getownpropertydescriptors": { 641 | "version": "2.0.3", 642 | "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", 643 | "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", 644 | "requires": { 645 | "define-properties": "^1.1.2", 646 | "es-abstract": "^1.5.1" 647 | } 648 | }, 649 | "parse5": { 650 | "version": "3.0.3", 651 | "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", 652 | "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==", 653 | "requires": { 654 | "@types/node": "*" 655 | } 656 | }, 657 | "performance-now": { 658 | "version": "2.1.0", 659 | "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", 660 | "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" 661 | }, 662 | "protobufjs": { 663 | "version": "6.8.8", 664 | "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.8.8.tgz", 665 | "integrity": "sha512-AAmHtD5pXgZfi7GMpllpO3q1Xw1OYldr+dMUlAnffGTAhqkg72WdmSY71uKBF/JuyiKs8psYbtKrhi0ASCD8qw==", 666 | "requires": { 667 | "@protobufjs/aspromise": "^1.1.2", 668 | "@protobufjs/base64": "^1.1.2", 669 | "@protobufjs/codegen": "^2.0.4", 670 | "@protobufjs/eventemitter": "^1.1.0", 671 | "@protobufjs/fetch": "^1.1.0", 672 | "@protobufjs/float": "^1.0.2", 673 | "@protobufjs/inquire": "^1.1.0", 674 | "@protobufjs/path": "^1.1.2", 675 | "@protobufjs/pool": "^1.1.0", 676 | "@protobufjs/utf8": "^1.1.0", 677 | "@types/long": "^4.0.0", 678 | "@types/node": "^10.1.0", 679 | "long": "^4.0.0" 680 | } 681 | }, 682 | "psl": { 683 | "version": "1.5.0", 684 | "resolved": "https://registry.npmjs.org/psl/-/psl-1.5.0.tgz", 685 | "integrity": "sha512-4vqUjKi2huMu1OJiLhi3jN6jeeKvMZdI1tYgi/njW5zV52jNLgSAZSdN16m9bJFe61/cT8ulmw4qFitV9QRsEA==" 686 | }, 687 | "punycode": { 688 | "version": "2.1.1", 689 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 690 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" 691 | }, 692 | "qs": { 693 | "version": "6.5.2", 694 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", 695 | "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" 696 | }, 697 | "readable-stream": { 698 | "version": "3.4.0", 699 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", 700 | "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", 701 | "requires": { 702 | "inherits": "^2.0.3", 703 | "string_decoder": "^1.1.1", 704 | "util-deprecate": "^1.0.1" 705 | } 706 | }, 707 | "request": { 708 | "version": "2.88.0", 709 | "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", 710 | "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", 711 | "requires": { 712 | "aws-sign2": "~0.7.0", 713 | "aws4": "^1.8.0", 714 | "caseless": "~0.12.0", 715 | "combined-stream": "~1.0.6", 716 | "extend": "~3.0.2", 717 | "forever-agent": "~0.6.1", 718 | "form-data": "~2.3.2", 719 | "har-validator": "~5.1.0", 720 | "http-signature": "~1.2.0", 721 | "is-typedarray": "~1.0.0", 722 | "isstream": "~0.1.2", 723 | "json-stringify-safe": "~5.0.1", 724 | "mime-types": "~2.1.19", 725 | "oauth-sign": "~0.9.0", 726 | "performance-now": "^2.1.0", 727 | "qs": "~6.5.2", 728 | "safe-buffer": "^5.1.2", 729 | "tough-cookie": "~2.4.3", 730 | "tunnel-agent": "^0.6.0", 731 | "uuid": "^3.3.2" 732 | } 733 | }, 734 | "request-promise": { 735 | "version": "4.2.5", 736 | "resolved": "https://registry.npmjs.org/request-promise/-/request-promise-4.2.5.tgz", 737 | "integrity": "sha512-ZgnepCykFdmpq86fKGwqntyTiUrHycALuGggpyCZwMvGaZWgxW6yagT0FHkgo5LzYvOaCNvxYwWYIjevSH1EDg==", 738 | "requires": { 739 | "bluebird": "^3.5.0", 740 | "request-promise-core": "1.1.3", 741 | "stealthy-require": "^1.1.1", 742 | "tough-cookie": "^2.3.3" 743 | } 744 | }, 745 | "request-promise-core": { 746 | "version": "1.1.3", 747 | "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.3.tgz", 748 | "integrity": "sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ==", 749 | "requires": { 750 | "lodash": "^4.17.15" 751 | } 752 | }, 753 | "safe-buffer": { 754 | "version": "5.2.0", 755 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", 756 | "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" 757 | }, 758 | "safer-buffer": { 759 | "version": "2.1.2", 760 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 761 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 762 | }, 763 | "sax": { 764 | "version": "1.2.4", 765 | "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", 766 | "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" 767 | }, 768 | "semver": { 769 | "version": "5.7.1", 770 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 771 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" 772 | }, 773 | "sshpk": { 774 | "version": "1.16.1", 775 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", 776 | "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", 777 | "requires": { 778 | "asn1": "~0.2.3", 779 | "assert-plus": "^1.0.0", 780 | "bcrypt-pbkdf": "^1.0.0", 781 | "dashdash": "^1.12.0", 782 | "ecc-jsbn": "~0.1.1", 783 | "getpass": "^0.1.1", 784 | "jsbn": "~0.1.0", 785 | "safer-buffer": "^2.0.2", 786 | "tweetnacl": "~0.14.0" 787 | } 788 | }, 789 | "stealthy-require": { 790 | "version": "1.1.1", 791 | "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", 792 | "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=" 793 | }, 794 | "string.prototype.trimleft": { 795 | "version": "2.1.0", 796 | "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz", 797 | "integrity": "sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw==", 798 | "requires": { 799 | "define-properties": "^1.1.3", 800 | "function-bind": "^1.1.1" 801 | } 802 | }, 803 | "string.prototype.trimright": { 804 | "version": "2.1.0", 805 | "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz", 806 | "integrity": "sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg==", 807 | "requires": { 808 | "define-properties": "^1.1.3", 809 | "function-bind": "^1.1.1" 810 | } 811 | }, 812 | "string_decoder": { 813 | "version": "1.3.0", 814 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", 815 | "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", 816 | "requires": { 817 | "safe-buffer": "~5.2.0" 818 | } 819 | }, 820 | "tcb-admin-node": { 821 | "version": "1.16.3", 822 | "resolved": "https://registry.npmjs.org/tcb-admin-node/-/tcb-admin-node-1.16.3.tgz", 823 | "integrity": "sha512-tQT72ViRMAtrAkThrHvR4+pRO8bu7caRe2kRcCDiimUAwr12nSE6KsHpp8lhWAe/GRLlxD0/dkZ2P9qj1aRn0A==", 824 | "requires": { 825 | "@cloudbase/database": "^0.9.2", 826 | "is-regex": "^1.0.4", 827 | "jsonwebtoken": "^8.5.1", 828 | "lodash.merge": "^4.6.1", 829 | "request": "^2.87.0", 830 | "xml2js": "^0.4.19" 831 | } 832 | }, 833 | "tcb-router": { 834 | "version": "1.1.2", 835 | "resolved": "https://registry.npmjs.org/tcb-router/-/tcb-router-1.1.2.tgz", 836 | "integrity": "sha512-VB+83paVdYG0LWaodh73JUy660te2oleM5gETslbCHLnhTtgXXYfAR0dlHBU5dIhhH47V1nKp43lZUo6Xm9O4g==" 837 | }, 838 | "tough-cookie": { 839 | "version": "2.4.3", 840 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", 841 | "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", 842 | "requires": { 843 | "psl": "^1.1.24", 844 | "punycode": "^1.4.1" 845 | }, 846 | "dependencies": { 847 | "punycode": { 848 | "version": "1.4.1", 849 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", 850 | "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" 851 | } 852 | } 853 | }, 854 | "tslib": { 855 | "version": "1.10.0", 856 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", 857 | "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==" 858 | }, 859 | "tunnel-agent": { 860 | "version": "0.6.0", 861 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", 862 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", 863 | "requires": { 864 | "safe-buffer": "^5.0.1" 865 | } 866 | }, 867 | "tweetnacl": { 868 | "version": "0.14.5", 869 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", 870 | "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" 871 | }, 872 | "uri-js": { 873 | "version": "4.2.2", 874 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", 875 | "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", 876 | "requires": { 877 | "punycode": "^2.1.0" 878 | } 879 | }, 880 | "util-deprecate": { 881 | "version": "1.0.2", 882 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 883 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" 884 | }, 885 | "util.promisify": { 886 | "version": "1.0.0", 887 | "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", 888 | "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", 889 | "requires": { 890 | "define-properties": "^1.1.2", 891 | "object.getownpropertydescriptors": "^2.0.3" 892 | } 893 | }, 894 | "uuid": { 895 | "version": "3.3.3", 896 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz", 897 | "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==" 898 | }, 899 | "verror": { 900 | "version": "1.10.0", 901 | "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", 902 | "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", 903 | "requires": { 904 | "assert-plus": "^1.0.0", 905 | "core-util-is": "1.0.2", 906 | "extsprintf": "^1.2.0" 907 | } 908 | }, 909 | "ws": { 910 | "version": "7.2.0", 911 | "resolved": "https://registry.npmjs.org/ws/-/ws-7.2.0.tgz", 912 | "integrity": "sha512-+SqNqFbwTm/0DC18KYzIsMTnEWpLwJsiasW/O17la4iDRRIO9uaHbvKiAS3AHgTiuuWerK/brj4O6MYZkei9xg==", 913 | "requires": { 914 | "async-limiter": "^1.0.0" 915 | } 916 | }, 917 | "wx-server-sdk": { 918 | "version": "1.5.5", 919 | "resolved": "https://registry.npmjs.org/wx-server-sdk/-/wx-server-sdk-1.5.5.tgz", 920 | "integrity": "sha512-UhJWoFwnMQYmpr2PL2wMRTn4cGUXgbb73yvmbPE4VVGI5rrrzA1nw/a4MfQNOwL9KxlMv8wME5LaClFXepclYw==", 921 | "requires": { 922 | "protobufjs": "6.8.8", 923 | "tcb-admin-node": "1.16.3", 924 | "tslib": "^1.9.3" 925 | } 926 | }, 927 | "xml2js": { 928 | "version": "0.4.22", 929 | "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.22.tgz", 930 | "integrity": "sha512-MWTbxAQqclRSTnehWWe5nMKzI3VmJ8ltiJEco8akcC6j3miOhjjfzKum5sId+CWhfxdOs/1xauYr8/ZDBtQiRw==", 931 | "requires": { 932 | "sax": ">=0.6.0", 933 | "util.promisify": "~1.0.0", 934 | "xmlbuilder": "~11.0.0" 935 | } 936 | }, 937 | "xmlbuilder": { 938 | "version": "11.0.1", 939 | "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", 940 | "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" 941 | } 942 | } 943 | } 944 | -------------------------------------------------------------------------------- /cloudfunctions/douban/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "movielist", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "dependencies": { 12 | "cheerio": "^1.0.0-rc.3", 13 | "request": "^2.88.0", 14 | "request-promise": "^4.2.5", 15 | "tcb-router": "^1.1.2", 16 | "wx-server-sdk": "latest" 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /ercode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dunizb/what-to-see-wxapp/546271c470afae608166b0e41401ff92685da00d/ercode.png -------------------------------------------------------------------------------- /miniprogram/app.js: -------------------------------------------------------------------------------- 1 | //app.js 2 | App({ 3 | onLaunch: function () { 4 | 5 | if (!wx.cloud) { 6 | console.error('请使用 2.2.3 或以上的基础库以使用云能力') 7 | } else { 8 | wx.cloud.init({ 9 | // env 参数说明: 10 | // env 参数决定接下来小程序发起的云开发调用(wx.cloud.xxx)会默认请求到哪个云环境的资源 11 | // 此处请填入环境 ID, 环境 ID 可打开云控制台查看 12 | // 如不填则使用默认环境(第一个创建的环境) 13 | // env: 'my-env-id', 14 | traceUser: true, 15 | }) 16 | } 17 | 18 | this.globalData = {} 19 | } 20 | }) 21 | -------------------------------------------------------------------------------- /miniprogram/app.json: -------------------------------------------------------------------------------- 1 | { 2 | "pages": [ 3 | "pages/movie/movie", 4 | "pages/tv/tv", 5 | "pages/detail/detail", 6 | "pages/local/local", 7 | "pages/local/detail/detail" 8 | ], 9 | "tabBar": { 10 | "color": "#000000", 11 | "selectedColor": "#d81e06", 12 | "list": [ 13 | { 14 | "pagePath": "pages/movie/movie", 15 | "text": "电影", 16 | "iconPath": "images/movie.png", 17 | "selectedIconPath": "images/movie-selected.png" 18 | }, 19 | { 20 | "pagePath": "pages/tv/tv", 21 | "text": "电视", 22 | "iconPath": "images/tv.png", 23 | "selectedIconPath": "images/tv-selected.png" 24 | }, 25 | { 26 | "pagePath": "pages/local/local", 27 | "text": "本地好看", 28 | "iconPath": "images/local.png", 29 | "selectedIconPath": "images/local-selected.png" 30 | } 31 | ] 32 | }, 33 | "networkTimeout": { 34 | "request": 10000, 35 | "downloadFile": 10000 36 | }, 37 | "permission": { 38 | "scope.userLocation": { 39 | "desc": "你的位置信息将用于小程序位置接口的效果展示" 40 | } 41 | }, 42 | "sitemapLocation": "sitemap.json", 43 | "style": "v2" 44 | } -------------------------------------------------------------------------------- /miniprogram/app.wxss: -------------------------------------------------------------------------------- 1 | @import './style/common.wxss' -------------------------------------------------------------------------------- /miniprogram/components/text-ellipsis/index.js: -------------------------------------------------------------------------------- 1 | // src/components/text-ellipsis/index.js 2 | Component({ 3 | externalClasses: ['custom-class'], 4 | options: { 5 | addGlobalClass: true, 6 | }, 7 | /** 8 | * 组件的属性列表 9 | */ 10 | properties: { 11 | clamp: { 12 | type: Number, 13 | value: 1 14 | } 15 | }, 16 | 17 | /** 18 | * 组件的初始数据 19 | */ 20 | data: { 21 | 22 | }, 23 | 24 | /** 25 | * 组件的方法列表 26 | */ 27 | methods: { 28 | 29 | } 30 | }) 31 | -------------------------------------------------------------------------------- /miniprogram/components/text-ellipsis/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true, 3 | "usingComponents": {} 4 | } -------------------------------------------------------------------------------- /miniprogram/components/text-ellipsis/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /miniprogram/components/text-ellipsis/index.wxss: -------------------------------------------------------------------------------- 1 | .pps-text-ellipsis { 2 | word-break: break-all; 3 | overflow: hidden; 4 | display: block; 5 | white-space: nowrap; 6 | text-overflow:ellipsis; 7 | } 8 | .pps-text-ellipsis-multi-line { 9 | display: -webkit-box; 10 | -webkit-box-orient: vertical; 11 | overflow: hidden; 12 | } -------------------------------------------------------------------------------- /miniprogram/images/404.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dunizb/what-to-see-wxapp/546271c470afae608166b0e41401ff92685da00d/miniprogram/images/404.png -------------------------------------------------------------------------------- /miniprogram/images/local-selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dunizb/what-to-see-wxapp/546271c470afae608166b0e41401ff92685da00d/miniprogram/images/local-selected.png -------------------------------------------------------------------------------- /miniprogram/images/local.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dunizb/what-to-see-wxapp/546271c470afae608166b0e41401ff92685da00d/miniprogram/images/local.png -------------------------------------------------------------------------------- /miniprogram/images/movie-selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dunizb/what-to-see-wxapp/546271c470afae608166b0e41401ff92685da00d/miniprogram/images/movie-selected.png -------------------------------------------------------------------------------- /miniprogram/images/movie.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dunizb/what-to-see-wxapp/546271c470afae608166b0e41401ff92685da00d/miniprogram/images/movie.png -------------------------------------------------------------------------------- /miniprogram/images/tv-selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dunizb/what-to-see-wxapp/546271c470afae608166b0e41401ff92685da00d/miniprogram/images/tv-selected.png -------------------------------------------------------------------------------- /miniprogram/images/tv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dunizb/what-to-see-wxapp/546271c470afae608166b0e41401ff92685da00d/miniprogram/images/tv.png -------------------------------------------------------------------------------- /miniprogram/images/yanchu-selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dunizb/what-to-see-wxapp/546271c470afae608166b0e41401ff92685da00d/miniprogram/images/yanchu-selected.png -------------------------------------------------------------------------------- /miniprogram/images/yanchu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dunizb/what-to-see-wxapp/546271c470afae608166b0e41401ff92685da00d/miniprogram/images/yanchu.png -------------------------------------------------------------------------------- /miniprogram/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "miniprogram", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@vant/weapp": { 8 | "version": "1.0.0-beta.4", 9 | "resolved": "https://registry.npmjs.org/@vant/weapp/-/weapp-1.0.0-beta.4.tgz", 10 | "integrity": "sha512-gYWv3BV12y2Lo8TbKy6BptsON1SvRsMuNpLD7ZhrbQI2OZMIVFt/usDEq30+Q14J9vb4CiBYERQMla4X/WV5Ug==" 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /miniprogram/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "what-to-see-wxapp", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "app.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC", 12 | "dependencies": { 13 | "@vant/weapp": "^1.0.0-beta.4" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /miniprogram/pages/detail/detail.js: -------------------------------------------------------------------------------- 1 | // miniprogram/pages/detail/detail.js 2 | Page({ 3 | 4 | /** 5 | * 页面的初始数据 6 | */ 7 | data: { 8 | info: null, 9 | cover: '', 10 | loading: true 11 | }, 12 | 13 | /** 14 | * 生命周期函数--监听页面加载 15 | */ 16 | onLoad: function (options) { 17 | const { id } = options 18 | this.getDetail(id) 19 | this.setData({ 20 | cover: wx.getStorageSync('cover') 21 | }) 22 | }, 23 | getDetail(id) { 24 | wx.showLoading({ title: '加载中' }) 25 | wx.cloud.callFunction({ 26 | name: 'douban', 27 | data: { 28 | $url: 'detail', 29 | id 30 | } 31 | }).then(res => { 32 | console.log('res', res.result) 33 | const result = res.result 34 | this.setData({ 35 | info: result.subject, 36 | loading: false 37 | }, () => { 38 | this.updateNavigationBar(result.subject.title) 39 | wx.hideLoading() 40 | }) 41 | }).catch(err => { 42 | console.log(err) 43 | wx.showToast({ 44 | title: '出错了', 45 | icon: 'none' 46 | }) 47 | wx.hideLoading() 48 | }) 49 | }, 50 | updateNavigationBar(title) { 51 | wx.setNavigationBarTitle({ title }) 52 | }, 53 | 54 | onBack() { 55 | wx.navigateBack() 56 | }, 57 | 58 | /** 59 | * 生命周期函数--监听页面初次渲染完成 60 | */ 61 | onReady: function () { 62 | 63 | }, 64 | 65 | /** 66 | * 生命周期函数--监听页面显示 67 | */ 68 | onShow: function () { 69 | 70 | }, 71 | 72 | /** 73 | * 生命周期函数--监听页面隐藏 74 | */ 75 | onHide: function () { 76 | 77 | }, 78 | 79 | /** 80 | * 生命周期函数--监听页面卸载 81 | */ 82 | onUnload: function () { 83 | 84 | }, 85 | 86 | /** 87 | * 页面相关事件处理函数--监听用户下拉动作 88 | */ 89 | onPullDownRefresh: function () { 90 | 91 | }, 92 | 93 | /** 94 | * 页面上拉触底事件的处理函数 95 | */ 96 | onReachBottom: function () { 97 | 98 | }, 99 | 100 | /** 101 | * 用户点击右上角分享 102 | */ 103 | onShareAppMessage: function () { 104 | 105 | } 106 | }) -------------------------------------------------------------------------------- /miniprogram/pages/detail/detail.json: -------------------------------------------------------------------------------- 1 | { 2 | "usingComponents": { 3 | "van-button": "@vant/weapp/button", 4 | "van-skeleton": "@vant/weapp/skeleton", 5 | "van-divider": "@vant/weapp/divider" 6 | }, 7 | "backgroundColor": "#000000cc", 8 | "backgroundTextStyle": "light" 9 | } -------------------------------------------------------------------------------- /miniprogram/pages/detail/detail.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | {{ info.rate }} 7 | 8 | 9 | 10 | {{info.title}} 11 | 类型:{{wxs.convert(info.types)}} 12 | 导演:{{wxs.convert(info.actors)}} 13 | 演员:{{wxs.convert(info.directors)}} 14 | 国家:{{info.region}} 15 | 时长:{{info.duration}} 16 | 年份:{{info.release_year}} 17 | 18 | 19 | 20 | 剧情简介 21 | {{info.plot}} 22 | 23 | 24 | 短评 25 | 26 | {{info.short_comment.content}} 27 | --{{info.short_comment.author}} 28 | 29 | 30 | 31 | 32 | 返 回 33 | 34 | 35 | 36 | 37 | 38 | module.exports = { 39 | convert: function(arr) { 40 | if(arr && arr.length > 0) { 41 | return arr.join(' / ') 42 | } 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /miniprogram/pages/detail/detail.wxss: -------------------------------------------------------------------------------- 1 | page { 2 | background-color: rgba(0,0,0,.8); 3 | color: #fff; 4 | font-size: 28rpx; 5 | padding-bottom: 140rpx; 6 | } 7 | .page-pd { 8 | padding: 40rpx 40rpx; 9 | } 10 | .header { 11 | display: flex; 12 | padding: 40rpx; 13 | background-repeat: no-repeat; 14 | background-size:cover; 15 | position: relative; 16 | } 17 | .header .mask { 18 | position: absolute; 19 | top: 0; 20 | left: 0; 21 | right: 0; 22 | bottom: 0; 23 | background-color: rgba(0,0,0,.6); 24 | } 25 | .header .cover-img { 26 | margin-right: 20rpx; 27 | position: relative; 28 | z-index: 10; 29 | } 30 | .header .cover-img .cover { 31 | width: 230rpx; 32 | height: 324rpx; 33 | } 34 | .header .cover-img .rate { 35 | position: absolute; 36 | top: -16rpx; 37 | right: -16rpx; 38 | background-color: #d81e06; 39 | font-size: 20rpx; 40 | width: 30rpx; 41 | height: 30rpx; 42 | border-radius: 50%; 43 | padding: 4rpx; 44 | } 45 | .header .infos{ 46 | width: 63%; 47 | z-index: 10; 48 | } 49 | .header .infos .title { 50 | display: block; 51 | width: 95%; 52 | font-size: 34rpx; 53 | text-overflow: ellipsis; 54 | white-space: nowrap; 55 | overflow: hidden; 56 | font-weight: 700; 57 | margin-bottom: 10rpx; 58 | } 59 | .infos .tag { 60 | font-size: 28rpx; 61 | min-height: 40rpx; 62 | display: -webkit-box; 63 | text-overflow: ellipsis; 64 | white-space: nowrap; 65 | overflow: hidden; 66 | -webkit-line-clamp: 3; 67 | -webkit-box-orient: vertical; 68 | line-height: 46rpx; 69 | } 70 | .plot { 71 | padding: 0 40rpx; 72 | } 73 | .plot .plot-content { 74 | line-height: 44rpx; 75 | margin-bottom: 40rpx; 76 | /* display: -webkit-box; 77 | -webkit-box-orient: vertical; 78 | -webkit-line-clamp: 3; 79 | text-overflow: ellipsis; 80 | word-wrap: break-word; 81 | word-break: break-all; 82 | overflow: hidden; */ 83 | } 84 | .plot .plot-content .author { 85 | color: #ccc; 86 | font-weight: bold; 87 | } 88 | /* .plot .plot-title::after{ 89 | content: ''; 90 | position: absolute; 91 | right: 16rpx; 92 | top: 24rpx; 93 | width: 35%; 94 | height: 1rpx; 95 | background-color: #ccc; 96 | } 97 | .plot .plot-title::before{ 98 | content: ''; 99 | position: absolute; 100 | left: 16rpx; 101 | top: 24rpx; 102 | width: 35%; 103 | height: 1rpx; 104 | background-color: #ccc; 105 | } */ 106 | .plot .plot-content{ 107 | 108 | } 109 | .back-button { 110 | position: fixed; 111 | bottom: 40rpx; 112 | left: 50%; 113 | transform: translateX(-50%); 114 | } -------------------------------------------------------------------------------- /miniprogram/pages/local/detail/detail.js: -------------------------------------------------------------------------------- 1 | // miniprogram/pages/local/detail/detail.js 2 | Page({ 3 | 4 | /** 5 | * 页面的初始数据 6 | */ 7 | data: { 8 | detail: null, 9 | name: '', 10 | loading: true 11 | }, 12 | 13 | /** 14 | * 生命周期函数--监听页面加载 15 | */ 16 | onLoad: function ({ id, name }) { 17 | console.log(id, name) 18 | this.setData({ name }) 19 | this.loadData(id, name) 20 | }, 21 | 22 | loadData(id, name) { 23 | wx.showLoading({ title: '加载中' }) 24 | wx.cloud.callFunction({ 25 | name: 'damai', 26 | data: { 27 | $url: 'detail', 28 | id, 29 | name 30 | } 31 | }).then(res => { 32 | console.log('res', res) 33 | this.setData({ 34 | detail: res, 35 | loading: false 36 | }, () => { 37 | wx.hideLoading() 38 | }) 39 | }).catch(err => { 40 | console.log(err) 41 | wx.showToast({ 42 | title: '出错了', 43 | icon: 'none' 44 | }) 45 | wx.hideLoading() 46 | }) 47 | }, 48 | 49 | /** 50 | * 生命周期函数--监听页面初次渲染完成 51 | */ 52 | onReady: function () { 53 | 54 | }, 55 | 56 | /** 57 | * 生命周期函数--监听页面显示 58 | */ 59 | onShow: function () { 60 | 61 | }, 62 | 63 | /** 64 | * 生命周期函数--监听页面隐藏 65 | */ 66 | onHide: function () { 67 | 68 | }, 69 | 70 | /** 71 | * 生命周期函数--监听页面卸载 72 | */ 73 | onUnload: function () { 74 | 75 | }, 76 | 77 | /** 78 | * 页面相关事件处理函数--监听用户下拉动作 79 | */ 80 | onPullDownRefresh: function () { 81 | 82 | }, 83 | 84 | /** 85 | * 页面上拉触底事件的处理函数 86 | */ 87 | onReachBottom: function () { 88 | 89 | }, 90 | 91 | /** 92 | * 用户点击右上角分享 93 | */ 94 | onShareAppMessage: function () { 95 | 96 | } 97 | }) -------------------------------------------------------------------------------- /miniprogram/pages/local/detail/detail.json: -------------------------------------------------------------------------------- 1 | { 2 | "usingComponents": { 3 | "van-skeleton": "@vant/weapp/skeleton" 4 | }, 5 | "navigationBarBackgroundColor": "#d81e06", 6 | "navigationBarTextStyle": "white", 7 | "navigationBarTitleText": "活动详情", 8 | "backgroundColor": "#fff", 9 | "backgroundTextStyle": "dark" 10 | } -------------------------------------------------------------------------------- /miniprogram/pages/local/detail/detail.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | {{name}} 4 | {{detail}} 5 | 6 | -------------------------------------------------------------------------------- /miniprogram/pages/local/detail/detail.wxss: -------------------------------------------------------------------------------- 1 | .container { 2 | padding: 40rpx; 3 | } 4 | .name { 5 | font-size: 32rpx; 6 | font-weight: 700; 7 | text-align: center; 8 | margin-bottom: 40rpx; 9 | } -------------------------------------------------------------------------------- /miniprogram/pages/local/local.js: -------------------------------------------------------------------------------- 1 | import QQMapWX from '../../scripts/qqmap-wx-jssdk.min.js' 2 | 3 | let qqmapsdk; 4 | Page({ 5 | 6 | /** 7 | * 页面的初始数据 8 | */ 9 | data: { 10 | selectedMusicConcert: true, 11 | selectedSings: false, 12 | selectedDisplay: false, 13 | dataList: null, 14 | showPagerLoaidng: false, 15 | city: '', 16 | category: '音乐会', 17 | cityNull: false, 18 | pager: { 19 | pageSize: 30, 20 | currPage: 1, 21 | totalPage: 0 22 | }, 23 | gonep: false // 分页数据到底了 24 | }, 25 | 26 | /** 27 | * 生命周期函数--监听页面加载 28 | */ 29 | onLoad: function (options) { 30 | // 实例化API核心类 31 | qqmapsdk = new QQMapWX({ 32 | key: 'OSNBZ-IRKC4-2P3UD-XSDOS-LHQ57-34FKF' 33 | }); 34 | this.checkAuth((latitude, longitude) => { 35 | // https://lbs.qq.com/qqmap_wx_jssdk/method-reverseGeocoder.html 36 | qqmapsdk.reverseGeocoder({ 37 | sig: 'bl8MP21e6Tqz2GuEf34i9TW6842f0cdg', 38 | location: {latitude, longitude}, 39 | success: res => { 40 | let city = res.result.ad_info.city 41 | if (city.endsWith('市')) { 42 | city = city.substring(0, city.length - 1) 43 | } 44 | this.data.city = city 45 | wx.setStorageSync('loca_city', city) 46 | this.loadDataList() 47 | this.setBar() 48 | }, 49 | fail(err) { 50 | console.log(err) 51 | wx.showToast({ 52 | title: '获取城市失败', 53 | icon: 'none' 54 | }) 55 | }, 56 | complete() { 57 | } 58 | }) 59 | }) 60 | }, 61 | 62 | setBar() { 63 | const city = wx.getStorage({ 64 | key: 'loca_city', 65 | success: res => { 66 | this.data.city = res.data 67 | this.loadDataList() 68 | wx.setNavigationBarTitle({ title: `本地好看·${res.data}` }) 69 | wx.setTabBarItem({ 70 | index: 2, 71 | text: `${res.data}好看` 72 | }) 73 | }, 74 | }) 75 | }, 76 | 77 | checkAuth(callback) { 78 | wx.getSetting({ 79 | success: res => { 80 | if (!res.authSetting['scope.userLocation']) { 81 | wx.authorize({ 82 | scope: 'scope.userLocation', 83 | success() { 84 | wx.getLocation({ 85 | type: 'wgs84', // wgs84 返回 gps 坐标,gcj02 返回可用于 wx.openLocation 的坐标 86 | success(res) { 87 | callback(res.latitude, res.longitude) 88 | } 89 | }) 90 | } 91 | }) 92 | } else { 93 | this.setBar() 94 | } 95 | } 96 | }) 97 | }, 98 | 99 | handleClick({ currentTarget: {id} }) { 100 | const category = this.data.category 101 | if (category !== id) { 102 | this.data.dataList = null 103 | } 104 | if (id === 'musicConcert') { 105 | this.data.category = '音乐会' 106 | } else if (id === 'sings') { 107 | this.data.category = '演唱会' 108 | } else { 109 | this.data.category = '展览休闲' 110 | } 111 | this.setData({ 112 | selectedMusicConcert: id === 'musicConcert', 113 | selectedSings: id === 'sings', 114 | selectedDisplay: id === 'display' 115 | }) 116 | 117 | this.loadDataList() 118 | }, 119 | 120 | loadDataList() { 121 | wx.showLoading({ title: '加载中' }) 122 | const { city, category, pager } = this.data 123 | wx.cloud.callFunction({ 124 | name: 'damai', 125 | data: { 126 | $url: 'list', 127 | city, 128 | category, 129 | pageSize: pager.pageSize, 130 | currPage: pager.currPage 131 | } 132 | }).then(res => { 133 | console.log('res', res) 134 | const result = res.result 135 | if (result) { 136 | this.data.pager.totalPage = result.totalPage 137 | let dataList = this.data.dataList || [] 138 | dataList = dataList.concat(result.list) 139 | this.setData({ 140 | dataList, 141 | city: this.data.city, 142 | category: this.data.category 143 | }, () => { 144 | wx.hideLoading() 145 | }) 146 | } else { 147 | this.setData({ cityNull: true }) 148 | } 149 | wx.hideLoading() 150 | }).catch(err => { 151 | console.log(err) 152 | wx.showToast({ 153 | title: '出错了', 154 | icon: 'none' 155 | }) 156 | wx.hideLoading() 157 | }) 158 | }, 159 | 160 | showDetail({ currentTarget: {id} }) { 161 | const item = this.data.dataList.find(v => v.projectid == id) 162 | wx.navigateTo({ 163 | url: `./detail/detail?id=${id}&name=${item.name}` 164 | }) 165 | }, 166 | 167 | /** 168 | * 生命周期函数--监听页面初次渲染完成 169 | */ 170 | onReady: function () { 171 | 172 | }, 173 | 174 | /** 175 | * 生命周期函数--监听页面显示 176 | */ 177 | onShow: function () { 178 | 179 | }, 180 | 181 | /** 182 | * 生命周期函数--监听页面隐藏 183 | */ 184 | onHide: function () { 185 | 186 | }, 187 | 188 | /** 189 | * 生命周期函数--监听页面卸载 190 | */ 191 | onUnload: function () { 192 | 193 | }, 194 | 195 | /** 196 | * 页面相关事件处理函数--监听用户下拉动作 197 | */ 198 | onPullDownRefresh: function () { 199 | const { pager, dataList } = this.data 200 | pager.currPage = 1 201 | this.setData({ 202 | showPagerLoaidng: true, 203 | dataList: null 204 | }) 205 | wx.setStorage({ 206 | key: 'datalist', 207 | data: null, 208 | }) 209 | this.loadDataList(); 210 | }, 211 | 212 | /** 213 | * 页面上拉触底事件的处理函数 214 | */ 215 | onReachBottom: function () { 216 | const { pager, dataList } = this.data 217 | if (pager.currPage < pager.totalPage) { 218 | pager.currPage++ 219 | this.setData({ showPagerLoaidng: true }) 220 | this.loadDataList() 221 | } else { 222 | this.setData({ gonep: true }) 223 | } 224 | }, 225 | 226 | /** 227 | * 用户点击右上角分享 228 | */ 229 | onShareAppMessage: function () { 230 | 231 | } 232 | }) -------------------------------------------------------------------------------- /miniprogram/pages/local/local.json: -------------------------------------------------------------------------------- 1 | { 2 | "usingComponents": { 3 | "van-tag": "@vant/weapp/tag", 4 | "van-loading": "@vant/weapp/loading", 5 | "text-elli": "../../../components/text-ellipsis", 6 | "van-icon": "@vant/weapp/icon", 7 | "van-transition": "@vant/weapp/transition" 8 | }, 9 | "navigationBarBackgroundColor": "#d81e06", 10 | "navigationBarTextStyle": "white", 11 | "navigationBarTitleText": "本地好看", 12 | "backgroundColor": "#fff", 13 | "backgroundTextStyle": "dark", 14 | "enablePullDownRefresh": true 15 | } -------------------------------------------------------------------------------- /miniprogram/pages/local/local.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 音乐会 5 | 演唱会 6 | 展览休闲 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | {{item.name}} 17 | 18 | 时间:{{item.showtime}} 19 | 地点:{{item.venue}} 20 | 21 | 22 | 23 | {{item.showstatus}} 24 | 25 | ¥{{item.price_str}} 26 | 27 | 28 | 29 | 30 | 抱歉!{{city}}还没有{{category}}活动... 31 | 32 | 33 | 34 | 35 | 拼了命的加载中... 36 | 37 | 到底了,没有了! 38 | 39 | 40 | -------------------------------------------------------------------------------- /miniprogram/pages/local/local.wxss: -------------------------------------------------------------------------------- 1 | .category .cate-button { 2 | background: #fff; 3 | color: #d81e06; 4 | padding: 8rpx 0; 5 | text-align: center; 6 | min-width: 200rpx; 7 | border: 1rpx solid #d81e06; 8 | } 9 | .category .cate-button.music-concert { 10 | border-radius: 6rpx 0 0 6rpx; 11 | } 12 | .category .cate-button.sings { 13 | border-left-width: 0; 14 | border-right-width: 0; 15 | } 16 | .category .cate-button.display { 17 | border-radius: 0 6rpx 6rpx 0; 18 | } 19 | .category .cate-button.selected { 20 | background: #d81e06; 21 | color: #fff; 22 | } 23 | 24 | .item-wrapper { 25 | display: flex; 26 | justify-content: space-between; 27 | margin-bottom: 20rpx; 28 | } 29 | .item-wrapper .cover-wrapper{ 30 | margin-right: 20rpx; 31 | } 32 | .item-wrapper .cover-wrapper .cover{ 33 | width: 270rpx; 34 | height: 370rpx; 35 | } 36 | .item-wrapper .infos { 37 | text-align: left; 38 | } 39 | .item-wrapper .infos .other{ 40 | font-size: 28rpx; 41 | color: #666; 42 | } 43 | .item-wrapper .infos .title-elli{ 44 | margin-bottom: 40rpx; 45 | color: #111; 46 | font-weight: 700; 47 | font-size: 32rpx; 48 | } 49 | .item-wrapper .infos .price{ 50 | color: #ff5200; 51 | margin-top: 20rpx; 52 | } 53 | 54 | .city-null { 55 | text-align: center; 56 | width: 480rpx; 57 | margin: 100rpx auto; 58 | color: #8a8a8a; 59 | } 60 | .city-null .image-404{ 61 | width: 480rpx; 62 | } 63 | -------------------------------------------------------------------------------- /miniprogram/pages/movie/movie.js: -------------------------------------------------------------------------------- 1 | import common from '../../scripts/common.js' 2 | Page({ 3 | 4 | /** 5 | * 页面的初始数据 6 | */ 7 | data: { 8 | selectedHot: true, 9 | selectedNew: false, 10 | dataList: [], 11 | id: 'hot', 12 | type: 'movie' 13 | }, 14 | ...common.methods, 15 | 16 | /** 17 | * 生命周期函数--监听页面加载 18 | */ 19 | onLoad: function (options) { 20 | this.loadData() 21 | }, 22 | onTag({ currentTarget: {id} }) { 23 | if (this.data.id !== id || this.data.type == 'tv') { 24 | this.data.dataList = [] 25 | } 26 | this.data.id = id 27 | this.loadData() 28 | }, 29 | loadData() { 30 | let {id, type} = this.data 31 | this.setData({ 32 | selectedHot: id === 'hot', 33 | selectedNew: id === 'new' 34 | }) 35 | wx.showLoading({ title: '加载中' }) 36 | wx.cloud.callFunction({ 37 | name: 'douban', 38 | data: { 39 | $url: 'list', 40 | type, 41 | tag: id == 'hot' ? '热门' : '最新' 42 | } 43 | }).then(res => { 44 | const result = res.result 45 | this.setData({ 46 | dataList: result.subjects 47 | }, () => { 48 | wx.hideLoading() 49 | }) 50 | }).catch(err => { 51 | console.log(err) 52 | wx.showToast({ 53 | title: '出错了', 54 | icon: 'none' 55 | }) 56 | wx.hideLoading() 57 | }) 58 | }, 59 | /** 60 | * 生命周期函数--监听页面初次渲染完成 61 | */ 62 | onReady: function () { 63 | 64 | }, 65 | 66 | /** 67 | * 生命周期函数--监听页面显示 68 | */ 69 | onShow: function () { 70 | 71 | }, 72 | 73 | /** 74 | * 生命周期函数--监听页面隐藏 75 | */ 76 | onHide: function () { 77 | 78 | }, 79 | 80 | /** 81 | * 生命周期函数--监听页面卸载 82 | */ 83 | onUnload: function () { 84 | 85 | }, 86 | 87 | /** 88 | * 页面相关事件处理函数--监听用户下拉动作 89 | */ 90 | onPullDownRefresh: function () { 91 | }, 92 | 93 | /** 94 | * 页面上拉触底事件的处理函数 95 | */ 96 | onReachBottom: function () { 97 | 98 | }, 99 | 100 | /** 101 | * 用户点击右上角分享 102 | */ 103 | onShareAppMessage: function () { 104 | 105 | } 106 | }) -------------------------------------------------------------------------------- /miniprogram/pages/movie/movie.json: -------------------------------------------------------------------------------- 1 | { 2 | "usingComponents": { 3 | "van-tag": "@vant/weapp/tag", 4 | "van-transition": "@vant/weapp/transition" 5 | }, 6 | "navigationBarBackgroundColor": "#07c160", 7 | "navigationBarTextStyle": "white", 8 | "navigationBarTitleText": "好看电影", 9 | "backgroundColor": "#fff", 10 | "backgroundTextStyle": "dark", 11 | "enablePullDownRefresh": false 12 | } -------------------------------------------------------------------------------- /miniprogram/pages/movie/movie.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 最近热门 Top50 5 | 最新 Top50 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | {{item.rate}} 14 | 15 | 16 | 17 | {{item.title}} 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /miniprogram/pages/movie/movie.wxss: -------------------------------------------------------------------------------- 1 | .category .cate-button { 2 | background: #fff; 3 | color: #07c160; 4 | padding: 8rpx 0; 5 | text-align: center; 6 | min-width: 300rpx; 7 | border: 1rpx solid #07c160; 8 | } 9 | .category .cate-button.hot { 10 | border-radius: 6rpx 0 0 6rpx; 11 | } 12 | .category .cate-button.new { 13 | border-radius: 0 6rpx 6rpx 0; 14 | } 15 | .category .cate-button.selected { 16 | background: #07c160; 17 | color: #fff; 18 | } 19 | -------------------------------------------------------------------------------- /miniprogram/pages/tv/tv.js: -------------------------------------------------------------------------------- 1 | import common from '../../scripts/common.js' 2 | Page({ 3 | 4 | /** 5 | * 页面的初始数据 6 | */ 7 | data: { 8 | selectedHot: true, 9 | selectedZongYi: false, 10 | selectedJiLu: false, 11 | id: 'hot', 12 | tag: '热门', 13 | type: 'tv', 14 | isLoadMore: false, 15 | dataList: [], 16 | showPagerLoaidng: false, 17 | pager: { 18 | start: 0, 19 | limit: 50 20 | }, 21 | gonep: false 22 | }, 23 | ...common.methods, 24 | 25 | /** 26 | * 生命周期函数--监听页面加载 27 | */ 28 | onLoad: function (options) { 29 | this.loadData() 30 | }, 31 | onTag({ currentTarget: { id } }) { 32 | if (this.data.id !== id || this.data.type == 'movie') { 33 | this.data.dataList = [] 34 | this.data.isLoadMore = false 35 | } 36 | this.data.id = id 37 | const { start, limit } = this.data.pager 38 | 39 | let tag = this.data.tag 40 | switch (id) { 41 | case 'hot': 42 | tag = '热门'; 43 | break; 44 | case 'jilu': 45 | tag = '纪录片'; 46 | break; 47 | case 'zongyi': 48 | tag = '综艺'; 49 | break; 50 | default: 51 | console.log('why?') 52 | break; 53 | } 54 | this.data.tag = tag 55 | this.setData({ 56 | selectedHot: id === 'hot', 57 | selectedJiLu: id === 'jilu', 58 | selectedZongYi: id === 'zongyi' 59 | }) 60 | this.loadData() 61 | }, 62 | 63 | loadData() { 64 | const { type, tag, isLoadMore, pager } = this.data 65 | if (!isLoadMore) { 66 | wx.showLoading({ title: '加载中' }) 67 | } 68 | wx.cloud.callFunction({ 69 | name: 'douban', 70 | data: { 71 | $url: 'list', 72 | type, 73 | tag, 74 | start: pager.start, 75 | limit: pager.limit 76 | } 77 | }).then(res => { 78 | const result = res.result 79 | if (pager.start > 0 && result.subjects.length == 0) { 80 | this.setData({ gonep: true }) 81 | wx.hideLoading() 82 | } else { 83 | this.data.dataList = this.data.dataList.concat(result.subjects) 84 | this.setData({ 85 | dataList: this.data.dataList, 86 | showPagerLoaidng: false 87 | }, () => { 88 | wx.hideLoading() 89 | wx.stopPullDownRefresh() 90 | }) 91 | } 92 | }).catch(err => { 93 | console.log(err) 94 | wx.showToast({ 95 | title: '出错了', 96 | icon: 'none' 97 | }) 98 | wx.hideLoading() 99 | }) 100 | }, 101 | 102 | /** 103 | * 生命周期函数--监听页面初次渲染完成 104 | */ 105 | onReady: function () { 106 | 107 | }, 108 | 109 | /** 110 | * 生命周期函数--监听页面显示 111 | */ 112 | onShow: function () { 113 | 114 | }, 115 | 116 | /** 117 | * 生命周期函数--监听页面隐藏 118 | */ 119 | onHide: function () { 120 | 121 | }, 122 | 123 | /** 124 | * 生命周期函数--监听页面卸载 125 | */ 126 | onUnload: function () { 127 | 128 | }, 129 | 130 | /** 131 | * 页面相关事件处理函数--监听用户下拉动作 132 | */ 133 | onPullDownRefresh: function () { 134 | const { pager, dataList } = this.data 135 | pager.start = 0 136 | this.data.isLoadMore = false 137 | this.setData({ 138 | showPagerLoaidng: true, 139 | dataList: [] 140 | }) 141 | this.loadData(); 142 | }, 143 | 144 | /** 145 | * 页面上拉触底事件的处理函数 146 | */ 147 | onReachBottom: function () { 148 | const { pager, dataList } = this.data 149 | pager.start = dataList.length + 1 150 | this.data.isLoadMore = true 151 | this.setData({ showPagerLoaidng: true }) 152 | this.loadData(); 153 | }, 154 | 155 | /** 156 | * 用户点击右上角分享 157 | */ 158 | onShareAppMessage: function () { 159 | 160 | } 161 | }) -------------------------------------------------------------------------------- /miniprogram/pages/tv/tv.json: -------------------------------------------------------------------------------- 1 | { 2 | "usingComponents": { 3 | "van-tag": "@vant/weapp/tag", 4 | "van-loading": "@vant/weapp/loading", 5 | "van-transition": "@vant/weapp/transition" 6 | }, 7 | "navigationBarBackgroundColor": "#1296db", 8 | "navigationBarTextStyle": "white", 9 | "navigationBarTitleText": "好看电视", 10 | "backgroundColor": "#fff", 11 | "backgroundTextStyle": "dark", 12 | "enablePullDownRefresh": true 13 | } -------------------------------------------------------------------------------- /miniprogram/pages/tv/tv.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 最新热门 5 | 综艺 6 | 纪录片 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | {{item.rate}} 15 | 16 | 17 | 18 | {{item.title}} 19 | 20 | 21 | 22 | 23 | 24 | 拼了命的加载中... 25 | 26 | 到底了,没有了! 27 | 28 | -------------------------------------------------------------------------------- /miniprogram/pages/tv/tv.wxss: -------------------------------------------------------------------------------- 1 | .category .cate-button { 2 | background: #fff; 3 | color: #1296db; 4 | padding: 8rpx 0; 5 | text-align: center; 6 | min-width: 200rpx; 7 | border: 1rpx solid #1296db; 8 | } 9 | .category .cate-button.hot { 10 | border-radius: 6rpx 0 0 6rpx; 11 | } 12 | .category .cate-button.zongyi { 13 | border-left-width: 0; 14 | border-right-width: 0; 15 | } 16 | .category .cate-button.jilu { 17 | border-radius: 0 6rpx 6rpx 0; 18 | } 19 | .category .cate-button.selected { 20 | background: #1296db; 21 | color: #fff; 22 | } -------------------------------------------------------------------------------- /miniprogram/scripts/common.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | methods: { 3 | getDetail(event) { 4 | console.log(event) 5 | const id = event.currentTarget.id 6 | const type = 'movie' 7 | const item = this.data.dataList.find(item => item.id === id) 8 | if(item) { 9 | wx.setStorageSync('cover', item.cover) 10 | wx.navigateTo({ 11 | url: `../detail/detail?id=${item.id}&type=${type}` 12 | }) 13 | } 14 | } 15 | } 16 | } -------------------------------------------------------------------------------- /miniprogram/scripts/qqmap-wx-jssdk.min.js: -------------------------------------------------------------------------------- 1 | var ERROR_CONF = { KEY_ERR: 311, KEY_ERR_MSG: 'key格式错误', PARAM_ERR: 310, PARAM_ERR_MSG: '请求参数信息有误', SYSTEM_ERR: 600, SYSTEM_ERR_MSG: '系统错误', WX_ERR_CODE: 1000, WX_OK_CODE: 200 }; var BASE_URL = 'https://apis.map.qq.com/ws/'; var URL_SEARCH = BASE_URL + 'place/v1/search'; var URL_SUGGESTION = BASE_URL + 'place/v1/suggestion'; var URL_GET_GEOCODER = BASE_URL + 'geocoder/v1/'; var URL_CITY_LIST = BASE_URL + 'district/v1/list'; var URL_AREA_LIST = BASE_URL + 'district/v1/getchildren'; var URL_DISTANCE = BASE_URL + 'distance/v1/'; var URL_DIRECTION = BASE_URL + 'direction/v1/'; var MODE = { driving: 'driving', transit: 'transit' }; var EARTH_RADIUS = 6378136.49; var Utils = { safeAdd(x, y) { var lsw = (x & 0xffff) + (y & 0xffff); var msw = (x >> 16) + (y >> 16) + (lsw >> 16); return (msw << 16) | (lsw & 0xffff) }, bitRotateLeft(num, cnt) { return (num << cnt) | (num >>> (32 - cnt)) }, md5cmn(q, a, b, x, s, t) { return this.safeAdd(this.bitRotateLeft(this.safeAdd(this.safeAdd(a, q), this.safeAdd(x, t)), s), b) }, md5ff(a, b, c, d, x, s, t) { return this.md5cmn((b & c) | (~b & d), a, b, x, s, t) }, md5gg(a, b, c, d, x, s, t) { return this.md5cmn((b & d) | (c & ~d), a, b, x, s, t) }, md5hh(a, b, c, d, x, s, t) { return this.md5cmn(b ^ c ^ d, a, b, x, s, t) }, md5ii(a, b, c, d, x, s, t) { return this.md5cmn(c ^ (b | ~d), a, b, x, s, t) }, binlMD5(x, len) { x[len >> 5] |= 0x80 << (len % 32); x[((len + 64) >>> 9 << 4) + 14] = len; var i; var olda; var oldb; var oldc; var oldd; var a = 1732584193; var b = -271733879; var c = -1732584194; var d = 271733878; for (i = 0; i < x.length; i += 16) { olda = a; oldb = b; oldc = c; oldd = d; a = this.md5ff(a, b, c, d, x[i], 7, -680876936); d = this.md5ff(d, a, b, c, x[i + 1], 12, -389564586); c = this.md5ff(c, d, a, b, x[i + 2], 17, 606105819); b = this.md5ff(b, c, d, a, x[i + 3], 22, -1044525330); a = this.md5ff(a, b, c, d, x[i + 4], 7, -176418897); d = this.md5ff(d, a, b, c, x[i + 5], 12, 1200080426); c = this.md5ff(c, d, a, b, x[i + 6], 17, -1473231341); b = this.md5ff(b, c, d, a, x[i + 7], 22, -45705983); a = this.md5ff(a, b, c, d, x[i + 8], 7, 1770035416); d = this.md5ff(d, a, b, c, x[i + 9], 12, -1958414417); c = this.md5ff(c, d, a, b, x[i + 10], 17, -42063); b = this.md5ff(b, c, d, a, x[i + 11], 22, -1990404162); a = this.md5ff(a, b, c, d, x[i + 12], 7, 1804603682); d = this.md5ff(d, a, b, c, x[i + 13], 12, -40341101); c = this.md5ff(c, d, a, b, x[i + 14], 17, -1502002290); b = this.md5ff(b, c, d, a, x[i + 15], 22, 1236535329); a = this.md5gg(a, b, c, d, x[i + 1], 5, -165796510); d = this.md5gg(d, a, b, c, x[i + 6], 9, -1069501632); c = this.md5gg(c, d, a, b, x[i + 11], 14, 643717713); b = this.md5gg(b, c, d, a, x[i], 20, -373897302); a = this.md5gg(a, b, c, d, x[i + 5], 5, -701558691); d = this.md5gg(d, a, b, c, x[i + 10], 9, 38016083); c = this.md5gg(c, d, a, b, x[i + 15], 14, -660478335); b = this.md5gg(b, c, d, a, x[i + 4], 20, -405537848); a = this.md5gg(a, b, c, d, x[i + 9], 5, 568446438); d = this.md5gg(d, a, b, c, x[i + 14], 9, -1019803690); c = this.md5gg(c, d, a, b, x[i + 3], 14, -187363961); b = this.md5gg(b, c, d, a, x[i + 8], 20, 1163531501); a = this.md5gg(a, b, c, d, x[i + 13], 5, -1444681467); d = this.md5gg(d, a, b, c, x[i + 2], 9, -51403784); c = this.md5gg(c, d, a, b, x[i + 7], 14, 1735328473); b = this.md5gg(b, c, d, a, x[i + 12], 20, -1926607734); a = this.md5hh(a, b, c, d, x[i + 5], 4, -378558); d = this.md5hh(d, a, b, c, x[i + 8], 11, -2022574463); c = this.md5hh(c, d, a, b, x[i + 11], 16, 1839030562); b = this.md5hh(b, c, d, a, x[i + 14], 23, -35309556); a = this.md5hh(a, b, c, d, x[i + 1], 4, -1530992060); d = this.md5hh(d, a, b, c, x[i + 4], 11, 1272893353); c = this.md5hh(c, d, a, b, x[i + 7], 16, -155497632); b = this.md5hh(b, c, d, a, x[i + 10], 23, -1094730640); a = this.md5hh(a, b, c, d, x[i + 13], 4, 681279174); d = this.md5hh(d, a, b, c, x[i], 11, -358537222); c = this.md5hh(c, d, a, b, x[i + 3], 16, -722521979); b = this.md5hh(b, c, d, a, x[i + 6], 23, 76029189); a = this.md5hh(a, b, c, d, x[i + 9], 4, -640364487); d = this.md5hh(d, a, b, c, x[i + 12], 11, -421815835); c = this.md5hh(c, d, a, b, x[i + 15], 16, 530742520); b = this.md5hh(b, c, d, a, x[i + 2], 23, -995338651); a = this.md5ii(a, b, c, d, x[i], 6, -198630844); d = this.md5ii(d, a, b, c, x[i + 7], 10, 1126891415); c = this.md5ii(c, d, a, b, x[i + 14], 15, -1416354905); b = this.md5ii(b, c, d, a, x[i + 5], 21, -57434055); a = this.md5ii(a, b, c, d, x[i + 12], 6, 1700485571); d = this.md5ii(d, a, b, c, x[i + 3], 10, -1894986606); c = this.md5ii(c, d, a, b, x[i + 10], 15, -1051523); b = this.md5ii(b, c, d, a, x[i + 1], 21, -2054922799); a = this.md5ii(a, b, c, d, x[i + 8], 6, 1873313359); d = this.md5ii(d, a, b, c, x[i + 15], 10, -30611744); c = this.md5ii(c, d, a, b, x[i + 6], 15, -1560198380); b = this.md5ii(b, c, d, a, x[i + 13], 21, 1309151649); a = this.md5ii(a, b, c, d, x[i + 4], 6, -145523070); d = this.md5ii(d, a, b, c, x[i + 11], 10, -1120210379); c = this.md5ii(c, d, a, b, x[i + 2], 15, 718787259); b = this.md5ii(b, c, d, a, x[i + 9], 21, -343485551); a = this.safeAdd(a, olda); b = this.safeAdd(b, oldb); c = this.safeAdd(c, oldc); d = this.safeAdd(d, oldd) } return [a, b, c, d] }, binl2rstr(input) { var i; var output = ''; var length32 = input.length * 32; for (i = 0; i < length32; i += 8) { output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xff) } return output }, rstr2binl(input) { var i; var output = []; output[(input.length >> 2) - 1] = undefined; for (i = 0; i < output.length; i += 1) { output[i] = 0 } var length8 = input.length * 8; for (i = 0; i < length8; i += 8) { output[i >> 5] |= (input.charCodeAt(i / 8) & 0xff) << (i % 32) } return output }, rstrMD5(s) { return this.binl2rstr(this.binlMD5(this.rstr2binl(s), s.length * 8)) }, rstrHMACMD5(key, data) { var i; var bkey = this.rstr2binl(key); var ipad = []; var opad = []; var hash; ipad[15] = opad[15] = undefined; if (bkey.length > 16) { bkey = this.binlMD5(bkey, key.length * 8) } for (i = 0; i < 16; i += 1) { ipad[i] = bkey[i] ^ 0x36363636; opad[i] = bkey[i] ^ 0x5c5c5c5c } hash = this.binlMD5(ipad.concat(this.rstr2binl(data)), 512 + data.length * 8); return this.binl2rstr(this.binlMD5(opad.concat(hash), 512 + 128)) }, rstr2hex(input) { var hexTab = '0123456789abcdef'; var output = ''; var x; var i; for (i = 0; i < input.length; i += 1) { x = input.charCodeAt(i); output += hexTab.charAt((x >>> 4) & 0x0f) + hexTab.charAt(x & 0x0f) } return output }, str2rstrUTF8(input) { return unescape(encodeURIComponent(input)) }, rawMD5(s) { return this.rstrMD5(this.str2rstrUTF8(s)) }, hexMD5(s) { return this.rstr2hex(this.rawMD5(s)) }, rawHMACMD5(k, d) { return this.rstrHMACMD5(this.str2rstrUTF8(k), str2rstrUTF8(d)) }, hexHMACMD5(k, d) { return this.rstr2hex(this.rawHMACMD5(k, d)) }, md5(string, key, raw) { if (!key) { if (!raw) { return this.hexMD5(string) } return this.rawMD5(string) } if (!raw) { return this.hexHMACMD5(key, string) } return this.rawHMACMD5(key, string) }, getSig(requestParam, sk, feature, mode) { var sig = null; var requestArr = []; Object.keys(requestParam).sort().forEach(function (key) { requestArr.push(key + '=' + requestParam[key]) }); if (feature == 'search') { sig = '/ws/place/v1/search?' + requestArr.join('&') + sk } if (feature == 'suggest') { sig = '/ws/place/v1/suggestion?' + requestArr.join('&') + sk } if (feature == 'reverseGeocoder') { sig = '/ws/geocoder/v1/?' + requestArr.join('&') + sk } if (feature == 'geocoder') { sig = '/ws/geocoder/v1/?' + requestArr.join('&') + sk } if (feature == 'getCityList') { sig = '/ws/district/v1/list?' + requestArr.join('&') + sk } if (feature == 'getDistrictByCityId') { sig = '/ws/district/v1/getchildren?' + requestArr.join('&') + sk } if (feature == 'calculateDistance') { sig = '/ws/distance/v1/?' + requestArr.join('&') + sk } if (feature == 'direction') { sig = '/ws/direction/v1/' + mode + '?' + requestArr.join('&') + sk } sig = this.md5(sig); return sig }, location2query(data) { if (typeof data == 'string') { return data } var query = ''; for (var i = 0; i < data.length; i++) { var d = data[i]; if (!!query) { query += ';' } if (d.location) { query = query + d.location.lat + ',' + d.location.lng } if (d.latitude && d.longitude) { query = query + d.latitude + ',' + d.longitude } } return query }, rad(d) { return d * Math.PI / 180.0 }, getEndLocation(location) { var to = location.split(';'); var endLocation = []; for (var i = 0; i < to.length; i++) { endLocation.push({ lat: parseFloat(to[i].split(',')[0]), lng: parseFloat(to[i].split(',')[1]) }) } return endLocation }, getDistance(latFrom, lngFrom, latTo, lngTo) { var radLatFrom = this.rad(latFrom); var radLatTo = this.rad(latTo); var a = radLatFrom - radLatTo; var b = this.rad(lngFrom) - this.rad(lngTo); var distance = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(radLatFrom) * Math.cos(radLatTo) * Math.pow(Math.sin(b / 2), 2))); distance = distance * EARTH_RADIUS; distance = Math.round(distance * 10000) / 10000; return parseFloat(distance.toFixed(0)) }, getWXLocation(success, fail, complete) { wx.getLocation({ type: 'gcj02', success: success, fail: fail, complete: complete }) }, getLocationParam(location) { if (typeof location == 'string') { var locationArr = location.split(','); if (locationArr.length === 2) { location = { latitude: location.split(',')[0], longitude: location.split(',')[1] } } else { location = {} } } return location }, polyfillParam(param) { param.success = param.success || function () { }; param.fail = param.fail || function () { }; param.complete = param.complete || function () { } }, checkParamKeyEmpty(param, key) { if (!param[key]) { var errconf = this.buildErrorConfig(ERROR_CONF.PARAM_ERR, ERROR_CONF.PARAM_ERR_MSG + key + '参数格式有误'); param.fail(errconf); param.complete(errconf); return true } return false }, checkKeyword(param) { return !this.checkParamKeyEmpty(param, 'keyword') }, checkLocation(param) { var location = this.getLocationParam(param.location); if (!location || !location.latitude || !location.longitude) { var errconf = this.buildErrorConfig(ERROR_CONF.PARAM_ERR, ERROR_CONF.PARAM_ERR_MSG + ' location参数格式有误'); param.fail(errconf); param.complete(errconf); return false } return true }, buildErrorConfig(errCode, errMsg) { return { status: errCode, message: errMsg } }, handleData(param, data, feature) { if (feature == 'search') { var searchResult = data.data; var searchSimplify = []; for (var i = 0; i < searchResult.length; i++) { searchSimplify.push({ id: searchResult[i].id || null, title: searchResult[i].title || null, latitude: searchResult[i].location && searchResult[i].location.lat || null, longitude: searchResult[i].location && searchResult[i].location.lng || null, address: searchResult[i].address || null, category: searchResult[i].category || null, tel: searchResult[i].tel || null, adcode: searchResult[i].ad_info && searchResult[i].ad_info.adcode || null, city: searchResult[i].ad_info && searchResult[i].ad_info.city || null, district: searchResult[i].ad_info && searchResult[i].ad_info.district || null, province: searchResult[i].ad_info && searchResult[i].ad_info.province || null }) } param.success(data, { searchResult: searchResult, searchSimplify: searchSimplify }) } else if (feature == 'suggest') { var suggestResult = data.data; var suggestSimplify = []; for (var i = 0; i < suggestResult.length; i++) { suggestSimplify.push({ adcode: suggestResult[i].adcode || null, address: suggestResult[i].address || null, category: suggestResult[i].category || null, city: suggestResult[i].city || null, district: suggestResult[i].district || null, id: suggestResult[i].id || null, latitude: suggestResult[i].location && suggestResult[i].location.lat || null, longitude: suggestResult[i].location && suggestResult[i].location.lng || null, province: suggestResult[i].province || null, title: suggestResult[i].title || null, type: suggestResult[i].type || null }) } param.success(data, { suggestResult: suggestResult, suggestSimplify: suggestSimplify }) } else if (feature == 'reverseGeocoder') { var reverseGeocoderResult = data.result; var reverseGeocoderSimplify = { address: reverseGeocoderResult.address || null, latitude: reverseGeocoderResult.location && reverseGeocoderResult.location.lat || null, longitude: reverseGeocoderResult.location && reverseGeocoderResult.location.lng || null, adcode: reverseGeocoderResult.ad_info && reverseGeocoderResult.ad_info.adcode || null, city: reverseGeocoderResult.address_component && reverseGeocoderResult.address_component.city || null, district: reverseGeocoderResult.address_component && reverseGeocoderResult.address_component.district || null, nation: reverseGeocoderResult.address_component && reverseGeocoderResult.address_component.nation || null, province: reverseGeocoderResult.address_component && reverseGeocoderResult.address_component.province || null, street: reverseGeocoderResult.address_component && reverseGeocoderResult.address_component.street || null, street_number: reverseGeocoderResult.address_component && reverseGeocoderResult.address_component.street_number || null, recommend: reverseGeocoderResult.formatted_addresses && reverseGeocoderResult.formatted_addresses.recommend || null, rough: reverseGeocoderResult.formatted_addresses && reverseGeocoderResult.formatted_addresses.rough || null }; if (reverseGeocoderResult.pois) { var pois = reverseGeocoderResult.pois; var poisSimplify = []; for (var i = 0; i < pois.length; i++) { poisSimplify.push({ id: pois[i].id || null, title: pois[i].title || null, latitude: pois[i].location && pois[i].location.lat || null, longitude: pois[i].location && pois[i].location.lng || null, address: pois[i].address || null, category: pois[i].category || null, adcode: pois[i].ad_info && pois[i].ad_info.adcode || null, city: pois[i].ad_info && pois[i].ad_info.city || null, district: pois[i].ad_info && pois[i].ad_info.district || null, province: pois[i].ad_info && pois[i].ad_info.province || null }) } param.success(data, { reverseGeocoderResult: reverseGeocoderResult, reverseGeocoderSimplify: reverseGeocoderSimplify, pois: pois, poisSimplify: poisSimplify }) } else { param.success(data, { reverseGeocoderResult: reverseGeocoderResult, reverseGeocoderSimplify: reverseGeocoderSimplify }) } } else if (feature == 'geocoder') { var geocoderResult = data.result; var geocoderSimplify = { title: geocoderResult.title || null, latitude: geocoderResult.location && geocoderResult.location.lat || null, longitude: geocoderResult.location && geocoderResult.location.lng || null, adcode: geocoderResult.ad_info && geocoderResult.ad_info.adcode || null, province: geocoderResult.address_components && geocoderResult.address_components.province || null, city: geocoderResult.address_components && geocoderResult.address_components.city || null, district: geocoderResult.address_components && geocoderResult.address_components.district || null, street: geocoderResult.address_components && geocoderResult.address_components.street || null, street_number: geocoderResult.address_components && geocoderResult.address_components.street_number || null, level: geocoderResult.level || null }; param.success(data, { geocoderResult: geocoderResult, geocoderSimplify: geocoderSimplify }) } else if (feature == 'getCityList') { var provinceResult = data.result[0]; var cityResult = data.result[1]; var districtResult = data.result[2]; param.success(data, { provinceResult: provinceResult, cityResult: cityResult, districtResult: districtResult }) } else if (feature == 'getDistrictByCityId') { var districtByCity = data.result[0]; param.success(data, districtByCity) } else if (feature == 'calculateDistance') { var calculateDistanceResult = data.result.elements; var distance = []; for (var i = 0; i < calculateDistanceResult.length; i++) { distance.push(calculateDistanceResult[i].distance) } param.success(data, { calculateDistanceResult: calculateDistanceResult, distance: distance }) } else if (feature == 'direction') { var direction = data.result.routes; param.success(data, direction) } else { param.success(data) } }, buildWxRequestConfig(param, options, feature) { var that = this; options.header = { "content-type": "application/json" }; options.method = 'GET'; options.success = function (res) { var data = res.data; if (data.status === 0) { that.handleData(param, data, feature) } else { param.fail(data) } }; options.fail = function (res) { res.statusCode = ERROR_CONF.WX_ERR_CODE; param.fail(that.buildErrorConfig(ERROR_CONF.WX_ERR_CODE, res.errMsg)) }; options.complete = function (res) { var statusCode = +res.statusCode; switch (statusCode) { case ERROR_CONF.WX_ERR_CODE: { param.complete(that.buildErrorConfig(ERROR_CONF.WX_ERR_CODE, res.errMsg)); break } case ERROR_CONF.WX_OK_CODE: { var data = res.data; if (data.status === 0) { param.complete(data) } else { param.complete(that.buildErrorConfig(data.status, data.message)) } break } default: { param.complete(that.buildErrorConfig(ERROR_CONF.SYSTEM_ERR, ERROR_CONF.SYSTEM_ERR_MSG)) } } }; return options }, locationProcess(param, locationsuccess, locationfail, locationcomplete) { var that = this; locationfail = locationfail || function (res) { res.statusCode = ERROR_CONF.WX_ERR_CODE; param.fail(that.buildErrorConfig(ERROR_CONF.WX_ERR_CODE, res.errMsg)) }; locationcomplete = locationcomplete || function (res) { if (res.statusCode == ERROR_CONF.WX_ERR_CODE) { param.complete(that.buildErrorConfig(ERROR_CONF.WX_ERR_CODE, res.errMsg)) } }; if (!param.location) { that.getWXLocation(locationsuccess, locationfail, locationcomplete) } else if (that.checkLocation(param)) { var location = Utils.getLocationParam(param.location); locationsuccess(location) } } }; class QQMapWX { constructor(options) { if (!options.key) { throw Error('key值不能为空') } this.key = options.key }; search(options) { var that = this; options = options || {}; Utils.polyfillParam(options); if (!Utils.checkKeyword(options)) { return } var requestParam = { keyword: options.keyword, orderby: options.orderby || '_distance', page_size: options.page_size || 10, page_index: options.page_index || 1, output: 'json', key: that.key }; if (options.address_format) { requestParam.address_format = options.address_format } if (options.filter) { requestParam.filter = options.filter } var distance = options.distance || "1000"; var auto_extend = options.auto_extend || 1; var region = null; var rectangle = null; if (options.region) { region = options.region } if (options.rectangle) { rectangle = options.rectangle } var locationsuccess = function (result) { if (region && !rectangle) { requestParam.boundary = "region(" + region + "," + auto_extend + "," + result.latitude + "," + result.longitude + ")"; if (options.sig) { requestParam.sig = Utils.getSig(requestParam, options.sig, 'search') } } else if (rectangle && !region) { requestParam.boundary = "rectangle(" + rectangle + ")"; if (options.sig) { requestParam.sig = Utils.getSig(requestParam, options.sig, 'search') } } else { requestParam.boundary = "nearby(" + result.latitude + "," + result.longitude + "," + distance + "," + auto_extend + ")"; if (options.sig) { requestParam.sig = Utils.getSig(requestParam, options.sig, 'search') } } wx.request(Utils.buildWxRequestConfig(options, { url: URL_SEARCH, data: requestParam }, 'search')) }; Utils.locationProcess(options, locationsuccess) }; getSuggestion(options) { var that = this; options = options || {}; Utils.polyfillParam(options); if (!Utils.checkKeyword(options)) { return } var requestParam = { keyword: options.keyword, region: options.region || '全国', region_fix: options.region_fix || 0, policy: options.policy || 0, page_size: options.page_size || 10, page_index: options.page_index || 1, get_subpois: options.get_subpois || 0, output: 'json', key: that.key }; if (options.address_format) { requestParam.address_format = options.address_format } if (options.filter) { requestParam.filter = options.filter } if (options.location) { var locationsuccess = function (result) { requestParam.location = result.latitude + ',' + result.longitude; if (options.sig) { requestParam.sig = Utils.getSig(requestParam, options.sig, 'suggest') } wx.request(Utils.buildWxRequestConfig(options, { url: URL_SUGGESTION, data: requestParam }, "suggest")) }; Utils.locationProcess(options, locationsuccess) } else { if (options.sig) { requestParam.sig = Utils.getSig(requestParam, options.sig, 'suggest') } wx.request(Utils.buildWxRequestConfig(options, { url: URL_SUGGESTION, data: requestParam }, "suggest")) } }; reverseGeocoder(options) { var that = this; options = options || {}; Utils.polyfillParam(options); var requestParam = { coord_type: options.coord_type || 5, get_poi: options.get_poi || 0, output: 'json', key: that.key }; if (options.poi_options) { requestParam.poi_options = options.poi_options } var locationsuccess = function (result) { requestParam.location = result.latitude + ',' + result.longitude; if (options.sig) { requestParam.sig = Utils.getSig(requestParam, options.sig, 'reverseGeocoder') } wx.request(Utils.buildWxRequestConfig(options, { url: URL_GET_GEOCODER, data: requestParam }, 'reverseGeocoder')) }; Utils.locationProcess(options, locationsuccess) }; geocoder(options) { var that = this; options = options || {}; Utils.polyfillParam(options); if (Utils.checkParamKeyEmpty(options, 'address')) { return } var requestParam = { address: options.address, output: 'json', key: that.key }; if (options.region) { requestParam.region = options.region } if (options.sig) { requestParam.sig = Utils.getSig(requestParam, options.sig, 'geocoder') } wx.request(Utils.buildWxRequestConfig(options, { url: URL_GET_GEOCODER, data: requestParam }, 'geocoder')) }; getCityList(options) { var that = this; options = options || {}; Utils.polyfillParam(options); var requestParam = { output: 'json', key: that.key }; if (options.sig) { requestParam.sig = Utils.getSig(requestParam, options.sig, 'getCityList') } wx.request(Utils.buildWxRequestConfig(options, { url: URL_CITY_LIST, data: requestParam }, 'getCityList')) }; getDistrictByCityId(options) { var that = this; options = options || {}; Utils.polyfillParam(options); if (Utils.checkParamKeyEmpty(options, 'id')) { return } var requestParam = { id: options.id || '', output: 'json', key: that.key }; if (options.sig) { requestParam.sig = Utils.getSig(requestParam, options.sig, 'getDistrictByCityId') } wx.request(Utils.buildWxRequestConfig(options, { url: URL_AREA_LIST, data: requestParam }, 'getDistrictByCityId')) }; calculateDistance(options) { var that = this; options = options || {}; Utils.polyfillParam(options); if (Utils.checkParamKeyEmpty(options, 'to')) { return } var requestParam = { mode: options.mode || 'walking', to: Utils.location2query(options.to), output: 'json', key: that.key }; if (options.from) { options.location = options.from } if (requestParam.mode == 'straight') { var locationsuccess = function (result) { var locationTo = Utils.getEndLocation(requestParam.to); var data = { message: "query ok", result: { elements: [] }, status: 0 }; for (var i = 0; i < locationTo.length; i++) { data.result.elements.push({ distance: Utils.getDistance(result.latitude, result.longitude, locationTo[i].lat, locationTo[i].lng), duration: 0, from: { lat: result.latitude, lng: result.longitude }, to: { lat: locationTo[i].lat, lng: locationTo[i].lng } }) } var calculateResult = data.result.elements; var distanceResult = []; for (var i = 0; i < calculateResult.length; i++) { distanceResult.push(calculateResult[i].distance) } return options.success(data, { calculateResult: calculateResult, distanceResult: distanceResult }) }; Utils.locationProcess(options, locationsuccess) } else { var locationsuccess = function (result) { requestParam.from = result.latitude + ',' + result.longitude; if (options.sig) { requestParam.sig = Utils.getSig(requestParam, options.sig, 'calculateDistance') } wx.request(Utils.buildWxRequestConfig(options, { url: URL_DISTANCE, data: requestParam }, 'calculateDistance')) }; Utils.locationProcess(options, locationsuccess) } }; direction(options) { var that = this; options = options || {}; Utils.polyfillParam(options); if (Utils.checkParamKeyEmpty(options, 'to')) { return } var requestParam = { output: 'json', key: that.key }; if (typeof options.to == 'string') { requestParam.to = options.to } else { requestParam.to = options.to.latitude + ',' + options.to.longitude } var SET_URL_DIRECTION = null; options.mode = options.mode || MODE.driving; SET_URL_DIRECTION = URL_DIRECTION + options.mode; if (options.from) { options.location = options.from } if (options.mode == MODE.driving) { if (options.from_poi) { requestParam.from_poi = options.from_poi } if (options.heading) { requestParam.heading = options.heading } if (options.speed) { requestParam.speed = options.speed } if (options.accuracy) { requestParam.accuracy = options.accuracy } if (options.road_type) { requestParam.road_type = options.road_type } if (options.to_poi) { requestParam.to_poi = options.to_poi } if (options.from_track) { requestParam.from_track = options.from_track } if (options.waypoints) { requestParam.waypoints = options.waypoints } if (options.policy) { requestParam.policy = options.policy } if (options.plate_number) { requestParam.plate_number = options.plate_number } } if (options.mode == MODE.transit) { if (options.departure_time) { requestParam.departure_time = options.departure_time } if (options.policy) { requestParam.policy = options.policy } } var locationsuccess = function (result) { requestParam.from = result.latitude + ',' + result.longitude; if (options.sig) { requestParam.sig = Utils.getSig(requestParam, options.sig, 'direction', options.mode) } wx.request(Utils.buildWxRequestConfig(options, { url: SET_URL_DIRECTION, data: requestParam }, 'direction')) }; Utils.locationProcess(options, locationsuccess) } }; module.exports = QQMapWX; -------------------------------------------------------------------------------- /miniprogram/sitemap.json: -------------------------------------------------------------------------------- 1 | { 2 | "desc": "关于本文件的更多信息,请参考文档 https://developers.weixin.qq.com/miniprogram/dev/framework/sitemap.html", 3 | "rules": [{ 4 | "action": "allow", 5 | "page": "*" 6 | }] 7 | } -------------------------------------------------------------------------------- /miniprogram/style/common.wxss: -------------------------------------------------------------------------------- 1 | .container { 2 | padding: 0 20rpx 20rpx 20rpx; 3 | } 4 | .category { 5 | display: flex; 6 | justify-content: center; 7 | position:fixed; 8 | z-index: 10; 9 | align-items: center; 10 | top: 20rpx; 11 | left: 50%; 12 | transform: translateX(-50%); 13 | box-shadow: 0 0 28px #ccc; 14 | } 15 | 16 | .list-conrainer { 17 | display:flex; 18 | justify-content: flex-start; 19 | flex-wrap: wrap; 20 | } 21 | .list-item .cover-wrapper { 22 | position: relative; 23 | font-size: 0; 24 | } 25 | .list-item .cover-wrapper .rate { 26 | position: absolute; 27 | top:0; 28 | right: 0; 29 | color: #fff; 30 | font-size: 20rpx; 31 | background-color: #d81e06; 32 | padding: 0 6rpx; 33 | } 34 | .list-item { 35 | text-align: center; 36 | width: 233rpx; 37 | padding: 2rpx; 38 | } 39 | .list-item .cover { 40 | width: 230rpx; 41 | height: 324rpx; 42 | } 43 | .list-item .title { 44 | height: 88rpx; 45 | overflow: hidden; 46 | font-size: 28rpx; 47 | padding: 0 4rpx; 48 | } 49 | 50 | .page-loading-tip { 51 | position: relative; 52 | left: 50%; 53 | transform: translateX(-50%); 54 | text-align: center; 55 | } 56 | .page-loading-tip .gonep { 57 | color: #ccc; 58 | font-size: 26rpx; 59 | } -------------------------------------------------------------------------------- /project.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "miniprogramRoot": "miniprogram/", 3 | "cloudfunctionRoot": "cloudfunctions/", 4 | "setting": { 5 | "urlCheck": false, 6 | "es6": true, 7 | "enhance": true, 8 | "postcss": true, 9 | "minified": true, 10 | "newFeature": true, 11 | "coverView": true, 12 | "nodeModules": true, 13 | "autoAudits": false, 14 | "showShadowRootInWxmlPanel": true, 15 | "scopeDataCheck": false, 16 | "checkInvalidKey": true, 17 | "checkSiteMap": true, 18 | "uploadWithSourceMap": true, 19 | "babelSetting": { 20 | "ignore": [], 21 | "disablePlugins": [], 22 | "outputPath": "" 23 | }, 24 | "useCompilerModule": true 25 | }, 26 | "appid": "wx2572459ca8cc88c7", 27 | "projectname": "what-to-see-wxapp", 28 | "libVersion": "2.9.4", 29 | "simulatorType": "wechat", 30 | "simulatorPluginLibVersion": {}, 31 | "cloudfunctionTemplateRoot": "cloudfunctionTemplate", 32 | "condition": { 33 | "search": { 34 | "current": -1, 35 | "list": [] 36 | }, 37 | "conversation": { 38 | "current": -1, 39 | "list": [] 40 | }, 41 | "plugin": { 42 | "current": -1, 43 | "list": [] 44 | }, 45 | "game": { 46 | "list": [] 47 | }, 48 | "gamePlugin": { 49 | "current": -1, 50 | "list": [] 51 | }, 52 | "miniprogram": { 53 | "current": 0, 54 | "list": [ 55 | { 56 | "id": -1, 57 | "name": "db guide", 58 | "pathName": "pages/databaseGuide/databaseGuide", 59 | "query": "" 60 | }, 61 | { 62 | "id": 1, 63 | "name": "详情", 64 | "pathName": "pages/detail/detail", 65 | "query": "id=27119724", 66 | "scene": null 67 | }, 68 | { 69 | "id": -1, 70 | "name": "本地好看", 71 | "pathName": "pages/local/local", 72 | "query": "", 73 | "scene": null 74 | } 75 | ] 76 | } 77 | } 78 | } --------------------------------------------------------------------------------