Start work

This commit is contained in:
Nathan Bierema 2021-06-19 23:57:38 -04:00
parent 326cfdf217
commit 696a669bd0
10 changed files with 61 additions and 31 deletions

View File

@ -1,5 +1,9 @@
{ {
"presets": ["@babel/preset-env", "@babel/preset-react"], "presets": [
"@babel/preset-env",
"@babel/preset-react",
"@babel/preset-typescript"
],
"plugins": [ "plugins": [
["@babel/plugin-proposal-decorators", { "legacy": true }], ["@babel/plugin-proposal-decorators", { "legacy": true }],
["@babel/plugin-proposal-class-properties", { "loose": true }] ["@babel/plugin-proposal-class-properties", { "loose": true }]

View File

@ -3,7 +3,11 @@ import exportState from '@redux-devtools/app/lib/middlewares/exportState';
import panelDispatcher from '../middlewares/panelSync'; import panelDispatcher from '../middlewares/panelSync';
import rootReducer from '../reducers/panel'; import rootReducer from '../reducers/panel';
export default function configureStore(position, bgConnection, preloadedState) { export default function configureStore(
position: string,
bgConnection: chrome.runtime.Port,
preloadedState
) {
const enhancer = applyMiddleware(exportState, panelDispatcher(bgConnection)); const enhancer = applyMiddleware(exportState, panelDispatcher(bgConnection));
return createStore(rootReducer, preloadedState, enhancer); return createStore(rootReducer, preloadedState, enhancer);
} }

View File

@ -12,10 +12,10 @@ export function createMenu() {
{ id: 'devtools-remote', title: 'Open Remote DevTools' }, { id: 'devtools-remote', title: 'Open Remote DevTools' },
]; ];
let shortcuts = {}; let shortcuts: { [commandName: string]: string | undefined } = {};
chrome.commands.getAll((commands) => { chrome.commands.getAll((commands) => {
commands.forEach(({ name, shortcut }) => { commands.forEach(({ name, shortcut }) => {
shortcuts[name] = shortcut; shortcuts[name!] = shortcut;
}); });
menus.forEach(({ id, title }) => { menus.forEach(({ id, title }) => {

View File

@ -1,9 +1,20 @@
let windows = {}; export type DevToolsPosition =
let lastPosition = null; | 'devtools-left'
| 'devtools-right'
| 'devtools-bottom'
| 'devtools-panel'
| 'devtools-remote';
export default function openDevToolsWindow(position) { let windows: { [K in DevToolsPosition]?: number } = {};
function popWindow(action, url, customOptions) { let lastPosition: DevToolsPosition | null = null;
function focusIfExist(callback) {
export default function openDevToolsWindow(position: DevToolsPosition) {
function popWindow(
action: string,
url: string,
customOptions: chrome.windows.CreateData & chrome.windows.UpdateInfo
) {
function focusIfExist(callback: () => void) {
if (!windows[position]) { if (!windows[position]) {
callback(); callback();
lastPosition = position; lastPosition = position;
@ -12,7 +23,7 @@ export default function openDevToolsWindow(position) {
if (lastPosition !== position && position !== 'devtools-panel') { if (lastPosition !== position && position !== 'devtools-panel') {
params = { ...params, ...customOptions }; params = { ...params, ...customOptions };
} }
chrome.windows.update(windows[position], params, () => { chrome.windows.update(windows[position]!, params, () => {
lastPosition = null; lastPosition = null;
if (chrome.runtime.lastError) callback(); if (chrome.runtime.lastError) callback();
}); });
@ -20,7 +31,7 @@ export default function openDevToolsWindow(position) {
} }
focusIfExist(() => { focusIfExist(() => {
let options = { let options: chrome.windows.CreateData = {
type: 'popup', type: 'popup',
...customOptions, ...customOptions,
}; };
@ -29,16 +40,19 @@ export default function openDevToolsWindow(position) {
url + '#' + position.substr(position.indexOf('-') + 1) url + '#' + position.substr(position.indexOf('-') + 1)
); );
chrome.windows.create(options, (win) => { chrome.windows.create(options, (win) => {
windows[position] = win.id; windows[position] = win!.id;
if (navigator.userAgent.indexOf('Firefox') !== -1) { if (navigator.userAgent.indexOf('Firefox') !== -1) {
chrome.windows.update(win.id, { focused: true, ...customOptions }); chrome.windows.update(win!.id!, {
focused: true,
...customOptions,
});
} }
}); });
} }
}); });
} }
let params = { let params: chrome.windows.CreateData & chrome.windows.UpdateInfo = {
left: 0, left: 0,
top: 0, top: 0,
width: 380, width: 380,
@ -48,7 +62,7 @@ export default function openDevToolsWindow(position) {
switch (position) { switch (position) {
case 'devtools-right': case 'devtools-right':
params.left = params.left =
window.screen.availLeft + window.screen.availWidth - params.width; window.screen.availLeft + window.screen.availWidth - params.width!;
break; break;
case 'devtools-bottom': case 'devtools-bottom':
params.height = 420; params.height = 420;

View File

@ -1,4 +1,4 @@
import React from 'react'; import React, { CSSProperties } from 'react';
import { render, unmountComponentAtNode } from 'react-dom'; import { render, unmountComponentAtNode } from 'react-dom';
import { Provider } from 'react-redux'; import { Provider } from 'react-redux';
import { REMOVE_INSTANCE } from '@redux-devtools/app/lib/constants/actionTypes'; import { REMOVE_INSTANCE } from '@redux-devtools/app/lib/constants/actionTypes';
@ -9,12 +9,16 @@ import getPreloadedState from '../background/getPreloadedState';
import '../../views/devpanel.pug'; import '../../views/devpanel.pug';
const position = location.hash; const position = location.hash;
const messageStyle = { padding: '20px', width: '100%', textAlign: 'center' }; const messageStyle: CSSProperties = {
padding: '20px',
width: '100%',
textAlign: 'center',
};
let rendered; let rendered: boolean;
let store; let store;
let bgConnection; let bgConnection: chrome.runtime.Port;
let naTimeout; let naTimeout: NodeJS.Timeout;
let preloadedState; let preloadedState;
const isChrome = navigator.userAgent.indexOf('Firefox') === -1; const isChrome = navigator.userAgent.indexOf('Firefox') === -1;
@ -25,7 +29,7 @@ getPreloadedState(position, (state) => {
function renderDevTools() { function renderDevTools() {
const node = document.getElementById('root'); const node = document.getElementById('root');
unmountComponentAtNode(node); unmountComponentAtNode(node!);
clearTimeout(naTimeout); clearTimeout(naTimeout);
store = configureStore(position, bgConnection, preloadedState); store = configureStore(position, bgConnection, preloadedState);
render( render(
@ -71,20 +75,20 @@ function renderNA() {
} }
const node = document.getElementById('root'); const node = document.getElementById('root');
unmountComponentAtNode(node); unmountComponentAtNode(node!);
render(message, node); render(message, node);
store = undefined; store = undefined;
}); });
} else { } else {
const node = document.getElementById('root'); const node = document.getElementById('root');
unmountComponentAtNode(node); unmountComponentAtNode(node!);
render(message, node); render(message, node);
store = undefined; store = undefined;
} }
}, 3500); }, 3500);
} }
function init(id) { function init(id: number) {
renderNA(); renderNA();
bgConnection = chrome.runtime.connect({ bgConnection = chrome.runtime.connect({
name: id ? id.toString() : undefined, name: id ? id.toString() : undefined,

4
extension/tsconfig.json Normal file
View File

@ -0,0 +1,4 @@
{
"extends": "../tsconfig.react.base.json",
"include": ["src"]
}

View File

@ -3,5 +3,5 @@
"compilerOptions": { "compilerOptions": {
"outDir": "lib" "outDir": "lib"
}, },
"include": ["demo", "src"] "include": ["src"]
} }

View File

@ -29,7 +29,7 @@
}, },
"dependencies": { "dependencies": {
"@babel/code-frame": "^7.14.5", "@babel/code-frame": "^7.14.5",
"@types/chrome": "^0.0.124", "@types/chrome": "^0.0.145",
"anser": "^1.4.10", "anser": "^1.4.10",
"html-entities": "^1.4.0", "html-entities": "^1.4.0",
"redux-devtools-themes": "^1.0.0", "redux-devtools-themes": "^1.0.0",

View File

@ -3567,7 +3567,7 @@ __metadata:
"@redux-devtools/core": ^3.9.0 "@redux-devtools/core": ^3.9.0
"@redux-devtools/inspector-monitor": ^1.0.0 "@redux-devtools/inspector-monitor": ^1.0.0
"@types/babel__code-frame": ^7.0.2 "@types/babel__code-frame": ^7.0.2
"@types/chrome": ^0.0.124 "@types/chrome": ^0.0.145
"@types/enzyme": ^3.10.8 "@types/enzyme": ^3.10.8
"@types/enzyme-adapter-react-16": ^1.0.6 "@types/enzyme-adapter-react-16": ^1.0.6
"@types/html-entities": ^1.3.4 "@types/html-entities": ^1.3.4
@ -4825,13 +4825,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@types/chrome@npm:^0.0.124": "@types/chrome@npm:^0.0.145":
version: 0.0.124 version: 0.0.145
resolution: "@types/chrome@npm:0.0.124" resolution: "@types/chrome@npm:0.0.145"
dependencies: dependencies:
"@types/filesystem": "*" "@types/filesystem": "*"
"@types/har-format": "*" "@types/har-format": "*"
checksum: 6499edca5f608dd48651b20d57d9fb30bbcb02cd695cd94d879a11dba7b9492c618edc6b8b5f718e82b58eceea94fb920c871546c2c3bc867595cb7dd020d527 checksum: f826d0a071ac7ea68aa97b2f8e34a944c470fbd036fdd6a413987fea03062d354fb14708cc0b59693b4a78ec88f9c5b1fce0c622a8e29e3e4b0917509eaf2a1a
languageName: node languageName: node
linkType: hard linkType: hard