@brookesia/doctor 0.1.0

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.
@@ -0,0 +1,23 @@
1
+ import type { AppManifestRuntime } from '@brookesia/shared-utils';
2
+ export type DoctorProfile = 'pack-only' | 'gui' | 'runtime' | 'js-runtime' | 'auto';
3
+ export type DoctorEffectiveProfile = Exclude<DoctorProfile, 'auto'>;
4
+ export interface CheckResult {
5
+ name: string;
6
+ ok: boolean;
7
+ detail?: string;
8
+ }
9
+ export interface DoctorBundleHint {
10
+ projectRoot: string;
11
+ tool: 'rspack' | 'webpack';
12
+ }
13
+ export interface DoctorContext {
14
+ /** Resolved brookesia_simulator path (config / env / state / bundled). */
15
+ runtimeBinary?: string;
16
+ /** Resolved GUI working directory (config / state). */
17
+ guiProjectDir?: string;
18
+ bundle?: DoctorBundleHint;
19
+ manifestRuntimeType?: AppManifestRuntime['type'];
20
+ }
21
+ export declare function resolveDoctorProfile(requested: DoctorProfile, manifestRuntimeType?: AppManifestRuntime['type'], hasJsBundle?: boolean): DoctorEffectiveProfile;
22
+ export declare function runChecks(ctx: DoctorContext, profile: DoctorEffectiveProfile): Promise<CheckResult[]>;
23
+ //# sourceMappingURL=checks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checks.d.ts","sourceRoot":"","sources":["../src/checks.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAElE,MAAM,MAAM,aAAa,GAAG,WAAW,GAAG,KAAK,GAAG,SAAS,GAAG,YAAY,GAAG,MAAM,CAAC;AAEpF,MAAM,MAAM,sBAAsB,GAAG,OAAO,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;AAEpE,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,QAAQ,GAAG,SAAS,CAAC;CAC5B;AAED,MAAM,WAAW,aAAa;IAC5B,0EAA0E;IAC1E,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,uDAAuD;IACvD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,mBAAmB,CAAC,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC;CAClD;AA0BD,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,aAAa,EACxB,mBAAmB,CAAC,EAAE,kBAAkB,CAAC,MAAM,CAAC,EAChD,WAAW,CAAC,EAAE,OAAO,GACpB,sBAAsB,CAcxB;AAED,wBAAsB,SAAS,CAC7B,GAAG,EAAE,aAAa,EAClB,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,WAAW,EAAE,CAAC,CAoDxB"}
package/dist/checks.js ADDED
@@ -0,0 +1,89 @@
1
+ import { BROOKESIA_SIMULATOR_ENV, RUNTIME_SIMULATOR_ENV } from '@brookesia/shared-utils';
2
+ import fs from 'node:fs';
3
+ import path from 'node:path';
4
+ function fileExecutable(p) {
5
+ try {
6
+ fs.accessSync(p, fs.constants.X_OK);
7
+ return true;
8
+ }
9
+ catch {
10
+ return false;
11
+ }
12
+ }
13
+ function findBinInAncestors(projectRoot, binName) {
14
+ let dir = path.resolve(projectRoot);
15
+ while (true) {
16
+ const candidate = path.join(dir, 'node_modules', '.bin', binName);
17
+ if (fs.existsSync(candidate)) {
18
+ return candidate;
19
+ }
20
+ const parent = path.dirname(dir);
21
+ if (parent === dir) {
22
+ return undefined;
23
+ }
24
+ dir = parent;
25
+ }
26
+ }
27
+ export function resolveDoctorProfile(requested, manifestRuntimeType, hasJsBundle) {
28
+ if (requested !== 'auto') {
29
+ return requested;
30
+ }
31
+ if (manifestRuntimeType === 'JavaScript') {
32
+ return 'js-runtime';
33
+ }
34
+ if (manifestRuntimeType === 'Lua' || manifestRuntimeType === 'Wasm') {
35
+ return 'runtime';
36
+ }
37
+ if (hasJsBundle) {
38
+ return 'js-runtime';
39
+ }
40
+ return 'js-runtime';
41
+ }
42
+ export async function runChecks(ctx, profile) {
43
+ const { runtimeBinary, guiProjectDir, bundle } = ctx;
44
+ const results = [];
45
+ const nodeMajor = Number(process.versions.node.split('.')[0]);
46
+ results.push({
47
+ name: 'node>=20',
48
+ ok: nodeMajor >= 20,
49
+ detail: process.versions.node,
50
+ });
51
+ results.push({
52
+ name: 'bpk-packager',
53
+ ok: true,
54
+ detail: '@brookesia/packager (native .bpk zip + RSA-PSS)',
55
+ });
56
+ if (bundle) {
57
+ const binName = bundle.tool === 'rspack' ? 'rspack' : 'webpack';
58
+ const binPath = findBinInAncestors(bundle.projectRoot, binName);
59
+ const pkgHint = bundle.tool === 'rspack' ? '@rspack/cli' : 'webpack webpack-cli';
60
+ results.push({
61
+ name: `js.bundle (${bundle.tool})`,
62
+ ok: Boolean(binPath),
63
+ detail: binPath ?? `npm i -D ${pkgHint} (in app or esp-brookesia-toolkit root)`,
64
+ });
65
+ }
66
+ if (profile !== 'pack-only') {
67
+ const rtBin = runtimeBinary;
68
+ const rtOk = Boolean(rtBin && fileExecutable(rtBin));
69
+ results.push({
70
+ name: 'brookesia_simulator',
71
+ ok: rtOk,
72
+ detail: rtOk
73
+ ? rtBin
74
+ : `set simulator.binary, ${BROOKESIA_SIMULATOR_ENV} (or ${RUNTIME_SIMULATOR_ENV}), or ~/.brookesia/state.json`,
75
+ });
76
+ }
77
+ if (profile === 'gui') {
78
+ const dirOk = Boolean(guiProjectDir && fs.existsSync(guiProjectDir));
79
+ results.push({
80
+ name: 'gui.projectDir',
81
+ ok: dirOk,
82
+ detail: dirOk
83
+ ? guiProjectDir
84
+ : 'set simulator.gui.projectDir in brookesia.config.js or toolchain install --gui-project-dir',
85
+ });
86
+ }
87
+ return results;
88
+ }
89
+ //# sourceMappingURL=checks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checks.js","sourceRoot":"","sources":["../src/checks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=checks.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checks.test.d.ts","sourceRoot":"","sources":["../src/checks.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,40 @@
1
+ import fs from 'fs-extra';
2
+ import os from 'node:os';
3
+ import path from 'node:path';
4
+ import { describe, expect, it } from 'vitest';
5
+ import { runChecks } from './checks.js';
6
+ describe('doctor checks', () => {
7
+ it('checks toolkit/package-manager dependencies and runtime simulator only', async () => {
8
+ const projectRoot = await fs.mkdtemp(path.join(os.tmpdir(), 'brookesia-doctor-'));
9
+ const results = await runChecks({
10
+ bundle: { projectRoot, tool: 'rspack' },
11
+ }, 'runtime');
12
+ const names = results.map((r) => r.name);
13
+ expect(names).toEqual([
14
+ 'node>=20',
15
+ 'bpk-packager',
16
+ 'js.bundle (rspack)',
17
+ 'brookesia_simulator',
18
+ ]);
19
+ expect(results.find((r) => r.name === 'js.bundle (rspack)')?.ok).toBe(false);
20
+ expect(names).not.toContain('sdk-root');
21
+ expect(names).not.toContain('cmake');
22
+ expect(names).not.toContain('lua5.4 (pkg-config)');
23
+ expect(names).not.toContain('wasmtime-c-api');
24
+ expect(names).not.toContain('python3+LVGLImage deps');
25
+ });
26
+ it('finds js bundle tool from ancestor node_modules', async () => {
27
+ const root = await fs.mkdtemp(path.join(os.tmpdir(), 'brookesia-doctor-'));
28
+ const app = path.join(root, 'my-bundle-app');
29
+ const bin = path.join(root, 'node_modules', '.bin', 'rspack');
30
+ await fs.ensureDir(app);
31
+ await fs.ensureDir(path.dirname(bin));
32
+ await fs.writeFile(bin, '#!/bin/sh\n');
33
+ const results = await runChecks({
34
+ bundle: { projectRoot: app, tool: 'rspack' },
35
+ }, 'runtime');
36
+ expect(results.find((r) => r.name === 'js.bundle (rspack)')?.ok).toBe(true);
37
+ expect(results.find((r) => r.name === 'js.bundle (rspack)')?.detail).toBe(bin);
38
+ });
39
+ });
40
+ //# sourceMappingURL=checks.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checks.test.js","sourceRoot":"","sources":["../src/checks.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { CheckResult, DoctorContext, DoctorEffectiveProfile } from './checks.js';
2
+ export * from './checks.js';
3
+ export declare function runDoctor(ctx: DoctorContext, profile: DoctorEffectiveProfile): Promise<boolean>;
4
+ export declare function formatResults(results: CheckResult[]): string;
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAGtF,cAAc,aAAa,CAAC;AAE5B,wBAAsB,SAAS,CAC7B,GAAG,EAAE,aAAa,EAClB,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,OAAO,CAAC,CAqBlB;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,MAAM,CAE5D"}
package/dist/index.js ADDED
@@ -0,0 +1,25 @@
1
+ import { logError, logSuccess, logWarn } from '@brookesia/shared-utils';
2
+ import { runChecks } from './checks.js';
3
+ export * from './checks.js';
4
+ export async function runDoctor(ctx, profile) {
5
+ const results = await runChecks(ctx, profile);
6
+ let allOk = true;
7
+ for (const r of results) {
8
+ if (r.ok) {
9
+ logSuccess(`${r.name}${r.detail ? ` (${r.detail})` : ''}`);
10
+ }
11
+ else {
12
+ logError(`${r.name} failed${r.detail ? `: ${r.detail}` : ''}`);
13
+ allOk = false;
14
+ }
15
+ }
16
+ if (!allOk) {
17
+ logWarn('Set simulator.binary in brookesia.config.js, export BROOKESIA_SIMULATOR, '
18
+ + 'or run `brookesia toolchain install`.');
19
+ }
20
+ return allOk;
21
+ }
22
+ export function formatResults(results) {
23
+ return results.map((r) => `${r.ok ? '✓' : '✗'} ${r.name}`).join('\n');
24
+ }
25
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAExE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,cAAc,aAAa,CAAC;AAE5B,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,GAAkB,EAClB,OAA+B;IAE/B,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC9C,IAAI,KAAK,GAAG,IAAI,CAAC;IAEjB,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC;YACT,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC7D,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC/D,KAAK,GAAG,KAAK,CAAC;QAChB,CAAC;IACH,CAAC;IAED,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CACL,2EAA2E;cACzE,uCAAuC,CAC1C,CAAC;IACJ,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAsB;IAClD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACxE,CAAC"}
package/package.json ADDED
@@ -0,0 +1,39 @@
1
+ {
2
+ "name": "@brookesia/doctor",
3
+ "version": "0.1.0",
4
+ "description": "Environment checks for ESP-Brookesia toolkit",
5
+ "type": "module",
6
+ "license": "Apache-2.0",
7
+ "main": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "files": [
10
+ "dist"
11
+ ],
12
+ "publishConfig": {
13
+ "access": "public",
14
+ "registry": "https://registry.npmjs.org/"
15
+ },
16
+ "repository": {
17
+ "type": "git",
18
+ "url": "git+https://github.com/espressif/esp-brookesia-toolkit.git",
19
+ "directory": "packages/doctor"
20
+ },
21
+ "exports": {
22
+ ".": {
23
+ "types": "./dist/index.d.ts",
24
+ "import": "./dist/index.js"
25
+ }
26
+ },
27
+ "scripts": {
28
+ "build": "tsc -p tsconfig.json",
29
+ "clean": "rm -rf dist"
30
+ },
31
+ "dependencies": {
32
+ "@brookesia/shared-utils": "0.1.0",
33
+ "execa": "^9.5.2"
34
+ },
35
+ "devDependencies": {
36
+ "@types/node": "^22.13.10",
37
+ "typescript": "^5.7.3"
38
+ }
39
+ }