# esa-layouts-shared A repository which houses several elements that are used by mutiple [NodeCG](https://nodecg.dev) based bundles for our layouts, [esa-layouts](https://github.com/esamarathon/esa-layouts) for example. **This repository is purposefully designed for our use, and can have breaking changes without prior notice. We advise you don't directly use it in any projects.** ## Basic notes for setup/structure - This repository is to be used as a submodule, directly in the root of the NodeCG bundle (usually in a directory named `shared`). - It requires the bundle to have some specific dependencies and structure; not going to note it all here because it's basically just the stuff from [zoton2/nodecg-vue-ts-template](https://github.com/zoton2/nodecg-vue-ts-template) which we tend to base bundles using. - The bundle should have a `postinstall` in the `package.json` file: - ``` "postinstall": "cd shared && node postinstall.js" ``` - You may want to add a `path` to your `tsconfig.*.json` files for ease of development: - ``` "paths": { "@shared/*": [ "shared/*" ], } ``` - To make sure the above part works, you will also want to add this line in your `extension/index.ts` file: - ``` require('module-alias').addAlias('@shared', require('path').join(__dirname, '../shared')); ``` - You will want to add these paths to your `tsconfig.browser.json` in the `include` array: - ``` "include": [ // esa-layouts-shared "shared/browser_shared/**/*.ts", "shared/browser_shared/**/*.vue", "shared/dashboard/**/*.ts", "shared/dashboard/**/*.vue", "shared/graphics/**/*.ts", "shared/graphics/**/*.vue", "shared/types/**/*.d.ts" ] ``` - You will want to add this path to yoiur `tsconfig.extension.json` in the `include` array: - ``` "include": [ `"shared/types/**/*.d.ts" ] ``` - You will want to add these to your `tsconfig.extension.json` as `references`: - ``` "references": [ { "path": "./shared/extension/audio-normaliser" }, { "path": "./shared/extension/countdown" }, { "path": "./shared/extension/mediabox" }, { "path": "./shared/extension/music" }, { "path": "./shared/extension/obs" }, { "path": "./shared/extension/rabbitmq" }, { "path": "./shared/extension/video-player" }, { "path": "./shared/extension/x32" }, { "path": "./shared/extension/xkeys-esa" } ] ``` - You will want to add these entries in your `vetur.config.js` in the `projects` section: - ``` projects: [ // esa-layouts-shared { root: './shared/dashboard', package: '../../package.json', }, { root: './shared/graphics', package: '../../package.json', }, { root: './shared/browser_shared', package: '../../package.json', }, ] ``` - You will want to add this entry in your `.vscode/settings.json` file in the `eslint.workingDirectories` section: - ``` "eslint.workingDirectories": [ "shared" ] ``` - You will want to change the Webpack `resolve.alias.vue` config to make sure it resolves to the one in the bundle: - ``` alias: { // vue: 'vue/dist/vue.esm.js', vue: path.resolve(__dirname, 'node_modules/vue/dist/vue.esm.js'), }, ```