@tantawowa/hosanna-tools 3.14.1 → 3.15.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -2
- package/dist/build-info.json +3 -3
- package/dist/cli.js +40 -7
- package/dist/cli.js.map +1 -1
- package/dist/lib/app-config-resolver.js +2 -2
- package/dist/lib/app-config-resolver.js.map +1 -1
- package/dist/native/native-project.d.ts +5 -2
- package/dist/native/native-project.js +215 -24
- package/dist/native/native-project.js.map +1 -1
- package/dist/native/templates/android/AndroidAutoManifest.xml +30 -0
- package/dist/native/templates/android/WearOsManifest.xml +31 -0
- package/dist/native/templates/android/app-build.gradle.kts +58 -12
- package/dist/native/templates/android/automotive_app_desc.xml +4 -0
- package/dist/native/templates/android/build.gradle.kts +3 -2
- package/dist/native/templates/android/gradle-wrapper.properties +1 -1
- package/dist/native/templates/android/gradle.properties +1 -0
- package/dist/native/templates/apple/HosannaCarPlay.entitlements +8 -0
- package/dist/native/templates/apple/HosannaIosApp.swift +7 -1
- package/dist/native/templates/apple/HosannaWatchApp.swift +10 -0
- package/dist/native/templates/apple/Info.carplay.plist +43 -0
- package/dist/native/templates/apple/Info.watchos.plist +26 -0
- package/dist/native/templates/apple/project.yml +8 -0
- package/dist/run/android-auto.d.ts +11 -0
- package/dist/run/android-auto.js +121 -0
- package/dist/run/android-auto.js.map +1 -0
- package/dist/run/android-emulator.d.ts +14 -1
- package/dist/run/android-emulator.js +303 -51
- package/dist/run/android-emulator.js.map +1 -1
- package/dist/run/apple-watch.d.ts +49 -0
- package/dist/run/apple-watch.js +389 -0
- package/dist/run/apple-watch.js.map +1 -0
- package/dist/run/carplay.d.ts +15 -0
- package/dist/run/carplay.js +68 -0
- package/dist/run/carplay.js.map +1 -0
- package/dist/run/destination-picker.js +25 -5
- package/dist/run/destination-picker.js.map +1 -1
- package/dist/run/executor.d.ts +2 -0
- package/dist/run/executor.js +27 -14
- package/dist/run/executor.js.map +1 -1
- package/dist/run/hsconfig-static-assets.d.ts +11 -0
- package/dist/run/hsconfig-static-assets.js +75 -0
- package/dist/run/hsconfig-static-assets.js.map +1 -1
- package/dist/run/ios-device.d.ts +1 -0
- package/dist/run/ios-device.js +2 -2
- package/dist/run/ios-device.js.map +1 -1
- package/dist/run/ios-simulator.d.ts +3 -1
- package/dist/run/ios-simulator.js +4 -4
- package/dist/run/ios-simulator.js.map +1 -1
- package/dist/run/native-build.d.ts +2 -2
- package/dist/run/native-build.js +15 -3
- package/dist/run/native-build.js.map +1 -1
- package/dist/run/planner.js +291 -13
- package/dist/run/planner.js.map +1 -1
- package/dist/run/run-controller.d.ts +10 -0
- package/dist/run/run-controller.js +442 -42
- package/dist/run/run-controller.js.map +1 -1
- package/dist/run/targets.d.ts +32 -0
- package/dist/run/targets.js +106 -6
- package/dist/run/targets.js.map +1 -1
- package/dist/run/types.d.ts +17 -2
- package/dist/run/types.js +24 -3
- package/dist/run/types.js.map +1 -1
- package/dist/support-tools/android-dev-server.d.ts +1 -1
- package/dist/support-tools/android-dev-server.js +8 -6
- package/dist/support-tools/android-dev-server.js.map +1 -1
- package/dist/support-tools/android-metro-build.d.ts +7 -0
- package/dist/support-tools/android-metro-build.js +36 -2
- package/dist/support-tools/android-metro-build.js.map +1 -1
- package/dist/support-tools/apple-bundler.js +62 -4
- package/dist/support-tools/apple-bundler.js.map +1 -1
- package/dist/support-tools/build-config-resolver.js +4 -2
- package/dist/support-tools/build-config-resolver.js.map +1 -1
- package/dist/support-tools/publish-roku.d.ts +11 -0
- package/dist/support-tools/publish-roku.js +51 -0
- package/dist/support-tools/publish-roku.js.map +1 -1
- package/dist/updater/framework-installer.js +7 -0
- package/dist/updater/framework-installer.js.map +1 -1
- package/dist/updater/license-manager.js +7 -0
- package/dist/updater/license-manager.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -303,9 +303,19 @@ Bare `hst run` in an interactive terminal discovers runnable web previews, vendo
|
|
|
303
303
|
### Roku Commands (`roku:*`) - Roku Deployment & Packaging
|
|
304
304
|
- `roku:run` - Deploy a Roku app to a device (supports .zip file or folder)
|
|
305
305
|
- `roku:command` - Send a Hosanna command to an installed channel through Roku ECP
|
|
306
|
-
- `roku:package` - Package and sign a Roku channel using roku-deploy
|
|
306
|
+
- `roku:package` - Package and sign a Roku channel using roku-deploy. Source zips over 4 MiB warn by default; signed packages over 4 MiB fail.
|
|
307
307
|
- `roku:map-stack` - Resolve Roku `.brs` stack traces, compile errors, and crash snippets to original TypeScript locations using `.brs.map` files
|
|
308
308
|
|
|
309
|
+
The package-size limit defaults to Roku's 4 MiB certification limit. Set a different
|
|
310
|
+
limit with `--max-pkg-size-mb`, or explicitly allow an oversized signed package with
|
|
311
|
+
`--ignorePkgTooBig` (`--ignore-pkg-too-big` is equivalent). Oversized source zips
|
|
312
|
+
remain warnings because the signed `.pkg` is the release artifact Roku certifies.
|
|
313
|
+
|
|
314
|
+
```bash
|
|
315
|
+
hst roku:package --max-pkg-size-mb 4
|
|
316
|
+
hst roku:package --ignorePkgTooBig
|
|
317
|
+
```
|
|
318
|
+
|
|
309
319
|
Send a command to the sideloaded `dev` channel (the default app ID):
|
|
310
320
|
|
|
311
321
|
```bash
|
|
@@ -585,7 +595,7 @@ hst generate:all --watch # Generate code with file watching
|
|
|
585
595
|
hst dev:start # Lower-level dev server task used by hst run
|
|
586
596
|
|
|
587
597
|
# Building and packaging
|
|
588
|
-
hst roku:package --ip 192.168.1.10 # Package and deploy
|
|
598
|
+
hst roku:package --ip 192.168.1.10 # Package and deploy; signed .pkg must be <= 4 MiB
|
|
589
599
|
hst generate:clean # Clean generated files
|
|
590
600
|
|
|
591
601
|
# Setup and installation
|
package/dist/build-info.json
CHANGED
package/dist/cli.js
CHANGED
|
@@ -234,7 +234,15 @@ function rememberedExplicitDestination(plan, hasExplicitDestination) {
|
|
|
234
234
|
return undefined;
|
|
235
235
|
return Object.assign({ platform: plan.resolved.platform, target }, (plan.resolved.deviceSelector ? { device: plan.resolved.deviceSelector } : {}));
|
|
236
236
|
}
|
|
237
|
-
const NATIVE_PLATFORM_CHOICES = [
|
|
237
|
+
const NATIVE_PLATFORM_CHOICES = [
|
|
238
|
+
'apple', 'ios', 'apple-tv', 'carplay', 'apple-watch', 'watchos',
|
|
239
|
+
'android', 'android-tv', 'android-auto', 'wear-os', 'wearos', 'android-watch',
|
|
240
|
+
'cars', 'watches', 'all',
|
|
241
|
+
];
|
|
242
|
+
const RUN_PLATFORM_CHOICES = [
|
|
243
|
+
'web', 'roku', 'ios', 'apple-tv', 'carplay', 'apple-watch', 'watchos',
|
|
244
|
+
'android', 'android-tv', 'android-auto', 'wear-os', 'wearos', 'android-watch',
|
|
245
|
+
];
|
|
238
246
|
function nativeInputFromArgs(args) {
|
|
239
247
|
return {
|
|
240
248
|
cwd: process.cwd(),
|
|
@@ -244,8 +252,11 @@ function nativeInputFromArgs(args) {
|
|
|
244
252
|
bundleId: stringArg(args['bundle-id']),
|
|
245
253
|
iosBundleId: stringArg(args['ios-bundle-id']),
|
|
246
254
|
appleTvBundleId: stringArg(args['apple-tv-bundle-id']),
|
|
255
|
+
appleWatchBundleId: stringArg(args['apple-watch-bundle-id']),
|
|
247
256
|
androidPackage: stringArg(args['android-package']),
|
|
248
257
|
androidTvPackage: stringArg(args['android-tv-package']),
|
|
258
|
+
androidAutoPackage: stringArg(args['android-auto-package']),
|
|
259
|
+
wearOsPackage: stringArg(args['wear-os-package']),
|
|
249
260
|
teamId: stringArg(args['team-id']),
|
|
250
261
|
versionName: stringArg(args['version-name']),
|
|
251
262
|
versionCode: numberOrStringArg(args['version-code']),
|
|
@@ -656,8 +667,11 @@ catch (err) {
|
|
|
656
667
|
.option('bundle-id', { type: 'string', describe: 'Base bundle/package identifier' })
|
|
657
668
|
.option('ios-bundle-id', { type: 'string', describe: 'iOS bundle identifier' })
|
|
658
669
|
.option('apple-tv-bundle-id', { type: 'string', describe: 'tvOS bundle identifier' })
|
|
670
|
+
.option('apple-watch-bundle-id', { type: 'string', describe: 'watchOS bundle identifier' })
|
|
659
671
|
.option('android-package', { type: 'string', describe: 'Android namespace and phone package base' })
|
|
660
672
|
.option('android-tv-package', { type: 'string', describe: 'Android TV application id' })
|
|
673
|
+
.option('android-auto-package', { type: 'string', describe: 'Android Auto application id' })
|
|
674
|
+
.option('wear-os-package', { type: 'string', describe: 'Wear OS application id' })
|
|
661
675
|
.option('team-id', { type: 'string', describe: 'Apple development team id for generated xcconfig files' })
|
|
662
676
|
.option('version-name', { type: 'string', describe: 'Native marketing/versionName value' })
|
|
663
677
|
.option('version-code', { type: 'number', describe: 'Native build/versionCode value' })
|
|
@@ -667,6 +681,7 @@ catch (err) {
|
|
|
667
681
|
.option('format', { type: 'string', choices: ['text', 'json'], default: 'text', describe: 'Output format' })
|
|
668
682
|
.option('non-interactive', { type: 'boolean', default: false, describe: 'Fail instead of prompting when a decision is needed' })
|
|
669
683
|
.example('$0 native:init all --display-name "Hope Stream"', 'Initialize Apple and Android app-owned native projects')
|
|
684
|
+
.example('$0 native:init watches --display-name "Hope Stream"', 'Initialize Apple Watch and Wear OS native targets')
|
|
670
685
|
.example('$0 native:init android-tv --dry-run --format json', 'Preview Android TV native setup as JSON'), async (args) => {
|
|
671
686
|
try {
|
|
672
687
|
const mod = await Promise.resolve().then(() => __importStar(require('./native/native-project.js')));
|
|
@@ -700,8 +715,11 @@ catch (err) {
|
|
|
700
715
|
.option('bundle-id', { type: 'string', describe: 'Base bundle/package identifier' })
|
|
701
716
|
.option('ios-bundle-id', { type: 'string', describe: 'iOS bundle identifier' })
|
|
702
717
|
.option('apple-tv-bundle-id', { type: 'string', describe: 'tvOS bundle identifier' })
|
|
718
|
+
.option('apple-watch-bundle-id', { type: 'string', describe: 'watchOS bundle identifier' })
|
|
703
719
|
.option('android-package', { type: 'string', describe: 'Android namespace and phone package base' })
|
|
704
720
|
.option('android-tv-package', { type: 'string', describe: 'Android TV application id' })
|
|
721
|
+
.option('android-auto-package', { type: 'string', describe: 'Android Auto application id' })
|
|
722
|
+
.option('wear-os-package', { type: 'string', describe: 'Wear OS application id' })
|
|
705
723
|
.option('team-id', { type: 'string', describe: 'Apple development team id for generated xcconfig files' })
|
|
706
724
|
.option('version-name', { type: 'string', describe: 'Native marketing/versionName value' })
|
|
707
725
|
.option('version-code', { type: 'number', describe: 'Native build/versionCode value' })
|
|
@@ -731,8 +749,11 @@ catch (err) {
|
|
|
731
749
|
.option('bundle-id', { type: 'string', describe: 'Base bundle/package identifier' })
|
|
732
750
|
.option('ios-bundle-id', { type: 'string', describe: 'iOS bundle identifier' })
|
|
733
751
|
.option('apple-tv-bundle-id', { type: 'string', describe: 'tvOS bundle identifier' })
|
|
752
|
+
.option('apple-watch-bundle-id', { type: 'string', describe: 'watchOS bundle identifier' })
|
|
734
753
|
.option('android-package', { type: 'string', describe: 'Android namespace and phone package base' })
|
|
735
754
|
.option('android-tv-package', { type: 'string', describe: 'Android TV application id' })
|
|
755
|
+
.option('android-auto-package', { type: 'string', describe: 'Android Auto application id' })
|
|
756
|
+
.option('wear-os-package', { type: 'string', describe: 'Wear OS application id' })
|
|
736
757
|
.option('team-id', { type: 'string', describe: 'Apple development team id for generated xcconfig files' })
|
|
737
758
|
.option('version-name', { type: 'string', describe: 'Native marketing/versionName value' })
|
|
738
759
|
.option('version-code', { type: 'number', describe: 'Native build/versionCode value' })
|
|
@@ -766,6 +787,8 @@ catch (err) {
|
|
|
766
787
|
.option('rootDir', { type: 'string', describe: 'Roku project root (default: ./platforms/roku/src)' })
|
|
767
788
|
.option('outDir', { type: 'string', describe: 'Output directory (default: ./build)' })
|
|
768
789
|
.option('prebuild', { type: 'string', describe: 'Shell command to run before packaging (e.g. "npm run transpile:prod")' })
|
|
790
|
+
.option('max-pkg-size-mb', { alias: 'maxPkgSizeMb', type: 'number', default: 4, describe: 'Maximum signed Roku .pkg size in MiB (default: Roku 4 MiB certification limit)' })
|
|
791
|
+
.option('ignore-pkg-too-big', { alias: 'ignorePkgTooBig', type: 'boolean', default: false, describe: 'Warn instead of failing when the signed .pkg exceeds the size limit' })
|
|
769
792
|
.option('quiet', { type: 'boolean', default: false, describe: 'Reduce output; print only errors and success' })
|
|
770
793
|
.example('$0 roku:package --ip 192.168.1.10 --installer-password secret --dev-id ABC --signing-password sss --key-pkg mykey.pkg', 'Package and sign with explicit args')
|
|
771
794
|
.example('$0 roku:package --key-pkg-base64 <base64-string>', 'Package using base64-encoded key package')
|
|
@@ -787,6 +810,8 @@ catch (err) {
|
|
|
787
810
|
rootDir: args.rootDir,
|
|
788
811
|
outDir: args.outDir,
|
|
789
812
|
prebuild: args.prebuild,
|
|
813
|
+
maxPkgSizeMb: args['max-pkg-size-mb'],
|
|
814
|
+
ignorePkgTooBig: Boolean(args['ignore-pkg-too-big']),
|
|
790
815
|
quiet: Boolean(args.quiet),
|
|
791
816
|
dotenv: true,
|
|
792
817
|
});
|
|
@@ -1779,12 +1804,12 @@ catch (err) {
|
|
|
1779
1804
|
.command('target:list [platform]', 'List run targets discovered by hst, including web emulators, sims, and physical devices', yargs => yargs
|
|
1780
1805
|
.positional('platform', {
|
|
1781
1806
|
type: 'string',
|
|
1782
|
-
choices:
|
|
1807
|
+
choices: RUN_PLATFORM_CHOICES,
|
|
1783
1808
|
describe: 'Filter by launch platform',
|
|
1784
1809
|
})
|
|
1785
1810
|
.option('platform', {
|
|
1786
1811
|
type: 'string',
|
|
1787
|
-
choices:
|
|
1812
|
+
choices: RUN_PLATFORM_CHOICES,
|
|
1788
1813
|
describe: 'Filter by launch platform',
|
|
1789
1814
|
})
|
|
1790
1815
|
.option('target', {
|
|
@@ -1794,7 +1819,7 @@ catch (err) {
|
|
|
1794
1819
|
})
|
|
1795
1820
|
.option('form-factor', {
|
|
1796
1821
|
type: 'string',
|
|
1797
|
-
choices: ['desktop', 'mobile', 'tablet', 'tv'],
|
|
1822
|
+
choices: ['desktop', 'mobile', 'tablet', 'tv', 'car', 'watch'],
|
|
1798
1823
|
describe: 'Filter by form factor for broad agent inventory queries',
|
|
1799
1824
|
})
|
|
1800
1825
|
.option('json', {
|
|
@@ -1816,6 +1841,8 @@ catch (err) {
|
|
|
1816
1841
|
.example('$0 target:list --platform android --target device --json', 'List physical Android device targets as JSON')
|
|
1817
1842
|
.example('$0 target:list --platform android-tv --target sim --json', 'List Android TV emulator targets as JSON')
|
|
1818
1843
|
.example('$0 target:list --platform apple-tv --target sim --json', 'List Apple TV simulator targets as JSON')
|
|
1844
|
+
.example('$0 target:list --platform apple-watch --target sim --json', 'List Apple Watch simulator targets as JSON')
|
|
1845
|
+
.example('$0 target:list --platform wear-os --target sim --json', 'List Wear OS emulator targets as JSON')
|
|
1819
1846
|
.example('$0 target:list --form-factor tv --json', 'List TV-class targets as JSON'), async (args) => {
|
|
1820
1847
|
try {
|
|
1821
1848
|
const mod = await Promise.resolve().then(() => __importStar(require('./run/targets.js')));
|
|
@@ -1859,7 +1886,7 @@ catch (err) {
|
|
|
1859
1886
|
})
|
|
1860
1887
|
.option('platform', {
|
|
1861
1888
|
type: 'string',
|
|
1862
|
-
choices:
|
|
1889
|
+
choices: RUN_PLATFORM_CHOICES,
|
|
1863
1890
|
describe: 'Build platform.',
|
|
1864
1891
|
})
|
|
1865
1892
|
.option('env', {
|
|
@@ -1906,10 +1933,12 @@ catch (err) {
|
|
|
1906
1933
|
.example('$0 build roku dev device', 'Build the dev Roku output without deploying or streaming logs')
|
|
1907
1934
|
.example('$0 build roku prod device --hsc-project platforms/hsconfig-roku.prod.json', 'Build Roku with an explicit HSC project file')
|
|
1908
1935
|
.example('$0 build ios dev sim --device "iPhone 17 Pro"', 'Build an iOS simulator target without install, launch, or logs')
|
|
1936
|
+
.example('$0 build apple-watch dev sim --device "Apple Watch Series 11 (46mm)"', 'Build the paired Apple Watch simulator target')
|
|
1937
|
+
.example('$0 build wear-os dev sim --device "Wear_OS_Large_Round"', 'Build the Wear OS emulator target')
|
|
1909
1938
|
.example('$0 build web dev emulator', 'Resolve web runtime build config without opening a browser'), async (args) => {
|
|
1910
1939
|
await runRunPlanCommand('build', args);
|
|
1911
1940
|
})
|
|
1912
|
-
.command('run [platform] [env] [target] [deviceSelector]', 'Launch a Hosanna app on a platform target
|
|
1941
|
+
.command('run [platform] [env] [target] [deviceSelector]', 'Launch a Hosanna app on a platform target, including car and watch surfaces', yargs => yargs
|
|
1913
1942
|
.parserConfiguration({ 'boolean-negation': false, 'populate--': true })
|
|
1914
1943
|
.positional('platform', {
|
|
1915
1944
|
type: 'string',
|
|
@@ -1929,7 +1958,7 @@ catch (err) {
|
|
|
1929
1958
|
})
|
|
1930
1959
|
.option('platform', {
|
|
1931
1960
|
type: 'string',
|
|
1932
|
-
choices:
|
|
1961
|
+
choices: RUN_PLATFORM_CHOICES,
|
|
1933
1962
|
describe: 'Launch platform.',
|
|
1934
1963
|
})
|
|
1935
1964
|
.option('env', {
|
|
@@ -2003,6 +2032,10 @@ catch (err) {
|
|
|
2003
2032
|
.example('$0 run --platform android --target device --device "RF8M62694QT" --no-logs', 'Build, install, and launch on a physical Android device')
|
|
2004
2033
|
.example('$0 run --platform android-tv --target sim --device "Television_1080p" --no-logs', 'Build, install, and launch on an Android TV emulator')
|
|
2005
2034
|
.example('$0 run --platform apple-tv --target sim --device "Apple TV 4K"', 'Build, install, and launch on an Apple TV simulator')
|
|
2035
|
+
.example('$0 run --platform carplay --target sim --device "iPhone 17 Pro"', 'Launch the iPhone host and open the CarPlay Simulator display')
|
|
2036
|
+
.example('$0 run --platform android-auto --target sim --device "Pixel_8"', 'Launch Android Auto through the Desktop Head Unit')
|
|
2037
|
+
.example('$0 run --platform apple-watch --target sim --device "Apple Watch Series 11 (46mm)"', 'Build and launch through the paired Apple Watch simulator')
|
|
2038
|
+
.example('$0 run --platform wear-os --target sim --device "Wear_OS_Large_Round"', 'Build, install, and launch on a Wear OS emulator')
|
|
2006
2039
|
.example('$0 run --platform roku --target device --device "living room"', 'Build, deploy, launch, and stream logs on a Roku device')
|
|
2007
2040
|
.example('$0 run roku dev device --app criterion', 'Run a configured monorepo app/flavor')
|
|
2008
2041
|
.example('$0 run roku prod device --hsc-project platforms/hsconfig.criterion.prod.json', 'Override the Roku HSC project file'), async (args) => {
|