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.
Files changed (58) hide show
  1. package/README.md +11 -0
  2. package/generators.json +46 -0
  3. package/migrations.json +16 -0
  4. package/package.json +55 -0
  5. package/src/generators/aux/aux.d.ts +3 -0
  6. package/src/generators/aux/aux.js +60 -0
  7. package/src/generators/aux/aux.js.map +1 -0
  8. package/src/generators/aux/compat.d.ts +2 -0
  9. package/src/generators/aux/compat.js +7 -0
  10. package/src/generators/aux/compat.js.map +1 -0
  11. package/src/generators/aux/schema.json +7 -0
  12. package/src/generators/gltf/compat.d.ts +2 -0
  13. package/src/generators/gltf/compat.js +7 -0
  14. package/src/generators/gltf/compat.js.map +1 -0
  15. package/src/generators/gltf/files/__fileName__.ts__tmpl__ +93 -0
  16. package/src/generators/gltf/generate-ngt.d.ts +32 -0
  17. package/src/generators/gltf/generate-ngt.js +199 -0
  18. package/src/generators/gltf/generate-ngt.js.map +1 -0
  19. package/src/generators/gltf/gltf.d.ts +32 -0
  20. package/src/generators/gltf/gltf.js +131 -0
  21. package/src/generators/gltf/gltf.js.map +1 -0
  22. package/src/generators/gltf/schema.json +176 -0
  23. package/src/generators/index.d.ts +2 -0
  24. package/src/generators/index.js +9 -0
  25. package/src/generators/index.js.map +1 -0
  26. package/src/generators/init/compat.d.ts +2 -0
  27. package/src/generators/init/compat.js +7 -0
  28. package/src/generators/init/compat.js.map +1 -0
  29. package/src/generators/init/files/scene-graph.ts__tmpl__ +29 -0
  30. package/src/generators/init/init.d.ts +6 -0
  31. package/src/generators/init/init.js +238 -0
  32. package/src/generators/init/init.js.map +1 -0
  33. package/src/generators/init/schema.json +37 -0
  34. package/src/generators/init/utils.d.ts +5 -0
  35. package/src/generators/init/utils.js +38 -0
  36. package/src/generators/init/utils.js.map +1 -0
  37. package/src/generators/migrate-tweakpane/compat.d.ts +2 -0
  38. package/src/generators/migrate-tweakpane/compat.js +7 -0
  39. package/src/generators/migrate-tweakpane/compat.js.map +1 -0
  40. package/src/generators/migrate-tweakpane/migrate-tweakpane.d.ts +6 -0
  41. package/src/generators/migrate-tweakpane/migrate-tweakpane.js +35 -0
  42. package/src/generators/migrate-tweakpane/migrate-tweakpane.js.map +1 -0
  43. package/src/generators/migrate-tweakpane/schema.json +14 -0
  44. package/src/index.d.ts +1 -0
  45. package/src/index.js +3 -0
  46. package/src/index.js.map +1 -0
  47. package/src/migrations/migrate-tweakpane/compat.d.ts +2 -0
  48. package/src/migrations/migrate-tweakpane/compat.js +7 -0
  49. package/src/migrations/migrate-tweakpane/compat.js.map +1 -0
  50. package/src/migrations/migrate-tweakpane/migrate-tweakpane.d.ts +2 -0
  51. package/src/migrations/migrate-tweakpane/migrate-tweakpane.js +9 -0
  52. package/src/migrations/migrate-tweakpane/migrate-tweakpane.js.map +1 -0
  53. package/src/utils.d.ts +2 -0
  54. package/src/utils.js +33 -0
  55. package/src/utils.js.map +1 -0
  56. package/src/versions.d.ts +5 -0
  57. package/src/versions.js +39 -0
  58. 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":";;AAkGA,sCAmGC;AArMD,uCAAqE;AACrE,yCAA6D;AAC7D,iDAA6C;AAgC7C,sCAAsC;AACtC,SAAS,gBAAgB,CAAC,IAAU,EAAE,OAA4B,EAAE,OAA4C;IAC/G,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC;IAExB,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,IAAA,cAAK,EAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACzD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IAE/D,MAAM,cAAc,GAAG;QACtB,GAAG;QACH,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,SAAS,EAAE,OAAO,CAAC,SAAS;KAC5B,CAAC;IAEF,MAAM,gBAAgB,GAAG;QACxB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;QAC5C,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK;QACnF,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,UAAU,EAAE,OAAO,CAAC,UAAU;KAC9B,CAAC;IAEF,MAAM,iBAAiB,GAAG,IAAA,gBAAI,EAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IAC7D,MAAM,SAAS,GAAG,IAAA,mBAAO,EAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAE1C,MAAM,iBAAiB,GACtB,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,KAAK,IAAI,IAAI;QACzC,CAAC,CAAC,eAAe,OAAO,CAAC,KAAK,IAAI;QAClC,CAAC,CAAC,OAAO,CAAC,SAAS;YAClB,CAAC,CAAC,oBAAoB;YACtB,CAAC,CAAC,EAAE,CAAC;IAER,MAAM,QAAQ,GAAG,GAAG,OAAO,CAAC,cAAc,IAAI,QAAQ,EAAE,CAAC;IAEzD,MAAM,qBAAqB,GAAG,SAAS,GAAG,gBAAgB,CAAC;IAC3D,MAAM,wBAAwB,GAAG,SAAS,GAAG,cAAc,CAAC;IAC5D,MAAM,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC;IACpC,MAAM,kBAAkB,GAAG,QAAQ,GAAG,YAAY,CAAC;IAEnD,OAAO;QACN,GAAG;QACH,QAAQ;QACR,QAAQ;QACR,SAAS;QACT,cAAc;QACd,gBAAgB;QAChB,iBAAiB;QACjB,SAAS;QACT,iBAAiB;QACjB,qBAAqB;QACrB,wBAAwB;QACxB,QAAQ;QACR,kBAAkB;KAClB,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,aAAa,CAAC,IAAU,EAAE,OAA4B;IAC3E,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;IACnD,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC;IAE5E,MAAM,EACL,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,iBAAiB,EACjB,GAAG,EACH,cAAc,EACd,gBAAgB,EAChB,SAAS,EACT,iBAAiB,EACjB,qBAAqB,EACrB,wBAAwB,EACxB,QAAQ,EACR,kBAAkB,GAClB,GAAG,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAE7C,EAAE;IACF,4DAA4D;IAC5D,EAAE;IACF,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,IAAI,oBAAoB,GAAuB,SAAS,CAAC;IACzD,IAAI,WAAW,GAAsD,SAAS,CAAC,CAAC,kDAAkD;IAElI,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACvB,oBAAoB,GAAG,IAAA,mBAAO,EAAC,iBAAiB,GAAG,kBAAkB,CAAC,CAAC;QACvE,MAAM,aAAa,CAAC,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,CAAC,MAAM,CAAC,gBAAgB,EAAE,cAAc,CAAC,CAAC,CAAC;QAC9G,IAAI,GAAG,gBAAgB,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,CAAC;QAEjE,GAAG,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;QACvC,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;QACxD,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;IACjC,CAAC;IAED,MAAM,SAAS,GAAG,oBAAoB,IAAI,iBAAiB,CAAC;IAE5D,EAAE;IACF,iBAAiB;IACjB,EAAE;IACF,GAAG,CAAC,KAAK,CAAC,iBAAiB,EAAE,SAAS,CAAC,CAAC;IAExC,IAAI,CAAC;QACJ,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QACpD,MAAM,QAAQ,GAAG,IAAI,YAAY,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;QACxD,MAAM,WAAW,GAAG,IAAI,0BAAW,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAEhE,MAAM,KAAK,GAAG,WAAW,CAAC,QAAQ,EAAE,CAAC;QACrC,MAAM,eAAe,GAAG,WAAW,CAAC,kBAAkB,EAAE,CAAC;QAEzD,IAAI,QAAQ,GACX,CAAC,oBAAoB,IAAI,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAA,oBAAQ,EAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAEpG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/D,QAAQ,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,CAAC;QAED,IAAA,sBAAa,EACZ,IAAI,EACJ,IAAA,gBAAI,EAAC,SAAS,EAAE,OAAO,CAAC,EACxB,SAAS,EACT,MAAM,CAAC,MAAM,CAAC,eAAe,EAAE;YAC9B,IAAI,EAAE,EAAE;YACR,KAAK;YACL,QAAQ;YACR,SAAS;YACT,QAAQ;YACR,UAAU,EAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE;YAC1C,kBAAkB,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC;YACjD,OAAO,EAAE,IAAI;YACb,QAAQ;YACR,qBAAqB;YACrB,wBAAwB;YACxB,kBAAkB;YAClB,QAAQ;YACR,WAAW,EAAE,iBAAiB;YAC9B,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,IAAI;SACJ,CAAC,CACF,CAAC;QAEF,MAAM,IAAA,oBAAW,EAAC,IAAI,CAAC,CAAC;QAExB,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACrB,MAAM,UAAU,GAAG,IAAA,gBAAI,EAAC,SAAS,EAAE,GAAG,QAAQ,KAAK,CAAC,CAAC;YACrD,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YACpD,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;YAC3B,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACzB,CAAC;IACF,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACf,WAAW,EAAE,OAAO,EAAE,CAAC;QACvB,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACxB,CAAC;YAAS,CAAC;QACV,GAAG,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;QACtC,WAAW,EAAE,OAAO,EAAE,CAAC;IACxB,CAAC;AACF,CAAC;AAED,kBAAe,aAAa,CAAC"}
@@ -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,2 @@
1
+ export { default as gltfGenerator, type GltfGeneratorSchema } from './gltf/gltf';
2
+ export { default as initGenerator, type InitGeneratorSchema } from './init/init';
@@ -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,2 @@
1
+ declare const _default: (generatorOptions: import("./init").InitGeneratorSchema) => (tree: any, context: any) => Promise<any>;
2
+ export default _default;
@@ -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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"}