# static-spa

> Node.js HTTP middleware for serving static files of single-page-applications.

Latest version **1.0.0** (published 2020-07-12) · MIT license · 0 weekly downloads

## Install

```sh
npm install static-spa
pnpm add static-spa
yarn add static-spa
bun add static-spa
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.0.0 |
| Published | 2020-07-12 |
| First published | 2020-07-12 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 2 |
| Unpacked size | 15.5 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 0 |
| Author | larryc5 |
| Maintainers | larryc5 |

## Links

- npm: https://www.npmjs.com/package/static-spa
- Repository: https://github.com/larryc5/static-spa
- Homepage: https://github.com/larryc5/static-spa#readme
- Issues: https://github.com/larryc5/static-spa/issues
- npm.io page: https://npm.io/package/static-spa

## Dependencies (2)

- [find-up](https://npm.io/package/find-up.md) ^4.1.0
- [object-path](https://npm.io/package/object-path.md) ^0.11.4

## Recent versions

- 1.0.0 (latest) — 2020-07-12

## README

# static-spa
This is middleware for serving static files of single-page-applications. I mainly designed it for `express`, but it might also work for similar libraries. 

Basic use:

```js
const path = require('path');
const express = require('express');
const staticSpa = require('static-spa');

const app = express();

app.use(staticSpa(path.join(__dirname, 'public')));

app.listen(8000);
```

Unlike `express.static`, `staticSpa` will try to find the nearest `index.html` and serve that instead if the originally requested file doesn't exist. 

It can also take an object for additional options.

```js
app.use(staticSpa({
  dir: path.join(__dirname, 'public'))),
  index: 'foobar.html',
});
```

### Options

| key | type | default | description |
|:----|:-----|:--------|:------------|
| `dir` *(required)* | `string` | | The directory to serve from. |
| `index` | `string` | `"index.html"` | The name of the index file(s). |
| `template` | `TemplateOptions` | `{}` | Use to configure templating. Omit to disable templating. |

### TemplateOptions

| key | type | default | description |
|:----|:-----|:--------|:------------|
| `index` | `string` | Set to `options.index` | Use this to distinguish template files from regular index files, for example `"index.htmlt"` |
| `match` | `string | RegExp` | `/\$([\w.|]*)\$/g` (example: `$variable|filter$` or `$variable|filter1|filter2$`) | Determines what to replace. |
| `split` | `string | RegExp` | `"|"` | Character to use for filters. |
| `data` | `object` | `{}` | The data to use when templating files. |
| `fitlers` | `{ [name: string]: (value: any) => any }` | `defaultFilters` | The list of filters to use in the template. |

Example template with default settings:

```html
<!DOCTYPE html>
<html>
<head>
  <base href="$base$/">
  <meta charset="UTF-8">
  <title>$title$</title>
  <link rel="styleshee" type="text/css" href="style.css">
</head>
<body>
  <h1>$title$</h1>
  <div id="main"></div>
  <script type="text/javascript" src="main.js"></script>
</body>
</html>
```

You can use `clean` to insert safe HTML.

```html
  <title>$title|clean$</title>
```

Default filters:
- `clean` => Replaces special characters with HTML entities.
- `encode` => Encodes string using `encodeURLComponent`.
- `date` => Converts variable to a date.
- `number` => Converts variable to a number.
- `boolean` => Converts variable to a boolean.
- `json` => Prints variable as JSON using `JSON.stringify`.

---
_Source: https://npm.io/package/static-spa · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
