fin-utils
Version:
Shared utilities for Fin.
121 lines (83 loc) • 3.67 kB
Markdown
> Shared utilities for [Fin](https://functional-income.com).
[](https://www.npmjs.com/package/fin-utils) [](https://travis-ci.com/functional-incomee/fin) [](https://standardjs.com)
```bash
npm install fin-utils
```
```js
const finUtils = require('fin-utils')
// parses any FaaS identifier (see the FaaS format below for more examples)
const parsedInfo = finUtils.parseFaasIdentifier('username/projectName.serviceName@01234567')
if (!parsedInfo) {
console.error('invalid identifier')
} else {
const { projectId, serviceName, deploymentHash, version } = parsedInfo
if (serviceName) {
console.log(`${projectId}.${serviceName}@${deploymentHash || version}`)
} else {
console.log(`${projectId}@${deploymentHash || version}`)
}
}
```
```js
const finUtils = require('fin-utils')
const { validators } = finUtils
validators.email('example@gmail.com') // true
validators.email('foo') // false
validators.username('transitive-bullshit') // true
validators.username('foo$86') // false
validators.password('password') // true
validators.password('a') // false (too short)
validators.projectName('hello-world') // true
validators.projectName('%') // false
validators.deploymentHash('abc123yz') // true
validators.deploymentHash('ABCdefGHIjkl') // false
validators.project('username/goodProject') // true
validators.project('username\bad%project') // false
validators.deployment('username/goodProjectName@abc123yz') // true
validators.deployment('username/bad%project%20name@ZZ') // false
```
The most general FaaS identifier fully specifies the deployment and service name.
It *may* include an optional URL prefix such as `http://localhost:5000/1/call/` in *development* or `https://api.functional-income.com/1/call/` in *production*. The parsed result will be the same with or without the full URL prefix.
```
username/projectName.serviceName@01234567 // explicitly identify a specific deployment (may not be published)
username/projectName.serviceName@latest // explicitly identify the latest published deployment
username/projectName.serviceName@1.0.0 // explicitly identify a the published deployment with a specific version
username/projectName.serviceName // implicitly identify the latest published deployment
```
---
If no `serviceName` is specified, it is assumed that the deployment only has a single service and errors if this is not the case.
```
username/projectName@01234567
username/projectName@latest
username/projectName@1.0.0
username/projectName
```
You may optionally leave off the `username/` prefix when referring to your own projects and deployments via the dev [CLI](../fin-cli).
```
projectName@01234567
projectName@latest
projectName@1.0.0
projectName
```
An example of this for the `hello-world` project would look like:
```sh
fin ls hello-world
```
This would be equivalent to:
```sh
fin ls my-user-name/hello-world
```
- [fin](https://functional-income.com) - Fin is the easiest way to launch your own SaaS.
- [fts](https://github.com/transitive-bullshit/functional-typescript) - TypeScript standard for rock solid serverless functions.
MIT © [Travis Fischer](https://transitivebullsh.it)