added vscode extensions

This commit is contained in:
tomit4 2021-11-05 11:26:45 -07:00
parent 7cde0829be
commit 26e2a50441
316 changed files with 37301 additions and 0 deletions

View file

@ -0,0 +1,42 @@
<?xml version="1.0" encoding="utf-8"?>
<PackageManifest Version="2.0.0" xmlns="http://schemas.microsoft.com/developer/vsx-schema/2011" xmlns:d="http://schemas.microsoft.com/developer/vsx-schema-design/2011">
<Metadata>
<Identity Language="en-US" Id="LiveServer" Version="5.6.1" Publisher="ritwickdey"/>
<DisplayName>Live Server</DisplayName>
<Description xml:space="preserve">Launch a development local Server with live reload feature for static &amp; dynamic pages</Description>
<Tags>html preview,live preview,live reload,svg preview,open in browser,multi-root ready,keybindings</Tags>
<Categories>Other</Categories>
<GalleryFlags>Public</GalleryFlags>
<Badges></Badges>
<Properties>
<Property Id="Microsoft.VisualStudio.Code.Engine" Value="^1.20.0" />
<Property Id="Microsoft.VisualStudio.Code.ExtensionDependencies" Value="" />
<Property Id="Microsoft.VisualStudio.Code.ExtensionPack" Value="" />
<Property Id="Microsoft.VisualStudio.Code.LocalizedLanguages" Value="" />
<Property Id="Microsoft.VisualStudio.Services.Links.Source" Value="https://github.com/ritwickdey/vscode-live-server.git" />
<Property Id="Microsoft.VisualStudio.Services.Links.Getstarted" Value="https://github.com/ritwickdey/vscode-live-server.git" />
<Property Id="Microsoft.VisualStudio.Services.Links.GitHub" Value="https://github.com/ritwickdey/vscode-live-server.git" />
<Property Id="Microsoft.VisualStudio.Services.Links.Support" Value="https://github.com/ritwickdey/vscode-live-server/issues" />
<Property Id="Microsoft.VisualStudio.Services.Links.Learn" Value="https://ritwickdey.github.io/vscode-live-server/" />
<Property Id="Microsoft.VisualStudio.Services.Branding.Color" Value="#41205f" />
<Property Id="Microsoft.VisualStudio.Services.Branding.Theme" Value="dark" />
<Property Id="Microsoft.VisualStudio.Services.GitHubFlavoredMarkdown" Value="true" />
</Properties>
<License>extension/LICENSE.txt</License>
<Icon>extension/images/icon.png</Icon>
</Metadata>
<Installation>
<InstallationTarget Id="Microsoft.VisualStudio.Code"/>
</Installation>
<Dependencies/>
<Assets>
<Asset Type="Microsoft.VisualStudio.Code.Manifest" Path="extension/package.json" Addressable="true" />
<Asset Type="Microsoft.VisualStudio.Services.Content.Details" Path="extension/README.md" Addressable="true" /><Asset Type="Microsoft.VisualStudio.Services.Content.Changelog" Path="extension/CHANGELOG.md" Addressable="true" /><Asset Type="Microsoft.VisualStudio.Services.Content.License" Path="extension/LICENSE.txt" Addressable="true" /><Asset Type="Microsoft.VisualStudio.Services.Icons.Default" Path="extension/images/icon.png" Addressable="true" />
</Assets>
</PackageManifest>

View file

