@directivegames/genesys.sdk 3.2.2 → 3.2.4

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 (82) hide show
  1. package/README.md +60 -60
  2. package/dist/src/core/cli.js +22 -22
  3. package/dist/src/templates/scripts/genesys/genesys-mcp.js +25 -25
  4. package/dist/src/templates/scripts/genesys/mcp/editor-functions.js +4 -4
  5. package/dist/src/templates/src/templates/vehicle/src/ui-hints.js +30 -30
  6. package/package.json +176 -176
  7. package/scripts/post-install.ts +143 -143
  8. package/src/asset-pack/.gitattributes +88 -88
  9. package/src/asset-pack/eslint.config.js +45 -45
  10. package/src/asset-pack/gitignore +11 -11
  11. package/src/asset-pack/scripts/postinstall.ts +81 -81
  12. package/src/asset-pack/tsconfig.json +33 -33
  13. package/src/templates/.cursor/mcp.json +20 -20
  14. package/src/templates/.cursorignore +2 -2
  15. package/src/templates/.gitattributes +88 -88
  16. package/src/templates/.vscode/settings.json +6 -6
  17. package/src/templates/AGENTS.md +86 -86
  18. package/src/templates/README.md +24 -24
  19. package/src/templates/eslint.config.js +45 -45
  20. package/src/templates/gitignore +11 -11
  21. package/src/templates/index.html +34 -34
  22. package/src/templates/pnpm-lock.yaml +3676 -3676
  23. package/src/templates/scripts/genesys/build-project.ts +51 -51
  24. package/src/templates/scripts/genesys/calc-bounding-box.ts +272 -272
  25. package/src/templates/scripts/genesys/common.ts +46 -46
  26. package/src/templates/scripts/genesys/const.ts +9 -9
  27. package/src/templates/scripts/genesys/dev/dump-default-scene.ts +11 -11
  28. package/src/templates/scripts/genesys/dev/generate-manifest.ts +146 -146
  29. package/src/templates/scripts/genesys/dev/launcher.ts +46 -46
  30. package/src/templates/scripts/genesys/dev/storage-provider.ts +229 -229
  31. package/src/templates/scripts/genesys/dev/update-template-scenes.ts +84 -84
  32. package/src/templates/scripts/genesys/doc-server.ts +16 -16
  33. package/src/templates/scripts/genesys/genesys-mcp.ts +526 -526
  34. package/src/templates/scripts/genesys/mcp/doc-tools.ts +86 -86
  35. package/src/templates/scripts/genesys/mcp/editor-functions.ts +151 -151
  36. package/src/templates/scripts/genesys/mcp/editor-tools.ts +73 -73
  37. package/src/templates/scripts/genesys/mcp/get-scene-state.ts +35 -35
  38. package/src/templates/scripts/genesys/mcp/run-subprocess.ts +30 -30
  39. package/src/templates/scripts/genesys/mcp/search-actors.ts +858 -858
  40. package/src/templates/scripts/genesys/mcp/search-assets.ts +380 -380
  41. package/src/templates/scripts/genesys/mcp/utils.ts +281 -281
  42. package/src/templates/scripts/genesys/misc.ts +42 -42
  43. package/src/templates/scripts/genesys/mock.ts +6 -6
  44. package/src/templates/scripts/genesys/place-actors.ts +179 -179
  45. package/src/templates/scripts/genesys/post-install.ts +30 -30
  46. package/src/templates/scripts/genesys/prefab.schema.json +84 -84
  47. package/src/templates/scripts/genesys/remove-engine-comments.ts +134 -134
  48. package/src/templates/scripts/genesys/run-mcp-inspector.bat +4 -4
  49. package/src/templates/scripts/genesys/storageProvider.ts +182 -182
  50. package/src/templates/scripts/genesys/validate-prefabs.ts +138 -138
  51. package/src/templates/src/index.ts +22 -22
  52. package/src/templates/src/templates/firstPerson/assets/default.genesys-scene +165 -165
  53. package/src/templates/src/templates/firstPerson/src/game.ts +39 -39
  54. package/src/templates/src/templates/firstPerson/src/player.ts +63 -63
  55. package/src/templates/src/templates/fps/assets/default.genesys-scene +9459 -9459
  56. package/src/templates/src/templates/fps/src/game.ts +39 -39
  57. package/src/templates/src/templates/fps/src/player.ts +69 -69
  58. package/src/templates/src/templates/fps/src/weapon.ts +54 -54
  59. package/src/templates/src/templates/freeCamera/assets/default.genesys-scene +165 -165
  60. package/src/templates/src/templates/freeCamera/src/game.ts +39 -39
  61. package/src/templates/src/templates/freeCamera/src/player.ts +45 -45
  62. package/src/templates/src/templates/sideScroller/assets/default.genesys-scene +121 -121
  63. package/src/templates/src/templates/sideScroller/src/const.ts +45 -45
  64. package/src/templates/src/templates/sideScroller/src/game.ts +122 -122
  65. package/src/templates/src/templates/sideScroller/src/level-generator.ts +361 -361
  66. package/src/templates/src/templates/sideScroller/src/player.ts +125 -125
  67. package/src/templates/src/templates/thirdPerson/assets/default.genesys-scene +165 -165
  68. package/src/templates/src/templates/thirdPerson/src/game.ts +39 -39
  69. package/src/templates/src/templates/thirdPerson/src/player.ts +61 -61
  70. package/src/templates/src/templates/vehicle/assets/default.genesys-scene +225 -225
  71. package/src/templates/src/templates/vehicle/src/base-vehicle.ts +145 -145
  72. package/src/templates/src/templates/vehicle/src/game.ts +43 -43
  73. package/src/templates/src/templates/vehicle/src/mesh-vehicle.ts +191 -191
  74. package/src/templates/src/templates/vehicle/src/player.ts +109 -109
  75. package/src/templates/src/templates/vehicle/src/primitive-vehicle.ts +266 -266
  76. package/src/templates/src/templates/vehicle/src/ui-hints.ts +101 -101
  77. package/src/templates/src/templates/vr-game/assets/default.genesys-scene +246 -246
  78. package/src/templates/src/templates/vr-game/src/auto-imports.ts +1 -1
  79. package/src/templates/src/templates/vr-game/src/game.ts +66 -66
  80. package/src/templates/src/templates/vr-game/src/sample-vr-actor.ts +26 -26
  81. package/src/templates/tsconfig.json +34 -34
  82. package/src/templates/vite.config.ts +52 -52
