zmp-cli 3.15.6 → 3.15.8
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.
- package/README.md +37 -0
- package/build/index.js +1 -184
- package/config/index.js +1 -44
- package/create/index.js +1 -230
- package/create/utils/generate-app-config.js +1 -34
- package/create/utils/generate-npm-scripts.js +1 -26
- package/create/utils/get-options.js +1 -204
- package/create/utils/npm-scripts.js +1 -62
- package/deploy/index.js +1 -149
- package/deploy/utils/get-options.js +1 -69
- package/deploy/utils/request-upload.js +1 -34
- package/deploy/utils/upload-app.js +1 -82
- package/index.js +1 -319
- package/login/index.js +1 -169
- package/login/utils/get-options.js +1 -58
- package/login/utils/zalo-login.js +1 -32
- package/migrate/icons/update-icon-v3.js +1 -19
- package/migrate/index.js +1 -60
- package/migrate/utils/get-options.js +1 -46
- package/migrate/utils/migrate-react.js +1 -33
- package/package.json +13 -40
- package/start/frame/index.html +264 -254
- package/start/index.js +1 -382
- package/sync/index-to-app-config.js +1 -146
- package/sync/index.js +1 -55
- package/utils/axios.js +1 -15
- package/utils/check-update.js +1 -53
- package/utils/constants.js +1 -20
- package/utils/env.js +1 -39
- package/utils/error.js +1 -16
- package/utils/find-files-by-ext.js +1 -27
- package/utils/find-free-port.js +1 -11
- package/utils/fs-extra.js +1 -90
- package/utils/generate-pages-map.js +1 -17
- package/utils/get-app-info.js +1 -22
- package/utils/get-current-project.js +1 -25
- package/utils/get-ip.js +1 -19
- package/utils/log.js +1 -19
- package/utils/node-blob.js +1 -106
- package/utils/resumable.d.js +1 -0
- package/utils/resumable.js +1 -1204
- package/utils/spinner.js +1 -25
- package/utils/tunnel.js +1 -36
- package/.editorconfig +0 -15
- package/.eslintignore +0 -8
- package/.eslintrc.js +0 -10
- package/.vscode/launch.json +0 -23
- package/LICENSE +0 -21
- package/README.git.md +0 -37
- package/assets/index.js +0 -147
- package/build/dist/index.dev.js +0 -217
- package/config/dist/index.dev.js +0 -48
- package/create/init-zmp-ui.js +0 -216
- package/create/templates/app-parameters.js +0 -33
- package/create/templates/common/css/icons.css +0 -60
- package/create/templates/common/icons/512x512.png +0 -0
- package/create/templates/common/icons/apple-touch-icon.png +0 -0
- package/create/templates/common/icons/favicon.png +0 -0
- package/create/templates/common/postcss.config.js +0 -5
- package/create/templates/common/splash-2732x2732.png +0 -0
- package/create/templates/common/tailwind/postcss.config.js +0 -5
- package/create/templates/common/tailwind/tailwind.config.js +0 -9
- package/create/templates/common/tailwind/tailwind.css +0 -3
- package/create/templates/common/webpack/build.js +0 -41
- package/create/templates/copy-assets.js +0 -158
- package/create/templates/core/babel.config.js +0 -11
- package/create/templates/core/copy-assets.js +0 -83
- package/create/templates/core/generate-home-page.js +0 -143
- package/create/templates/core/generate-root.js +0 -283
- package/create/templates/core/generate-routes.js +0 -155
- package/create/templates/core/generate-scripts.js +0 -94
- package/create/templates/core/pages/404.html +0 -20
- package/create/templates/core/pages/about.html +0 -26
- package/create/templates/core/pages/catalog.html +0 -40
- package/create/templates/core/pages/dynamic-route.html +0 -115
- package/create/templates/core/pages/form.html +0 -258
- package/create/templates/core/pages/left-page-1.html +0 -24
- package/create/templates/core/pages/left-page-2.html +0 -23
- package/create/templates/core/pages/product.html +0 -36
- package/create/templates/core/pages/request-and-load.html +0 -35
- package/create/templates/core/pages/settings.html +0 -252
- package/create/templates/create-folders.js +0 -30
- package/create/templates/dist/generate-styles.dev.js +0 -46
- package/create/templates/generate-config-xml.js +0 -18
- package/create/templates/generate-index.js +0 -49
- package/create/templates/generate-manifest.js +0 -49
- package/create/templates/generate-recoil.js +0 -56
- package/create/templates/generate-routes.js +0 -16
- package/create/templates/generate-scripts.js +0 -16
- package/create/templates/generate-service-worker.js +0 -126
- package/create/templates/generate-store.js +0 -88
- package/create/templates/generate-styles.js +0 -110
- package/create/templates/generate-webpack-config.js +0 -335
- package/create/templates/generate-zmp-custom.js +0 -81
- package/create/templates/react/babel.config.js +0 -12
- package/create/templates/react/components/app-items.jsx +0 -44
- package/create/templates/react/components/navbar-back.jsx +0 -25
- package/create/templates/react/components/user-card.jsx +0 -18
- package/create/templates/react/copy-assets.js +0 -85
- package/create/templates/react/dist/generate-scripts.dev.js +0 -23
- package/create/templates/react/generate-home-page.js +0 -111
- package/create/templates/react/generate-root.js +0 -84
- package/create/templates/react/generate-routes.js +0 -16
- package/create/templates/react/generate-scripts.js +0 -68
- package/create/templates/react/pages/404.js +0 -27
- package/create/templates/react/pages/about.js +0 -52
- package/create/templates/react/pages/catalog.js +0 -112
- package/create/templates/react/pages/dynamic-route.js +0 -80
- package/create/templates/react/pages/form.js +0 -152
- package/create/templates/react/pages/index copy.js +0 -17
- package/create/templates/react/pages/index.js +0 -17
- package/create/templates/react/pages/settings.js +0 -76
- package/create/templates/react/pages/user.js +0 -56
- package/create/templates/react/vite.config.js +0 -11
- package/create/templates/react-typescript/_tsconfig.json +0 -33
- package/create/templates/react-typescript/components/app-items.js +0 -53
- package/create/templates/react-typescript/components/index.js +0 -9
- package/create/templates/react-typescript/components/navbar-back.js +0 -40
- package/create/templates/react-typescript/components/user-card.js +0 -32
- package/create/templates/react-typescript/copy-assets.js +0 -94
- package/create/templates/react-typescript/dist/generate-scripts.dev.js +0 -23
- package/create/templates/react-typescript/generate-home-page.js +0 -113
- package/create/templates/react-typescript/generate-root.js +0 -81
- package/create/templates/react-typescript/generate-routes.js +0 -12
- package/create/templates/react-typescript/generate-scripts.js +0 -67
- package/create/templates/react-typescript/pages/404.js +0 -27
- package/create/templates/react-typescript/pages/about.js +0 -52
- package/create/templates/react-typescript/pages/catalog.js +0 -112
- package/create/templates/react-typescript/pages/dynamic-route.js +0 -80
- package/create/templates/react-typescript/pages/form.js +0 -152
- package/create/templates/react-typescript/pages/index.js +0 -17
- package/create/templates/react-typescript/pages/settings.js +0 -76
- package/create/templates/react-typescript/pages/user.js +0 -56
- package/create/templates/react-typescript/vite.config.js +0 -21
- package/create/templates/svelte/babel.config.js +0 -10
- package/create/templates/svelte/copy-assets.js +0 -47
- package/create/templates/svelte/generate-home-page.js +0 -158
- package/create/templates/svelte/generate-root.js +0 -235
- package/create/templates/svelte/generate-routes.js +0 -91
- package/create/templates/svelte/generate-scripts.js +0 -47
- package/create/templates/svelte/pages/404.svelte +0 -10
- package/create/templates/svelte/pages/about.svelte +0 -16
- package/create/templates/svelte/pages/catalog.svelte +0 -31
- package/create/templates/svelte/pages/dynamic-route.svelte +0 -34
- package/create/templates/svelte/pages/form.svelte +0 -175
- package/create/templates/svelte/pages/left-page-1.svelte +0 -13
- package/create/templates/svelte/pages/left-page-2.svelte +0 -12
- package/create/templates/svelte/pages/product.svelte +0 -21
- package/create/templates/svelte/pages/request-and-load.svelte +0 -21
- package/create/templates/svelte/pages/settings.svelte +0 -175
- package/create/templates/vue/babel.config.js +0 -10
- package/create/templates/vue/components/header.vue +0 -28
- package/create/templates/vue/components/sun-and-moon.vue +0 -34
- package/create/templates/vue/copy-assets.js +0 -67
- package/create/templates/vue/generate-home-page.js +0 -56
- package/create/templates/vue/generate-root.js +0 -50
- package/create/templates/vue/generate-routes.js +0 -7
- package/create/templates/vue/generate-scripts.js +0 -63
- package/create/templates/vue/global-components.d.ts +0 -121
- package/create/templates/vue/icons/moon.svg +0 -3
- package/create/templates/vue/icons/sun.svg +0 -3
- package/create/templates/vue/pages/404.vue +0 -12
- package/create/templates/vue/pages/about.vue +0 -15
- package/create/templates/vue/pages/catalog.vue +0 -39
- package/create/templates/vue/pages/dynamic-route.vue +0 -34
- package/create/templates/vue/pages/form.vue +0 -162
- package/create/templates/vue/pages/left-page-1.vue +0 -14
- package/create/templates/vue/pages/left-page-2.vue +0 -11
- package/create/templates/vue/pages/product.vue +0 -31
- package/create/templates/vue/pages/request-and-load.vue +0 -25
- package/create/templates/vue/pages/settings.vue +0 -18
- package/create/templates/vue/vite.config.js +0 -11
- package/create/templates/zaui/_tsconfig.json +0 -33
- package/create/templates/zaui/babel.config.js +0 -12
- package/create/templates/zaui/components/user-card.jsx +0 -16
- package/create/templates/zaui/copy-assets.js +0 -90
- package/create/templates/zaui/generate-home-page.js +0 -117
- package/create/templates/zaui/generate-root.js +0 -53
- package/create/templates/zaui/generate-routes.js +0 -10
- package/create/templates/zaui/generate-scripts.js +0 -39
- package/create/templates/zaui/generate-user-card.js +0 -55
- package/create/templates/zaui/pages/about.js +0 -129
- package/create/templates/zaui/pages/form.js +0 -123
- package/create/templates/zaui/pages/index.js +0 -9
- package/create/templates/zaui/pages/user.js +0 -109
- package/create/templates/zaui/vite.config.js +0 -11
- package/create/utils/colors.js +0 -94
- package/create/utils/dist/get-options.dev.js +0 -277
- package/create/utils/generate-gitignore.js +0 -43
- package/create/utils/generate-package-json.js +0 -132
- package/create/utils/generate-readme.js +0 -28
- package/create/utils/indent.js +0 -31
- package/create/utils/string.js +0 -13
- package/create/utils/styles-extension.js +0 -9
- package/create/utils/template-if.js +0 -9
- package/deploy/dist/index.dev.js +0 -227
- package/deploy/utils/dist/request-upload.dev.js +0 -62
- package/deploy/utils/dist/upload-app.dev.js +0 -113
- package/dist/bundle.js +0 -1
- package/dist/index.dev.js +0 -352
- package/jsconfig.json +0 -8
- package/login/dist/index.dev.js +0 -223
- package/login/utils/dist/zalo-login.dev.js +0 -41
- package/screenshots/wellcome.jpg +0 -0
- package/show-qr-app/assets/css/style.css +0 -87
- package/show-qr-app/assets/js/qrcode.min.js +0 -1
- package/show-qr-app/index.html +0 -57
- package/show-qr-app/package.json +0 -14
- package/start/dist/index.dev.js +0 -312
- package/start/generate-hr-config.js +0 -59
- package/ui/server.js +0 -194
- package/ui/www/css/app.css +0 -1
- package/ui/www/css/app.css.map +0 -1
- package/ui/www/fonts/ZMPIcons-Regular.eot +0 -0
- package/ui/www/fonts/ZMPIcons-Regular.ttf +0 -0
- package/ui/www/fonts/ZMPIcons-Regular.woff +0 -0
- package/ui/www/fonts/ZMPIcons-Regular.woff2 +0 -0
- package/ui/www/images/logo.png +0 -0
- package/ui/www/index.html +0 -1
- package/ui/www/js/app.js +0 -3
- package/ui/www/js/app.js.LICENSE.txt +0 -20
- package/ui/www/js/app.js.map +0 -1
- package/ui/www/static/icons/apple-touch-icon.png +0 -0
- package/ui/www/static/icons/favicon.png +0 -0
- package/utils/dist/get-app-info.dev.js +0 -54
package/start/index.js
CHANGED
|
@@ -1,382 +1 @@
|
|
|
1
|
-
|
|
2
|
-
/* eslint no-console: off */
|
|
3
|
-
const chalk = require('chalk');
|
|
4
|
-
const ora = require('ora');
|
|
5
|
-
const path = require('path');
|
|
6
|
-
const qrcode = require('qrcode-terminal');
|
|
7
|
-
const logSymbols = require('log-symbols');
|
|
8
|
-
const { createServer } = require('vite');
|
|
9
|
-
const chii = require('chii');
|
|
10
|
-
const { hri } = require('human-readable-ids');
|
|
11
|
-
|
|
12
|
-
const config = require('../config');
|
|
13
|
-
const envUtils = require('../utils/env');
|
|
14
|
-
const fs = require('../utils/fs-extra');
|
|
15
|
-
const fse = require('../utils/fs-extra');
|
|
16
|
-
const findFreePort = require('../utils/find-free-port');
|
|
17
|
-
const { openTunnel } = require('../utils/tunnel');
|
|
18
|
-
const { deviceModeSetup } = require('../utils/constants');
|
|
19
|
-
const { generateHrFromIndex } = require('./generate-hr-config');
|
|
20
|
-
|
|
21
|
-
const spinner = ora('Starting mini app...');
|
|
22
|
-
|
|
23
|
-
module.exports = async (options = {}, logger, { exitOnError = true } = {}) => {
|
|
24
|
-
function errorExit(err) {
|
|
25
|
-
logger.error(err.stderr || err);
|
|
26
|
-
if (exitOnError) process.exit(1);
|
|
27
|
-
}
|
|
28
|
-
if (!logger) {
|
|
29
|
-
// eslint-disable-next-line
|
|
30
|
-
logger = {
|
|
31
|
-
statusStart() {},
|
|
32
|
-
statusDone() {},
|
|
33
|
-
statusError() {},
|
|
34
|
-
text() {},
|
|
35
|
-
error() {},
|
|
36
|
-
};
|
|
37
|
-
}
|
|
38
|
-
spinner.start();
|
|
39
|
-
const cwd = options.cwd || process.cwd();
|
|
40
|
-
const appId = options.appId || envUtils.getEnv(config.env.appId);
|
|
41
|
-
const previewOnZalo = options.previewOnZalo;
|
|
42
|
-
const isIOS = options.ios;
|
|
43
|
-
const iosHostName = options.iosHostName;
|
|
44
|
-
const usingFrame = options.frame;
|
|
45
|
-
const host = isIOS ? iosHostName : 'localhost';
|
|
46
|
-
const port = options.port;
|
|
47
|
-
const remoteDebugPort = port - 2;
|
|
48
|
-
const mode = options.mode || (previewOnZalo ? 'production' : 'development');
|
|
49
|
-
const deviceMode = options.deviceMode;
|
|
50
|
-
try {
|
|
51
|
-
if (previewOnZalo) {
|
|
52
|
-
const hrConfigPath = path.join(cwd, 'hr.config.json');
|
|
53
|
-
const remoteDebugScript = {
|
|
54
|
-
id: 'remote-debug-script',
|
|
55
|
-
innerHTML: `(function () { var script = document.createElement('script'); script.src='http://${host}:${remoteDebugPort}/target.js'; document.body.appendChild(script); })()`,
|
|
56
|
-
type: 'text/javascript',
|
|
57
|
-
};
|
|
58
|
-
if (!fs.existsSync(hrConfigPath)) {
|
|
59
|
-
const hrConfig = {
|
|
60
|
-
listCSS: [],
|
|
61
|
-
listJS: [
|
|
62
|
-
{
|
|
63
|
-
src: '/src/app.js',
|
|
64
|
-
type: 'module',
|
|
65
|
-
async: true,
|
|
66
|
-
},
|
|
67
|
-
remoteDebugScript,
|
|
68
|
-
],
|
|
69
|
-
};
|
|
70
|
-
fs.writeFileSync(hrConfigPath, JSON.stringify(hrConfig, undefined, 4));
|
|
71
|
-
} else {
|
|
72
|
-
const fileData = fs.readFileSync(hrConfigPath);
|
|
73
|
-
const hrConfig = JSON.parse(fileData);
|
|
74
|
-
|
|
75
|
-
let listJS = hrConfig.listJS;
|
|
76
|
-
if (!Array.isArray(listJS)) {
|
|
77
|
-
listJS = [];
|
|
78
|
-
}
|
|
79
|
-
const remoteDebugScriptIndex = listJS.findIndex(
|
|
80
|
-
(js) => js.id === 'remote-debug-script'
|
|
81
|
-
);
|
|
82
|
-
|
|
83
|
-
if (remoteDebugScriptIndex <= 0) {
|
|
84
|
-
listJS.push(remoteDebugScript);
|
|
85
|
-
} else {
|
|
86
|
-
listJS.splice(remoteDebugScriptIndex, 1);
|
|
87
|
-
listJS.push(remoteDebugScript);
|
|
88
|
-
}
|
|
89
|
-
hrConfig.listJS = listJS;
|
|
90
|
-
fs.writeFileSync(hrConfigPath, JSON.stringify(hrConfig, undefined, 4));
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
const localServer = {};
|
|
94
|
-
|
|
95
|
-
const publicServer = {
|
|
96
|
-
host: '0.0.0.0',
|
|
97
|
-
hmr: {
|
|
98
|
-
host: host,
|
|
99
|
-
protocol: 'ws',
|
|
100
|
-
},
|
|
101
|
-
};
|
|
102
|
-
|
|
103
|
-
let viteConfig = 'vite.config.js';
|
|
104
|
-
const isTypeScriptProject = fse.existsSync(
|
|
105
|
-
path.join(cwd, 'vite.config.ts')
|
|
106
|
-
);
|
|
107
|
-
if (isTypeScriptProject) {
|
|
108
|
-
viteConfig = 'vite.config.ts';
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
let server;
|
|
112
|
-
let subdomain;
|
|
113
|
-
let freePort;
|
|
114
|
-
if (deviceMode) {
|
|
115
|
-
// generate a subdomain for the tunnel
|
|
116
|
-
subdomain = hri.random();
|
|
117
|
-
// start the chii server
|
|
118
|
-
freePort = await findFreePort();
|
|
119
|
-
chii.start({
|
|
120
|
-
port: freePort,
|
|
121
|
-
});
|
|
122
|
-
// expose the chii server by using localtunnel
|
|
123
|
-
const chiiUrl = await openTunnel(freePort);
|
|
124
|
-
const remoteHost = `${subdomain}.${deviceModeSetup.TUNNEL_SERVER_HOST}`;
|
|
125
|
-
|
|
126
|
-
server = await createServer({
|
|
127
|
-
configFile: path.join(cwd, viteConfig),
|
|
128
|
-
root: cwd,
|
|
129
|
-
mode,
|
|
130
|
-
define: {
|
|
131
|
-
'process.env.NODE_ENV': JSON.stringify(mode),
|
|
132
|
-
'process.env.previewOnZalo': true,
|
|
133
|
-
},
|
|
134
|
-
server: {
|
|
135
|
-
port: port,
|
|
136
|
-
host: 'localhost',
|
|
137
|
-
origin: `https://${remoteHost}`,
|
|
138
|
-
base: `/zapps/${appId}/`,
|
|
139
|
-
hmr: {
|
|
140
|
-
host: remoteHost,
|
|
141
|
-
clientPort: 443,
|
|
142
|
-
protocol: 'wss',
|
|
143
|
-
},
|
|
144
|
-
https: false,
|
|
145
|
-
},
|
|
146
|
-
plugins: [
|
|
147
|
-
{
|
|
148
|
-
name: 'hr-config-plugin',
|
|
149
|
-
configureServer(server) {
|
|
150
|
-
const setupCors = (req, res) => {
|
|
151
|
-
if (
|
|
152
|
-
['https://h5.zdn.vn', 'zbrowser://h5.zdn.vn'].includes(
|
|
153
|
-
req.headers.origin
|
|
154
|
-
)
|
|
155
|
-
) {
|
|
156
|
-
res.setHeader(
|
|
157
|
-
'Access-Control-Allow-Origin',
|
|
158
|
-
req.headers.origin
|
|
159
|
-
);
|
|
160
|
-
}
|
|
161
|
-
};
|
|
162
|
-
server.middlewares.use('/app-config.json', (req, res, next) => {
|
|
163
|
-
// there would be another originalUrl - app-config.json?module that would be dynamicly imported in js format
|
|
164
|
-
if (req.originalUrl === '/app-config.json') {
|
|
165
|
-
res.setHeader('Content-Type', 'application/javascript');
|
|
166
|
-
setupCors(req, res);
|
|
167
|
-
return res.end(
|
|
168
|
-
fs.readFileSync(path.join(cwd, 'app-config.json'))
|
|
169
|
-
);
|
|
170
|
-
} else {
|
|
171
|
-
return next();
|
|
172
|
-
}
|
|
173
|
-
});
|
|
174
|
-
server.middlewares.use('/hr.config.json', async (req, res) => {
|
|
175
|
-
res.setHeader('Content-Type', 'application/json');
|
|
176
|
-
setupCors(req, res);
|
|
177
|
-
const hrConfig = await generateHrFromIndex(
|
|
178
|
-
`http://localhost:${app.httpServer.address().port}`,
|
|
179
|
-
{
|
|
180
|
-
chiiUrl,
|
|
181
|
-
exposedUrl: `https://${subdomain}.${deviceModeSetup.TUNNEL_SERVER_HOST}`,
|
|
182
|
-
}
|
|
183
|
-
);
|
|
184
|
-
res.end(JSON.stringify(hrConfig));
|
|
185
|
-
});
|
|
186
|
-
server.middlewares.use('/studio.module.js', async (req, res) => {
|
|
187
|
-
res.setHeader('Content-Type', 'text/javascript');
|
|
188
|
-
setupCors(req, res);
|
|
189
|
-
res.end(`
|
|
190
|
-
import { createHotContext } from "/@vite/client";
|
|
191
|
-
import.meta.hot = createHotContext("${subdomain}");
|
|
192
|
-
if (import.meta.hot) {
|
|
193
|
-
import.meta.hot.on("vite:beforeFullReload", () => {
|
|
194
|
-
window.location.href = window.BACKUP_URL;
|
|
195
|
-
ZJSBridge.callCustomAction("action.ma.menu.reload", {}, () => {});
|
|
196
|
-
throw "(skipping full reload)";
|
|
197
|
-
});
|
|
198
|
-
import.meta.hot.on('zmp:close', (data) => {
|
|
199
|
-
ZJSBridge.callCustomAction("action.window.close", {}, () => {});
|
|
200
|
-
});
|
|
201
|
-
}
|
|
202
|
-
try {
|
|
203
|
-
let shownTip = false;
|
|
204
|
-
window.onerror = function (message, url, line, column, error) {
|
|
205
|
-
if (!error) {
|
|
206
|
-
console.error(
|
|
207
|
-
"An uncaught error has occurred, but the detailed error message cannot be displayed due to the cross-origin policy."
|
|
208
|
-
);
|
|
209
|
-
if (!shownTip) {
|
|
210
|
-
console.warn(
|
|
211
|
-
"To view the detailed error message, you can try one of the following methods:\\n\\n1. Wrap your code in a try-catch block, use .catch with Promises, or use <ErrorBoundary> in React to catch the detailed error object.\\n2. Try to reproduce the issue using a simulator."
|
|
212
|
-
);
|
|
213
|
-
shownTip = true;
|
|
214
|
-
}
|
|
215
|
-
} else {
|
|
216
|
-
console.error("[" + error.name + "] " + error.message);
|
|
217
|
-
}
|
|
218
|
-
};
|
|
219
|
-
} catch (error) {
|
|
220
|
-
console.error(error);
|
|
221
|
-
}
|
|
222
|
-
`);
|
|
223
|
-
});
|
|
224
|
-
},
|
|
225
|
-
},
|
|
226
|
-
],
|
|
227
|
-
});
|
|
228
|
-
} else {
|
|
229
|
-
server = await createServer({
|
|
230
|
-
configFile: path.join(cwd, viteConfig),
|
|
231
|
-
root: cwd,
|
|
232
|
-
mode,
|
|
233
|
-
define: {
|
|
234
|
-
'process.env.NODE_ENV': JSON.stringify(mode),
|
|
235
|
-
'process.env.previewOnZalo': previewOnZalo,
|
|
236
|
-
},
|
|
237
|
-
server: {
|
|
238
|
-
port: usingFrame ? port - 1 : port,
|
|
239
|
-
...(previewOnZalo ? publicServer : localServer),
|
|
240
|
-
},
|
|
241
|
-
});
|
|
242
|
-
}
|
|
243
|
-
const app = await server.listen();
|
|
244
|
-
|
|
245
|
-
if (!previewOnZalo) {
|
|
246
|
-
if (!deviceMode) {
|
|
247
|
-
if (usingFrame) {
|
|
248
|
-
//run frame server
|
|
249
|
-
const serverFrame = await createServer({
|
|
250
|
-
// any valid user config options, plus `mode` and `configFile`
|
|
251
|
-
configFile: false,
|
|
252
|
-
root: __dirname + '/frame',
|
|
253
|
-
server: {
|
|
254
|
-
port: app.httpServer.address().port + 1,
|
|
255
|
-
strictPort: true,
|
|
256
|
-
open: true,
|
|
257
|
-
},
|
|
258
|
-
});
|
|
259
|
-
spinner.stop();
|
|
260
|
-
await serverFrame.listen();
|
|
261
|
-
const info = serverFrame.config.logger.info;
|
|
262
|
-
info(chalk.green(`Zalo Mini App dev server is running at:\n`));
|
|
263
|
-
serverFrame.printUrls();
|
|
264
|
-
} else {
|
|
265
|
-
spinner.stop();
|
|
266
|
-
const info = server.config.logger.info;
|
|
267
|
-
info(chalk.green(`Zalo Mini App dev server is running at:\n`));
|
|
268
|
-
server.printUrls();
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
} else {
|
|
272
|
-
try {
|
|
273
|
-
chii.start({
|
|
274
|
-
port: remoteDebugPort,
|
|
275
|
-
});
|
|
276
|
-
logger.text(
|
|
277
|
-
chalk.green(
|
|
278
|
-
`${logSymbols.info} ${chalk.bold(
|
|
279
|
-
`Remote debugging tool is running at: http://localhost:${remoteDebugPort}`
|
|
280
|
-
)}`
|
|
281
|
-
)
|
|
282
|
-
);
|
|
283
|
-
if (!isIOS) {
|
|
284
|
-
const processAdbReverseRemoteDEbug = require('child_process').spawn(
|
|
285
|
-
`adb`,
|
|
286
|
-
['reverse', `tcp:${remoteDebugPort}`, `tcp:${remoteDebugPort}`]
|
|
287
|
-
);
|
|
288
|
-
|
|
289
|
-
processAdbReverseRemoteDEbug.stderr.on('data', function (data) {
|
|
290
|
-
logger.error(data.toString());
|
|
291
|
-
});
|
|
292
|
-
}
|
|
293
|
-
} catch (error) {
|
|
294
|
-
logger.text(
|
|
295
|
-
`${logSymbols.info} ${chalk.red(`Can not start remote debug server`)}`
|
|
296
|
-
);
|
|
297
|
-
}
|
|
298
|
-
}
|
|
299
|
-
|
|
300
|
-
spinner.stop();
|
|
301
|
-
return await new Promise(async () => {
|
|
302
|
-
if (previewOnZalo) {
|
|
303
|
-
const previewOnZaloURL = `https://zalo.me/app/link/zapps/${appId}/?env=TESTING_LOCAL&clientIp=http://${host}:${app.config.server.port}`;
|
|
304
|
-
qrcode.generate(previewOnZaloURL, { small: true }, function (qrcode) {
|
|
305
|
-
logger.text(
|
|
306
|
-
chalk.green(
|
|
307
|
-
`${logSymbols.info} ${chalk.bold(
|
|
308
|
-
`Zalo Mini App dev server is running at: ${host}:${app.config.server.port}`
|
|
309
|
-
)}`
|
|
310
|
-
)
|
|
311
|
-
);
|
|
312
|
-
logger.text(
|
|
313
|
-
chalk.green(
|
|
314
|
-
`${logSymbols.info} ${chalk.bold(
|
|
315
|
-
`Trying reverse socket connection`
|
|
316
|
-
)}`
|
|
317
|
-
)
|
|
318
|
-
);
|
|
319
|
-
if (isIOS) {
|
|
320
|
-
const qrCode = `${logSymbols.info} ${chalk.bold(
|
|
321
|
-
`Scan the QR code with Zalo app:\n${qrcode}`
|
|
322
|
-
)}`;
|
|
323
|
-
logger.text(qrCode);
|
|
324
|
-
} else {
|
|
325
|
-
const processAdbReverse = require('child_process').spawn(`adb`, [
|
|
326
|
-
'reverse',
|
|
327
|
-
`tcp:${app.config.server.port}`,
|
|
328
|
-
`tcp:${app.config.server.port}`,
|
|
329
|
-
]);
|
|
330
|
-
|
|
331
|
-
processAdbReverse.stderr.on('data', function (data) {
|
|
332
|
-
logger.error(data.toString());
|
|
333
|
-
});
|
|
334
|
-
|
|
335
|
-
processAdbReverse.on('exit', function (code) {
|
|
336
|
-
if (code !== 0) {
|
|
337
|
-
throw new Error(`adb reverse error: ${code}`);
|
|
338
|
-
} else {
|
|
339
|
-
const qrCode = `${logSymbols.info} ${chalk.bold(
|
|
340
|
-
`Scan the QR code with Zalo app:\n${qrcode}`
|
|
341
|
-
)}`;
|
|
342
|
-
logger.text(qrCode);
|
|
343
|
-
const processAdbDevices = require('child_process').spawn(
|
|
344
|
-
`adb`,
|
|
345
|
-
['devices']
|
|
346
|
-
);
|
|
347
|
-
|
|
348
|
-
processAdbDevices.stdout.on('data', function (data) {
|
|
349
|
-
logger.text(`${chalk.yellow(data.toString())}`);
|
|
350
|
-
});
|
|
351
|
-
}
|
|
352
|
-
});
|
|
353
|
-
}
|
|
354
|
-
});
|
|
355
|
-
}
|
|
356
|
-
if (deviceMode) {
|
|
357
|
-
const port = app.httpServer.address().port;
|
|
358
|
-
const remoteUrl = await openTunnel(port, subdomain);
|
|
359
|
-
const deviceModeUrl = `https://zalo.me/app/link/zapps/${appId}/?env=TESTING_LOCAL&clientIp=${remoteUrl}`;
|
|
360
|
-
qrcode.generate(deviceModeUrl, { small: true }, function (qrcode) {
|
|
361
|
-
const qrCode = `${logSymbols.info} ${chalk.bold(
|
|
362
|
-
`Scan the QR code with Zalo app:\n${qrcode}`
|
|
363
|
-
)}`;
|
|
364
|
-
logger.text(qrCode);
|
|
365
|
-
logger.text(
|
|
366
|
-
`${logSymbols.info} ${chalk.bold(
|
|
367
|
-
`To inspect your app, open: http://localhost:${freePort} in ${chalk.green(
|
|
368
|
-
`Google Chrome`
|
|
369
|
-
)} or a ${chalk.blue(`Chromium-based`)} browser.`
|
|
370
|
-
)}`
|
|
371
|
-
);
|
|
372
|
-
});
|
|
373
|
-
}
|
|
374
|
-
});
|
|
375
|
-
} catch (err) {
|
|
376
|
-
logger.statusError('Error starting project');
|
|
377
|
-
// if (err) logger.error(err.stderr || err);
|
|
378
|
-
logger.error(err);
|
|
379
|
-
errorExit(err);
|
|
380
|
-
return;
|
|
381
|
-
}
|
|
382
|
-
};
|
|
1
|
+
'use strict';const _0x57967b=_0x5b23;(function(_0x19f108,_0xa1dead){const _0x53fecb=_0x5b23,_0x3ffb17=_0x19f108();while(!![]){try{const _0x1ecfe5=-parseInt(_0x53fecb(0x164))/0x1+parseInt(_0x53fecb(0x160))/0x2+parseInt(_0x53fecb(0x16f))/0x3+-parseInt(_0x53fecb(0x168))/0x4+parseInt(_0x53fecb(0x134))/0x5*(parseInt(_0x53fecb(0x135))/0x6)+parseInt(_0x53fecb(0x13f))/0x7*(parseInt(_0x53fecb(0x133))/0x8)+-parseInt(_0x53fecb(0x15c))/0x9;if(_0x1ecfe5===_0xa1dead)break;else _0x3ffb17['push'](_0x3ffb17['shift']());}catch(_0x30509e){_0x3ffb17['push'](_0x3ffb17['shift']());}}}(_0x34f8,0x2c90b));const e=require(_0x57967b(0x141)),r=require(_0x57967b(0x166)),t=require(_0x57967b(0x16d)),i=require(_0x57967b(0x16e)),o=require(_0x57967b(0x137)),n=require(_0x57967b(0x162)),{hri:s}=require(_0x57967b(0x129)),{startLocal:a,startDevice:p}=require(_0x57967b(0x15b)),l=require(_0x57967b(0x127)),c=require(_0x57967b(0x138)),{errorExit:d}=require(_0x57967b(0x15d)),u=require('../utils/fs-extra'),f=require(_0x57967b(0x158)),{openTunnel:g}=require('../utils/tunnel'),$=r(_0x57967b(0x146));function _0x34f8(){const _0x22b13c=['join','Zalo\x20Mini\x20App\x20dev\x20server\x20is\x20running\x20at:\x20','listJS','app','parse','/target.js\x27;\x20document.body.appendChild(script);\x20})()','1245097PYJwKj','Zalo\x20Mini\x20App\x20dev\x20server\x20is\x20running\x20at:\x0a','chalk','reverse','splice','stop','data','Starting\x20mini\x20app...','error','random','exit','server','adb\x20reverse\x20error:\x20','generate','devices','existsSync','bold','\x20browser.','isArray','Scan\x20the\x20QR\x20code\x20with\x20Zalo\x20app:\x0a','deviceMode','previewOnZalo','green','printUrls','tcp:','../utils/find-free-port','Error\x20starting\x20project','stderr','zmp-cli-core','4769127lOPbgc','../utils/error','blue','Chromium-based','437882IzWNQb','(function\x20()\x20{\x20var\x20script\x20=\x20document.createElement(\x27script\x27);\x20script.src=\x27http://','chii','createServer','106177dUISxk','Google\x20Chrome','ora','cwd','1303664inwnOb','iosHostName','writeFileSync','appId','toString','path','qrcode-terminal','934536jIFsHQ','\x20in\x20','yellow','stringify','/frame','child_process','start','config','\x20or\x20a\x20','exports','To\x20inspect\x20your\x20app,\x20open:\x20http://localhost:','appConfigJson','env','port','remote-debug-script','https://zalo.me/app/link/zapps/','adb','../config','stdout','human-readable-ids','readFileSync','address','text','httpServer','/src/app.js','red','ios','/?env=TESTING_LOCAL&clientIp=http://','spawn','16JrJgIl','1291700eMyBUu','6GRdqps','info','log-symbols','../utils/env'];_0x34f8=function(){return _0x22b13c;};return _0x34f8();}function _0x5b23(_0x5e9eac,_0x434aab){const _0x34f8dc=_0x34f8();return _0x5b23=function(_0x5b232b,_0x315398){_0x5b232b=_0x5b232b-0x11e;let _0x2a4bce=_0x34f8dc[_0x5b232b];return _0x2a4bce;},_0x5b23(_0x5e9eac,_0x434aab);}module[_0x57967b(0x11f)]=async(_0x39b572={},_0x603c5a)=>{const _0x4124be=_0x57967b;let _0x231b0c;_0x603c5a||(_0x603c5a={'statusStart'(){},'statusDone'(){},'statusError'(){},'text'(){},'error'(){}}),$[_0x4124be(0x175)]();let _0x4fffdc=_0x39b572[_0x4124be(0x167)]||process[_0x4124be(0x167)](),_0xf839a8=_0x39b572[_0x4124be(0x16b)]||c['getEnv'](l[_0x4124be(0x122)][_0x4124be(0x16b)]),_0x41e63c=_0x39b572[_0x4124be(0x154)],_0x14ca8f=_0x39b572[_0x4124be(0x130)],_0x4bfbc4=_0x39b572[_0x4124be(0x169)],_0x32888e=_0x39b572['frame'],_0x534f77=_0x14ca8f?_0x4bfbc4:'localhost',_0x28f06f=_0x39b572[_0x4124be(0x123)],_0x260781=_0x28f06f-0x2,_0x47951f=_0x39b572[_0x4124be(0x121)]||require((_0x231b0c=l['filename']['appConfig'],t[_0x4124be(0x139)](_0x4fffdc,_0x231b0c))),_0xd29404=_0x39b572[_0x4124be(0x153)];try{let _0x4c8e1f,_0x37b0d3,_0x216544;if(_0x41e63c){let _0x5ce553=t[_0x4124be(0x139)](_0x4fffdc,'hr.config.json'),_0x226f19={'id':_0x4124be(0x124),'innerHTML':_0x4124be(0x161)+_0x534f77+':'+_0x260781+_0x4124be(0x13e),'type':'text/javascript'};if(u[_0x4124be(0x14e)](_0x5ce553)){let _0xfcbf49=u[_0x4124be(0x12a)](_0x5ce553),_0x5951d2=JSON[_0x4124be(0x13d)](_0xfcbf49),_0x4ee43d=_0x5951d2[_0x4124be(0x13b)];Array[_0x4124be(0x151)](_0x4ee43d)||(_0x4ee43d=[]);let _0x5b2e03=_0x4ee43d['findIndex'](_0x458516=>_0x4124be(0x124)===_0x458516['id']);_0x5b2e03<=0x0||_0x4ee43d[_0x4124be(0x143)](_0x5b2e03,0x1),_0x4ee43d['push'](_0x226f19),_0x5951d2[_0x4124be(0x13b)]=_0x4ee43d,u[_0x4124be(0x16a)](_0x5ce553,JSON[_0x4124be(0x172)](_0x5951d2,void 0x0,0x4));}else u[_0x4124be(0x16a)](_0x5ce553,JSON[_0x4124be(0x172)]({'listCSS':[],'listJS':[{'src':_0x4124be(0x12e),'type':'module','async':!0x0},_0x226f19]},void 0x0,0x4));}if(_0xd29404){_0x4c8e1f=s[_0x4124be(0x148)](),_0x37b0d3=await f(),n['start']({'port':_0x37b0d3});let _0x5f04f8=await g(_0x37b0d3);_0x216544=await p({'appId':_0xf839a8,'chiiUrl':_0x5f04f8,'cwd':_0x4fffdc,'subdomain':_0x4c8e1f});}else{if(_0x216544=await a({'cwd':_0x4fffdc,'appConfig':_0x47951f,'config':{'host':'0.0.0.0','port':_0x32888e?_0x28f06f-0x1:_0x28f06f},'hmr':_0x41e63c?{'host':_0x534f77,'protocol':'ws'}:void 0x0}),_0x32888e&&!_0x41e63c){let _0x550550=await _0x216544['vite'][_0x4124be(0x163)]({'configFile':!0x1,'root':__dirname+_0x4124be(0x173),'server':{'port':_0x216544[_0x4124be(0x13c)][_0x4124be(0x12d)][_0x4124be(0x12b)]()[_0x4124be(0x123)]+0x1,'strictPort':!0x0,'open':!0x0}});$['stop'](),await _0x550550['listen'](),(0x0,_0x550550['config']['logger'][_0x4124be(0x136)])(e[_0x4124be(0x155)](_0x4124be(0x140))),_0x550550['printUrls']();}else $[_0x4124be(0x144)](),(0x0,_0x216544[_0x4124be(0x14a)][_0x4124be(0x176)]['logger'][_0x4124be(0x136)])(e[_0x4124be(0x155)](_0x4124be(0x140))),_0x216544['server'][_0x4124be(0x156)]();}let _0x518153=_0x216544['app'];if(_0x41e63c)try{n[_0x4124be(0x175)]({'port':_0x260781}),_0x603c5a[_0x4124be(0x12c)](e['green'](o['info']+'\x20'+e[_0x4124be(0x14f)]('Remote\x20debugging\x20tool\x20is\x20running\x20at:\x20http://localhost:'+_0x260781))),_0x14ca8f||require(_0x4124be(0x174))['spawn'](_0x4124be(0x126),[_0x4124be(0x142),_0x4124be(0x157)+_0x260781,_0x4124be(0x157)+_0x260781])[_0x4124be(0x15a)]['on'](_0x4124be(0x145),function(_0x59766e){const _0x2b3963=_0x4124be;_0x603c5a['error'](_0x59766e[_0x2b3963(0x16c)]());});}catch(_0x4ad662){_0x603c5a[_0x4124be(0x12c)](o[_0x4124be(0x136)]+'\x20'+e[_0x4124be(0x12f)]('Can\x20not\x20start\x20remote\x20debug\x20server'));}if($[_0x4124be(0x144)](),_0x41e63c){let _0x59dc74=_0x4124be(0x125)+_0xf839a8+_0x4124be(0x131)+_0x534f77+':'+_0x518153[_0x4124be(0x176)][_0x4124be(0x14a)][_0x4124be(0x123)];i['generate'](_0x59dc74,{'small':!0x0},function(_0x1863d6){const _0x1f9282=_0x4124be;if(_0x603c5a[_0x1f9282(0x12c)](e[_0x1f9282(0x155)](o[_0x1f9282(0x136)]+'\x20'+e[_0x1f9282(0x14f)](_0x1f9282(0x13a)+_0x534f77+':'+_0x518153[_0x1f9282(0x176)][_0x1f9282(0x14a)][_0x1f9282(0x123)]))),_0x603c5a[_0x1f9282(0x12c)](e['green'](o[_0x1f9282(0x136)]+'\x20'+e[_0x1f9282(0x14f)]('Trying\x20reverse\x20socket\x20connection'))),_0x14ca8f){let _0x1c5fc5=o[_0x1f9282(0x136)]+'\x20'+e['bold'](_0x1f9282(0x152)+_0x1863d6);_0x603c5a['text'](_0x1c5fc5);}else{let _0x574df5=require('child_process')[_0x1f9282(0x132)]('adb',[_0x1f9282(0x142),_0x1f9282(0x157)+_0x518153[_0x1f9282(0x176)][_0x1f9282(0x14a)]['port'],_0x1f9282(0x157)+_0x518153[_0x1f9282(0x176)]['server'][_0x1f9282(0x123)]]);_0x574df5[_0x1f9282(0x15a)]['on'](_0x1f9282(0x145),function(_0x52ad7c){const _0x547e0b=_0x1f9282;_0x603c5a[_0x547e0b(0x147)](_0x52ad7c[_0x547e0b(0x16c)]());}),_0x574df5['on'](_0x1f9282(0x149),function(_0x26d963){const _0x23f1ae=_0x1f9282;if(0x0!==_0x26d963)throw Error(_0x23f1ae(0x14b)+_0x26d963);{let _0x1f38c8=o[_0x23f1ae(0x136)]+'\x20'+e[_0x23f1ae(0x14f)](_0x23f1ae(0x152)+_0x1863d6);_0x603c5a[_0x23f1ae(0x12c)](_0x1f38c8),require(_0x23f1ae(0x174))[_0x23f1ae(0x132)](_0x23f1ae(0x126),[_0x23f1ae(0x14d)])[_0x23f1ae(0x128)]['on'](_0x23f1ae(0x145),function(_0x5927f){const _0x52482e=_0x23f1ae;_0x603c5a['text'](''+e[_0x52482e(0x171)](_0x5927f[_0x52482e(0x16c)]()));});}});}});}if(_0xd29404){let _0x1f89f6=_0x518153[_0x4124be(0x12d)][_0x4124be(0x12b)]()[_0x4124be(0x123)],_0x4d56ab=await g(_0x1f89f6,_0x4c8e1f),_0x1f7e17='https://zalo.me/app/link/zapps/'+_0xf839a8+'/?env=TESTING_LOCAL&clientIp='+_0x4d56ab;i[_0x4124be(0x14c)](_0x1f7e17,{'small':!0x0},function(_0x3e6706){const _0x2c3ecf=_0x4124be;let _0x332ecd=o[_0x2c3ecf(0x136)]+'\x20'+e[_0x2c3ecf(0x14f)](_0x2c3ecf(0x152)+_0x3e6706);_0x603c5a[_0x2c3ecf(0x12c)](_0x332ecd),_0x603c5a[_0x2c3ecf(0x12c)](o[_0x2c3ecf(0x136)]+'\x20'+e[_0x2c3ecf(0x14f)](_0x2c3ecf(0x120)+_0x37b0d3+_0x2c3ecf(0x170)+e[_0x2c3ecf(0x155)](_0x2c3ecf(0x165))+_0x2c3ecf(0x11e)+e[_0x2c3ecf(0x15e)](_0x2c3ecf(0x15f))+_0x2c3ecf(0x150)));});}return await new Promise(()=>{});}catch(_0x446828){$[_0x4124be(0x144)](),_0x603c5a['error'](_0x4124be(0x159)),d(_0x446828);return;}};
|
|
@@ -1,146 +1 @@
|
|
|
1
|
-
const
|
|
2
|
-
const fs = require('fs');
|
|
3
|
-
const { axiosClient } = require('../utils/axios');
|
|
4
|
-
|
|
5
|
-
async function generateListResourcesFromIndex(
|
|
6
|
-
html,
|
|
7
|
-
{ outputDir, rootElement }
|
|
8
|
-
) {
|
|
9
|
-
const listCSS = [];
|
|
10
|
-
const listSyncJS = [];
|
|
11
|
-
const listAsyncJS = [];
|
|
12
|
-
let inlineJS = '';
|
|
13
|
-
try {
|
|
14
|
-
const parser = new DomParser();
|
|
15
|
-
const doc = parser.parseFromString(html, 'text/html');
|
|
16
|
-
const headInlines = [];
|
|
17
|
-
const bodyInlines = [];
|
|
18
|
-
|
|
19
|
-
const scripts = doc.getElementsByTagName('script');
|
|
20
|
-
for (const script of scripts) {
|
|
21
|
-
const src = script.getAttribute('src');
|
|
22
|
-
const type = script.getAttribute('type');
|
|
23
|
-
const async = script.getAttribute('async');
|
|
24
|
-
const inline = script.innerHTML;
|
|
25
|
-
try {
|
|
26
|
-
if (inline) {
|
|
27
|
-
bodyInlines.push(script.outerHTML);
|
|
28
|
-
} else {
|
|
29
|
-
let scriptName = src;
|
|
30
|
-
if (src.includes('://')) {
|
|
31
|
-
let filename = src.substring(src.lastIndexOf('/') + 1);
|
|
32
|
-
filename = `cdn.` + filename;
|
|
33
|
-
const response = await axiosClient({
|
|
34
|
-
method: 'get',
|
|
35
|
-
url: src,
|
|
36
|
-
responseType: 'stream',
|
|
37
|
-
});
|
|
38
|
-
const fileStream = fs.createWriteStream(`${outputDir}/${filename}`);
|
|
39
|
-
response.data.pipe(fileStream);
|
|
40
|
-
|
|
41
|
-
await new Promise((resolve, reject) => {
|
|
42
|
-
fileStream.on('finish', resolve);
|
|
43
|
-
fileStream.on('error', reject);
|
|
44
|
-
});
|
|
45
|
-
scriptName = filename;
|
|
46
|
-
}
|
|
47
|
-
if (type === 'module' && !scriptName.endsWith('module.js')) {
|
|
48
|
-
const newName = src.slice(0, -3).concat('.module.js');
|
|
49
|
-
fs.rename(scriptName, newName);
|
|
50
|
-
scriptName = newName;
|
|
51
|
-
}
|
|
52
|
-
(async ? listAsyncJS : listSyncJS).push(scriptName);
|
|
53
|
-
}
|
|
54
|
-
} catch (error) {
|
|
55
|
-
console.warn(
|
|
56
|
-
'\n⚠️ Unable to download resource from CDN. Please handle this file manually!',
|
|
57
|
-
src
|
|
58
|
-
);
|
|
59
|
-
console.error(error.message);
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
const styles = doc.getElementsByTagName('style');
|
|
64
|
-
styles.forEach((style) => {
|
|
65
|
-
const inline = style.innerHTML;
|
|
66
|
-
if (inline) {
|
|
67
|
-
headInlines.push(style.outerHTML);
|
|
68
|
-
}
|
|
69
|
-
});
|
|
70
|
-
|
|
71
|
-
const links = doc.getElementsByTagName('link');
|
|
72
|
-
for (const link of links) {
|
|
73
|
-
const rel = link.getAttribute('rel');
|
|
74
|
-
const href = link.getAttribute('href');
|
|
75
|
-
try {
|
|
76
|
-
if (rel === 'stylesheet') {
|
|
77
|
-
let filename = href;
|
|
78
|
-
if (href.includes('://')) {
|
|
79
|
-
filename = href.substring(href.lastIndexOf('/') + 1);
|
|
80
|
-
filename = `cdn.` + filename;
|
|
81
|
-
const response = await axiosClient({
|
|
82
|
-
method: 'get',
|
|
83
|
-
url: href,
|
|
84
|
-
responseType: 'stream',
|
|
85
|
-
});
|
|
86
|
-
const fileStream = fs.createWriteStream(`${outputDir}/${filename}`);
|
|
87
|
-
response.data.pipe(fileStream);
|
|
88
|
-
|
|
89
|
-
await new Promise((resolve, reject) => {
|
|
90
|
-
fileStream.on('finish', resolve);
|
|
91
|
-
fileStream.on('error', reject);
|
|
92
|
-
});
|
|
93
|
-
}
|
|
94
|
-
listCSS.push(filename);
|
|
95
|
-
}
|
|
96
|
-
} catch (error) {
|
|
97
|
-
console.error(
|
|
98
|
-
'\n⚠️ Unable to download resource from CDN. Please handle this file manually!',
|
|
99
|
-
href
|
|
100
|
-
);
|
|
101
|
-
console.error(error.message);
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
const metas = doc.getElementsByTagName('meta');
|
|
106
|
-
metas.forEach((meta) => {
|
|
107
|
-
headInlines.push(meta.outerHTML);
|
|
108
|
-
});
|
|
109
|
-
|
|
110
|
-
if (rootElement && rootElement !== '#app') {
|
|
111
|
-
let html = `<${rootElement} />`;
|
|
112
|
-
if (rootElement.startsWith('#')) {
|
|
113
|
-
html = `<div id="${rootElement.substring(1)}" />`;
|
|
114
|
-
}
|
|
115
|
-
if (rootElement.startsWith('.')) {
|
|
116
|
-
html = `<div class="${rootElement.substring(1)}" />`;
|
|
117
|
-
}
|
|
118
|
-
if (rootElement.startsWith('<')) {
|
|
119
|
-
html = rootElement;
|
|
120
|
-
}
|
|
121
|
-
bodyInlines.unshift(html);
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
inlineJS += headInlines
|
|
125
|
-
.map(
|
|
126
|
-
(inline) =>
|
|
127
|
-
`document.head.innerHTML += \`${inline.replaceAll('`', '\\`')}\`;`
|
|
128
|
-
)
|
|
129
|
-
.join('\n');
|
|
130
|
-
inlineJS += '\n';
|
|
131
|
-
inlineJS += bodyInlines
|
|
132
|
-
.map(
|
|
133
|
-
(inline) =>
|
|
134
|
-
`document.body.innerHTML += \`${inline.replaceAll('`', '\\`')}\`;`
|
|
135
|
-
)
|
|
136
|
-
.join('\n');
|
|
137
|
-
listSyncJS.unshift('inline.js');
|
|
138
|
-
} catch (error) {
|
|
139
|
-
console.error(error.message);
|
|
140
|
-
}
|
|
141
|
-
return { listCSS, listSyncJS, listAsyncJS, inlineJS };
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
module.exports = {
|
|
145
|
-
generateListResourcesFromIndex,
|
|
146
|
-
};
|
|
1
|
+
'use strict';const _0x3155fe=_0x1f52;function _0x1f52(_0x2091a8,_0x5243b8){const _0x21bc91=_0x21bc();return _0x1f52=function(_0x1f5219,_0x4a0211){_0x1f5219=_0x1f5219-0x1f1;let _0xeb896a=_0x21bc91[_0x1f5219];return _0xeb896a;},_0x1f52(_0x2091a8,_0x5243b8);}(function(_0x5c3f57,_0x386a24){const _0x449469=_0x1f52,_0x3e8037=_0x5c3f57();while(!![]){try{const _0x5ecefc=parseInt(_0x449469(0x22b))/0x1*(-parseInt(_0x449469(0x214))/0x2)+parseInt(_0x449469(0x20b))/0x3*(parseInt(_0x449469(0x222))/0x4)+parseInt(_0x449469(0x1fa))/0x5*(parseInt(_0x449469(0x1fc))/0x6)+-parseInt(_0x449469(0x1f4))/0x7*(parseInt(_0x449469(0x218))/0x8)+parseInt(_0x449469(0x20d))/0x9+parseInt(_0x449469(0x1f1))/0xa+-parseInt(_0x449469(0x204))/0xb;if(_0x5ecefc===_0x386a24)break;else _0x3e8037['push'](_0x3e8037['shift']());}catch(_0x5327e4){_0x3e8037['push'](_0x3e8037['shift']());}}}(_0x21bc,0xcc76f));const e=require(_0x3155fe(0x209)),t=require('fs'),{axiosClient:r}=require(_0x3155fe(0x202));async function s(_0x586047,{outputDir:_0x122e3a,rootElement:_0x3ceaa7}){const _0x94dd82=_0x3155fe;let _0x5d5e4c=[],_0xf571e1=[],_0x36749b=[],_0x36fe51='';try{let _0x29c59b=new e()['parseFromString'](_0x586047,_0x94dd82(0x216)),_0x1d2967=[],_0x5449e6=[];for(let _0x2ca9de of _0x29c59b[_0x94dd82(0x21a)](_0x94dd82(0x205))){let _0x4486fc=_0x2ca9de['getAttribute'](_0x94dd82(0x20c)),_0x213753=_0x2ca9de[_0x94dd82(0x219)](_0x94dd82(0x211)),_0x4c64e6=_0x2ca9de[_0x94dd82(0x219)]('async'),_0x3918e9=_0x2ca9de[_0x94dd82(0x229)];try{if(_0x3918e9)_0x5449e6[_0x94dd82(0x20a)](_0x2ca9de[_0x94dd82(0x22a)]);else{let _0x1f519c=_0x4486fc;if(_0x4486fc['includes'](_0x94dd82(0x225))){let _0x3ab95d=_0x4486fc[_0x94dd82(0x1f3)](_0x4486fc[_0x94dd82(0x1f6)]('/')+0x1);_0x3ab95d='cdn.'+_0x3ab95d;let _0x210364=await r({'method':_0x94dd82(0x1f2),'url':_0x4486fc,'responseType':_0x94dd82(0x1fb)}),_0x126195=t[_0x94dd82(0x223)](_0x122e3a+'/'+_0x3ab95d);_0x210364[_0x94dd82(0x1fe)][_0x94dd82(0x220)](_0x126195),await new Promise((_0x5c7715,_0x17dbad)=>{_0x126195['on']('finish',_0x5c7715),_0x126195['on']('error',_0x17dbad);}),_0x1f519c=_0x3ab95d;}if(_0x94dd82(0x20e)===_0x213753&&!_0x1f519c['endsWith'](_0x94dd82(0x203))){let _0x1984ea=_0x4486fc[_0x94dd82(0x20f)](0x0,-0x3)[_0x94dd82(0x210)](_0x94dd82(0x21e));t[_0x94dd82(0x201)](_0x1f519c,_0x1984ea),_0x1f519c=_0x1984ea;}(_0x4c64e6?_0x36749b:_0xf571e1)[_0x94dd82(0x20a)](_0x1f519c);}}catch(_0x672d1f){console['warn'](_0x94dd82(0x221),_0x4486fc),console[_0x94dd82(0x1f5)](_0x672d1f[_0x94dd82(0x21d)]);}}for(let _0x1c0480 of(_0x29c59b['getElementsByTagName']('style')[_0x94dd82(0x224)](_0x56beb3=>{const _0x45a65b=_0x94dd82;_0x56beb3[_0x45a65b(0x229)]&&_0x1d2967[_0x45a65b(0x20a)](_0x56beb3['outerHTML']);}),_0x29c59b[_0x94dd82(0x21a)](_0x94dd82(0x213)))){let _0x28c14b=_0x1c0480[_0x94dd82(0x219)](_0x94dd82(0x1f9)),_0x5b5ff7=_0x1c0480['getAttribute'](_0x94dd82(0x21b));try{if(_0x94dd82(0x212)===_0x28c14b){let _0x454642=_0x5b5ff7;if(_0x5b5ff7[_0x94dd82(0x206)](_0x94dd82(0x225))){_0x454642=_0x5b5ff7[_0x94dd82(0x1f3)](_0x5b5ff7[_0x94dd82(0x1f6)]('/')+0x1),_0x454642=_0x94dd82(0x1f8)+_0x454642;let _0x42c3ef=await r({'method':_0x94dd82(0x1f2),'url':_0x5b5ff7,'responseType':_0x94dd82(0x1fb)}),_0x2e0bf0=t[_0x94dd82(0x223)](_0x122e3a+'/'+_0x454642);_0x42c3ef[_0x94dd82(0x1fe)][_0x94dd82(0x220)](_0x2e0bf0),await new Promise((_0x30cc6e,_0x47acc0)=>{const _0x36f148=_0x94dd82;_0x2e0bf0['on'](_0x36f148(0x200),_0x30cc6e),_0x2e0bf0['on']('error',_0x47acc0);});}_0x5d5e4c[_0x94dd82(0x20a)](_0x454642);}}catch(_0x5b08bb){console[_0x94dd82(0x1f5)](_0x94dd82(0x221),_0x5b5ff7),console[_0x94dd82(0x1f5)](_0x5b08bb['message']);}}if(_0x29c59b[_0x94dd82(0x21a)]('meta')['forEach'](_0x23f7c7=>{const _0x19311b=_0x94dd82;_0x1d2967['push'](_0x23f7c7[_0x19311b(0x22a)]);}),_0x3ceaa7&&_0x94dd82(0x1fd)!==_0x3ceaa7){let _0x42549c='<'+_0x3ceaa7+_0x94dd82(0x228);_0x3ceaa7[_0x94dd82(0x215)]('#')&&(_0x42549c=_0x94dd82(0x226)+_0x3ceaa7[_0x94dd82(0x1f3)](0x1)+_0x94dd82(0x1ff)),_0x3ceaa7['startsWith']('.')&&(_0x42549c='<div\x20class=\x22'+_0x3ceaa7[_0x94dd82(0x1f3)](0x1)+'\x22\x20/>'),_0x3ceaa7['startsWith']('<')&&(_0x42549c=_0x3ceaa7),_0x5449e6[_0x94dd82(0x21c)](_0x42549c);}_0x36fe51+=_0x1d2967[_0x94dd82(0x1f7)](_0x4fc011=>_0x94dd82(0x227)+_0x4fc011[_0x94dd82(0x207)]('`','\x5c`')+'`;')[_0x94dd82(0x208)]('\x0a')+'\x0a'+_0x5449e6['map'](_0x489416=>_0x94dd82(0x217)+_0x489416['replaceAll']('`','\x5c`')+'`;')[_0x94dd82(0x208)]('\x0a'),_0xf571e1[_0x94dd82(0x21c)]('inline.js');}catch(_0x4cf76d){console[_0x94dd82(0x1f5)](_0x4cf76d[_0x94dd82(0x21d)]);}return{'listCSS':_0x5d5e4c,'listSyncJS':_0xf571e1,'listAsyncJS':_0x36749b,'inlineJS':_0x36fe51};}function _0x21bc(){const _0x4bcb94=['8Fbueyz','getAttribute','getElementsByTagName','href','unshift','message','.module.js','exports','pipe','\x0a⚠️\x20Unable\x20to\x20download\x20resource\x20from\x20CDN.\x20Please\x20handle\x20this\x20file\x20manually!','2427992SeehBn','createWriteStream','forEach','://','<div\x20id=\x22','document.head.innerHTML\x20+=\x20`','\x20/>','innerHTML','outerHTML','2rVveHx','15578660bilAXY','get','substring','9996889HknlxO','error','lastIndexOf','map','cdn.','rel','5EsAvpY','stream','2055162hfDMlP','#app','data','\x22\x20/>','finish','rename','../utils/axios','module.js','8018428QAFbPl','script','includes','replaceAll','join','dom-parser','push','3ovTepo','src','8956125QIyPhI','module','slice','concat','type','stylesheet','link','507954qlDSdZ','startsWith','text/html','document.body.innerHTML\x20+=\x20`'];_0x21bc=function(){return _0x4bcb94;};return _0x21bc();}module[_0x3155fe(0x21f)]={'generateListResourcesFromIndex':s};
|
package/sync/index.js
CHANGED
|
@@ -1,55 +1 @@
|
|
|
1
|
-
const
|
|
2
|
-
const chalk = require('chalk');
|
|
3
|
-
const fse = require('../utils/fs-extra');
|
|
4
|
-
const config = require('../config');
|
|
5
|
-
const { generateListResourcesFromIndex } = require('./index-to-app-config');
|
|
6
|
-
|
|
7
|
-
const waitText = chalk.gray('(Please wait, it can take a while)');
|
|
8
|
-
const defaultLogger = {
|
|
9
|
-
statusStart() {},
|
|
10
|
-
statusDone() {},
|
|
11
|
-
statusText() {},
|
|
12
|
-
statusError() {},
|
|
13
|
-
text() {},
|
|
14
|
-
error() {},
|
|
15
|
-
showOnUI() {},
|
|
16
|
-
};
|
|
17
|
-
|
|
18
|
-
module.exports = async (options = {}, logger = defaultLogger) => {
|
|
19
|
-
logger.statusStart(`Synchronization configuration ${waitText}`);
|
|
20
|
-
const cwd = process.cwd();
|
|
21
|
-
const { source, rootElement } = options;
|
|
22
|
-
const appConfigFilename = config.filename.appConfig;
|
|
23
|
-
const resolvePath = (dir) => {
|
|
24
|
-
return path.join(cwd, dir);
|
|
25
|
-
};
|
|
26
|
-
function errorExit(err) {
|
|
27
|
-
logger.error(err.stderr || err);
|
|
28
|
-
process.exit(1);
|
|
29
|
-
}
|
|
30
|
-
let appConfigJson;
|
|
31
|
-
try {
|
|
32
|
-
appConfigJson = require(resolvePath(appConfigFilename));
|
|
33
|
-
} catch (err) {
|
|
34
|
-
errorExit(new Error(config.error_msg.app_config_not_found));
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
const html = fse.readFileSync(source).toString();
|
|
38
|
-
const outputDir = path.dirname(source);
|
|
39
|
-
const { listCSS, listSyncJS, listAsyncJS, inlineJS } =
|
|
40
|
-
await generateListResourcesFromIndex(html, { outputDir, rootElement });
|
|
41
|
-
Object.assign(appConfigJson, {
|
|
42
|
-
listCSS,
|
|
43
|
-
listSyncJS,
|
|
44
|
-
listAsyncJS,
|
|
45
|
-
});
|
|
46
|
-
if (inlineJS) {
|
|
47
|
-
fse.writeFileSync(resolvePath(`${outputDir}/inline.js`), inlineJS);
|
|
48
|
-
}
|
|
49
|
-
const output = JSON.stringify(appConfigJson, null, 2);
|
|
50
|
-
fse.writeFileSync(resolvePath(appConfigFilename), output);
|
|
51
|
-
logger.statusDone(
|
|
52
|
-
`${chalk.bold.green('Configuration synchronization completed!')} 💪`
|
|
53
|
-
);
|
|
54
|
-
logger.text({ listCSS, listSyncJS, listAsyncJS });
|
|
55
|
-
};
|
|
1
|
+
'use strict';const _0x9392ec=_0x39f5;(function(_0x35f777,_0xfd56ed){const _0x46b8f1=_0x39f5,_0x4cdb9b=_0x35f777();while(!![]){try{const _0x178fff=-parseInt(_0x46b8f1(0x1d5))/0x1+parseInt(_0x46b8f1(0x1d2))/0x2*(-parseInt(_0x46b8f1(0x1e6))/0x3)+parseInt(_0x46b8f1(0x1e3))/0x4*(parseInt(_0x46b8f1(0x1d6))/0x5)+-parseInt(_0x46b8f1(0x1d7))/0x6*(-parseInt(_0x46b8f1(0x1d1))/0x7)+parseInt(_0x46b8f1(0x1e4))/0x8+-parseInt(_0x46b8f1(0x1e8))/0x9+parseInt(_0x46b8f1(0x1cc))/0xa*(parseInt(_0x46b8f1(0x1d8))/0xb);if(_0x178fff===_0xfd56ed)break;else _0x4cdb9b['push'](_0x4cdb9b['shift']());}catch(_0x45c709){_0x4cdb9b['push'](_0x4cdb9b['shift']());}}}(_0x388e,0x505c1));function _0x39f5(_0x1abcb2,_0x3f8b16){const _0x388e06=_0x388e();return _0x39f5=function(_0x39f55a,_0x584696){_0x39f55a=_0x39f55a-0x1c8;let _0x166789=_0x388e06[_0x39f55a];return _0x166789;},_0x39f5(_0x1abcb2,_0x3f8b16);}const t=require('path'),e=require(_0x9392ec(0x1df)),r=require('../utils/fs-extra'),i=require(_0x9392ec(0x1d0)),{errorExit:n}=require(_0x9392ec(0x1c9)),{generateListResourcesFromIndex:a}=require(_0x9392ec(0x1d4)),o=e[_0x9392ec(0x1e9)]('(Please\x20wait,\x20it\x20can\x20take\x20a\x20while)'),s={'statusStart'(){},'statusDone'(){},'statusText'(){},'statusError'(){},'text'(){},'error'(){},'showOnUI'(){}};function _0x388e(){const _0x32b514=['232181lgGXgQ','40PABHEe','1908822pxfCjp','44TkdMso','toString','/inline.js','writeFileSync','assign','stringify','bold','chalk','error_msg','app_config_not_found','join','47504pdNDrl','514520ugbVdP','Synchronization\x20configuration\x20','325203tzZkZF','Configuration\x20synchronization\x20completed!','3755637ObmMZd','gray','green','exports','cwd','../utils/error','text','readFileSync','2607930dpMZqO','\x20💪','filename','statusDone','../config','7RFQRbI','10PoKRSP','statusStart','./index-to-app-config'];_0x388e=function(){return _0x32b514;};return _0x388e();}module[_0x9392ec(0x1eb)]=async(_0x251bee={},_0x1085b6=s)=>{const _0x111e0f=_0x9392ec;let _0x2ebb18;_0x1085b6[_0x111e0f(0x1d3)](_0x111e0f(0x1e5)+o);let _0x1b25b2=process[_0x111e0f(0x1c8)](),{source:_0x4e89fc,rootElement:_0x1603bd}=_0x251bee,_0x3dfe15=i[_0x111e0f(0x1ce)]['appConfig'],_0x547b4e=_0x497cee=>t[_0x111e0f(0x1e2)](_0x1b25b2,_0x497cee);try{_0x2ebb18=require(_0x547b4e(_0x3dfe15));}catch(_0x11ea3c){n(Error(i[_0x111e0f(0x1e0)][_0x111e0f(0x1e1)]));}let _0x46fb85=r[_0x111e0f(0x1cb)](_0x4e89fc)[_0x111e0f(0x1d9)](),_0x53e773=t['dirname'](_0x4e89fc),{listCSS:_0x2de309,listSyncJS:_0x2541ab,listAsyncJS:_0x12e15f,inlineJS:_0x10eb54}=await a(_0x46fb85,{'outputDir':_0x53e773,'rootElement':_0x1603bd});Object[_0x111e0f(0x1dc)](_0x2ebb18,{'listCSS':_0x2de309,'listSyncJS':_0x2541ab,'listAsyncJS':_0x12e15f}),_0x10eb54&&r[_0x111e0f(0x1db)](_0x547b4e(_0x53e773+_0x111e0f(0x1da)),_0x10eb54);let _0xb37953=JSON[_0x111e0f(0x1dd)](_0x2ebb18,null,0x2);r[_0x111e0f(0x1db)](_0x547b4e(_0x3dfe15),_0xb37953),_0x1085b6[_0x111e0f(0x1cf)](e[_0x111e0f(0x1de)][_0x111e0f(0x1ea)](_0x111e0f(0x1e7))+_0x111e0f(0x1cd)),_0x1085b6[_0x111e0f(0x1ca)]({'listCSS':_0x2de309,'listSyncJS':_0x2541ab,'listAsyncJS':_0x12e15f});};
|
package/utils/axios.js
CHANGED
|
@@ -1,15 +1 @@
|
|
|
1
|
-
const {
|
|
2
|
-
const axios = require('axios');
|
|
3
|
-
|
|
4
|
-
const agent = new ProxyAgent();
|
|
5
|
-
|
|
6
|
-
const axiosClient = axios.create({
|
|
7
|
-
proxy: false,
|
|
8
|
-
httpsAgent: agent,
|
|
9
|
-
httpAgent: agent,
|
|
10
|
-
});
|
|
11
|
-
|
|
12
|
-
module.exports = {
|
|
13
|
-
agent,
|
|
14
|
-
axiosClient,
|
|
15
|
-
};
|
|
1
|
+
'use strict';function _0x5c13(_0x326f18,_0x3ce6b3){const _0x28e482=_0x28e4();return _0x5c13=function(_0x5c132b,_0x17470c){_0x5c132b=_0x5c132b-0x128;let _0x37d610=_0x28e482[_0x5c132b];return _0x37d610;},_0x5c13(_0x326f18,_0x3ce6b3);}const _0xf1c02a=_0x5c13;(function(_0x21bf25,_0x480e83){const _0x10f7a9=_0x5c13,_0xeddc47=_0x21bf25();while(!![]){try{const _0x4e96c3=parseInt(_0x10f7a9(0x129))/0x1+-parseInt(_0x10f7a9(0x131))/0x2+-parseInt(_0x10f7a9(0x12e))/0x3+parseInt(_0x10f7a9(0x12b))/0x4*(parseInt(_0x10f7a9(0x12d))/0x5)+-parseInt(_0x10f7a9(0x12f))/0x6+-parseInt(_0x10f7a9(0x130))/0x7+parseInt(_0x10f7a9(0x12c))/0x8;if(_0x4e96c3===_0x480e83)break;else _0xeddc47['push'](_0xeddc47['shift']());}catch(_0x36b772){_0xeddc47['push'](_0xeddc47['shift']());}}}(_0x28e4,0x3ec74));const {ProxyAgent:e}=require('proxy-agent'),t=require(_0xf1c02a(0x128)),r=new e(),o=t['create']({'proxy':!0x1,'httpsAgent':r,'httpAgent':r});function _0x28e4(){const _0x5e86a2=['276604SBXDuu','exports','10700mDftLL','3799128XDfRcL','535kIYOmp','806385kZaIiz','1077228QNZQZH','1450281LwVOtQ','250128uZrOLz','axios'];_0x28e4=function(){return _0x5e86a2;};return _0x28e4();}module[_0xf1c02a(0x12a)]={'agent':r,'axiosClient':o};
|