* Add DPS support

* Update readme, changelog and version
This commit is contained in:
Chaoyi Yuan 2019-10-21 14:48:54 +08:00 коммит произвёл GitHub
Родитель 2ff7966a26
Коммит cfc35c303d
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
20 изменённых файлов: 834 добавлений и 17 удалений

Просмотреть файл

@ -1,3 +1,11 @@
## 2.12.0
### Added
* List IoT Hub Device Provisioning Service instances
* Add C# code generation for device twin (Thanks [@tomaszbartoszewski](https://github.com/tomaszbartoszewski)!)
### Fixed
* [#393](https://github.com/microsoft/vscode-azure-iot-toolkit/issues/393): Error during initialize
## 2.11.0 (2019-10-14) ## 2.11.0 (2019-10-14)
### Added ### Added
* List PnP Interfaces in tree view * List PnP Interfaces in tree view

Просмотреть файл

@ -9,7 +9,7 @@
## Overview ## Overview
Interact with Azure IoT Hub, IoT Device Management, IoT Edge Management, IoT Hub Device Simulation, IoT Hub Code Generation. Interact with Azure IoT Hub, IoT Device Management, IoT Edge Management, IoT Hub Device Simulation, IoT Hub Code Generation and IoT Hub Device Provisioning Service.
## Device Explorer ## Device Explorer
The [Wiki page](https://github.com/Microsoft/vscode-azure-iot-toolkit/wiki) includes a comprehensive getting started guide as well as detailed usage instructions of the following features: The [Wiki page](https://github.com/Microsoft/vscode-azure-iot-toolkit/wiki) includes a comprehensive getting started guide as well as detailed usage instructions of the following features:
@ -86,6 +86,17 @@ Instead of copying and pasting to set IoT Hub Connection String, you could sign
![IoT Hub Explorer](images/iot-hub-explorer.png) ![IoT Hub Explorer](images/iot-hub-explorer.png)
## Device Provisioning Service Explorer
1. Open "Azure" view on the Activity Bar, and expand "IOT HUB DEVICE PROVISIONING SERVICE".
![DPS Explorer](images/dps-explorer.png)
2. If you're not signed in, click "Sign in to Azure..." to sign in.
3. Expand one subscription to start exploring your device provisioning services.
## Code Generation ## Code Generation
![Code Generation](images/code-generation.gif) ![Code Generation](images/code-generation.gif)

Двоичные данные
images/dps-explorer.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 25 KiB

383
package-lock.json сгенерированный
Просмотреть файл

@ -1,6 +1,6 @@
{ {
"name": "azure-iot-toolkit", "name": "azure-iot-toolkit",
"version": "2.10.0", "version": "2.11.0-rc",
"lockfileVersion": 1, "lockfileVersion": 1,
"requires": true, "requires": true,
"dependencies": { "dependencies": {
@ -649,6 +649,12 @@
} }
} }
}, },
"ansi-colors": {
"version": "3.2.4",
"resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz",
"integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==",
"dev": true
},
"ansi-regex": { "ansi-regex": {
"version": "4.1.0", "version": "4.1.0",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
@ -722,6 +728,21 @@
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
"integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
}, },
"array-union": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
"integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
"dev": true,
"requires": {
"array-uniq": "^1.0.1"
}
},
"array-uniq": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
"integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
"dev": true
},
"array-unique": { "array-unique": {
"version": "0.3.2", "version": "0.3.2",
"resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
@ -796,11 +817,28 @@
"integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==",
"dev": true "dev": true
}, },
"async-hook-jl": {
"version": "1.7.6",
"resolved": "https://registry.npmjs.org/async-hook-jl/-/async-hook-jl-1.7.6.tgz",
"integrity": "sha512-gFaHkFfSxTjvoxDMYqDuGHlcRyUuamF8s+ZTtJdDzqjws4mCt7v0vuV79/E2Wr2/riMQgtG4/yUtXWs1gZ7JMg==",
"requires": {
"stack-chain": "^1.3.7"
}
},
"async-limiter": { "async-limiter": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz",
"integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ=="
}, },
"async-listener": {
"version": "0.6.10",
"resolved": "https://registry.npmjs.org/async-listener/-/async-listener-0.6.10.tgz",
"integrity": "sha512-gpuo6xOyF4D5DE5WvyqZdPA3NGhiT6Qf07l7DCB0wwDEsLvDIbCr6j9S5aj5Ch96dLace5tXVzWBZkxU/c5ohw==",
"requires": {
"semver": "^5.3.0",
"shimmer": "^1.1.0"
}
},
"async-lock": { "async-lock": {
"version": "1.2.2", "version": "1.2.2",
"resolved": "https://registry.npmjs.org/async-lock/-/async-lock-1.2.2.tgz", "resolved": "https://registry.npmjs.org/async-lock/-/async-lock-1.2.2.tgz",
@ -836,6 +874,15 @@
"is-buffer": "^2.0.2" "is-buffer": "^2.0.2"
} }
}, },
"azure-arm-deviceprovisioningservices": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/azure-arm-deviceprovisioningservices/-/azure-arm-deviceprovisioningservices-2.1.0.tgz",
"integrity": "sha512-fDX3F/uo6Azzj8WqWCILvTPgqkbuesWXk+71usSXU6+ZMbW2/M39fo3n+ecBHX5ifclza/6ApptBwIdJXVWFgA==",
"requires": {
"ms-rest": "^2.3.2",
"ms-rest-azure": "^2.5.5"
}
},
"azure-arm-eventhub": { "azure-arm-eventhub": {
"version": "3.2.0", "version": "3.2.0",
"resolved": "https://registry.npmjs.org/azure-arm-eventhub/-/azure-arm-eventhub-3.2.0.tgz", "resolved": "https://registry.npmjs.org/azure-arm-eventhub/-/azure-arm-eventhub-3.2.0.tgz",
@ -863,6 +910,15 @@
"ms-rest-azure": "^2.0.0" "ms-rest-azure": "^2.0.0"
} }
}, },
"azure-arm-storage": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/azure-arm-storage/-/azure-arm-storage-3.2.0.tgz",
"integrity": "sha512-jrew8qgqCiJ66QyjAhQis7AXhK6hp5soypvcxio3g/b1mNJr7RsQ6vD5zBRebcvM+QBGzvv7COiXy/xzibyOgA==",
"requires": {
"ms-rest": "^2.2.2",
"ms-rest-azure": "^2.3.3"
}
},
"azure-iot-amqp-base": { "azure-iot-amqp-base": {
"version": "2.2.12", "version": "2.2.12",
"resolved": "https://registry.npmjs.org/azure-iot-amqp-base/-/azure-iot-amqp-base-2.2.12.tgz", "resolved": "https://registry.npmjs.org/azure-iot-amqp-base/-/azure-iot-amqp-base-2.2.12.tgz",
@ -1713,6 +1769,16 @@
"wrap-ansi": "^5.1.0" "wrap-ansi": "^5.1.0"
} }
}, },
"cls-hooked": {
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/cls-hooked/-/cls-hooked-4.2.2.tgz",
"integrity": "sha512-J4Xj5f5wq/4jAvcdgoGsL3G103BtWpZrMo8NEinRltN+xpTZdI+M38pyQqhuFU/P792xkMFvnKSf+Lm81U1bxw==",
"requires": {
"async-hook-jl": "^1.7.6",
"emitter-listener": "^1.0.1",
"semver": "^5.4.1"
}
},
"collection-visit": { "collection-visit": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
@ -1859,6 +1925,15 @@
"resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
"integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
}, },
"continuation-local-storage": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/continuation-local-storage/-/continuation-local-storage-3.2.1.tgz",
"integrity": "sha512-jx44cconVqkCEEyLSKWwkvUXwO561jXMa3LPjTPsm5QR22PA0/mhe33FT4Xb5y74JDvt/Cq+5lm8S8rskLv9ZA==",
"requires": {
"async-listener": "^0.6.0",
"emitter-listener": "^1.1.1"
}
},
"cookie": { "cookie": {
"version": "0.4.0", "version": "0.4.0",
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
@ -1889,6 +1964,59 @@
"integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
"dev": true "dev": true
}, },
"copy-webpack-plugin": {
"version": "5.0.4",
"resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-5.0.4.tgz",
"integrity": "sha512-YBuYGpSzoCHSSDGyHy6VJ7SHojKp6WHT4D7ItcQFNAYx2hrwkMe56e97xfVR0/ovDuMTrMffXUiltvQljtAGeg==",
"dev": true,
"requires": {
"cacache": "^11.3.3",
"find-cache-dir": "^2.1.0",
"glob-parent": "^3.1.0",
"globby": "^7.1.1",
"is-glob": "^4.0.1",
"loader-utils": "^1.2.3",
"minimatch": "^3.0.4",
"normalize-path": "^3.0.0",
"p-limit": "^2.2.0",
"schema-utils": "^1.0.0",
"serialize-javascript": "^1.7.0",
"webpack-log": "^2.0.0"
},
"dependencies": {
"cacache": {
"version": "11.3.3",
"resolved": "https://registry.npmjs.org/cacache/-/cacache-11.3.3.tgz",
"integrity": "sha512-p8WcneCytvzPxhDvYp31PD039vi77I12W+/KfR9S8AZbaiARFBCpsPJS+9uhWfeBfeAtW7o/4vt3MUqLkbY6nA==",
"dev": true,
"requires": {
"bluebird": "^3.5.5",
"chownr": "^1.1.1",
"figgy-pudding": "^3.5.1",
"glob": "^7.1.4",
"graceful-fs": "^4.1.15",
"lru-cache": "^5.1.1",
"mississippi": "^3.0.0",
"mkdirp": "^0.5.1",
"move-concurrently": "^1.0.1",
"promise-inflight": "^1.0.1",
"rimraf": "^2.6.3",
"ssri": "^6.0.1",
"unique-filename": "^1.1.1",
"y18n": "^4.0.0"
}
},
"is-glob": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
"integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
"dev": true,
"requires": {
"is-extglob": "^2.1.1"
}
}
}
},
"core-util-is": { "core-util-is": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
@ -2162,12 +2290,64 @@
"randombytes": "^2.0.0" "randombytes": "^2.0.0"
} }
}, },
"dir-glob": {
"version": "2.2.2",
"resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz",
"integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==",
"dev": true,
"requires": {
"path-type": "^3.0.0"
}
},
"dom-serializer": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.1.tgz",
"integrity": "sha512-sK3ujri04WyjwQXVoK4PU3y8ula1stq10GJZpqHIUgoGZdsGzAGu65BnU3d08aTVSvO7mGPZUc0wTEDL+qGE0Q==",
"requires": {
"domelementtype": "^2.0.1",
"entities": "^2.0.0"
},
"dependencies": {
"domelementtype": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz",
"integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ=="
},
"entities": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/entities/-/entities-2.0.0.tgz",
"integrity": "sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw=="
}
}
},
"domain-browser": { "domain-browser": {
"version": "1.2.0", "version": "1.2.0",
"resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
"integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==",
"dev": true "dev": true
}, },
"domelementtype": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz",
"integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w=="
},
"domhandler": {
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz",
"integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==",
"requires": {
"domelementtype": "1"
}
},
"domutils": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz",
"integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==",
"requires": {
"dom-serializer": "0",
"domelementtype": "1"
}
},
"dot-prop": { "dot-prop": {
"version": "4.2.0", "version": "4.2.0",
"resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz",
@ -2247,6 +2427,14 @@
"minimalistic-crypto-utils": "^1.0.0" "minimalistic-crypto-utils": "^1.0.0"
} }
}, },
"emitter-listener": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/emitter-listener/-/emitter-listener-1.1.2.tgz",
"integrity": "sha512-Bt1sBAGFHY9DKY+4/2cV6izcKJUf5T7/gkdmkxzX/qv9CcGH8xSwVRW5mtX03SWJtRTWSOpzCuWN9rBFYZepZQ==",
"requires": {
"shimmer": "^1.2.0"
}
},
"emoji-regex": { "emoji-regex": {
"version": "7.0.3", "version": "7.0.3",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
@ -2282,6 +2470,11 @@
"tapable": "^1.0.0" "tapable": "^1.0.0"
} }
}, },
"entities": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
"integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w=="
},
"errno": { "errno": {
"version": "0.1.7", "version": "0.1.7",
"resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz",
@ -3548,6 +3741,28 @@
"which": "^1.2.14" "which": "^1.2.14"
} }
}, },
"globby": {
"version": "7.1.1",
"resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz",
"integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=",
"dev": true,
"requires": {
"array-union": "^1.0.1",
"dir-glob": "^2.0.0",
"glob": "^7.1.2",
"ignore": "^3.3.5",
"pify": "^3.0.0",
"slash": "^1.0.0"
},
"dependencies": {
"pify": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
"integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
"dev": true
}
}
},
"got": { "got": {
"version": "6.7.1", "version": "6.7.1",
"resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz",
@ -3700,8 +3915,7 @@
"he": { "he": {
"version": "1.1.1", "version": "1.1.1",
"resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz",
"integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0="
"dev": true
}, },
"help-me": { "help-me": {
"version": "1.1.0", "version": "1.1.0",
@ -3734,6 +3948,42 @@
"parse-passwd": "^1.0.0" "parse-passwd": "^1.0.0"
} }
}, },
"html-to-text": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/html-to-text/-/html-to-text-4.0.0.tgz",
"integrity": "sha512-QQl5EEd97h6+3crtgBhkEAO6sQnZyDff8DAeJzoSkOc1Dqe1UvTUZER0B+KjBe6fPZqq549l2VUhtracus3ndA==",
"requires": {
"he": "^1.0.0",
"htmlparser2": "^3.9.2",
"lodash": "^4.17.4",
"optimist": "^0.6.1"
}
},
"htmlparser2": {
"version": "3.10.1",
"resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz",
"integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==",
"requires": {
"domelementtype": "^1.3.1",
"domhandler": "^2.3.0",
"domutils": "^1.5.1",
"entities": "^1.1.1",
"inherits": "^2.0.1",
"readable-stream": "^3.1.1"
},
"dependencies": {
"readable-stream": {
"version": "3.4.0",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz",
"integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==",
"requires": {
"inherits": "^2.0.3",
"string_decoder": "^1.1.1",
"util-deprecate": "^1.0.1"
}
}
}
},
"http-errors": { "http-errors": {
"version": "1.7.2", "version": "1.7.2",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
@ -3819,6 +4069,12 @@
"integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=",
"dev": true "dev": true
}, },
"ignore": {
"version": "3.3.10",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz",
"integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==",
"dev": true
},
"import-lazy": { "import-lazy": {
"version": "2.1.0", "version": "2.1.0",
"resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz",
@ -4128,8 +4384,7 @@
"is-wsl": { "is-wsl": {
"version": "1.1.0", "version": "1.1.0",
"resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
"integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0="
"dev": true
}, },
"isarray": { "isarray": {
"version": "1.0.0", "version": "1.0.0",
@ -4929,6 +5184,14 @@
"wrappy": "1" "wrappy": "1"
} }
}, },
"opn": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/opn/-/opn-6.0.0.tgz",
"integrity": "sha512-I9PKfIZC+e4RXZ/qr1RhgyCnGgYX0UEIlXgWnCOVACIvFgaC9rz6Won7xbdhoHrd8IIhV7YEpHjreNUNkqCGkQ==",
"requires": {
"is-wsl": "^1.1.0"
}
},
"optimist": { "optimist": {
"version": "0.6.1", "version": "0.6.1",
"resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
@ -5152,6 +5415,23 @@
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
"integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
}, },
"path-type": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
"integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
"dev": true,
"requires": {
"pify": "^3.0.0"
},
"dependencies": {
"pify": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
"integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
"dev": true
}
}
},
"pbkdf2": { "pbkdf2": {
"version": "3.0.17", "version": "3.0.17",
"resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz",
@ -5807,12 +6087,23 @@
"integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
"dev": true "dev": true
}, },
"shimmer": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz",
"integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw=="
},
"signal-exit": { "signal-exit": {
"version": "3.0.2", "version": "3.0.2",
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
"integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
"dev": true "dev": true
}, },
"slash": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
"integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=",
"dev": true
},
"snapdragon": { "snapdragon": {
"version": "0.8.2", "version": "0.8.2",
"resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
@ -6024,6 +6315,11 @@
"figgy-pudding": "^3.5.1" "figgy-pudding": "^3.5.1"
} }
}, },
"stack-chain": {
"version": "1.3.7",
"resolved": "https://registry.npmjs.org/stack-chain/-/stack-chain-1.3.7.tgz",
"integrity": "sha1-0ZLJ/06moiyUxN1FkXHj8AzqEoU="
},
"static-extend": { "static-extend": {
"version": "0.1.2", "version": "0.1.2",
"resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
@ -6722,6 +7018,68 @@
"vscode-test": "^0.4.1" "vscode-test": "^0.4.1"
} }
}, },
"vscode-azureextensionui": {
"version": "0.28.2",
"resolved": "https://registry.npmjs.org/vscode-azureextensionui/-/vscode-azureextensionui-0.28.2.tgz",
"integrity": "sha512-WP0xORMfOX4IIk8BhfM0q+otda2uRzbMZnJa3SCv8qLQpy0YWGxkhL+fS2RCtFoyEtVhI2VKJYSKpkdjzODjng==",
"requires": {
"azure-arm-resource": "^3.0.0-preview",
"azure-arm-storage": "^3.1.0",
"fs-extra": "^4.0.3",
"html-to-text": "^4.0.0",
"ms-rest": "^2.2.2",
"ms-rest-azure": "^2.4.4",
"opn": "^6.0.0",
"semver": "^5.6.0",
"vscode-extension-telemetry": "^0.1.0",
"vscode-nls": "^4.0.0"
},
"dependencies": {
"applicationinsights": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/applicationinsights/-/applicationinsights-1.4.0.tgz",
"integrity": "sha512-TV8MYb0Kw9uE2cdu4V/UvTKdOABkX2+Fga9iDz0zqV7FLrNXfmAugWZmmdTx4JoynYkln3d5CUHY3oVSUEbfFw==",
"requires": {
"cls-hooked": "^4.2.2",
"continuation-local-storage": "^3.2.1",
"diagnostic-channel": "0.2.0",
"diagnostic-channel-publishers": "^0.3.2"
}
},
"azure-arm-resource": {
"version": "3.0.0-preview",
"resolved": "https://registry.npmjs.org/azure-arm-resource/-/azure-arm-resource-3.0.0-preview.tgz",
"integrity": "sha512-5AxK9Nnk9hRDtyiXkaqvHV2BvII12JpPpTTHL8p9ZKgkwy67mWk+repoe9PnjxwG2Rm1RadutonccynJ+VHVAw==",
"requires": {
"ms-rest": "^2.0.0",
"ms-rest-azure": "^2.0.0"
}
},
"diagnostic-channel-publishers": {
"version": "0.3.3",
"resolved": "https://registry.npmjs.org/diagnostic-channel-publishers/-/diagnostic-channel-publishers-0.3.3.tgz",
"integrity": "sha512-qIocRYU5TrGUkBlDDxaziAK1+squ8Yf2Ls4HldL3xxb/jzmWO2Enux7CvevNKYmF2kDXZ9HiRqwjPsjk8L+i2Q=="
},
"fs-extra": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz",
"integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==",
"requires": {
"graceful-fs": "^4.1.2",
"jsonfile": "^4.0.0",
"universalify": "^0.1.0"
}
},
"vscode-extension-telemetry": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/vscode-extension-telemetry/-/vscode-extension-telemetry-0.1.2.tgz",
"integrity": "sha512-FSbaZKlIH3VKvBJsKw7v5bESWHXzltji2rtjaJeJglpQH4tfClzwHMzlMXUZGiblV++djEzb1gW8mb5E+wxFsg==",
"requires": {
"applicationinsights": "1.4.0"
}
}
}
},
"vscode-extension-telemetry": { "vscode-extension-telemetry": {
"version": "0.0.18", "version": "0.0.18",
"resolved": "https://registry.npmjs.org/vscode-extension-telemetry/-/vscode-extension-telemetry-0.0.18.tgz", "resolved": "https://registry.npmjs.org/vscode-extension-telemetry/-/vscode-extension-telemetry-0.0.18.tgz",
@ -6730,6 +7088,11 @@
"applicationinsights": "1.0.1" "applicationinsights": "1.0.1"
} }
}, },
"vscode-nls": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/vscode-nls/-/vscode-nls-4.1.1.tgz",
"integrity": "sha512-4R+2UoUUU/LdnMnFjePxfLqNhBS8lrAFyX7pjb2ud/lqDkrUavFUTcG7wR0HBZFakae0Q6KLBFjMS6W93F403A=="
},
"vscode-test": { "vscode-test": {
"version": "0.4.3", "version": "0.4.3",
"resolved": "https://registry.npmjs.org/vscode-test/-/vscode-test-0.4.3.tgz", "resolved": "https://registry.npmjs.org/vscode-test/-/vscode-test-0.4.3.tgz",
@ -6865,6 +7228,16 @@
} }
} }
}, },
"webpack-log": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz",
"integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==",
"dev": true,
"requires": {
"ansi-colors": "^3.0.0",
"uuid": "^3.3.2"
}
},
"webpack-sources": { "webpack-sources": {
"version": "1.4.3", "version": "1.4.3",
"resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz",

Просмотреть файл

@ -1,8 +1,8 @@
{ {
"name": "azure-iot-toolkit", "name": "azure-iot-toolkit",
"displayName": "Azure IoT Hub Toolkit", "displayName": "Azure IoT Hub Toolkit",
"description": "Interact with Azure IoT Hub, IoT Device Management, IoT Edge Management, IoT Hub Device Simulation, IoT Hub Code Generation", "description": "Interact with Azure IoT Hub, IoT Device Management, IoT Edge Management, IoT Hub Device Simulation, IoT Hub Code Generation and IoT Hub Device Provisioning Service (DPS)",
"version": "2.11.0", "version": "2.12.0-rc",
"publisher": "vsciot-vscode", "publisher": "vsciot-vscode",
"aiKey": "0caaff90-cc1c-4def-b64c-3ef33615bc9b", "aiKey": "0caaff90-cc1c-4def-b64c-3ef33615bc9b",
"icon": "logo.png", "icon": "logo.png",
@ -28,11 +28,12 @@
"iot", "iot",
"device", "device",
"IoT Edge", "IoT Edge",
"simulator" "dps"
], ],
"activationEvents": [ "activationEvents": [
"*", "*",
"onView:iotHubDevices", "onView:iotHubDevices",
"onView:iotDpsExplorer",
"onCommand:azure-iot-toolkit.sendD2CMessage", "onCommand:azure-iot-toolkit.sendD2CMessage",
"onCommand:azure-iot-toolkit.startMonitorIoTHubMessage", "onCommand:azure-iot-toolkit.startMonitorIoTHubMessage",
"onCommand:azure-iot-toolkit.sendC2DMessage", "onCommand:azure-iot-toolkit.sendC2DMessage",
@ -66,16 +67,34 @@
"onCommand:azure-iot-toolkit.getModule", "onCommand:azure-iot-toolkit.getModule",
"onCommand:azure-iot-toolkit.copyModuleConnectionString", "onCommand:azure-iot-toolkit.copyModuleConnectionString",
"onCommand:azure-iot-toolkit.startMonitorCustomEventHubEndpoint", "onCommand:azure-iot-toolkit.startMonitorCustomEventHubEndpoint",
"onCommand:azure-iot-toolkit.stopMonitorCustomEventHubEndpoint" "onCommand:azure-iot-toolkit.stopMonitorCustomEventHubEndpoint",
"onCommand:azure-iot-dps.viewProperties",
"onCommand:azure-iot-dps.loadMore",
"onCommand:azure-iot-dps.refresh"
], ],
"main": "./dist/extension", "main": "./dist/extension",
"contributes": { "contributes": {
"viewsContainers": {
"activitybar": [
{
"id": "azure",
"title": "Azure",
"icon": "resources/azure.svg"
}
]
},
"views": { "views": {
"explorer": [ "explorer": [
{ {
"id": "iotHubDevices", "id": "iotHubDevices",
"name": "%azure-iot-toolkit.name%" "name": "%azure-iot-toolkit.name%"
} }
],
"azure": [
{
"id": "iotDpsExplorer",
"name": "IoT Hub Device Provisioning Service"
}
] ]
}, },
"commands": [ "commands": [
@ -277,6 +296,21 @@
"command": "azure-iot-toolkit.stopMonitorCustomEventHubEndpoint", "command": "azure-iot-toolkit.stopMonitorCustomEventHubEndpoint",
"title": "%azure-iot-toolkit.command.stopMonitorCustomEventHubEndpoint.title%", "title": "%azure-iot-toolkit.command.stopMonitorCustomEventHubEndpoint.title%",
"category": "%azure-iot-toolkit.category%" "category": "%azure-iot-toolkit.category%"
},
{
"command": "azure-iot-dps.viewProperties",
"title": "%azure-iot-dps.command.viewProperties.title%",
"category": "%azure-iot-dps.category%"
},
{
"command": "azure-iot-dps.loadMore",
"title": "%azure-iot-dps.command.loadMore.title%",
"category": "%azure-iot-dps.category%"
},
{
"command": "azure-iot-dps.refresh",
"title": "%azure-iot-dps.command.refresh.title%",
"category": "%azure-iot-dps.category%"
} }
], ],
"menus": { "menus": {
@ -345,6 +379,10 @@
"command": "azure-iot-toolkit.sendD2CMessage", "command": "azure-iot-toolkit.sendD2CMessage",
"when": "view == iotHubDevices", "when": "view == iotHubDevices",
"group": "azure-iot-toolkit-0@1" "group": "azure-iot-toolkit-0@1"
},
{
"command": "azure-iot-dps.refresh",
"when": "view == iotDpsExplorer"
} }
], ],
"view/item/context": [ "view/item/context": [
@ -580,6 +618,14 @@
"command": "azure-iot-toolkit.refresh", "command": "azure-iot-toolkit.refresh",
"when": "view == iotHubDevices && viewItem == interfaces-label", "when": "view == iotHubDevices && viewItem == interfaces-label",
"group": "inline" "group": "inline"
},
{
"command": "azure-iot-dps.viewProperties",
"when": "view == iotDpsExplorer && viewItem == IotDps"
},
{
"command": "azure-iot-dps.refresh",
"when": "view == iotDpsExplorer && viewItem == azureextensionui.azureSubscription"
} }
], ],
"editor/context": [ "editor/context": [
@ -657,6 +703,10 @@
{ {
"command": "azure-iot-toolkit.startMonitorIoTHubMessageWithAbbreviation", "command": "azure-iot-toolkit.startMonitorIoTHubMessageWithAbbreviation",
"when": "never" "when": "never"
},
{
"command": "azure-iot-dps.loadMore",
"when": "never"
} }
] ]
}, },
@ -742,6 +792,7 @@
"@types/node": "^10.12.3", "@types/node": "^10.12.3",
"@types/terser-webpack-plugin": "^1.2.0", "@types/terser-webpack-plugin": "^1.2.0",
"@types/webpack": "^4.4.24", "@types/webpack": "^4.4.24",
"copy-webpack-plugin": "^5.0.4",
"fail-on-errors-webpack-plugin": "^3.0.0", "fail-on-errors-webpack-plugin": "^3.0.0",
"mocha": "^5.1.1", "mocha": "^5.1.1",
"rimraf": "^2.6.2", "rimraf": "^2.6.2",
@ -758,6 +809,7 @@
"@azure/event-hubs": "^2.0.0", "@azure/event-hubs": "^2.0.0",
"ajv": "^6.10.0", "ajv": "^6.10.0",
"axios": "^0.18.1", "axios": "^0.18.1",
"azure-arm-deviceprovisioningservices": "^2.1.0",
"azure-arm-eventhub": "^3.2.0", "azure-arm-eventhub": "^3.2.0",
"azure-arm-iothub": "^2.0.1", "azure-arm-iothub": "^2.0.1",
"azure-arm-resource": "^2.0.0-preview", "azure-arm-resource": "^2.0.0-preview",
@ -774,6 +826,7 @@
"replace-in-file": "^3.4.0", "replace-in-file": "^3.4.0",
"strip-json-comments": "^2.0.1", "strip-json-comments": "^2.0.1",
"uuid": "^3.3.2", "uuid": "^3.3.2",
"vscode-azureextensionui": "^0.28.2",
"vscode-extension-telemetry": "0.0.18" "vscode-extension-telemetry": "0.0.18"
}, },
"extensionDependencies": [ "extensionDependencies": [

Просмотреть файл

@ -51,5 +51,9 @@
"azure-iot-toolkit.configuration.showIoTHubInfo.description": "Whether to show IoT Hub info when IoT Hub Connection String is not set.", "azure-iot-toolkit.configuration.showIoTHubInfo.description": "Whether to show IoT Hub info when IoT Hub Connection String is not set.",
"azure-iot-toolkit.configuration.terminalRoot.description": "(Windows Only) Replace the Windows style drive letter in the command with a Unix style root when using a custom shell as the terminal, like Bash on Windows, Git Bash or Cgywin. Example: For Bash on Windows, setting this to '/mnt/' will replace 'C:\\foo\\bar' with '/mnt/c/foo/bar'", "azure-iot-toolkit.configuration.terminalRoot.description": "(Windows Only) Replace the Windows style drive letter in the command with a Unix style root when using a custom shell as the terminal, like Bash on Windows, Git Bash or Cgywin. Example: For Bash on Windows, setting this to '/mnt/' will replace 'C:\\foo\\bar' with '/mnt/c/foo/bar'",
"azure-iot-toolkit.configuration.treeViewAutoRefreshEnable.description": "Whether to enable auto refresh of tree view.", "azure-iot-toolkit.configuration.treeViewAutoRefreshEnable.description": "Whether to enable auto refresh of tree view.",
"azure-iot-toolkit.configuration.treeViewAutoRefreshIntervalInSeconds.description": "Time interval in seconds for tree view auto refresh, auto refresh has to be enabled for it to work." "azure-iot-toolkit.configuration.treeViewAutoRefreshIntervalInSeconds.description": "Time interval in seconds for tree view auto refresh, auto refresh has to be enabled for it to work.",
"azure-iot-dps.category": "Azure IoT Hub Device Provisioning Service",
"azure-iot-dps.command.viewProperties.title": "View Properties",
"azure-iot-dps.command.loadMore.title": "Load More",
"azure-iot-dps.command.refresh.title": "Refresh"
} }

