├── .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 | 
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 | |||||
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 |
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 | }
--------------------------------------------------------------------------------