@@ -12,7 +12,12 @@ const repoRoot = path.resolve(
1212) ;
1313const scriptPath = path . join ( repoRoot , 'scripts/check-build-prereqs.mjs' ) ;
1414
15- function createTestRoot ( { nodeModules = false , mobileWebDist = false , sherpaOnnx = null } = { } ) {
15+ function createTestRoot ( {
16+ nodeModules = false ,
17+ mobileWebDist = false ,
18+ pluginHostDist = false ,
19+ sherpaOnnx = null ,
20+ } = { } ) {
1621 const root = mkdtempSync ( path . join ( tmpdir ( ) , 'bitfun-build-prereqs-' ) ) ;
1722
1823 if ( nodeModules ) {
@@ -25,6 +30,18 @@ function createTestRoot({ nodeModules = false, mobileWebDist = false, sherpaOnnx
2530 writeFileSync ( path . join ( distDir , 'index.html' ) , '<html></html>' ) ;
2631 }
2732
33+ if ( pluginHostDist ) {
34+ const distDir = path . join (
35+ root ,
36+ 'src' ,
37+ 'apps' ,
38+ 'extension-host' ,
39+ 'dist' ,
40+ ) ;
41+ mkdirSync ( distDir , { recursive : true } ) ;
42+ writeFileSync ( path . join ( distDir , 'extension-host.js' ) , '' ) ;
43+ }
44+
2845 if ( sherpaOnnx ) {
2946 for ( const version of sherpaOnnx ) {
3047 const libDir = path . join (
@@ -44,21 +61,36 @@ function createTestRoot({ nodeModules = false, mobileWebDist = false, sherpaOnnx
4461
4562function createFakePnpm ( ) {
4663 const binDir = mkdtempSync ( path . join ( tmpdir ( ) , 'bitfun-fake-pnpm-' ) ) ;
47- const pnpmPath = path . join ( binDir , 'pnpm' ) ;
64+ const fakePnpmPath = path . join ( binDir , 'fake- pnpm.cjs ' ) ;
4865 writeFileSync (
49- pnpmPath ,
50- `#!/usr/bin/env node
66+ fakePnpmPath ,
67+ `
5168const { mkdirSync, writeFileSync } = require('fs');
5269const args = process.argv.slice(2);
5370if (args[0] === 'install') {
5471 mkdirSync('node_modules', { recursive: true });
5572} else if (args[0] === 'run' && args[1] === 'prepare:mobile-web') {
5673 mkdirSync('src/mobile-web/dist', { recursive: true });
5774 writeFileSync('src/mobile-web/dist/index.html', '<html></html>');
75+ } else if (args[0] === 'run' && args[1] === 'plugin-host:prepare') {
76+ mkdirSync('src/apps/extension-host/dist', { recursive: true });
77+ writeFileSync('src/apps/extension-host/dist/extension-host.js', '');
5878}
5979` ,
6080 ) ;
61- chmodSync ( pnpmPath , 0o755 ) ;
81+ if ( process . platform === 'win32' ) {
82+ writeFileSync (
83+ path . join ( binDir , 'pnpm.cmd' ) ,
84+ `@echo off\r\n"${ process . execPath } " "%~dp0fake-pnpm.cjs" %*\r\n` ,
85+ ) ;
86+ } else {
87+ const pnpmPath = path . join ( binDir , 'pnpm' ) ;
88+ writeFileSync (
89+ pnpmPath ,
90+ `#!/usr/bin/env node\nrequire('./fake-pnpm.cjs');\n` ,
91+ ) ;
92+ chmodSync ( pnpmPath , 0o755 ) ;
93+ }
6294 return binDir ;
6395}
6496
@@ -90,20 +122,22 @@ test('passes when all prerequisites are present (including sherpa-onnx prebuilt)
90122 const root = createTestRoot ( {
91123 nodeModules : true ,
92124 mobileWebDist : true ,
125+ pluginHostDist : true ,
93126 sherpaOnnx : [ 'sherpa-onnx-v1.13.4-osx-arm64-static-lib' ] ,
94127 } ) ;
95128 t . after ( ( ) => rmSync ( root , { recursive : true , force : true } ) ) ;
96129
97130 const result = runCheck ( root , { sherpaEnv : '' } ) ;
98131
99- assert . equal ( result . status , 0 ) ;
132+ assert . equal ( result . status , 0 , ` ${ result . stdout } \n ${ result . stderr } ` ) ;
100133 assert . match ( result . stdout , / B u i l d p r e r e q u i s i t e c h e c k p a s s e d / ) ;
101134 assert . doesNotMatch ( result . stderr , / \[ W A R N \] / ) ;
102135} ) ;
103136
104137test ( 'fails when root node_modules is missing' , ( t ) => {
105138 const root = createTestRoot ( {
106139 mobileWebDist : true ,
140+ pluginHostDist : true ,
107141 sherpaOnnx : [ 'sherpa-onnx-v1.13.4-osx-arm64-static-lib' ] ,
108142 } ) ;
109143 t . after ( ( ) => rmSync ( root , { recursive : true , force : true } ) ) ;
@@ -118,6 +152,7 @@ test('fails when root node_modules is missing', (t) => {
118152test ( 'fails when mobile-web dist is missing' , ( t ) => {
119153 const root = createTestRoot ( {
120154 nodeModules : true ,
155+ pluginHostDist : true ,
121156 sherpaOnnx : [ 'sherpa-onnx-v1.13.4-osx-arm64-static-lib' ] ,
122157 } ) ;
123158 t . after ( ( ) => rmSync ( root , { recursive : true , force : true } ) ) ;
@@ -129,8 +164,27 @@ test('fails when mobile-web dist is missing', (t) => {
129164 assert . match ( result . stderr , / F i x : p n p m r u n p r e p a r e : m o b i l e - w e b / ) ;
130165} ) ;
131166
167+ test ( 'fails when OpenCode extension Host dist is missing' , ( t ) => {
168+ const root = createTestRoot ( {
169+ nodeModules : true ,
170+ mobileWebDist : true ,
171+ sherpaOnnx : [ 'sherpa-onnx-v1.13.4-osx-arm64-static-lib' ] ,
172+ } ) ;
173+ t . after ( ( ) => rmSync ( root , { recursive : true , force : true } ) ) ;
174+
175+ const result = runCheck ( root , { sherpaEnv : '' } ) ;
176+
177+ assert . notEqual ( result . status , 0 ) ;
178+ assert . match ( result . stderr , / \[ F A I L \] O p e n C o d e e x t e n s i o n H o s t d i s t / ) ;
179+ assert . match ( result . stderr , / F i x : p n p m r u n p l u g i n - h o s t : p r e p a r e / ) ;
180+ } ) ;
181+
132182test ( 'warns when sherpa-onnx prebuilt dir does not exist (first build)' , ( t ) => {
133- const root = createTestRoot ( { nodeModules : true , mobileWebDist : true } ) ;
183+ const root = createTestRoot ( {
184+ nodeModules : true ,
185+ mobileWebDist : true ,
186+ pluginHostDist : true ,
187+ } ) ;
134188 t . after ( ( ) => rmSync ( root , { recursive : true , force : true } ) ) ;
135189
136190 const result = runCheck ( root , { sherpaEnv : '' } ) ;
@@ -161,7 +215,7 @@ test('--fix runs fix commands, re-verifies, and exits 0 when errors resolved', (
161215
162216 const result = runCheck ( root , { fix : true , extraPath : binDir , sherpaEnv : '' } ) ;
163217
164- assert . equal ( result . status , 0 ) ;
218+ assert . equal ( result . status , 0 , ` ${ result . stdout } \n ${ result . stderr } ` ) ;
165219 assert . match ( result . stdout , / A t t e m p t i n g f i x e s / ) ;
166220 assert . match ( result . stdout , / \$ p n p m i n s t a l l / ) ;
167221 assert . match ( result . stdout , / \$ p n p m r u n p r e p a r e : m o b i l e - w e b / ) ;
0 commit comments