@ -0,0 +1,54 @@
# Changelog
| Version | Date | Changelog |
|---|---|---|
|5.6.0 | 17.04.19 | &mdash; ***[NEW]*** Intregation of `Browser Preview` with `Live Server` *[[#352](https://github.com/ritwickdey/vscode-live-server/pull/352) - Thanks to [Kenneth Auchenberg](https://github.com/auchenberg) ]* <br><br> &mdash; ***[NEW]*** Fallback to random port If given port is busy. *[[#330](https://github.com/ritwickdey/vscode-live-server/pull/330) - Thanks to [Ali Almohaya](https://github.com/Almo7aya) ] <br><br> &mdash; ***[FIXES]**** Moved to `vscode-chokidar` lib for [#285](https://github.com/ritwickdey/vscode-live-server/issues/285). <br><br> &mdash;Doc Fixes *[[#388](https://github.com/ritwickdey/vscode-live-server/pull/388) - Thanks to [Ted Silbernagel](https://github.com/tedsilb)]*
|5.5.1|12.02.19 | &mdash; ***[Fixes]*** Fixed `Extension host terminated unexpectedly` for MacOS. [[#285](https://github.com/ritwickdey/vscode-live-server/issues/285)]
|5.5.0| 12.02.19 | &mdash; ***[Fixes]*** Fixed `ignoreFiles` settings [[#255](https://github.com/ritwickdey/vscode-live-server/issues/255)] <br> &mdash; Attempt to fix `high cpu load` [[#278](https://github.com/ritwickdey/vscode-live-server/issues/278)]
|5.4.0| 30.01.19 | Bug fix for fsevents on Visual Code Insiders.
|5.3.1| 28.11.18 | Event-Stream Package Security Update.
|5.3.0| 27.11.18 | Few Packages are upgraded.
|5.2.0|16.11.2018| &mdash; ***[Features]*** Live Server + Live Share = 💘. Share your live server over the internet with live reload feature! You'll be prompted to share live server using live server when you click to `Go Live`. *(Thank you so much [Alex Panov](https://github.com/alpaix) for opening PR [#232](https://github.com/ritwickdey/vscode-live-server/pull/232) )* <br> <br> &mdash; ***[Docs fixing / update]*** #170, #185, #201, #233 *(Thanks [Shaurya Shubham](https://github.com/coolshaurya), [Benjamin Vincent](https://github.com/luxcium), [Jan Dittrich](https://github.com/jan-di), [Karsten 7.](https://github.com/Karsten7))*
|5.1.1|20.06.2018|&mdash; Fixed Blank Marketplace's description & changelog Page. |
|5.1.0|20.06.2018|&mdash; ***[Fixes]*** Few Bug fixes for multi-root workspace. <br><br> &mdash;New Browser support for *Blisk* [[#162](https://github.com/ritwickdey/vscode-live-server/pull/162)]<br><br> &mdash;Custom Browser settings is updated. (please check the settings page).|
|5.0.0|15.06.2018| &mdash; ***[New]*** One of the most requested feature is here. **Live Server** 💘 **your multi-root workspace**. Yes, Live Server is now supports vscode multi-root workspace. *[[#151](https://github.com/ritwickdey/vscode-live-server/pull/151)]* <br><br> &mdash; ***[Dropped]*** Previously, Live Server was supported for no workspace (just a single `html` file is opened). This feature is removed. *(In case, you're missing this feature, open an issue request. We love your feedback)* <br><br> &mdash; ***[New]*** New Command is added to change entry point of workspace. `ctrl+shift+p` and type `Live Server: Change Live Server workspace` to change workspace path. *Tips: You don't need to use the command, Live Server is smart enough, it'll eigher ask what you want or automatically set the correct workspace if you right click on a HTML file to start the server*|
|4.0.1|05.06.2018| &mdash; Keybinding has been changed to `alt+L, alt+O` & `alt+L, alt+C` for Windows/Linux & `cmd+L, cmd+O` & `cmd+L, cmd+C` for MAC . [[#121](https://github.com/ritwickdey/vscode-live-server/pull/121)] *(Thanks [Joydip Roy](https://github.com/rjoydip))* <br><br> &mdash; `Stop Live Server` options is added in editor-context menu. <br><br> &mdash; Live Sever Icon is refreshed [[#144](https://github.com/ritwickdey/vscode-live-server/pull/144)] *(Thanks [Pluwen](https://github.com/pluwen))* <br><br> &mdash; TypeScript files are now in default ignore list. [[#125](https://github.com/ritwickdey/vscode-live-server/pull/125)] *(Thanks [Ryan Naddy](https://github.com/TheColorRed))*|
|4.0.0|14.05.2018| &mdash; Integraded Websocket Support. [[#89](https://github.com/ritwickdey/vscode-live-server/pull/89)] <br> &mdash; Now open server with `Local Ip` instead of `127.0.0.1` *(See settings page for more details)* [[#116](https://github.com/ritwickdey/vscode-live-server/pull/116)] <br> &mdash; Availity to hide status bar `Go Live` button. [[#117](https://github.com/ritwickdey/vscode-live-server/pull/117)] <br> &mdash; `file` settings : Path to the entry point `entry point` file. For SPA support. *(See settings page for more details)* [[#118](https://github.com/ritwickdey/vscode-live-server/pull/118)] <br> &mdash; Docs updated. [[#93](https://github.com/ritwickdey/vscode-live-server/pull/93) [#94](https://github.com/ritwickdey/vscode-live-server/pull/94) [#107](https://github.com/ritwickdey/vscode-live-server/pull/107) [#109](https://github.com/ritwickdey/vscode-live-server/pull/109)] <br><br> Thanks to the contributors 💓 who made this possible. [Max Schmitt](https://github.com/mxschmitt), [Joydip Roy](https://github.com/rjoydip), [Jasonalex](https://github.com/jasonalex13), [Douglas Chen](https://github.com/cdswyda), [Bernard Vander Beken](https://github.com/jawn), [Philippe Loctaux](https://github.com/x4m3), [Arshad Hasan](https://github.com/arshadhasan) |
|3.2.1|17.02.2018 | &mdash; Re-deployed to vscode marketplace. For some reason few users are facing `command 'extension.liveServer.goOnline' not found` error. <br/> [[#78](https://github.com/ritwickdey/vscode-live-server/issues/78)] [[#80](https://github.com/ritwickdey/vscode-live-server/issues/80)] [[#78#issuecomment](https://github.com/ritwickdey/vscode-live-server/issues/78#issuecomment-365891533)] [[Tweet](https://twitter.com/mohamed_aladdin/status/962608074212200448)] <br/> *(Still the reason of the error is unknown to me.)* <br/><br/> &mdash; Docs Updated
|3.2.0| 09.02.2018 | &mdash; ***[New Feature [[#72](https://github.com/ritwickdey/vscode-live-server/issues/72)]]*** `liveServer.settings.mount` settings added for mounting a directory to a route (see [settings section](https://github.com/ritwickdey/vscode-live-server/blob/master/docs/settings.md) for more details.) *[Thanks [Douglas Chen](https://github.com/cdswyda) for the [PR#73](https://github.com/ritwickdey/vscode-live-server/pull/73)]* <br> |
|3.1.0| 24.01.2018 | &mdash; ***[New feature [#68](https://github.com/ritwickdey/vscode-live-server/issues/68) & [#64](https://github.com/ritwickdey/vscode-live-server/issues/64)]*** CORS Enabled by default. *[Thanks [Elias García](https://github.com/elias-garcia) & [Gabriele Garavini](https://github.com/garaving)]* <br><br> &mdash; ***[New Settings / Enhacement]*** `liveServer.settings.fullReload` settings added for full reload instead of css inject (see [settings section](https://github.com/ritwickdey/vscode-live-server/blob/master/docs/settings.md) for more details.) <br><br> &mdash; ***[New Settings / Enhacement [#49](https://github.com/ritwickdey/vscode-live-server/issues/49)]*** `liveServer.settings.wait` settings added for delay before live reloading (see [settings section](https://github.com/ritwickdey/vscode-live-server/blob/master/docs/settings.md) for more details.) *[Thanks [Allen](https://github.com/justforuse)]*
|3.0.2|19.12.17| &mdash; ***[Enhacement [#38](https://github.com/ritwickdey/vscode-live-server/issues/38) & [#55](https://github.com/ritwickdey/vscode-live-server/issues/55)]*** default keybinding for MAC is changed to `cmd+L O` & `cmd+L C` to open & close server respectively. *[Thanks [Jens Alexander Ewald](https://github.com/jens-a-e), [Tim-Lars Schnehag](https://github.com/tallon1252) & [@nakedtoast](https://github.com/nakedtoast)]* <br> |
|3.0.1|17.12.17| &mdash; ***[Bug Fixed [#31](https://github.com/ritwickdey/vscode-live-server/issues/31)]*** `AdvanceCustomBrowserCmdLine` settings has been fixed. You can specify full path of your favorite custom browser *[Thanks [hdd1013](https://github.com/hdd1013)].* <br><br> &mdash;**[Bug Fixed [#47](https://github.com/ritwickdey/vscode-live-server/issues/47)]** `ChromeDebuggingAttachment` settings has been fixed. *[Thanks [Dr. YSG](https://github.com/DrYSG)].*|
|3.0.0| 23.10.17 | &mdash; ***[Announcement]*** : Live Server is now supports dynamic pages like PHP through *[Live Server Web Extension](https://github.com/ritwickdey/live-server-web-extension)*. <br><br> &mdash; ***[New [#20](https://github.com/ritwickdey/vscode-live-server/issues/20)]*** Support for `https` protocol. *(For more, see the `setting` section)* *[Thanks [Xaqron](https://github.com/Xaqron)].* <br><br> &mdash; ***[New]*** Support for proxy. *(For more, see the `setting` section)* <br><br> &mdash; ***[New]*** Setup settings for *[Live Server Web Extension](https://github.com/ritwickdey/live-server-web-extension)*. *(For more, see the `setting` section)* <br><br> &mdash; ***[Dropped]*** `additionalTagsForLiveReload` setting dropped. *(For more, see the `setting` section)* |
|2.2.1|07.10.17| &mdash; ***[Fixed [#26](https://github.com/ritwickdey/vscode-live-server/issues/26)]*** : CPU Overloads due to `**/node_modules/**` folder is fixed - Now `**/node_modules/**` is excluded by default. *(Special Thanks to [Bestvow](https://github.com/bestvow) for the help, Thanks to [user921](https://github.com/user921) for the report).*<br><br> &mdash; ***[Fixed]*** Small fixes in Statusbar Button.|
|2.2.0|2.10.2017| &mdash; ***[New]*** Two new options added to `liveServer.settings.CustomBrowser` settings. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; `chrome:PrivateMode` <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; `firefox:PrivateMode` <br> *(For more, see the `setting` section)*. <br><br>&mdash; ***[New/Enhancement]*** Support for `SVG` files. *(Now right on a `svg` file & click to `Open with live Server`).* <br><br>&mdash; ***[Fixed [#27](https://github.com/ritwickdey/vscode-live-server/issues/27)]*** Possibility of add custom hostname. _(Thanks [Alex Lukyanov](https://github.com/lavir) for reporting the issue)_.
|2.1.1|11.09.17| ***[Enhancement [#22](https://github.com/ritwickdey/vscode-live-server/issues/22) [#23](https://github.com/ritwickdey/vscode-live-server/issues/23)]*** Now you can trun off the warring message for not detecting supporting tag for live reload. _(Thanks [skelesp](https://github.com/skelesp) and [郑国庆](https://github.com/zhengshuai1001) for the feedback)_ |
|2.1.0 | 10.09.17 | &mdash; ***[New Feature with Setting [#14](https://github.com/ritwickdey/vscode-live-server/issues/14)]*** `liveServer.settings.additionalTagsForLiveReload` : Support for Live Reload feature if there are no body or head tag in HTML. *[Experimental Feature - BETA]* *(See Settings section for more details).* <br><br>&mdash; ***[Feature/Enhancement [#18](https://github.com/ritwickdey/vscode-live-server/issues/18)]*** Now the Extension will prompt a message if supporting tag for live reload isn't detected in HTML. <br><br>&mdash; ***[Bug Fixes [#21](https://github.com/ritwickdey/vscode-live-server/issues/21)]*** Error on very fast double click on "Go Live" button.
| 2.0.0 | 27.08.17 | &mdash; ***[Final Release with v2.0.0]*** The *Preview* tag is removed from the extension. (BTW, More update comming... :smile:) <br><br>&mdash; ***[New Shortcut [#17](https://github.com/ritwickdey/vscode-live-server/issues/17)]*** Explorer Context Menu shortcut added. Just right click on a a `HTML` file & click `Open with Live Server`. <br><br>&mdash; ***[Enhancement [#16](https://github.com/ritwickdey/vscode-live-server/issues/16)]*** No more annoy message _'Live reload enabled'_ on browser console everytime. Now it will be logged on console for only one time. *[Thanks [AAhrit](https://github.com/AAhrit)].* <br><br>&mdash; **[Fixed [#11](https://github.com/ritwickdey/vscode-live-server/issues/11)]** In case if your folder name contains *exclamatory sign* (`!`) (E.g. : `myfolder!name`), live reload was not working *[Thanks [oliku](https://github.com/oliku)].*<br><br>&mdash; ***[One Shortcut Dropped]*** : Server closing shortcut by right clicking onto a `HTML` file is removed. (I believe that was a unconventional shortcut. if I am wrong, open a issue request on GitHub.). |
|1.6.11|20.08.17|&mdash; ***[Fixed Again [#13](https://github.com/ritwickdey/vscode-live-server/issues/13)]*** Browser was not opening after server started in Linux. - I don't really know, why the issue is occurring if I build package with `vsce` from Windows but no issue from Linux.<br><br> &mdash; ***[New Settings]*** `liveServer.settings.host`: To switch host name between `localhost` and `127.0.0.1`. Default is `127.0.0.1`.|
|1.6.10|19.08.17| &mdash; ***[Fixed [#13](https://github.com/ritwickdey/vscode-live-server/issues/13)]*** Browser was not opening after server started in Linux. _[Thanks [Ahmed Alzhrani](https://github.com/matt-zhrani)]_.<br><br> &mdash; ***[Fixed]*** Fixed Ignore Files feature (It was working only for first time of starting server).<br><br> &mdash; ***[Enhancement]*** Now you don't have to open a file to start server from workspace. Previously you got an annoyed message saying _"Open a file..."_.|
|1.6.9|15.08.17| &mdash; ***[New Settings]*** `liveServer.settings.donotShowInfoMsg :` To turn off information pop-up messages like _"Server starts with port xxxx"_ or like that. To turn off it, you can set the value as `true` or you can click to _"Don't show again"_ when a information message pop-up.<br><br> &mdash; ***[Enhancement]*** When server is already started & you right click onto a HTML file & choose 'Open with Live Server', instead of a pop-up message that *"Server already is already running at port xxxx"*, now it will open the HTML file to browser with same server instance.<br><br> &mdash; Source Code is refactored (If you you found anything broken, feel free to report me on GitHub). |
|1.6.8|04.08.17|***[New Settings]*** `liveServer.settings.ignoreFiles`: To ignore specific file changes. _(For More details, check out `Settings` section)_ [[#10](https://github.com/ritwickdey/vscode-live-server/issues/10)]. (Thanks [AminLA](https://github.com/AminLA)).|
|1.6.7|30.07.17|***[New Settings]*** `liveServer.settings.NoBrowser` - If it is true live server will start without browser opened.|
|1.6.6|28.07.17|&mdash; Remote Connect : Change something into HTML/CSS/JS from your PC and watch the effect to your phone with live reload._[Need Help? See FAQ Section]_<br> &mdash; `.htm` support.|
|1.6.5|26.07.17|Bug Fixed for Linux & macOS. Sometime extension was crashing if `liveServer.settings.CustomBrowser` settings is not provided by manually on macOS & Linux. |
|1.6.4|26.07.17|Critical Bug Fixed for Linux & macOS. Extension was crashing for `liveServer.settings.root` settings on macOS & Linux. |
|1.6.3| 24.07.17 | Validation added for Port range. |
|1.6.2| 22.07.17 | Fixed error handling for unavailable port. |
|1.6.1|20.07.17|Fixed Update - Extension was not opening system's default browser. _[Sorry for that, Extension was crashing internally]_|
|1.6.0|19.07.17| &mdash; [[#5](https://github.com/ritwickdey/vscode-live-server/issues/5)] New Settings - `liveServer.settings.AdvanceCustomBrowserCmdLine` - Now set your any favorite browser (Eg: Chrome Canary, Firefox Nightly) for Live Server using advance Command Line. (_[More Info.](https://github.com/ritwickdey/vscode-live-server#settings)_) [Thanks [Obinna A. Kalu](https://github.com/obkalu)]. <br><br> &mdash; Support for Microsoft-Edge through `liveServer.settings.CustomBrowser` settings. |
|1.5.0 | 17.07.17 | [[Quick Gif Demo](https://github.com/ritwickdey/vscode-live-server/blob/master/./images/Screenshot/ChromeDebugging.gif)] New Feature Added - Support for Chrome Debugging Attachment. (You have to enable the feature through `liveServer.settings.ChromeDebuggingAttachment` settings. _[More Info.](https://github.com/ritwickdey/vscode-live-server#settings)_). [Thanks [Obinna A. Kalu](https://github.com/obkalu) [[#5](https://github.com/ritwickdey/vscode-live-server/issues/5)] ].
|1.4.4 | 12.07.17 | Validation Pattern is added for root settings & Custom Browser settings is fixed. Package size reduced.
|1.4.3 | 10.07.17 | Status-bar Icon added. Minor Fix update on Status bar control. |
|1.4.2|08.07.17|Minor Fix Update on Custom Browser Setting.|
|1.4.1 | 07.07.17 | Minor Fix Update. (Thanks [Adam](https://github.com/AdamLombard)) [[#4](https://github.com/ritwickdey/vscode-live-server/pull/4)]. |
|1.4.0 | 04.07.17 | Two new settings are added. <br> &mdash; 1. `liveServer.settings.root` to change root of server in between workspace folder structure. (Thanks _[zorgoz](https://github.com/zorgoz)_ for the suggestion) [[#2](https://github.com/ritwickdey/vscode-live-server/issues/2)].<br> &mdash; 2. `liveServer.settings.CustomBrowser` to change default browser.<br> <br> &mdash; Bug Fixed - `Cannot GET/ Error` when server starts with a html file located sub folder of root. (Thanks _[John Michael Robin](https://github.com/jmmrdev)_ for reporting the bug) [[#3](https://github.com/ritwickdey/vscode-live-server/issues/3)].
| 1.3.1 | 03.07.17 | File Extension detection issue is fixed, `Live Server` will be activated if there have atleast one HTML except in your `node_modoules` directory and description of extension updated as git repo name of the extension is updated to conventional name |
| 1.3.0 | 02.07.17 |`Go Live` option on Statusbar will be appeared if HTML file is opened or if there have at least one HTML file in workspace.(Thanks _[Yu Zhang](https://github.com/neilsustc)_) [[#1](https://github.com/ritwickdey/vscode-live-server/issues/1)].|
| 1.2.0 | 30.06.17 | Settings for Customizing Port No of Live Server. Small UX updated. |
| 1.1.1 | 30.06.17 | Keyboad Shortcuts has been changed to `ALT+L, O` and `ALT+L, C` due to `Shift+ANY_CHARACTER` has different meaning - sorry for that.
| 1.1.0 | 30.06.17 | Editor/Context Menu Shortcut & Keyboad Shortcut added, Changelog added and Readme updated. |
| 1.0.0 | 29.06.17 | Fixed - issue in Server closing. |
| 0.2.0 | 28.06.17 | Status Bar control & User Experience updated and bugs Fixed. |
| 0.1.0 | 28.06.17 | Live Server Port details added, Bugs fixed & improvement. |
| 0.0.2 | 28.06.17 | Extension Icon & description added. |
| 0.0.1 | 28.06.17 | Initial Release. |

View file

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2017 Ritwick Dey
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View file

@ -0,0 +1,100 @@
_[I'm sorry but I'm super busy now. If you want to be a maintainer of the project, please feel free to contact me! You've to be passionate about programming]_
# Live Server
**Live Server loves** 💘 **your multi-root workspace**
> **Live Server for server side pages like PHP. [Check Here](https://github.com/ritwickdey/live-server-web-extension)**
> ***[For 'command not found error' [#78](https://github.com/ritwickdey/vscode-live-server/issues/78)]***
[![VSCode Marketplace](https://img.shields.io/vscode-marketplace/v/ritwickdey.LiveServer.svg?style=flat-square&label=vscode%20marketplace)](https://marketplace.visualstudio.com/items?itemName=ritwickdey.LiveServer) [![Total Installs](https://img.shields.io/vscode-marketplace/d/ritwickdey.LiveServer.svg?style=flat-square)](https://marketplace.visualstudio.com/items?itemName=ritwickdey.LiveServer) [![Avarage Rating](https://img.shields.io/vscode-marketplace/r/ritwickdey.LiveServer.svg?style=flat-square)](https://marketplace.visualstudio.com/items?itemName=ritwickdey.LiveServer)
[![Travis branch](https://img.shields.io/travis/ritwickdey/vscode-live-server/master.svg?style=flat-square&label=travis%20branch)](https://travis-ci.org/ritwickdey/vscode-live-server) [![Appveyor branch](https://img.shields.io/appveyor/ci/ritwickdey/vscode-live-server.svg?style=flat-square&label=appveyor%20branch)](https://ci.appveyor.com/project/ritwickdey/vscode-live-server) [![GitHub license](https://img.shields.io/badge/license-MIT-blue.svg?style=flat-square)](https://github.com/ritwickdey/vscode-live-server/)
<br>
**Launch a local development server with live reload feature for static & dynamic pages.**
<br>
![Live Server Demo VSCode](https://github.com/ritwickdey/vscode-live-server/raw/master/./images/Screenshot/vscode-live-server-animated-demo.gif)
## Shortcuts to Start/Stop Server
**_[NOTE: In case if you don't have any `.html` or `.htm` file in your workspace then you have to follow method no 4 & 5 to start server.]_**
1. Open a project and click to `Go Live` from the status bar to turn the server on/off.
![Go Live Control Preview](https://github.com/ritwickdey/vscode-live-server/raw/master/./images/Screenshot/vscode-live-server-statusbar-3.jpg)
2. Right click on a `HTML` file from Explorer Window and click on `Open with Live Server`.
![Explorer Window Control](https://github.com/ritwickdey/vscode-live-server/raw/master/./images/Screenshot/vscode-live-server-explorer-menu-demo-1.gif).
3. Open a HTML file and right-click on the editor and click on `Open with Live Server`.
![Edit Menu Option Preview](https://github.com/ritwickdey/vscode-live-server/raw/master/./images/Screenshot/vscode-live-server-editor-menu-3.jpg)
4. Hit `(alt+L, alt+O)` to Open the Server and `(alt+L, alt+C)` to Stop the server (You can change the shortcut form keybinding). *[On MAC, `cmd+L, cmd+O` and `cmd+L, cmd+C`]*
5. Open the Command Pallete by pressing `F1` or `ctrl+shift+P` and type `Live Server: Open With Live Server ` to start a server or type `Live Server: Stop Live Server` to stop a server.
## Features
* A Quick Development Live Server with live browser reload.
* Start or Stop server by a single click from status bar.
* Open a HTML file to browser from Explorer menu.[[Quick Gif Demo](https://github.com/ritwickdey/vscode-live-server/blob/master/./images/Screenshot/vscode-live-server-explorer-menu-demo-1.gif?raw=true)].
* Support for excluding files for change detection.
* Hot Key control.
* Customizable Port Number, Server Root, default browser.
* Support for any browser _(Eg: Firefox Nightly)_ using advance Command Line.
* Support for Chrome Debugging Attachment (_[More Info](https://marketplace.visualstudio.com/items?itemName=msjsdiag.debugger-for-chrome)_). [[Quick Gif Demo](https://github.com/ritwickdey/vscode-live-server/blob/master/./images/Screenshot/ChromeDebugging.gif?raw=true)].
* Remote Connect through WLAN (E.g.: Connect with mobile) _[Need Help? See FAQ Section]_
* Use preferable host name *(localhost or 127.0.0.1)*.
* Customizable Supporting Tag for Live Reload feature. (Default is `Body` or `head`)
* SVG Support
* `https` Support.
* Support for proxy.
* CORS Enabled
* Multi-root workspace supported.
* Support for any file even dynamic pages through *[Live Server Web Extension](https://github.com/ritwickdey/live-server-web-extension)*.
## Installation
Open VSCode and type `ctrl+P`, type `ext install ritwickdey.liveserver`.
## Settings
All settings are now listed here [Settings Docs](https://github.com/ritwickdey/vscode-live-server/blob/master/./docs/settings.md).
## FAQs
*All FAQs are now listed here [FAQ Docs](https://github.com/ritwickdey/vscode-live-server/blob/master/./docs/faqs.md)*
## What's new ?
* ### Version 5.6.1 (17.04.19)
* ***[NEW]*** Fixing `Extension host terminated unexpectedly` *[[#431](https://github.com/ritwickdey/vscode-live-server/issues/431)
* ### Version 5.6.0 (17.04.19)
* ***[NEW]*** Intregation of `Browser Preview` with `Live Server` *[[#352](https://github.com/ritwickdey/vscode-live-server/pull/352) - Thanks to [Kenneth Auchenberg](https://github.com/auchenberg)]*
* ***[NEW]*** Fallback to random port If given port is busy. *[[#330](https://github.com/ritwickdey/vscode-live-server/pull/330) - Thanks to [Ali Almohaya](https://github.com/Almo7aya) ]*
* ***[FIXES]*** Moved to `vscode-chokidar` lib for *[#285](https://github.com/ritwickdey/vscode-live-server/issues/285)*.
* Doc Fixes *[[#388](https://github.com/ritwickdey/vscode-live-server/pull/388) - Thanks to [Ted Silbernagel](https://github.com/tedsilb)]*
* ### Version 5.5.1 (12.02.19)
* ***[Fixes]*** Fixed `Extension host terminated unexpectedly` for MacOS. [[#285](https://github.com/ritwickdey/vscode-live-server/issues/285)]
* ### Version 5.5.0 (12.02.19)
* ***[Fixes]*** Fixed `ignoreFiles` settings [[#255](https://github.com/ritwickdey/vscode-live-server/issues/255)]
* Attempt to fix `high cpu load` [[#278](https://github.com/ritwickdey/vscode-live-server/issues/278)]
## Changelog
To check full changelog [click here](https://github.com/ritwickdey/vscode-live-server/blob/master/CHANGELOG.md).
## Special Thanks To Maintainers
A special thanks to [Max Schmitt](https://github.com/mxschmitt), [Joydip Roy](https://github.com/rjoydip) & [Ayo Adesugba](https://github.com/adesugbaa) for contributing their valueable time on this project.
[![Max Schmitt](https://avatars2.githubusercontent.com/u/17984549?s=64)](https://github.com/mxschmitt)
[![Joydip Roy](https://avatars2.githubusercontent.com/u/15318294?s=64)](https://github.com/rjoydip)
[![Ayo Adesugba](https://avatars2.githubusercontent.com/u/55943?s=64)](https://github.com/adesugbaa)
## LICENSE
This extension is licensed under the [MIT License](https://github.com/ritwickdey/vscode-live-server/blob/master/LICENSE)

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

View file

@ -0,0 +1,91 @@
'use strict';
Object.defineProperty(exports, "__esModule", { value: true });
const vscode_1 = require("vscode");
class Config {
static get configuration() {
return vscode_1.workspace.getConfiguration('liveServer.settings');
}
static getSettings(val) {
return Config.configuration.get(val);
}
static setSettings(key, val, isGlobal = false) {
return Config.configuration.update(key, val, isGlobal);
}
static get getHost() {
return Config.getSettings('host');
}
static get getLocalIp() {
return Config.getSettings('useLocalIp');
}
static get getPort() {
return Config.getSettings('port');
}
static setPort(port) {
return Config.setSettings('port', port);
}
static get getRoot() {
return Config.getSettings('root');
}
static get getNoBrowser() {
return Config.getSettings('NoBrowser');
}
static get getUseBrowserPreview() {
return Config.getSettings('useBrowserPreview');
}
static get getAdvancedBrowserCmdline() {
return Config.getSettings('AdvanceCustomBrowserCmdLine');
}
static get getChromeDebuggingAttachment() {
return Config.getSettings('ChromeDebuggingAttachment');
}
static get getCustomBrowser() {
return Config.getSettings('CustomBrowser');
}
static get getIgnoreFiles() {
return Config.getSettings('ignoreFiles');
}
static get getDonotShowInfoMsg() {
return Config.getSettings('donotShowInfoMsg');
}
static setDonotShowInfoMsg(val, isGlobal = false) {
Config.configuration.update('donotShowInfoMsg', val, isGlobal);
}
static get getDonotVerifyTags() {
return Config.getSettings('donotVerifyTags');
}
static setDonotVerifyTags(val, isGlobal = false) {
Config.configuration.update('donotVerifyTags', val, isGlobal);
}
static get getUseWebExt() {
return Config.getSettings('useWebExt') || false;
}
static get getProxy() {
return Config.getSettings('proxy');
}
static get getHttps() {
return Config.getSettings('https') || {};
}
static get getWait() {
return Config.getSettings('wait');
}
static get getfullReload() {
return Config.getSettings('fullReload');
}
static get getMount() {
return Config.getSettings('mount');
}
static get getShowOnStatusbar() {
return Config.getSettings('showOnStatusbar') || false;
}
static get getFile() {
return Config.getSettings('file');
}
static get getMutiRootWorkspaceName() {
return Config.getSettings('multiRootWorkspaceName');
}
static setMutiRootWorkspaceName(val) {
return Config.configuration.update('multiRootWorkspaceName', val, false);
}
}
exports.Config = Config;
//# sourceMappingURL=Config.js.map

View file

@ -0,0 +1,129 @@
'use strict';
Object.defineProperty(exports, "__esModule", { value: true });
const fs = require("fs");
const path = require("path");
const Config_1 = require("./Config");
exports.SUPPRORTED_EXT = [
'.html', '.htm', '.svg'
];
exports.isRelativePath = (pathUrl) => {
if (pathUrl.startsWith('*'))
return false;
return !path.isAbsolute(pathUrl);
};
class Helper {
static testPathWithRoot(workSpacePath) {
let rootPath;
// Test the path is actually exists or not
const testPath = path.join(workSpacePath, Config_1.Config.getRoot);
let isNotOkay = !fs.existsSync(testPath);
if (!isNotOkay) { // means okay :)
rootPath = testPath;
}
else {
rootPath = workSpacePath;
}
if (!rootPath.endsWith(path.sep))
rootPath = rootPath + path.sep;
return {
isNotOkay,
rootPath
};
}
/**
* This function return the remaining path from root to target.
* e.g. : root is `c:\user\rootfolder\` and target is `c:\user\rootfolder\subfolder\index.html`
* then this function will return `subfolder\index.html` as html is a supported otherwise it will return null.
*
* @param rootPath
* @param targetPath
*/
static getSubPath(rootPath, targetPath) {
if (!Helper.IsSupportedFile(targetPath) || !targetPath.startsWith(rootPath)) {
return null;
}
return targetPath.substring(rootPath.length, targetPath.length);
}
/**
* It returns true if file is supported. input can be in full file path or just filename with extension name.
* @param file: can be path/subpath/file.ts or file.ts
*/
static IsSupportedFile(file) {
let ext = path.extname(file) || (file.startsWith('.') ? file : `.${file}`);
return exports.SUPPRORTED_EXT.indexOf(ext.toLowerCase()) > -1;
}
/**
*
* @param rootPath
* @param workspacePath
* @param onTagMissedCallback
*/
static generateParams(rootPath, workspacePath, onTagMissedCallback) {
workspacePath = workspacePath || '';
const port = Config_1.Config.getPort;
const ignorePathGlob = Config_1.Config.getIgnoreFiles || [];
const ignoreFiles = [];
ignorePathGlob.forEach(ignoredPath => {
if (exports.isRelativePath(ignoredPath))
ignoreFiles.push(path.join(workspacePath, ignoredPath));
else
ignoreFiles.push(ignoredPath);
});
const proxy = Helper.getProxySetup();
const https = Helper.getHttpsSetup();
const mount = Config_1.Config.getMount;
// In live-server mountPath is reslove by `path.resolve(process.cwd(), mountRule[1])`.
// but in vscode `process.cwd()` is the vscode extensions path.
// The correct path should be resolve by workspacePath.
mount.forEach((mountRule) => {
if (mountRule.length === 2 && mountRule[1]) {
mountRule[1] = path.resolve(workspacePath, mountRule[1]);
}
});
const file = Config_1.Config.getFile;
return {
port: port,
host: '0.0.0.0',
root: rootPath,
file: file,
open: false,
https: https,
ignore: ignoreFiles,
disableGlobbing: true,
proxy: proxy,
cors: true,
wait: Config_1.Config.getWait || 100,
fullReload: Config_1.Config.getfullReload,
useBrowserExtension: Config_1.Config.getUseWebExt,
onTagMissedCallback: onTagMissedCallback,
mount: mount
};
}
static getHttpsSetup() {
const httpsConfig = Config_1.Config.getHttps;
let https = null;
if (httpsConfig.enable === true) {
let cert = fs.readFileSync(httpsConfig.cert, 'utf8');
let key = fs.readFileSync(httpsConfig.key, 'utf8');
https = {
cert: cert,
key: key,
passphrase: httpsConfig.passphrase
};
}
return https;
}
static getProxySetup() {
const proxySetup = Config_1.Config.getProxy;
let proxy = [[]];
if (proxySetup.enable === true) {
proxy[0].push(proxySetup.baseUri, proxySetup.proxyUri);
}
else {
proxy = null; // required to change the type [[]] to black array [].
}
return proxy;
}
}
exports.Helper = Helper;
//# sourceMappingURL=Helper.js.map

View file

@ -0,0 +1,3 @@
'use strict';
Object.defineProperty(exports, "__esModule", { value: true });
//# sourceMappingURL=IAppModel.js.map

View file

@ -0,0 +1,36 @@
'use strict';
Object.defineProperty(exports, "__esModule", { value: true });
const liveServer = require("live-server");
const httpShutdown = require("http-shutdown");
class LiveServerHelper {
static StartServer(params, callback) {
setTimeout(() => {
try {
let ServerInstance = liveServer.start(params);
setTimeout(() => {
if (!ServerInstance._connectionKey) {
return callback({});
}
httpShutdown(ServerInstance);
return callback(ServerInstance);
}, 1000);
}
catch (err) {
console.error(err);
callback({
errorMsg: err
});
}
}, 0);
}
static StopServer(LiveServerInstance, callback) {
LiveServerInstance.shutdown(() => {
// callback(); /*only Working first time, Unknown Bug*/
});
LiveServerInstance.close();
liveServer.shutdown();
setTimeout(() => { callback(); }, 1000);
}
}
exports.LiveServerHelper = LiveServerHelper;
//# sourceMappingURL=LiveServerHelper.js.map

View file

@ -0,0 +1,75 @@
'use strict';
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
const vsls = require("vsls/vscode");
/**
* Manages state of a live server shared via VS Live Share.
* Caches the live server path and starts/stops sharing in response to Live Share session events.
*/
class LiveShareHelper {
constructor(appModel) {
this.appModel = appModel;
this.appModel.onDidGoLive((e) => __awaiter(this, void 0, void 0, function* () {
// cache the current live server browse url
this.livePathUri = e.pathUri;
yield this.shareLiveServer();
}));
this.appModel.onDidGoOffline((e) => {
// reset the live server cached path
this.livePathUri = null;
if (this.activeHostSession && this.sharedServer) {
// will un-share the server
this.sharedServer.dispose();
this.sharedServer = null;
}
});
this.deferredWork = vsls.getApi().then(api => {
if (api) { // if Live Share is available (installed)
this.ensureInitialized(api);
}
});
}
dispose() {
return __awaiter(this, void 0, void 0, function* () {
yield this.deferredWork;
});
}
ensureInitialized(api) {
this.liveshare = api;
if (this.liveshare.session && this.liveshare.session.role === vsls.Role.Host) {
this.activeHostSession = this.liveshare.session;
}
this.liveshare.onDidChangeSession((e) => __awaiter(this, void 0, void 0, function* () {
if (e.session.role === vsls.Role.Host) {
// active sharing collaboration session
this.activeHostSession = e.session;
yield this.shareLiveServer();
}
else {
// any other session state, including joined as a guest
this.activeHostSession = null;
}
}));
}
shareLiveServer() {
return __awaiter(this, void 0, void 0, function* () {
if (this.activeHostSession && this.livePathUri) {
// only share the server when we're live and VS Live Share session is active
this.sharedServer = yield this.liveshare.shareServer({
port: this.appModel.runningPort,
displayName: 'Live Server',
browseUrl: `http://localhost:${this.appModel.runningPort}/${this.livePathUri.replace(/\\/gi, '/')}`
});
}
});
}
}
exports.LiveShareHelper = LiveShareHelper;
//# sourceMappingURL=LiveShareHelper.js.map

View file

@ -0,0 +1,42 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const vscode_1 = require("vscode");
const Config_1 = require("./Config");
class StatusbarUi {
static get statusbar() {
if (!StatusbarUi._statusBarItem) {
StatusbarUi._statusBarItem = vscode_1.window
.createStatusBarItem(vscode_1.StatusBarAlignment.Right, 100);
// Show status bar only if user wants :)
if (Config_1.Config.getShowOnStatusbar)
this.statusbar.show();
}
return StatusbarUi._statusBarItem;
}
static Init() {
StatusbarUi.Working('loading...');
setTimeout(function () {
StatusbarUi.Live();
}, 1000);
}
static Working(workingMsg = 'Working on it...') {
StatusbarUi.statusbar.text = `$(pulse) ${workingMsg}`;
StatusbarUi.statusbar.tooltip = 'In case if it takes long time, try to close all browser window.';
StatusbarUi.statusbar.command = null;
}
static Live() {
StatusbarUi.statusbar.text = '$(broadcast) Go Live';
StatusbarUi.statusbar.command = 'extension.liveServer.goOnline';
StatusbarUi.statusbar.tooltip = 'Click to run live server';
}
static Offline(port) {
StatusbarUi.statusbar.text = `$(circle-slash) Port : ${port}`;
StatusbarUi.statusbar.command = 'extension.liveServer.goOffline';
StatusbarUi.statusbar.tooltip = 'Click to close server';
}
static dispose() {
StatusbarUi.statusbar.dispose();
}
}
exports.StatusbarUi = StatusbarUi;
//# sourceMappingURL=StatusbarUi.js.map

View file

@ -0,0 +1,34 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
const vscode_1 = require("vscode");
const opn = require("opn");
const SETUP_STRING = 'liveServer.setup.version';
function checkNewAnnouncement(memento) {
return __awaiter(this, void 0, void 0, function* () {
const packageJSON = vscode_1.extensions.getExtension('ritwickdey.LiveServer').packageJSON;
const announment = packageJSON.announcement;
if (!announment && Object.keys(announment).length === 0)
return;
const stateVersion = (yield memento.get(SETUP_STRING)) || '0.0.0';
const installedVersion = packageJSON.version;
if (stateVersion !== installedVersion && installedVersion === announment.onVersion) {
yield memento.update(SETUP_STRING, installedVersion);
const showDetails = 'Show Details';
const choice = yield vscode_1.window.showInformationMessage(announment.message, showDetails);
if (choice === showDetails) {
const url = announment.url || 'https://github.com/ritwickdey/vscode-live-server';
opn(url);
}
}
});
}
exports.checkNewAnnouncement = checkNewAnnouncement;
//# sourceMappingURL=index.js.map

View file

@ -0,0 +1,268 @@
'use strict';
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
const vscode_1 = require("vscode");
const LiveServerHelper_1 = require("./LiveServerHelper");
const StatusbarUi_1 = require("./StatusbarUi");
const Config_1 = require("./Config");
const Helper_1 = require("./Helper");
const workspaceResolver_1 = require("./workspaceResolver");
const LiveShareHelper_1 = require("./LiveShareHelper");
const opn = require("opn");
const ips = require("ips");
class AppModel {
constructor() {
this.goLiveEvent = new vscode_1.EventEmitter();
this.goOfflineEvent = new vscode_1.EventEmitter();
const _ips = ips();
this.localIps = _ips.local ? _ips.local : Config_1.Config.getHost;
this.IsServerRunning = false;
this.runningPort = null;
this.liveShareHelper = new LiveShareHelper_1.LiveShareHelper(this);
this.haveAnySupportedFile().then(() => {
StatusbarUi_1.StatusbarUi.Init();
});
}
get onDidGoLive() {
return this.goLiveEvent.event;
}
get onDidGoOffline() {
return this.goOfflineEvent.event;
}
Golive(pathUri) {
return __awaiter(this, void 0, void 0, function* () {
// if no folder is opened.
if (!vscode_1.workspace.workspaceFolders) {
return this.showPopUpMsg(`Open a folder or workspace... (File -> Open Folder)`, true);
}
if (!vscode_1.workspace.workspaceFolders.length) {
return this.showPopUpMsg(`You've not added any folder in the workspace`, true);
}
const workspacePath = yield workspaceResolver_1.workspaceResolver(pathUri);
if (!this.isCorrectWorkspace(workspacePath))
return;
const openedDocUri = pathUri || (vscode_1.window.activeTextEditor ? vscode_1.window.activeTextEditor.document.fileName : '');
const pathInfos = Helper_1.Helper.testPathWithRoot(workspacePath);
if (this.IsServerRunning) {
const relativePath = Helper_1.Helper.getSubPath(pathInfos.rootPath, openedDocUri) || '';
this.goLiveEvent.fire({ runningPort: this.runningPort, pathUri: relativePath });
return this.openBrowser(this.runningPort, relativePath);
}
if (pathInfos.isNotOkay) {
this.showPopUpMsg('Invaild Path in liveServer.settings.root settings. live Server will serve from workspace root', true);
}
if (this.IsStaging)
return;
let params = Helper_1.Helper.generateParams(pathInfos.rootPath, workspacePath, () => {
this.tagMissedCallback();
});
LiveServerHelper_1.LiveServerHelper.StartServer(params, (serverInstance) => __awaiter(this, void 0, void 0, function* () {
if (serverInstance && serverInstance.address) {
this.LiveServerInstance = serverInstance;
this.runningPort = serverInstance.address().port;
this.ToggleStatusBar();
this.showPopUpMsg(`Server is Started at port : ${this.runningPort}`);
if (!Config_1.Config.getNoBrowser) {
const relativePath = Helper_1.Helper.getSubPath(pathInfos.rootPath, openedDocUri) || '';
this.goLiveEvent.fire({ runningPort: this.runningPort, pathUri: relativePath });
this.openBrowser(this.runningPort, relativePath);
}
}
else {
if (!serverInstance.errorMsg) {
yield Config_1.Config.setPort(Config_1.Config.getPort + 1); // + 1 will be fine
this.showPopUpMsg(`The default port : ${Config_1.Config.getPort - 1} is currently taken, changing port to : ${Config_1.Config.getPort}.`);
this.Golive(pathUri);
}
else {
this.showPopUpMsg(`Something is went wrong! Please check into Developer Console or report on GitHub.`, true);
}
this.IsServerRunning = true; // to revert status - cheat :p
this.ToggleStatusBar(); // reverted
}
}));
this.IsStaging = true;
StatusbarUi_1.StatusbarUi.Working('Starting...');
});
}
GoOffline() {
if (this.IsStaging)
return;
if (!this.IsServerRunning) {
this.showPopUpMsg(`Server is not already running`);
return;
}
this.goOfflineEvent.fire({ runningPort: this.runningPort });
LiveServerHelper_1.LiveServerHelper.StopServer(this.LiveServerInstance, () => {
this.showPopUpMsg('Server is now offline.');
this.ToggleStatusBar();
this.LiveServerInstance = null;
this.runningPort = null;
this.previousWorkspacePath = null;
});
this.IsStaging = true;
StatusbarUi_1.StatusbarUi.Working('Disposing...');
}
changeWorkspaceRoot() {
workspaceResolver_1.setOrChangeWorkspace()
.then(workspceName => {
if (workspceName === undefined)
return;
vscode_1.window.showInformationMessage(`Success! '${workspceName}' workspace is now root of Live Server`);
// If server is running, Turn off the server.
if (this.IsServerRunning)
this.GoOffline();
});
}
isCorrectWorkspace(workspacePath) {
if (this.IsServerRunning &&
this.previousWorkspacePath &&
this.previousWorkspacePath !== workspacePath) {
this.showPopUpMsg(`Server is already running from different workspace.`, true);
return false;
}
else
this.previousWorkspacePath = workspacePath;
return true;
}
tagMissedCallback() {
this.showPopUpMsg('Live Reload is not possible without body or head tag.', null, true);
}
showPopUpMsg(msg, isErrorMsg = false, isWarning = false) {
if (isErrorMsg) {
vscode_1.window.showErrorMessage(msg);
}
else if (isWarning && !Config_1.Config.getDonotVerifyTags) {
const donotShowMsg = 'I understand, Don\'t show again';
vscode_1.window.showWarningMessage(msg, donotShowMsg)
.then(choise => {
if (choise && choise === donotShowMsg) {
Config_1.Config.setDonotVerifyTags(true, true);
}
});
}
else if (!Config_1.Config.getDonotShowInfoMsg) {
const donotShowMsg = 'Don\'t show again';
vscode_1.window.showInformationMessage(msg, donotShowMsg)
.then(choice => {
if (choice && choice === donotShowMsg) {
Config_1.Config.setDonotShowInfoMsg(true, true);
}
});
}
}
ToggleStatusBar() {
this.IsStaging = false;
if (!this.IsServerRunning) {
StatusbarUi_1.StatusbarUi.Offline(this.runningPort || Config_1.Config.getPort);
}
else {
StatusbarUi_1.StatusbarUi.Live();
}
this.IsServerRunning = !this.IsServerRunning;
}
haveAnySupportedFile() {
return new Promise(resolve => {
const globFormat = `**/*[${Helper_1.SUPPRORTED_EXT.join(' | ')}]`;
vscode_1.workspace.findFiles(globFormat, '**/node_modules/**', 1)
.then((files) => __awaiter(this, void 0, void 0, function* () {
if (files && files.length)
return resolve();
}));
});
}
openBrowser(port, path) {
const host = Config_1.Config.getLocalIp ? this.localIps : Config_1.Config.getHost;
const protocol = Config_1.Config.getHttps.enable ? 'https' : 'http';
let params = [];
let advanceCustomBrowserCmd = Config_1.Config.getAdvancedBrowserCmdline;
if (path.startsWith('\\') || path.startsWith('/')) {
path = path.substring(1, path.length);
}
path = path.replace(/\\/gi, '/');
let useBrowserPreview = Config_1.Config.getUseBrowserPreview;
if (useBrowserPreview) {
let url = `${protocol}://${host}:${port}/${path}`;
let onSuccess = () => { };
let onError = (err) => {
this.showPopUpMsg(`Server is started at ${this.runningPort} but failed to open in Browser Preview. Got Browser Preview extension installed?`, true);
console.log('\n\nError Log to open Browser : ', err);
console.log('\n\n');
};
vscode_1.commands.executeCommand(`browser-preview.openPreview`, url).then(onSuccess, onError);
return;
}
if (advanceCustomBrowserCmd) {
advanceCustomBrowserCmd
.split('--')
.forEach((command, index) => {
if (command) {
if (index !== 0)
command = '--' + command;
params.push(command.trim());
}
});
}
else {
let CustomBrowser = Config_1.Config.getCustomBrowser;
let ChromeDebuggingAttachmentEnable = Config_1.Config.getChromeDebuggingAttachment;
if (CustomBrowser && CustomBrowser !== 'null' /*For backward capability*/) {
let browserDetails = CustomBrowser.split(':');
let browserName = browserDetails[0];
params.push(browserName);
if (browserDetails[1] && browserDetails[1] === 'PrivateMode') {
if (browserName === 'chrome' || browserName === 'blisk')
params.push('--incognito');
else if (browserName === 'firefox')
params.push('--private-window');
}
if ((browserName === 'chrome' || browserName === 'blisk') && ChromeDebuggingAttachmentEnable) {
params.push(...[
'--new-window',
'--no-default-browser-check',
'--remote-debugging-port=9222',
'--user-data-dir=' + __dirname
]);
}
}
}
if (params[0] && params[0] === 'chrome') {
switch (process.platform) {
case 'darwin':
params[0] = 'google chrome';
break;
case 'linux':
params[0] = 'google-chrome';
break;
case 'win32':
params[0] = 'chrome';
break;
default:
params[0] = 'chrome';
}
}
else if (params[0] && params[0].startsWith('microsoft-edge')) {
params[0] = `microsoft-edge:${protocol}://${host}:${port}/${path}`;
}
try {
opn(`${protocol}://${host}:${port}/${path}`, { app: params || [''] });
}
catch (error) {
this.showPopUpMsg(`Server is started at ${this.runningPort} but failed to open browser. Try to change the CustomBrowser settings.`, true);
console.log('\n\nError Log to open Browser : ', error);
console.log('\n\n');
}
}
dispose() {
StatusbarUi_1.StatusbarUi.dispose();
}
}
exports.AppModel = AppModel;
//# sourceMappingURL=appModel.js.map

View file

@ -0,0 +1,44 @@
'use strict';
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
const vscode_1 = require("vscode");
const appModel_1 = require("./appModel");
const announcement_1 = require("./announcement");
function activate(context) {
const appModel = new appModel_1.AppModel();
announcement_1.checkNewAnnouncement(context.globalState);
context.subscriptions.push(vscode_1.commands
.registerCommand('extension.liveServer.goOnline', (fileUri) => __awaiter(this, void 0, void 0, function* () {
yield vscode_1.workspace.saveAll();
appModel.Golive(fileUri ? fileUri.fsPath : null);
})));
context.subscriptions.push(vscode_1.commands
.registerCommand('extension.liveServer.goOffline', () => {
appModel.GoOffline();
}));
context.subscriptions.push(vscode_1.commands
.registerCommand('extension.liveServer.changeWorkspace', () => {
appModel.changeWorkspaceRoot();
}));
// context.subscriptions.push(window
// .onDidChangeActiveTextEditor(() => {
// if (window.activeTextEditor === undefined) return;
// if (workspace.rootPath === undefined && Helper.IsSupportedFile(window.activeTextEditor.document.fileName)) {
// StatusbarUi.Init();
// }
// })
// );
context.subscriptions.push(appModel);
}
exports.activate = activate;
function deactivate() {
}
exports.deactivate = deactivate;
//# sourceMappingURL=extension.js.map

View file

@ -0,0 +1,52 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const vscode_1 = require("vscode");
const Config_1 = require("./Config");
function setOrChangeWorkspace() {
const { workspaceFolders } = vscode_1.workspace;
const workspaceNames = workspaceFolders.map(e => e.name);
return vscode_1.window.showQuickPick(workspaceNames, {
placeHolder: 'choose workspace for Live Server',
ignoreFocusOut: true
}).then(workspaceName => {
if (workspaceName) {
return Config_1.Config.setMutiRootWorkspaceName(workspaceName).then(() => workspaceName);
}
});
}
exports.setOrChangeWorkspace = setOrChangeWorkspace;
function workspaceResolver(fileUri) {
return new Promise(resolve => {
const { workspaceFolders } = vscode_1.workspace;
const workspaceNames = workspaceFolders.map(e => e.name);
// If only one workspace. No need to check anything.
if (workspaceNames.length === 1) {
return resolve(workspaceFolders[0].uri.fsPath);
}
// if fileUri is set. Means, user tried to open server by right clicking to a HTML file.
if (fileUri) {
const selectedWorkspace = workspaceFolders.find(ws => fileUri.startsWith(ws.uri.fsPath));
if (selectedWorkspace) {
return Config_1.Config.setMutiRootWorkspaceName(selectedWorkspace.name)
.then(() => resolve(selectedWorkspace.uri.fsPath));
}
}
// If workspace already set by User
if (Config_1.Config.getMutiRootWorkspaceName) {
// A small test that the WorkspaceName (set by user) is valid
const targetWorkspace = workspaceFolders.find(e => e.name === Config_1.Config.getMutiRootWorkspaceName);
if (targetWorkspace)
return resolve(targetWorkspace.uri.fsPath);
// reset whatever user is set.
Config_1.Config.setMutiRootWorkspaceName(null);
}
// Show a quick picker
setOrChangeWorkspace()
.then(workspaceName => {
const workspaceUri = workspaceFolders.find(e => e.name === workspaceName).uri.fsPath;
return resolve(workspaceUri);
});
});
}
exports.workspaceResolver = workspaceResolver;
//# sourceMappingURL=workspaceResolver.js.map

View file

@ -0,0 +1,361 @@
{
"name": "LiveServer",
"displayName": "Live Server",
"description": "Launch a development local Server with live reload feature for static & dynamic pages",
"version": "5.6.1",
"publisher": "ritwickdey",
"author": {
"name": "Ritwick Dey",
"email": "ritwickdey@outlook.com",
"url": "http://twitter.com/Dey_Ritwick"
},
"engines": {
"vscode": "^1.20.0"
},
"categories": [
"Other"
],
"keywords": [
"html preview",
"live preview",
"live reload",
"svg preview",
"open in browser",
"multi-root ready"
],
"preview": false,
"galleryBanner": {
"color": "#41205f",
"theme": "dark"
},
"activationEvents": [
"*"
],
"main": "./out/src/extension",
"contributes": {
"commands": [
{
"command": "extension.liveServer.goOffline",
"title": "Stop Live Server",
"category": "Live Server"
},
{
"command": "extension.liveServer.goOnline",
"title": "Open with Live Server",
"category": "Live Server"
},
{
"command": "extension.liveServer.changeWorkspace",
"title": "Change Live Server workspace",
"category": "Live Server"
}
],
"keybindings": [
{
"command": "extension.liveServer.goOffline",
"key": "alt+L alt+C",
"when": "editorTextFocus",
"mac": "cmd+L cmd+C"
},
{
"command": "extension.liveServer.goOnline",
"key": "alt+L alt+O",
"when": "editorTextFocus",
"mac": "cmd+L cmd+O"
}
],
"menus": {
"editor/context": [
{
"command": "extension.liveServer.goOnline",
"group": "myGrp@liveServer",
"when": "resourceLangId == html"
},
{
"command": "extension.liveServer.goOffline",
"group": "myGrp@liveServer",
"when": "resourceLangId == html"
},
{
"command": "extension.liveServer.goOnline",
"group": "myGrp@liveServer",
"when": "resourceLangId == xml"
}
],
"explorer/context": [
{
"command": "extension.liveServer.goOnline",
"group": "navigation@-LiveServer",
"when": "resourceLangId == html"
},
{
"command": "extension.liveServer.goOnline",
"group": "navigation@-LiveServer",
"when": "resourceLangId == xml"
}
]
},
"configuration": {
"title": "Live Server Config",
"properties": {
"liveServer.settings.port": {
"type": [
"number"
],
"default": 5500,
"minimum": 0,
"maximum": 65535,
"description": "Set Custom Port Number of Live Server. Set 0 if you want random port."
},
"liveServer.settings.root": {
"type": [
"string"
],
"default": "/",
"pattern": "/|/[^\\/]",
"description": "Set Custom root of Live Server. \nTo change root the the server to sub folder of workspace, use '/' and relative path from workspace. \nExample: /subfolder1/subfolder2"
},
"liveServer.settings.useBrowserPreview": {
"type": "boolean",
"default": false,
"description": "Open in Browser Preview inside VS Code, instead of default browser"
},
"liveServer.settings.CustomBrowser": {
"type": [
"string",
"null"
],
"default": null,
"enum": [
"chrome",
"chrome:PrivateMode",
"firefox",
"firefox:PrivateMode",
"microsoft-edge",
"blisk",
null
],
"description": "Specify custom browser settings for Live Server. \nBy Default it will open your default favorite browser."
},
"liveServer.settings.ChromeDebuggingAttachment": {
"type": [
"boolean"
],
"default": false,
"description": "Enable Chrome Debugging Attachment to Live Server at Debuging Port 9222.\n NOTE: You have to install 'Debugger for Chrome' \nIf the value is true, Select 'Attach to Chrome' from Debug Window to start debugging. \n\n CAUTION: If it is true, 'Launch Chrome against localhost' may not work."
},
"liveServer.settings.AdvanceCustomBrowserCmdLine": {
"type": [
"string",
"null"
],
"default": null,
"description": "Note: If it is not Null, It will override CustomBrowser and ChromeDebuggingAttachment settings.\n\n Examples : \nchrome --incognito --headless --remote-debugging-port=9222 \n C:\\\\Program Files\\\\Firefox Developer Edition\\\\firefox.exe --private-window"
},
"liveServer.settings.showOnStatusbar": {
"type": "boolean",
"default": true,
"description": "Change this to false if you don't want the button to show in the statusbar"
},
"liveServer.settings.NoBrowser": {
"type": "boolean",
"default": false,
"description": "If it is true live server will start without browser opened."
},
"liveServer.settings.ignoreFiles": {
"type": "array",
"default": [
".vscode/**",
"**/*.scss",
"**/*.sass",
"**/*.ts"
],
"description": "To ignore specific file changes"
},
"liveServer.settings.mount": {
"type": "array",
"items": {
"type": "array",
"minItems": 2,
"maxItems": 2,
"items": {
"type": "string"
}
},
"default": [],
"description": "Mount a directory to a route. Such as [['/components', './node_modules']]"
},
"liveServer.settings.donotShowInfoMsg": {
"type": "boolean",
"default": false,
"description": "To disable information pop up messages."
},
"liveServer.settings.donotVerifyTags": {
"type": "boolean",
"default": false,
"description": "To turn off prompt warning message if body or head or other supporting tag is missing in your HTML."
},
"liveServer.settings.host": {
"type": "string",
"default": "127.0.0.1",
"description": "To switch between localhost or 127.0.0.1 or anything else. Default is 127.0.0.1"
},
"liveServer.settings.useLocalIp": {
"type": "boolean",
"default": false,
"description": "Use local IP as host"
},
"liveServer.settings.proxy": {
"type": "object",
"default": {
"enable": false,
"baseUri": "/",
"proxyUri": "http://127.0.0.1:80"
},
"properties": {
"enable": {
"type": "boolean",
"default": false,
"description": "Make it true to enable the feature."
},
"baseUri": {
"type": "string",
"default": "/",
"pattern": ""
},
"proxyUri": {
"type": "string",
"default": "http://127.0.0.1:80",
"pattern": "(^http[s]?://)(.[^(\\|\\s)]+)$"
}
},
"required": [
"enable",
"baseUri",
"proxyUri"
],
"additionalProperties": false,
"description": "To Setup Proxy"
},
"liveServer.settings.useWebExt": {
"type": "boolean",
"default": false,
"description": "You have to install a browser extension. That will be works for your dynamic pages (like PHP)."
},
"liveServer.settings.wait": {
"type": "number",
"default": 100,
"description": "Delay before live reloading. Value in milliseconds. Default is 100"
},
"liveServer.settings.fullReload": {
"type": "boolean",
"default": false,
"description": "By Default Live Server inject CSS changes without full reloading of browser. You can change this behviour by making this setting as `true`"
},
"liveServer.settings.https": {
"type": "object",
"default": {
"enable": false,
"cert": "",
"key": "",
"passphrase": ""
},
"properties": {
"enable": {
"type": "boolean",
"default": false,
"description": "Make it true to enable it."
},
"cert": {
"type": "string",
"default": "",
"description": "Add full path certificate."
},
"key": {
"type": "string",
"default": "",
"description": "Add full path key"
},
"passphrase": {
"type": "string",
"default": "",
"description": "Add Pass Phrase."
}
},
"required": [
"enable",
"cert",
"key",
"passphrase"
],
"additionalProperties": false,
"description": "Setup https configuration"
},
"liveServer.settings.file": {
"type": "string",
"default": "",
"description": "When set, serve this file (server root relative) for every 404 (useful for single-page applications)"
},
"liveServer.settings.multiRootWorkspaceName": {
"type": "string",
"default": null,
"description": "This the entry point of server when you're in multiroot workspace"
}
}
}
},
"license": "MIT",
"icon": "images/icon.png",
"bugs": {
"url": "https://github.com/ritwickdey/vscode-live-server/issues",
"email": "ritwickdey@outlook.com"
},
"repository": {
"type": "git",
"url": "https://github.com/ritwickdey/vscode-live-server.git"
},
"homepage": "https://ritwickdey.github.io/vscode-live-server/",
"scripts": {
"vscode:prepublish": "tsc -p ./",
"compile": "tsc -watch -p ./",
"postinstall": "node ./node_modules/vscode/bin/install",
"test": "node ./node_modules/vscode/bin/test",
"lint": "tslint --project .",
"precommit": "npm run lint",
"prepush": "npm run lint"
},
"husky": {
"hooks": {
"pre-commit": "npm run precommit",
"pre-push": "npm run prepush"
}
},
"devDependencies": {
"@types/mocha": "^2.2.48",
"@types/node": "^9.6.40",
"husky": "^1.2.1",
"mocha": "^5.0.4",
"tslint": "^5.11.0",
"typescript": "^2.7.2",
"vscode": "^1.1.26",
"webpack": "^4.30.0",
"webpack-cli": "^3.3.0"
},
"dependencies": {
"http-shutdown": "^1.2.0",
"ips": "^2.1.3",
"live-server": "file:lib\\live-server",
"opn": "^5.4.0",
"vsls": "^0.3.967"
},
"announcement": {
"onVersion": "5.6.1",
"message": "[NEW] LiveServer@5.6: BrowserPreview integration, auto fallback to random port & fixes."
},
"__metadata": {
"id": "b63c44fd-0457-4696-99e9-dbfdf70d77de",
"publisherId": "17fd9a78-e430-4a78-add2-ade4a8830352",
"publisherDisplayName": "Ritwick Dey",
"installedTimestamp": 1627023607543
}
}