6
resources/azure.svg Normal file
Просмотреть файл

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg height="28" width="28" version="1.1" viewBox="0 0 50 50" xmlns="http://www.w3.org/2000/svg">
<g>
<path fill="#0072C6" d="M11.423,44.326l23.623-4.156L22.894,25.748l6.328-17.346L50,44.33L11.423,44.326z M27.566,5.67L11.469,40.109v-0.034H0l12.717-21.975L27.566,5.67z" />
</g>
</svg>

После

Ширина:  |  Высота:  |  Размер: 337 B

56
resources/dark/dps.svg Normal file
Просмотреть файл

@ -0,0 +1,56 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 22.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 16 16" style="enable-background:new 0 0 16 16;" xml:space="preserve">
<style type="text/css">
.st0{fill:#2D2D30;}
.st1{fill:#0078D4;}
.st2{fill:none;stroke:#424242;stroke-width:0.8;}
.st3{fill:none;stroke:#424242;}
</style>
<title>AzureDPSservice</title>
<desc>Created with Sketch.</desc>
<g id="AzureDPSservice-">
<g id="Group-43">
<path id="Fill-3" class="st0" d="M15.7,7.7c0-1.2-0.3-2.3-0.8-3.3c-0.1-0.4-0.3-0.8-0.6-1c-1.4-2-3.7-3.3-6.3-3.3S3.1,1.4,1.7,3.4
C1.4,3.7,1.2,4,1.1,4.5c-0.5,1-0.8,2.1-0.8,3.3c0,4,3.1,7.3,7,7.6c0.2,0.1,0.4,0.1,0.6,0.1c0.2,0,0.4,0,0.6-0.1
C12.5,15.1,15.7,11.8,15.7,7.7"/>
<path id="Fill-5" class="st1" d="M6.6,13.4C4,12.8,2.1,10.5,2.1,7.7c0-0.6,0.1-1.1,0.2-1.6C2.1,6.1,1.9,6,1.6,5.8
c-0.2,0.6-0.3,1.3-0.3,2c0,3.2,2.2,5.8,5.2,6.5c0-0.1,0-0.2,0-0.2C6.5,13.8,6.5,13.6,6.6,13.4"/>
<path id="Fill-7" class="st1" d="M13.6,6.1c0.2,0.5,0.2,1.1,0.2,1.6c0,2.7-1.9,5.1-4.5,5.7c0.1,0.2,0.1,0.4,0.1,0.6
c0,0.1,0,0.2,0,0.2c3-0.7,5.2-3.3,5.2-6.5c0-0.7-0.1-1.3-0.3-2C14.1,6,13.9,6.1,13.6,6.1"/>
<path id="Fill-9" class="st1" d="M3.8,3.7c1-1.1,2.5-1.8,4.2-1.8s3.2,0.7,4.2,1.8c0.2-0.2,0.4-0.4,0.6-0.5C11.7,1.9,9.9,1.1,8,1.1
S4.3,1.9,3.1,3.2C3.4,3.3,3.6,3.5,3.8,3.7"/>
<path id="Stroke-21" class="st2" d="M6.7,4.2l2.1,3.1"/>
<path id="Stroke-23" class="st2" d="M3.9,7.7l4.9-0.3"/>
<path id="Stroke-25" class="st3" d="M7.1,10.1l1.7-2.8"/>
<path id="Stroke-27" class="st2" d="M10.7,10.8L8.8,7.3"/>
<g id="Stroke-29">
<rect x="7.2" y="3.9" transform="matrix(0.8321 -0.5547 0.5547 0.8321 -1.9218 5.2532)" class="st1" width="1" height="3.8"/>
</g>
<g id="Stroke-31">
<rect x="3.9" y="7" transform="matrix(0.9975 -7.131318e-02 7.131318e-02 0.9975 -0.5185 0.4718)" class="st1" width="4.9" height="1"/>
</g>
<g id="Stroke-33">
<rect x="6.3" y="8.2" transform="matrix(0.5174 -0.8557 0.8557 0.5174 -3.6629 10.9661)" class="st1" width="3.2" height="1"/>
</g>
<g id="Stroke-35">
<rect x="9.2" y="7.1" transform="matrix(0.8763 -0.4817 0.4817 0.8763 -3.1865 5.8011)" class="st1" width="1" height="4"/>
</g>
<path id="Fill-37" class="st1" d="M2.6,3.6c-0.6,0-1,0.4-1,1s0.4,1,1,1s1-0.4,1-1S3.1,3.6,2.6,3.6"/>
<path id="Fill-39" class="st1" d="M13.4,3.6c-0.6,0-1,0.4-1,1s0.4,1,1,1s1-0.4,1-1S14,3.6,13.4,3.6"/>
<path id="Fill-41" class="st1" d="M8,13c-0.6,0-1,0.4-1,1s0.4,1,1,1s1-0.4,1-1S8.6,13,8,13"/>
<path id="Fill-17" class="st1" d="M9.8,7.3c0,0.6-0.5,1-1,1c-0.6,0-1-0.5-1-1s0.5-1,1-1S9.8,6.8,9.8,7.3"/>
<path id="Fill-11" class="st1" d="M7.5,4.2c0,0.5-0.4,0.9-0.9,0.9S5.7,4.7,5.7,4.2s0.4-0.9,0.9-0.9C7.1,3.3,7.5,3.7,7.5,4.2"/>
<path id="Fill-13" class="st1" d="M4.7,7.7c0,0.5-0.4,0.9-0.9,0.9C3.4,8.6,3,8.2,3,7.7s0.4-0.9,0.9-0.9C4.3,6.8,4.7,7.2,4.7,7.7"
/>
<path id="Fill-15" class="st1" d="M11.5,10.8c0,0.5-0.4,0.9-0.9,0.9s-0.9-0.4-0.9-0.9s0.4-0.9,0.9-0.9
C11.2,10,11.5,10.4,11.5,10.8"/>
<path id="Fill-19" class="st1" d="M7.8,10.1c0,0.4-0.3,0.7-0.7,0.7c-0.4,0-0.7-0.3-0.7-0.7s0.3-0.7,0.7-0.7
C7.5,9.4,7.8,9.7,7.8,10.1"/>
</g>
</g>
<g id="not_x5F_fg">
</g>
</svg>

После

Ширина:  |  Высота:  |  Размер: 3.3 KiB

56
resources/light/dps.svg Normal file
Просмотреть файл

@ -0,0 +1,56 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 22.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 16 16" style="enable-background:new 0 0 16 16;" xml:space="preserve">
<style type="text/css">
.st0{fill:#F6F6F6;}
.st1{fill:#0078D4;}
.st2{fill:none;stroke:#424242;stroke-width:0.8;}
.st3{fill:none;stroke:#424242;}
</style>
<title>AzureDPSservice</title>
<desc>Created with Sketch.</desc>
<g id="AzureDPSservice-">
<g id="Group-43">
<path id="Fill-3" class="st0" d="M15.7,7.7c0-1.2-0.3-2.3-0.8-3.3c-0.1-0.4-0.3-0.8-0.6-1c-1.4-2-3.7-3.3-6.3-3.3S3.1,1.4,1.7,3.4
C1.4,3.7,1.2,4,1.1,4.5c-0.5,1-0.8,2.1-0.8,3.3c0,4,3.1,7.3,7,7.6c0.2,0.1,0.4,0.1,0.6,0.1c0.2,0,0.4,0,0.6-0.1
C12.5,15.1,15.7,11.8,15.7,7.7"/>
<path id="Fill-5" class="st1" d="M6.6,13.4C4,12.8,2.1,10.5,2.1,7.7c0-0.6,0.1-1.1,0.2-1.6C2.1,6.1,1.9,6,1.6,5.8
c-0.2,0.6-0.3,1.3-0.3,2c0,3.2,2.2,5.8,5.2,6.5c0-0.1,0-0.2,0-0.2C6.5,13.8,6.5,13.6,6.6,13.4"/>
<path id="Fill-7" class="st1" d="M13.6,6.1c0.2,0.5,0.2,1.1,0.2,1.6c0,2.7-1.9,5.1-4.5,5.7c0.1,0.2,0.1,0.4,0.1,0.6
c0,0.1,0,0.2,0,0.2c3-0.7,5.2-3.3,5.2-6.5c0-0.7-0.1-1.3-0.3-2C14.1,6,13.9,6.1,13.6,6.1"/>
<path id="Fill-9" class="st1" d="M3.8,3.7c1-1.1,2.5-1.8,4.2-1.8s3.2,0.7,4.2,1.8c0.2-0.2,0.4-0.4,0.6-0.5C11.7,1.9,9.9,1.1,8,1.1
S4.3,1.9,3.1,3.2C3.4,3.3,3.6,3.5,3.8,3.7"/>
<path id="Stroke-21" class="st2" d="M6.7,4.2l2.1,3.1"/>
<path id="Stroke-23" class="st2" d="M3.9,7.7l4.9-0.3"/>
<path id="Stroke-25" class="st3" d="M7.1,10.1l1.7-2.8"/>
<path id="Stroke-27" class="st2" d="M10.7,10.8L8.8,7.3"/>
<g id="Stroke-29">
<rect x="7.2" y="3.9" transform="matrix(0.8321 -0.5547 0.5547 0.8321 -1.9218 5.2532)" class="st1" width="1" height="3.8"/>
</g>
<g id="Stroke-31">
<rect x="3.9" y="7" transform="matrix(0.9975 -7.131318e-02 7.131318e-02 0.9975 -0.5185 0.4718)" class="st1" width="4.9" height="1"/>
</g>
<g id="Stroke-33">
<rect x="6.3" y="8.2" transform="matrix(0.5174 -0.8557 0.8557 0.5174 -3.6629 10.9661)" class="st1" width="3.2" height="1"/>
</g>
<g id="Stroke-35">
<rect x="9.2" y="7.1" transform="matrix(0.8763 -0.4817 0.4817 0.8763 -3.1865 5.8011)" class="st1" width="1" height="4"/>
</g>
<path id="Fill-37" class="st1" d="M2.6,3.6c-0.6,0-1,0.4-1,1s0.4,1,1,1s1-0.4,1-1S3.1,3.6,2.6,3.6"/>
<path id="Fill-39" class="st1" d="M13.4,3.6c-0.6,0-1,0.4-1,1s0.4,1,1,1s1-0.4,1-1S14,3.6,13.4,3.6"/>
<path id="Fill-41" class="st1" d="M8,13c-0.6,0-1,0.4-1,1s0.4,1,1,1s1-0.4,1-1S8.6,13,8,13"/>
<path id="Fill-17" class="st1" d="M9.8,7.3c0,0.6-0.5,1-1,1c-0.6,0-1-0.5-1-1s0.5-1,1-1S9.8,6.8,9.8,7.3"/>
<path id="Fill-11" class="st1" d="M7.5,4.2c0,0.5-0.4,0.9-0.9,0.9S5.7,4.7,5.7,4.2s0.4-0.9,0.9-0.9C7.1,3.3,7.5,3.7,7.5,4.2"/>
<path id="Fill-13" class="st1" d="M4.7,7.7c0,0.5-0.4,0.9-0.9,0.9C3.4,8.6,3,8.2,3,7.7s0.4-0.9,0.9-0.9C4.3,6.8,4.7,7.2,4.7,7.7"
/>
<path id="Fill-15" class="st1" d="M11.5,10.8c0,0.5-0.4,0.9-0.9,0.9s-0.9-0.4-0.9-0.9s0.4-0.9,0.9-0.9
C11.2,10,11.5,10.4,11.5,10.8"/>
<path id="Fill-19" class="st1" d="M7.8,10.1c0,0.4-0.3,0.7-0.7,0.7c-0.4,0-0.7-0.3-0.7-0.7s0.3-0.7,0.7-0.7
C7.5,9.4,7.8,9.7,7.8,10.1"/>
</g>
</g>
<g id="not_x5F_fg">
</g>
</svg>

После

Ширина:  |  Высота:  |  Размер: 3.3 KiB

Просмотреть файл

@ -0,0 +1,13 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.
import { AzureAccountTreeItemBase, ISubscriptionContext, SubscriptionTreeItemBase } from "vscode-azureextensionui";
import { DpsSubscriptionTreeItem } from "./DpsSubscriptionTreeItem";
// The root of DPS treeview, represents an Azure account
export class DpsAccountTreeItem extends AzureAccountTreeItemBase {
// Creates the subscription item
public async createSubscriptionTreeItem(root: ISubscriptionContext): Promise<SubscriptionTreeItemBase> {
return new DpsSubscriptionTreeItem(this, root);
}
}

Просмотреть файл

@ -0,0 +1,37 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.
import { IotDpsModels } from "azure-arm-deviceprovisioningservices";
import { AzureParentTreeItem, AzureTreeItem, TreeItemIconPath } from "vscode-azureextensionui";
import { TreeUtils } from "../Utility/treeUtils";
// Represents a DPS resource
export class DpsResourceTreeItem extends AzureTreeItem {
public static contextValue: string = "IotDps";
public readonly contextValue: string = DpsResourceTreeItem.contextValue;
public readonly dps: IotDpsModels.ProvisioningServiceDescription;
constructor(parent: AzureParentTreeItem, dps: IotDpsModels.ProvisioningServiceDescription) {
super(parent);
this.dps = dps;
}
public get id(): string {
if (this.dps.id) {
return this.dps.id;
} else {
return "";
}
}
public get label(): string {
if (this.dps.name) {
return this.dps.name;
} else {
return "";
}
}
public get iconPath(): TreeItemIconPath {
return TreeUtils.getThemedIconPath("dps");
}
}

Просмотреть файл

@ -0,0 +1,28 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.
import { IotDpsClient, IotDpsModels } from "azure-arm-deviceprovisioningservices";
import { createAzureClient, IActionContext, SubscriptionTreeItemBase } from "vscode-azureextensionui";
import { DpsResourceTreeItem } from "./DpsResourceTreeItem";
// Represents an Azure sbuscription
export class DpsSubscriptionTreeItem extends SubscriptionTreeItemBase {
private _nextLink: string | undefined;
public hasMoreChildrenImpl(): boolean {
return this._nextLink !== undefined;
}
public async loadMoreChildrenImpl(clearCache: boolean, _context: IActionContext): Promise<DpsResourceTreeItem[]> {
if (clearCache) {
this._nextLink = undefined;
}
const client: IotDpsClient = createAzureClient(this.root, IotDpsClient);
const dpsCollection: IotDpsModels.ProvisioningServiceDescriptionListResult = this._nextLink === undefined ?
await client.iotDpsResource.listBySubscription() :
await client.iotDpsResource.listBySubscriptionNext(this._nextLink);
this._nextLink = dpsCollection.nextLink;
return dpsCollection.map((dps: IotDpsModels.ProvisioningServiceDescription) => new DpsResourceTreeItem(this, dps));
}
}

20
src/Utility/treeUtils.ts Normal file
Просмотреть файл

@ -0,0 +1,20 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.
import * as path from "path";
import { TreeItemIconPath } from "vscode-azureextensionui";
import { Constants } from "../constants";
export class TreeUtils {
public static getIconPath(iconName: string): string {
return path.join(Constants.ResourcesFolderPath, `${iconName}.svg`);
}
public static getThemedIconPath(iconName: string): TreeItemIconPath {
return {
light: path.join(Constants.ResourcesFolderPath, "light", `${iconName}.svg`),
dark: path.join(Constants.ResourcesFolderPath, "dark", `${iconName}.svg`),
};
}
}

27
src/azureDpsExplorer.ts Normal file
Просмотреть файл

@ -0,0 +1,27 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.
import * as vscode from "vscode";
import { AzExtTreeDataProvider, AzureTreeItem, IActionContext } from "vscode-azureextensionui";
import { DpsResourceExplorer } from "./dpsResourceExplorer";
import { DpsResourceTreeItem } from "./Nodes/DpsResourceTreeItem";
export class AzureDpsExplorer {
private _dpsResourceExplorer: DpsResourceExplorer;
constructor(outputChannel: vscode.OutputChannel, dpsTreeDataProvider: AzExtTreeDataProvider) {
this._dpsResourceExplorer = new DpsResourceExplorer(outputChannel, dpsTreeDataProvider);
}
public async viewProperties(actionContext: IActionContext, node?: DpsResourceTreeItem): Promise<void> {
return this._dpsResourceExplorer.viewProperties(actionContext, node);
}
public async loadMore(actionContext: IActionContext, node: AzureTreeItem): Promise<void> {
return this._dpsResourceExplorer.loadMore(actionContext, node);
}
public async refresh(actionContext: IActionContext, node?: AzureTreeItem): Promise<void> {
return this._dpsResourceExplorer.refresh(actionContext, node);
}
}

Просмотреть файл

@ -134,7 +134,7 @@ export class Constants {
public static modelDiscoveryInterfaceName = "urn_azureiot_ModelDiscovery_DigitalTwin"; public static modelDiscoveryInterfaceName = "urn_azureiot_ModelDiscovery_DigitalTwin";
public static DeleteLabel = "Delete"; public static DeleteLabel = "Delete";
public static DeleteMessage = "Are you sure you want to delete"; public static readonly DISTRIBUTED_TWIN_NAME: string = "azureiot*com^dtracing^1"; public static DeleteMessage = "Are you sure you want to delete"; public static readonly DISTRIBUTED_TWIN_NAME: string = "azureiot*com^dtracing^1";
public static ConnectionStringFormat = { public static ConnectionStringFormat = {
[Constants.IotHubConnectionStringKey]: "HostName=<my-hostname>;SharedAccessKeyName=<my-policy>;SharedAccessKey=<my-policy-key>", [Constants.IotHubConnectionStringKey]: "HostName=<my-hostname>;SharedAccessKeyName=<my-policy>;SharedAccessKey=<my-policy-key>",
[Constants.DeviceConnectionStringKey]: "HostName=<my-hostname>;DeviceId=<known-device-id>;SharedAccessKey=<known-device-key>", [Constants.DeviceConnectionStringKey]: "HostName=<my-hostname>;DeviceId=<known-device-id>;SharedAccessKey=<known-device-key>",
@ -194,10 +194,15 @@ export class Constants {
[TemplateLanguage.Ruby]: "ruby", [TemplateLanguage.Ruby]: "ruby",
}; };
// Capture the {resource-group-name} in pattern /subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/
public static DpsResourceGroupNameRegex = /\/subscriptions\/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\/resourcegroups\/([^/]*)\//i;
public static ResourcesFolderPath: string;
public static initialize(context: vscode.ExtensionContext) { public static initialize(context: vscode.ExtensionContext) {
Constants.ExtensionContext = context; Constants.ExtensionContext = context;
const directory = context.storagePath ? context.storagePath : os.tmpdir(); const directory = context.storagePath ? context.storagePath : os.tmpdir();
Constants.ModuleTwinJosnFilePath = path.join(directory, Constants.ModuleTwinJosnFileName); Constants.ModuleTwinJosnFilePath = path.join(directory, Constants.ModuleTwinJosnFileName);
Constants.DeviceTwinJosnFilePath = path.join(directory, Constants.DeviceTwinJosnFileName); Constants.DeviceTwinJosnFilePath = path.join(directory, Constants.DeviceTwinJosnFileName);
Constants.ResourcesFolderPath = context.asAbsolutePath("resources");
} }
} }

Просмотреть файл

@ -0,0 +1,47 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.
import { IotDpsClient, IotDpsModels } from "azure-arm-deviceprovisioningservices";
import { AzExtTreeDataProvider, AzureTreeItem, createAzureClient, IActionContext, openReadOnlyJson } from "vscode-azureextensionui";
import * as vscode from "vscode";
import { BaseExplorer } from "./baseExplorer";
import { Constants } from "./constants";
import { DpsResourceTreeItem } from "./Nodes/DpsResourceTreeItem";
export class DpsResourceExplorer extends BaseExplorer {
private _dpsTreeDataProvider: AzExtTreeDataProvider;
constructor(outputChannel: vscode.OutputChannel, dpsTreeDataProvider: AzExtTreeDataProvider) {
super(outputChannel);
this._dpsTreeDataProvider = dpsTreeDataProvider;
}
public async viewProperties(context: IActionContext, node?: DpsResourceTreeItem): Promise<void> {
if (!node) {
node = await this._dpsTreeDataProvider.showTreeItemPicker<DpsResourceTreeItem>("IotDps", context);
}
const client: IotDpsClient = createAzureClient(node.root, IotDpsClient);
let matchResult = Constants.DpsResourceGroupNameRegex.exec(node.fullId);
let dpsInfo: IotDpsModels.ProvisioningServiceDescription = null;
if (matchResult != null) {
let resourecGroupName = matchResult[1];
dpsInfo = await client.iotDpsResource.get(node.dps.name, resourecGroupName);
} else {
dpsInfo = node.dps; // Fallback to use cached properties if regex match fails
}
let propertyInfo = {
label: dpsInfo.name + "-properties",
fullId: dpsInfo.id,
};
await openReadOnlyJson(propertyInfo, dpsInfo);
}
public async loadMore(actionContext: IActionContext, node: AzureTreeItem): Promise<void> {
await this._dpsTreeDataProvider.loadMore(node, actionContext);
}
public async refresh(actionContext: IActionContext, node?: AzureTreeItem): Promise<void> {
await this._dpsTreeDataProvider.refresh(node);
}
}

Просмотреть файл

@ -3,6 +3,11 @@
"use strict"; "use strict";
import * as vscode from "vscode"; import * as vscode from "vscode";
import {
AzExtTreeDataProvider, AzureTreeItem, AzureUserInput, createAzExtOutputChannel,
IActionContext, registerCommand, registerUIExtensionVariables
} from "vscode-azureextensionui";
import { AzureDpsExplorer } from "./azureDpsExplorer";
import { AzureIoTExplorer } from "./azureIoTExplorer"; import { AzureIoTExplorer } from "./azureIoTExplorer";
import { Constants, DistributedSettingUpdateType } from "./constants"; import { Constants, DistributedSettingUpdateType } from "./constants";
import { DeviceTree } from "./deviceTree"; import { DeviceTree } from "./deviceTree";
@ -14,12 +19,17 @@ import { ModuleLabelNode } from "./Nodes/ModuleLabelNode";
import { DeviceTwinCodeLensProvider } from "./providers/deviceTwinCodeLensProvider"; import { DeviceTwinCodeLensProvider } from "./providers/deviceTwinCodeLensProvider";
import { ModuleTwinCodeLensProvider } from "./providers/moduleTwinCodeLensProvider"; import { ModuleTwinCodeLensProvider } from "./providers/moduleTwinCodeLensProvider";
import { TelemetryClient } from "./telemetryClient"; import { TelemetryClient } from "./telemetryClient";
import { DpsAccountTreeItem } from "./Nodes/DpsAccountTreeItem";
import { DpsResourceTreeItem } from "./Nodes/DpsResourceTreeItem";
import { TelemetryClientWrapper } from "./telemetryClientWrapper";
export function activate(context: vscode.ExtensionContext) { export function activate(context: vscode.ExtensionContext) {
Constants.initialize(context); Constants.initialize(context);
TelemetryClient.initialize(context); TelemetryClient.initialize(context);
TelemetryClient.sendEvent("extensionActivated"); TelemetryClient.sendEvent("extensionActivated");
activateDps(context);
let azureIoTExplorer = new AzureIoTExplorer(context); let azureIoTExplorer = new AzureIoTExplorer(context);
let deviceTree = new DeviceTree(context); let deviceTree = new DeviceTree(context);
@ -178,7 +188,7 @@ export function activate(context: vscode.ExtensionContext) {
await azureIoTExplorer.startMonitorCustomEventHubEndpoint(eventHubItemNode ? eventHubItemNode.eventHubItem : undefined); await azureIoTExplorer.startMonitorCustomEventHubEndpoint(eventHubItemNode ? eventHubItemNode.eventHubItem : undefined);
})); }));
context.subscriptions.push(vscode.commands.registerCommand("azure-iot-toolkit.stopMonitorCustomEventHubEndpoint", () => { context.subscriptions.push(vscode.commands.registerCommand("azure-iot-toolkit.stopMonitorCustomEventHubEndpoint", () => {
azureIoTExplorer.stopMonitorCustomEventHubEndpoint(); azureIoTExplorer.stopMonitorCustomEventHubEndpoint();
})); }));
@ -218,3 +228,37 @@ export function activate(context: vscode.ExtensionContext) {
export function deactivate() { export function deactivate() {
} }
function activateDps(context: vscode.ExtensionContext) {
let telemetryReporter = new TelemetryClientWrapper("DPS.");
let outputChannel = createAzExtOutputChannel("Device Provisioning Service", "azure-iot-toolkit");
// No need to initialize Constants again here. But pay attention when refactor.
// Constants.initialize(context);
let uiExtensionVariables = {
context: context,
outputChannel: outputChannel,
reporter: telemetryReporter,
ui: new AzureUserInput(context.globalState),
};
registerUIExtensionVariables(uiExtensionVariables);
let dpsTreeItem = new DpsAccountTreeItem();
let dpsExtTreeDataProvider = new AzExtTreeDataProvider(dpsTreeItem, "azure-iot-dps.loadMore");
context.subscriptions.push(dpsTreeItem);
context.subscriptions.push(vscode.window.createTreeView("iotDpsExplorer", { treeDataProvider: dpsExtTreeDataProvider, showCollapseAll: true }));
let azureDpsExplorer = new AzureDpsExplorer(outputChannel, dpsExtTreeDataProvider);
registerCommand("azure-iot-dps.viewProperties", async (actionContext: IActionContext, node?: DpsResourceTreeItem) => {
await azureDpsExplorer.viewProperties(actionContext, node);
});
registerCommand("azure-iot-dps.loadMore", async (actionContext: IActionContext, node: AzureTreeItem) => {
await azureDpsExplorer.loadMore(actionContext, node);
});
registerCommand("azure-iot-dps.refresh", async (actionContext: IActionContext, node: AzureTreeItem) => {
await azureDpsExplorer.refresh(actionContext, node);
});
}

Просмотреть файл

@ -17,9 +17,9 @@ export class TelemetryClient {
this._extensionContext = context; this._extensionContext = context;
} }
public static async sendEvent(eventName: string, properties?: { [key: string]: string; }, iotHubConnectionString?: string) { public static async sendEvent(eventName: string, properties?: { [key: string]: string; }, iotHubConnectionString?: string, measurements?: { [key: string]: number }) {
properties = await this.addCommonProperties(properties, iotHubConnectionString); properties = await this.addCommonProperties(properties, iotHubConnectionString);
this._client.sendTelemetryEvent(eventName, properties); this._client.sendTelemetryEvent(eventName, properties, measurements);
if (eventName.startsWith("AZ.") && eventName !== Constants.IoTHubAILoadDeviceTreeEvent) { if (eventName.startsWith("AZ.") && eventName !== Constants.IoTHubAILoadDeviceTreeEvent) {
if (this._extensionContext) { if (this._extensionContext) {
@ -58,4 +58,4 @@ export class TelemetryClient {
const userDomain = process.env.USERDNSDOMAIN ? process.env.USERDNSDOMAIN.toLowerCase() : ""; const userDomain = process.env.USERDNSDOMAIN ? process.env.USERDNSDOMAIN.toLowerCase() : "";
return userDomain.endsWith("microsoft.com"); return userDomain.endsWith("microsoft.com");
} }
} }

Просмотреть файл

@ -0,0 +1,22 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.
import { TelemetryClient } from "./telemetryClient";
// Instan
export class TelemetryClientWrapper {
private _eventNamePrefix: string;
constructor(eventNamePrefix?: string) {
this._eventNamePrefix = eventNamePrefix;
}
public async sendTelemetryEvent(eventName: string, properties?: { [key: string]: string }, measurements?: { [key: string]: number }): Promise<void> {
if (this._eventNamePrefix) {
eventName = this._eventNamePrefix + eventName;
}
TelemetryClient.sendEvent(eventName, properties, undefined, measurements)
}
}

Просмотреть файл

@ -7,6 +7,7 @@
'use strict'; 'use strict';
const copyPlugin = require('copy-webpack-plugin');
const failOnErrorsPlugin = require('fail-on-errors-webpack-plugin'); const failOnErrorsPlugin = require('fail-on-errors-webpack-plugin');
const terserWebpackPlugin = require('terser-webpack-plugin'); const terserWebpackPlugin = require('terser-webpack-plugin');
const path = require('path'); const path = require('path');
@ -65,6 +66,8 @@ const config = {
// Ignore all locale files of moment.js, which can save 50KB // Ignore all locale files of moment.js, which can save 50KB
// https://webpack.js.org/plugins/ignore-plugin/#ignore-moment-locales // https://webpack.js.org/plugins/ignore-plugin/#ignore-moment-locales
new webpack.IgnorePlugin(/^\.\/locale$/, /[\/\\]moment$/), new webpack.IgnorePlugin(/^\.\/locale$/, /[\/\\]moment$/),
// Ignore the optional requirement of applicationinsights, which is not used in this extension
new webpack.IgnorePlugin(/applicationinsights-native-metrics/),
// Suppress warnings of known dynamic require // Suppress warnings of known dynamic require
new webpack.ContextReplacementPlugin( new webpack.ContextReplacementPlugin(
/applicationinsights[\/\\]out[\/\\]AutoCollection/, /applicationinsights[\/\\]out[\/\\]AutoCollection/,
@ -87,11 +90,15 @@ const config = {
/logic[\/\\].*\.js/ /logic[\/\\].*\.js/
), ),
// Express // Express
new webpack.ContextReplacementPlugin( new webpack.ContextReplacementPlugin(
/express[\/\\]lib/, /express[\/\\]lib/,
false, false,
/$^/ /$^/
), ),
// Copy required resources for Azure treeview
new copyPlugin([
path.join('node_modules', 'vscode-azureextensionui', 'resources', '**', '*.svg')
]),
// Fail on warnings so that CI can report new warnings which require attention // Fail on warnings so that CI can report new warnings which require attention
new failOnErrorsPlugin({ new failOnErrorsPlugin({
failOnErrors: true, failOnErrors: true,