angular-three-plugin 4.0.0-next.100
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 +11 -0
- package/generators.json +46 -0
- package/migrations.json +16 -0
- package/package.json +55 -0
- package/src/generators/aux/aux.d.ts +3 -0
- package/src/generators/aux/aux.js +60 -0
- package/src/generators/aux/aux.js.map +1 -0
- package/src/generators/aux/compat.d.ts +2 -0
- package/src/generators/aux/compat.js +7 -0
- package/src/generators/aux/compat.js.map +1 -0
- package/src/generators/aux/schema.json +7 -0
- package/src/generators/gltf/compat.d.ts +2 -0
- package/src/generators/gltf/compat.js +7 -0
- package/src/generators/gltf/compat.js.map +1 -0
- package/src/generators/gltf/files/__fileName__.ts__tmpl__ +93 -0
- package/src/generators/gltf/generate-ngt.d.ts +32 -0
- package/src/generators/gltf/generate-ngt.js +199 -0
- package/src/generators/gltf/generate-ngt.js.map +1 -0
- package/src/generators/gltf/gltf.d.ts +32 -0
- package/src/generators/gltf/gltf.js +131 -0
- package/src/generators/gltf/gltf.js.map +1 -0
- package/src/generators/gltf/schema.json +176 -0
- package/src/generators/index.d.ts +2 -0
- package/src/generators/index.js +9 -0
- package/src/generators/index.js.map +1 -0
- package/src/generators/init/compat.d.ts +2 -0
- package/src/generators/init/compat.js +7 -0
- package/src/generators/init/compat.js.map +1 -0
- package/src/generators/init/files/scene-graph.ts__tmpl__ +29 -0
- package/src/generators/init/init.d.ts +6 -0
- package/src/generators/init/init.js +238 -0
- package/src/generators/init/init.js.map +1 -0
- package/src/generators/init/schema.json +37 -0
- package/src/generators/init/utils.d.ts +5 -0
- package/src/generators/init/utils.js +38 -0
- package/src/generators/init/utils.js.map +1 -0
- package/src/generators/migrate-tweakpane/compat.d.ts +2 -0
- package/src/generators/migrate-tweakpane/compat.js +7 -0
- package/src/generators/migrate-tweakpane/compat.js.map +1 -0
- package/src/generators/migrate-tweakpane/migrate-tweakpane.d.ts +6 -0
- package/src/generators/migrate-tweakpane/migrate-tweakpane.js +35 -0
- package/src/generators/migrate-tweakpane/migrate-tweakpane.js.map +1 -0
- package/src/generators/migrate-tweakpane/schema.json +14 -0
- package/src/index.d.ts +1 -0
- package/src/index.js +3 -0
- package/src/index.js.map +1 -0
- package/src/migrations/migrate-tweakpane/compat.d.ts +2 -0
- package/src/migrations/migrate-tweakpane/compat.js +7 -0
- package/src/migrations/migrate-tweakpane/compat.js.map +1 -0
- package/src/migrations/migrate-tweakpane/migrate-tweakpane.d.ts +2 -0
- package/src/migrations/migrate-tweakpane/migrate-tweakpane.js +9 -0
- package/src/migrations/migrate-tweakpane/migrate-tweakpane.js.map +1 -0
- package/src/utils.d.ts +2 -0
- package/src/utils.js +33 -0
- package/src/utils.js.map +1 -0
- package/src/versions.d.ts +5 -0
- package/src/versions.js +39 -0
- package/src/versions.js.map +1 -0
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.gltfGenerator = gltfGenerator;
|
|
4
|
+
const devkit_1 = require("@nx/devkit");
|
|
5
|
+
const node_path_1 = require("node:path");
|
|
6
|
+
const generate_ngt_1 = require("./generate-ngt");
|
|
7
|
+
// @ts-expect-error - type only import
|
|
8
|
+
function normalizeOptions(tree, options, gltfJsx) {
|
|
9
|
+
const { Log } = gltfJsx;
|
|
10
|
+
const { fileName, className } = (0, devkit_1.names)(options.className);
|
|
11
|
+
const log = new Log({ debug: options.verbose, silent: false });
|
|
12
|
+
const gltfJsxOptions = {
|
|
13
|
+
log,
|
|
14
|
+
bones: options.bones,
|
|
15
|
+
meta: options.meta,
|
|
16
|
+
shadows: options.shadows,
|
|
17
|
+
instance: options.instance,
|
|
18
|
+
instanceall: options.instanceAll,
|
|
19
|
+
keepgroups: options.keepGroups,
|
|
20
|
+
keepnames: options.keepNames,
|
|
21
|
+
precision: options.precision,
|
|
22
|
+
};
|
|
23
|
+
const transformOptions = {
|
|
24
|
+
format: options.format,
|
|
25
|
+
degrade: options.degrade,
|
|
26
|
+
degraderesolution: options.degradeResolution,
|
|
27
|
+
simplify: options.simplify ? { ratio: options.ratio, error: options.error } : false,
|
|
28
|
+
keepattributes: options.keepAttributes,
|
|
29
|
+
keepmeshes: options.keepMeshes,
|
|
30
|
+
keepmaterials: options.keepMaterials,
|
|
31
|
+
resolution: options.resolution,
|
|
32
|
+
};
|
|
33
|
+
const modelPathFromRoot = (0, node_path_1.join)(tree.root, options.modelPath);
|
|
34
|
+
const outputDir = (0, node_path_1.dirname)(options.output);
|
|
35
|
+
const injectGLTFOptions = options.transform && options.draco != null
|
|
36
|
+
? `{ useDraco: ${options.draco} }`
|
|
37
|
+
: options.transform
|
|
38
|
+
? '{ useDraco: true }'
|
|
39
|
+
: '';
|
|
40
|
+
const selector = `${options.selectorPrefix}-${fileName}`;
|
|
41
|
+
const gltfAnimationTypeName = className + 'AnimationClips';
|
|
42
|
+
const gltfAnimationApiTypeName = className + 'AnimationApi';
|
|
43
|
+
const gltfName = className + 'GLTF';
|
|
44
|
+
const gltfResultTypeName = gltfName + 'GLTFResult';
|
|
45
|
+
return {
|
|
46
|
+
log,
|
|
47
|
+
selector,
|
|
48
|
+
fileName,
|
|
49
|
+
className,
|
|
50
|
+
gltfJsxOptions,
|
|
51
|
+
transformOptions,
|
|
52
|
+
modelPathFromRoot,
|
|
53
|
+
outputDir,
|
|
54
|
+
injectGLTFOptions,
|
|
55
|
+
gltfAnimationTypeName,
|
|
56
|
+
gltfAnimationApiTypeName,
|
|
57
|
+
gltfName,
|
|
58
|
+
gltfResultTypeName,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
async function gltfGenerator(tree, options) {
|
|
62
|
+
const gltfjsx = await import('@rosskevin/gltfjsx');
|
|
63
|
+
const { loadGLTF, AnalyzedGLTF, gltfTransform, compareFileSizes } = gltfjsx;
|
|
64
|
+
const { selector, className, fileName, modelPathFromRoot, log, gltfJsxOptions, transformOptions, outputDir, injectGLTFOptions, gltfAnimationTypeName, gltfAnimationApiTypeName, gltfName, gltfResultTypeName, } = normalizeOptions(tree, options, gltfjsx);
|
|
65
|
+
//
|
|
66
|
+
// Transform the GLTF file if necessary using gltf-transform
|
|
67
|
+
//
|
|
68
|
+
let size = '';
|
|
69
|
+
let transformedModelPath = undefined;
|
|
70
|
+
let dracoLoader = undefined; // global instance, instantiate once, dispose once
|
|
71
|
+
if (options.transform) {
|
|
72
|
+
transformedModelPath = (0, node_path_1.resolve)(modelPathFromRoot + '-transformed.glb');
|
|
73
|
+
await gltfTransform(modelPathFromRoot, transformedModelPath, Object.assign(transformOptions, gltfJsxOptions));
|
|
74
|
+
size = compareFileSizes(modelPathFromRoot, transformedModelPath);
|
|
75
|
+
log.debug('Instantiating DracoLoader');
|
|
76
|
+
const { DRACOLoader } = await import('node-three-gltf');
|
|
77
|
+
dracoLoader = new DRACOLoader();
|
|
78
|
+
}
|
|
79
|
+
const modelPath = transformedModelPath || modelPathFromRoot;
|
|
80
|
+
//
|
|
81
|
+
// Read the model
|
|
82
|
+
//
|
|
83
|
+
log.debug('Loading model: ', modelPath);
|
|
84
|
+
try {
|
|
85
|
+
const gltf = await loadGLTF(modelPath, dracoLoader);
|
|
86
|
+
const analyzed = new AnalyzedGLTF(gltf, gltfJsxOptions);
|
|
87
|
+
const generateNGT = new generate_ngt_1.GenerateNGT(analyzed, gltfjsx, options);
|
|
88
|
+
const scene = generateNGT.generate();
|
|
89
|
+
const generateOptions = generateNGT.getGenerateOptions();
|
|
90
|
+
let gltfPath = !transformedModelPath && modelPath.startsWith('http') ? modelPath : (0, node_path_1.relative)(outputDir, modelPath);
|
|
91
|
+
if (!gltfPath.startsWith('http') && !gltfPath.startsWith('.')) {
|
|
92
|
+
gltfPath = `./${gltfPath}`;
|
|
93
|
+
}
|
|
94
|
+
(0, devkit_1.generateFiles)(tree, (0, node_path_1.join)(__dirname, 'files'), outputDir, Object.assign(generateOptions, {
|
|
95
|
+
tmpl: '',
|
|
96
|
+
scene,
|
|
97
|
+
fileName,
|
|
98
|
+
className,
|
|
99
|
+
selector,
|
|
100
|
+
animations: analyzed.gltf.animations || [],
|
|
101
|
+
useImportAttribute: !modelPath.startsWith('http'),
|
|
102
|
+
preload: true,
|
|
103
|
+
gltfName,
|
|
104
|
+
gltfAnimationTypeName,
|
|
105
|
+
gltfAnimationApiTypeName,
|
|
106
|
+
gltfResultTypeName,
|
|
107
|
+
gltfPath,
|
|
108
|
+
gltfOptions: injectGLTFOptions,
|
|
109
|
+
header: options.header,
|
|
110
|
+
size,
|
|
111
|
+
}));
|
|
112
|
+
await (0, devkit_1.formatFiles)(tree);
|
|
113
|
+
if (options.console) {
|
|
114
|
+
const outputPath = (0, node_path_1.join)(outputDir, `${fileName}.ts`);
|
|
115
|
+
const outputContent = tree.read(outputPath, 'utf8');
|
|
116
|
+
console.log(outputContent);
|
|
117
|
+
tree.delete(outputPath);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
catch (err) {
|
|
121
|
+
log.error(err);
|
|
122
|
+
dracoLoader?.dispose();
|
|
123
|
+
return process.exit(1);
|
|
124
|
+
}
|
|
125
|
+
finally {
|
|
126
|
+
log.debug('Disposing of DracoLoader');
|
|
127
|
+
dracoLoader?.dispose();
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
exports.default = gltfGenerator;
|
|
131
|
+
//# sourceMappingURL=gltf.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gltf.js","sourceRoot":"","sources":["../../../../../../libs/plugin/src/generators/gltf/gltf.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$id": "Gltf",
|
|
3
|
+
"title": "Generate component from GLTF",
|
|
4
|
+
"type": "object",
|
|
5
|
+
"properties": {
|
|
6
|
+
"modelPath": {
|
|
7
|
+
"type": "string",
|
|
8
|
+
"description": "GLTF model path",
|
|
9
|
+
"alias": "path",
|
|
10
|
+
"$default": {
|
|
11
|
+
"$source": "argv",
|
|
12
|
+
"index": 0
|
|
13
|
+
},
|
|
14
|
+
"x-prompt": "Path to GLTF model from workspace root?"
|
|
15
|
+
},
|
|
16
|
+
"output": {
|
|
17
|
+
"type": "string",
|
|
18
|
+
"description": "Output path",
|
|
19
|
+
"alias": "o",
|
|
20
|
+
"x-prompt": "Where to output the component?"
|
|
21
|
+
},
|
|
22
|
+
"className": {
|
|
23
|
+
"type": "string",
|
|
24
|
+
"description": "Name to use for the generated component class",
|
|
25
|
+
"alias": "C",
|
|
26
|
+
"default": "Model",
|
|
27
|
+
"x-prompt": "Enter the name of the component class to generate (default: Model)"
|
|
28
|
+
},
|
|
29
|
+
"selectorPrefix": {
|
|
30
|
+
"type": "string",
|
|
31
|
+
"description": "Prefix to use for the generated component selector",
|
|
32
|
+
"alias": "pre",
|
|
33
|
+
"default": "app",
|
|
34
|
+
"x-prompt": "Enter the prefix to use for the generated component selector (default: app)"
|
|
35
|
+
},
|
|
36
|
+
"draco": {
|
|
37
|
+
"type": "boolean",
|
|
38
|
+
"description": "Use DracoLoader",
|
|
39
|
+
"alias": "D",
|
|
40
|
+
"default": null
|
|
41
|
+
},
|
|
42
|
+
"bones": {
|
|
43
|
+
"type": "boolean",
|
|
44
|
+
"description": "Layout Bones declaratively",
|
|
45
|
+
"alias": "b",
|
|
46
|
+
"default": false
|
|
47
|
+
},
|
|
48
|
+
"meta": {
|
|
49
|
+
"type": "boolean",
|
|
50
|
+
"decsription": "Include metadata (as userData)",
|
|
51
|
+
"alias": "m",
|
|
52
|
+
"default": false
|
|
53
|
+
},
|
|
54
|
+
"shadows": {
|
|
55
|
+
"type": "boolean",
|
|
56
|
+
"description": "Let mesh cast and receive shadows",
|
|
57
|
+
"alias": "s",
|
|
58
|
+
"default": false
|
|
59
|
+
},
|
|
60
|
+
"precision": {
|
|
61
|
+
"type": "number",
|
|
62
|
+
"description": "Number of fractional digits (default: 3)",
|
|
63
|
+
"alias": "p",
|
|
64
|
+
"default": 3
|
|
65
|
+
},
|
|
66
|
+
"console": {
|
|
67
|
+
"type": "boolean",
|
|
68
|
+
"description": "Prints to console",
|
|
69
|
+
"alias": "c",
|
|
70
|
+
"default": false
|
|
71
|
+
},
|
|
72
|
+
"instance": {
|
|
73
|
+
"type": "boolean",
|
|
74
|
+
"description": "Instance re-occuring geometry",
|
|
75
|
+
"alias": "i",
|
|
76
|
+
"default": false
|
|
77
|
+
},
|
|
78
|
+
"instanceAll": {
|
|
79
|
+
"type": "boolean",
|
|
80
|
+
"description": "Instance every geometry (for cheaper re-use)",
|
|
81
|
+
"alias": "I",
|
|
82
|
+
"default": false
|
|
83
|
+
},
|
|
84
|
+
"transform": {
|
|
85
|
+
"type": "boolean",
|
|
86
|
+
"description": "Transform meshes via @gltf-transform/extensions",
|
|
87
|
+
"alias": "t",
|
|
88
|
+
"default": false
|
|
89
|
+
},
|
|
90
|
+
"degrade": {
|
|
91
|
+
"type": "string",
|
|
92
|
+
"description": "Degrade meshes via @gltf-transform/extensions",
|
|
93
|
+
"alias": "q",
|
|
94
|
+
"default": ""
|
|
95
|
+
},
|
|
96
|
+
"degradeResolution": {
|
|
97
|
+
"type": "number",
|
|
98
|
+
"description": "Degrade meshes via @gltf-transform/extensions",
|
|
99
|
+
"alias": "Q",
|
|
100
|
+
"default": 512
|
|
101
|
+
},
|
|
102
|
+
"resolution": {
|
|
103
|
+
"type": "number",
|
|
104
|
+
"description": "Resolution for texture resizing (default: 1024)",
|
|
105
|
+
"alias": "R",
|
|
106
|
+
"default": 1024
|
|
107
|
+
},
|
|
108
|
+
"keepMeshes": {
|
|
109
|
+
"type": "boolean",
|
|
110
|
+
"description": "Do not join compatible meshes",
|
|
111
|
+
"alias": "j",
|
|
112
|
+
"default": false
|
|
113
|
+
},
|
|
114
|
+
"keepMaterials": {
|
|
115
|
+
"type": "boolean",
|
|
116
|
+
"description": "Do not palette join materials",
|
|
117
|
+
"alias": "M",
|
|
118
|
+
"default": false
|
|
119
|
+
},
|
|
120
|
+
"keepAttributes": {
|
|
121
|
+
"type": "boolean",
|
|
122
|
+
"description": "Whether to keep unused vertex attributes, such as UVs without an assigned texture",
|
|
123
|
+
"alias": "a",
|
|
124
|
+
"default": false
|
|
125
|
+
},
|
|
126
|
+
"keepNames": {
|
|
127
|
+
"type": "boolean",
|
|
128
|
+
"description": "Keep names of objects",
|
|
129
|
+
"alias": "n",
|
|
130
|
+
"default": false
|
|
131
|
+
},
|
|
132
|
+
"keepGroups": {
|
|
133
|
+
"type": "boolean",
|
|
134
|
+
"description": "Keep groups",
|
|
135
|
+
"alias": "g",
|
|
136
|
+
"default": false
|
|
137
|
+
},
|
|
138
|
+
"format": {
|
|
139
|
+
"type": "string",
|
|
140
|
+
"description": "Texture format jpeg | png | webp | avif (default: \"webp\")",
|
|
141
|
+
"alias": "f",
|
|
142
|
+
"default": "webp"
|
|
143
|
+
},
|
|
144
|
+
"simplify": {
|
|
145
|
+
"type": "boolean",
|
|
146
|
+
"description": "Mesh simplification (default: false)",
|
|
147
|
+
"alias": "S",
|
|
148
|
+
"default": false
|
|
149
|
+
},
|
|
150
|
+
"ratio": {
|
|
151
|
+
"type": "number",
|
|
152
|
+
"description": "Simplifier ratio (default: 0)",
|
|
153
|
+
"alias": "r",
|
|
154
|
+
"default": 0
|
|
155
|
+
},
|
|
156
|
+
"error": {
|
|
157
|
+
"type": "number",
|
|
158
|
+
"description": "Simplifier error threshold (default: 0.0001)",
|
|
159
|
+
"alias": "e",
|
|
160
|
+
"default": 0.0001
|
|
161
|
+
},
|
|
162
|
+
"header": {
|
|
163
|
+
"type": "string",
|
|
164
|
+
"description": "Custom header to add to the generated file",
|
|
165
|
+
"alias": "H",
|
|
166
|
+
"default": ""
|
|
167
|
+
},
|
|
168
|
+
"verbose": {
|
|
169
|
+
"type": "boolean",
|
|
170
|
+
"description": "Verbose log",
|
|
171
|
+
"alias": "debug",
|
|
172
|
+
"default": false
|
|
173
|
+
}
|
|
174
|
+
},
|
|
175
|
+
"required": ["modelPath", "output"]
|
|
176
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.initGenerator = exports.gltfGenerator = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
var gltf_1 = require("./gltf/gltf");
|
|
6
|
+
Object.defineProperty(exports, "gltfGenerator", { enumerable: true, get: function () { return tslib_1.__importDefault(gltf_1).default; } });
|
|
7
|
+
var init_1 = require("./init/init");
|
|
8
|
+
Object.defineProperty(exports, "initGenerator", { enumerable: true, get: function () { return tslib_1.__importDefault(init_1).default; } });
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../libs/plugin/src/generators/index.ts"],"names":[],"mappings":";;;;AAAA,oCAAiF;AAAxE,8HAAA,OAAO,OAAiB;AACjC,oCAAiF;AAAxE,8HAAA,OAAO,OAAiB"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
const devkit_1 = require("@nx/devkit");
|
|
5
|
+
const init_1 = tslib_1.__importDefault(require("./init"));
|
|
6
|
+
exports.default = (0, devkit_1.convertNxGenerator)(init_1.default);
|
|
7
|
+
//# sourceMappingURL=compat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compat.js","sourceRoot":"","sources":["../../../../../../libs/plugin/src/generators/init/compat.ts"],"names":[],"mappings":";;;AAAA,uCAAgD;AAChD,0DAAmC;AAEnC,kBAAe,IAAA,2BAAkB,EAAC,cAAa,CAAC,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { CUSTOM_ELEMENTS_SCHEMA, Component, viewChild, ElementRef, ChangeDetectionStrategy } from '@angular/core';
|
|
2
|
+
import { extend, injectBeforeRender } from 'angular-three';
|
|
3
|
+
import { Mesh, BoxGeometry, MeshBasicMaterial } from 'three';
|
|
4
|
+
|
|
5
|
+
@Component({
|
|
6
|
+
selector: 'app-scene-graph',
|
|
7
|
+
template: `
|
|
8
|
+
<ngt-mesh #mesh>
|
|
9
|
+
<ngt-box-geometry />
|
|
10
|
+
<ngt-mesh-basic-material color="hotpink" />
|
|
11
|
+
</ngt-mesh>
|
|
12
|
+
`,
|
|
13
|
+
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
14
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
15
|
+
})
|
|
16
|
+
export class SceneGraph {
|
|
17
|
+
private meshRef = viewChild.required<ElementRef<Mesh>>('mesh');
|
|
18
|
+
|
|
19
|
+
constructor() {
|
|
20
|
+
extend({ Mesh, BoxGeometry, MeshBasicMaterial });
|
|
21
|
+
|
|
22
|
+
injectBeforeRender(({ delta }) => {
|
|
23
|
+
const mesh = this.meshRef().nativeElement;
|
|
24
|
+
mesh.rotation.x += delta;
|
|
25
|
+
mesh.rotation.y += delta;
|
|
26
|
+
})
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Tree } from '@nx/devkit';
|
|
2
|
+
export interface InitGeneratorSchema {
|
|
3
|
+
sceneGraph: 'append' | 'replace' | 'generate-only' | 'none';
|
|
4
|
+
}
|
|
5
|
+
export declare function initGenerator(tree: Tree, options: InitGeneratorSchema): Promise<() => void>;
|
|
6
|
+
export default initGenerator;
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.initGenerator = initGenerator;
|
|
4
|
+
const devkit_1 = require("@nx/devkit");
|
|
5
|
+
const enquirer_1 = require("enquirer");
|
|
6
|
+
const node_path_1 = require("node:path");
|
|
7
|
+
const ts_morph_1 = require("ts-morph");
|
|
8
|
+
const utils_1 = require("../../utils");
|
|
9
|
+
const versions_1 = require("../../versions");
|
|
10
|
+
const utils_2 = require("./utils");
|
|
11
|
+
// TODO: (chau) add tests when there are better testing strategy for prompt
|
|
12
|
+
async function initGenerator(tree, options) {
|
|
13
|
+
devkit_1.logger.log('[NGT] Initializing Angular Three...');
|
|
14
|
+
const packageJson = (0, devkit_1.readJson)(tree, 'package.json');
|
|
15
|
+
let version = packageJson['dependencies']?.['angular-three'] || packageJson['devDependencies']?.['angular-three'];
|
|
16
|
+
if (version) {
|
|
17
|
+
devkit_1.logger.info(`[NGT] Angular Three is already installed: ${version}.`);
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
(0, devkit_1.addDependenciesToPackageJson)(tree, { 'angular-three': versions_1.ANGULAR_THREE_VERSION, three: versions_1.THREE_VERSION, ngxtension: versions_1.NGXTENSION_VERSION }, { '@types/three': versions_1.THREE_TYPE_VERSION });
|
|
21
|
+
devkit_1.logger.info('[NGT] Turning on skipLibCheck...');
|
|
22
|
+
const baseTsConfigPath = tree.exists('tsconfig.base.json') ? 'tsconfig.base.json' : 'tsconfig.json';
|
|
23
|
+
(0, devkit_1.updateJson)(tree, baseTsConfigPath, (json) => {
|
|
24
|
+
if (!('skipLibCheck' in json.compilerOptions) || json.compilerOptions?.skipLibCheck === false) {
|
|
25
|
+
json.compilerOptions.skipLibCheck = true;
|
|
26
|
+
}
|
|
27
|
+
return json;
|
|
28
|
+
});
|
|
29
|
+
(0, utils_1.addMetadataJson)(tree, 'angular-three/metadata.json');
|
|
30
|
+
const tsProject = new ts_morph_1.Project({
|
|
31
|
+
useInMemoryFileSystem: true,
|
|
32
|
+
skipAddingFilesFromTsConfig: true,
|
|
33
|
+
skipLoadingLibFiles: true,
|
|
34
|
+
});
|
|
35
|
+
const projects = (0, devkit_1.getProjects)(tree);
|
|
36
|
+
const applications = {};
|
|
37
|
+
for (const [projectName, project] of projects.entries()) {
|
|
38
|
+
if (!project.sourceRoot || project.projectType !== 'application')
|
|
39
|
+
continue;
|
|
40
|
+
applications[project.name || projectName] = project;
|
|
41
|
+
}
|
|
42
|
+
const { appName } = await (0, enquirer_1.prompt)({
|
|
43
|
+
type: 'select',
|
|
44
|
+
message: 'Which application to continue with the set up?',
|
|
45
|
+
name: 'appName',
|
|
46
|
+
choices: Object.keys(applications),
|
|
47
|
+
});
|
|
48
|
+
const app = applications[appName];
|
|
49
|
+
const mainTsPath = (0, node_path_1.join)(app.sourceRoot, 'main.ts');
|
|
50
|
+
if (!tree.exists(mainTsPath)) {
|
|
51
|
+
devkit_1.logger.info(`[NGT] Could not locate main.ts for ${app}`);
|
|
52
|
+
return await (0, utils_2.stopSetup)(tree, `Could not locate main.ts for ${app}`);
|
|
53
|
+
}
|
|
54
|
+
const mainTsContent = tree.read(mainTsPath, 'utf8');
|
|
55
|
+
if (!mainTsContent.includes('bootstrapApplication')) {
|
|
56
|
+
return await (0, utils_2.stopSetup)(tree, `Could not locate bootstrapApplication in ${mainTsPath}`);
|
|
57
|
+
}
|
|
58
|
+
const mainSourceFile = tsProject.createSourceFile(mainTsPath, mainTsContent, {
|
|
59
|
+
overwrite: true,
|
|
60
|
+
scriptKind: ts_morph_1.ScriptKind.TS,
|
|
61
|
+
});
|
|
62
|
+
const expressionStatement = mainSourceFile.getStatement((statement) => ts_morph_1.Node.isExpressionStatement(statement));
|
|
63
|
+
let maybeBootstrapCall = expressionStatement.getExpression();
|
|
64
|
+
let foundBootstrapCall = false;
|
|
65
|
+
while (!foundBootstrapCall) {
|
|
66
|
+
const expression = 'getExpression' in maybeBootstrapCall && typeof maybeBootstrapCall['getExpression'] === 'function'
|
|
67
|
+
? maybeBootstrapCall.getExpression()
|
|
68
|
+
: null;
|
|
69
|
+
if (!expression) {
|
|
70
|
+
return await (0, utils_2.stopSetup)(tree, `Could not locate bootstrapApplication in ${mainTsPath}`);
|
|
71
|
+
}
|
|
72
|
+
if (ts_morph_1.Node.isCallExpression(maybeBootstrapCall) &&
|
|
73
|
+
ts_morph_1.Node.isIdentifier(expression) &&
|
|
74
|
+
expression.getText() === 'bootstrapApplication') {
|
|
75
|
+
foundBootstrapCall = true;
|
|
76
|
+
break;
|
|
77
|
+
}
|
|
78
|
+
maybeBootstrapCall = expression;
|
|
79
|
+
}
|
|
80
|
+
const bootstrapCall = maybeBootstrapCall;
|
|
81
|
+
const [_, configArgument] = bootstrapCall.getArguments();
|
|
82
|
+
if (!configArgument) {
|
|
83
|
+
return await (0, utils_2.stopSetup)(tree, `Could not locate config argument for bootstrapApplication in ${mainTsPath}`);
|
|
84
|
+
}
|
|
85
|
+
// if configArgument is a external ApplicationConfig
|
|
86
|
+
if (ts_morph_1.Node.isIdentifier(configArgument)) {
|
|
87
|
+
if (configArgument.getText() !== 'appConfig') {
|
|
88
|
+
return await (0, utils_2.stopSetup)(tree, `Non-default config in ${mainTsPath} as second argument to bootstrapApplication is not appConfig. Please add "provideNgtRenderer()" to your bootstrapApplication configuration`);
|
|
89
|
+
}
|
|
90
|
+
// find the appConfig import
|
|
91
|
+
const appConfigImport = mainSourceFile.getImportDeclaration((importDeclaration) => {
|
|
92
|
+
return importDeclaration.getModuleSpecifierValue() === './app/app.config';
|
|
93
|
+
});
|
|
94
|
+
if (!appConfigImport) {
|
|
95
|
+
return await (0, utils_2.stopSetup)(tree, `Non-default config in ${mainTsPath} as external config import path is not ./app/app.config. Please add "provideNgtRenderer()" to your bootstrapApplication configuration`);
|
|
96
|
+
}
|
|
97
|
+
const appConfigPath = (0, node_path_1.join)(app.sourceRoot, 'app', 'app.config.ts');
|
|
98
|
+
if (!tree.exists(appConfigPath)) {
|
|
99
|
+
return await (0, utils_2.stopSetup)(tree, `Could not locate app.config.ts for ${app}`);
|
|
100
|
+
}
|
|
101
|
+
const appConfigContent = tree.read(appConfigPath, 'utf8');
|
|
102
|
+
const appConfigSourceFile = tsProject.createSourceFile(appConfigPath, appConfigContent, {
|
|
103
|
+
overwrite: true,
|
|
104
|
+
scriptKind: ts_morph_1.ScriptKind.TS,
|
|
105
|
+
});
|
|
106
|
+
const appConfigVariable = appConfigSourceFile.getVariableDeclaration('appConfig');
|
|
107
|
+
if (!appConfigVariable) {
|
|
108
|
+
return await (0, utils_2.stopSetup)(tree, `Could not locate appConfig variable in ${appConfigPath}`);
|
|
109
|
+
}
|
|
110
|
+
const configObject = appConfigVariable.getInitializer();
|
|
111
|
+
if (!configObject || !ts_morph_1.Node.isObjectLiteralExpression(configObject)) {
|
|
112
|
+
return await (0, utils_2.stopSetup)(tree, `Could not locate appConfig object in ${appConfigPath}`);
|
|
113
|
+
}
|
|
114
|
+
const endSetup = await (0, utils_2.handleAppConfig)(tree, configObject, appConfigSourceFile);
|
|
115
|
+
if (endSetup) {
|
|
116
|
+
return await endSetup();
|
|
117
|
+
}
|
|
118
|
+
tree.write(appConfigPath, appConfigSourceFile.getFullText());
|
|
119
|
+
}
|
|
120
|
+
if (ts_morph_1.Node.isObjectLiteralExpression(configArgument)) {
|
|
121
|
+
const endSetup = await (0, utils_2.handleAppConfig)(tree, configArgument, mainSourceFile);
|
|
122
|
+
if (endSetup) {
|
|
123
|
+
return await endSetup();
|
|
124
|
+
}
|
|
125
|
+
tree.write(mainTsPath, mainSourceFile.getFullText());
|
|
126
|
+
}
|
|
127
|
+
if (options.sceneGraph === 'none') {
|
|
128
|
+
return await (0, utils_2.finishSetup)(tree);
|
|
129
|
+
}
|
|
130
|
+
const { path: sceneGraphPath } = await (0, enquirer_1.prompt)({
|
|
131
|
+
type: 'input',
|
|
132
|
+
name: 'path',
|
|
133
|
+
message: `Where to generate the SceneGraph component (from ${app.sourceRoot}) ?`,
|
|
134
|
+
result(value) {
|
|
135
|
+
if (value.endsWith('.ts')) {
|
|
136
|
+
value = value.slice(0, -3);
|
|
137
|
+
}
|
|
138
|
+
return (0, node_path_1.join)(app.sourceRoot, value);
|
|
139
|
+
},
|
|
140
|
+
validate(value) {
|
|
141
|
+
if (tree.exists(value + '.ts')) {
|
|
142
|
+
return `${value}.ts already exists.`;
|
|
143
|
+
}
|
|
144
|
+
return true;
|
|
145
|
+
},
|
|
146
|
+
});
|
|
147
|
+
(0, devkit_1.generateFiles)(tree, (0, node_path_1.join)(__dirname, 'files'), sceneGraphPath, { tmpl: '' });
|
|
148
|
+
if (options.sceneGraph === 'generate-only') {
|
|
149
|
+
return await (0, utils_2.finishSetup)(tree);
|
|
150
|
+
}
|
|
151
|
+
const { componentPath } = await (0, enquirer_1.prompt)({
|
|
152
|
+
type: 'input',
|
|
153
|
+
message: `Enter the path to the component (from ${app.sourceRoot})`,
|
|
154
|
+
name: 'componentPath',
|
|
155
|
+
validate(value) {
|
|
156
|
+
const fullPath = (0, node_path_1.join)(app.sourceRoot, value);
|
|
157
|
+
if (!value.endsWith('.ts') || !tree.exists(fullPath)) {
|
|
158
|
+
return `[NGT] Please use the path to the component TS file.`;
|
|
159
|
+
}
|
|
160
|
+
return true;
|
|
161
|
+
},
|
|
162
|
+
result(value) {
|
|
163
|
+
return (0, node_path_1.join)(app.sourceRoot, value);
|
|
164
|
+
},
|
|
165
|
+
});
|
|
166
|
+
const componentContent = tree.read(componentPath, 'utf-8');
|
|
167
|
+
const componentSourceFile = tsProject.createSourceFile(componentPath, componentContent, {
|
|
168
|
+
overwrite: true,
|
|
169
|
+
scriptKind: ts_morph_1.ScriptKind.TS,
|
|
170
|
+
});
|
|
171
|
+
const decorators = componentSourceFile.getDescendantsOfKind(ts_morph_1.SyntaxKind.Decorator);
|
|
172
|
+
const componentDecorators = decorators.filter((decorator) => decorator.getName() === 'Component');
|
|
173
|
+
if (componentDecorators.length !== 1) {
|
|
174
|
+
return await (0, utils_2.stopSetup)(tree, `There are no Component or more than one Component in ${componentPath}`);
|
|
175
|
+
}
|
|
176
|
+
// standalone is true or not exist
|
|
177
|
+
const isStandalone = componentContent.includes(`standalone: true`) || !componentContent.includes('standalone');
|
|
178
|
+
if (!isStandalone) {
|
|
179
|
+
return await (0, utils_2.stopSetup)(tree, `Component at ${componentPath} must be a standalone component.`);
|
|
180
|
+
}
|
|
181
|
+
const componentDecorator = componentDecorators[0];
|
|
182
|
+
const componentMetadata = componentDecorator.getArguments()[0];
|
|
183
|
+
const templateUrlMetadata = componentMetadata.getFirstDescendant((node) => {
|
|
184
|
+
return ts_morph_1.Node.isPropertyAssignment(node) && node.getName() === 'templateUrl';
|
|
185
|
+
});
|
|
186
|
+
if (templateUrlMetadata) {
|
|
187
|
+
const templateUrl = templateUrlMetadata.getInitializer().getLiteralValue?.();
|
|
188
|
+
if (!templateUrl) {
|
|
189
|
+
return await (0, utils_2.stopSetup)(tree, `Could not locate templateUrl in ${componentPath}`);
|
|
190
|
+
}
|
|
191
|
+
const templateUrlPath = (0, node_path_1.join)((0, node_path_1.dirname)(componentPath), templateUrl);
|
|
192
|
+
const templateContent = tree.read(templateUrlPath, 'utf8');
|
|
193
|
+
tree.write(templateUrlPath, `${options.sceneGraph === 'append' ? templateContent : ''}
|
|
194
|
+
<ngt-canvas>
|
|
195
|
+
<app-scene-graph *canvasContent />
|
|
196
|
+
</ngt-canvas>`);
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
const templateMetadata = componentMetadata.getFirstDescendant((node) => {
|
|
200
|
+
return ts_morph_1.Node.isPropertyAssignment(node) && node.getName() === 'template';
|
|
201
|
+
});
|
|
202
|
+
const template = templateMetadata.getInitializer();
|
|
203
|
+
template.setLiteralValue(`
|
|
204
|
+
${options.sceneGraph === 'append' ? template.getLiteralValue() : ''}
|
|
205
|
+
<ngt-canvas>
|
|
206
|
+
<app-scene-graph *canvasContent />
|
|
207
|
+
</ngt-canvas>
|
|
208
|
+
`);
|
|
209
|
+
}
|
|
210
|
+
// update import statements
|
|
211
|
+
let relativeSceneGraphPath = (0, node_path_1.relative)((0, node_path_1.dirname)(componentPath), (0, node_path_1.join)(sceneGraphPath, 'scene-graph'));
|
|
212
|
+
if (!relativeSceneGraphPath.startsWith('.')) {
|
|
213
|
+
relativeSceneGraphPath = `./${relativeSceneGraphPath}`;
|
|
214
|
+
}
|
|
215
|
+
componentSourceFile.addImportDeclarations([
|
|
216
|
+
{ moduleSpecifier: 'angular-three/dom', namedImports: ['NgtCanvas'] },
|
|
217
|
+
{ moduleSpecifier: relativeSceneGraphPath, namedImports: ['SceneGraph'] },
|
|
218
|
+
]);
|
|
219
|
+
// update imports array
|
|
220
|
+
const importsMetadata = componentMetadata.getFirstDescendant((node) => {
|
|
221
|
+
return ts_morph_1.Node.isPropertyAssignment(node) && node.getName() === 'imports';
|
|
222
|
+
});
|
|
223
|
+
if (importsMetadata) {
|
|
224
|
+
const currentImportsExpression = importsMetadata.getInitializer();
|
|
225
|
+
currentImportsExpression.addElements(['NgtCanvas', 'SceneGraph']);
|
|
226
|
+
}
|
|
227
|
+
else {
|
|
228
|
+
componentMetadata.addPropertyAssignment({
|
|
229
|
+
name: 'imports',
|
|
230
|
+
initializer: `[NgtCanvas, SceneGraph]`,
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
await componentSourceFile.save();
|
|
234
|
+
tree.write(componentPath, componentSourceFile.getFullText());
|
|
235
|
+
return await (0, utils_2.finishSetup)(tree);
|
|
236
|
+
}
|
|
237
|
+
exports.default = initGenerator;
|
|
238
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../../../../libs/plugin/src/generators/init/init.ts"],"names":[],"mappings":"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"}
|