Skip to content

Commit 591e95a

Browse files
committed
feat(plugin): add soba generator
1 parent f8f93a5 commit 591e95a

File tree

7 files changed

+138
-2
lines changed

7 files changed

+138
-2
lines changed

libs/plugin/generators.json

+11-1
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,23 @@
55
"factory": "./src/generators/init/generator",
66
"schema": "./src/generators/init/schema.json",
77
"description": "Init Angular Three with proper packages and config"
8+
},
9+
"add-soba": {
10+
"factory": "./src/generators/add-soba/generator",
11+
"schema": "./src/generators/add-soba/schema.json",
12+
"description": "Add angular-three-soba to your project"
813
}
914
},
1015
"schematics": {
1116
"ng-add": {
1217
"factory": "./src/generators/init/compat",
1318
"schema": "./src/generators/init/schema.json",
1419
"description": "Add Angular Three with proper packages and config"
15-
}
20+
},
21+
"add-soba": {
22+
"factory": "./src/generators/add-soba/compat",
23+
"schema": "./src/generators/add-soba/schema.json",
24+
"description": "Add angular-three-soba to your project"
25+
}
1626
}
1727
}

libs/plugin/package.json

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
{
22
"name": "plugin",
3-
"type": "commonjs"
3+
"type": "commonjs",
4+
"dependencies": {
5+
"@nx/devkit": "19.5.6"
6+
}
47
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
import { convertNxGenerator } from '@nx/devkit';
2+
import addSoba from './generator';
3+
4+
export default convertNxGenerator(addSoba);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import { Tree } from '@nx/devkit';
2+
import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing';
3+
import { initGenerator } from '../init/generator';
4+
5+
describe('add-soba generator', () => {
6+
let tree: Tree;
7+
8+
beforeEach(() => {
9+
tree = createTreeWithEmptyWorkspace();
10+
});
11+
12+
it('should run successfully', async () => {
13+
await initGenerator(tree, { skipGenerateExperience: true });
14+
expect(true).toBe(true);
15+
});
16+
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
import { addDependenciesToPackageJson, formatFiles, installPackagesTask, logger, readJson, Tree } from '@nx/devkit';
2+
import { prompt } from 'enquirer';
3+
import { addMetadataJson } from '../utils';
4+
import { SOBA_PEER_DEPENDENCIES } from '../version';
5+
6+
const ENTRY_POINTS = {
7+
abstractions: ['troika-three-text'],
8+
controls: ['camera-controls', 'maath'],
9+
materials: ['three-custom-shader-material', 'three-mesh-bvh'],
10+
staging: ['troika-three-text', '@monogrid/gainmap-js'],
11+
stats: ['stats-gl'],
12+
};
13+
14+
export async function addSobaGenerator(tree: Tree) {
15+
const packagesToAdd = ['three-stdlib', '@pmndrs/vanilla'];
16+
17+
const packageJson = readJson(tree, 'package.json');
18+
const ngtVersion = packageJson['dependencies']['angular-three'] || packageJson['devDependencies']['angular-three'];
19+
20+
if (!ngtVersion) {
21+
logger.error('angular-three is not installed.');
22+
return;
23+
}
24+
25+
logger.info('Adding angular-three-soba...');
26+
addMetadataJson(tree, 'angular-three-soba/metadata.json');
27+
28+
const { peerDependencies } = await prompt<{ peerDependencies: string[][] }>({
29+
type: 'multiselect',
30+
name: 'peerDependencies',
31+
message: `To know which peer dependencies we need to add, please select the secondary entry points you are planning to use:`,
32+
choices: [
33+
...Object.entries(ENTRY_POINTS).map(([entryPoint, deps]) => ({
34+
value: deps,
35+
name: `angular-three-soba/${entryPoint}`,
36+
message: entryPoint,
37+
})),
38+
{
39+
value: [
40+
'troika-three-text',
41+
'three-custom-shader-material',
42+
'three-mesh-bvh',
43+
'@monogrid/gainmap-js',
44+
'camera-controls',
45+
'maath',
46+
'stats-gl',
47+
],
48+
name: 'All',
49+
message: 'I am not sure. Let me add all the peer dependencies.',
50+
},
51+
],
52+
});
53+
54+
// flatten, dedupe peerDependencies, add to packagesToAdd
55+
peerDependencies
56+
.flat()
57+
.filter((item, index, array) => array.indexOf(item) === index)
58+
.forEach((item) => {
59+
if (!packagesToAdd.includes(item)) {
60+
packagesToAdd.push(item);
61+
}
62+
});
63+
64+
const depsToAdd = packagesToAdd.reduce(
65+
(acc, item) => {
66+
if (SOBA_PEER_DEPENDENCIES[item]) {
67+
acc[item] = SOBA_PEER_DEPENDENCIES[item];
68+
}
69+
return acc;
70+
},
71+
{} as Record<string, string>,
72+
);
73+
74+
// add deps to package.json
75+
logger.info('Adding dependencies to package.json...');
76+
addDependenciesToPackageJson(tree, depsToAdd, {});
77+
78+
await formatFiles(tree);
79+
80+
return () => {
81+
installPackagesTask(tree);
82+
};
83+
}
84+
85+
export default addSobaGenerator;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"$schema": "https://json-schema.org/schema",
3+
"$id": "AddSoba",
4+
"title": "Add Soba"
5+
}

libs/plugin/src/generators/version.ts

+13
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,16 @@ export const ANGULAR_THREE_VERSION = '^2.0.0';
22
export const THREE_VERSION = '^0.166.0';
33
export const THREE_TYPE_VERSION = '^0.166.0';
44
export const NGXTENSION_VERSION = '^4.0.0';
5+
6+
export const SOBA_PEER_DEPENDENCIES = {
7+
'three-stdlib': '^2.0.0',
8+
'@pmndrs/vanilla': '^1.19.0',
9+
'camera-controls': '^2.8.0',
10+
'hls.js': '^1.5.0',
11+
maath: '^0.10.0',
12+
meshline: '^3.1.0',
13+
'stats-gl': '^2.0.0',
14+
'three-custom-shader-material': '^5.4.0',
15+
'three-mesh-bvh': '^0.7.0',
16+
'troika-three-text': '^0.49.0',
17+
} as const;

0 commit comments

Comments
 (0)