@table-js/platform 0.0.4 → 0.0.5

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/builder.ts","../src/adapters/tizen.ts","../src/adapters/webos.ts","../src/adapters/android.ts"],"sourcesContent":["import { build as viteBuild } from 'vite'\nimport type { BuildOptions, Platform, PlatformAdapter } from './types'\nimport { TizenAdapter } from './adapters/tizen'\nimport { WebOSAdapter } from './adapters/webos'\nimport { AndroidAdapter } from './adapters/android'\n\nexport async function build(platform: Platform, options: Partial<BuildOptions> = {}) {\n const opts: BuildOptions = {\n platform,\n outDir: options.outDir || 'dist',\n minify: options.minify ?? true,\n sourcemap: options.sourcemap ?? false,\n }\n\n if (platform === 'all') {\n await Promise.all([\n buildPlatform('tizen', opts),\n buildPlatform('webos', opts),\n buildPlatform('android', opts),\n ])\n return\n }\n\n await buildPlatform(platform, opts)\n}\n\nasync function buildPlatform(platform: Platform, options: BuildOptions) {\n const adapter = getAdapter(platform)\n\n await viteBuild({\n build: {\n outDir: `${options.outDir}/${platform}`,\n minify: options.minify,\n sourcemap: options.sourcemap,\n emptyOutDir: true,\n },\n define: {\n __TABLE_PLATFORM__: JSON.stringify(platform),\n },\n })\n\n await adapter.build(options)\n\n const packagePath = await adapter.package(`${options.outDir}/${platform}`)\n console.log(`✓ ${adapter.name} package created: ${packagePath}`)\n}\n\nfunction getAdapter(platform: Platform): PlatformAdapter {\n switch (platform) {\n case 'tizen':\n return new TizenAdapter()\n case 'webos':\n return new WebOSAdapter()\n case 'android':\n return new AndroidAdapter()\n default:\n throw new Error(`Unknown platform: ${platform}`)\n }\n}\n","import path from 'path'\nimport fs from 'fs-extra'\nimport archiver from 'archiver'\nimport { createWriteStream } from 'fs'\nimport type { BuildOptions, PlatformAdapter, ManifestBase } from '../types'\n\nexport class TizenAdapter implements PlatformAdapter {\n name = 'Tizen (Samsung)'\n\n async build(options: BuildOptions): Promise<void> {\n const distDir = `${options.outDir}/tizen`\n await this.createConfig(distDir)\n }\n\n async package(distDir: string): Promise<string> {\n const outputPath = path.join(distDir, '..', 'app.wgt')\n\n await new Promise<void>((resolve, reject) => {\n const output = createWriteStream(outputPath)\n const archive = archiver('zip', { zlib: { level: 9 } })\n\n output.on('close', () => resolve())\n archive.on('error', reject)\n\n archive.pipe(output)\n archive.directory(distDir, false)\n archive.finalize()\n })\n\n return outputPath\n }\n\n private async createConfig(distDir: string) {\n const pkg = await this.readPackageJson()\n\n const config = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<widget xmlns=\"http://www.w3.org/ns/widgets\" \n xmlns:tizen=\"http://tizen.org/ns/widgets\"\n id=\"${pkg.id || 'com.example.app'}\"\n version=\"${pkg.version}\"\n viewmodes=\"maximized\">\n <tizen:application id=\"${pkg.id || 'com.example.app'}.App\" \n package=\"${pkg.id || 'com.example.app'}\"\n required_version=\"6.0\"/>\n <content src=\"index.html\"/>\n <feature name=\"http://tizen.org/feature/screen.size.all\"/>\n <icon src=\"icon.png\"/>\n <name>${pkg.name}</name>\n <tizen:profile name=\"tv\"/>\n <tizen:setting screen-orientation=\"landscape\" \n context-menu=\"disable\" \n background-support=\"disable\" \n encryption=\"disable\" \n install-location=\"auto\"/>\n</widget>`\n\n await fs.writeFile(path.join(distDir, 'config.xml'), config)\n }\n\n private async readPackageJson(): Promise<ManifestBase> {\n try {\n const pkg = await fs.readJson('package.json')\n return {\n id: pkg.tizenAppId || pkg.name,\n name: pkg.name,\n version: pkg.version,\n description: pkg.description,\n }\n } catch {\n return {\n id: 'com.example.app',\n name: 'Table App',\n version: '1.0.0',\n }\n }\n }\n}\n","import path from 'path'\nimport fs from 'fs-extra'\nimport archiver from 'archiver'\nimport { createWriteStream } from 'fs'\nimport type { BuildOptions, PlatformAdapter, ManifestBase } from '../types'\n\nexport class WebOSAdapter implements PlatformAdapter {\n name = 'webOS (LG)'\n\n async build(options: BuildOptions): Promise<void> {\n const distDir = `${options.outDir}/webos`\n await this.createAppInfo(distDir)\n }\n\n async package(distDir: string): Promise<string> {\n const outputPath = path.join(distDir, '..', 'app.ipk')\n\n await new Promise<void>((resolve, reject) => {\n const output = createWriteStream(outputPath)\n const archive = archiver('tar', { gzip: true })\n\n output.on('close', () => resolve())\n archive.on('error', reject)\n\n archive.pipe(output)\n archive.directory(distDir, false)\n archive.finalize()\n })\n\n return outputPath\n }\n\n private async createAppInfo(distDir: string) {\n const pkg = await this.readPackageJson()\n\n const appInfo = {\n id: pkg.id || 'com.example.app',\n version: pkg.version,\n vendor: 'Table.js',\n type: 'web',\n main: 'index.html',\n title: pkg.name,\n icon: 'icon.png',\n largeIcon: 'icon.png',\n bgImage: 'splash.png',\n resolution: '1920x1080',\n disallowScrollingInMainWindow: true,\n }\n\n await fs.writeJson(path.join(distDir, 'appinfo.json'), appInfo, { spaces: 2 })\n }\n\n private async readPackageJson(): Promise<ManifestBase> {\n try {\n const pkg = await fs.readJson('package.json')\n return {\n id: pkg.webosAppId || pkg.name,\n name: pkg.name,\n version: pkg.version,\n description: pkg.description,\n }\n } catch {\n return {\n id: 'com.example.app',\n name: 'Table App',\n version: '1.0.0',\n }\n }\n }\n}\n","import path from 'path'\nimport fs from 'fs-extra'\nimport { execa } from 'execa'\nimport type { BuildOptions, PlatformAdapter, ManifestBase } from '../types'\n\nexport class AndroidAdapter implements PlatformAdapter {\n name = 'Android TV'\n\n async build(options: BuildOptions): Promise<void> {\n const distDir = `${options.outDir}/android`\n await this.createWebViewProject(distDir)\n }\n\n async package(distDir: string): Promise<string> {\n const projectDir = path.join(distDir, 'android-project')\n\n try {\n await execa('./gradlew', ['assembleRelease'], {\n cwd: projectDir,\n stdio: 'inherit',\n })\n\n const apkPath = path.join(projectDir, 'app/build/outputs/apk/release/app-release.apk')\n\n const outputPath = path.join(distDir, '..', 'app.apk')\n await fs.copy(apkPath, outputPath)\n\n return outputPath\n } catch (error) {\n throw new Error('Android build failed. Make sure Android SDK is installed.')\n }\n }\n\n private async createWebViewProject(distDir: string) {\n const pkg = await this.readPackageJson()\n const projectDir = path.join(distDir, 'android-project')\n\n await fs.ensureDir(projectDir)\n await fs.copy(distDir, path.join(projectDir, 'app/src/main/assets/www'))\n\n await this.createManifest(projectDir, pkg)\n await this.createGradleFiles(projectDir, pkg)\n await this.createMainActivity(projectDir, pkg)\n }\n\n private async createManifest(projectDir: string, pkg: ManifestBase) {\n const manifest = `<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n package=\"${pkg.id || 'com.example.app'}\">\n\n <uses-permission android:name=\"android.permission.INTERNET\" />\n <uses-feature android:name=\"android.software.leanback\" android:required=\"true\" />\n <uses-feature android:name=\"android.hardware.touchscreen\" android:required=\"false\" />\n\n <application\n android:allowBackup=\"true\"\n android:icon=\"@mipmap/ic_launcher\"\n android:label=\"${pkg.name}\"\n android:banner=\"@drawable/banner\"\n android:theme=\"@style/Theme.Leanback\">\n \n <activity\n android:name=\".MainActivity\"\n android:exported=\"true\"\n android:screenOrientation=\"landscape\">\n <intent-filter>\n <action android:name=\"android.intent.action.MAIN\" />\n <category android:name=\"android.intent.category.LEANBACK_LAUNCHER\" />\n </intent-filter>\n </activity>\n </application>\n</manifest>`\n\n const manifestPath = path.join(projectDir, 'app/src/main/AndroidManifest.xml')\n await fs.ensureDir(path.dirname(manifestPath))\n await fs.writeFile(manifestPath, manifest)\n }\n\n private async createGradleFiles(projectDir: string, pkg: ManifestBase) {\n const buildGradle = `plugins {\n id 'com.android.application'\n}\n\nandroid {\n namespace '${pkg.id || 'com.example.app'}'\n compileSdk 34\n\n defaultConfig {\n applicationId \"${pkg.id || 'com.example.app'}\"\n minSdk 21\n targetSdk 34\n versionCode 1\n versionName \"${pkg.version}\"\n }\n\n buildTypes {\n release {\n minifyEnabled true\n proguardFiles getDefaultProguardFile('proguard-android-optimize.txt')\n }\n }\n}\n\ndependencies {\n implementation 'androidx.leanback:leanback:1.0.0'\n}`\n\n await fs.writeFile(path.join(projectDir, 'app/build.gradle'), buildGradle)\n }\n\n private async createMainActivity(projectDir: string, pkg: ManifestBase) {\n const packageName = pkg.id || 'com.example.app'\n const activity = `package ${packageName};\n\nimport android.app.Activity;\nimport android.os.Bundle;\nimport android.webkit.WebView;\nimport android.webkit.WebSettings;\n\npublic class MainActivity extends Activity {\n private WebView webView;\n\n @Override\n protected void onCreate(Bundle savedInstanceState) {\n super.onCreate(savedInstanceState);\n \n webView = new WebView(this);\n setContentView(webView);\n \n WebSettings settings = webView.getSettings();\n settings.setJavaScriptEnabled(true);\n settings.setDomStorageEnabled(true);\n settings.setAllowFileAccess(true);\n \n webView.loadUrl(\"file:///android_asset/www/index.html\");\n }\n}`\n\n const activityPath = path.join(\n projectDir,\n `app/src/main/java/${packageName.replace(/\\./g, '/')}/MainActivity.java`,\n )\n await fs.ensureDir(path.dirname(activityPath))\n await fs.writeFile(activityPath, activity)\n }\n\n private async readPackageJson(): Promise<ManifestBase> {\n try {\n const pkg = await fs.readJson('package.json')\n return {\n id: pkg.androidAppId || pkg.name.replace(/[^a-z0-9]/gi, '.').toLowerCase(),\n name: pkg.name,\n version: pkg.version,\n description: pkg.description,\n }\n } catch {\n return {\n id: 'com.example.app',\n name: 'Table App',\n version: '1.0.0',\n }\n }\n }\n}\n"],"mappings":";AAAA,SAAS,SAAS,iBAAiB;;;ACAnC,OAAO,UAAU;AACjB,OAAO,QAAQ;AACf,OAAO,cAAc;AACrB,SAAS,yBAAyB;AAG3B,IAAM,eAAN,MAA8C;AAAA,EACnD,OAAO;AAAA,EAEP,MAAM,MAAM,SAAsC;AAChD,UAAM,UAAU,GAAG,QAAQ,MAAM;AACjC,UAAM,KAAK,aAAa,OAAO;AAAA,EACjC;AAAA,EAEA,MAAM,QAAQ,SAAkC;AAC9C,UAAM,aAAa,KAAK,KAAK,SAAS,MAAM,SAAS;AAErD,UAAM,IAAI,QAAc,CAAC,SAAS,WAAW;AAC3C,YAAM,SAAS,kBAAkB,UAAU;AAC3C,YAAM,UAAU,SAAS,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC;AAEtD,aAAO,GAAG,SAAS,MAAM,QAAQ,CAAC;AAClC,cAAQ,GAAG,SAAS,MAAM;AAE1B,cAAQ,KAAK,MAAM;AACnB,cAAQ,UAAU,SAAS,KAAK;AAChC,cAAQ,SAAS;AAAA,IACnB,CAAC;AAED,WAAO;AAAA,EACT;AAAA,EAEA,MAAc,aAAa,SAAiB;AAC1C,UAAM,MAAM,MAAM,KAAK,gBAAgB;AAEvC,UAAM,SAAS;AAAA;AAAA;AAAA,cAGL,IAAI,MAAM,iBAAiB;AAAA,mBACtB,IAAI,OAAO;AAAA;AAAA,2BAEH,IAAI,MAAM,iBAAiB;AAAA,gCACtB,IAAI,MAAM,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA,UAKjD,IAAI,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASd,UAAM,GAAG,UAAU,KAAK,KAAK,SAAS,YAAY,GAAG,MAAM;AAAA,EAC7D;AAAA,EAEA,MAAc,kBAAyC;AACrD,QAAI;AACF,YAAM,MAAM,MAAM,GAAG,SAAS,cAAc;AAC5C,aAAO;AAAA,QACL,IAAI,IAAI,cAAc,IAAI;AAAA,QAC1B,MAAM,IAAI;AAAA,QACV,SAAS,IAAI;AAAA,QACb,aAAa,IAAI;AAAA,MACnB;AAAA,IACF,QAAQ;AACN,aAAO;AAAA,QACL,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,SAAS;AAAA,MACX;AAAA,IACF;AAAA,EACF;AACF;;;AC5EA,OAAOA,WAAU;AACjB,OAAOC,SAAQ;AACf,OAAOC,eAAc;AACrB,SAAS,qBAAAC,0BAAyB;AAG3B,IAAM,eAAN,MAA8C;AAAA,EACnD,OAAO;AAAA,EAEP,MAAM,MAAM,SAAsC;AAChD,UAAM,UAAU,GAAG,QAAQ,MAAM;AACjC,UAAM,KAAK,cAAc,OAAO;AAAA,EAClC;AAAA,EAEA,MAAM,QAAQ,SAAkC;AAC9C,UAAM,aAAaH,MAAK,KAAK,SAAS,MAAM,SAAS;AAErD,UAAM,IAAI,QAAc,CAAC,SAAS,WAAW;AAC3C,YAAM,SAASG,mBAAkB,UAAU;AAC3C,YAAM,UAAUD,UAAS,OAAO,EAAE,MAAM,KAAK,CAAC;AAE9C,aAAO,GAAG,SAAS,MAAM,QAAQ,CAAC;AAClC,cAAQ,GAAG,SAAS,MAAM;AAE1B,cAAQ,KAAK,MAAM;AACnB,cAAQ,UAAU,SAAS,KAAK;AAChC,cAAQ,SAAS;AAAA,IACnB,CAAC;AAED,WAAO;AAAA,EACT;AAAA,EAEA,MAAc,cAAc,SAAiB;AAC3C,UAAM,MAAM,MAAM,KAAK,gBAAgB;AAEvC,UAAM,UAAU;AAAA,MACd,IAAI,IAAI,MAAM;AAAA,MACd,SAAS,IAAI;AAAA,MACb,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,MAAM;AAAA,MACN,OAAO,IAAI;AAAA,MACX,MAAM;AAAA,MACN,WAAW;AAAA,MACX,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,+BAA+B;AAAA,IACjC;AAEA,UAAMD,IAAG,UAAUD,MAAK,KAAK,SAAS,cAAc,GAAG,SAAS,EAAE,QAAQ,EAAE,CAAC;AAAA,EAC/E;AAAA,EAEA,MAAc,kBAAyC;AACrD,QAAI;AACF,YAAM,MAAM,MAAMC,IAAG,SAAS,cAAc;AAC5C,aAAO;AAAA,QACL,IAAI,IAAI,cAAc,IAAI;AAAA,QAC1B,MAAM,IAAI;AAAA,QACV,SAAS,IAAI;AAAA,QACb,aAAa,IAAI;AAAA,MACnB;AAAA,IACF,QAAQ;AACN,aAAO;AAAA,QACL,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,SAAS;AAAA,MACX;AAAA,IACF;AAAA,EACF;AACF;;;ACrEA,OAAOG,WAAU;AACjB,OAAOC,SAAQ;AACf,SAAS,aAAa;AAGf,IAAM,iBAAN,MAAgD;AAAA,EACrD,OAAO;AAAA,EAEP,MAAM,MAAM,SAAsC;AAChD,UAAM,UAAU,GAAG,QAAQ,MAAM;AACjC,UAAM,KAAK,qBAAqB,OAAO;AAAA,EACzC;AAAA,EAEA,MAAM,QAAQ,SAAkC;AAC9C,UAAM,aAAaD,MAAK,KAAK,SAAS,iBAAiB;AAEvD,QAAI;AACF,YAAM,MAAM,aAAa,CAAC,iBAAiB,GAAG;AAAA,QAC5C,KAAK;AAAA,QACL,OAAO;AAAA,MACT,CAAC;AAED,YAAM,UAAUA,MAAK,KAAK,YAAY,+CAA+C;AAErF,YAAM,aAAaA,MAAK,KAAK,SAAS,MAAM,SAAS;AACrD,YAAMC,IAAG,KAAK,SAAS,UAAU;AAEjC,aAAO;AAAA,IACT,SAAS,OAAO;AACd,YAAM,IAAI,MAAM,2DAA2D;AAAA,IAC7E;AAAA,EACF;AAAA,EAEA,MAAc,qBAAqB,SAAiB;AAClD,UAAM,MAAM,MAAM,KAAK,gBAAgB;AACvC,UAAM,aAAaD,MAAK,KAAK,SAAS,iBAAiB;AAEvD,UAAMC,IAAG,UAAU,UAAU;AAC7B,UAAMA,IAAG,KAAK,SAASD,MAAK,KAAK,YAAY,yBAAyB,CAAC;AAEvE,UAAM,KAAK,eAAe,YAAY,GAAG;AACzC,UAAM,KAAK,kBAAkB,YAAY,GAAG;AAC5C,UAAM,KAAK,mBAAmB,YAAY,GAAG;AAAA,EAC/C;AAAA,EAEA,MAAc,eAAe,YAAoB,KAAmB;AAClE,UAAM,WAAW;AAAA;AAAA,eAEN,IAAI,MAAM,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yBASjB,IAAI,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgB7B,UAAM,eAAeA,MAAK,KAAK,YAAY,kCAAkC;AAC7E,UAAMC,IAAG,UAAUD,MAAK,QAAQ,YAAY,CAAC;AAC7C,UAAMC,IAAG,UAAU,cAAc,QAAQ;AAAA,EAC3C;AAAA,EAEA,MAAc,kBAAkB,YAAoB,KAAmB;AACrE,UAAM,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA,iBAKP,IAAI,MAAM,iBAAiB;AAAA;AAAA;AAAA;AAAA,yBAInB,IAAI,MAAM,iBAAiB;AAAA;AAAA;AAAA;AAAA,uBAI7B,IAAI,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAe9B,UAAMA,IAAG,UAAUD,MAAK,KAAK,YAAY,kBAAkB,GAAG,WAAW;AAAA,EAC3E;AAAA,EAEA,MAAc,mBAAmB,YAAoB,KAAmB;AACtE,UAAM,cAAc,IAAI,MAAM;AAC9B,UAAM,WAAW,WAAW,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA0BvC,UAAM,eAAeA,MAAK;AAAA,MACxB;AAAA,MACA,qBAAqB,YAAY,QAAQ,OAAO,GAAG,CAAC;AAAA,IACtD;AACA,UAAMC,IAAG,UAAUD,MAAK,QAAQ,YAAY,CAAC;AAC7C,UAAMC,IAAG,UAAU,cAAc,QAAQ;AAAA,EAC3C;AAAA,EAEA,MAAc,kBAAyC;AACrD,QAAI;AACF,YAAM,MAAM,MAAMA,IAAG,SAAS,cAAc;AAC5C,aAAO;AAAA,QACL,IAAI,IAAI,gBAAgB,IAAI,KAAK,QAAQ,eAAe,GAAG,EAAE,YAAY;AAAA,QACzE,MAAM,IAAI;AAAA,QACV,SAAS,IAAI;AAAA,QACb,aAAa,IAAI;AAAA,MACnB;AAAA,IACF,QAAQ;AACN,aAAO;AAAA,QACL,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,SAAS;AAAA,MACX;AAAA,IACF;AAAA,EACF;AACF;;;AH7JA,eAAsB,MAAM,UAAoB,UAAiC,CAAC,GAAG;AACnF,QAAM,OAAqB;AAAA,IACzB;AAAA,IACA,QAAQ,QAAQ,UAAU;AAAA,IAC1B,QAAQ,QAAQ,UAAU;AAAA,IAC1B,WAAW,QAAQ,aAAa;AAAA,EAClC;AAEA,MAAI,aAAa,OAAO;AACtB,UAAM,QAAQ,IAAI;AAAA,MAChB,cAAc,SAAS,IAAI;AAAA,MAC3B,cAAc,SAAS,IAAI;AAAA,MAC3B,cAAc,WAAW,IAAI;AAAA,IAC/B,CAAC;AACD;AAAA,EACF;AAEA,QAAM,cAAc,UAAU,IAAI;AACpC;AAEA,eAAe,cAAc,UAAoB,SAAuB;AACtE,QAAM,UAAU,WAAW,QAAQ;AAEnC,QAAM,UAAU;AAAA,IACd,OAAO;AAAA,MACL,QAAQ,GAAG,QAAQ,MAAM,IAAI,QAAQ;AAAA,MACrC,QAAQ,QAAQ;AAAA,MAChB,WAAW,QAAQ;AAAA,MACnB,aAAa;AAAA,IACf;AAAA,IACA,QAAQ;AAAA,MACN,oBAAoB,KAAK,UAAU,QAAQ;AAAA,IAC7C;AAAA,EACF,CAAC;AAED,QAAM,QAAQ,MAAM,OAAO;AAE3B,QAAM,cAAc,MAAM,QAAQ,QAAQ,GAAG,QAAQ,MAAM,IAAI,QAAQ,EAAE;AACzE,UAAQ,IAAI,UAAK,QAAQ,IAAI,qBAAqB,WAAW,EAAE;AACjE;AAEA,SAAS,WAAW,UAAqC;AACvD,UAAQ,UAAU;AAAA,IAChB,KAAK;AACH,aAAO,IAAI,aAAa;AAAA,IAC1B,KAAK;AACH,aAAO,IAAI,aAAa;AAAA,IAC1B,KAAK;AACH,aAAO,IAAI,eAAe;AAAA,IAC5B;AACE,YAAM,IAAI,MAAM,qBAAqB,QAAQ,EAAE;AAAA,EACnD;AACF;","names":["path","fs","archiver","createWriteStream","path","fs"]}
1
+ {"version":3,"sources":["../src/builder.ts","../src/adapters/tizen.ts","../src/adapters/webos.ts","../src/adapters/android.ts"],"sourcesContent":["import fs from 'fs-extra'\nimport { build as viteBuild } from 'vite'\nimport type { BuildOptions, Mode, Platform, PlatformAdapter, Target } from './types'\nimport { TizenAdapter } from './adapters/tizen'\nimport { WebOSAdapter } from './adapters/webos'\nimport { AndroidAdapter } from './adapters/android'\n\nexport async function build(platform: Platform, options: Partial<BuildOptions> = {}) {\n const opts = {\n outDir: options.outDir || 'dist',\n mode: options.mode || 'webview',\n minify: options.minify ?? true,\n sourcemap: options.sourcemap ?? false,\n }\n\n if (platform === 'all') {\n await Promise.all([\n buildPlatform('tizen', opts),\n buildPlatform('webos', opts),\n buildPlatform('android', opts),\n ])\n return\n }\n\n await buildPlatform(platform, opts)\n}\n\nasync function buildPlatform(platform: Target, base: Omit<BuildOptions, 'dir' | 'platform'>) {\n const options: BuildOptions = {\n ...base,\n dir: out(base.outDir, platform, base.mode),\n platform,\n }\n const adapter = getAdapter(platform)\n\n if (web(platform, options.mode)) {\n await viteBuild({\n build: {\n outDir: dir(options),\n minify: options.minify,\n sourcemap: options.sourcemap,\n emptyOutDir: true,\n },\n define: {\n __TABLE_PLATFORM__: JSON.stringify(platform),\n },\n })\n } else {\n await fs.emptyDir(options.dir)\n }\n\n await adapter.build(options)\n\n const packagePath = await adapter.package(options)\n console.log(`✓ ${adapter.name} package created: ${packagePath}`)\n}\n\nfunction getAdapter(platform: Target): PlatformAdapter {\n switch (platform) {\n case 'tizen':\n return new TizenAdapter()\n case 'webos':\n return new WebOSAdapter()\n case 'android':\n return new AndroidAdapter()\n default:\n throw new Error(`Unknown platform: ${platform}`)\n }\n}\n\nfunction out(root: string, platform: Target, mode: Mode) {\n if (platform === 'android' && mode === 'native') {\n return `${root}/android-native`\n }\n\n return `${root}/${platform}`\n}\n\nfunction dir(options: BuildOptions) {\n if (options.platform === 'android') {\n return `${options.dir}/www`\n }\n\n return options.dir\n}\n\nfunction web(platform: Target, mode: Mode) {\n return platform !== 'android' || mode === 'webview'\n}\n","import path from 'path'\nimport fs from 'fs-extra'\nimport archiver from 'archiver'\nimport { createWriteStream } from 'fs'\nimport type { BuildOptions, PlatformAdapter, ManifestBase } from '../types'\n\nexport class TizenAdapter implements PlatformAdapter {\n name = 'Tizen (Samsung)'\n\n async build(options: BuildOptions): Promise<void> {\n await this.createConfig(options.dir)\n }\n\n async package(options: BuildOptions): Promise<string> {\n const outputPath = path.join(options.dir, '..', 'app.wgt')\n\n await new Promise<void>((resolve, reject) => {\n const output = createWriteStream(outputPath)\n const archive = archiver('zip', { zlib: { level: 9 } })\n\n output.on('close', () => resolve())\n archive.on('error', reject)\n\n archive.pipe(output)\n archive.directory(options.dir, false)\n archive.finalize()\n })\n\n return outputPath\n }\n\n private async createConfig(distDir: string) {\n const pkg = await this.readPackageJson()\n\n const config = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<widget xmlns=\"http://www.w3.org/ns/widgets\" \n xmlns:tizen=\"http://tizen.org/ns/widgets\"\n id=\"${pkg.id || 'com.example.app'}\"\n version=\"${pkg.version}\"\n viewmodes=\"maximized\">\n <tizen:application id=\"${pkg.id || 'com.example.app'}.App\" \n package=\"${pkg.id || 'com.example.app'}\"\n required_version=\"6.0\"/>\n <content src=\"index.html\"/>\n <feature name=\"http://tizen.org/feature/screen.size.all\"/>\n <icon src=\"icon.png\"/>\n <name>${pkg.name}</name>\n <tizen:profile name=\"tv\"/>\n <tizen:setting screen-orientation=\"landscape\" \n context-menu=\"disable\" \n background-support=\"disable\" \n encryption=\"disable\" \n install-location=\"auto\"/>\n</widget>`\n\n await fs.writeFile(path.join(distDir, 'config.xml'), config)\n }\n\n private async readPackageJson(): Promise<ManifestBase> {\n try {\n const pkg = await fs.readJson('package.json')\n return {\n id: pkg.tizenAppId || pkg.name,\n name: pkg.name,\n version: pkg.version,\n description: pkg.description,\n }\n } catch {\n return {\n id: 'com.example.app',\n name: 'Table App',\n version: '1.0.0',\n }\n }\n }\n}\n","import path from 'path'\nimport fs from 'fs-extra'\nimport archiver from 'archiver'\nimport { createWriteStream } from 'fs'\nimport type { BuildOptions, PlatformAdapter, ManifestBase } from '../types'\n\nexport class WebOSAdapter implements PlatformAdapter {\n name = 'webOS (LG)'\n\n async build(options: BuildOptions): Promise<void> {\n await this.createAppInfo(options.dir)\n }\n\n async package(options: BuildOptions): Promise<string> {\n const outputPath = path.join(options.dir, '..', 'app.ipk')\n\n await new Promise<void>((resolve, reject) => {\n const output = createWriteStream(outputPath)\n const archive = archiver('tar', { gzip: true })\n\n output.on('close', () => resolve())\n archive.on('error', reject)\n\n archive.pipe(output)\n archive.directory(options.dir, false)\n archive.finalize()\n })\n\n return outputPath\n }\n\n private async createAppInfo(distDir: string) {\n const pkg = await this.readPackageJson()\n\n const appInfo = {\n id: pkg.id || 'com.example.app',\n version: pkg.version,\n vendor: 'Table.js',\n type: 'web',\n main: 'index.html',\n title: pkg.name,\n icon: 'icon.png',\n largeIcon: 'icon.png',\n bgImage: 'splash.png',\n resolution: '1920x1080',\n disallowScrollingInMainWindow: true,\n }\n\n await fs.writeJson(path.join(distDir, 'appinfo.json'), appInfo, { spaces: 2 })\n }\n\n private async readPackageJson(): Promise<ManifestBase> {\n try {\n const pkg = await fs.readJson('package.json')\n return {\n id: pkg.webosAppId || pkg.name,\n name: pkg.name,\n version: pkg.version,\n description: pkg.description,\n }\n } catch {\n return {\n id: 'com.example.app',\n name: 'Table App',\n version: '1.0.0',\n }\n }\n }\n}\n","import path from 'path'\nimport fs from 'fs-extra'\nimport { execa } from 'execa'\nimport type { BuildOptions, PlatformAdapter, ManifestBase } from '../types'\n\nexport class AndroidAdapter implements PlatformAdapter {\n name = 'Android TV'\n\n async build(options: BuildOptions): Promise<void> {\n if (options.mode === 'native') {\n await this.native(options.dir)\n return\n }\n\n await this.web(options.dir)\n }\n\n async package(options: BuildOptions): Promise<string> {\n const proj = path.join(options.dir, 'project')\n const cmd = await this.cmd(proj)\n\n if (!cmd) {\n return proj\n }\n\n try {\n await execa(cmd, ['assembleRelease'], {\n cwd: proj,\n stdio: 'inherit',\n })\n\n const apk = path.join(proj, 'app/build/outputs/apk/release/app-release.apk')\n const out = path.join(options.dir, '..', this.apk(options))\n await fs.copy(apk, out)\n\n return out\n } catch {\n throw new Error('Android build failed. Install the Android SDK and Gradle, or add a Gradle wrapper.')\n }\n }\n\n private async web(dir: string) {\n const pkg = await this.pkg()\n const proj = path.join(dir, 'project')\n\n await fs.remove(proj)\n await this.root(proj, pkg)\n await this.man(proj, pkg, true)\n await this.app(proj, pkg, false)\n await this.res(proj)\n await this.webKt(proj, pkg)\n await fs.copy(path.join(dir, 'www'), path.join(proj, 'app/src/main/assets/www'))\n }\n\n private async native(dir: string) {\n const pkg = await this.pkg()\n const proj = path.join(dir, 'project')\n\n await fs.remove(proj)\n await this.root(proj, pkg)\n await this.man(proj, pkg, false)\n await this.app(proj, pkg, true)\n await this.res(proj)\n await this.nativeKt(proj, pkg)\n }\n\n private async root(proj: string, pkg: ManifestBase) {\n const settings = `pluginManagement {\n repositories {\n google()\n mavenCentral()\n gradlePluginPortal()\n }\n}\n\ndependencyResolutionManagement {\n repositoriesMode.set(org.gradle.api.initialization.resolve.RepositoriesMode.FAIL_ON_PROJECT_REPOS)\n repositories {\n google()\n mavenCentral()\n }\n}\n\nrootProject.name = \"${this.safe(pkg.name)}\"\ninclude(\":app\")\n`\n\n const build = `plugins {\n id(\"com.android.application\") version \"9.1.0\" apply false\n id(\"org.jetbrains.kotlin.android\") version \"2.3.10\" apply false\n id(\"org.jetbrains.kotlin.plugin.compose\") version \"2.3.10\" apply false\n}\n`\n\n const props = `org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8\nandroid.useAndroidX=true\nkotlin.code.style=official\n`\n\n await fs.ensureDir(proj)\n await fs.ensureDir(path.join(proj, 'app'))\n await fs.writeFile(path.join(proj, 'settings.gradle.kts'), settings)\n await fs.writeFile(path.join(proj, 'build.gradle.kts'), build)\n await fs.writeFile(path.join(proj, 'gradle.properties'), props)\n await fs.writeFile(path.join(proj, 'app/proguard-rules.pro'), '')\n }\n\n private async man(proj: string, pkg: ManifestBase, web: boolean) {\n const net = web ? '<uses-permission android:name=\"android.permission.INTERNET\" />\\n' : ''\n const clear = web ? ' android:usesCleartextTraffic=\"true\"\\n' : ''\n const manifest = `<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n package=\"${pkg.id || 'com.example.app'}\">\n\n ${net} <uses-feature android:name=\"android.software.leanback\" android:required=\"true\" />\n <uses-feature android:name=\"android.hardware.touchscreen\" android:required=\"false\" />\n\n <application\n android:allowBackup=\"true\"\n android:banner=\"@drawable/banner\"\n android:icon=\"@android:drawable/sym_def_app_icon\"\n android:label=\"${pkg.name}\"\n${clear} android:theme=\"@android:style/Theme.DeviceDefault.NoActionBar\">\n\n <activity\n android:name=\".MainActivity\"\n android:exported=\"true\"\n android:screenOrientation=\"landscape\">\n <intent-filter>\n <action android:name=\"android.intent.action.MAIN\" />\n <category android:name=\"android.intent.category.LEANBACK_LAUNCHER\" />\n </intent-filter>\n </activity>\n </application>\n</manifest>`\n\n const file = path.join(proj, 'app/src/main/AndroidManifest.xml')\n await fs.ensureDir(path.dirname(file))\n await fs.writeFile(file, manifest)\n }\n\n private async app(proj: string, pkg: ManifestBase, native: boolean) {\n const plugins = native\n ? `plugins {\n id(\"com.android.application\")\n id(\"org.jetbrains.kotlin.android\")\n id(\"org.jetbrains.kotlin.plugin.compose\")\n}`\n : `plugins {\n id(\"com.android.application\")\n id(\"org.jetbrains.kotlin.android\")\n}`\n\n const flags = native\n ? `\n buildFeatures {\n compose = true\n }`\n : ''\n\n const deps = native\n ? `dependencies {\n val bom = platform(\"androidx.compose:compose-bom:2026.02.01\")\n\n implementation(bom)\n androidTestImplementation(bom)\n\n implementation(\"androidx.activity:activity-compose:1.12.4\")\n implementation(\"androidx.compose.foundation:foundation\")\n implementation(\"androidx.compose.ui:ui\")\n implementation(\"androidx.compose.ui:ui-tooling-preview\")\n implementation(\"androidx.tv:tv-material:1.0.0\")\n debugImplementation(\"androidx.compose.ui:ui-tooling\")\n}`\n : `dependencies {\n implementation(\"androidx.leanback:leanback:1.0.0\")\n}`\n\n const build = `${plugins}\nandroid {\n namespace = \"${pkg.id || 'com.example.app'}\"\n compileSdk = 34\n\n defaultConfig {\n applicationId = \"${pkg.id || 'com.example.app'}\"\n minSdk = 21\n targetSdk = 34\n versionCode = 1\n versionName = \"${pkg.version}\"\n }\n\n compileOptions {\n sourceCompatibility = JavaVersion.VERSION_17\n targetCompatibility = JavaVersion.VERSION_17\n }\n\n kotlinOptions {\n jvmTarget = \"17\"\n }\n${flags}\n\n buildTypes {\n release {\n isMinifyEnabled = true\n proguardFiles(\n getDefaultProguardFile(\"proguard-android-optimize.txt\"),\n \"proguard-rules.pro\",\n )\n }\n }\n}\n\n${deps}\n`\n\n await fs.writeFile(path.join(proj, 'app/build.gradle.kts'), build)\n }\n\n private async res(proj: string) {\n const banner = `<shape xmlns:android=\"http://schemas.android.com/apk/res/android\" android:shape=\"rectangle\">\n <solid android:color=\"#10151E\" />\n <corners android:radius=\"18dp\" />\n</shape>\n`\n\n const file = path.join(proj, 'app/src/main/res/drawable/banner.xml')\n await fs.ensureDir(path.dirname(file))\n await fs.writeFile(file, banner)\n }\n\n private async webKt(proj: string, pkg: ManifestBase) {\n const id = pkg.id || 'com.example.app'\n const main = `package ${id}\n\nimport android.app.Activity\nimport android.os.Bundle\nimport android.webkit.WebSettings\nimport android.webkit.WebView\n\nclass MainActivity : Activity() {\n override fun onCreate(savedInstanceState: Bundle?) {\n super.onCreate(savedInstanceState)\n\n val web = WebView(this)\n setContentView(web)\n\n val set: WebSettings = web.settings\n set.javaScriptEnabled = true\n set.domStorageEnabled = true\n set.allowFileAccess = true\n\n web.loadUrl(\"file:///android_asset/www/index.html\")\n }\n}\n`\n\n const file = path.join(proj, `app/src/main/java/${id.replace(/\\./g, '/')}/MainActivity.kt`)\n await fs.ensureDir(path.dirname(file))\n await fs.writeFile(file, main)\n }\n\n private async nativeKt(proj: string, pkg: ManifestBase) {\n const id = pkg.id || 'com.example.app'\n const main = `package ${id}\n\nimport android.os.Bundle\nimport androidx.activity.ComponentActivity\nimport androidx.activity.compose.setContent\nimport androidx.compose.foundation.background\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Box\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.fillMaxSize\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.shape.RoundedCornerShape\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.graphics.Color\nimport androidx.compose.ui.text.style.TextAlign\nimport androidx.compose.ui.unit.dp\nimport androidx.tv.material3.Button\nimport androidx.tv.material3.MaterialTheme\nimport androidx.tv.material3.Surface\nimport androidx.tv.material3.Text\n\nclass MainActivity : ComponentActivity() {\n override fun onCreate(savedInstanceState: Bundle?) {\n super.onCreate(savedInstanceState)\n setContent {\n MaterialTheme {\n Surface(modifier = Modifier.fillMaxSize()) {\n Box(\n modifier = Modifier\n .fillMaxSize()\n .background(Color(0xFF05070A))\n .padding(48.dp),\n contentAlignment = Alignment.Center,\n ) {\n Column(\n modifier = Modifier\n .fillMaxWidth()\n .background(Color(0xFF10151E), RoundedCornerShape(28.dp))\n .padding(32.dp),\n horizontalAlignment = Alignment.CenterHorizontally,\n verticalArrangement = Arrangement.spacedBy(20.dp),\n ) {\n Text(\n text = \"${pkg.name}\",\n style = MaterialTheme.typography.displayMedium,\n textAlign = TextAlign.Center,\n )\n Text(\n text = \"Android native mode uses Kotlin and Compose for TV instead of WebView.\",\n style = MaterialTheme.typography.bodyLarge,\n textAlign = TextAlign.Center,\n color = Color(0xFFD4D7DD),\n )\n Button(onClick = {}) {\n Text(\"Ready\")\n }\n }\n }\n }\n }\n }\n }\n}\n`\n\n const file = path.join(proj, `app/src/main/java/${id.replace(/\\./g, '/')}/MainActivity.kt`)\n await fs.ensureDir(path.dirname(file))\n await fs.writeFile(file, main)\n }\n\n private async cmd(proj: string) {\n if (await fs.pathExists(path.join(proj, 'gradlew'))) {\n return './gradlew'\n }\n\n if (await this.has('gradle')) {\n return 'gradle'\n }\n\n return null\n }\n\n private async has(cmd: string) {\n try {\n await execa(cmd, ['--version'])\n return true\n } catch {\n return false\n }\n }\n\n private apk(options: BuildOptions) {\n return options.mode === 'native' ? 'app-native.apk' : 'app.apk'\n }\n\n private safe(name: string) {\n return name.replace(/[^a-z0-9._-]/gi, '-')\n }\n\n private async pkg(): Promise<ManifestBase> {\n try {\n const pkg = await fs.readJson('package.json')\n return {\n id: pkg.androidAppId || this.id(pkg.name),\n name: pkg.name,\n version: pkg.version,\n description: pkg.description,\n }\n } catch {\n return {\n id: 'com.example.app',\n name: 'Table App',\n version: '1.0.0',\n }\n }\n }\n\n private id(name: string) {\n const slug = name\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '.')\n .replace(/^\\.+|\\.+$/g, '')\n .replace(/\\.\\.+/g, '.')\n\n return `com.tablejs.${slug || 'app'}`\n }\n}\n"],"mappings":"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","names":["fs","path","fs","archiver","createWriteStream","path","fs","out","dir","build","web","fs"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@table-js/platform",
3
- "version": "0.0.4",
3
+ "version": "0.0.5",
4
4
  "description": "Table.js platform adapters and build tools for Smart TV",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",
@@ -47,7 +47,7 @@
47
47
  "@types/node": "^25.5.0",
48
48
  "tsup": "^8.0.1",
49
49
  "typescript": "^5.3.3",
50
- "@table-js/tsconfig": "0.0.4"
50
+ "@table-js/tsconfig": "0.0.5"
51
51
  },
52
52
  "scripts": {
53
53
  "build": "tsup",