UNPKG

fin-utils

Version:
121 lines (83 loc) 3.67 kB
# fin-utils > Shared utilities for [Fin](https://functional-income.com). [![NPM](https://img.shields.io/npm/v/fin-utils.svg)](https://www.npmjs.com/package/fin-utils) [![Build Status](https://travis-ci.com/functional-incomee/fin.svg?branch=master)](https://travis-ci.com/functional-incomee/fin) [![JavaScript Style Guide](https://img.shields.io/badge/code_style-standard-brightgreen.svg)](https://standardjs.com) ## Install ```bash npm install fin-utils ``` ## Usage #### parseFaasIdentifier ```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}`) } } ``` #### validators ```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 ``` ## FaaS Identifier Format 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 ``` #### Omitting username 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 # view all deployments for the authenticated user's hello-world project fin ls hello-world ``` This would be equivalent to: ```sh # view all deployments for my-user-name/hello-world project fin ls my-user-name/hello-world ``` ## Related - [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. ## License MIT © [Travis Fischer](https://transitivebullsh.it)