Architect dev server: run full Architect projects locally & offline
@architect/sandbox> Architect local development environment: run full Architect projects locally & offline in an in-memory sandbox

```
npm i @architect/sandbox
---
``
npx sandbox
Or if running Sandbox from within @architect/architect:
``
npx arc sandbox
- -p, --port - Manually specify HTTP port3333
- Defaults to -h
- , --host - Specify the host interface for Sandbox to listen on0.0.0.0
- Defaults to (all available interfaces on your machine)localhost
- To accept local connections only, specify -v
- , --verbose - Enable verbose logging-d
- , --debug - Enable debug logging-q
- , --quiet - Disable (most) logging--disable-delete-vendor
- - Disable deleting Lambda vendor dirs upon startup--disable-symlinks
- - Disable symlinking src/shared into all functions and use file copying instead
- ARC_API_TYPE - Set the API Gateway API typehttp
- Can be one of (aliased to httpv2), httpv1, resthttp
- Defaults to ARC_ENV
- - testing|staging|productiontesting
- Defaults to ARC_HOST
- - Specify the host interface for Sandbox to listen on0.0.0.0
- Defaults to (all available interfaces on your machine)localhost
- To accept local connections only, specify ARC_LOCAL
- - If present and used in conjunction with ARC_ENV=staging|production, emulates live staging or production environment@env
- Uses your local preferences environment variables for the appropriate stageARC_PORT
- Connects Sandbox to live AWS events and DynamoDB infrastructure
- Requires valid AWS credentials with the same profile name as defined in your project manifest
- Specify ports:
- - Manually specify HTTP port3333
- Defaults to ARC_EVENTS_PORT
- - Manually specify event bus port4444
- Defaults to ARC_TABLES_PORT
- - Manually specify local DynamoDB port5555
- Defaults to ARC_INTERNAL_PORT
- - Manually specify internal Sandbox + AWS services port2222
- Defaults to ARC_DB_EXTERNAL
- - (Boolean) Use an external DynamoDB tool (such as AWS NoSQL Workbench)ARC_QUIET
- - If present, disable (most) logging
---
Sandbox is designed to be integrated into your application's test suite. In most cases you'll only need to make use of sandbox.start() and sandbox.end(). However, individual Sandbox services can also be individually started and stopped. (See below.)
Methods may be passed an options object containing the following parameters:
- apigateway - String - Specify the API Gateway API typehttp
- Defaults to http
- Can be one of (aliased to httpv2), httpv1, restcwd
- - String - Specify a working directory (handy for aiming Sandbox at test mocks)deleteVendor
- - Boolean - Delete Lambda vendor dirs upon startuptrue
- Defaults to env
- - Object - Environment variables for Lambda invocations in automated testing.env
- String values overwrite env vars of the same name set via or prefs.arc filesundefined
- values delete any env vars of the same name set via .env or prefs.arc filesport
- - String or Number - Specify HTTP port3333
- Defaults to quiet
- - Boolean - Disables (most) loggingrunStartupCommands
- - Boolean - Disable @sandbox-start commandstrue
- Defaults to runtimeCheck
- - String - Check for runtime version mismatcheswarn
- If set to Sandbox will warn of mismatches in stdouterror
- If set to (suggested for test environments) Sandbox will fail to start upsymlink
- Does not run by default
- - Boolean - Use symlinking to Architect shared code from within each Lambda's dependencies (e.g. src/http/get-index/node_modules/@architect/shared → src/shared)true
- Defaults to false
- copies shared code into each Lambda, which can result much slower startup and dependency rehydration speedswatcher
- - Boolean - Disable the Sandbox file watcher (and related Sandbox file watcher plugin API)true
- Defaults to
---
> Start and shut down the Sandbox; unless you have specific per-service needs, we generally advise most folks use this interface for testing
Starts the Sandbox; first checks that ports are available to consume, prints a banner, loads Architect and userland environment variables, hydrates application dependencies, and starts various Sandbox services (including @events, @queues, @tables, @indexes, @http, @static and @ws).
Invokes callback once everything is ready, or returns a promise if callback is falsy.
Shuts down anything started by sandbox.start(). Invokes callback once shut down, or returns a promise if callback is falsy.
---
`javascript
let sandbox = require('@architect/sandbox')
let test = require('tape')
test('Start the Sandbox', async t => {
t.plan(1)
let result = await sandbox.start()
t.equal(result, 'Sandbox successfully started')
})
test('Tests go here', t => {
// Make use of various Sandbox resources in your tests...
})
test('Shut down the Sandbox', async t => {
t.plan(1)
let result = await sandbox.end()
t.equal(result, 'Sandbox successfully shut down')
})
`
`javascript
let sandbox = require('@architect/sandbox')
beforeAll(async () => {
let result = await sandbox.start()
expect(result).toBe('Sandbox successfully started')
})
afterAll(async () => {
let result = await sandbox.end()
expect(result).toBe('Sandbox successfully shut down')
})
test('Tests go here', () => {
// Make use of various Sandbox resources in your tests...
})
`
The tests in this repository require that you have the deno runtime installed on your local machine. Install deno by visiting: https://deno.land/#installation
To work on sandbox, first make sure you have installed the dependencies:
npm install
To run all tests, including the linter:
npm test
To run just the linter:
npm run lint
To run just the unit tests (which are located under test/unit):
npm run test:unit
To get a code coverage report based on unit test execution:
npm run coverage
To run just the integration tests (which are located under test/integration'):
npm run test:integration
To make tests run extra noisy-like, add the NOISY_TESTS=true env var
[events]: https://arc.codes/reference/arc/events
[http]: https://arc.codes/reference/arc/http
[queues]: https://arc.codes/reference/arc/queues
[tables]: https://arc.codes/reference/arc/tables
[ws]: https://arc.codes/reference/arc/ws