Initial commit.
This commit is contained in:
3
.eslintrc
Normal file
3
.eslintrc
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"extends": ["./node_modules/@roku-cloud-sdk/dev-tools/linter-config/.eslintrc"]
|
||||||
|
}
|
||||||
14
.gitignore
vendored
Normal file
14
.gitignore
vendored
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
.rokurc
|
||||||
|
dist*
|
||||||
|
**/.DS_Store
|
||||||
|
.nyc_output/
|
||||||
|
coverage/
|
||||||
|
node_modules/
|
||||||
|
build/
|
||||||
|
.idea/
|
||||||
|
package-lock.json
|
||||||
|
public/
|
||||||
|
cloud-sdk-modules/
|
||||||
|
roku-dev-config.js
|
||||||
|
app.bin
|
||||||
|
*.iml
|
||||||
2
.npmrc
Normal file
2
.npmrc
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
package-lock=false
|
||||||
|
registry=https://artifactory.tools.roku.com/artifactory/api/npm/roku
|
||||||
15
package.json
Normal file
15
package.json
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
"name": "Banvor",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "Experimental Sokoban using Roku React SDK",
|
||||||
|
"scripts": {
|
||||||
|
"rk": "rk"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@roku-web-cloud-sdk/dev-tools": "*"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"@roku-web-cloud-sdk/tools": "*"
|
||||||
|
},
|
||||||
|
"prettier": "@roku-cloud-sdk/dev-tools/linter-config/.prettierrc.json"
|
||||||
|
}
|
||||||
23
roku-config.js
Normal file
23
roku-config.js
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
module.exports = () => ({
|
||||||
|
app: {
|
||||||
|
entryPoint: "./src/index.jsx",
|
||||||
|
clientEntryPoint: "./src/client-entry-point.mjs",
|
||||||
|
packageEntryPoint: "./src/package/package.mjs",
|
||||||
|
name: "Banvor",
|
||||||
|
developerId: "0",
|
||||||
|
useRealReact: true
|
||||||
|
},
|
||||||
|
publish: {
|
||||||
|
defaultAlias: "qa",
|
||||||
|
defaultV8Alias: "production"
|
||||||
|
},
|
||||||
|
cloudland: {
|
||||||
|
isCloudland: true
|
||||||
|
},
|
||||||
|
developer: {
|
||||||
|
username: "banvor.vostan.org@gmail.com"
|
||||||
|
},
|
||||||
|
package: {
|
||||||
|
defaultOrigin: "https://banvor.vostan.org/roku/banvor/v/1"
|
||||||
|
}
|
||||||
|
});
|
||||||
5
src/app.mjs
Normal file
5
src/app.mjs
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
// Application entry point is called once per application launch (not session)
|
||||||
|
export const appMain = () => {
|
||||||
|
const app = {};
|
||||||
|
return app;
|
||||||
|
};
|
||||||
5
src/client-entry-point.mjs
Normal file
5
src/client-entry-point.mjs
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
export const clientMain = () => ({});
|
||||||
|
|
||||||
|
export const getClientConfigs = () => {
|
||||||
|
return {};
|
||||||
|
};
|
||||||
37
src/config/config.mjs
Normal file
37
src/config/config.mjs
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
/*
|
||||||
|
You can put configuration variables such as endpoints and flags in here
|
||||||
|
|
||||||
|
`common` should include default values
|
||||||
|
the rest of the sections will provide overrides for various alias
|
||||||
|
Alias is passed in as launch the application
|
||||||
|
|
||||||
|
Use key names with dots such as "my.service.endpoint"
|
||||||
|
|
||||||
|
Values should all be strings and co-erced into other types in your program code
|
||||||
|
*/
|
||||||
|
|
||||||
|
export const getConfig = alias => {
|
||||||
|
if (!alias) {
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
const config = {
|
||||||
|
development: () => ({
|
||||||
|
development: "true",
|
||||||
|
env: "development"
|
||||||
|
}),
|
||||||
|
common: () => ({
|
||||||
|
env: "common",
|
||||||
|
"common.value": "true"
|
||||||
|
}),
|
||||||
|
qa: () => ({
|
||||||
|
env: "qa"
|
||||||
|
}),
|
||||||
|
staging: () => ({
|
||||||
|
env: "staging"
|
||||||
|
}),
|
||||||
|
production: () => ({
|
||||||
|
env: "production"
|
||||||
|
})
|
||||||
|
};
|
||||||
|
return config[alias] ? config[alias]() : {};
|
||||||
|
};
|
||||||
BIN
src/img/background.png
Normal file
BIN
src/img/background.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 4.0 MiB |
BIN
src/img/channel-poster.png
Normal file
BIN
src/img/channel-poster.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 56 KiB |
BIN
src/img/logo.png
Normal file
BIN
src/img/logo.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 53 KiB |
35
src/index.jsx
Normal file
35
src/index.jsx
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
import React from "react";
|
||||||
|
import { Scene } from "@roku-web-cloud-sdk/components/scene.jsx";
|
||||||
|
import { Label } from "@roku-web-cloud-sdk/components/label.jsx";
|
||||||
|
import { useConfig, useAsyncEffect } from "@roku-cloud-sdk/roku-hooks";
|
||||||
|
import { getConfig } from "./config/config.mjs";
|
||||||
|
|
||||||
|
import background from "./img/background.png";
|
||||||
|
|
||||||
|
export { appMain } from "./app.mjs";
|
||||||
|
|
||||||
|
const MainScene = ({ app }) => {
|
||||||
|
const config = useConfig({ getConfig });
|
||||||
|
|
||||||
|
/*
|
||||||
|
useAsyncEffect(async fetch => {
|
||||||
|
// Fetch is only available with in useAsyncEffect. Make ajax calls here..
|
||||||
|
}, []);
|
||||||
|
*/
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Scene backgroundUri={background}>
|
||||||
|
<Scene.Logo>
|
||||||
|
<Label style={{ font: "LargeSystemFont" }}>Your App Title</Label>
|
||||||
|
</Scene.Logo>
|
||||||
|
<Scene.Clock />
|
||||||
|
<Scene.Body>Your app goes here!</Scene.Body>
|
||||||
|
<Scene.Options adjacent />
|
||||||
|
</Scene>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
// main entry point is called once per session
|
||||||
|
export const main = ({ app }) => {
|
||||||
|
return <MainScene app={app} />;
|
||||||
|
};
|
||||||
50
src/package/package.mjs
Normal file
50
src/package/package.mjs
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
import splashScreen from "../img/logo.png";
|
||||||
|
import channelPoster from "../img/channel-poster.png";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If you have to create multipackage configuration
|
||||||
|
* getPackageInfo must return object whih has `packages` property
|
||||||
|
* and all packages should be a fields of `packages`
|
||||||
|
* name of field should be a package name usually the same as alias
|
||||||
|
* which used with this package
|
||||||
|
* also `packages` must have `default` field with mandatory fields `splashScreen`
|
||||||
|
* `splashColor` and `screenSaver` if application used as screen saver
|
||||||
|
* also default may contain fields which are common for all packages. All
|
||||||
|
* packages would be extended with these values at build time.
|
||||||
|
*
|
||||||
|
* For example
|
||||||
|
* export const getPackageInfo = () => ({
|
||||||
|
* packages: {
|
||||||
|
* default: {
|
||||||
|
* splashScreen: splashScreen
|
||||||
|
* splashColor: "#000000"
|
||||||
|
* },
|
||||||
|
* qa: {
|
||||||
|
* title: "banvor QA"
|
||||||
|
* minFirmwareVersion: "11.0.0",
|
||||||
|
* ...
|
||||||
|
* },
|
||||||
|
* staging: {
|
||||||
|
* title: "banvor Staging"
|
||||||
|
* minFirmwareVersion: "10.5.0",
|
||||||
|
* ...
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* })
|
||||||
|
*/
|
||||||
|
|
||||||
|
export const getPackageInfo = () => ({
|
||||||
|
title: "Roku CloudSDK App: Banvor",
|
||||||
|
splashScreen,
|
||||||
|
channelPoster, // maps to mm_icon_focus_XX in manifest
|
||||||
|
majorVersion: 1, // note minor version and build version will be managed by tooling
|
||||||
|
splashColor: "#000000",
|
||||||
|
|
||||||
|
bootParams: {
|
||||||
|
bootSplashColor: [0, 0, 0],
|
||||||
|
bootSplashImage: splashScreen
|
||||||
|
},
|
||||||
|
minFirmwareVersion: "13.0.0",
|
||||||
|
useNdkLib: true,
|
||||||
|
useCloudland: true
|
||||||
|
});
|
||||||
23
tsconfig.json
Normal file
23
tsconfig.json
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"target": "es6",
|
||||||
|
"jsx": "react",
|
||||||
|
"module": "commonjs",
|
||||||
|
"rootDir": "./",
|
||||||
|
"moduleResolution": "node",
|
||||||
|
"baseUrl": "./",
|
||||||
|
"paths": {
|
||||||
|
"@roku/cloud-sdk-components": ["node_modules/@roku-web-cloud-sdk/components"],
|
||||||
|
"flatbuffers": ["node_modules/flatbuffers/ts/flatbuffers.ts"]
|
||||||
|
},
|
||||||
|
"typeRoots": ["node_modules/@types"],
|
||||||
|
"allowJs": true,
|
||||||
|
"noEmit": true,
|
||||||
|
"isolatedModules": false,
|
||||||
|
"esModuleInterop": true,
|
||||||
|
"forceConsistentCasingInFileNames": true,
|
||||||
|
"strict": true,
|
||||||
|
"skipLibCheck": false
|
||||||
|
},
|
||||||
|
"include": ["src", "node_modules/@roku-web-cloud-sdk", "cloud-sdk-modules"]
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user