@heybox/hb-sdk 0.6.6-alpha.2 → 0.6.6-alpha.4
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 +44 -7
- package/dist/cli-chunks/build-C54stoRf.cjs +142 -0
- package/dist/cli-chunks/context-DvTynj3F.cjs +410 -0
- package/dist/cli-chunks/{create-CxjB3oSo.cjs → create-uQS30kS_.cjs} +1 -1
- package/dist/cli-chunks/{dev-Km0or0yY.cjs → dev-1wE8dNiL.cjs} +29 -149
- package/dist/cli-chunks/{doctor-baVOqNSh.cjs → doctor-B2aCUOQ7.cjs} +1 -1
- package/dist/cli-chunks/{index-ByDy5HXi.cjs → index-19i3Dr5H.cjs} +32 -16
- package/dist/cli-chunks/{index-DCsEAuca.cjs → index-DypVMqsr.cjs} +3 -3
- package/dist/cli-chunks/{login-fNe0eDs_.cjs → login-BIIUGwoq.cjs} +2 -2
- package/dist/cli-chunks/project-vite-Dl3OoQjL.cjs +45 -0
- package/dist/cli-chunks/remote-47MjCKhu.cjs +1522 -0
- package/dist/cli-chunks/{remote-BRIlRrCG.cjs → runtime-gate--rPXjiG6.cjs} +7 -1501
- package/dist/cli-chunks/{context-CM46YbPT.cjs → runtime-permission-env-BSs4uCNa.cjs} +75 -293
- package/dist/cli-chunks/{session-CTcelATz.cjs → session-DJEuhrgq.cjs} +1 -1
- package/dist/cli.cjs +1 -1
- package/dist/devtools/mock-host/main.js +149 -3
- package/dist/index.cjs.js +1 -1
- package/dist/index.esm.js +1 -1
- package/dist/templates/vue3-vite-ts/README.md.ejs +2 -2
- package/dist/templates/vue3-vite-ts/package.json.ejs +1 -1
- package/dist/vite.cjs.js +68 -4
- package/dist/vite.esm.js +68 -4
- package/package.json +2 -2
- package/skill/SKILL.md +19 -14
- package/skill/references/api-protocol.md +3 -2
- package/skill/references/api-root.md +57 -11
- package/skill/references/cli.md +33 -1
- package/skill/references/recipes.md +53 -0
- package/skill/references/safety-boundaries.md +1 -1
- package/skill/scripts/sync-references.mjs +23 -1
- package/skill/skill.json +4 -4
- package/types/index.d.ts +1 -1
- package/types/modules/share/types.d.ts +11 -0
- package/types/protocol.d.ts +1 -1
- package/types/vite/html-policy.d.ts +5 -1
- package/types/vite/index.d.ts +10 -1
- package/types/vite/runtime-permission-env.d.ts +9 -0
|
@@ -1,35 +1,38 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var node_module = require('node:module');
|
|
4
3
|
var fs = require('node:fs');
|
|
5
|
-
var fs$1 = require('node:fs/promises');
|
|
6
4
|
var os = require('node:os');
|
|
7
5
|
var path = require('node:path');
|
|
8
|
-
var node_url = require('node:url');
|
|
9
6
|
var net = require('node:net');
|
|
10
7
|
var promises = require('node:dns/promises');
|
|
11
8
|
var node_http = require('node:http');
|
|
9
|
+
var context = require('./context-DvTynj3F.cjs');
|
|
12
10
|
var node_crypto = require('node:crypto');
|
|
13
11
|
var undici = require('undici');
|
|
14
12
|
var browser = require('./browser-RAy8e8cV.cjs');
|
|
15
|
-
var index = require('./index-
|
|
16
|
-
var
|
|
13
|
+
var index = require('./index-19i3Dr5H.cjs');
|
|
14
|
+
var projectVite = require('./project-vite-Dl3OoQjL.cjs');
|
|
15
|
+
var fs$1 = require('node:fs/promises');
|
|
16
|
+
var runtimePermissionEnv = require('./runtime-permission-env-BSs4uCNa.cjs');
|
|
17
|
+
require('./session-DJEuhrgq.cjs');
|
|
18
|
+
require('fs');
|
|
19
|
+
require('constants');
|
|
20
|
+
require('stream');
|
|
21
|
+
require('util');
|
|
22
|
+
require('assert');
|
|
23
|
+
require('path');
|
|
17
24
|
require('node:process');
|
|
18
25
|
require('node:buffer');
|
|
26
|
+
require('node:url');
|
|
19
27
|
require('node:util');
|
|
20
28
|
require('node:child_process');
|
|
21
|
-
require('
|
|
29
|
+
require('node:module');
|
|
22
30
|
require('os');
|
|
23
31
|
require('readline');
|
|
24
32
|
require('tty');
|
|
25
|
-
require('assert');
|
|
26
33
|
require('events');
|
|
27
|
-
require('stream');
|
|
28
34
|
require('buffer');
|
|
29
|
-
require('
|
|
30
|
-
require('./session-CTcelATz.cjs');
|
|
31
|
-
require('fs');
|
|
32
|
-
require('constants');
|
|
35
|
+
require('node:async_hooks');
|
|
33
36
|
|
|
34
37
|
class Locked extends Error {
|
|
35
38
|
constructor(port) {
|
|
@@ -193,58 +196,6 @@ async function getPorts(options) {
|
|
|
193
196
|
throw new Error('No available ports found');
|
|
194
197
|
}
|
|
195
198
|
|
|
196
|
-
const MANAGED_RUNTIME_PERMISSION_KEYS = new Set(['network.request']);
|
|
197
|
-
/**
|
|
198
|
-
* 判断 permission key 是否由 Runtime 权限快照管理。
|
|
199
|
-
*
|
|
200
|
-
* @param key 待判断的 permission key。
|
|
201
|
-
* @returns 该 key 需要读取 Runtime 权限快照时返回 `true`。
|
|
202
|
-
*/
|
|
203
|
-
function isManagedMiniProgramRuntimePermissionKey(key) {
|
|
204
|
-
return MANAGED_RUNTIME_PERMISSION_KEYS.has(key);
|
|
205
|
-
}
|
|
206
|
-
/**
|
|
207
|
-
* 解析服务端权限快照;格式不完整时整份快照失效并 fail closed。
|
|
208
|
-
*
|
|
209
|
-
* @param snapshot 待校验的服务端权限快照。
|
|
210
|
-
* @returns 解析状态和通过校验的受管权限。
|
|
211
|
-
*/
|
|
212
|
-
function parseMiniProgramRuntimePermissions(snapshot) {
|
|
213
|
-
if (!isRecord$2(snapshot) || snapshot.schema_version !== 1 || !Array.isArray(snapshot.entries)) {
|
|
214
|
-
return { valid: false, permissions: {} };
|
|
215
|
-
}
|
|
216
|
-
if (snapshot.revision !== undefined && (typeof snapshot.revision !== 'number' || !Number.isInteger(snapshot.revision) || snapshot.revision < 0)) {
|
|
217
|
-
return { valid: false, permissions: {} };
|
|
218
|
-
}
|
|
219
|
-
const seenKeys = new Set();
|
|
220
|
-
const permissions = {};
|
|
221
|
-
for (const rawEntry of snapshot.entries) {
|
|
222
|
-
if (!isRecord$2(rawEntry) || typeof rawEntry.key !== 'string' || !rawEntry.key.trim()) {
|
|
223
|
-
return { valid: false, permissions: {} };
|
|
224
|
-
}
|
|
225
|
-
const key = rawEntry.key.trim();
|
|
226
|
-
if (seenKeys.has(key) || (rawEntry.status !== 'enabled' && rawEntry.status !== 'disabled') || !isRecord$2(rawEntry.config)) {
|
|
227
|
-
return { valid: false, permissions: {} };
|
|
228
|
-
}
|
|
229
|
-
seenKeys.add(key);
|
|
230
|
-
if (!isManagedMiniProgramRuntimePermissionKey(key)) {
|
|
231
|
-
continue;
|
|
232
|
-
}
|
|
233
|
-
if (key === 'network.request' && typeof rawEntry.config.useOfficialDomain !== 'boolean') {
|
|
234
|
-
return { valid: false, permissions: {} };
|
|
235
|
-
}
|
|
236
|
-
permissions[key] = {
|
|
237
|
-
key,
|
|
238
|
-
status: rawEntry.status,
|
|
239
|
-
config: { useOfficialDomain: rawEntry.config.useOfficialDomain },
|
|
240
|
-
};
|
|
241
|
-
}
|
|
242
|
-
return { valid: true, permissions };
|
|
243
|
-
}
|
|
244
|
-
function isRecord$2(value) {
|
|
245
|
-
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
246
|
-
}
|
|
247
|
-
|
|
248
199
|
/** Dev Shell 读取局域网 Dev Session endpoint 的 query 参数。 */
|
|
249
200
|
/** Mock Host 创建和读取 Dev Session 的固定路径。 */
|
|
250
201
|
const MINI_PROGRAM_DEV_CONTEXT_PATH = '/__hb_sdk__/dev-context';
|
|
@@ -690,7 +641,7 @@ function validateDevSessionCreatePayload(payload, allowedMiniUrlOrigins) {
|
|
|
690
641
|
!allowedMiniUrlOrigins.has(miniUrlOrigin.origin)) {
|
|
691
642
|
throw new TypeError('mini_url_origin must be an allowed LAN origin');
|
|
692
643
|
}
|
|
693
|
-
const parsedPermissions = parseMiniProgramRuntimePermissions(payload.runtime_permissions);
|
|
644
|
+
const parsedPermissions = context.parseMiniProgramRuntimePermissions(payload.runtime_permissions);
|
|
694
645
|
if (!parsedPermissions.valid) {
|
|
695
646
|
throw new TypeError('runtime_permissions is invalid');
|
|
696
647
|
}
|
|
@@ -1033,7 +984,7 @@ async function handleDevPermissionMutation(request, response, controller) {
|
|
|
1033
984
|
if (!isRecord$1(payload) || Object.keys(payload).length !== 1 || !Object.hasOwn(payload, 'runtime_permissions')) {
|
|
1034
985
|
throw createMockHostError(400, 'INVALID_DEV_PERMISSIONS', 'Dev permissions update body is invalid');
|
|
1035
986
|
}
|
|
1036
|
-
const parsed = parseMiniProgramRuntimePermissions(payload.runtime_permissions);
|
|
987
|
+
const parsed = context.parseMiniProgramRuntimePermissions(payload.runtime_permissions);
|
|
1037
988
|
if (!parsed.valid) {
|
|
1038
989
|
throw createMockHostError(400, 'INVALID_DEV_PERMISSIONS', 'runtime_permissions is invalid');
|
|
1039
990
|
}
|
|
@@ -1216,48 +1167,10 @@ function createHeyboxProtocol(payload) {
|
|
|
1216
1167
|
return `heybox://${encodeURIComponent(JSON.stringify(payload))}`;
|
|
1217
1168
|
}
|
|
1218
1169
|
|
|
1219
|
-
const DEFAULT_PERMISSION_STATE = {
|
|
1220
|
-
networkRequest: {
|
|
1221
|
-
status: 'disabled',
|
|
1222
|
-
useOfficialDomain: false,
|
|
1223
|
-
},
|
|
1224
|
-
};
|
|
1225
|
-
function createMiniProgramMockPermissionState(context) {
|
|
1226
|
-
const parsed = parseMiniProgramRuntimePermissions(context.runtimePermissions);
|
|
1227
|
-
const networkRequest = parsed.permissions['network.request'];
|
|
1228
|
-
return parsed.valid && networkRequest
|
|
1229
|
-
? {
|
|
1230
|
-
networkRequest: {
|
|
1231
|
-
status: networkRequest.status,
|
|
1232
|
-
useOfficialDomain: networkRequest.config.useOfficialDomain === true,
|
|
1233
|
-
},
|
|
1234
|
-
}
|
|
1235
|
-
: cloneDefaultPermissionState();
|
|
1236
|
-
}
|
|
1237
|
-
function createMiniProgramMockRuntimePermissions(state) {
|
|
1238
|
-
return {
|
|
1239
|
-
schema_version: 1,
|
|
1240
|
-
entries: [
|
|
1241
|
-
{
|
|
1242
|
-
key: 'network.request',
|
|
1243
|
-
status: state.networkRequest.status,
|
|
1244
|
-
config: {
|
|
1245
|
-
useOfficialDomain: state.networkRequest.useOfficialDomain,
|
|
1246
|
-
},
|
|
1247
|
-
},
|
|
1248
|
-
],
|
|
1249
|
-
};
|
|
1250
|
-
}
|
|
1251
|
-
function cloneDefaultPermissionState() {
|
|
1252
|
-
return {
|
|
1253
|
-
networkRequest: { ...DEFAULT_PERMISSION_STATE.networkRequest },
|
|
1254
|
-
};
|
|
1255
|
-
}
|
|
1256
|
-
|
|
1257
1170
|
/** 构建时替换为当前发布包的实际版本。 */
|
|
1258
1171
|
const HB_SDK_VERSION = typeof undefined === 'string'
|
|
1259
1172
|
? undefined
|
|
1260
|
-
: '0.6.6-alpha.
|
|
1173
|
+
: '0.6.6-alpha.4';
|
|
1261
1174
|
|
|
1262
1175
|
class DevPermissionOverrideStoreError extends Error {
|
|
1263
1176
|
code;
|
|
@@ -1405,7 +1318,7 @@ async function runDevCommand(options, runtime = {}) {
|
|
|
1405
1318
|
hmrHost: createLanInterfaceCandidates(networkInterfaceSnapshot)[0]?.address,
|
|
1406
1319
|
port: appPort,
|
|
1407
1320
|
};
|
|
1408
|
-
const projectRoot = findProjectRoot(runtime.cwd ?? process.cwd());
|
|
1321
|
+
const projectRoot = projectVite.findProjectRoot(runtime.cwd ?? process.cwd());
|
|
1409
1322
|
const devLaunchContext = await loadDevLaunchContext({
|
|
1410
1323
|
env: runtime.env,
|
|
1411
1324
|
fetchImpl,
|
|
@@ -1427,8 +1340,8 @@ async function runDevCommand(options, runtime = {}) {
|
|
|
1427
1340
|
}),
|
|
1428
1341
|
projectRoot,
|
|
1429
1342
|
});
|
|
1430
|
-
const vite = await logger.task('正在加载项目 Vite', () => loadProjectVite(projectRoot), { successText: '已加载项目 Vite' });
|
|
1431
|
-
const appServer = await logger.task('正在创建 Vite dev server', () => withManagedDevOutputEnv(() => vite.createServer(createViteServerOptions(projectRoot, resolvedOptions)), runtime.env), { successText: '已创建 Vite dev server' });
|
|
1343
|
+
const vite = await logger.task('正在加载项目 Vite', () => projectVite.loadProjectVite(projectRoot), { successText: '已加载项目 Vite' });
|
|
1344
|
+
const appServer = await logger.task('正在创建 Vite dev server', () => withManagedDevOutputEnv(() => vite.createServer(createViteServerOptions(projectRoot, resolvedOptions)), runtime.env, devLaunchContext.runtimePermissions), { successText: '已创建 Vite dev server' });
|
|
1432
1345
|
await logger.task('正在启动 Vite dev server', () => appServer.listen(appPort), {
|
|
1433
1346
|
successText: 'Vite dev server 已启动',
|
|
1434
1347
|
});
|
|
@@ -1545,7 +1458,7 @@ function createDevPermissionController(options) {
|
|
|
1545
1458
|
source: devContext.source,
|
|
1546
1459
|
...(miniProgramId ? { mini_program_id: miniProgramId } : {}),
|
|
1547
1460
|
...(isRuntimePermissionsSnapshot(devContext.runtimePermissions) ? { remote_permissions: devContext.runtimePermissions } : {}),
|
|
1548
|
-
...(overrides ? { override_permissions: createMiniProgramMockRuntimePermissions(overrides) } : {}),
|
|
1461
|
+
...(overrides ? { override_permissions: context.createMiniProgramMockRuntimePermissions(overrides) } : {}),
|
|
1549
1462
|
...(error ? { persistence_error: error } : {}),
|
|
1550
1463
|
};
|
|
1551
1464
|
};
|
|
@@ -1582,7 +1495,7 @@ function createDevPermissionController(options) {
|
|
|
1582
1495
|
return createConfiguration(undefined);
|
|
1583
1496
|
},
|
|
1584
1497
|
async save(runtimePermissions) {
|
|
1585
|
-
const overrides = createMiniProgramMockPermissionState({
|
|
1498
|
+
const overrides = context.createMiniProgramMockPermissionState({
|
|
1586
1499
|
runtimePermissions,
|
|
1587
1500
|
});
|
|
1588
1501
|
try {
|
|
@@ -1600,7 +1513,7 @@ function createDevPermissionController(options) {
|
|
|
1600
1513
|
};
|
|
1601
1514
|
}
|
|
1602
1515
|
function isRuntimePermissionsSnapshot(value) {
|
|
1603
|
-
return parseMiniProgramRuntimePermissions(value).valid;
|
|
1516
|
+
return context.parseMiniProgramRuntimePermissions(value).valid;
|
|
1604
1517
|
}
|
|
1605
1518
|
async function loadRemoteDevContextWithTimeout(options) {
|
|
1606
1519
|
const controller = new AbortController();
|
|
@@ -1623,39 +1536,6 @@ async function loadRemoteDevContextWithTimeout(options) {
|
|
|
1623
1536
|
}
|
|
1624
1537
|
}
|
|
1625
1538
|
}
|
|
1626
|
-
function findProjectRoot(startDir) {
|
|
1627
|
-
let current = path.resolve(startDir);
|
|
1628
|
-
while (true) {
|
|
1629
|
-
if (fs.existsSync(path.join(current, 'package.json'))) {
|
|
1630
|
-
return current;
|
|
1631
|
-
}
|
|
1632
|
-
const parent = path.dirname(current);
|
|
1633
|
-
if (parent === current) {
|
|
1634
|
-
throw new Error('当前目录或父目录未找到 package.json');
|
|
1635
|
-
}
|
|
1636
|
-
current = parent;
|
|
1637
|
-
}
|
|
1638
|
-
}
|
|
1639
|
-
async function loadProjectVite(projectRoot) {
|
|
1640
|
-
const projectRequire = node_module.createRequire(path.join(projectRoot, 'package.json'));
|
|
1641
|
-
try {
|
|
1642
|
-
const packageJson = JSON.parse(await fs$1.readFile(path.join(projectRoot, 'package.json'), 'utf8'));
|
|
1643
|
-
if (!hasPackageDependency(packageJson, 'vite')) {
|
|
1644
|
-
throw new Error('package.json 未声明 vite');
|
|
1645
|
-
}
|
|
1646
|
-
const viteEntry = projectRequire.resolve('vite');
|
|
1647
|
-
return (await import(node_url.pathToFileURL(viteEntry).href));
|
|
1648
|
-
}
|
|
1649
|
-
catch (error) {
|
|
1650
|
-
throw new Error(`当前项目未安装 vite。请先安装项目依赖,或将 vite 放到项目 devDependencies。原始错误: ${index.readErrorMessage(error)}`);
|
|
1651
|
-
}
|
|
1652
|
-
}
|
|
1653
|
-
function hasPackageDependency(packageJson, name) {
|
|
1654
|
-
return Boolean(packageJson.dependencies?.[name] ||
|
|
1655
|
-
packageJson.devDependencies?.[name] ||
|
|
1656
|
-
packageJson.optionalDependencies?.[name] ||
|
|
1657
|
-
packageJson.peerDependencies?.[name]);
|
|
1658
|
-
}
|
|
1659
1539
|
function createViteServerOptions(projectRoot, options) {
|
|
1660
1540
|
const configFile = resolveProjectViteConfig(projectRoot);
|
|
1661
1541
|
const server = {
|
|
@@ -1775,18 +1655,18 @@ function rewriteLocalhostUrl(input) {
|
|
|
1775
1655
|
function isLocalhostHost(hostname) {
|
|
1776
1656
|
return hostname === 'localhost' || hostname === '::1' || hostname === '[::1]';
|
|
1777
1657
|
}
|
|
1778
|
-
async function withManagedDevOutputEnv(action, env = process.env) {
|
|
1779
|
-
const
|
|
1658
|
+
async function withManagedDevOutputEnv(action, env = process.env, runtimePermissions) {
|
|
1659
|
+
const previousManagedOutput = env[MANAGED_DEV_OUTPUT_ENV];
|
|
1780
1660
|
env[MANAGED_DEV_OUTPUT_ENV] = '1';
|
|
1781
1661
|
try {
|
|
1782
|
-
return await
|
|
1662
|
+
return await runtimePermissionEnv.withMiniappPlatformCspEnv(context.shouldSkipMiniappPlatformCsp(runtimePermissions), action, env);
|
|
1783
1663
|
}
|
|
1784
1664
|
finally {
|
|
1785
|
-
if (
|
|
1665
|
+
if (previousManagedOutput === undefined) {
|
|
1786
1666
|
delete env[MANAGED_DEV_OUTPUT_ENV];
|
|
1787
1667
|
}
|
|
1788
1668
|
else {
|
|
1789
|
-
env[MANAGED_DEV_OUTPUT_ENV] =
|
|
1669
|
+
env[MANAGED_DEV_OUTPUT_ENV] = previousManagedOutput;
|
|
1790
1670
|
}
|
|
1791
1671
|
}
|
|
1792
1672
|
}
|
|
@@ -4,7 +4,7 @@ var fs$1 = require('node:fs');
|
|
|
4
4
|
var fs = require('node:fs/promises');
|
|
5
5
|
var os = require('node:os');
|
|
6
6
|
var path = require('node:path');
|
|
7
|
-
var index = require('./index-
|
|
7
|
+
var index = require('./index-19i3Dr5H.cjs');
|
|
8
8
|
require('node:module');
|
|
9
9
|
require('path');
|
|
10
10
|
require('os');
|
|
@@ -234,19 +234,19 @@ function requireArgument () {
|
|
|
234
234
|
|
|
235
235
|
var command = {};
|
|
236
236
|
|
|
237
|
-
const require$5 = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli-chunks/index-
|
|
237
|
+
const require$5 = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli-chunks/index-19i3Dr5H.cjs', document.baseURI).href)));
|
|
238
238
|
function __require$4() { return require$5("node:events"); }
|
|
239
239
|
|
|
240
|
-
const require$4 = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli-chunks/index-
|
|
240
|
+
const require$4 = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli-chunks/index-19i3Dr5H.cjs', document.baseURI).href)));
|
|
241
241
|
function __require$3() { return require$4("node:child_process"); }
|
|
242
242
|
|
|
243
|
-
const require$3 = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli-chunks/index-
|
|
243
|
+
const require$3 = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli-chunks/index-19i3Dr5H.cjs', document.baseURI).href)));
|
|
244
244
|
function __require$2() { return require$3("node:path"); }
|
|
245
245
|
|
|
246
|
-
const require$2 = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli-chunks/index-
|
|
246
|
+
const require$2 = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli-chunks/index-19i3Dr5H.cjs', document.baseURI).href)));
|
|
247
247
|
function __require$1() { return require$2("node:fs"); }
|
|
248
248
|
|
|
249
|
-
const require$1 = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli-chunks/index-
|
|
249
|
+
const require$1 = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli-chunks/index-19i3Dr5H.cjs', document.baseURI).href)));
|
|
250
250
|
function __require() { return require$1("node:process"); }
|
|
251
251
|
|
|
252
252
|
var help = {};
|
|
@@ -13241,7 +13241,7 @@ function loadEnvPreset(argv, options = {}) {
|
|
|
13241
13241
|
* 支持 `--env-file path`、`--env-file=path` 两种写法。
|
|
13242
13242
|
*/
|
|
13243
13243
|
function readEnvFileArgFromArgv(argv) {
|
|
13244
|
-
for (let i =
|
|
13244
|
+
for (let i = argv.length - 1; i >= 0; i -= 1) {
|
|
13245
13245
|
const arg = argv[i];
|
|
13246
13246
|
if (arg === '--env-file') {
|
|
13247
13247
|
return argv[i + 1];
|
|
@@ -13257,7 +13257,7 @@ function readEnvFileArgFromArgv(argv) {
|
|
|
13257
13257
|
* 支持 `--env name`、`--env=name` 两种写法。
|
|
13258
13258
|
*/
|
|
13259
13259
|
function readEnvNameArgFromArgv(argv) {
|
|
13260
|
-
for (let i =
|
|
13260
|
+
for (let i = argv.length - 1; i >= 0; i -= 1) {
|
|
13261
13261
|
const arg = argv[i];
|
|
13262
13262
|
if (arg === '--env') {
|
|
13263
13263
|
return argv[i + 1];
|
|
@@ -13347,7 +13347,7 @@ function getPathname(pathWithQuery) {
|
|
|
13347
13347
|
}
|
|
13348
13348
|
|
|
13349
13349
|
const CLI_VERSION_PLACEHOLDER = ['__HB', 'SDK', 'CLI', 'VERSION__'].join('_');
|
|
13350
|
-
const BUILT_CLI_VERSION = '0.6.6-alpha.
|
|
13350
|
+
const BUILT_CLI_VERSION = '0.6.6-alpha.4';
|
|
13351
13351
|
const PACKAGE_JSON_CANDIDATES = [
|
|
13352
13352
|
path.resolve(__dirname, '..', '..', 'package.json'),
|
|
13353
13353
|
path.resolve(__dirname, '..', 'package.json'),
|
|
@@ -13407,6 +13407,7 @@ function createCliProgram(overrides = {}) {
|
|
|
13407
13407
|
loginToHeybox: defaultLoginToHeybox,
|
|
13408
13408
|
printLoginStatus: defaultPrintLoginStatus,
|
|
13409
13409
|
printUpdateReminder: printUpdateReminder,
|
|
13410
|
+
runBuildCommand: defaultRunBuildCommand,
|
|
13410
13411
|
runCreateCommand: defaultRunCreateCommand,
|
|
13411
13412
|
runDevCommand: defaultRunDevCommand,
|
|
13412
13413
|
runDoctorCommand: defaultRunDoctorCommand,
|
|
@@ -13420,7 +13421,7 @@ function createCliProgram(overrides = {}) {
|
|
|
13420
13421
|
.description('hb-sdk developer tools')
|
|
13421
13422
|
.version(getCliVersion())
|
|
13422
13423
|
.option('-v, --verbose', '输出详细调试信息')
|
|
13423
|
-
.option('--env <name>', '加载项目根下 .env.<name>
|
|
13424
|
+
.option('--env <name>', '加载项目根下 .env.<name> 预设,供 build 和 deploy 使用')
|
|
13424
13425
|
.option('--env-file <path>', '显式指定 .env 文件路径,优先级高于 --env')
|
|
13425
13426
|
.showHelpAfterError()
|
|
13426
13427
|
.exitOverride();
|
|
@@ -13439,6 +13440,17 @@ function createCliProgram(overrides = {}) {
|
|
|
13439
13440
|
const logger = resolveLogger(command);
|
|
13440
13441
|
await handlers.runDevCommand(options, { logger });
|
|
13441
13442
|
}, handlers.printUpdateReminder, resolveLogger));
|
|
13443
|
+
addVerboseOption(program.command('build').description('构建当前小程序项目').option('--env <name>', '加载项目根下 .env.<name> 预设并作为 Vite mode')).action(async (...args) => {
|
|
13444
|
+
const command = readCommandFromActionArgs(args);
|
|
13445
|
+
if (!command) {
|
|
13446
|
+
throw new Error('无法解析 build 命令上下文');
|
|
13447
|
+
}
|
|
13448
|
+
if (readStringOption(readCommandOptionsWithAncestors(command).envFile) !== undefined) {
|
|
13449
|
+
throw new Error('hb-sdk build 不支持 --env-file,请使用 --env <name>');
|
|
13450
|
+
}
|
|
13451
|
+
const logger = resolveLogger(command);
|
|
13452
|
+
await handlers.runBuildCommand({}, { logger });
|
|
13453
|
+
});
|
|
13442
13454
|
installRemoteCommands(program, handlers, resolveLogger);
|
|
13443
13455
|
addVerboseOption(program.command('doctor').description('诊断 hb-sdk 本地环境和 Agent Skill 版本')).action(async (...args) => {
|
|
13444
13456
|
const logger = resolveLogger(readCommandFromActionArgs(args));
|
|
@@ -13668,31 +13680,35 @@ function createCommandLoggerResolver(options) {
|
|
|
13668
13680
|
};
|
|
13669
13681
|
}
|
|
13670
13682
|
const defaultClearLoginStatus = async (...args) => {
|
|
13671
|
-
const { clearLoginStatus } = await Promise.resolve().then(function () { return require('./login-
|
|
13683
|
+
const { clearLoginStatus } = await Promise.resolve().then(function () { return require('./login-BIIUGwoq.cjs'); });
|
|
13672
13684
|
return clearLoginStatus(...args);
|
|
13673
13685
|
};
|
|
13674
13686
|
const defaultLoginToHeybox = async (...args) => {
|
|
13675
|
-
const { loginToHeybox } = await Promise.resolve().then(function () { return require('./login-
|
|
13687
|
+
const { loginToHeybox } = await Promise.resolve().then(function () { return require('./login-BIIUGwoq.cjs'); });
|
|
13676
13688
|
return loginToHeybox(...args);
|
|
13677
13689
|
};
|
|
13678
13690
|
const defaultPrintLoginStatus = async (...args) => {
|
|
13679
|
-
const { printLoginStatus } = await Promise.resolve().then(function () { return require('./login-
|
|
13691
|
+
const { printLoginStatus } = await Promise.resolve().then(function () { return require('./login-BIIUGwoq.cjs'); });
|
|
13680
13692
|
return printLoginStatus(...args);
|
|
13681
13693
|
};
|
|
13694
|
+
const defaultRunBuildCommand = async (...args) => {
|
|
13695
|
+
const { runBuildCommand } = await Promise.resolve().then(function () { return require('./build-C54stoRf.cjs'); });
|
|
13696
|
+
return runBuildCommand(...args);
|
|
13697
|
+
};
|
|
13682
13698
|
const defaultRunCreateCommand = async (...args) => {
|
|
13683
|
-
const { runCreateCommand } = await Promise.resolve().then(function () { return require('./create-
|
|
13699
|
+
const { runCreateCommand } = await Promise.resolve().then(function () { return require('./create-uQS30kS_.cjs'); });
|
|
13684
13700
|
return runCreateCommand(...args);
|
|
13685
13701
|
};
|
|
13686
13702
|
const defaultRunDevCommand = async (...args) => {
|
|
13687
|
-
const { runDevCommand } = await Promise.resolve().then(function () { return require('./dev-
|
|
13703
|
+
const { runDevCommand } = await Promise.resolve().then(function () { return require('./dev-1wE8dNiL.cjs'); });
|
|
13688
13704
|
return runDevCommand(...args);
|
|
13689
13705
|
};
|
|
13690
13706
|
const defaultRunDoctorCommand = async (...args) => {
|
|
13691
|
-
const { runDoctorCommand } = await Promise.resolve().then(function () { return require('./doctor-
|
|
13707
|
+
const { runDoctorCommand } = await Promise.resolve().then(function () { return require('./doctor-B2aCUOQ7.cjs'); });
|
|
13692
13708
|
return runDoctorCommand(...args);
|
|
13693
13709
|
};
|
|
13694
13710
|
const defaultRunRemoteCommand = async (...args) => {
|
|
13695
|
-
const { runRemoteCommand } = await Promise.resolve().then(function () { return require('./remote-
|
|
13711
|
+
const { runRemoteCommand } = await Promise.resolve().then(function () { return require('./remote-47MjCKhu.cjs'); });
|
|
13696
13712
|
return runRemoteCommand(...args);
|
|
13697
13713
|
};
|
|
13698
13714
|
function resolveStandaloneLogger(options, verbose) {
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var index$2 = require('./index-
|
|
3
|
+
var index$2 = require('./index-19i3Dr5H.cjs');
|
|
4
4
|
var require$$0$2 = require('fs');
|
|
5
5
|
var require$$2$1 = require('crypto');
|
|
6
6
|
var require$$1$2 = require('path');
|
|
7
7
|
var require$$0$3 = require('assert');
|
|
8
8
|
var require$$4$2 = require('events');
|
|
9
9
|
var require$$1$1 = require('util');
|
|
10
|
-
var
|
|
10
|
+
var runtimePermissionEnv = require('./runtime-permission-env-BSs4uCNa.cjs');
|
|
11
11
|
var require$$0$5 = require('net');
|
|
12
12
|
var require$$0$4 = require('url');
|
|
13
13
|
var require$$2$2 = require('http');
|
|
@@ -13707,7 +13707,7 @@ function requireSource () {
|
|
|
13707
13707
|
const ajv_1 = requireAjv$1();
|
|
13708
13708
|
const ajv_formats_1 = requireDist();
|
|
13709
13709
|
const debounceFn = requireDebounceFn();
|
|
13710
|
-
const semver =
|
|
13710
|
+
const semver = runtimePermissionEnv.requireSemver();
|
|
13711
13711
|
const onetime = index$2.requireOnetime();
|
|
13712
13712
|
const encryptionAlgorithm = 'aes-256-cbc';
|
|
13713
13713
|
const createPlainObject = () => {
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
var promises = require('node:readline/promises');
|
|
4
4
|
var node_crypto = require('node:crypto');
|
|
5
5
|
var node_http = require('node:http');
|
|
6
|
-
var session = require('./session-
|
|
6
|
+
var session = require('./session-DJEuhrgq.cjs');
|
|
7
7
|
var browser = require('./browser-RAy8e8cV.cjs');
|
|
8
|
-
var index = require('./index-
|
|
8
|
+
var index = require('./index-19i3Dr5H.cjs');
|
|
9
9
|
require('node:path');
|
|
10
10
|
require('fs');
|
|
11
11
|
require('constants');
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var fs = require('node:fs');
|
|
4
|
+
var fs$1 = require('node:fs/promises');
|
|
5
|
+
var node_module = require('node:module');
|
|
6
|
+
var path = require('node:path');
|
|
7
|
+
var node_url = require('node:url');
|
|
8
|
+
var index = require('./index-19i3Dr5H.cjs');
|
|
9
|
+
|
|
10
|
+
function findProjectRoot(startDir) {
|
|
11
|
+
let current = path.resolve(startDir);
|
|
12
|
+
while (true) {
|
|
13
|
+
if (fs.existsSync(path.join(current, 'package.json'))) {
|
|
14
|
+
return current;
|
|
15
|
+
}
|
|
16
|
+
const parent = path.dirname(current);
|
|
17
|
+
if (parent === current) {
|
|
18
|
+
throw new Error('当前目录或父目录未找到 package.json');
|
|
19
|
+
}
|
|
20
|
+
current = parent;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
async function loadProjectVite(projectRoot) {
|
|
24
|
+
const projectRequire = node_module.createRequire(path.join(projectRoot, 'package.json'));
|
|
25
|
+
try {
|
|
26
|
+
const packageJson = JSON.parse(await fs$1.readFile(path.join(projectRoot, 'package.json'), 'utf8'));
|
|
27
|
+
if (!hasPackageDependency(packageJson, 'vite')) {
|
|
28
|
+
throw new Error('package.json 未声明 vite');
|
|
29
|
+
}
|
|
30
|
+
const viteEntry = projectRequire.resolve('vite');
|
|
31
|
+
return (await import(node_url.pathToFileURL(viteEntry).href));
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
throw new Error(`当前项目未安装 vite。请先安装项目依赖,或将 vite 放到项目 devDependencies。原始错误: ${index.readErrorMessage(error)}`);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
function hasPackageDependency(packageJson, name) {
|
|
38
|
+
return Boolean(packageJson.dependencies?.[name] ||
|
|
39
|
+
packageJson.devDependencies?.[name] ||
|
|
40
|
+
packageJson.optionalDependencies?.[name] ||
|
|
41
|
+
packageJson.peerDependencies?.[name]);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
exports.findProjectRoot = findProjectRoot;
|
|
45
|
+
exports.loadProjectVite = loadProjectVite;
|