package/package.json CHANGED
@@ -1,176 +1,176 @@
1
- {
2
- "name": "@directivegames/genesys.sdk",
3
- "version": "3.2.2",
4
- "description": "Genesys SDK - A development toolkit for game development",
5
- "author": "Directive Games",
6
- "main": "index.js",
7
- "type": "module",
8
- "pnpm": {
9
- "onlyBuiltDependencies": [
10
- "electron"
11
- ]
12
- },
13
- "files": [
14
- "dist/src",
15
- "src/templates",
16
- "src/asset-pack",
17
- "scripts"
18
- ],
19
- "bin": {
20
- "genesys-sdk": "./dist/src/core/cli.js"
21
- },
22
- "scripts": {
23
- "postinstall": "pnpm exec tsx scripts/post-install.ts",
24
- "dev:main": "tsc --watch -p tsconfig.json",
25
- "dev:preload": "tsc --watch -p tsconfig.preload.json",
26
- "dev:electron": "electron dist/src/electron/backend/main.js",
27
- "dev:watch": "pnpm compile && concurrently -k -n MAIN,PRELOAD \"pnpm dev:main\" \"pnpm dev:preload\" nodemon",
28
- "dev": "pnpm compile && concurrently -k -n MAIN,PRELOAD \"pnpm dev:main\" \"pnpm dev:preload\" \"pnpm dev:electron\"",
29
- "dev:hosted": "pnpm compile && concurrently -k -n MAIN,PRELOAD \"pnpm dev:main\" \"pnpm dev:preload\" \"dotenv -v DEV_HOSTED=true pnpm dev:electron\"",
30
- "dev:vite-old": "vite",
31
- "dev-old": "pnpm compile && concurrently -k -n MAIN,PRELOAD,VITE \"pnpm dev:main\" \"pnpm dev:preload\" \"pnpm dev:vite-old\" \"pnpm dev:electron-old\"",
32
- "compile": "tsc -p tsconfig.json && tsc -p tsconfig.preload.json",
33
- "build": "vite build && pnpm compile",
34
- "dist": "pnpm build && electron-builder",
35
- "lint": "eslint . --fix --ext .ts,.tsx",
36
- "pack": "pnpm build && pnpm pack",
37
- "cli": "pnpm exec tsx src/core/cli.ts",
38
- "cli:new": "pnpm exec tsx src/core/cli.ts new",
39
- "cli:build": "pnpm exec tsx src/core/cli.ts build",
40
- "cli:new-asset-pack": "pnpm exec tsx src/core/cli.ts new-asset-pack"
41
- },
42
- "build": {
43
- "artifactName": "Genesys-Setup-${version}.${ext}",
44
- "publish": [
45
- {
46
- "provider": "github",
47
- "releaseType": "release",
48
- "owner": "directivegames",
49
- "repo": "genesys.sdk-release",
50
- "private": true
51
- }
52
- ],
53
- "asar": true,
54
- "asarUnpack": [
55
- "node_modules/@esbuild/**/*",
56
- "node_modules/esbuild/**/*"
57
- ],
58
- "appId": "com.directivegames.genesys.sdk",
59
- "productName": "Genesys",
60
- "files": [
61
- "dist/**/*",
62
- {
63
- "from": "node_modules/.pnpm/three@0.177.0/node_modules/three/examples",
64
- "to": "node_modules/three/examples"
65
- }
66
- ],
67
- "extraResources": [
68
- {
69
- "from": "src/templates",
70
- "to": "vendor/src/templates"
71
- },
72
- {
73
- "from": "src/asset-pack",
74
- "to": "vendor/src/asset-pack"
75
- }
76
- ],
77
- "directories": {
78
- "buildResources": "build"
79
- },
80
- "extraMetadata": {
81
- "main": "dist/src/electron/backend/main.js"
82
- },
83
- "protocols": [
84
- {
85
- "name": "genesys",
86
- "schemes": [
87
- "genesys"
88
- ]
89
- },
90
- {
91
- "name": "genesys-dev",
92
- "schemes": [
93
- "genesys-dev"
94
- ]
95
- }
96
- ],
97
- "win": {
98
- "target": "nsis"
99
- },
100
- "mac": {
101
- "target": "dmg",
102
- "hardenedRuntime": true,
103
- "gatekeeperAssess": false,
104
- "entitlements": "build/entitlements.mac.plist",
105
- "entitlementsInherit": "build/entitlements.mac.plist"
106
- }
107
- },
108
- "dependencies": {
109
- "@electron/rebuild": "^4.0.1",
110
- "@emotion/react": "^11.14.0",
111
- "@emotion/styled": "^11.14.0",
112
- "@mui/icons-material": "^7.1.0",
113
- "@mui/lab": "^7.0.0-beta.12",
114
- "@mui/material": "^7.1.0",
115
- "chokidar": "^4.0.3",
116
- "commander": "^14.0.2",
117
- "core-util-is": "^1.0.3",
118
- "cors": "^2.8.5",
119
- "electron-devtools-installer": "^4.0.0",
120
- "electron-is-dev": "^3.0.1",
121
- "electron-log": "^5.4.3",
122
- "electron-store": "^11.0.2",
123
- "electron-updater": "^6.6.2",
124
- "esbuild": "^0.25.11",
125
- "express": "^5.1.0",
126
- "fix-path": "^4.0.0",
127
- "genesys.js": "^3.1.24",
128
- "jsdom": "^27.0.0",
129
- "minimatch": "^10.0.1",
130
- "multer": "^2.0.2",
131
- "node-abi": "^4.14.0",
132
- "react": "^19.2.0",
133
- "react-dom": "^19.2.0",
134
- "three": "^0.177.0",
135
- "upath": "^2.0.1",
136
- "ws": "^8.18.2",
137
- "zod": "^3.24.4"
138
- },
139
- "devDependencies": {
140
- "@electron/notarize": "^3.1.0",
141
- "@modelcontextprotocol/sdk": "^1.22.0",
142
- "@types/cors": "^2.8.18",
143
- "@types/electron-store": "^1.3.1",
144
- "@types/express": "^5.0.2",
145
- "@types/jsdom": "^27.0.0",
146
- "@types/minimatch": "^5.1.2",
147
- "@types/multer": "^1.4.12",
148
- "@types/react": "^19.2.0",
149
- "@types/react-dom": "^19.2.0",
150
- "@types/three": "^0.177.0",
151
- "@types/ws": "^8.18.1",
152
- "@typescript-eslint/eslint-plugin": "^8.29.1",
153
- "@typescript-eslint/parser": "^8.29.1",
154
- "@vitejs/plugin-react": "^4.4.1",
155
- "ajv": "^8.17.1",
156
- "concurrently": "^9.1.2",
157
- "dotenv-cli": "^8.0.0",
158
- "electron": "^39.2.3",
159
- "electron-builder": "^26.0.12",
160
- "eslint": "^9.24.0",
161
- "eslint-plugin-import": "^2.31.0",
162
- "get-port": "^7.1.0",
163
- "nanoid": "^5.1.6",
164
- "nodemon": "^3.1.10",
165
- "ts-morph": "^27.0.2",
166
- "tsc-watch": "^7.1.0",
167
- "tsx": "^4.20.6",
168
- "typescript": "^5.8.3",
169
- "vite": "^6.3.5",
170
- "vite-plugin-mkcert": "^1.17.9",
171
- "vite-plugin-node-polyfills": "^0.24.0",
172
- "wait-on": "^8.0.4",
173
- "yaml": "^2.6.1",
174
- "zod-to-json-schema": "^3.25.0"
175
- }
176
- }
1
+ {
2
+ "name": "@directivegames/genesys.sdk",
3
+ "version": "3.2.4",
4
+ "description": "Genesys SDK - A development toolkit for game development",
5
+ "author": "Directive Games",
6
+ "main": "index.js",
7
+ "type": "module",
8
+ "pnpm": {
9
+ "onlyBuiltDependencies": [
10
+ "electron"
11
+ ]
12
+ },
13
+ "files": [
14
+ "dist/src",
15
+ "src/templates",
16
+ "src/asset-pack",
17
+ "scripts"
18
+ ],
19
+ "bin": {
20
+ "genesys-sdk": "./dist/src/core/cli.js"
21
+ },
22
+ "scripts": {
23
+ "postinstall": "pnpm exec tsx scripts/post-install.ts",
24
+ "dev:main": "tsc --watch -p tsconfig.json",
25
+ "dev:preload": "tsc --watch -p tsconfig.preload.json",
26
+ "dev:electron": "electron dist/src/electron/backend/main.js",
27
+ "dev:watch": "pnpm compile && concurrently -k -n MAIN,PRELOAD \"pnpm dev:main\" \"pnpm dev:preload\" nodemon",
28
+ "dev": "pnpm compile && concurrently -k -n MAIN,PRELOAD \"pnpm dev:main\" \"pnpm dev:preload\" \"pnpm dev:electron\"",
29
+ "dev:hosted": "pnpm compile && concurrently -k -n MAIN,PRELOAD \"pnpm dev:main\" \"pnpm dev:preload\" \"dotenv -v DEV_HOSTED=true pnpm dev:electron\"",
30
+ "dev:vite-old": "vite",
31
+ "dev-old": "pnpm compile && concurrently -k -n MAIN,PRELOAD,VITE \"pnpm dev:main\" \"pnpm dev:preload\" \"pnpm dev:vite-old\" \"pnpm dev:electron-old\"",
32
+ "compile": "tsc -p tsconfig.json && tsc -p tsconfig.preload.json",
33
+ "build": "vite build && pnpm compile",
34
+ "dist": "pnpm build && electron-builder",
35
+ "lint": "eslint . --fix --ext .ts,.tsx",
36
+ "pack": "pnpm build && pnpm pack",
37
+ "cli": "pnpm exec tsx src/core/cli.ts",
38
+ "cli:new": "pnpm exec tsx src/core/cli.ts new",
39
+ "cli:build": "pnpm exec tsx src/core/cli.ts build",
40
+ "cli:new-asset-pack": "pnpm exec tsx src/core/cli.ts new-asset-pack"
41
+ },
42
+ "build": {
43
+ "artifactName": "Genesys-Setup-${version}.${ext}",
44
+ "publish": [
45
+ {
46
+ "provider": "github",
47
+ "releaseType": "release",
48
+ "owner": "directivegames",
49
+ "repo": "genesys.sdk-release",
50
+ "private": true
51
+ }
52
+ ],
53
+ "asar": true,
54
+ "asarUnpack": [
55
+ "node_modules/@esbuild/**/*",
56
+ "node_modules/esbuild/**/*"
57
+ ],
58
+ "appId": "com.directivegames.genesys.sdk",
59
+ "productName": "Genesys",
60
+ "files": [
61
+ "dist/**/*",
62
+ {
63
+ "from": "node_modules/.pnpm/three@0.177.0/node_modules/three/examples",
64
+ "to": "node_modules/three/examples"
65
+ }
66
+ ],
67
+ "extraResources": [
68
+ {
69
+ "from": "src/templates",
70
+ "to": "vendor/src/templates"
71
+ },
72
+ {
73
+ "from": "src/asset-pack",
74
+ "to": "vendor/src/asset-pack"
75
+ }
76
+ ],
77
+ "directories": {
78
+ "buildResources": "build"
79
+ },
80
+ "extraMetadata": {
81
+ "main": "dist/src/electron/backend/main.js"
82
+ },
83
+ "protocols": [
84
+ {
85
+ "name": "genesys",
86
+ "schemes": [
87
+ "genesys"
88
+ ]
89
+ },
90
+ {
91
+ "name": "genesys-dev",
92
+ "schemes": [
93
+ "genesys-dev"
94
+ ]
95
+ }
96
+ ],
97
+ "win": {
98
+ "target": "nsis"
99
+ },
100
+ "mac": {
101
+ "target": "dmg",
102
+ "hardenedRuntime": true,
103
+ "gatekeeperAssess": false,
104
+ "entitlements": "build/entitlements.mac.plist",
105
+ "entitlementsInherit": "build/entitlements.mac.plist"
106
+ }
107
+ },
108
+ "dependencies": {
109
+ "@electron/rebuild": "^4.0.1",
110
+ "@emotion/react": "^11.14.0",
111
+ "@emotion/styled": "^11.14.0",
112
+ "@mui/icons-material": "^7.1.0",
113
+ "@mui/lab": "^7.0.0-beta.12",
114
+ "@mui/material": "^7.1.0",
115
+ "chokidar": "^4.0.3",
116
+ "commander": "^14.0.2",
117
+ "core-util-is": "^1.0.3",
118
+ "cors": "^2.8.5",
119
+ "electron-devtools-installer": "^4.0.0",
120
+ "electron-is-dev": "^3.0.1",
121
+ "electron-log": "^5.4.3",
122
+ "electron-store": "^11.0.2",
123
+ "electron-updater": "^6.6.2",
124
+ "esbuild": "^0.25.11",
125
+ "express": "^5.1.0",
126
+ "fix-path": "^4.0.0",
127
+ "genesys.js": "^3.1.24",
128
+ "jsdom": "^27.0.0",
129
+ "minimatch": "^10.0.1",
130
+ "multer": "^2.0.2",
131
+ "node-abi": "^4.14.0",
132
+ "react": "^19.2.0",
133
+ "react-dom": "^19.2.0",
134
+ "three": "^0.177.0",
135
+ "upath": "^2.0.1",
136
+ "ws": "^8.18.2",
137
+ "zod": "^3.24.4"
138
+ },
139
+ "devDependencies": {
140
+ "@electron/notarize": "^3.1.0",
141
+ "@modelcontextprotocol/sdk": "^1.22.0",
142
+ "@types/cors": "^2.8.18",
143
+ "@types/electron-store": "^1.3.1",
144
+ "@types/express": "^5.0.2",
145
+ "@types/jsdom": "^27.0.0",
146
+ "@types/minimatch": "^5.1.2",
147
+ "@types/multer": "^1.4.12",
148
+ "@types/react": "^19.2.0",
149
+ "@types/react-dom": "^19.2.0",
150
+ "@types/three": "^0.177.0",
151
+ "@types/ws": "^8.18.1",
152
+ "@typescript-eslint/eslint-plugin": "^8.29.1",
153
+ "@typescript-eslint/parser": "^8.29.1",
154
+ "@vitejs/plugin-react": "^4.4.1",
155
+ "ajv": "^8.17.1",
156
+ "concurrently": "^9.1.2",
157
+ "dotenv-cli": "^8.0.0",
158
+ "electron": "^39.2.3",
159
+ "electron-builder": "^26.0.12",
160
+ "eslint": "^9.24.0",
161
+ "eslint-plugin-import": "^2.31.0",
162
+ "get-port": "^7.1.0",
163
+ "nanoid": "^5.1.6",
164
+ "nodemon": "^3.1.10",
165
+ "ts-morph": "^27.0.2",
166
+ "tsc-watch": "^7.1.0",
167
+ "tsx": "^4.20.6",
168
+ "typescript": "^5.8.3",
169
+ "vite": "^6.3.5",
170
+ "vite-plugin-mkcert": "^1.17.9",
171
+ "vite-plugin-node-polyfills": "^0.24.0",
172
+ "wait-on": "^8.0.4",
173
+ "yaml": "^2.6.1",
174
+ "zod-to-json-schema": "^3.25.0"
175
+ }
176
+ }
@@ -1,143 +1,143 @@
1
- import fs from 'fs';
2
- import path from 'path';
3
-
4
- import YAML from 'yaml';
5
-
6
- interface PackageJson {
7
- dependencies?: Record<string, string>;
8
- devDependencies?: Record<string, string>;
9
- name?: string;
10
- }
11
-
12
- interface PnpmLockFile {
13
- importers?: Record<string, {
14
- dependencies?: Record<string, {
15
- specifier: string;
16
- version: string;
17
- }>;
18
- devDependencies?: Record<string, {
19
- specifier: string;
20
- version: string;
21
- }>;
22
- }>;
23
- }
24
-
25
- function generateDependenciesFile(): void {
26
- try {
27
- // Read main package.json to get dependency lists
28
- const packageJsonPath = path.join(process.cwd(), 'package.json');
29
- const packageJsonContent = fs.readFileSync(packageJsonPath, 'utf-8');
30
- const packageJson: PackageJson = JSON.parse(packageJsonContent);
31
-
32
- // Read pnpm-lock.yaml to get exact versions
33
- const pnpmLockPath = path.join(process.cwd(), 'pnpm-lock.yaml');
34
- if (!fs.existsSync(pnpmLockPath)) {
35
- // this is a valid case when this package is installed as a dependency of another package
36
- console.log('⚠️ Could not read pnpm-lock.yaml, skipping dependency versions');
37
- return;
38
- }
39
- const pnpmLockContent = fs.readFileSync(pnpmLockPath, 'utf-8');
40
- const pnpmLock: PnpmLockFile = YAML.parse(pnpmLockContent);
41
-
42
- // Extract dependency lists from both package.json files
43
- const mainDependencyNames = Object.keys(packageJson.dependencies ?? {});
44
- const mainDevDependencyNames = Object.keys(packageJson.devDependencies ?? {});
45
-
46
- // Merge all dependency names, removing duplicates
47
- const allDependencyNames = [...new Set([...mainDependencyNames])];
48
- const allDevDependencyNames = [...new Set([...mainDevDependencyNames])];
49
-
50
- // Helper function to extract version from pnpm lock entry
51
- const extractVersion = (versionString: string): string => {
52
- // pnpm versions can include peer dependency info in parentheses, e.g., "11.14.0(@types/react@19.2.7)(react@19.2.0)"
53
- // We only want the base version number
54
- return versionString.split('(')[0];
55
- };
56
-
57
- // Get exact versions from pnpm-lock.yaml
58
- const dependencies: Record<string, string> = {};
59
- const devDependencies: Record<string, string> = {};
60
-
61
- // Get importers (root workspace)
62
- const rootImporter = pnpmLock.importers?.['.'];
63
-
64
- // Process production dependencies
65
- for (const depName of allDependencyNames) {
66
- // Check root workspace first
67
- let version = rootImporter?.dependencies?.[depName]?.version;
68
- if (version) {
69
- dependencies[depName] = extractVersion(version);
70
- }
71
- }
72
-
73
- // Process dev dependencies
74
- for (const depName of allDevDependencyNames) {
75
- // Check root workspace first
76
- let version = rootImporter?.devDependencies?.[depName]?.version;
77
- if (version) {
78
- devDependencies[depName] = extractVersion(version);
79
- }
80
- }
81
-
82
- // Generate TypeScript content
83
- const tsContent = `/**
84
- * Auto-generated file containing all package dependencies and their exact installed versions.
85
- * This file is generated by the post-install script.
86
- * Do not edit manually - it will be overwritten on next install.
87
- *
88
- * Versions are extracted from pnpm-lock.yaml to show exact installed versions,
89
- * not the version ranges from package.json.
90
- *
91
- * Includes dependencies from the main package.
92
- */
93
-
94
- export const DEPENDENCIES = {
95
- ${Object.entries(dependencies)
96
- .map(([name, version]) => ` '${name}': '${version}',`)
97
- .join('\n')}
98
- } as const;
99
-
100
- export const DEV_DEPENDENCIES = {
101
- ${Object.entries(devDependencies)
102
- .map(([name, version]) => ` '${name}': '${version}',`)
103
- .join('\n')}
104
- } as const;
105
-
106
- export const ALL_DEPENDENCIES = {
107
- ...DEPENDENCIES,
108
- ...DEV_DEPENDENCIES,
109
- } as const;
110
-
111
- export type DependencyName = keyof typeof ALL_DEPENDENCIES;
112
- `;
113
-
114
- // Write the TypeScript file
115
- if (!fs.existsSync(path.join(process.cwd(), 'src'))) {
116
- console.log('⚠️ src directory not found, skipping dependencies.ts file generation');
117
- return;
118
- }
119
- const outputPath = path.join(process.cwd(), 'src', 'dependencies.ts');
120
- fs.writeFileSync(outputPath, tsContent, 'utf-8');
121
-
122
- console.log('✅ Dependencies file generated successfully at src/dependencies.ts');
123
- console.log(`📦 Found ${Object.keys(dependencies).length} production dependencies with exact versions`);
124
- console.log(`🔧 Found ${Object.keys(devDependencies).length} development dependencies with exact versions`);
125
- } catch (error) {
126
- console.error('❌ Error generating dependencies file:', error);
127
- process.exit(1);
128
- }
129
- }
130
-
131
- function deleteEngineAssets(): void {
132
- const engineAssetsPath = path.join(process.cwd(), 'node_modules', 'genesys.js', 'assets');
133
- if (fs.existsSync(engineAssetsPath)) {
134
- fs.rmSync(engineAssetsPath, { recursive: true });
135
- console.log('✅ Engine assets deleted successfully');
136
- } else {
137
- console.log('⚠️ Engine assets not found, skipping deletion');
138
- }
139
- }
140
-
141
- // Run the script
142
- generateDependenciesFile();
143
- deleteEngineAssets();
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+
4
+ import YAML from 'yaml';
5
+
6
+ interface PackageJson {
7
+ dependencies?: Record<string, string>;
8
+ devDependencies?: Record<string, string>;
9
+ name?: string;
10
+ }
11
+
12
+ interface PnpmLockFile {
13
+ importers?: Record<string, {
14
+ dependencies?: Record<string, {
15
+ specifier: string;
16
+ version: string;
17
+ }>;
18
+ devDependencies?: Record<string, {
19
+ specifier: string;
20
+ version: string;
21
+ }>;
22
+ }>;
23
+ }
24
+
25
+ function generateDependenciesFile(): void {
26
+ try {
27
+ // Read main package.json to get dependency lists
28
+ const packageJsonPath = path.join(process.cwd(), 'package.json');
29
+ const packageJsonContent = fs.readFileSync(packageJsonPath, 'utf-8');
30
+ const packageJson: PackageJson = JSON.parse(packageJsonContent);
31
+
32
+ // Read pnpm-lock.yaml to get exact versions
33
+ const pnpmLockPath = path.join(process.cwd(), 'pnpm-lock.yaml');
34
+ if (!fs.existsSync(pnpmLockPath)) {
35
+ // this is a valid case when this package is installed as a dependency of another package
36
+ console.log('⚠️ Could not read pnpm-lock.yaml, skipping dependency versions');
37
+ return;
38
+ }
39
+ const pnpmLockContent = fs.readFileSync(pnpmLockPath, 'utf-8');
40
+ const pnpmLock: PnpmLockFile = YAML.parse(pnpmLockContent);
41
+
42
+ // Extract dependency lists from both package.json files
43
+ const mainDependencyNames = Object.keys(packageJson.dependencies ?? {});
44
+ const mainDevDependencyNames = Object.keys(packageJson.devDependencies ?? {});
45
+
46
+ // Merge all dependency names, removing duplicates
47
+ const allDependencyNames = [...new Set([...mainDependencyNames])];
48
+ const allDevDependencyNames = [...new Set([...mainDevDependencyNames])];
49
+
50
+ // Helper function to extract version from pnpm lock entry
51
+ const extractVersion = (versionString: string): string => {
52
+ // pnpm versions can include peer dependency info in parentheses, e.g., "11.14.0(@types/react@19.2.7)(react@19.2.0)"
53
+ // We only want the base version number
54
+ return versionString.split('(')[0];
55
+ };
56
+
57
+ // Get exact versions from pnpm-lock.yaml
58
+ const dependencies: Record<string, string> = {};
59
+ const devDependencies: Record<string, string> = {};
60
+
61
+ // Get importers (root workspace)
62
+ const rootImporter = pnpmLock.importers?.['.'];
63
+
64
+ // Process production dependencies
65
+ for (const depName of allDependencyNames) {
66
+ // Check root workspace first
67
+ let version = rootImporter?.dependencies?.[depName]?.version;
68
+ if (version) {
69
+ dependencies[depName] = extractVersion(version);
70
+ }
71
+ }
72
+
73
+ // Process dev dependencies
74
+ for (const depName of allDevDependencyNames) {
75
+ // Check root workspace first
76
+ let version = rootImporter?.devDependencies?.[depName]?.version;
77
+ if (version) {
78
+ devDependencies[depName] = extractVersion(version);
79
+ }
80
+ }
81
+
82
+ // Generate TypeScript content
83
+ const tsContent = `/**
84
+ * Auto-generated file containing all package dependencies and their exact installed versions.
85
+ * This file is generated by the post-install script.
86
+ * Do not edit manually - it will be overwritten on next install.
87
+ *
88
+ * Versions are extracted from pnpm-lock.yaml to show exact installed versions,
89
+ * not the version ranges from package.json.
90
+ *
91
+ * Includes dependencies from the main package.
92
+ */
93
+
94
+ export const DEPENDENCIES = {
95
+ ${Object.entries(dependencies)
96
+ .map(([name, version]) => ` '${name}': '${version}',`)
97
+ .join('\n')}
98
+ } as const;
99
+
100
+ export const DEV_DEPENDENCIES = {
101
+ ${Object.entries(devDependencies)
102
+ .map(([name, version]) => ` '${name}': '${version}',`)
103
+ .join('\n')}
104
+ } as const;
105
+
106
+ export const ALL_DEPENDENCIES = {
107
+ ...DEPENDENCIES,
108
+ ...DEV_DEPENDENCIES,
109
+ } as const;
110
+
111
+ export type DependencyName = keyof typeof ALL_DEPENDENCIES;
112
+ `;
113
+
114
+ // Write the TypeScript file
115
+ if (!fs.existsSync(path.join(process.cwd(), 'src'))) {
116
+ console.log('⚠️ src directory not found, skipping dependencies.ts file generation');
117
+ return;
118
+ }
119
+ const outputPath = path.join(process.cwd(), 'src', 'dependencies.ts');
120
+ fs.writeFileSync(outputPath, tsContent, 'utf-8');
121
+
122
+ console.log('✅ Dependencies file generated successfully at src/dependencies.ts');
123
+ console.log(`📦 Found ${Object.keys(dependencies).length} production dependencies with exact versions`);
124
+ console.log(`🔧 Found ${Object.keys(devDependencies).length} development dependencies with exact versions`);
125
+ } catch (error) {
126
+ console.error('❌ Error generating dependencies file:', error);
127
+ process.exit(1);
128
+ }
129
+ }
130
+
131
+ function deleteEngineAssets(): void {
132
+ const engineAssetsPath = path.join(process.cwd(), 'node_modules', 'genesys.js', 'assets');
133
+ if (fs.existsSync(engineAssetsPath)) {
134
+ fs.rmSync(engineAssetsPath, { recursive: true });
135
+ console.log('✅ Engine assets deleted successfully');
136
+ } else {
137
+ console.log('⚠️ Engine assets not found, skipping deletion');
138
+ }
139
+ }
140
+
141
+ // Run the script
142
+ generateDependenciesFile();
143
+ deleteEngineAssets();