@shoper/cli 0.8.3-0 → 0.8.3-1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -18,7 +18,8 @@ export class Browser {
|
|
|
18
18
|
this.#onInfo?.(`Launching browser...`);
|
|
19
19
|
this.#browser = await puppeteer.launch({
|
|
20
20
|
headless: false,
|
|
21
|
-
defaultViewport: null
|
|
21
|
+
defaultViewport: null,
|
|
22
|
+
args: process.platform === 'linux' ? ['--no-sandbox'] : []
|
|
22
23
|
});
|
|
23
24
|
this.#browser.on('disconnected', () => {
|
|
24
25
|
this.#onDisconnected?.('Browser disconnected');
|
|
@@ -69,6 +70,10 @@ export class Browser {
|
|
|
69
70
|
throw error;
|
|
70
71
|
}
|
|
71
72
|
}
|
|
73
|
+
async refreshAll() {
|
|
74
|
+
const openTabs = this.getOpenTabs();
|
|
75
|
+
await Promise.allSettled(openTabs.map((tabId) => this.refresh(tabId)));
|
|
76
|
+
}
|
|
72
77
|
async closeTab(tabId) {
|
|
73
78
|
const tab = this.#tabs.get(tabId);
|
|
74
79
|
if (!tab) {
|
|
@@ -2,7 +2,7 @@ import { AppLog } from '../../../../../cli/utilities/features/logger/logs/app_lo
|
|
|
2
2
|
import chokidar from 'chokidar';
|
|
3
3
|
import { APP_LOGS_TYPES } from '../../../../../cli/utilities/features/logger/logs/app_logs_constants.js';
|
|
4
4
|
import { relative } from '../../../../../utils/path_utils.js';
|
|
5
|
-
import { SHOP_BROWSER_TAB_ID, THEME_BATCH_DELAY_MS } from '../theme_watch_constants.js';
|
|
5
|
+
import { SHOP_BROWSER_TAB_ID, STORE_FRONT_BROWSER_TAB_ID, THEME_BATCH_DELAY_MS } from '../theme_watch_constants.js';
|
|
6
6
|
import { FILE_STATES } from '../../../../../utils/fs/fs_constants.js';
|
|
7
7
|
export class ThemeWatchService {
|
|
8
8
|
#themePushApi;
|
|
@@ -14,6 +14,7 @@ export class ThemeWatchService {
|
|
|
14
14
|
#changedFiles = new Set();
|
|
15
15
|
#watcher = null;
|
|
16
16
|
#urlForWatchedTheme = null;
|
|
17
|
+
#storeFrontUrl = null;
|
|
17
18
|
constructor({ themePushApi, browserClient }) {
|
|
18
19
|
this.#themePushApi = themePushApi;
|
|
19
20
|
this.#browserApi = new browserClient({
|
|
@@ -26,9 +27,11 @@ export class ThemeWatchService {
|
|
|
26
27
|
this.#onMessage = onMessage || null;
|
|
27
28
|
const themePath = executionContext.themeRootDir;
|
|
28
29
|
this.#urlForWatchedTheme = `${credentials.shopUrl}/admin/configSkins/skin-preview/id/${executionContext.themeId}`;
|
|
30
|
+
this.#storeFrontUrl = credentials.shopUrl;
|
|
29
31
|
if (openBrowser) {
|
|
30
32
|
await this.#browserApi.launch();
|
|
31
33
|
await this.#browserApi.openTab(this.#urlForWatchedTheme, SHOP_BROWSER_TAB_ID);
|
|
34
|
+
await this.#browserApi.openTab(this.#storeFrontUrl, STORE_FRONT_BROWSER_TAB_ID);
|
|
32
35
|
}
|
|
33
36
|
this._onInfoMessage(`Watching for changes in: ${themePath}`);
|
|
34
37
|
this.#watcher = chokidar.watch(themePath, {
|
|
@@ -82,21 +85,30 @@ export class ThemeWatchService {
|
|
|
82
85
|
.on('ready', () => this._onInfoMessage('Initial scan complete. Ready for changes.'));
|
|
83
86
|
}
|
|
84
87
|
async ensureBrowserTabOpen() {
|
|
85
|
-
if (!this.#urlForWatchedTheme)
|
|
88
|
+
if (!this.#urlForWatchedTheme || !this.#storeFrontUrl)
|
|
86
89
|
return;
|
|
87
90
|
if (!this.#browserApi.isBrowserOpen()) {
|
|
88
91
|
this._onInfoMessage(`Browser is not open, launching...`);
|
|
89
92
|
await this.#browserApi.launch();
|
|
90
93
|
await this.#browserApi.openTab(this.#urlForWatchedTheme, SHOP_BROWSER_TAB_ID);
|
|
91
|
-
this.
|
|
94
|
+
await this.#browserApi.openTab(this.#storeFrontUrl, STORE_FRONT_BROWSER_TAB_ID);
|
|
95
|
+
this._onInfoMessage(`Browser opened with new tabs`);
|
|
92
96
|
return;
|
|
93
97
|
}
|
|
98
|
+
let reopened = false;
|
|
94
99
|
if (!this.#browserApi.isTabOpen(SHOP_BROWSER_TAB_ID)) {
|
|
95
|
-
this._onInfoMessage(`
|
|
100
|
+
this._onInfoMessage(`Admin preview tab was closed, reopening...`);
|
|
96
101
|
await this.#browserApi.openTab(this.#urlForWatchedTheme, SHOP_BROWSER_TAB_ID);
|
|
97
|
-
|
|
102
|
+
reopened = true;
|
|
103
|
+
}
|
|
104
|
+
if (!this.#browserApi.isTabOpen(STORE_FRONT_BROWSER_TAB_ID)) {
|
|
105
|
+
this._onInfoMessage(`Store front tab was closed, reopening...`);
|
|
106
|
+
await this.#browserApi.openTab(this.#storeFrontUrl, STORE_FRONT_BROWSER_TAB_ID);
|
|
107
|
+
reopened = true;
|
|
108
|
+
}
|
|
109
|
+
if (!reopened) {
|
|
110
|
+
this._onInfoMessage(`Browser and tabs already open`);
|
|
98
111
|
}
|
|
99
|
-
this._onInfoMessage(`Browser and tab already open`);
|
|
100
112
|
}
|
|
101
113
|
async stopWatching() {
|
|
102
114
|
this._onInfoMessage('Shutting down...');
|
|
@@ -105,6 +117,7 @@ export class ThemeWatchService {
|
|
|
105
117
|
await this.#watcher?.close();
|
|
106
118
|
await this.#browserApi.close();
|
|
107
119
|
this.#urlForWatchedTheme = null;
|
|
120
|
+
this.#storeFrontUrl = null;
|
|
108
121
|
}
|
|
109
122
|
_clearQueuedBatch() {
|
|
110
123
|
if (this.#batchTimeout) {
|
|
@@ -112,13 +125,14 @@ export class ThemeWatchService {
|
|
|
112
125
|
this.#batchTimeout = null;
|
|
113
126
|
}
|
|
114
127
|
}
|
|
115
|
-
async
|
|
116
|
-
|
|
128
|
+
async _refreshBrowserTabs() {
|
|
129
|
+
const openTabs = this.#browserApi.getOpenTabs();
|
|
130
|
+
if (openTabs.length === 0)
|
|
117
131
|
return;
|
|
118
132
|
try {
|
|
119
|
-
this._onInfoMessage(`Refreshing browser
|
|
120
|
-
await this.#browserApi.
|
|
121
|
-
this._onInfoMessage(`Browser
|
|
133
|
+
this._onInfoMessage(`Refreshing browser tabs...`);
|
|
134
|
+
await this.#browserApi.refreshAll();
|
|
135
|
+
this._onInfoMessage(`Browser tabs refreshed`);
|
|
122
136
|
}
|
|
123
137
|
catch (error) {
|
|
124
138
|
this._onErrorMessage(`Error refreshing browser:`, error);
|
|
@@ -132,7 +146,7 @@ export class ThemeWatchService {
|
|
|
132
146
|
this._onInfoMessage(`Pushing theme...`);
|
|
133
147
|
await this.#themePushApi.partialPush(params);
|
|
134
148
|
this._onSuccessMessage(`Theme pushed successfully`);
|
|
135
|
-
await this.
|
|
149
|
+
await this._refreshBrowserTabs();
|
|
136
150
|
if (this.#pendingPush) {
|
|
137
151
|
this._onInfoMessage(`Executing queued push...`);
|
|
138
152
|
this.#isPushing = false;
|