123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202 |
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = initializeBuildWatcher;
- var _websocket = require("./error-overlay/websocket");
- function initializeBuildWatcher(toggleCallback, position = 'bottom-right') {
- const shadowHost = document.createElement('div');
- const [verticalProperty, horizontalProperty] = position.split('-');
- shadowHost.id = '__next-build-watcher';
- // Make sure container is fixed and on a high zIndex so it shows
- shadowHost.style.position = 'fixed';
- // Ensure container's position to be top or bottom (default)
- shadowHost.style[verticalProperty] = '10px';
- // Ensure container's position to be left or right (default)
- shadowHost.style[horizontalProperty] = '20px';
- shadowHost.style.width = 0;
- shadowHost.style.height = 0;
- shadowHost.style.zIndex = 99999;
- document.body.appendChild(shadowHost);
- let shadowRoot;
- let prefix = '';
- if (shadowHost.attachShadow) {
- shadowRoot = shadowHost.attachShadow({
- mode: 'open'
- });
- } else {
- // If attachShadow is undefined then the browser does not support
- // the Shadow DOM, we need to prefix all the names so there
- // will be no conflicts
- shadowRoot = shadowHost;
- prefix = '__next-build-watcher-';
- }
- // Container
- const container = createContainer(prefix);
- shadowRoot.appendChild(container);
- // CSS
- const css = createCss(prefix, {
- horizontalProperty,
- verticalProperty
- });
- shadowRoot.appendChild(css);
- // State
- let isVisible = false;
- let isBuilding = false;
- let timeoutId = null;
- // Handle events
- (0, _websocket).addMessageListener((event)=>{
- // This is the heartbeat event
- if (event.data === '\uD83D\uDC93') {
- return;
- }
- try {
- handleMessage(event);
- } catch (e) {}
- });
- function handleMessage(event) {
- const obj = typeof event === 'string' ? {
- action: event
- } : JSON.parse(event.data);
- // eslint-disable-next-line default-case
- switch(obj.action){
- case 'building':
- timeoutId && clearTimeout(timeoutId);
- isVisible = true;
- isBuilding = true;
- updateContainer();
- break;
- case 'built':
- case 'sync':
- isBuilding = false;
- // Wait for the fade out transition to complete
- timeoutId = setTimeout(()=>{
- isVisible = false;
- updateContainer();
- }, 100);
- updateContainer();
- break;
- }
- }
- toggleCallback(handleMessage);
- function updateContainer() {
- if (isBuilding) {
- container.classList.add(`${prefix}building`);
- } else {
- container.classList.remove(`${prefix}building`);
- }
- if (isVisible) {
- container.classList.add(`${prefix}visible`);
- } else {
- container.classList.remove(`${prefix}visible`);
- }
- }
- }
- function createContainer(prefix) {
- const container = document.createElement('div');
- container.id = `${prefix}container`;
- container.innerHTML = `
- <div id="${prefix}icon-wrapper">
- <svg viewBox="0 0 226 200">
- <defs>
- <linearGradient
- x1="114.720775%"
- y1="181.283245%"
- x2="39.5399306%"
- y2="100%"
- id="${prefix}linear-gradient"
- >
- <stop stop-color="#000000" offset="0%" />
- <stop stop-color="#FFFFFF" offset="100%" />
- </linearGradient>
- </defs>
- <g id="${prefix}icon-group" fill="none" stroke="url(#${prefix}linear-gradient)" stroke-width="18">
- <path d="M113,5.08219117 L4.28393801,197.5 L221.716062,197.5 L113,5.08219117 Z" />
- </g>
- </svg>
- </div>
- `;
- return container;
- }
- function createCss(prefix, { horizontalProperty , verticalProperty }) {
- const css = document.createElement('style');
- css.textContent = `
- #${prefix}container {
- position: absolute;
- ${verticalProperty}: 10px;
- ${horizontalProperty}: 30px;
- border-radius: 3px;
- background: #000;
- color: #fff;
- font: initial;
- cursor: initial;
- letter-spacing: initial;
- text-shadow: initial;
- text-transform: initial;
- visibility: initial;
- padding: 7px 10px 8px 10px;
- align-items: center;
- box-shadow: 0 11px 40px 0 rgba(0, 0, 0, 0.25), 0 2px 10px 0 rgba(0, 0, 0, 0.12);
- display: none;
- opacity: 0;
- transition: opacity 0.1s ease, ${verticalProperty} 0.1s ease;
- animation: ${prefix}fade-in 0.1s ease-in-out;
- }
- #${prefix}container.${prefix}visible {
- display: flex;
- }
- #${prefix}container.${prefix}building {
- ${verticalProperty}: 20px;
- opacity: 1;
- }
- #${prefix}icon-wrapper {
- width: 16px;
- height: 16px;
- }
- #${prefix}icon-wrapper > svg {
- width: 100%;
- height: 100%;
- }
- #${prefix}icon-group {
- animation: ${prefix}strokedash 1s ease-in-out both infinite;
- }
- @keyframes ${prefix}fade-in {
- from {
- ${verticalProperty}: 10px;
- opacity: 0;
- }
- to {
- ${verticalProperty}: 20px;
- opacity: 1;
- }
- }
- @keyframes ${prefix}strokedash {
- 0% {
- stroke-dasharray: 0 226;
- }
- 80%,
- 100% {
- stroke-dasharray: 659 226;
- }
- }
- `;
- return css;
- }
- if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') {
- Object.defineProperty(exports.default, '__esModule', { value: true });
- Object.assign(exports.default, exports);
- module.exports = exports.default;
- }
- //# sourceMappingURL=dev-build-watcher.js.map
|