# XO Stack This is a monorepo project containing multiple packages managed with NPM workspaces. ## Project Structure ``` xo/ ├── packages/ │ ├── primitives/ │ ├── wallet/ │ └── vue/ ├── package.json └── README.md ``` ## Prerequisites - Node.js (version 20.0.0 or later) - NPM (version 7 or later, which includes workspaces support) ## Installation To install all dependencies for all packages in the monorepo, run the following command from the root directory: ```bash npm install ``` This command will install dependencies for the root project and all packages in the `packages/` directory. ## Building Packages To build all packages, run the following command from the root directory: ```bash npm run build ``` This will execute the build script for each package in the monorepo. To build a specific package, you can use the following command: ```bash npm run build --workspace=@my-monorepo/ ``` Replace `` with the name of the package you want to build (e.g., primitives, network-wallet, or vue). ## Running Tests To run tests for all packages: ```bash npm test ``` To run tests for a specific package: ```bash npm test --workspace=@my-monorepo/ ``` ## Development During development, you can use the following command to watch for changes and rebuild packages automatically: ```bash npm run dev ``` ## Useful NPM Workspace Commands - List all packages in the workspace: ```bash npm ls -w ``` - Run a command in a specific package: ```bash npm run --workspace=@my-monorepo/ ``` - Add a dependency to a specific package: ```bash npm install --workspace=@my-monorepo/ ``` ## Refactor details We will want to use inheritance in place of IWallet, etc. A neat structure to refactor to is: - /theThing/ - base-thing.ts - types.ts - utils.ts - ... - Rename IndexedCollection to ExtMap. - Rename from method to fromArray. - Have the from method accept an object.