Skip to content

Commit 4359a98

Browse files
committed
feat: platform visionOS
1 parent 21c6565 commit 4359a98

File tree

31 files changed

+1498
-0
lines changed

31 files changed

+1498
-0
lines changed

packages/create-app/src/lib/__tests__/bin.test.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { PLATFORMS, PLUGINS } from '../templates.js';
44
test('formatConfig', () => {
55
expect(formatConfig(PLATFORMS, PLUGINS)).toMatchInlineSnapshot(`
66
"import { pluginPlatformIOS } from '@callstack/rnef-plugin-platform-ios';
7+
import { pluginPlatformVisionOS } from '@callstack/rnef-plugin-platform-visionos';
78
import { pluginPlatformAndroid } from '@callstack/rnef-plugin-platform-android';
89
import { pluginMetro } from '@callstack/rnef-plugin-metro';
910
import { pluginRepack } from '@callstack/rnef-plugin-repack';
@@ -15,6 +16,7 @@ test('formatConfig', () => {
1516
},
1617
platforms: {
1718
ios: pluginPlatformIOS(),
19+
visionos: pluginPlatformVisionOS(),
1820
android: pluginPlatformAndroid(),
1921
},
2022
};

packages/create-app/src/lib/templates.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,14 @@ export const PLATFORMS: TemplateInfo[] = [
6060
directory: 'template',
6161
importName: 'pluginPlatformIOS',
6262
},
63+
{
64+
type: 'npm',
65+
name: 'visionos',
66+
packageName: '@callstack/rnef-plugin-platform-visionos',
67+
version: 'latest',
68+
directory: 'template',
69+
importName: 'pluginPlatformVisionOS',
70+
},
6371
{
6472
type: 'npm',
6573
name: 'android',
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
# plugin-platform-visionos
2+
3+
This library was generated with [Nx](https://nx.dev).
4+
5+
## Building
6+
7+
Run `nx build plugin-platform-visionos` to build the library.
8+
9+
## Running unit tests
10+
11+
Run `nx test plugin-platform-visionos` to execute the unit tests via [Vitest](https://vitest.dev/).
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import baseConfig from '../../eslint.config.js';
2+
3+
export default baseConfig;
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
{
2+
"name": "@callstack/rnef-plugin-platform-visionos",
3+
"version": "0.0.1",
4+
"type": "module",
5+
"exports": {
6+
"types": "./dist/src/index.d.ts",
7+
"import": "./dist/src/index.js"
8+
},
9+
"dependencies": {
10+
"@react-native-community/cli-config-apple": "^15.1.2",
11+
"tslib": "^2.3.0",
12+
"@callstack/rnef-plugin-platform-apple": "workspace:*"
13+
},
14+
"devDependencies": {
15+
"@callstack/rnef-config": "workspace:*"
16+
}
17+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
{
2+
"name": "plugin-platform-visionos",
3+
"$schema": "../../node_modules/nx/schemas/project-schema.json",
4+
"sourceRoot": "packages/plugin-platform-visionos/src",
5+
"projectType": "library",
6+
"tags": [],
7+
"targets": {
8+
"build": {
9+
"executor": "@nx/js:tsc",
10+
"outputs": ["{options.outputPath}"],
11+
"options": {
12+
"outputPath": "packages/plugin-platform-visionos/dist",
13+
"main": "packages/plugin-platform-visionos/src/index.ts",
14+
"tsConfig": "packages/plugin-platform-visionos/tsconfig.lib.json",
15+
"assets": [
16+
"packages/plugin-platform-visionos/*.md",
17+
"packages/plugin-platform-visionos/src/template/**/*",
18+
"packages/plugin-platform-visionos/react-native.config.*"
19+
]
20+
}
21+
}
22+
}
23+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import {
2+
getProjectConfig,
3+
getDependencyConfig,
4+
} from '@react-native-community/cli-config-apple';
5+
6+
export default {
7+
platforms: {
8+
visionos: {
9+
projectConfig: getProjectConfig({ platformName: 'visionos' }),
10+
dependencyConfig: getDependencyConfig({ platformName: 'visionos' }),
11+
},
12+
},
13+
};
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export * from './lib/pluginPlatformVisionOS.js';
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import { test, expect } from 'vitest';
2+
3+
test('dummy test', () => {
4+
expect(true).toBe(true);
5+
});
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
import type { PluginOutput, PluginApi } from '@callstack/rnef-config';
2+
import {
3+
createBuild,
4+
createRun,
5+
getRunOptions,
6+
getBuildOptions,
7+
RunFlags,
8+
BuildFlags,
9+
} from '@callstack/rnef-plugin-platform-apple';
10+
import { getProjectConfig } from '@react-native-community/cli-config-apple';
11+
12+
const projectConfig = getProjectConfig({ platformName: 'visionos' });
13+
const buildOptions = getBuildOptions({ platformName: 'visionos' });
14+
const runOptions = getRunOptions({ platformName: 'visionos' });
15+
16+
export const pluginPlatformVisionOS =
17+
() =>
18+
(api: PluginApi): PluginOutput => {
19+
api.registerCommand({
20+
name: 'build:visionos',
21+
description: 'Build visionOS app.',
22+
action: async (args) => {
23+
const projectRoot = api.getProjectRoot();
24+
const config = projectConfig(projectRoot, {});
25+
26+
if (config) {
27+
await createBuild('visionos', config, args as BuildFlags);
28+
} else {
29+
throw new Error('visionOS project not found.');
30+
}
31+
},
32+
options: buildOptions,
33+
});
34+
35+
api.registerCommand({
36+
name: 'run:visionos',
37+
description: 'Run visionOS app.',
38+
action: async (args) => {
39+
const projectRoot = api.getProjectRoot();
40+
const config = projectConfig(projectRoot, {});
41+
42+
if (config) {
43+
await createRun('visionos', config, args as RunFlags, projectRoot);
44+
} else {
45+
throw new Error('visionOS project not found.');
46+
}
47+
},
48+
// @ts-expect-error: fix `simulator` is not defined in `RunFlags`
49+
options: runOptions,
50+
});
51+
52+
return {
53+
name: 'plugin-platform-visionos',
54+
description: 'RNEF plugin for everything visionOS.',
55+
};
56+
};
57+
58+
export default pluginPlatformVisionOS;

0 commit comments

Comments
 (0)