├── .gitignore ├── .pcconfig ├── LICENSE ├── README.md ├── package-lock.json ├── package.json ├── pcconfig.template.json ├── src └── helloworld.ts ├── tsconfig.debug.json └── tsconfig.release.json /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | node_modules 3 | build 4 | *.DS_Store 5 | pcconfig.json -------------------------------------------------------------------------------- /.pcconfig: -------------------------------------------------------------------------------- 1 | { 2 | "PLAYCANVAS_USE_CWD_AS_TARGET": "1" 3 | } 4 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2011-2021 PlayCanvas Ltd. 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | A simple TypeScript template for PlayCanvas that can also sync with your playcanvas.com project. 2 | 3 | ## Quick start 4 | 5 | This template uses the [playcanvas-sync][playcanvas-sync] tool to push files to your PlayCanvas project and requires a little bit of setup with `.pcconfig` and `pcconfig.json`. 6 | 7 | 1. Copy `.pcconfig` to your home directory (Mac: `/Users/`, Windows: `C:/User/`). `.pcconfig` has been preconfigured to look for a config file in the current working directory which will be this project's folder ([more information here][playcanvas-sync-pcconfig-instructions]). 8 | 2. Make a copy of `pcconfig.template.json` and rename to `pcconfig.json`. This is needed to configure playcanvas-sync to upload the file to correct PlayCanvas Editor project. 9 | 3. Complete/Update the following properties in `pcconfig.json` using these [instructions][playcanvas-sync-pcconfig-instructions]: 10 | - `PLAYCANVAS_API_KEY` - [Instructions to create an API key][create-api-key] 11 | - `PLAYCANVAS_PROJECT_ID` - [Where to find the project ID][find-project-id] 12 | - `PLAYCANVAS_BRANCH_ID` [Where to find the branch ID][find-branch-id] 13 | 4. On the command line, run `npm install` to install the packages. 14 | 5. On the command line, run the npm script `npm run watch-push:debug`. 15 | 6. This will watch the `src` folder for changes, compile into `build/main.bundle.js` and if successful, upload to your playcanvas.com project. 16 | 17 | Please note, if you are adding new `pc.ScriptTypes` or attributes to existing ones, you will need to manually parse the script after upload in the PlayCanvas Editor. [Please read this][playcanvas-sync-new-script-types] for more details. 18 | 19 | ## npm scripts 20 | 21 | | Command | Description | 22 | |------------------------------|----------------------------------------------------------------------------------------------| 23 | | `npm run build:debug` | Compiles tsc files using debug config and builds to `build/main.bundle.js` | 24 | | `npm run build:release` | Compiles tsc files using release config and builds to `build/main.bundle.js` | 25 | | `npm run watch:debug` | Compiles tsc files using debug config on code changes and builds to `build/main.bundle.js` | 26 | | `npm run watch:release` | Compiles tsc files using release config on code changes and builds to `build/main.bundle.js` | 27 | | `npm run push` | Uploads `build/main.bundle.js` to playcanvas.com project | 28 | | `npm run build-push:debug` | Performs `build:debug` and `push` npm scripts | 29 | | `npm run build-push:release` | Performs `build:release` and `push` npm scripts | 30 | | `npm run watch-push:debug` | Performs `watch:debug` and `push` npm scripts | 31 | | `npm run watch-push:release` | Performs `watch:release` and `push` npm scripts | 32 | 33 | [playcanvas-sync]: https://github.com/playcanvas/playcanvas-sync 34 | [playcanvas-sync-pcconfig-instructions]: https://github.com/playcanvas/playcanvas-sync#config-variables 35 | [playcanvas-sync-new-script-types]: https://github.com/playcanvas/playcanvas-sync#adding-new-files-as-script-components 36 | [create-api-key]: https://developer.playcanvas.com/user-manual/api/#authorization 37 | [find-project-id]: https://developer.playcanvas.com/user-manual/api/#project_id 38 | [find-branch-id]: https://developer.playcanvas.com/user-manual/api/#branch_id 39 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "playcanvas-editor-ts-template", 3 | "version": "1.1.0", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "playcanvas-editor-ts-template", 9 | "version": "1.1.0", 10 | "license": "MIT", 11 | "dependencies": { 12 | "tsc-watch": "^6.2.0" 13 | }, 14 | "devDependencies": { 15 | "playcanvas": "^1.73.5", 16 | "playcanvas-sync": "git+https://github.com/playcanvas/playcanvas-sync.git", 17 | "typescript": "^5.5.4" 18 | } 19 | }, 20 | "node_modules/@types/webxr": { 21 | "version": "0.5.20", 22 | "resolved": "https://registry.npmjs.org/@types/webxr/-/webxr-0.5.20.tgz", 23 | "integrity": "sha512-JGpU6qiIJQKUuVSKx1GtQnHJGxRjtfGIhzO2ilq43VZZS//f1h1Sgexbdk+Lq+7569a6EYhOWrUpIruR/1Enmg==", 24 | "dev": true 25 | }, 26 | "node_modules/@webgpu/types": { 27 | "version": "0.1.44", 28 | "resolved": "https://registry.npmjs.org/@webgpu/types/-/types-0.1.44.tgz", 29 | "integrity": "sha512-JDpYJN5E/asw84LTYhKyvPpxGnD+bAKPtpW9Ilurf7cZpxaTbxkQcGwOd7jgB9BPBrTYQ+32ufo4HiuomTjHNQ==", 30 | "dev": true 31 | }, 32 | "node_modules/ajv": { 33 | "version": "6.12.6", 34 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", 35 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", 36 | "dev": true, 37 | "dependencies": { 38 | "fast-deep-equal": "^3.1.1", 39 | "fast-json-stable-stringify": "^2.0.0", 40 | "json-schema-traverse": "^0.4.1", 41 | "uri-js": "^4.2.2" 42 | }, 43 | "funding": { 44 | "type": "github", 45 | "url": "https://github.com/sponsors/epoberezkin" 46 | } 47 | }, 48 | "node_modules/ansi-styles": { 49 | "version": "4.3.0", 50 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 51 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 52 | "dev": true, 53 | "dependencies": { 54 | "color-convert": "^2.0.1" 55 | }, 56 | "engines": { 57 | "node": ">=8" 58 | }, 59 | "funding": { 60 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 61 | } 62 | }, 63 | "node_modules/asn1": { 64 | "version": "0.2.6", 65 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", 66 | "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", 67 | "dev": true, 68 | "dependencies": { 69 | "safer-buffer": "~2.1.0" 70 | } 71 | }, 72 | "node_modules/assert-plus": { 73 | "version": "1.0.0", 74 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 75 | "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", 76 | "dev": true, 77 | "engines": { 78 | "node": ">=0.8" 79 | } 80 | }, 81 | "node_modules/asynckit": { 82 | "version": "0.4.0", 83 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 84 | "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", 85 | "dev": true 86 | }, 87 | "node_modules/aws-sign2": { 88 | "version": "0.7.0", 89 | "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", 90 | "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", 91 | "dev": true, 92 | "engines": { 93 | "node": "*" 94 | } 95 | }, 96 | "node_modules/aws4": { 97 | "version": "1.13.2", 98 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.2.tgz", 99 | "integrity": "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==", 100 | "dev": true 101 | }, 102 | "node_modules/bcrypt-pbkdf": { 103 | "version": "1.0.2", 104 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", 105 | "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", 106 | "dev": true, 107 | "dependencies": { 108 | "tweetnacl": "^0.14.3" 109 | } 110 | }, 111 | "node_modules/bottleneck": { 112 | "version": "2.19.5", 113 | "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz", 114 | "integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==", 115 | "dev": true 116 | }, 117 | "node_modules/caseless": { 118 | "version": "0.12.0", 119 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", 120 | "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", 121 | "dev": true 122 | }, 123 | "node_modules/chalk": { 124 | "version": "4.1.2", 125 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 126 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 127 | "dev": true, 128 | "dependencies": { 129 | "ansi-styles": "^4.1.0", 130 | "supports-color": "^7.1.0" 131 | }, 132 | "engines": { 133 | "node": ">=10" 134 | }, 135 | "funding": { 136 | "url": "https://github.com/chalk/chalk?sponsor=1" 137 | } 138 | }, 139 | "node_modules/color-convert": { 140 | "version": "2.0.1", 141 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 142 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 143 | "dev": true, 144 | "dependencies": { 145 | "color-name": "~1.1.4" 146 | }, 147 | "engines": { 148 | "node": ">=7.0.0" 149 | } 150 | }, 151 | "node_modules/color-name": { 152 | "version": "1.1.4", 153 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 154 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 155 | "dev": true 156 | }, 157 | "node_modules/combined-stream": { 158 | "version": "1.0.8", 159 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 160 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 161 | "dev": true, 162 | "dependencies": { 163 | "delayed-stream": "~1.0.0" 164 | }, 165 | "engines": { 166 | "node": ">= 0.8" 167 | } 168 | }, 169 | "node_modules/commander": { 170 | "version": "9.5.0", 171 | "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", 172 | "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", 173 | "dev": true, 174 | "engines": { 175 | "node": "^12.20.0 || >=14" 176 | } 177 | }, 178 | "node_modules/core-util-is": { 179 | "version": "1.0.2", 180 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 181 | "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", 182 | "dev": true 183 | }, 184 | "node_modules/cross-spawn": { 185 | "version": "7.0.3", 186 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 187 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 188 | "dependencies": { 189 | "path-key": "^3.1.0", 190 | "shebang-command": "^2.0.0", 191 | "which": "^2.0.1" 192 | }, 193 | "engines": { 194 | "node": ">= 8" 195 | } 196 | }, 197 | "node_modules/dashdash": { 198 | "version": "1.14.1", 199 | "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", 200 | "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", 201 | "dev": true, 202 | "dependencies": { 203 | "assert-plus": "^1.0.0" 204 | }, 205 | "engines": { 206 | "node": ">=0.10" 207 | } 208 | }, 209 | "node_modules/debug": { 210 | "version": "4.3.6", 211 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", 212 | "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", 213 | "dev": true, 214 | "dependencies": { 215 | "ms": "2.1.2" 216 | }, 217 | "engines": { 218 | "node": ">=6.0" 219 | }, 220 | "peerDependenciesMeta": { 221 | "supports-color": { 222 | "optional": true 223 | } 224 | } 225 | }, 226 | "node_modules/delayed-stream": { 227 | "version": "1.0.0", 228 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 229 | "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", 230 | "dev": true, 231 | "engines": { 232 | "node": ">=0.4.0" 233 | } 234 | }, 235 | "node_modules/diff": { 236 | "version": "5.2.0", 237 | "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", 238 | "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", 239 | "dev": true, 240 | "engines": { 241 | "node": ">=0.3.1" 242 | } 243 | }, 244 | "node_modules/duplexer": { 245 | "version": "0.1.2", 246 | "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", 247 | "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" 248 | }, 249 | "node_modules/ecc-jsbn": { 250 | "version": "0.1.2", 251 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", 252 | "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", 253 | "dev": true, 254 | "dependencies": { 255 | "jsbn": "~0.1.0", 256 | "safer-buffer": "^2.1.0" 257 | } 258 | }, 259 | "node_modules/event-stream": { 260 | "version": "3.3.4", 261 | "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", 262 | "integrity": "sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==", 263 | "dependencies": { 264 | "duplexer": "~0.1.1", 265 | "from": "~0", 266 | "map-stream": "~0.1.0", 267 | "pause-stream": "0.0.11", 268 | "split": "0.3", 269 | "stream-combiner": "~0.0.4", 270 | "through": "~2.3.1" 271 | } 272 | }, 273 | "node_modules/extend": { 274 | "version": "3.0.2", 275 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", 276 | "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", 277 | "dev": true 278 | }, 279 | "node_modules/extsprintf": { 280 | "version": "1.3.0", 281 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", 282 | "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", 283 | "dev": true, 284 | "engines": [ 285 | "node >=0.6.0" 286 | ] 287 | }, 288 | "node_modules/fast-deep-equal": { 289 | "version": "3.1.3", 290 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 291 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", 292 | "dev": true 293 | }, 294 | "node_modules/fast-json-stable-stringify": { 295 | "version": "2.1.0", 296 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 297 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", 298 | "dev": true 299 | }, 300 | "node_modules/find-process": { 301 | "version": "1.4.7", 302 | "resolved": "https://registry.npmjs.org/find-process/-/find-process-1.4.7.tgz", 303 | "integrity": "sha512-/U4CYp1214Xrp3u3Fqr9yNynUrr5Le4y0SsJh2lMDDSbpwYSz3M2SMWQC+wqcx79cN8PQtHQIL8KnuY9M66fdg==", 304 | "dev": true, 305 | "dependencies": { 306 | "chalk": "^4.0.0", 307 | "commander": "^5.1.0", 308 | "debug": "^4.1.1" 309 | }, 310 | "bin": { 311 | "find-process": "bin/find-process.js" 312 | } 313 | }, 314 | "node_modules/find-process/node_modules/commander": { 315 | "version": "5.1.0", 316 | "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", 317 | "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", 318 | "dev": true, 319 | "engines": { 320 | "node": ">= 6" 321 | } 322 | }, 323 | "node_modules/forever-agent": { 324 | "version": "0.6.1", 325 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", 326 | "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", 327 | "dev": true, 328 | "engines": { 329 | "node": "*" 330 | } 331 | }, 332 | "node_modules/form-data": { 333 | "version": "2.3.3", 334 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", 335 | "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", 336 | "dev": true, 337 | "dependencies": { 338 | "asynckit": "^0.4.0", 339 | "combined-stream": "^1.0.6", 340 | "mime-types": "^2.1.12" 341 | }, 342 | "engines": { 343 | "node": ">= 0.12" 344 | } 345 | }, 346 | "node_modules/from": { 347 | "version": "0.1.7", 348 | "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", 349 | "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==" 350 | }, 351 | "node_modules/getpass": { 352 | "version": "0.1.7", 353 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", 354 | "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", 355 | "dev": true, 356 | "dependencies": { 357 | "assert-plus": "^1.0.0" 358 | } 359 | }, 360 | "node_modules/gitignore-parser": { 361 | "version": "0.0.2", 362 | "resolved": "https://registry.npmjs.org/gitignore-parser/-/gitignore-parser-0.0.2.tgz", 363 | "integrity": "sha512-X6mpqUv59uWLGD4n3hZ8Cu8KbF2PMWPSFYmxZjdkpm3yOU7hSUYnzTkZI1mcWqchphvqyuz3/BhgBR4E/JtkCg==", 364 | "dev": true, 365 | "engines": { 366 | "node": ">=0.10.0" 367 | } 368 | }, 369 | "node_modules/har-schema": { 370 | "version": "2.0.0", 371 | "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", 372 | "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", 373 | "dev": true, 374 | "engines": { 375 | "node": ">=4" 376 | } 377 | }, 378 | "node_modules/har-validator": { 379 | "version": "5.1.5", 380 | "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", 381 | "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", 382 | "deprecated": "this library is no longer supported", 383 | "dev": true, 384 | "dependencies": { 385 | "ajv": "^6.12.3", 386 | "har-schema": "^2.0.0" 387 | }, 388 | "engines": { 389 | "node": ">=6" 390 | } 391 | }, 392 | "node_modules/has-flag": { 393 | "version": "4.0.0", 394 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 395 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 396 | "dev": true, 397 | "engines": { 398 | "node": ">=8" 399 | } 400 | }, 401 | "node_modules/http-signature": { 402 | "version": "1.2.0", 403 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", 404 | "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", 405 | "dev": true, 406 | "dependencies": { 407 | "assert-plus": "^1.0.0", 408 | "jsprim": "^1.2.2", 409 | "sshpk": "^1.7.0" 410 | }, 411 | "engines": { 412 | "node": ">=0.8", 413 | "npm": ">=1.3.7" 414 | } 415 | }, 416 | "node_modules/is-typedarray": { 417 | "version": "1.0.0", 418 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", 419 | "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", 420 | "dev": true 421 | }, 422 | "node_modules/isexe": { 423 | "version": "2.0.0", 424 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 425 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" 426 | }, 427 | "node_modules/isstream": { 428 | "version": "0.1.2", 429 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", 430 | "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", 431 | "dev": true 432 | }, 433 | "node_modules/jsbn": { 434 | "version": "0.1.1", 435 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", 436 | "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", 437 | "dev": true 438 | }, 439 | "node_modules/json-schema": { 440 | "version": "0.4.0", 441 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", 442 | "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", 443 | "dev": true 444 | }, 445 | "node_modules/json-schema-traverse": { 446 | "version": "0.4.1", 447 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 448 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 449 | "dev": true 450 | }, 451 | "node_modules/json-stringify-safe": { 452 | "version": "5.0.1", 453 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 454 | "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", 455 | "dev": true 456 | }, 457 | "node_modules/jsprim": { 458 | "version": "1.4.2", 459 | "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", 460 | "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", 461 | "dev": true, 462 | "dependencies": { 463 | "assert-plus": "1.0.0", 464 | "extsprintf": "1.3.0", 465 | "json-schema": "0.4.0", 466 | "verror": "1.10.0" 467 | }, 468 | "engines": { 469 | "node": ">=0.6.0" 470 | } 471 | }, 472 | "node_modules/lodash": { 473 | "version": "4.17.21", 474 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 475 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", 476 | "dev": true 477 | }, 478 | "node_modules/map-stream": { 479 | "version": "0.1.0", 480 | "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", 481 | "integrity": "sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==" 482 | }, 483 | "node_modules/mime-db": { 484 | "version": "1.52.0", 485 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 486 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 487 | "dev": true, 488 | "engines": { 489 | "node": ">= 0.6" 490 | } 491 | }, 492 | "node_modules/mime-types": { 493 | "version": "2.1.35", 494 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 495 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 496 | "dev": true, 497 | "dependencies": { 498 | "mime-db": "1.52.0" 499 | }, 500 | "engines": { 501 | "node": ">= 0.6" 502 | } 503 | }, 504 | "node_modules/mkdirp": { 505 | "version": "1.0.4", 506 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", 507 | "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", 508 | "dev": true, 509 | "bin": { 510 | "mkdirp": "bin/cmd.js" 511 | }, 512 | "engines": { 513 | "node": ">=10" 514 | } 515 | }, 516 | "node_modules/ms": { 517 | "version": "2.1.2", 518 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 519 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 520 | "dev": true 521 | }, 522 | "node_modules/node-cleanup": { 523 | "version": "2.1.2", 524 | "resolved": "https://registry.npmjs.org/node-cleanup/-/node-cleanup-2.1.2.tgz", 525 | "integrity": "sha512-qN8v/s2PAJwGUtr1/hYTpNKlD6Y9rc4p8KSmJXyGdYGZsDGKXrGThikLFP9OCHFeLeEpQzPwiAtdIvBLqm//Hw==" 526 | }, 527 | "node_modules/oauth-sign": { 528 | "version": "0.9.0", 529 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", 530 | "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", 531 | "dev": true, 532 | "engines": { 533 | "node": "*" 534 | } 535 | }, 536 | "node_modules/path-key": { 537 | "version": "3.1.1", 538 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 539 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 540 | "engines": { 541 | "node": ">=8" 542 | } 543 | }, 544 | "node_modules/pause-stream": { 545 | "version": "0.0.11", 546 | "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", 547 | "integrity": "sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==", 548 | "dependencies": { 549 | "through": "~2.3" 550 | } 551 | }, 552 | "node_modules/performance-now": { 553 | "version": "2.1.0", 554 | "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", 555 | "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", 556 | "dev": true 557 | }, 558 | "node_modules/playcanvas": { 559 | "version": "1.73.5", 560 | "resolved": "https://registry.npmjs.org/playcanvas/-/playcanvas-1.73.5.tgz", 561 | "integrity": "sha512-dUXmlGygUNUicxBQNFvwudGqX90NiKhI9Jx+AhixzWrkuQDP02KP6JjZldNOVA1VfDS9DAQ8APZYJNDM6AnOEA==", 562 | "dev": true, 563 | "dependencies": { 564 | "@types/webxr": "^0.5.16", 565 | "@webgpu/types": "^0.1.40" 566 | }, 567 | "engines": { 568 | "node": ">=18.0.0" 569 | } 570 | }, 571 | "node_modules/playcanvas-sync": { 572 | "version": "1.2.0", 573 | "resolved": "git+ssh://git@github.com/playcanvas/playcanvas-sync.git#f3ba412d1a882cd3e90240dbe51af7e3afcb11a4", 574 | "dev": true, 575 | "license": "MIT", 576 | "dependencies": { 577 | "bottleneck": "^2.19.5", 578 | "commander": "^9.0.0", 579 | "diff": "^5.0.0", 580 | "find-process": "^1.4.7", 581 | "gitignore-parser": "0.0.2", 582 | "mkdirp": "^1.0.4", 583 | "request": "^2.88.2", 584 | "request-promise-native": "^1.0.9" 585 | }, 586 | "bin": { 587 | "pcsync": "bin/pcsync.js", 588 | "pcwatch": "bin/pcwatch.js" 589 | } 590 | }, 591 | "node_modules/ps-tree": { 592 | "version": "1.2.0", 593 | "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.2.0.tgz", 594 | "integrity": "sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==", 595 | "dependencies": { 596 | "event-stream": "=3.3.4" 597 | }, 598 | "bin": { 599 | "ps-tree": "bin/ps-tree.js" 600 | }, 601 | "engines": { 602 | "node": ">= 0.10" 603 | } 604 | }, 605 | "node_modules/psl": { 606 | "version": "1.9.0", 607 | "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", 608 | "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", 609 | "dev": true 610 | }, 611 | "node_modules/punycode": { 612 | "version": "2.3.1", 613 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", 614 | "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", 615 | "dev": true, 616 | "engines": { 617 | "node": ">=6" 618 | } 619 | }, 620 | "node_modules/qs": { 621 | "version": "6.5.3", 622 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", 623 | "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", 624 | "dev": true, 625 | "engines": { 626 | "node": ">=0.6" 627 | } 628 | }, 629 | "node_modules/request": { 630 | "version": "2.88.2", 631 | "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", 632 | "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", 633 | "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", 634 | "dev": true, 635 | "dependencies": { 636 | "aws-sign2": "~0.7.0", 637 | "aws4": "^1.8.0", 638 | "caseless": "~0.12.0", 639 | "combined-stream": "~1.0.6", 640 | "extend": "~3.0.2", 641 | "forever-agent": "~0.6.1", 642 | "form-data": "~2.3.2", 643 | "har-validator": "~5.1.3", 644 | "http-signature": "~1.2.0", 645 | "is-typedarray": "~1.0.0", 646 | "isstream": "~0.1.2", 647 | "json-stringify-safe": "~5.0.1", 648 | "mime-types": "~2.1.19", 649 | "oauth-sign": "~0.9.0", 650 | "performance-now": "^2.1.0", 651 | "qs": "~6.5.2", 652 | "safe-buffer": "^5.1.2", 653 | "tough-cookie": "~2.5.0", 654 | "tunnel-agent": "^0.6.0", 655 | "uuid": "^3.3.2" 656 | }, 657 | "engines": { 658 | "node": ">= 6" 659 | } 660 | }, 661 | "node_modules/request-promise-core": { 662 | "version": "1.1.4", 663 | "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", 664 | "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", 665 | "dev": true, 666 | "dependencies": { 667 | "lodash": "^4.17.19" 668 | }, 669 | "engines": { 670 | "node": ">=0.10.0" 671 | }, 672 | "peerDependencies": { 673 | "request": "^2.34" 674 | } 675 | }, 676 | "node_modules/request-promise-native": { 677 | "version": "1.0.9", 678 | "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz", 679 | "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==", 680 | "deprecated": "request-promise-native has been deprecated because it extends the now deprecated request package, see https://github.com/request/request/issues/3142", 681 | "dev": true, 682 | "dependencies": { 683 | "request-promise-core": "1.1.4", 684 | "stealthy-require": "^1.1.1", 685 | "tough-cookie": "^2.3.3" 686 | }, 687 | "engines": { 688 | "node": ">=0.12.0" 689 | }, 690 | "peerDependencies": { 691 | "request": "^2.34" 692 | } 693 | }, 694 | "node_modules/safe-buffer": { 695 | "version": "5.2.1", 696 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 697 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 698 | "dev": true, 699 | "funding": [ 700 | { 701 | "type": "github", 702 | "url": "https://github.com/sponsors/feross" 703 | }, 704 | { 705 | "type": "patreon", 706 | "url": "https://www.patreon.com/feross" 707 | }, 708 | { 709 | "type": "consulting", 710 | "url": "https://feross.org/support" 711 | } 712 | ] 713 | }, 714 | "node_modules/safer-buffer": { 715 | "version": "2.1.2", 716 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 717 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", 718 | "dev": true 719 | }, 720 | "node_modules/shebang-command": { 721 | "version": "2.0.0", 722 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 723 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 724 | "dependencies": { 725 | "shebang-regex": "^3.0.0" 726 | }, 727 | "engines": { 728 | "node": ">=8" 729 | } 730 | }, 731 | "node_modules/shebang-regex": { 732 | "version": "3.0.0", 733 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 734 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 735 | "engines": { 736 | "node": ">=8" 737 | } 738 | }, 739 | "node_modules/split": { 740 | "version": "0.3.3", 741 | "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", 742 | "integrity": "sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==", 743 | "dependencies": { 744 | "through": "2" 745 | }, 746 | "engines": { 747 | "node": "*" 748 | } 749 | }, 750 | "node_modules/sshpk": { 751 | "version": "1.18.0", 752 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", 753 | "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", 754 | "dev": true, 755 | "dependencies": { 756 | "asn1": "~0.2.3", 757 | "assert-plus": "^1.0.0", 758 | "bcrypt-pbkdf": "^1.0.0", 759 | "dashdash": "^1.12.0", 760 | "ecc-jsbn": "~0.1.1", 761 | "getpass": "^0.1.1", 762 | "jsbn": "~0.1.0", 763 | "safer-buffer": "^2.0.2", 764 | "tweetnacl": "~0.14.0" 765 | }, 766 | "bin": { 767 | "sshpk-conv": "bin/sshpk-conv", 768 | "sshpk-sign": "bin/sshpk-sign", 769 | "sshpk-verify": "bin/sshpk-verify" 770 | }, 771 | "engines": { 772 | "node": ">=0.10.0" 773 | } 774 | }, 775 | "node_modules/stealthy-require": { 776 | "version": "1.1.1", 777 | "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", 778 | "integrity": "sha512-ZnWpYnYugiOVEY5GkcuJK1io5V8QmNYChG62gSit9pQVGErXtrKuPC55ITaVSukmMta5qpMU7vqLt2Lnni4f/g==", 779 | "dev": true, 780 | "engines": { 781 | "node": ">=0.10.0" 782 | } 783 | }, 784 | "node_modules/stream-combiner": { 785 | "version": "0.0.4", 786 | "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", 787 | "integrity": "sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==", 788 | "dependencies": { 789 | "duplexer": "~0.1.1" 790 | } 791 | }, 792 | "node_modules/string-argv": { 793 | "version": "0.3.2", 794 | "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", 795 | "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", 796 | "engines": { 797 | "node": ">=0.6.19" 798 | } 799 | }, 800 | "node_modules/supports-color": { 801 | "version": "7.2.0", 802 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 803 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 804 | "dev": true, 805 | "dependencies": { 806 | "has-flag": "^4.0.0" 807 | }, 808 | "engines": { 809 | "node": ">=8" 810 | } 811 | }, 812 | "node_modules/through": { 813 | "version": "2.3.8", 814 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", 815 | "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" 816 | }, 817 | "node_modules/tough-cookie": { 818 | "version": "2.5.0", 819 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", 820 | "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", 821 | "dev": true, 822 | "dependencies": { 823 | "psl": "^1.1.28", 824 | "punycode": "^2.1.1" 825 | }, 826 | "engines": { 827 | "node": ">=0.8" 828 | } 829 | }, 830 | "node_modules/tsc-watch": { 831 | "version": "6.2.0", 832 | "resolved": "https://registry.npmjs.org/tsc-watch/-/tsc-watch-6.2.0.tgz", 833 | "integrity": "sha512-2LBhf9kjKXnz7KQ/puLHlozMzzUNHAdYBNMkg3eksQJ9GBAgMg8czznM83T5PmsoUvDnXzfIeQn2lNcIYDr8LA==", 834 | "dependencies": { 835 | "cross-spawn": "^7.0.3", 836 | "node-cleanup": "^2.1.2", 837 | "ps-tree": "^1.2.0", 838 | "string-argv": "^0.3.1" 839 | }, 840 | "bin": { 841 | "tsc-watch": "dist/lib/tsc-watch.js" 842 | }, 843 | "engines": { 844 | "node": ">=12.12.0" 845 | }, 846 | "peerDependencies": { 847 | "typescript": "*" 848 | } 849 | }, 850 | "node_modules/tunnel-agent": { 851 | "version": "0.6.0", 852 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", 853 | "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", 854 | "dev": true, 855 | "dependencies": { 856 | "safe-buffer": "^5.0.1" 857 | }, 858 | "engines": { 859 | "node": "*" 860 | } 861 | }, 862 | "node_modules/tweetnacl": { 863 | "version": "0.14.5", 864 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", 865 | "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", 866 | "dev": true 867 | }, 868 | "node_modules/typescript": { 869 | "version": "5.5.4", 870 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", 871 | "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", 872 | "bin": { 873 | "tsc": "bin/tsc", 874 | "tsserver": "bin/tsserver" 875 | }, 876 | "engines": { 877 | "node": ">=14.17" 878 | } 879 | }, 880 | "node_modules/uri-js": { 881 | "version": "4.4.1", 882 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 883 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 884 | "dev": true, 885 | "dependencies": { 886 | "punycode": "^2.1.0" 887 | } 888 | }, 889 | "node_modules/uuid": { 890 | "version": "3.4.0", 891 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", 892 | "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", 893 | "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", 894 | "dev": true, 895 | "bin": { 896 | "uuid": "bin/uuid" 897 | } 898 | }, 899 | "node_modules/verror": { 900 | "version": "1.10.0", 901 | "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", 902 | "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", 903 | "dev": true, 904 | "engines": [ 905 | "node >=0.6.0" 906 | ], 907 | "dependencies": { 908 | "assert-plus": "^1.0.0", 909 | "core-util-is": "1.0.2", 910 | "extsprintf": "^1.2.0" 911 | } 912 | }, 913 | "node_modules/which": { 914 | "version": "2.0.2", 915 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 916 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 917 | "dependencies": { 918 | "isexe": "^2.0.0" 919 | }, 920 | "bin": { 921 | "node-which": "bin/node-which" 922 | }, 923 | "engines": { 924 | "node": ">= 8" 925 | } 926 | } 927 | } 928 | } 929 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "playcanvas-editor-ts-template", 3 | "version": "1.1.0", 4 | "author": "PlayCanvas ", 5 | "homepage": "https://playcanvas.com", 6 | "description": "A simple TypeScript template for PlayCanvas that can also sync with your playcanvas.com project", 7 | "keywords": [ 8 | "typescript", 9 | "3D", 10 | "2D", 11 | "VR", 12 | "WebGL", 13 | "WebGL2", 14 | "game", 15 | "engine", 16 | "HTML5", 17 | "browser", 18 | "typings" 19 | ], 20 | "main": "build/main.bundle.js", 21 | "scripts": { 22 | "build:debug": "tsc --project tsconfig.debug.json", 23 | "build:release": "tsc --project tsconfig.release.json", 24 | "watch:debug": "tsc --watch --project tsconfig.debug.json", 25 | "watch:release": "tsc --watch --project tsconfig.release.json", 26 | "push": "node node_modules/playcanvas-sync/bin/pcsync.js pushAll --yes", 27 | "build-push:debug": "npm run build:debug && npm run push", 28 | "build-push:release": "npm run build:release && npm run push", 29 | "watch-push:debug": "npm run build:debug && tsc-watch -p tsconfig.debug.json --onSuccess \"npm run push\"", 30 | "watch-push:release": "npm run build:release && tsc-watch -p tsconfig.release.json --onSuccess \"npm run push\"" 31 | }, 32 | "license": "MIT", 33 | "devDependencies": { 34 | "playcanvas": "^1.73.5", 35 | "playcanvas-sync": "git+https://github.com/playcanvas/playcanvas-sync.git", 36 | "typescript": "^5.5.4" 37 | }, 38 | "dependencies": { 39 | "tsc-watch": "^6.2.0" 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /pcconfig.template.json: -------------------------------------------------------------------------------- 1 | { 2 | "PLAYCANVAS_API_KEY": "", 3 | "PLAYCANVAS_BRANCH_ID": "", 4 | "PLAYCANVAS_PROJECT_ID": 1, 5 | "PLAYCANVAS_BAD_FILE_REG": "^\\.|~$", 6 | "PLAYCANVAS_BAD_FOLDER_REG": "^\\.|typings|node_modules", 7 | "PLAYCANVAS_TARGET_SUBDIR": "build" 8 | } -------------------------------------------------------------------------------- /src/helloworld.ts: -------------------------------------------------------------------------------- 1 | class HelloWorld extends pc.ScriptType { 2 | text: string; 3 | entityLink : pc.Entity | null; 4 | 5 | initialize() { 6 | console.log('Hello ' + this.text); 7 | } 8 | }; 9 | 10 | pc.registerScript(HelloWorld, 'helloWorld'); 11 | HelloWorld.attributes.add('text', {type: 'string'}); 12 | HelloWorld.attributes.add('entityLink', {type : 'entity'}) 13 | -------------------------------------------------------------------------------- /tsconfig.debug.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES5", 4 | "module": "amd", 5 | "moduleResolution": "node", 6 | "lib": [ 7 | "DOM", 8 | "ES2017" 9 | ], 10 | "outFile": "./build/main.build.js", 11 | "rootDir": "./src", 12 | "strict": true, 13 | "strictPropertyInitialization": false, 14 | "types": ["playcanvas", "webxr"], 15 | "esModuleInterop": true, 16 | "inlineSourceMap": true, 17 | "inlineSources": true, 18 | "experimentalDecorators": true, 19 | "forceConsistentCasingInFileNames": true 20 | } 21 | } -------------------------------------------------------------------------------- /tsconfig.release.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES5", 4 | "module": "amd", 5 | "moduleResolution": "node", 6 | "lib": [ 7 | "DOM", 8 | "ES2017" 9 | ], 10 | "outFile": "./build/main.build.js", 11 | "rootDir": "./src", 12 | "strict": true, 13 | "strictPropertyInitialization": false, 14 | "types": ["playcanvas", "webxr"], 15 | "esModuleInterop": true, 16 | "experimentalDecorators": true, 17 | "forceConsistentCasingInFileNames": true 18 | } 19 | } --------------------------------------------------------------------------------