mirror of
https://github.com/tidys/cc-inspector-chrome
synced 2025-04-12 21:21:02 +00:00
项目环境配置
This commit is contained in:
parent
3f60e58c71
commit
820ce75422
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,2 +1,3 @@
|
||||
.idea
|
||||
CocosCreatorInspector/src/build
|
||||
/source/artifacts/
|
||||
|
205
source/package-lock.json
generated
205
source/package-lock.json
generated
@ -3324,6 +3324,12 @@
|
||||
"isarray": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"buffer-crc32": {
|
||||
"version": "0.2.13",
|
||||
"resolved": "https://registry.npm.taobao.org/buffer-crc32/download/buffer-crc32-0.2.13.tgz",
|
||||
"integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=",
|
||||
"dev": true
|
||||
},
|
||||
"buffer-from": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npm.taobao.org/buffer-from/download/buffer-from-1.1.1.tgz",
|
||||
@ -3945,6 +3951,12 @@
|
||||
"integrity": "sha1-y8x51emcrqLb8Q6zom/Ys+as+pQ=",
|
||||
"dev": true
|
||||
},
|
||||
"colors": {
|
||||
"version": "1.4.0",
|
||||
"resolved": "https://registry.npm.taobao.org/colors/download/colors-1.4.0.tgz",
|
||||
"integrity": "sha1-xQSRR51MG9rtLJztMs98fcI2D3g=",
|
||||
"dev": true
|
||||
},
|
||||
"combined-stream": {
|
||||
"version": "1.0.8",
|
||||
"resolved": "https://registry.npm.taobao.org/combined-stream/download/combined-stream-1.0.8.tgz",
|
||||
@ -7140,6 +7152,24 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"imports-loader": {
|
||||
"version": "0.8.0",
|
||||
"resolved": "https://registry.npm.taobao.org/imports-loader/download/imports-loader-0.8.0.tgz?cache=0&sync_timestamp=1612180878719&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fimports-loader%2Fdownload%2Fimports-loader-0.8.0.tgz",
|
||||
"integrity": "sha1-Aw6lG4ygWXfECjq/2bQIj+C+mmk=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"loader-utils": "^1.0.2",
|
||||
"source-map": "^0.6.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"source-map": {
|
||||
"version": "0.6.1",
|
||||
"resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz",
|
||||
"integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"imurmurhash": {
|
||||
"version": "0.1.4",
|
||||
"resolved": "https://registry.npm.taobao.org/imurmurhash/download/imurmurhash-0.1.4.tgz",
|
||||
@ -10892,6 +10922,26 @@
|
||||
"uuid": "^3.3.2"
|
||||
}
|
||||
},
|
||||
"request-promise-core": {
|
||||
"version": "1.1.4",
|
||||
"resolved": "https://registry.npm.taobao.org/request-promise-core/download/request-promise-core-1.1.4.tgz",
|
||||
"integrity": "sha1-Pu3UIjII1BmGe3jOgVFn0QWToi8=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"lodash": "^4.17.19"
|
||||
}
|
||||
},
|
||||
"request-promise-native": {
|
||||
"version": "1.0.9",
|
||||
"resolved": "https://registry.npm.taobao.org/request-promise-native/download/request-promise-native-1.0.9.tgz",
|
||||
"integrity": "sha1-5AcSBSal79yaObKKVnm/R7nZ3Cg=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"request-promise-core": "1.1.4",
|
||||
"stealthy-require": "^1.1.1",
|
||||
"tough-cookie": "^2.3.3"
|
||||
}
|
||||
},
|
||||
"require-directory": {
|
||||
"version": "2.1.1",
|
||||
"resolved": "https://registry.npm.taobao.org/require-directory/download/require-directory-2.1.1.tgz",
|
||||
@ -11732,6 +11782,12 @@
|
||||
"integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
|
||||
"dev": true
|
||||
},
|
||||
"stealthy-require": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npm.taobao.org/stealthy-require/download/stealthy-require-1.1.1.tgz",
|
||||
"integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=",
|
||||
"dev": true
|
||||
},
|
||||
"stream-browserify": {
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npm.taobao.org/stream-browserify/download/stream-browserify-2.0.2.tgz",
|
||||
@ -11794,6 +11850,17 @@
|
||||
"strip-ansi": "^6.0.0"
|
||||
}
|
||||
},
|
||||
"string.prototype.padstart": {
|
||||
"version": "3.1.2",
|
||||
"resolved": "https://registry.npm.taobao.org/string.prototype.padstart/download/string.prototype.padstart-3.1.2.tgz",
|
||||
"integrity": "sha1-+bnOZr7dfAastA7ObjTGBG4aAZ0=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"call-bind": "^1.0.2",
|
||||
"define-properties": "^1.1.3",
|
||||
"es-abstract": "^1.18.0-next.2"
|
||||
}
|
||||
},
|
||||
"string.prototype.trimend": {
|
||||
"version": "1.0.4",
|
||||
"resolved": "https://registry.npm.taobao.org/string.prototype.trimend/download/string.prototype.trimend-1.0.4.tgz",
|
||||
@ -12691,6 +12758,34 @@
|
||||
"integrity": "sha1-1QyMrHmhn7wg8pEfVuuXP04QBw8=",
|
||||
"dev": true
|
||||
},
|
||||
"useragent": {
|
||||
"version": "2.3.0",
|
||||
"resolved": "https://registry.npm.taobao.org/useragent/download/useragent-2.3.0.tgz",
|
||||
"integrity": "sha1-IX+UOtVAyyEoZYqyP8lg9qiMmXI=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"lru-cache": "4.1.x",
|
||||
"tmp": "0.0.x"
|
||||
},
|
||||
"dependencies": {
|
||||
"lru-cache": {
|
||||
"version": "4.1.5",
|
||||
"resolved": "https://registry.npm.taobao.org/lru-cache/download/lru-cache-4.1.5.tgz?cache=0&sync_timestamp=1594427582110&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flru-cache%2Fdownload%2Flru-cache-4.1.5.tgz",
|
||||
"integrity": "sha1-i75Q6oW+1ZvJ4z3KuCNe6bz0Q80=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"pseudomap": "^1.0.2",
|
||||
"yallist": "^2.1.2"
|
||||
}
|
||||
},
|
||||
"yallist": {
|
||||
"version": "2.1.2",
|
||||
"resolved": "https://registry.npm.taobao.org/yallist/download/yallist-2.1.2.tgz",
|
||||
"integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"util": {
|
||||
"version": "0.11.1",
|
||||
"resolved": "https://registry.npm.taobao.org/util/download/util-0.11.1.tgz",
|
||||
@ -12799,6 +12894,43 @@
|
||||
"resolved": "https://registry.npm.taobao.org/vue-class-component/download/vue-class-component-7.2.6.tgz",
|
||||
"integrity": "sha1-hHHgN7jkdi9aRkaG4Z5a/HCFAuQ="
|
||||
},
|
||||
"vue-cli-plugin-browser-extension": {
|
||||
"version": "0.25.2",
|
||||
"resolved": "https://registry.npm.taobao.org/vue-cli-plugin-browser-extension/download/vue-cli-plugin-browser-extension-0.25.2.tgz",
|
||||
"integrity": "sha1-5WsR9YoKQpiF12bCcpihvKcQiu4=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@vue/cli-shared-utils": "^3.0.0-rc.3",
|
||||
"copy-webpack-plugin": "^5.1.2",
|
||||
"imports-loader": "^0.8.0",
|
||||
"webextension-polyfill": "^0.4.0",
|
||||
"webpack": "^4.16.0",
|
||||
"webpack-extension-reloader": "^1.1.0",
|
||||
"zip-webpack-plugin": "^3.0.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"@vue/cli-shared-utils": {
|
||||
"version": "3.12.1",
|
||||
"resolved": "https://registry.npm.taobao.org/@vue/cli-shared-utils/download/@vue/cli-shared-utils-3.12.1.tgz?cache=0&sync_timestamp=1616590545070&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fcli-shared-utils%2Fdownload%2F%40vue%2Fcli-shared-utils-3.12.1.tgz",
|
||||
"integrity": "sha1-vPB2KH3a3uu7l8anSN/p/1DsjfA=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@hapi/joi": "^15.0.1",
|
||||
"chalk": "^2.4.1",
|
||||
"execa": "^1.0.0",
|
||||
"launch-editor": "^2.2.1",
|
||||
"lru-cache": "^5.1.1",
|
||||
"node-ipc": "^9.1.1",
|
||||
"open": "^6.3.0",
|
||||
"ora": "^3.4.0",
|
||||
"request": "^2.87.0",
|
||||
"request-promise-native": "^1.0.7",
|
||||
"semver": "^6.0.0",
|
||||
"string.prototype.padstart": "^3.0.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"vue-eslint-parser": {
|
||||
"version": "7.6.0",
|
||||
"resolved": "https://registry.npm.taobao.org/vue-eslint-parser/download/vue-eslint-parser-7.6.0.tgz",
|
||||
@ -13127,6 +13259,12 @@
|
||||
"defaults": "^1.0.3"
|
||||
}
|
||||
},
|
||||
"webextension-polyfill": {
|
||||
"version": "0.4.0",
|
||||
"resolved": "https://registry.npm.taobao.org/webextension-polyfill/download/webextension-polyfill-0.4.0.tgz",
|
||||
"integrity": "sha1-nMWmDw8r+Qems0n91+YXAfVJVvk=",
|
||||
"dev": true
|
||||
},
|
||||
"webpack": {
|
||||
"version": "4.46.0",
|
||||
"resolved": "https://registry.npm.taobao.org/webpack/download/webpack-4.46.0.tgz?cache=0&sync_timestamp=1616589598083&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack%2Fdownload%2Fwebpack-4.46.0.tgz",
|
||||
@ -13590,6 +13728,54 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"webpack-extension-reloader": {
|
||||
"version": "1.1.4",
|
||||
"resolved": "https://registry.npm.taobao.org/webpack-extension-reloader/download/webpack-extension-reloader-1.1.4.tgz",
|
||||
"integrity": "sha1-9eX6WA5hfBFMxF3bbrJcXWpN0vY=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@types/webpack": "^4.39.8",
|
||||
"@types/webpack-sources": "^0.1.5",
|
||||
"colors": "^1.4.0",
|
||||
"lodash": "^4.17.15",
|
||||
"minimist": "^1.2.0",
|
||||
"useragent": "^2.3.0",
|
||||
"webextension-polyfill": "^0.5.0",
|
||||
"webpack-sources": "^1.4.3",
|
||||
"ws": "^7.2.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"@types/webpack-sources": {
|
||||
"version": "0.1.8",
|
||||
"resolved": "https://registry.npm.taobao.org/@types/webpack-sources/download/@types/webpack-sources-0.1.8.tgz",
|
||||
"integrity": "sha1-B411QQQ1mT7IoKKFXohwbz91H4E=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@types/node": "*",
|
||||
"@types/source-list-map": "*",
|
||||
"source-map": "^0.6.1"
|
||||
}
|
||||
},
|
||||
"source-map": {
|
||||
"version": "0.6.1",
|
||||
"resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz",
|
||||
"integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
|
||||
"dev": true
|
||||
},
|
||||
"webextension-polyfill": {
|
||||
"version": "0.5.0",
|
||||
"resolved": "https://registry.npm.taobao.org/webextension-polyfill/download/webextension-polyfill-0.5.0.tgz",
|
||||
"integrity": "sha1-eV4L9qK46tzbbtrs0WnpIox0dRk=",
|
||||
"dev": true
|
||||
},
|
||||
"ws": {
|
||||
"version": "7.4.4",
|
||||
"resolved": "https://registry.npm.taobao.org/ws/download/ws-7.4.4.tgz?cache=0&sync_timestamp=1615063746103&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fws%2Fdownload%2Fws-7.4.4.tgz",
|
||||
"integrity": "sha1-ODvJdCyyAikskHfOq29gR7F/LVk=",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"webpack-log": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npm.taobao.org/webpack-log/download/webpack-log-2.0.0.tgz?cache=0&sync_timestamp=1615477461878&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-log%2Fdownload%2Fwebpack-log-2.0.0.tgz",
|
||||
@ -13822,6 +14008,15 @@
|
||||
"integrity": "sha1-Yd+FwRPt+1p6TjbriqYO9CPLyQo=",
|
||||
"dev": true
|
||||
},
|
||||
"yazl": {
|
||||
"version": "2.5.1",
|
||||
"resolved": "https://registry.npm.taobao.org/yazl/download/yazl-2.5.1.tgz",
|
||||
"integrity": "sha1-o9ZdPdZZpbCTeFDoYJ8i//orXDU=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"buffer-crc32": "~0.2.3"
|
||||
}
|
||||
},
|
||||
"yorkie": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npm.taobao.org/yorkie/download/yorkie-2.0.0.tgz",
|
||||
@ -13889,6 +14084,16 @@
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"zip-webpack-plugin": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npm.taobao.org/zip-webpack-plugin/download/zip-webpack-plugin-3.0.0.tgz",
|
||||
"integrity": "sha1-Y7PBc/GoegBpFc1zKKPEC0TcjjI=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"webpack-sources": "^1.1.0",
|
||||
"yazl": "^2.4.3"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -4,9 +4,9 @@
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"serve": "vue-cli-service serve",
|
||||
"build": "vue-cli-service build --watch",
|
||||
"lint": "vue-cli-service lint",
|
||||
"prepare1": "vue-cli-service build --target lib --name content src/content.ts"
|
||||
"build": "vue-cli-service build",
|
||||
"build-watch": "vue-cli-service build --watch",
|
||||
"lint": "vue-cli-service lint"
|
||||
},
|
||||
"dependencies": {
|
||||
"@types/fs-extra": "^9.0.9",
|
||||
@ -37,7 +37,8 @@
|
||||
"lint-staged": "^9.5.0",
|
||||
"prettier": "^2.2.1",
|
||||
"typescript": "~4.1.5",
|
||||
"vue-template-compiler": "^2.6.11"
|
||||
"vue-template-compiler": "^2.6.11",
|
||||
"vue-cli-plugin-browser-extension": "latest"
|
||||
},
|
||||
"browserslist": [
|
||||
"> 1%",
|
||||
|
Before Width: | Height: | Size: 5.4 KiB After Width: | Height: | Size: 5.4 KiB |
@ -3,6 +3,7 @@ import * as PluginMsg from "./core/plugin-msg"
|
||||
let Devtools: chrome.runtime.Port | null = null;
|
||||
let DevtoolsPanel: chrome.runtime.Port | null = null;
|
||||
let Content: chrome.runtime.Port | null = null;
|
||||
console.error('on background')
|
||||
|
||||
function shortConnectionLink(request: any, sender: any, sendResponse: any) {
|
||||
// console.log(`%c[短连接|id:${sender.id}|url:${sender.url}]\n${JSON.stringify(request)}`, 'background:#aaa;color:#BD4E19')
|
||||
@ -28,7 +29,7 @@ function longConnectionLink(data: any, sender: any) {
|
||||
}
|
||||
|
||||
// 长连接
|
||||
chrome.runtime.onConnect.addListener(function (port) {
|
||||
chrome.runtime.onConnect.addListener((port) => {
|
||||
console.log(`%c[长连接:${port.name}] 建立链接!`, "background:#aaa;color:#ff0000");
|
||||
port.onMessage.addListener(longConnectionLink);
|
||||
port.onDisconnect.addListener(function (port) {
|
||||
|
@ -1,4 +1,9 @@
|
||||
import * as PluginMsg from '../core/plugin-msg'
|
||||
console.log('on devtools')
|
||||
debugger
|
||||
import Manifest from '../manifest.json'
|
||||
Manifest.devtools_page
|
||||
|
||||
// 对应的是Elements面板的边栏
|
||||
chrome.devtools.panels.elements.createSidebarPane('Cocos', function (sidebar) {
|
||||
sidebar.setObject({some_data: "some data to show!"});
|
||||
|
@ -3,7 +3,6 @@
|
||||
"version": "1.1.0",
|
||||
"name": "Cocos Creator Inspector",
|
||||
"description": "Cocos Creator Inspector",
|
||||
"default_locale": "en",
|
||||
"permissions": [
|
||||
"activeTab",
|
||||
"<all_urls>",
|
||||
|
@ -1,54 +0,0 @@
|
||||
module.exports = {
|
||||
name: "Cocos Creator Inspector",
|
||||
version: "1.0.1",
|
||||
description: "Cocos Creator Inspector",
|
||||
browser_action: {
|
||||
default_title: "CC-Inspector",
|
||||
default_icon: "icon/icon48.png",
|
||||
default_popup: "popup.html"
|
||||
},
|
||||
icons: {
|
||||
48: "icon/icon48.png"
|
||||
},
|
||||
devtools_page: "devtools_panel.html",
|
||||
content_scripts: [
|
||||
{
|
||||
matches: ["<all_urls>"],
|
||||
js: ["js/content.js"],
|
||||
run_at: "document_end",
|
||||
all_frames: true
|
||||
}
|
||||
],
|
||||
background: {
|
||||
scripts: ["js/background.js"],
|
||||
persistent: false,// 需要时开启
|
||||
},
|
||||
// optionsV1的写法
|
||||
options_page: "options.html",
|
||||
// optionsV2的写法
|
||||
options_ui: {
|
||||
page: "options.html",
|
||||
// 添加一些默认的样式,推荐使用
|
||||
chrome_style: true,
|
||||
},
|
||||
manifest_version: 2,
|
||||
permissions: [
|
||||
"tabs",
|
||||
"http://*/*",
|
||||
"https://*/*",
|
||||
"*://*/*",
|
||||
"audio",
|
||||
"system.cpu",
|
||||
"clipboardRead",
|
||||
"clipboardWrite",
|
||||
"system.memory",
|
||||
"processes",// 这个权限只在chrome-dev版本都才有
|
||||
"tabs",
|
||||
"storage",
|
||||
"nativeMessaging",
|
||||
"contextMenus",
|
||||
"notifications",
|
||||
],
|
||||
web_accessible_resources: ["*/*", "*"],
|
||||
content_security_policy: "script-src 'self' 'unsafe-eval'; object-src 'self'"
|
||||
}
|
@ -42,6 +42,7 @@
|
||||
<script lang="ts">
|
||||
import {Component, Vue} from "vue-property-decorator";
|
||||
import HelloWorld from "./HelloWorld.vue";
|
||||
import Manifest from '../manifest.json'
|
||||
|
||||
@Component({
|
||||
components: {
|
||||
@ -68,9 +69,9 @@ export default class App extends Vue {
|
||||
|
||||
onClickOptions() {
|
||||
if (chrome && chrome.tabs) {
|
||||
const manifest = require('../manifest/index')
|
||||
if (manifest.options_page) {
|
||||
chrome.tabs.create({url: manifest.options_page})
|
||||
let {page} = Manifest.options_ui;
|
||||
if (page) {
|
||||
chrome.tabs.create({url: page})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -11,6 +11,7 @@
|
||||
"allowJs": true,
|
||||
"esModuleInterop": true,
|
||||
"allowSyntheticDefaultImports": true,
|
||||
"resolveJsonModule": true,
|
||||
"sourceMap": true,
|
||||
"baseUrl": ".",
|
||||
"types": [
|
||||
|
@ -14,20 +14,44 @@ module.exports = {
|
||||
devtools_panel: "src/devtools/panel/index.ts",
|
||||
test: "src/test/index.ts",
|
||||
},
|
||||
configureWebpack: {
|
||||
entry: {
|
||||
content: Path.join(__dirname, "src/content.ts"),
|
||||
background: Path.join(__dirname, "src/background.ts"),
|
||||
inject: Path.join(__dirname, "src/inject.js"),
|
||||
devtools: Path.join(__dirname, "src/devtools/main.ts"),
|
||||
},
|
||||
output: {
|
||||
filename: "js/[name].js?t=[hash]"
|
||||
},
|
||||
plugins: [
|
||||
new ChromeManifest({
|
||||
manifest: Path.join(__dirname, "src/manifest/index.js")
|
||||
}),
|
||||
]
|
||||
}
|
||||
pluginOptions: {
|
||||
browserExtension: {
|
||||
components: {
|
||||
background: true,
|
||||
devtools: true,
|
||||
contentScripts: true,
|
||||
},
|
||||
componentOptions: {
|
||||
contentScripts: {
|
||||
entries: {
|
||||
content: "src/content.ts"
|
||||
},
|
||||
},
|
||||
background: {
|
||||
entry: "src/background.ts",
|
||||
},
|
||||
devtools: {
|
||||
entry: "src/devtools/main.ts",
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
// configureWebpack: {
|
||||
// mode: "development",
|
||||
// devtool: "#source-map",
|
||||
// entry: {
|
||||
// content: Path.join(__dirname, "src/content.ts"),
|
||||
// background: Path.join(__dirname, "src/background.ts"),
|
||||
// inject: Path.join(__dirname, "src/inject.js"),
|
||||
// devtools: Path.join(__dirname, "src/devtools/main.ts"),
|
||||
// },
|
||||
// output: {
|
||||
// filename: "js/[name].js?t=[hash]"
|
||||
// },
|
||||
// plugins: [
|
||||
// new ChromeManifest({
|
||||
// manifest: Path.join(__dirname, "src/manifest/index.js")
|
||||
// }),
|
||||
// ]
|
||||
// }
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user