├── .travis.yml ├── LICENSE ├── README.md ├── global └── index.d.ts ├── package.json ├── tsconfig.json ├── tslint.json └── yarn.lock /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | dist: trusty 3 | sudo: false 4 | 5 | cache: yarn 6 | node_js: "7" 7 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Mozilla Public License, version 2.0 2 | 3 | 1. Definitions 4 | 5 | 1.1. "Contributor" 6 | 7 | means each individual or legal entity that creates, contributes to the 8 | creation of, or owns Covered Software. 9 | 10 | 1.2. "Contributor Version" 11 | 12 | means the combination of the Contributions of others (if any) used by a 13 | Contributor and that particular Contributor's Contribution. 14 | 15 | 1.3. "Contribution" 16 | 17 | means Covered Software of a particular Contributor. 18 | 19 | 1.4. "Covered Software" 20 | 21 | means Source Code Form to which the initial Contributor has attached the 22 | notice in Exhibit A, the Executable Form of such Source Code Form, and 23 | Modifications of such Source Code Form, in each case including portions 24 | thereof. 25 | 26 | 1.5. "Incompatible With Secondary Licenses" 27 | means 28 | 29 | a. that the initial Contributor has attached the notice described in 30 | Exhibit B to the Covered Software; or 31 | 32 | b. that the Covered Software was made available under the terms of 33 | version 1.1 or earlier of the License, but not also under the terms of 34 | a Secondary License. 35 | 36 | 1.6. "Executable Form" 37 | 38 | means any form of the work other than Source Code Form. 39 | 40 | 1.7. "Larger Work" 41 | 42 | means a work that combines Covered Software with other material, in a 43 | separate file or files, that is not Covered Software. 44 | 45 | 1.8. "License" 46 | 47 | means this document. 48 | 49 | 1.9. "Licensable" 50 | 51 | means having the right to grant, to the maximum extent possible, whether 52 | at the time of the initial grant or subsequently, any and all of the 53 | rights conveyed by this License. 54 | 55 | 1.10. "Modifications" 56 | 57 | means any of the following: 58 | 59 | a. any file in Source Code Form that results from an addition to, 60 | deletion from, or modification of the contents of Covered Software; or 61 | 62 | b. any new file in Source Code Form that contains any Covered Software. 63 | 64 | 1.11. "Patent Claims" of a Contributor 65 | 66 | means any patent claim(s), including without limitation, method, 67 | process, and apparatus claims, in any patent Licensable by such 68 | Contributor that would be infringed, but for the grant of the License, 69 | by the making, using, selling, offering for sale, having made, import, 70 | or transfer of either its Contributions or its Contributor Version. 71 | 72 | 1.12. "Secondary License" 73 | 74 | means either the GNU General Public License, Version 2.0, the GNU Lesser 75 | General Public License, Version 2.1, the GNU Affero General Public 76 | License, Version 3.0, or any later versions of those licenses. 77 | 78 | 1.13. "Source Code Form" 79 | 80 | means the form of the work preferred for making modifications. 81 | 82 | 1.14. "You" (or "Your") 83 | 84 | means an individual or a legal entity exercising rights under this 85 | License. For legal entities, "You" includes any entity that controls, is 86 | controlled by, or is under common control with You. For purposes of this 87 | definition, "control" means (a) the power, direct or indirect, to cause 88 | the direction or management of such entity, whether by contract or 89 | otherwise, or (b) ownership of more than fifty percent (50%) of the 90 | outstanding shares or beneficial ownership of such entity. 91 | 92 | 93 | 2. License Grants and Conditions 94 | 95 | 2.1. Grants 96 | 97 | Each Contributor hereby grants You a world-wide, royalty-free, 98 | non-exclusive license: 99 | 100 | a. under intellectual property rights (other than patent or trademark) 101 | Licensable by such Contributor to use, reproduce, make available, 102 | modify, display, perform, distribute, and otherwise exploit its 103 | Contributions, either on an unmodified basis, with Modifications, or 104 | as part of a Larger Work; and 105 | 106 | b. under Patent Claims of such Contributor to make, use, sell, offer for 107 | sale, have made, import, and otherwise transfer either its 108 | Contributions or its Contributor Version. 109 | 110 | 2.2. Effective Date 111 | 112 | The licenses granted in Section 2.1 with respect to any Contribution 113 | become effective for each Contribution on the date the Contributor first 114 | distributes such Contribution. 115 | 116 | 2.3. Limitations on Grant Scope 117 | 118 | The licenses granted in this Section 2 are the only rights granted under 119 | this License. No additional rights or licenses will be implied from the 120 | distribution or licensing of Covered Software under this License. 121 | Notwithstanding Section 2.1(b) above, no patent license is granted by a 122 | Contributor: 123 | 124 | a. for any code that a Contributor has removed from Covered Software; or 125 | 126 | b. for infringements caused by: (i) Your and any other third party's 127 | modifications of Covered Software, or (ii) the combination of its 128 | Contributions with other software (except as part of its Contributor 129 | Version); or 130 | 131 | c. under Patent Claims infringed by Covered Software in the absence of 132 | its Contributions. 133 | 134 | This License does not grant any rights in the trademarks, service marks, 135 | or logos of any Contributor (except as may be necessary to comply with 136 | the notice requirements in Section 3.4). 137 | 138 | 2.4. Subsequent Licenses 139 | 140 | No Contributor makes additional grants as a result of Your choice to 141 | distribute the Covered Software under a subsequent version of this 142 | License (see Section 10.2) or under the terms of a Secondary License (if 143 | permitted under the terms of Section 3.3). 144 | 145 | 2.5. Representation 146 | 147 | Each Contributor represents that the Contributor believes its 148 | Contributions are its original creation(s) or it has sufficient rights to 149 | grant the rights to its Contributions conveyed by this License. 150 | 151 | 2.6. Fair Use 152 | 153 | This License is not intended to limit any rights You have under 154 | applicable copyright doctrines of fair use, fair dealing, or other 155 | equivalents. 156 | 157 | 2.7. Conditions 158 | 159 | Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in 160 | Section 2.1. 161 | 162 | 163 | 3. Responsibilities 164 | 165 | 3.1. Distribution of Source Form 166 | 167 | All distribution of Covered Software in Source Code Form, including any 168 | Modifications that You create or to which You contribute, must be under 169 | the terms of this License. You must inform recipients that the Source 170 | Code Form of the Covered Software is governed by the terms of this 171 | License, and how they can obtain a copy of this License. You may not 172 | attempt to alter or restrict the recipients' rights in the Source Code 173 | Form. 174 | 175 | 3.2. Distribution of Executable Form 176 | 177 | If You distribute Covered Software in Executable Form then: 178 | 179 | a. such Covered Software must also be made available in Source Code Form, 180 | as described in Section 3.1, and You must inform recipients of the 181 | Executable Form how they can obtain a copy of such Source Code Form by 182 | reasonable means in a timely manner, at a charge no more than the cost 183 | of distribution to the recipient; and 184 | 185 | b. You may distribute such Executable Form under the terms of this 186 | License, or sublicense it under different terms, provided that the 187 | license for the Executable Form does not attempt to limit or alter the 188 | recipients' rights in the Source Code Form under this License. 189 | 190 | 3.3. Distribution of a Larger Work 191 | 192 | You may create and distribute a Larger Work under terms of Your choice, 193 | provided that You also comply with the requirements of this License for 194 | the Covered Software. If the Larger Work is a combination of Covered 195 | Software with a work governed by one or more Secondary Licenses, and the 196 | Covered Software is not Incompatible With Secondary Licenses, this 197 | License permits You to additionally distribute such Covered Software 198 | under the terms of such Secondary License(s), so that the recipient of 199 | the Larger Work may, at their option, further distribute the Covered 200 | Software under the terms of either this License or such Secondary 201 | License(s). 202 | 203 | 3.4. Notices 204 | 205 | You may not remove or alter the substance of any license notices 206 | (including copyright notices, patent notices, disclaimers of warranty, or 207 | limitations of liability) contained within the Source Code Form of the 208 | Covered Software, except that You may alter any license notices to the 209 | extent required to remedy known factual inaccuracies. 210 | 211 | 3.5. Application of Additional Terms 212 | 213 | You may choose to offer, and to charge a fee for, warranty, support, 214 | indemnity or liability obligations to one or more recipients of Covered 215 | Software. However, You may do so only on Your own behalf, and not on 216 | behalf of any Contributor. You must make it absolutely clear that any 217 | such warranty, support, indemnity, or liability obligation is offered by 218 | You alone, and You hereby agree to indemnify every Contributor for any 219 | liability incurred by such Contributor as a result of warranty, support, 220 | indemnity or liability terms You offer. You may include additional 221 | disclaimers of warranty and limitations of liability specific to any 222 | jurisdiction. 223 | 224 | 4. Inability to Comply Due to Statute or Regulation 225 | 226 | If it is impossible for You to comply with any of the terms of this License 227 | with respect to some or all of the Covered Software due to statute, 228 | judicial order, or regulation then You must: (a) comply with the terms of 229 | this License to the maximum extent possible; and (b) describe the 230 | limitations and the code they affect. Such description must be placed in a 231 | text file included with all distributions of the Covered Software under 232 | this License. Except to the extent prohibited by statute or regulation, 233 | such description must be sufficiently detailed for a recipient of ordinary 234 | skill to be able to understand it. 235 | 236 | 5. Termination 237 | 238 | 5.1. The rights granted under this License will terminate automatically if You 239 | fail to comply with any of its terms. However, if You become compliant, 240 | then the rights granted under this License from a particular Contributor 241 | are reinstated (a) provisionally, unless and until such Contributor 242 | explicitly and finally terminates Your grants, and (b) on an ongoing 243 | basis, if such Contributor fails to notify You of the non-compliance by 244 | some reasonable means prior to 60 days after You have come back into 245 | compliance. Moreover, Your grants from a particular Contributor are 246 | reinstated on an ongoing basis if such Contributor notifies You of the 247 | non-compliance by some reasonable means, this is the first time You have 248 | received notice of non-compliance with this License from such 249 | Contributor, and You become compliant prior to 30 days after Your receipt 250 | of the notice. 251 | 252 | 5.2. If You initiate litigation against any entity by asserting a patent 253 | infringement claim (excluding declaratory judgment actions, 254 | counter-claims, and cross-claims) alleging that a Contributor Version 255 | directly or indirectly infringes any patent, then the rights granted to 256 | You by any and all Contributors for the Covered Software under Section 257 | 2.1 of this License shall terminate. 258 | 259 | 5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user 260 | license agreements (excluding distributors and resellers) which have been 261 | validly granted by You or Your distributors under this License prior to 262 | termination shall survive termination. 263 | 264 | 6. Disclaimer of Warranty 265 | 266 | Covered Software is provided under this License on an "as is" basis, 267 | without warranty of any kind, either expressed, implied, or statutory, 268 | including, without limitation, warranties that the Covered Software is free 269 | of defects, merchantable, fit for a particular purpose or non-infringing. 270 | The entire risk as to the quality and performance of the Covered Software 271 | is with You. Should any Covered Software prove defective in any respect, 272 | You (not any Contributor) assume the cost of any necessary servicing, 273 | repair, or correction. This disclaimer of warranty constitutes an essential 274 | part of this License. No use of any Covered Software is authorized under 275 | this License except under this disclaimer. 276 | 277 | 7. Limitation of Liability 278 | 279 | Under no circumstances and under no legal theory, whether tort (including 280 | negligence), contract, or otherwise, shall any Contributor, or anyone who 281 | distributes Covered Software as permitted above, be liable to You for any 282 | direct, indirect, special, incidental, or consequential damages of any 283 | character including, without limitation, damages for lost profits, loss of 284 | goodwill, work stoppage, computer failure or malfunction, or any and all 285 | other commercial damages or losses, even if such party shall have been 286 | informed of the possibility of such damages. This limitation of liability 287 | shall not apply to liability for death or personal injury resulting from 288 | such party's negligence to the extent applicable law prohibits such 289 | limitation. Some jurisdictions do not allow the exclusion or limitation of 290 | incidental or consequential damages, so this exclusion and limitation may 291 | not apply to You. 292 | 293 | 8. Litigation 294 | 295 | Any litigation relating to this License may be brought only in the courts 296 | of a jurisdiction where the defendant maintains its principal place of 297 | business and such litigation shall be governed by laws of that 298 | jurisdiction, without reference to its conflict-of-law provisions. Nothing 299 | in this Section shall prevent a party's ability to bring cross-claims or 300 | counter-claims. 301 | 302 | 9. Miscellaneous 303 | 304 | This License represents the complete agreement concerning the subject 305 | matter hereof. If any provision of this License is held to be 306 | unenforceable, such provision shall be reformed only to the extent 307 | necessary to make it enforceable. Any law or regulation which provides that 308 | the language of a contract shall be construed against the drafter shall not 309 | be used to construe this License against a Contributor. 310 | 311 | 312 | 10. Versions of the License 313 | 314 | 10.1. New Versions 315 | 316 | Mozilla Foundation is the license steward. Except as provided in Section 317 | 10.3, no one other than the license steward has the right to modify or 318 | publish new versions of this License. Each version will be given a 319 | distinguishing version number. 320 | 321 | 10.2. Effect of New Versions 322 | 323 | You may distribute the Covered Software under the terms of the version 324 | of the License under which You originally received the Covered Software, 325 | or under the terms of any subsequent version published by the license 326 | steward. 327 | 328 | 10.3. Modified Versions 329 | 330 | If you create software not governed by this License, and you want to 331 | create a new license for such software, you may create and use a 332 | modified version of this License if you rename the license and remove 333 | any references to the name of the license steward (except to note that 334 | such modified license differs from this License). 335 | 336 | 10.4. Distributing Source Code Form that is Incompatible With Secondary 337 | Licenses If You choose to distribute Source Code Form that is 338 | Incompatible With Secondary Licenses under the terms of this version of 339 | the License, the notice described in Exhibit B of this License must be 340 | attached. 341 | 342 | Exhibit A - Source Code Form License Notice 343 | 344 | This Source Code Form is subject to the 345 | terms of the Mozilla Public License, v. 346 | 2.0. If a copy of the MPL was not 347 | distributed with this file, You can 348 | obtain one at 349 | http://mozilla.org/MPL/2.0/. 350 | 351 | If it is not possible or desirable to put the notice in a particular file, 352 | then You may include the notice in a location (such as a LICENSE file in a 353 | relevant directory) where a recipient would be likely to look for such a 354 | notice. 355 | 356 | You may add additional accurate notices of copyright ownership. 357 | 358 | Exhibit B - "Incompatible With Secondary Licenses" Notice 359 | 360 | This Source Code Form is "Incompatible 361 | With Secondary Licenses", as defined by 362 | the Mozilla Public License, v. 2.0. 363 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # web-ext-types 2 | 3 | [![Build Status][build-badge]][build-url] 4 | [![Npm Version][npm-badge]][npm-url] 5 | 6 | TypeScript type definitions for WebExtensions, based on MDN's documentation. 7 | 8 | ## Requirements 9 | 10 | As this library is using the `object` type and default values for generics, 11 | `typescript` should at least be on version `2.3` to get the definitions to work. 12 | 13 | ## Install it 14 | 15 | There is an npm package available, which means you can grab it from there: 16 | 17 | ```sh 18 | # yarn version 19 | yarn add web-ext-types --dev 20 | 21 | # npm version 22 | npm install --save-dev web-ext-types 23 | ``` 24 | 25 | Though if you want to use the git version, simply do: 26 | 27 | ```sh 28 | # yarn version 29 | yarn add kelseasy/web-ext-types --dev 30 | 31 | # npm version 32 | npm install --save-dev kelseasy/web-ext-types 33 | ``` 34 | 35 | As this is not a [`DefinitelyTyped`][definitely-typed] package, you will have to 36 | include the type definition in your `tsconfig.json` by hand, via a `typeRoots` 37 | option. 38 | 39 | ```js 40 | { 41 | "compilerOptions": { 42 | // You have to explicitly set @types to get DefinitelyTyped type definitions 43 | "typeRoots": ["node_modules/@types", "node_modules/web-ext-types"], 44 | } 45 | } 46 | ``` 47 | 48 | [build-badge]: https://travis-ci.org/kelseasy/web-ext-types.svg?branch=master 49 | [build-url]: https://travis-ci.org/kelseasy/web-ext-types 50 | [definitely-typed]: https://github.com/DefinitelyTyped/DefinitelyTyped/ 51 | [npm-badge]: https://img.shields.io/npm/v/web-ext-types.svg 52 | [npm-url]: https://www.npmjs.com/package/web-ext-types 53 | -------------------------------------------------------------------------------- /global/index.d.ts: -------------------------------------------------------------------------------- 1 | // This Source Code Form is subject to the terms of the Mozilla Public 2 | // license, v. 2.0. If a copy of the MPL was not distributed with this 3 | // file, You can obtain one at http://mozilla.org/MPL/2.0/. 4 | 5 | interface EvListener { 6 | addListener: (callback: T) => void; 7 | removeListener: (listener: T) => void; 8 | hasListener: (listener: T) => boolean; 9 | } 10 | 11 | type Listener = EvListener<(arg: T) => void>; 12 | 13 | declare namespace browser.alarms { 14 | type Alarm = { 15 | name: string; 16 | scheduledTime: number; 17 | periodInMinutes?: number; 18 | }; 19 | 20 | type When = { 21 | when?: number; 22 | periodInMinutes?: number; 23 | }; 24 | type DelayInMinutes = { 25 | delayInMinutes?: number; 26 | periodInMinutes?: number; 27 | }; 28 | function create(name?: string, alarmInfo?: When | DelayInMinutes): void; 29 | function get(name?: string): Promise; 30 | function getAll(): Promise; 31 | function clear(name?: string): Promise; 32 | function clearAll(): Promise; 33 | 34 | const onAlarm: Listener; 35 | } 36 | 37 | declare namespace browser.bookmarks { 38 | type BookmarkTreeNodeUnmodifiable = "managed"; 39 | type BookmarkTreeNodeType = "bookmark" | "folder" | "separator"; 40 | type BookmarkTreeNode = { 41 | id: string; 42 | parentId?: string; 43 | index?: number; 44 | url?: string; 45 | title: string; 46 | dateAdded?: number; 47 | dateGroupModified?: number; 48 | unmodifiable?: BookmarkTreeNodeUnmodifiable; 49 | children?: BookmarkTreeNode[]; 50 | type?: BookmarkTreeNodeType; 51 | }; 52 | 53 | type CreateDetails = { 54 | parentId?: string; 55 | index?: number; 56 | title?: string; 57 | type?: BookmarkTreeNodeType; 58 | url?: string; 59 | }; 60 | 61 | function create(bookmark: CreateDetails): Promise; 62 | function get(idOrIdList: string | string[]): Promise; 63 | function getChildren(id: string): Promise; 64 | function getRecent(numberOfItems: number): Promise; 65 | function getSubTree(id: string): Promise<[BookmarkTreeNode]>; 66 | function getTree(): Promise<[BookmarkTreeNode]>; 67 | 68 | type Destination = 69 | | { 70 | parentId: string; 71 | index?: number; 72 | } 73 | | { 74 | index: number; 75 | parentId?: string; 76 | }; 77 | function move( 78 | id: string, 79 | destination: Destination 80 | ): Promise; 81 | function remove(id: string): Promise; 82 | function removeTree(id: string): Promise; 83 | function search( 84 | query: 85 | | string 86 | | { 87 | query?: string; 88 | url?: string; 89 | title?: string; 90 | } 91 | ): Promise; 92 | function update( 93 | id: string, 94 | changes: { title: string; url: string } 95 | ): Promise; 96 | 97 | const onCreated: EvListener<(id: string, bookmark: BookmarkTreeNode) => void>; 98 | const onRemoved: EvListener< 99 | ( 100 | id: string, 101 | removeInfo: { 102 | parentId: string; 103 | index: number; 104 | node: BookmarkTreeNode; 105 | } 106 | ) => void 107 | >; 108 | const onChanged: EvListener< 109 | ( 110 | id: string, 111 | changeInfo: { 112 | title: string; 113 | url?: string; 114 | } 115 | ) => void 116 | >; 117 | const onMoved: EvListener< 118 | ( 119 | id: string, 120 | moveInfo: { 121 | parentId: string; 122 | index: number; 123 | oldParentId: string; 124 | oldIndex: number; 125 | } 126 | ) => void 127 | >; 128 | } 129 | 130 | declare namespace browser.browserAction { 131 | type ColorArray = [number, number, number, number]; 132 | type ImageDataType = ImageData; 133 | 134 | function setTitle(details: { title: string | null; tabId?: number }): void; 135 | function getTitle(details: { tabId?: number }): Promise; 136 | 137 | type IconViaPath = { 138 | path: string | { [size: number]: string }; 139 | tabId?: number; 140 | }; 141 | 142 | type IconViaImageData = { 143 | imageData: ImageDataType | { [size: number]: ImageDataType }; 144 | tabId?: number; 145 | }; 146 | 147 | type IconReset = { 148 | imageData?: {} | null; 149 | path?: {} | null; 150 | tabId?: number; 151 | }; 152 | 153 | function setIcon( 154 | details: IconViaPath | IconViaImageData | IconReset 155 | ): Promise; 156 | function setPopup(details: { popup: string | null; tabId?: number }): void; 157 | function getPopup(details: { tabId?: number }): Promise; 158 | function openPopup(): Promise; 159 | function setBadgeText(details: { text: string | null; tabId?: number }): void; 160 | function getBadgeText(details: { tabId?: number }): Promise; 161 | function setBadgeBackgroundColor(details: { 162 | color: string | ColorArray | null; 163 | tabId?: number; 164 | }): void; 165 | function getBadgeBackgroundColor(details: { 166 | tabId?: number; 167 | }): Promise; 168 | function setBadgeTextColor(details: { 169 | color: string | ColorArray; 170 | tabId?: number; 171 | }): void; 172 | function setBadgeTextColor(details: { 173 | color: string | ColorArray; 174 | windowId?: number; 175 | }): void; 176 | function setBadgeTextColor(details: { color: null; tabId?: number }): void; 177 | function getBadgeTextColor(details: { tabId?: string }): Promise; 178 | function getBadgeTextColor(details: { 179 | windowId?: string; 180 | }): Promise; 181 | function enable(tabId?: number): void; 182 | function disable(tabId?: number): void; 183 | 184 | const onClicked: Listener; 185 | } 186 | 187 | declare namespace browser.browsingData { 188 | type DataTypeSet = { 189 | cache?: boolean; 190 | cookies?: boolean; 191 | downloads?: boolean; 192 | fileSystems?: boolean; 193 | formData?: boolean; 194 | history?: boolean; 195 | indexedDB?: boolean; 196 | localStorage?: boolean; 197 | passwords?: boolean; 198 | pluginData?: boolean; 199 | serverBoundCertificates?: boolean; 200 | serviceWorkers?: boolean; 201 | }; 202 | 203 | type DataRemovalOptions = { 204 | since?: number; 205 | originTypes?: { unprotectedWeb: boolean }; 206 | }; 207 | 208 | type ExtraDataRemovalOptions = { 209 | hostnames?: string[] 210 | } 211 | 212 | function remove( 213 | removalOptions: DataRemovalOptions, 214 | dataTypes: DataTypeSet 215 | ): Promise; 216 | function removeCache(removalOptions?: DataRemovalOptions): Promise; 217 | function removeCookies(removalOptions: DataRemovalOptions & ExtraDataRemovalOptions): Promise; 218 | function removeLocalStorage(removalOptions: DataRemovalOptions & ExtraDataRemovalOptions): Promise; 219 | function removeDownloads(removalOptions: DataRemovalOptions): Promise; 220 | function removeFormData(removalOptions: DataRemovalOptions): Promise; 221 | function removeHistory(removalOptions: DataRemovalOptions): Promise; 222 | function removePasswords(removalOptions: DataRemovalOptions): Promise; 223 | function removePluginData(removalOptions: DataRemovalOptions): Promise; 224 | function settings(): Promise<{ 225 | options: DataRemovalOptions; 226 | dataToRemove: DataTypeSet; 227 | dataRemovalPermitted: DataTypeSet; 228 | }>; 229 | } 230 | 231 | declare namespace browser.commands { 232 | type Command = { 233 | name?: string; 234 | description?: string; 235 | shortcut?: string; 236 | }; 237 | 238 | function getAll(): Promise; 239 | 240 | const onCommand: Listener; 241 | } 242 | 243 | declare namespace browser.menus { 244 | type ContextType = 245 | | "all" 246 | | "audio" 247 | | "bookmarks" 248 | | "browser_action" 249 | | "editable" 250 | | "frame" 251 | | "image" 252 | // | "launcher" unsupported 253 | | "link" 254 | | "page" 255 | | "page_action" 256 | | "password" 257 | | "selection" 258 | | "tab" 259 | | "tools_menu" 260 | | "video"; 261 | 262 | type ItemType = "normal" | "checkbox" | "radio" | "separator"; 263 | 264 | type OnClickData = { 265 | bookmarkId?: string; 266 | checked?: boolean; 267 | editable: boolean; 268 | frameId?: number; 269 | frameUrl?: string; 270 | linkText?: string; 271 | linkUrl?: string; 272 | mediaType?: string; 273 | menuItemId: number | string; 274 | modifiers: string[]; 275 | pageUrl?: string; 276 | parentMenuItemId?: number | string; 277 | selectionText?: string; 278 | srcUrl?: string; 279 | targetElementId?: number; 280 | wasChecked?: boolean; 281 | }; 282 | 283 | const ACTION_MENU_TOP_LEVEL_LIMIT: number; 284 | 285 | function create( 286 | createProperties: { 287 | checked?: boolean; 288 | command?: 289 | | "_execute_browser_action" 290 | | "_execute_page_action" 291 | | "_execute_sidebar_action"; 292 | contexts?: ContextType[]; 293 | documentUrlPatterns?: string[]; 294 | enabled?: boolean; 295 | icons?: object; 296 | id?: string; 297 | onclick?: (info: OnClickData, tab: browser.tabs.Tab) => void; 298 | parentId?: number | string; 299 | targetUrlPatterns?: string[]; 300 | title?: string; 301 | type?: ItemType; 302 | visible?: boolean; 303 | }, 304 | callback?: () => void 305 | ): number | string; 306 | 307 | function getTargetElement(targetElementId: number): object | null; 308 | 309 | function refresh(): Promise; 310 | 311 | function remove(menuItemId: number | string): Promise; 312 | 313 | function removeAll(): Promise; 314 | 315 | function update( 316 | id: number | string, 317 | updateProperties: { 318 | checked?: boolean; 319 | command?: 320 | | "_execute_browser_action" 321 | | "_execute_page_action" 322 | | "_execute_sidebar_action"; 323 | contexts?: ContextType[]; 324 | documentUrlPatterns?: string[]; 325 | enabled?: boolean; 326 | onclick?: (info: OnClickData, tab: browser.tabs.Tab) => void; 327 | parentId?: number | string; 328 | targetUrlPatterns?: string[]; 329 | title?: string; 330 | type?: ItemType; 331 | visible?: boolean; 332 | } 333 | ): Promise; 334 | 335 | const onClicked: EvListener< 336 | (info: OnClickData, tab: browser.tabs.Tab) => void 337 | >; 338 | 339 | const onHidden: EvListener<() => void>; 340 | 341 | const onShown: EvListener<(info: OnClickData, tab: browser.tabs.Tab) => void>; 342 | } 343 | 344 | declare namespace browser.contextualIdentities { 345 | type IdentityColor = 346 | | "blue" 347 | | "turquoise" 348 | | "green" 349 | | "yellow" 350 | | "orange" 351 | | "red" 352 | | "pink" 353 | | "purple"; 354 | type IdentityIcon = 355 | | "fingerprint" 356 | | "briefcase" 357 | | "dollar" 358 | | "cart" 359 | | "circle"; 360 | 361 | type ContextualIdentity = { 362 | cookieStoreId: string; 363 | color: IdentityColor; 364 | icon: IdentityIcon; 365 | name: string; 366 | }; 367 | 368 | function create(details: { 369 | name: string; 370 | color: IdentityColor; 371 | icon: IdentityIcon; 372 | }): Promise; 373 | function get(cookieStoreId: string): Promise; 374 | function query(details: { name?: string }): Promise; 375 | function update( 376 | cookieStoreId: string, 377 | details: { 378 | name: string; 379 | color: IdentityColor; 380 | icon: IdentityIcon; 381 | } 382 | ): Promise; 383 | function remove(cookieStoreId: string): Promise; 384 | } 385 | 386 | declare namespace browser.cookies { 387 | type Cookie = { 388 | name: string; 389 | value: string; 390 | domain: string; 391 | hostOnly: boolean; 392 | path: string; 393 | secure: boolean; 394 | httpOnly: boolean; 395 | session: boolean; 396 | firstPartyDomain?: string; 397 | sameSite: SameSiteStatus 398 | expirationDate?: number; 399 | storeId: string; 400 | }; 401 | 402 | type CookieStore = { 403 | id: string; 404 | incognito: boolean; 405 | tabIds: number[]; 406 | }; 407 | 408 | type SameSiteStatus = 409 | | 'no_restriction' 410 | | 'lax' 411 | | 'strict' 412 | 413 | type OnChangedCause = 414 | | "evicted" 415 | | "expired" 416 | | "explicit" 417 | | "expired_overwrite" 418 | | "overwrite"; 419 | 420 | function get(details: { 421 | url: string; 422 | name: string; 423 | storeId?: string; 424 | firstPartyDomain?: string; 425 | }): Promise; 426 | function getAll(details: { 427 | url?: string; 428 | name?: string; 429 | domain?: string; 430 | path?: string; 431 | secure?: boolean; 432 | session?: boolean; 433 | storeId?: string; 434 | firstPartyDomain?: string; 435 | }): Promise; 436 | function set(details: { 437 | domain?: string; 438 | expirationDate?: number; 439 | firstPartyDomain?: string; 440 | httpOnly?: boolean; 441 | name?: string; 442 | path?: string; 443 | sameSite?: SameSiteStatus; 444 | secure?: boolean; 445 | storeId?: string; 446 | url: string; 447 | value?: string; 448 | }): Promise; 449 | function remove(details: { 450 | url: string; 451 | name: string; 452 | storeId?: string; 453 | firstPartyDomain?: string; 454 | }): Promise; 455 | function getAllCookieStores(): Promise; 456 | 457 | const onChanged: Listener<{ 458 | removed: boolean; 459 | cookie: Cookie; 460 | cause: OnChangedCause; 461 | }>; 462 | } 463 | 464 | declare namespace browser.contentScripts { 465 | type RegisteredContentScriptOptions = { 466 | allFrames?: boolean; 467 | css?: ({ file: string } | { code: string })[]; 468 | excludeGlobs?: string[]; 469 | excludeMatches?: string[]; 470 | includeGlobs?: string[]; 471 | js?: ({ file: string } | { code: string })[]; 472 | matchAboutBlank?: boolean; 473 | matches: string[]; 474 | runAt?: "document_start" | "document_end" | "document_idle"; 475 | }; 476 | 477 | type RegisteredContentScript = { 478 | unregister: () => void; 479 | }; 480 | 481 | function register( 482 | contentScriptOptions: RegisteredContentScriptOptions 483 | ): Promise; 484 | } 485 | 486 | declare namespace browser.devtools.inspectedWindow { 487 | const tabId: number; 488 | 489 | function eval( 490 | expression: string 491 | ): Promise< 492 | [ 493 | any, 494 | 495 | 496 | | { isException: boolean; value: string } 497 | | { isError: boolean; code: string } 498 | ] 499 | >; 500 | 501 | function reload(reloadOptions?: { 502 | ignoreCache?: boolean; 503 | userAgent?: string; 504 | injectedScript?: string; 505 | }): void; 506 | } 507 | 508 | declare namespace browser.devtools.network { 509 | const onNavigated: Listener; 510 | } 511 | 512 | declare namespace browser.devtools.panels { 513 | type ExtensionPanel = { 514 | onShown: Listener; 515 | onHidden: Listener; 516 | }; 517 | 518 | function create( 519 | title: string, 520 | iconPath: string, 521 | pagePath: string 522 | ): Promise; 523 | } 524 | 525 | declare namespace browser.downloads { 526 | type FilenameConflictAction = "uniquify" | "overwrite" | "prompt"; 527 | 528 | type InterruptReason = 529 | | "FILE_FAILED" 530 | | "FILE_ACCESS_DENIED" 531 | | "FILE_NO_SPACE" 532 | | "FILE_NAME_TOO_LONG" 533 | | "FILE_TOO_LARGE" 534 | | "FILE_VIRUS_INFECTED" 535 | | "FILE_TRANSIENT_ERROR" 536 | | "FILE_BLOCKED" 537 | | "FILE_SECURITY_CHECK_FAILED" 538 | | "FILE_TOO_SHORT" 539 | | "NETWORK_FAILED" 540 | | "NETWORK_TIMEOUT" 541 | | "NETWORK_DISCONNECTED" 542 | | "NETWORK_SERVER_DOWN" 543 | | "NETWORK_INVALID_REQUEST" 544 | | "SERVER_FAILED" 545 | | "SERVER_NO_RANGE" 546 | | "SERVER_BAD_CONTENT" 547 | | "SERVER_UNAUTHORIZED" 548 | | "SERVER_CERT_PROBLEM" 549 | | "SERVER_FORBIDDEN" 550 | | "USER_CANCELED" 551 | | "USER_SHUTDOWN" 552 | | "CRASH"; 553 | 554 | type DangerType = 555 | | "file" 556 | | "url" 557 | | "content" 558 | | "uncommon" 559 | | "host" 560 | | "unwanted" 561 | | "safe" 562 | | "accepted"; 563 | 564 | type State = "in_progress" | "interrupted" | "complete"; 565 | 566 | type DownloadItem = { 567 | id: number; 568 | url: string; 569 | referrer: string; 570 | filename: string; 571 | incognito: boolean; 572 | danger: string; 573 | mime: string; 574 | startTime: string; 575 | endTime?: string; 576 | estimatedEndTime?: string; 577 | state: string; 578 | paused: boolean; 579 | canResume: boolean; 580 | error?: string; 581 | bytesReceived: number; 582 | totalBytes: number; 583 | fileSize: number; 584 | exists: boolean; 585 | byExtensionId?: string; 586 | byExtensionName?: string; 587 | }; 588 | 589 | type Delta = { 590 | current?: T; 591 | previous?: T; 592 | }; 593 | 594 | type StringDelta = Delta; 595 | type DoubleDelta = Delta; 596 | type BooleanDelta = Delta; 597 | type DownloadTime = Date | string | number; 598 | 599 | type DownloadQuery = { 600 | query?: string[]; 601 | startedBefore?: DownloadTime; 602 | startedAfter?: DownloadTime; 603 | endedBefore?: DownloadTime; 604 | endedAfter?: DownloadTime; 605 | totalBytesGreater?: number; 606 | totalBytesLess?: number; 607 | filenameRegex?: string; 608 | urlRegex?: string; 609 | limit?: number; 610 | orderBy?: string; 611 | id?: number; 612 | url?: string; 613 | filename?: string; 614 | danger?: DangerType; 615 | mime?: string; 616 | startTime?: string; 617 | endTime?: string; 618 | state?: State; 619 | paused?: boolean; 620 | error?: InterruptReason; 621 | bytesReceived?: number; 622 | totalBytes?: number; 623 | fileSize?: number; 624 | exists?: boolean; 625 | }; 626 | 627 | function download(options: { 628 | url: string; 629 | filename?: string; 630 | conflictAction?: string; 631 | saveAs?: boolean; 632 | method?: string; 633 | headers?: { [key: string]: string }; 634 | body?: string; 635 | }): Promise; 636 | function search(query: DownloadQuery): Promise; 637 | function pause(downloadId: number): Promise; 638 | function resume(downloadId: number): Promise; 639 | function cancel(downloadId: number): Promise; 640 | // unsupported: function getFileIcon(downloadId: number, options?: { size?: number }): 641 | // Promise; 642 | function open(downloadId: number): Promise; 643 | function show(downloadId: number): Promise; 644 | function showDefaultFolder(): void; 645 | function erase(query: DownloadQuery): Promise; 646 | function removeFile(downloadId: number): Promise; 647 | // unsupported: function acceptDanger(downloadId: number): Promise; 648 | // unsupported: function drag(downloadId: number): Promise; 649 | // unsupported: function setShelfEnabled(enabled: boolean): void; 650 | 651 | const onCreated: Listener; 652 | const onErased: Listener; 653 | const onChanged: Listener<{ 654 | id: number; 655 | url?: StringDelta; 656 | filename?: StringDelta; 657 | danger?: StringDelta; 658 | mime?: StringDelta; 659 | startTime?: StringDelta; 660 | endTime?: StringDelta; 661 | state?: StringDelta; 662 | canResume?: BooleanDelta; 663 | paused?: BooleanDelta; 664 | error?: StringDelta; 665 | totalBytes?: DoubleDelta; 666 | fileSize?: DoubleDelta; 667 | exists?: BooleanDelta; 668 | }>; 669 | } 670 | 671 | declare namespace browser.events { 672 | type UrlFilter = { 673 | hostContains?: string; 674 | hostEquals?: string; 675 | hostPrefix?: string; 676 | hostSuffix?: string; 677 | pathContains?: string; 678 | pathEquals?: string; 679 | pathPrefix?: string; 680 | pathSuffix?: string; 681 | queryContains?: string; 682 | queryEquals?: string; 683 | queryPrefix?: string; 684 | querySuffix?: string; 685 | urlContains?: string; 686 | urlEquals?: string; 687 | urlMatches?: string; 688 | originAndPathMatches?: string; 689 | urlPrefix?: string; 690 | urlSuffix?: string; 691 | schemes?: string[]; 692 | ports?: Array; 693 | }; 694 | } 695 | 696 | declare namespace browser.extension { 697 | type ViewType = "tab" | "notification" | "popup"; 698 | 699 | const lastError: string | null; 700 | const inIncognitoContext: boolean; 701 | 702 | function getURL(path: string): string; 703 | function getViews(fetchProperties?: { 704 | type?: ViewType; 705 | windowId?: number; 706 | }): Window[]; 707 | function getBackgroundPage(): Window; 708 | function isAllowedIncognitoAccess(): Promise; 709 | function isAllowedFileSchemeAccess(): Promise; 710 | // unsupported: events as they are deprecated 711 | } 712 | 713 | declare namespace browser.extensionTypes { 714 | type ImageFormat = "jpeg" | "png"; 715 | type ImageDetails = { 716 | format: ImageFormat; 717 | quality: number; 718 | }; 719 | type RunAt = "document_start" | "document_end" | "document_idle"; 720 | type InjectDetails = { 721 | allFrames?: boolean; 722 | code?: string; 723 | file?: string; 724 | frameId?: number; 725 | matchAboutBlank?: boolean; 726 | runAt?: RunAt; 727 | }; 728 | type InjectDetailsCSS = InjectDetails & { cssOrigin?: "user" | "author" }; 729 | } 730 | 731 | declare namespace browser.find { 732 | type FindOptions = { 733 | tabid: number; 734 | caseSensitive: boolean; 735 | entireWord: boolean; 736 | includeRangeData: boolean; 737 | includeRectData: boolean; 738 | }; 739 | 740 | type FindResults = { 741 | count: number; 742 | rangeData?: RangeData[]; 743 | rectData?: RectData[]; 744 | }; 745 | 746 | type RangeData = { 747 | framePos: number; 748 | startTextNodePos: number; 749 | endTextNodePos: number; 750 | startOffset: number; 751 | endOffset: number; 752 | text: string; 753 | }; 754 | 755 | type RectData = { 756 | rectsAndTexts: RectsAndTexts; 757 | text: string; 758 | }; 759 | 760 | type RectsAndTexts = { 761 | rectList: RectItem[]; 762 | textList: string[]; 763 | }; 764 | 765 | type RectItem = { 766 | top: number; 767 | left: number; 768 | bottom: number; 769 | right: number; 770 | }; 771 | 772 | function find(query: string, object?: FindOptions): Promise; 773 | function highlightResults(): void; 774 | function removeHighlighting(): void; 775 | } 776 | 777 | declare namespace browser.history { 778 | type TransitionType = 779 | | "link" 780 | | "typed" 781 | | "auto_bookmark" 782 | | "auto_subframe" 783 | | "manual_subframe" 784 | | "generated" 785 | | "auto_toplevel" 786 | | "form_submit" 787 | | "reload" 788 | | "keyword" 789 | | "keyword_generated"; 790 | 791 | type HistoryItem = { 792 | id: string; 793 | url?: string; 794 | title?: string; 795 | lastVisitTime?: number; 796 | visitCount?: number; 797 | typedCount?: number; 798 | }; 799 | 800 | type VisitItem = { 801 | id: string; 802 | visitId: string; 803 | visitTime?: number; 804 | refferingVisitId: string; 805 | transition: TransitionType; 806 | }; 807 | 808 | function search(query: { 809 | text: string; 810 | startTime?: number | string | Date; 811 | endTime?: number | string | Date; 812 | maxResults?: number; 813 | }): Promise; 814 | 815 | function getVisits(details: { url: string }): Promise; 816 | 817 | function addUrl(details: { 818 | url: string; 819 | title?: string; 820 | transition?: TransitionType; 821 | visitTime?: number | string | Date; 822 | }): Promise; 823 | 824 | function deleteUrl(details: { url: string }): Promise; 825 | 826 | function deleteRange(range: { 827 | startTime: number | string | Date; 828 | endTime: number | string | Date; 829 | }): Promise; 830 | 831 | function deleteAll(): Promise; 832 | 833 | const onVisited: Listener; 834 | 835 | // TODO: Ensure that urls is not `urls: [string]` instead 836 | const onVisitRemoved: Listener<{ allHistory: boolean; urls: string[] }>; 837 | } 838 | 839 | declare namespace browser.i18n { 840 | type LanguageCode = string; 841 | 842 | function getAcceptLanguages(): Promise; 843 | 844 | function getMessage( 845 | messageName: string, 846 | substitutions?: string | string[] 847 | ): string; 848 | 849 | function getUILanguage(): LanguageCode; 850 | 851 | function detectLanguage( 852 | text: string 853 | ): Promise<{ 854 | isReliable: boolean; 855 | languages: { language: LanguageCode; percentage: number }[]; 856 | }>; 857 | } 858 | 859 | declare namespace browser.identity { 860 | function getRedirectURL(): string; 861 | function launchWebAuthFlow(details: { 862 | url: string; 863 | interactive: boolean; 864 | }): Promise; 865 | } 866 | 867 | declare namespace browser.idle { 868 | type IdleState = "active" | "idle" /* unsupported: | "locked" */; 869 | 870 | function queryState(detectionIntervalInSeconds: number): Promise; 871 | function setDetectionInterval(intervalInSeconds: number): void; 872 | 873 | const onStateChanged: Listener; 874 | } 875 | 876 | declare namespace browser.management { 877 | type ExtensionInfo = { 878 | description: string; 879 | // unsupported: disabledReason: string, 880 | enabled: boolean; 881 | homepageUrl: string; 882 | hostPermissions: string[]; 883 | icons: { size: number; url: string }[]; 884 | id: string; 885 | installType: "admin" | "development" | "normal" | "sideload" | "other"; 886 | mayDisable: boolean; 887 | name: string; 888 | // unsupported: offlineEnabled: boolean, 889 | optionsUrl: string; 890 | permissions: string[]; 891 | shortName: string; 892 | // unsupported: type: string, 893 | updateUrl: string; 894 | version: string; 895 | // unsupported: versionName: string, 896 | }; 897 | 898 | function getSelf(): Promise; 899 | function uninstallSelf(options: { 900 | showConfirmDialog: boolean; 901 | dialogMessage: string; 902 | }): Promise; 903 | } 904 | 905 | declare namespace browser.notifications { 906 | type TemplateType = "basic" /* | "image" | "list" | "progress" */; 907 | 908 | type NotificationOptions = { 909 | type: TemplateType; 910 | message: string; 911 | title: string; 912 | iconUrl?: string; 913 | }; 914 | 915 | function create( 916 | id: string | null, 917 | options: NotificationOptions 918 | ): Promise; 919 | function create(options: NotificationOptions): Promise; 920 | 921 | function clear(id: string): Promise; 922 | 923 | function getAll(): Promise<{ [key: string]: NotificationOptions }>; 924 | 925 | const onClosed: Listener; 926 | 927 | const onClicked: Listener; 928 | } 929 | 930 | declare namespace browser.omnibox { 931 | type OnInputEnteredDisposition = 932 | | "currentTab" 933 | | "newForegroundTab" 934 | | "newBackgroundTab"; 935 | type SuggestResult = { 936 | content: string; 937 | description: string; 938 | }; 939 | 940 | function setDefaultSuggestion(suggestion: { description: string }): void; 941 | 942 | const onInputStarted: Listener; 943 | const onInputChanged: EvListener< 944 | (text: string, suggest: (arg: SuggestResult[]) => void) => void 945 | >; 946 | const onInputEntered: EvListener< 947 | (text: string, disposition: OnInputEnteredDisposition) => void 948 | >; 949 | const onInputCancelled: Listener; 950 | } 951 | 952 | declare namespace browser.pageAction { 953 | type ImageDataType = ImageData; 954 | 955 | function show(tabId: number): void; 956 | 957 | function hide(tabId: number): void; 958 | 959 | function setTitle(details: { tabId: number; title: string }): void; 960 | 961 | function getTitle(details: { tabId: number }): Promise; 962 | 963 | function setIcon(details: { 964 | tabId: number; 965 | path?: string | object; 966 | imageData?: ImageDataType; 967 | }): Promise; 968 | 969 | function setPopup(details: { tabId: number; popup: string }): void; 970 | 971 | function getPopup(details: { tabId: number }): Promise; 972 | 973 | const onClicked: Listener; 974 | } 975 | 976 | declare namespace browser.permissions { 977 | type Permission = 978 | | "activeTab" 979 | | "alarms" 980 | | "background" 981 | | "bookmarks" 982 | | "browsingData" 983 | | "browserSettings" 984 | | "clipboardRead" 985 | | "clipboardWrite" 986 | | "contextMenus" 987 | | "contextualIdentities" 988 | | "cookies" 989 | | "downloads" 990 | | "downloads.open" 991 | | "find" 992 | | "geolocation" 993 | | "history" 994 | | "identity" 995 | | "idle" 996 | | "management" 997 | | "menus" 998 | | "nativeMessaging" 999 | | "notifications" 1000 | | "pkcs11" 1001 | | "privacy" 1002 | | "proxy" 1003 | | "sessions" 1004 | | "storage" 1005 | | "tabs" 1006 | | "theme" 1007 | | "topSites" 1008 | | "unlimitedStorage" 1009 | | "webNavigation" 1010 | | "webRequest" 1011 | | "webRequestBlocking"; 1012 | 1013 | type Permissions = { 1014 | origins?: string[]; 1015 | permissions?: Permission[]; 1016 | }; 1017 | 1018 | function contains(permissions: Permissions): Promise; 1019 | 1020 | function getAll(): Promise; 1021 | 1022 | function remove(permissions: Permissions): Promise; 1023 | 1024 | function request(permissions: Permissions): Promise; 1025 | 1026 | // Not yet support in Edge and Firefox: 1027 | // const onAdded: Listener; 1028 | // const onRemoved: Listener; 1029 | } 1030 | 1031 | declare namespace browser.runtime { 1032 | const lastError: string | null; 1033 | const id: string; 1034 | 1035 | type Port = { 1036 | name: string; 1037 | disconnect(): void; 1038 | error: object; 1039 | onDisconnect: Listener; 1040 | onMessage: Listener; 1041 | postMessage: (message: T) => void; 1042 | sender?: runtime.MessageSender; 1043 | }; 1044 | 1045 | type MessageSender = { 1046 | tab?: browser.tabs.Tab; 1047 | frameId?: number; 1048 | id?: string; 1049 | url?: string; 1050 | tlsChannelId?: string; 1051 | }; 1052 | 1053 | type PlatformOs = "mac" | "win" | "android" | "cros" | "linux" | "openbsd"; 1054 | type PlatformArch = "arm" | "x86-32" | "x86-64"; 1055 | type PlatformNaclArch = "arm" | "x86-32" | "x86-64"; 1056 | 1057 | type PlatformInfo = { 1058 | os: PlatformOs; 1059 | arch: PlatformArch; 1060 | }; 1061 | 1062 | // type RequestUpdateCheckStatus = "throttled" | "no_update" | "update_available"; 1063 | type OnInstalledReason = 1064 | | "install" 1065 | | "update" 1066 | | "chrome_update" 1067 | | "shared_module_update"; 1068 | type OnRestartRequiredReason = "app_update" | "os_update" | "periodic"; 1069 | 1070 | type FirefoxSpecificProperties = { 1071 | id?: string; 1072 | strict_min_version?: string; 1073 | strict_max_version?: string; 1074 | update_url?: string; 1075 | }; 1076 | 1077 | type IconPath = { [urlName: string]: string } | string; 1078 | 1079 | type Manifest = { 1080 | // Required 1081 | manifest_version: 2; 1082 | name: string; 1083 | version: string; 1084 | /** Required in Microsoft Edge */ 1085 | author?: string; 1086 | 1087 | // Optional 1088 | 1089 | // ManifestBase 1090 | description?: string; 1091 | homepage_url?: string; 1092 | short_name?: string; 1093 | 1094 | // WebExtensionManifest 1095 | background?: { 1096 | page: string; 1097 | scripts: string[]; 1098 | persistent?: boolean; 1099 | }; 1100 | content_scripts?: { 1101 | matches: string[]; 1102 | exclude_matches?: string[]; 1103 | include_globs?: string[]; 1104 | exclude_globs?: string[]; 1105 | css?: string[]; 1106 | js?: string[]; 1107 | all_frames?: boolean; 1108 | match_about_blank?: boolean; 1109 | run_at?: "document_start" | "document_end" | "document_idle"; 1110 | }[]; 1111 | content_security_policy?: string; 1112 | developer?: { 1113 | name?: string; 1114 | url?: string; 1115 | }; 1116 | icons?: { 1117 | [imgSize: string]: string; 1118 | }; 1119 | incognito?: "spanning" | "split" | "not_allowed"; 1120 | optional_permissions?: browser.permissions.Permission[]; 1121 | options_ui?: { 1122 | page: string; 1123 | browser_style?: boolean; 1124 | chrome_style?: boolean; 1125 | open_in_tab?: boolean; 1126 | }; 1127 | permissions?: browser.permissions.Permission[]; 1128 | web_accessible_resources?: string[]; 1129 | 1130 | // WebExtensionLangpackManifest 1131 | languages: { 1132 | [langCode: string]: { 1133 | chrome_resources: { 1134 | [resName: string]: string | { [urlName: string]: string }; 1135 | }; 1136 | version: string; 1137 | }; 1138 | }; 1139 | langpack_id?: string; 1140 | sources?: { 1141 | [srcName: string]: { 1142 | base_path: string; 1143 | paths?: string[]; 1144 | }; 1145 | }; 1146 | 1147 | // Extracted from components 1148 | browser_action?: { 1149 | default_title?: string; 1150 | default_icon?: IconPath; 1151 | theme_icons?: { 1152 | light: string; 1153 | dark: string; 1154 | size: number; 1155 | }[]; 1156 | default_popup?: string; 1157 | browser_style?: boolean; 1158 | default_area?: "navbar" | "menupanel" | "tabstrip" | "personaltoolbar"; 1159 | }; 1160 | commands?: { 1161 | [keyName: string]: { 1162 | suggested_key?: { 1163 | default?: string; 1164 | mac?: string; 1165 | linux?: string; 1166 | windows?: string; 1167 | chromeos?: string; 1168 | android?: string; 1169 | ios?: string; 1170 | }; 1171 | description?: string; 1172 | }; 1173 | }; 1174 | default_locale?: browser.i18n.LanguageCode; 1175 | devtools_page?: string; 1176 | omnibox?: { 1177 | keyword: string; 1178 | }; 1179 | page_action?: { 1180 | default_title?: string; 1181 | default_icon?: IconPath; 1182 | default_popup?: string; 1183 | browser_style?: boolean; 1184 | show_matches?: string[]; 1185 | hide_matches?: string[]; 1186 | }; 1187 | sidebar_action?: { 1188 | default_panel: string; 1189 | default_title?: string; 1190 | default_icon?: IconPath; 1191 | browser_style?: boolean; 1192 | }; 1193 | 1194 | // Firefox specific 1195 | applications?: { 1196 | gecko?: FirefoxSpecificProperties; 1197 | }; 1198 | browser_specific_settings?: { 1199 | gecko?: FirefoxSpecificProperties; 1200 | }; 1201 | experiment_apis?: any; 1202 | protocol_handlers?: { 1203 | name: string; 1204 | protocol: string; 1205 | uriTemplate: string; 1206 | }; 1207 | 1208 | // Opera specific 1209 | minimum_opera_version?: string; 1210 | 1211 | // Chrome specific 1212 | action?: any; 1213 | automation?: any; 1214 | background_page?: any; 1215 | chrome_settings_overrides?: { 1216 | homepage?: string; 1217 | search_provider?: { 1218 | name: string; 1219 | search_url: string; 1220 | keyword?: string; 1221 | favicon_url?: string; 1222 | suggest_url?: string; 1223 | instant_url?: string; 1224 | is_default?: string; 1225 | image_url?: string; 1226 | search_url_post_params?: string; 1227 | instant_url_post_params?: string; 1228 | image_url_post_params?: string; 1229 | alternate_urls?: string[]; 1230 | prepopulated_id?: number; 1231 | }; 1232 | }; 1233 | chrome_ui_overrides?: { 1234 | bookmarks_ui?: { 1235 | remove_bookmark_shortcut?: true; 1236 | remove_button?: true; 1237 | }; 1238 | }; 1239 | chrome_url_overrides?: { 1240 | newtab?: string; 1241 | bookmarks?: string; 1242 | history?: string; 1243 | }; 1244 | content_capabilities?: any; 1245 | converted_from_user_script?: any; 1246 | current_locale?: any; 1247 | declarative_net_request?: any; 1248 | event_rules?: any[]; 1249 | export?: { 1250 | whitelist?: string[]; 1251 | }; 1252 | externally_connectable?: { 1253 | ids?: string[]; 1254 | matches?: string[]; 1255 | accepts_tls_channel_id?: boolean; 1256 | }; 1257 | file_browser_handlers?: { 1258 | id: string; 1259 | default_title: string; 1260 | file_filters: string[]; 1261 | }[]; 1262 | file_system_provider_capabilities?: { 1263 | source: "file" | "device" | "network"; 1264 | configurable?: boolean; 1265 | multiple_mounts?: boolean; 1266 | watchable?: boolean; 1267 | }; 1268 | import?: { 1269 | id: string; 1270 | minimum_version?: string; 1271 | }[]; 1272 | input_components?: any; 1273 | key?: string; 1274 | minimum_chrome_version?: string; 1275 | nacl_modules?: { 1276 | path: string; 1277 | mime_type: string; 1278 | }[]; 1279 | oauth2?: any; 1280 | offline_enabled?: boolean; 1281 | options_page?: string; 1282 | platforms?: any; 1283 | requirements?: any; 1284 | sandbox?: { 1285 | pages: string[]; 1286 | content_security_policy?: string; 1287 | }[]; 1288 | signature?: any; 1289 | spellcheck?: any; 1290 | storage?: { 1291 | managed_schema: string; 1292 | }; 1293 | system_indicator?: any; 1294 | tts_engine?: { 1295 | voice: { 1296 | voice_name: string; 1297 | lang?: string; 1298 | gender?: "male" | "female"; 1299 | event_types: ( 1300 | | "start" 1301 | | "word" 1302 | | "sentence" 1303 | | "marker" 1304 | | "end" 1305 | | "error")[]; 1306 | }[]; 1307 | }; 1308 | update_url?: string; 1309 | version_name?: string; 1310 | }; 1311 | 1312 | function getBackgroundPage(): Promise; 1313 | function openOptionsPage(): Promise; 1314 | function getManifest(): Manifest; 1315 | 1316 | function getURL(path: string): string; 1317 | function setUninstallURL(url: string): Promise; 1318 | function reload(): void; 1319 | // Will not exist: https://bugzilla.mozilla.org/show_bug.cgi?id=1314922 1320 | // function RequestUpdateCheck(): Promise; 1321 | function connect( 1322 | connectInfo?: { name?: string; includeTlsChannelId?: boolean } 1323 | ): Port; 1324 | function connect( 1325 | extensionId?: string, 1326 | connectInfo?: { name?: string; includeTlsChannelId?: boolean } 1327 | ): Port; 1328 | function connectNative(application: string): Port; 1329 | 1330 | function sendMessage(message: T): Promise; 1331 | function sendMessage( 1332 | message: T, 1333 | options: { includeTlsChannelId?: boolean; toProxyScript?: boolean } 1334 | ): Promise; 1335 | function sendMessage( 1336 | extensionId: string, 1337 | message: T 1338 | ): Promise; 1339 | function sendMessage( 1340 | extensionId: string, 1341 | message: T, 1342 | options?: { includeTlsChannelId?: boolean; toProxyScript?: boolean } 1343 | ): Promise; 1344 | 1345 | function sendNativeMessage( 1346 | application: string, 1347 | message: object 1348 | ): Promise; 1349 | function getPlatformInfo(): Promise; 1350 | function getBrowserInfo(): Promise<{ 1351 | name: string; 1352 | vendor: string; 1353 | version: string; 1354 | buildID: string; 1355 | }>; 1356 | // Unsupported: https://bugzilla.mozilla.org/show_bug.cgi?id=1339407 1357 | // function getPackageDirectoryEntry(): Promise; 1358 | 1359 | const onStartup: Listener; 1360 | const onInstalled: Listener<{ 1361 | reason: OnInstalledReason; 1362 | previousVersion?: string; 1363 | id?: string; 1364 | }>; 1365 | // Unsupported 1366 | // const onSuspend: Listener; 1367 | // const onSuspendCanceled: Listener; 1368 | // const onBrowserUpdateAvailable: Listener; 1369 | // const onRestartRequired: Listener; 1370 | const onUpdateAvailable: Listener<{ version: string }>; 1371 | const onConnect: Listener; 1372 | 1373 | const onConnectExternal: Listener; 1374 | 1375 | type onMessagePromise = ( 1376 | message: object, 1377 | sender: MessageSender, 1378 | sendResponse: (response: object) => boolean 1379 | ) => Promise; 1380 | 1381 | type onMessageBool = ( 1382 | message: object, 1383 | sender: MessageSender, 1384 | sendResponse: (response: object) => Promise 1385 | ) => boolean; 1386 | 1387 | type onMessageVoid = ( 1388 | message: object, 1389 | sender: MessageSender, 1390 | sendResponse: (response: object) => Promise 1391 | ) => void; 1392 | 1393 | type onMessageEvent = onMessagePromise | onMessageBool | onMessageVoid; 1394 | const onMessage: EvListener; 1395 | 1396 | const onMessageExternal: EvListener; 1397 | } 1398 | 1399 | declare namespace browser.sessions { 1400 | type Filter = { maxResults?: number }; 1401 | 1402 | type Session = { 1403 | lastModified: number; 1404 | tab: browser.tabs.Tab; 1405 | window: browser.windows.Window; 1406 | }; 1407 | 1408 | const MAX_SESSION_RESULTS: number; 1409 | 1410 | function getRecentlyClosed(filter?: Filter): Promise; 1411 | 1412 | function restore(sessionId: string): Promise; 1413 | 1414 | function setTabValue( 1415 | tabId: number, 1416 | key: string, 1417 | value: string | object 1418 | ): Promise; 1419 | 1420 | function getTabValue( 1421 | tabId: number, 1422 | key: string 1423 | ): Promise; 1424 | 1425 | function removeTabValue(tabId: number, key: string): Promise; 1426 | 1427 | function setWindowValue( 1428 | windowId: number, 1429 | key: string, 1430 | value: string | object 1431 | ): Promise; 1432 | 1433 | function getWindowValue( 1434 | windowId: number, 1435 | key: string 1436 | ): Promise; 1437 | 1438 | function removeWindowValue(windowId: number, key: string): Promise; 1439 | 1440 | const onChanged: EvListener<() => void>; 1441 | } 1442 | 1443 | declare namespace browser.sidebarAction { 1444 | type ImageDataType = ImageData; 1445 | 1446 | function setPanel(details: { panel: string; tabId?: number }): void; 1447 | 1448 | function getPanel(details: { tabId?: number }): Promise; 1449 | 1450 | function setTitle(details: { title: string; tabId?: number }): void; 1451 | 1452 | function getTitle(details: { tabId?: number }): Promise; 1453 | 1454 | type IconViaPath = { 1455 | path: string | { [index: number]: string }; 1456 | tabId?: number; 1457 | }; 1458 | 1459 | type IconViaImageData = { 1460 | imageData: ImageDataType | { [index: number]: ImageDataType }; 1461 | tabId?: number; 1462 | }; 1463 | 1464 | function setIcon(details: IconViaPath | IconViaImageData): Promise; 1465 | 1466 | function open(): Promise; 1467 | 1468 | function close(): Promise; 1469 | } 1470 | 1471 | declare namespace browser.storage { 1472 | // Non-firefox implementations don't accept all these types 1473 | type StorageValue = 1474 | | string 1475 | | number 1476 | | boolean 1477 | | null 1478 | | undefined 1479 | | RegExp 1480 | | ArrayBuffer 1481 | | Uint8ClampedArray 1482 | | Uint8Array 1483 | | Uint16Array 1484 | | Uint32Array 1485 | | Int8Array 1486 | | Int16Array 1487 | | Int32Array 1488 | | Float32Array 1489 | | Float64Array 1490 | | DataView 1491 | | StorageArray 1492 | | StorageMap 1493 | | StorageSet 1494 | | StorageObject; 1495 | 1496 | // The Index signature makes casting to/from classes or interfaces a pain. 1497 | // Custom types are OK. 1498 | interface StorageObject { 1499 | [key: string]: StorageValue; 1500 | } 1501 | // These have to be interfaces rather than types to avoid a circular 1502 | // definition of StorageValue 1503 | interface StorageArray extends Array {} 1504 | interface StorageMap extends Map {} 1505 | interface StorageSet extends Set {} 1506 | 1507 | interface Get { 1508 | (keys?: string | string[] | null): Promise; 1509 | /* (keys: T): Promise<{[K in keyof T]: T[K]}>; */ 1510 | (keys: T): Promise; 1511 | } 1512 | 1513 | type StorageArea = { 1514 | get: Get; 1515 | // unsupported: getBytesInUse: (keys: string|string[]|null) => Promise, 1516 | set: (keys: StorageObject) => Promise; 1517 | remove: (keys: string | string[]) => Promise; 1518 | clear: () => Promise; 1519 | }; 1520 | 1521 | type StorageChange = { 1522 | oldValue?: any; 1523 | newValue?: any; 1524 | }; 1525 | 1526 | const sync: StorageArea; 1527 | const local: StorageArea; 1528 | // unsupported: const managed: StorageArea; 1529 | 1530 | type ChangeDict = { [field: string]: StorageChange }; 1531 | type StorageName = "sync" | "local" /* |"managed" */; 1532 | 1533 | const onChanged: EvListener< 1534 | (changes: ChangeDict, areaName: StorageName) => void 1535 | >; 1536 | } 1537 | 1538 | declare namespace browser.tabs { 1539 | type MutedInfoReason = "capture" | "extension" | "user"; 1540 | type MutedInfo = { 1541 | muted: boolean; 1542 | extensionId?: string; 1543 | reason: MutedInfoReason; 1544 | }; 1545 | // TODO: Specify PageSettings properly. 1546 | type PageSettings = object; 1547 | type Tab = { 1548 | active: boolean; 1549 | audible?: boolean; 1550 | autoDiscardable?: boolean; 1551 | cookieStoreId?: string; 1552 | discarded?: boolean; 1553 | favIconUrl?: string; 1554 | height?: number; 1555 | hidden: boolean; 1556 | highlighted: boolean; 1557 | id?: number; 1558 | incognito: boolean; 1559 | index: number; 1560 | isArticle: boolean; 1561 | isInReaderMode: boolean; 1562 | lastAccessed: number; 1563 | mutedInfo?: MutedInfo; 1564 | openerTabId?: number; 1565 | pinned: boolean; 1566 | selected: boolean; 1567 | sessionId?: string; 1568 | status?: string; 1569 | title?: string; 1570 | url?: string; 1571 | width?: number; 1572 | windowId: number; 1573 | }; 1574 | 1575 | type TabStatus = "loading" | "complete"; 1576 | type WindowType = "normal" | "popup" | "panel" | "devtools"; 1577 | type ZoomSettingsMode = "automatic" | "disabled" | "manual"; 1578 | type ZoomSettingsScope = "per-origin" | "per-tab"; 1579 | type ZoomSettings = { 1580 | defaultZoomFactor?: number; 1581 | mode?: ZoomSettingsMode; 1582 | scope?: ZoomSettingsScope; 1583 | }; 1584 | 1585 | const TAB_ID_NONE: number; 1586 | 1587 | function connect( 1588 | tabId: number, 1589 | connectInfo?: { name?: string; frameId?: number } 1590 | ): browser.runtime.Port; 1591 | function create(createProperties: { 1592 | active?: boolean; 1593 | cookieStoreId?: string; 1594 | index?: number; 1595 | openerTabId?: number; 1596 | pinned?: boolean; 1597 | // deprecated: selected: boolean, 1598 | url?: string; 1599 | windowId?: number; 1600 | }): Promise; 1601 | function captureTab( 1602 | tabId?: number, 1603 | options?: browser.extensionTypes.ImageDetails 1604 | ): Promise; 1605 | function captureVisibleTab( 1606 | windowId?: number, 1607 | options?: browser.extensionTypes.ImageDetails 1608 | ): Promise; 1609 | function detectLanguage(tabId?: number): Promise; 1610 | function duplicate(tabId: number): Promise; 1611 | function executeScript( 1612 | tabId: number | undefined, 1613 | details: browser.extensionTypes.InjectDetails 1614 | ): Promise; 1615 | function get(tabId: number): Promise; 1616 | // deprecated: function getAllInWindow(): x; 1617 | function getCurrent(): Promise; 1618 | // deprecated: function getSelected(windowId?: number): Promise; 1619 | function getZoom(tabId?: number): Promise; 1620 | function getZoomSettings(tabId?: number): Promise; 1621 | function hide(tabIds: number | number[]): Promise; 1622 | // unsupported: function highlight(highlightInfo: { 1623 | // windowId?: number, 1624 | // tabs: number[]|number, 1625 | // }): Promise; 1626 | function insertCSS( 1627 | tabId: number | undefined, 1628 | details: browser.extensionTypes.InjectDetailsCSS 1629 | ): Promise; 1630 | function removeCSS( 1631 | tabId: number | undefined, 1632 | details: browser.extensionTypes.InjectDetails 1633 | ): Promise; 1634 | function move( 1635 | tabIds: number | number[], 1636 | moveProperties: { 1637 | windowId?: number; 1638 | index: number; 1639 | } 1640 | ): Promise; 1641 | function print(): Promise; 1642 | function printPreview(): Promise; 1643 | function query(queryInfo: { 1644 | active?: boolean; 1645 | audible?: boolean; 1646 | // unsupported: autoDiscardable?: boolean, 1647 | cookieStoreId?: string; 1648 | currentWindow?: boolean; 1649 | discarded?: boolean; 1650 | hidden?: boolean; 1651 | highlighted?: boolean; 1652 | index?: number; 1653 | muted?: boolean; 1654 | lastFocusedWindow?: boolean; 1655 | pinned?: boolean; 1656 | status?: TabStatus; 1657 | title?: string; 1658 | url?: string | string[]; 1659 | windowId?: number; 1660 | windowType?: WindowType; 1661 | }): Promise; 1662 | function reload( 1663 | tabId?: number, 1664 | reloadProperties?: { bypassCache?: boolean } 1665 | ): Promise; 1666 | function remove(tabIds: number | number[]): Promise; 1667 | function saveAsPDF( 1668 | pageSettings: PageSettings 1669 | ): Promise<"saved" | "replaced" | "canceled" | "not_saved" | "not_replaced">; 1670 | function sendMessage( 1671 | tabId: number, 1672 | message: T, 1673 | options?: { frameId?: number } 1674 | ): Promise; 1675 | // deprecated: function sendRequest(): x; 1676 | function setZoom( 1677 | tabId: number | undefined, 1678 | zoomFactor: number 1679 | ): Promise; 1680 | function setZoomSettings( 1681 | tabId: number | undefined, 1682 | zoomSettings: ZoomSettings 1683 | ): Promise; 1684 | function show(tabIds: number | number[]): Promise; 1685 | function toggleReaderMode(tabId?: number): Promise; 1686 | function update( 1687 | tabId: number | undefined, 1688 | updateProperties: { 1689 | active?: boolean; 1690 | // unsupported: autoDiscardable?: boolean, 1691 | // unsupported: highlighted?: boolean, 1692 | // unsupported: hidden?: boolean; 1693 | loadReplace?: boolean; 1694 | muted?: boolean; 1695 | openerTabId?: number; 1696 | pinned?: boolean; 1697 | // deprecated: selected?: boolean, 1698 | url?: string; 1699 | } 1700 | ): Promise; 1701 | 1702 | const onActivated: Listener<{ tabId: number; windowId: number }>; 1703 | const onAttached: EvListener< 1704 | ( 1705 | tabId: number, 1706 | attachInfo: { 1707 | newWindowId: number; 1708 | newPosition: number; 1709 | } 1710 | ) => void 1711 | >; 1712 | const onCreated: Listener; 1713 | const onDetached: EvListener< 1714 | ( 1715 | tabId: number, 1716 | detachInfo: { 1717 | oldWindowId: number; 1718 | oldPosition: number; 1719 | } 1720 | ) => void 1721 | >; 1722 | const onHighlighted: Listener<{ windowId: number; tabIds: number[] }>; 1723 | const onMoved: EvListener< 1724 | ( 1725 | tabId: number, 1726 | moveInfo: { 1727 | windowId: number; 1728 | fromIndex: number; 1729 | toIndex: number; 1730 | } 1731 | ) => void 1732 | >; 1733 | const onRemoved: EvListener< 1734 | ( 1735 | tabId: number, 1736 | removeInfo: { 1737 | windowId: number; 1738 | isWindowClosing: boolean; 1739 | } 1740 | ) => void 1741 | >; 1742 | const onReplaced: EvListener< 1743 | (addedTabId: number, removedTabId: number) => void 1744 | >; 1745 | const onUpdated: EvListener< 1746 | ( 1747 | tabId: number, 1748 | changeInfo: { 1749 | audible?: boolean; 1750 | discarded?: boolean; 1751 | favIconUrl?: string; 1752 | mutedInfo?: MutedInfo; 1753 | pinned?: boolean; 1754 | status?: string; 1755 | title?: string; 1756 | url?: string; 1757 | }, 1758 | tab: Tab 1759 | ) => void 1760 | >; 1761 | const onZoomChanged: Listener<{ 1762 | tabId: number; 1763 | oldZoomFactor: number; 1764 | newZoomFactor: number; 1765 | zoomSettings: ZoomSettings; 1766 | }>; 1767 | } 1768 | 1769 | declare namespace browser.topSites { 1770 | type MostVisitedURL = { 1771 | title: string; 1772 | url: string; 1773 | }; 1774 | function get(): Promise; 1775 | } 1776 | 1777 | declare namespace browser.webNavigation { 1778 | type TransitionType = "link" | "auto_subframe" | "form_submit" | "reload"; 1779 | // unsupported: | "typed" | "auto_bookmark" | "manual_subframe" 1780 | // | "generated" | "start_page" | "keyword" 1781 | // | "keyword_generated"; 1782 | 1783 | type TransitionQualifier = 1784 | | "client_redirect" 1785 | | "server_redirect" 1786 | | "forward_back"; 1787 | // unsupported: "from_address_bar"; 1788 | 1789 | function getFrame(details: { 1790 | tabId: number; 1791 | processId: number; 1792 | frameId: number; 1793 | }): Promise<{ errorOccured: boolean; url: string; parentFrameId: number }>; 1794 | 1795 | function getAllFrames(details: { 1796 | tabId: number; 1797 | }): Promise< 1798 | { 1799 | errorOccured: boolean; 1800 | processId: number; 1801 | frameId: number; 1802 | parentFrameId: number; 1803 | url: string; 1804 | }[] 1805 | >; 1806 | 1807 | interface NavListener { 1808 | addListener: ( 1809 | callback: (arg: T) => void, 1810 | filter?: { 1811 | url: browser.events.UrlFilter[]; 1812 | } 1813 | ) => void; 1814 | removeListener: (callback: (arg: T) => void) => void; 1815 | hasListener: (callback: (arg: T) => void) => boolean; 1816 | } 1817 | 1818 | type DefaultNavListener = NavListener<{ 1819 | tabId: number; 1820 | url: string; 1821 | processId: number; 1822 | frameId: number; 1823 | timeStamp: number; 1824 | }>; 1825 | 1826 | type TransitionNavListener = NavListener<{ 1827 | tabId: number; 1828 | url: string; 1829 | processId: number; 1830 | frameId: number; 1831 | timeStamp: number; 1832 | transitionType: TransitionType; 1833 | transitionQualifiers: TransitionQualifier[]; 1834 | }>; 1835 | 1836 | const onBeforeNavigate: NavListener<{ 1837 | tabId: number; 1838 | url: string; 1839 | processId: number; 1840 | frameId: number; 1841 | parentFrameId: number; 1842 | timeStamp: number; 1843 | }>; 1844 | 1845 | const onCommitted: TransitionNavListener; 1846 | 1847 | const onCreatedNavigationTarget: NavListener<{ 1848 | sourceFrameId: number; 1849 | // Unsupported: sourceProcessId: number, 1850 | sourceTabId: number; 1851 | tabId: number; 1852 | timeStamp: number; 1853 | url: string; 1854 | windowId: number; 1855 | }>; 1856 | 1857 | const onDOMContentLoaded: DefaultNavListener; 1858 | 1859 | const onCompleted: DefaultNavListener; 1860 | 1861 | const onErrorOccurred: DefaultNavListener; // error field unsupported 1862 | 1863 | const onReferenceFragmentUpdated: TransitionNavListener; 1864 | 1865 | const onHistoryStateUpdated: TransitionNavListener; 1866 | } 1867 | 1868 | declare namespace browser.webRequest { 1869 | type ResourceType = 1870 | | "main_frame" 1871 | | "sub_frame" 1872 | | "stylesheet" 1873 | | "script" 1874 | | "image" 1875 | | "object" 1876 | | "xmlhttprequest" 1877 | | "xbl" 1878 | | "xslt" 1879 | | "ping" 1880 | | "beacon" 1881 | | "xml_dtd" 1882 | | "font" 1883 | | "media" 1884 | | "websocket" 1885 | | "csp_report" 1886 | | "imageset" 1887 | | "web_manifest" 1888 | | "other"; 1889 | 1890 | type RequestFilter = { 1891 | urls: string[]; 1892 | types?: ResourceType[]; 1893 | tabId?: number; 1894 | windowId?: number; 1895 | }; 1896 | 1897 | type StreamFilter = { 1898 | onstart: (event: any) => void; 1899 | ondata: (event: { data: ArrayBuffer }) => void; 1900 | onstop: (event: any) => void; 1901 | onerror: (event: any) => void; 1902 | 1903 | close(): void; 1904 | disconnect(): void; 1905 | resume(): void; 1906 | suspend(): void; 1907 | write(data: Uint8Array | ArrayBuffer): void; 1908 | 1909 | error: string; 1910 | status: 1911 | | "uninitialized" 1912 | | "transferringdata" 1913 | | "finishedtransferringdata" 1914 | | "suspended" 1915 | | "closed" 1916 | | "disconnected" 1917 | | "failed"; 1918 | }; 1919 | 1920 | type HttpHeaders = ( 1921 | | { name: string; binaryValue: number[]; value?: string } 1922 | | { name: string; value: string; binaryValue?: number[] })[]; 1923 | 1924 | type BlockingResponse = { 1925 | cancel?: boolean; 1926 | redirectUrl?: string; 1927 | requestHeaders?: HttpHeaders; 1928 | responseHeaders?: HttpHeaders; 1929 | authCredentials?: { username: string; password: string }; 1930 | }; 1931 | 1932 | type UploadData = { 1933 | bytes?: ArrayBuffer; 1934 | file?: string; 1935 | }; 1936 | 1937 | const MAX_HANDLER_BEHAVIOR_CHANGED_CALLS_PER_10_MINUTES: number; 1938 | 1939 | function handlerBehaviorChanged(): Promise; 1940 | 1941 | // TODO: Enforce the return result of the addListener call in the contract 1942 | // Use an intersection type for all the default properties 1943 | interface ReqListener { 1944 | addListener: ( 1945 | callback: (arg: T) => void, 1946 | filter: RequestFilter, 1947 | extraInfoSpec?: Array 1948 | ) => BlockingResponse | Promise; 1949 | removeListener: (callback: (arg: T) => void) => void; 1950 | hasListener: (callback: (arg: T) => void) => boolean; 1951 | } 1952 | 1953 | const onBeforeRequest: ReqListener< 1954 | { 1955 | requestId: string; 1956 | url: string; 1957 | method: string; 1958 | frameId: number; 1959 | parentFrameId: number; 1960 | requestBody?: { 1961 | error?: string; 1962 | formData?: { [key: string]: string[] }; 1963 | raw?: UploadData[]; 1964 | }; 1965 | tabId: number; 1966 | type: ResourceType; 1967 | timeStamp: number; 1968 | originUrl: string; 1969 | }, 1970 | "blocking" | "requestBody" 1971 | >; 1972 | 1973 | const onBeforeSendHeaders: ReqListener< 1974 | { 1975 | requestId: string; 1976 | url: string; 1977 | method: string; 1978 | frameId: number; 1979 | parentFrameId: number; 1980 | tabId: number; 1981 | type: ResourceType; 1982 | timeStamp: number; 1983 | originUrl: string; 1984 | requestHeaders?: HttpHeaders; 1985 | }, 1986 | "blocking" | "requestHeaders" 1987 | >; 1988 | 1989 | const onSendHeaders: ReqListener< 1990 | { 1991 | requestId: string; 1992 | url: string; 1993 | method: string; 1994 | frameId: number; 1995 | parentFrameId: number; 1996 | tabId: number; 1997 | type: ResourceType; 1998 | timeStamp: number; 1999 | originUrl: string; 2000 | requestHeaders?: HttpHeaders; 2001 | }, 2002 | "requestHeaders" 2003 | >; 2004 | 2005 | const onHeadersReceived: ReqListener< 2006 | { 2007 | requestId: string; 2008 | url: string; 2009 | method: string; 2010 | frameId: number; 2011 | parentFrameId: number; 2012 | tabId: number; 2013 | type: ResourceType; 2014 | timeStamp: number; 2015 | originUrl: string; 2016 | statusLine: string; 2017 | responseHeaders?: HttpHeaders; 2018 | statusCode: number; 2019 | }, 2020 | "blocking" | "responseHeaders" 2021 | >; 2022 | 2023 | const onAuthRequired: ReqListener< 2024 | { 2025 | requestId: string; 2026 | url: string; 2027 | method: string; 2028 | frameId: number; 2029 | parentFrameId: number; 2030 | tabId: number; 2031 | type: ResourceType; 2032 | timeStamp: number; 2033 | scheme: string; 2034 | realm?: string; 2035 | challenger: { host: string; port: number }; 2036 | isProxy: boolean; 2037 | responseHeaders?: HttpHeaders; 2038 | statusLine: string; 2039 | statusCode: number; 2040 | }, 2041 | "blocking" | "responseHeaders" 2042 | >; 2043 | 2044 | const onResponseStarted: ReqListener< 2045 | { 2046 | requestId: string; 2047 | url: string; 2048 | method: string; 2049 | frameId: number; 2050 | parentFrameId: number; 2051 | tabId: number; 2052 | type: ResourceType; 2053 | timeStamp: number; 2054 | originUrl: string; 2055 | ip?: string; 2056 | fromCache: boolean; 2057 | statusLine: string; 2058 | responseHeaders?: HttpHeaders; 2059 | statusCode: number; 2060 | }, 2061 | "responseHeaders" 2062 | >; 2063 | 2064 | const onBeforeRedirect: ReqListener< 2065 | { 2066 | requestId: string; 2067 | url: string; 2068 | method: string; 2069 | frameId: number; 2070 | parentFrameId: number; 2071 | tabId: number; 2072 | type: ResourceType; 2073 | timeStamp: number; 2074 | originUrl: string; 2075 | ip?: string; 2076 | fromCache: boolean; 2077 | statusCode: number; 2078 | redirectUrl: string; 2079 | statusLine: string; 2080 | responseHeaders?: HttpHeaders; 2081 | }, 2082 | "responseHeaders" 2083 | >; 2084 | 2085 | const onCompleted: ReqListener< 2086 | { 2087 | requestId: string; 2088 | url: string; 2089 | method: string; 2090 | frameId: number; 2091 | parentFrameId: number; 2092 | tabId: number; 2093 | type: ResourceType; 2094 | timeStamp: number; 2095 | originUrl: string; 2096 | ip?: string; 2097 | fromCache: boolean; 2098 | statusCode: number; 2099 | statusLine: string; 2100 | responseHeaders?: HttpHeaders; 2101 | }, 2102 | "responseHeaders" 2103 | >; 2104 | 2105 | const onErrorOccurred: ReqListener< 2106 | { 2107 | requestId: string; 2108 | url: string; 2109 | method: string; 2110 | frameId: number; 2111 | parentFrameId: number; 2112 | tabId: number; 2113 | type: ResourceType; 2114 | timeStamp: number; 2115 | originUrl: string; 2116 | ip?: string; 2117 | fromCache: boolean; 2118 | error: string; 2119 | }, 2120 | void 2121 | >; 2122 | 2123 | function filterResponseData(requestId: string): StreamFilter; 2124 | } 2125 | 2126 | declare namespace browser.windows { 2127 | type WindowType = "normal" | "popup" | "panel" | "devtools"; 2128 | 2129 | type WindowState = 2130 | | "normal" 2131 | | "minimized" 2132 | | "maximized" 2133 | | "fullscreen" 2134 | | "docked"; 2135 | 2136 | type Window = { 2137 | id?: number; 2138 | focused: boolean; 2139 | top?: number; 2140 | left?: number; 2141 | width?: number; 2142 | height?: number; 2143 | tabs?: browser.tabs.Tab[]; 2144 | incognito: boolean; 2145 | type?: WindowType; 2146 | state?: WindowState; 2147 | alwaysOnTop: boolean; 2148 | sessionId?: string; 2149 | }; 2150 | 2151 | type CreateType = "normal" | "popup" | "panel" | "detached_panel"; 2152 | 2153 | const WINDOW_ID_NONE: number; 2154 | 2155 | const WINDOW_ID_CURRENT: number; 2156 | 2157 | function get( 2158 | windowId: number, 2159 | getInfo?: { 2160 | populate?: boolean; 2161 | windowTypes?: WindowType[]; 2162 | } 2163 | ): Promise; 2164 | 2165 | function getCurrent(getInfo?: { 2166 | populate?: boolean; 2167 | windowTypes?: WindowType[]; 2168 | }): Promise; 2169 | 2170 | function getLastFocused(getInfo?: { 2171 | populate?: boolean; 2172 | windowTypes?: WindowType[]; 2173 | }): Promise; 2174 | 2175 | function getAll(getInfo?: { 2176 | populate?: boolean; 2177 | windowTypes?: WindowType[]; 2178 | }): Promise; 2179 | 2180 | // TODO: url and tabId should be exclusive 2181 | function create(createData?: { 2182 | allowScriptsToClose?: boolean; 2183 | url?: string | string[]; 2184 | tabId?: number; 2185 | left?: number; 2186 | top?: number; 2187 | width?: number; 2188 | height?: number; 2189 | // unsupported: focused?: boolean, 2190 | incognito?: boolean; 2191 | titlePreface?: string; 2192 | type?: CreateType; 2193 | state?: WindowState; 2194 | }): Promise; 2195 | 2196 | function update( 2197 | windowId: number, 2198 | updateInfo: { 2199 | left?: number; 2200 | top?: number; 2201 | width?: number; 2202 | height?: number; 2203 | focused?: boolean; 2204 | drawAttention?: boolean; 2205 | state?: WindowState; 2206 | } 2207 | ): Promise; 2208 | 2209 | function remove(windowId: number): Promise; 2210 | 2211 | const onCreated: Listener; 2212 | 2213 | const onRemoved: Listener; 2214 | 2215 | const onFocusChanged: Listener; 2216 | } 2217 | 2218 | declare namespace browser.theme { 2219 | type Theme = { 2220 | images: ThemeImages; 2221 | colors: ThemeColors; 2222 | properties?: ThemeProperties; 2223 | }; 2224 | 2225 | type ThemeImages = { 2226 | headerURL: string; 2227 | theme_frame?: string; 2228 | additional_backgrounds?: string[]; 2229 | }; 2230 | 2231 | type ThemeColors = { 2232 | accentcolor: string; 2233 | textcolor: string; 2234 | frame?: [number, number, number]; 2235 | tab_text?: [number, number, number]; 2236 | toolbar?: string; 2237 | toolbar_text?: string; 2238 | toolbar_field?: string; 2239 | toolbar_field_text?: string; 2240 | }; 2241 | 2242 | type ThemeProperties = { 2243 | additional_backgrounds_alignment: Alignment[]; 2244 | additional_backgrounds_tiling: Tiling[]; 2245 | }; 2246 | 2247 | type Alignment = 2248 | | "bottom" 2249 | | "center" 2250 | | "left" 2251 | | "right" 2252 | | "top" 2253 | | "center bottom" 2254 | | "center center" 2255 | | "center top" 2256 | | "left bottom" 2257 | | "left center" 2258 | | "left top" 2259 | | "right bottom" 2260 | | "right center" 2261 | | "right top"; 2262 | 2263 | type Tiling = "no-repeat" | "repeat" | "repeat-x" | "repeat-y"; 2264 | 2265 | function getCurrent(): Promise; 2266 | function getCurrent(windowId: number): Promise; 2267 | function update(theme: Theme): Promise; 2268 | function update(windowId: number, theme: Theme): Promise; 2269 | function reset(): Promise; 2270 | function reset(windowId: number): Promise; 2271 | } 2272 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "web-ext-types", 3 | "author": "Kelsey Zapata (https://kelseyz.org)", 4 | "version": "3.2.1", 5 | "description": "TypeScript type definitions for WebExtensions", 6 | "keywords": [ 7 | "firefox", 8 | "typescript", 9 | "webextension" 10 | ], 11 | "repository": "kelseasy/web-ext-types", 12 | "license": "MPL-2.0", 13 | "devDependencies": { 14 | "tslint": "4.5.1", 15 | "typescript": "2.3.0" 16 | }, 17 | "scripts": { 18 | "lint": "tslint --project tsconfig.json", 19 | "prepublish": "tsc", 20 | "test": "tslint --project tsconfig.json && tsc" 21 | }, 22 | "types": "global/index.d.ts" 23 | } 24 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "alwaysStrict": true, 4 | "noEmit": true, 5 | "noImplicitAny": true, 6 | "noImplicitReturns": true, 7 | "noImplicitThis": true, 8 | "noUnusedLocals": true, 9 | "noUnusedParameters": true, 10 | "strictNullChecks": true, 11 | "lib": [ 12 | "es6", 13 | "dom" 14 | ] 15 | }, 16 | "files": [ 17 | "global/index.d.ts" 18 | ], 19 | "exclude": [ 20 | "node_modules" 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /tslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "rules": { 3 | "align": [true, "arguments", "parameters", "statements"], 4 | "class-name": true, 5 | "comment-format": [true, "check-space"], 6 | "curly": true, 7 | "cyclomatic-complexity": [true, 10], 8 | "eofline": true, 9 | "indent": [true, "spaces"], 10 | "jsdoc-format": true, 11 | "linebreak-style": [true, "LF"], 12 | "no-arg": true, 13 | "no-consecutive-blank-lines": true, 14 | "no-console": [ 15 | true, 16 | "assert", 17 | "clear", 18 | "count", 19 | "debug", 20 | "error", 21 | "group", 22 | "groupCollapsed", 23 | "groupEnd", 24 | "info", 25 | "log", 26 | "table", 27 | "time", 28 | "timeEnd", 29 | "trace", 30 | "warn" 31 | ], 32 | "no-duplicate-variable": true, 33 | "no-empty": true, 34 | "no-eval": true, 35 | "no-internal-module": true, 36 | "no-invalid-this": true, 37 | "no-reference": true, 38 | "no-require-imports": true, 39 | "no-trailing-whitespace": true, 40 | "no-unsafe-finally": true, 41 | "no-var-keyword": true, 42 | "object-literal-key-quotes": [true, "as-needed"], 43 | "object-literal-shorthand": true, 44 | "object-literal-sort-keys": true, 45 | "one-line": [ 46 | true, 47 | "check-catch", 48 | "check-finally", 49 | "check-else", 50 | "check-open-brace", 51 | "check-whitespace" 52 | ], 53 | "only-arrow-functions": [true, "allow-declarations"], 54 | "ordered-imports": [true, { 55 | "import-sources-order": "lowercase-last", 56 | "named-imports-order": "lowercase-last" 57 | }], 58 | "quotemark": [true, "single", "avoid-escape"], 59 | "semicolon": [true, "always"], 60 | "trailing-comma": [true, { 61 | "multiline": "always", 62 | "singleline": "never" 63 | }], 64 | "triple-equals": true, 65 | "typedef": [ 66 | true, 67 | "call-signature", 68 | "arrow-call-signature", 69 | "parameter", 70 | "arrow-parameter", 71 | "property-declaration", 72 | "member-variable-declaration" 73 | ], 74 | "typedef-whitespace": [ 75 | true, 76 | { 77 | "call-signature": "nospace", 78 | "index-signature": "nospace", 79 | "parameter": "nospace", 80 | "property-declaration": "nospace", 81 | "variable-declaration": "nospace" 82 | }, { 83 | "call-signature": "onespace", 84 | "index-signature": "onespace", 85 | "parameter": "onespace", 86 | "property-declaration": "onespace", 87 | "variable-declaration": "onespace" 88 | } 89 | ], 90 | "variable-name": [true, "check-format", "ban-keywords"], 91 | "whitespace": [ 92 | true, 93 | "check-branch", 94 | "check-decl", 95 | "check-module", 96 | "check-operator", 97 | "check-separator", 98 | "check-type", 99 | "check-typecast" 100 | ] 101 | } 102 | } 103 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | ansi-align@^1.1.0: 6 | version "1.1.0" 7 | resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-1.1.0.tgz#2f0c1658829739add5ebb15e6b0c6e3423f016ba" 8 | integrity sha1-LwwWWIKXOa3V67FeawxuNCPwFro= 9 | dependencies: 10 | string-width "^1.0.1" 11 | 12 | ansi-regex@^2.0.0: 13 | version "2.1.1" 14 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" 15 | integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= 16 | 17 | ansi-styles@^2.2.1: 18 | version "2.2.1" 19 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" 20 | integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= 21 | 22 | babel-code-frame@^6.20.0: 23 | version "6.22.0" 24 | resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.22.0.tgz#027620bee567a88c32561574e7fd0801d33118e4" 25 | integrity sha1-AnYgvuVnqIwyVhV05/0IAdMxGOQ= 26 | dependencies: 27 | chalk "^1.1.0" 28 | esutils "^2.0.2" 29 | js-tokens "^3.0.0" 30 | 31 | balanced-match@^0.4.1: 32 | version "0.4.2" 33 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" 34 | integrity sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg= 35 | 36 | boxen@^1.0.0: 37 | version "1.0.0" 38 | resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.0.0.tgz#b2694baf1f605f708ff0177c12193b22f29aaaab" 39 | integrity sha1-smlLrx9gX3CP8Bd8Ehk7IvKaqqs= 40 | dependencies: 41 | ansi-align "^1.1.0" 42 | camelcase "^4.0.0" 43 | chalk "^1.1.1" 44 | cli-boxes "^1.0.0" 45 | string-width "^2.0.0" 46 | term-size "^0.1.0" 47 | widest-line "^1.0.0" 48 | 49 | brace-expansion@^1.0.0: 50 | version "1.1.6" 51 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.6.tgz#7197d7eaa9b87e648390ea61fc66c84427420df9" 52 | integrity sha1-cZfX6qm4fmSDkOph/GbIRCdCDfk= 53 | dependencies: 54 | balanced-match "^0.4.1" 55 | concat-map "0.0.1" 56 | 57 | camelcase@^4.0.0: 58 | version "4.0.0" 59 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.0.0.tgz#8b0f90d44be5e281b903b9887349b92595ef07f2" 60 | integrity sha1-iw+Q1Evl4oG5A7mIc0m5JZXvB/I= 61 | 62 | capture-stack-trace@^1.0.0: 63 | version "1.0.0" 64 | resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz#4a6fa07399c26bba47f0b2496b4d0fb408c5550d" 65 | integrity sha1-Sm+gc5nCa7pH8LJJa00PtAjFVQ0= 66 | 67 | chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1: 68 | version "1.1.3" 69 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" 70 | integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= 71 | dependencies: 72 | ansi-styles "^2.2.1" 73 | escape-string-regexp "^1.0.2" 74 | has-ansi "^2.0.0" 75 | strip-ansi "^3.0.0" 76 | supports-color "^2.0.0" 77 | 78 | cli-boxes@^1.0.0: 79 | version "1.0.0" 80 | resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" 81 | integrity sha1-T6kXw+WclKAEzWH47lCdplFocUM= 82 | 83 | code-point-at@^1.0.0: 84 | version "1.1.0" 85 | resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" 86 | integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= 87 | 88 | colors@^1.1.2: 89 | version "1.1.2" 90 | resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" 91 | integrity sha1-FopHAXVran9RoSzgyXv6KMCE7WM= 92 | 93 | concat-map@0.0.1: 94 | version "0.0.1" 95 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 96 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 97 | 98 | configstore@^3.0.0: 99 | version "3.0.0" 100 | resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.0.0.tgz#e1b8669c1803ccc50b545e92f8e6e79aa80e0196" 101 | integrity sha1-4bhmnBgDzMULVF6S+ObnmqgOAZY= 102 | dependencies: 103 | dot-prop "^4.1.0" 104 | graceful-fs "^4.1.2" 105 | mkdirp "^0.5.0" 106 | unique-string "^1.0.0" 107 | write-file-atomic "^1.1.2" 108 | xdg-basedir "^3.0.0" 109 | 110 | create-error-class@^3.0.0: 111 | version "3.0.2" 112 | resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6" 113 | integrity sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y= 114 | dependencies: 115 | capture-stack-trace "^1.0.0" 116 | 117 | cross-spawn-async@^2.1.1: 118 | version "2.2.5" 119 | resolved "https://registry.yarnpkg.com/cross-spawn-async/-/cross-spawn-async-2.2.5.tgz#845ff0c0834a3ded9d160daca6d390906bb288cc" 120 | integrity sha1-hF/wwINKPe2dFg2sptOQkGuyiMw= 121 | dependencies: 122 | lru-cache "^4.0.0" 123 | which "^1.2.8" 124 | 125 | crypto-random-string@^1.0.0: 126 | version "1.0.0" 127 | resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" 128 | integrity sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4= 129 | 130 | deep-extend@~0.4.0: 131 | version "0.4.1" 132 | resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.1.tgz#efe4113d08085f4e6f9687759810f807469e2253" 133 | integrity sha1-7+QRPQgIX05vlod1mBD4B0aeIlM= 134 | 135 | diff@^3.0.1: 136 | version "3.2.0" 137 | resolved "https://registry.yarnpkg.com/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9" 138 | integrity sha1-yc45Okt8vQsFinJck98pkCeGj/k= 139 | 140 | dot-prop@^4.1.0: 141 | version "4.1.1" 142 | resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.1.1.tgz#a8493f0b7b5eeec82525b5c7587fa7de7ca859c1" 143 | integrity sha1-qEk/C3te7sglJbXHWH+n3nyoWcE= 144 | dependencies: 145 | is-obj "^1.0.0" 146 | 147 | duplexer3@^0.1.4: 148 | version "0.1.4" 149 | resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" 150 | integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= 151 | 152 | escape-string-regexp@^1.0.2: 153 | version "1.0.5" 154 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 155 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= 156 | 157 | esutils@^2.0.2: 158 | version "2.0.2" 159 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" 160 | integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs= 161 | 162 | execa@^0.4.0: 163 | version "0.4.0" 164 | resolved "https://registry.yarnpkg.com/execa/-/execa-0.4.0.tgz#4eb6467a36a095fabb2970ff9d5e3fb7bce6ebc3" 165 | integrity sha1-TrZGejaglfq7KXD/nV4/t7zm68M= 166 | dependencies: 167 | cross-spawn-async "^2.1.1" 168 | is-stream "^1.1.0" 169 | npm-run-path "^1.0.0" 170 | object-assign "^4.0.1" 171 | path-key "^1.0.0" 172 | strip-eof "^1.0.0" 173 | 174 | findup-sync@~0.3.0: 175 | version "0.3.0" 176 | resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-0.3.0.tgz#37930aa5d816b777c03445e1966cc6790a4c0b16" 177 | integrity sha1-N5MKpdgWt3fANEXhlmzGeQpMCxY= 178 | dependencies: 179 | glob "~5.0.0" 180 | 181 | fs.realpath@^1.0.0: 182 | version "1.0.0" 183 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 184 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 185 | 186 | get-stream@^3.0.0: 187 | version "3.0.0" 188 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" 189 | integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= 190 | 191 | glob@^7.1.1: 192 | version "7.1.1" 193 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" 194 | integrity sha1-gFIR3wT6rxxjo2ADBs31reULLsg= 195 | dependencies: 196 | fs.realpath "^1.0.0" 197 | inflight "^1.0.4" 198 | inherits "2" 199 | minimatch "^3.0.2" 200 | once "^1.3.0" 201 | path-is-absolute "^1.0.0" 202 | 203 | glob@~5.0.0: 204 | version "5.0.15" 205 | resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" 206 | integrity sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E= 207 | dependencies: 208 | inflight "^1.0.4" 209 | inherits "2" 210 | minimatch "2 || 3" 211 | once "^1.3.0" 212 | path-is-absolute "^1.0.0" 213 | 214 | got@^6.7.1: 215 | version "6.7.1" 216 | resolved "https://registry.yarnpkg.com/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0" 217 | integrity sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA= 218 | dependencies: 219 | create-error-class "^3.0.0" 220 | duplexer3 "^0.1.4" 221 | get-stream "^3.0.0" 222 | is-redirect "^1.0.0" 223 | is-retry-allowed "^1.0.0" 224 | is-stream "^1.0.0" 225 | lowercase-keys "^1.0.0" 226 | safe-buffer "^5.0.1" 227 | timed-out "^4.0.0" 228 | unzip-response "^2.0.1" 229 | url-parse-lax "^1.0.0" 230 | 231 | graceful-fs@^4.1.11, graceful-fs@^4.1.2: 232 | version "4.1.11" 233 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" 234 | integrity sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg= 235 | 236 | has-ansi@^2.0.0: 237 | version "2.0.0" 238 | resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" 239 | integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= 240 | dependencies: 241 | ansi-regex "^2.0.0" 242 | 243 | imurmurhash@^0.1.4: 244 | version "0.1.4" 245 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 246 | integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= 247 | 248 | inflight@^1.0.4: 249 | version "1.0.6" 250 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 251 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 252 | dependencies: 253 | once "^1.3.0" 254 | wrappy "1" 255 | 256 | inherits@2: 257 | version "2.0.3" 258 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 259 | integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= 260 | 261 | ini@~1.3.0: 262 | version "1.3.4" 263 | resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e" 264 | integrity sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4= 265 | 266 | is-fullwidth-code-point@^1.0.0: 267 | version "1.0.0" 268 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" 269 | integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= 270 | dependencies: 271 | number-is-nan "^1.0.0" 272 | 273 | is-fullwidth-code-point@^2.0.0: 274 | version "2.0.0" 275 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" 276 | integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= 277 | 278 | is-npm@^1.0.0: 279 | version "1.0.0" 280 | resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" 281 | integrity sha1-8vtjpl5JBbQGyGBydloaTceTufQ= 282 | 283 | is-obj@^1.0.0: 284 | version "1.0.1" 285 | resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" 286 | integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= 287 | 288 | is-redirect@^1.0.0: 289 | version "1.0.0" 290 | resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" 291 | integrity sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ= 292 | 293 | is-retry-allowed@^1.0.0: 294 | version "1.1.0" 295 | resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34" 296 | integrity sha1-EaBgVotnM5REAz0BJaYaINVk+zQ= 297 | 298 | is-stream@^1.0.0, is-stream@^1.1.0: 299 | version "1.1.0" 300 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" 301 | integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= 302 | 303 | isexe@^1.1.1: 304 | version "1.1.2" 305 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-1.1.2.tgz#36f3e22e60750920f5e7241a476a8c6a42275ad0" 306 | integrity sha1-NvPiLmB1CSD15yQaR2qMakInWtA= 307 | 308 | js-tokens@^3.0.0: 309 | version "3.0.1" 310 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.1.tgz#08e9f132484a2c45a30907e9dc4d5567b7f114d7" 311 | integrity sha1-COnxMkhKLEWjCQfp3E1VZ7fxFNc= 312 | 313 | latest-version@^3.0.0: 314 | version "3.0.0" 315 | resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-3.0.0.tgz#3104f008c0c391084107f85a344bc61e38970649" 316 | integrity sha1-MQTwCMDDkQhBB/haNEvGHjiXBkk= 317 | dependencies: 318 | package-json "^3.0.0" 319 | 320 | lazy-req@^2.0.0: 321 | version "2.0.0" 322 | resolved "https://registry.yarnpkg.com/lazy-req/-/lazy-req-2.0.0.tgz#c9450a363ecdda2e6f0c70132ad4f37f8f06f2b4" 323 | integrity sha1-yUUKNj7N2i5vDHATKtTzf48G8rQ= 324 | 325 | lowercase-keys@^1.0.0: 326 | version "1.0.0" 327 | resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306" 328 | integrity sha1-TjNms55/VFfjXxMkvfb4jQv8cwY= 329 | 330 | lru-cache@^4.0.0: 331 | version "4.0.2" 332 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.0.2.tgz#1d17679c069cda5d040991a09dbc2c0db377e55e" 333 | integrity sha1-HRdnnAac2l0ECZGgnbwsDbN35V4= 334 | dependencies: 335 | pseudomap "^1.0.1" 336 | yallist "^2.0.0" 337 | 338 | "minimatch@2 || 3", minimatch@^3.0.2: 339 | version "3.0.3" 340 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" 341 | integrity sha1-Kk5AkLlrLbBqnX3wEFWmKnfJt3Q= 342 | dependencies: 343 | brace-expansion "^1.0.0" 344 | 345 | minimist@0.0.8: 346 | version "0.0.8" 347 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" 348 | integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= 349 | 350 | minimist@^1.2.0: 351 | version "1.2.0" 352 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" 353 | integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= 354 | 355 | minimist@~0.0.1: 356 | version "0.0.10" 357 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" 358 | integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= 359 | 360 | mkdirp@^0.5.0: 361 | version "0.5.1" 362 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" 363 | integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= 364 | dependencies: 365 | minimist "0.0.8" 366 | 367 | npm-run-path@^1.0.0: 368 | version "1.0.0" 369 | resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-1.0.0.tgz#f5c32bf595fe81ae927daec52e82f8b000ac3c8f" 370 | integrity sha1-9cMr9ZX+ga6Sfa7FLoL4sACsPI8= 371 | dependencies: 372 | path-key "^1.0.0" 373 | 374 | number-is-nan@^1.0.0: 375 | version "1.0.1" 376 | resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" 377 | integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= 378 | 379 | object-assign@^4.0.1: 380 | version "4.1.1" 381 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 382 | integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= 383 | 384 | once@^1.3.0: 385 | version "1.4.0" 386 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 387 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 388 | dependencies: 389 | wrappy "1" 390 | 391 | optimist@~0.6.0: 392 | version "0.6.1" 393 | resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" 394 | integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY= 395 | dependencies: 396 | minimist "~0.0.1" 397 | wordwrap "~0.0.2" 398 | 399 | package-json@^3.0.0: 400 | version "3.1.0" 401 | resolved "https://registry.yarnpkg.com/package-json/-/package-json-3.1.0.tgz#ce281900fe8052150cc6709c6c006c18fdb2f379" 402 | integrity sha1-zigZAP6AUhUMxnCcbABsGP2y83k= 403 | dependencies: 404 | got "^6.7.1" 405 | registry-auth-token "^3.0.1" 406 | registry-url "^3.0.3" 407 | semver "^5.1.0" 408 | 409 | path-is-absolute@^1.0.0: 410 | version "1.0.1" 411 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 412 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 413 | 414 | path-key@^1.0.0: 415 | version "1.0.0" 416 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-1.0.0.tgz#5d53d578019646c0d68800db4e146e6bdc2ac7af" 417 | integrity sha1-XVPVeAGWRsDWiADbThRua9wqx68= 418 | 419 | path-parse@^1.0.5: 420 | version "1.0.5" 421 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" 422 | integrity sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME= 423 | 424 | prepend-http@^1.0.1: 425 | version "1.0.4" 426 | resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" 427 | integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= 428 | 429 | pseudomap@^1.0.1: 430 | version "1.0.2" 431 | resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" 432 | integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= 433 | 434 | rc@^1.0.1, rc@^1.1.6: 435 | version "1.1.7" 436 | resolved "https://registry.yarnpkg.com/rc/-/rc-1.1.7.tgz#c5ea564bb07aff9fd3a5b32e906c1d3a65940fea" 437 | integrity sha1-xepWS7B6/5/TpbMukGwdOmWUD+o= 438 | dependencies: 439 | deep-extend "~0.4.0" 440 | ini "~1.3.0" 441 | minimist "^1.2.0" 442 | strip-json-comments "~2.0.1" 443 | 444 | registry-auth-token@^3.0.1: 445 | version "3.1.0" 446 | resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.1.0.tgz#997c08256e0c7999837b90e944db39d8a790276b" 447 | integrity sha1-mXwIJW4MeZmDe5DpRNs52KeQJ2s= 448 | dependencies: 449 | rc "^1.1.6" 450 | 451 | registry-url@^3.0.3: 452 | version "3.1.0" 453 | resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942" 454 | integrity sha1-PU74cPc93h138M+aOBQyRE4XSUI= 455 | dependencies: 456 | rc "^1.0.1" 457 | 458 | resolve@^1.1.7: 459 | version "1.3.2" 460 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.3.2.tgz#1f0442c9e0cbb8136e87b9305f932f46c7f28235" 461 | integrity sha1-HwRCyeDLuBNuh7kwX5MvRsfygjU= 462 | dependencies: 463 | path-parse "^1.0.5" 464 | 465 | safe-buffer@^5.0.1: 466 | version "5.0.1" 467 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.0.1.tgz#d263ca54696cd8a306b5ca6551e92de57918fbe7" 468 | integrity sha1-0mPKVGls2KMGtcplUekt5XkY++c= 469 | 470 | semver-diff@^2.0.0: 471 | version "2.1.0" 472 | resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36" 473 | integrity sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY= 474 | dependencies: 475 | semver "^5.0.3" 476 | 477 | semver@^5.0.3, semver@^5.1.0: 478 | version "5.3.0" 479 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" 480 | integrity sha1-myzl094C0XxgEq0yaqa00M9U+U8= 481 | 482 | slide@^1.1.5: 483 | version "1.1.6" 484 | resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" 485 | integrity sha1-VusCfWW00tzmyy4tMsTUr8nh1wc= 486 | 487 | string-width@^1.0.1: 488 | version "1.0.2" 489 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" 490 | integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= 491 | dependencies: 492 | code-point-at "^1.0.0" 493 | is-fullwidth-code-point "^1.0.0" 494 | strip-ansi "^3.0.0" 495 | 496 | string-width@^2.0.0: 497 | version "2.0.0" 498 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.0.0.tgz#635c5436cc72a6e0c387ceca278d4e2eec52687e" 499 | integrity sha1-Y1xUNsxypuDDh87KJ41OLuxSaH4= 500 | dependencies: 501 | is-fullwidth-code-point "^2.0.0" 502 | strip-ansi "^3.0.0" 503 | 504 | strip-ansi@^3.0.0: 505 | version "3.0.1" 506 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" 507 | integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= 508 | dependencies: 509 | ansi-regex "^2.0.0" 510 | 511 | strip-eof@^1.0.0: 512 | version "1.0.0" 513 | resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" 514 | integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= 515 | 516 | strip-json-comments@~2.0.1: 517 | version "2.0.1" 518 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" 519 | integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= 520 | 521 | supports-color@^2.0.0: 522 | version "2.0.0" 523 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" 524 | integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= 525 | 526 | term-size@^0.1.0: 527 | version "0.1.1" 528 | resolved "https://registry.yarnpkg.com/term-size/-/term-size-0.1.1.tgz#87360b96396cab5760963714cda0d0cbeecad9ca" 529 | integrity sha1-hzYLljlsq1dgljcUzaDQy+7K2co= 530 | dependencies: 531 | execa "^0.4.0" 532 | 533 | timed-out@^4.0.0: 534 | version "4.0.1" 535 | resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" 536 | integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8= 537 | 538 | tslint@4.5.1: 539 | version "4.5.1" 540 | resolved "https://registry.yarnpkg.com/tslint/-/tslint-4.5.1.tgz#05356871bef23a434906734006fc188336ba824b" 541 | integrity sha1-BTVocb7yOkNJBnNABvwYgza6gks= 542 | dependencies: 543 | babel-code-frame "^6.20.0" 544 | colors "^1.1.2" 545 | diff "^3.0.1" 546 | findup-sync "~0.3.0" 547 | glob "^7.1.1" 548 | optimist "~0.6.0" 549 | resolve "^1.1.7" 550 | tsutils "^1.1.0" 551 | update-notifier "^2.0.0" 552 | 553 | tsutils@^1.1.0: 554 | version "1.2.2" 555 | resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-1.2.2.tgz#7e165c601367b9f89200b97ff47d9e38d1a6e4c8" 556 | integrity sha1-fhZcYBNnufiSALl/9H2eONGm5Mg= 557 | 558 | typescript@2.3.0: 559 | version "2.3.0" 560 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.3.0.tgz#2e63e09284392bc8158a2444c33e2093795c0418" 561 | integrity sha1-LmPgkoQ5K8gViiREwz4gk3lcBBg= 562 | 563 | unique-string@^1.0.0: 564 | version "1.0.0" 565 | resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" 566 | integrity sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo= 567 | dependencies: 568 | crypto-random-string "^1.0.0" 569 | 570 | unzip-response@^2.0.1: 571 | version "2.0.1" 572 | resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" 573 | integrity sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c= 574 | 575 | update-notifier@^2.0.0: 576 | version "2.1.0" 577 | resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.1.0.tgz#ec0c1e53536b76647a24b77cb83966d9315123d9" 578 | integrity sha1-7AweU1NrdmR6JLd8uDlm2TFRI9k= 579 | dependencies: 580 | boxen "^1.0.0" 581 | chalk "^1.0.0" 582 | configstore "^3.0.0" 583 | is-npm "^1.0.0" 584 | latest-version "^3.0.0" 585 | lazy-req "^2.0.0" 586 | semver-diff "^2.0.0" 587 | xdg-basedir "^3.0.0" 588 | 589 | url-parse-lax@^1.0.0: 590 | version "1.0.0" 591 | resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" 592 | integrity sha1-evjzA2Rem9eaJy56FKxovAYJ2nM= 593 | dependencies: 594 | prepend-http "^1.0.1" 595 | 596 | which@^1.2.8: 597 | version "1.2.12" 598 | resolved "https://registry.yarnpkg.com/which/-/which-1.2.12.tgz#de67b5e450269f194909ef23ece4ebe416fa1192" 599 | integrity sha1-3me15FAmnxlJCe8j7OTr5Bb6EZI= 600 | dependencies: 601 | isexe "^1.1.1" 602 | 603 | widest-line@^1.0.0: 604 | version "1.0.0" 605 | resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-1.0.0.tgz#0c09c85c2a94683d0d7eaf8ee097d564bf0e105c" 606 | integrity sha1-DAnIXCqUaD0Nfq+O4JfVZL8OEFw= 607 | dependencies: 608 | string-width "^1.0.1" 609 | 610 | wordwrap@~0.0.2: 611 | version "0.0.3" 612 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" 613 | integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc= 614 | 615 | wrappy@1: 616 | version "1.0.2" 617 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 618 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 619 | 620 | write-file-atomic@^1.1.2: 621 | version "1.3.1" 622 | resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-1.3.1.tgz#7d45ba32316328dd1ec7d90f60ebc0d845bb759a" 623 | integrity sha1-fUW6MjFjKN0ex9kPYOvA2EW7dZo= 624 | dependencies: 625 | graceful-fs "^4.1.11" 626 | imurmurhash "^0.1.4" 627 | slide "^1.1.5" 628 | 629 | xdg-basedir@^3.0.0: 630 | version "3.0.0" 631 | resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" 632 | integrity sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ= 633 | 634 | yallist@^2.0.0: 635 | version "2.0.0" 636 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.0.0.tgz#306c543835f09ee1a4cb23b7bce9ab341c91cdd4" 637 | integrity sha1-MGxUODXwnuGkyyO3vOmrNByRzdQ= 638 | --------------------------------------------------------------------------------