Skip to content

Commit

Permalink
visionary-url v1.1.0
Browse files Browse the repository at this point in the history
  • Loading branch information
tex-murphy committed Jan 15, 2024
0 parents commit ab42573
Show file tree
Hide file tree
Showing 25 changed files with 3,773 additions and 0 deletions.
15 changes: 15 additions & 0 deletions .github/workflows/ci-cd-workflow.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
name: Visionary URL CI/CD

on: [push, pull_request]

jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 18
- run: npm ci
- run: npm run build
- run: npm test
19 changes: 19 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# Logs
logs
*.log
npm-debug.log*

node_modules
dist
*.local

# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
1 change: 1 addition & 0 deletions .nvmrc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
v18.18.2
4 changes: 4 additions & 0 deletions .prettierrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"semi": true,
"printWidth": 108
}
76 changes: 76 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
**Visionary URL** is a lightweight library for generating image URLs with embedded placeholder data (image dimensions, background color, blurhash).


## Getting started

Install `visionary-url` via npm. Both ES modules and CommonJS modules are supported.

```bash
npm install --save visionary-url
```

### Generating a Visionary URL

```javascript
import { generateVisionaryUrl } from 'visionary-url';

const url = generateVisionaryUrl({
blurhash: "LCDJYN9FxG_M_N%L%M%M4o~ptRIA", // blurhash string
blurhashX: 4, // blurhash x components
blurhashY: 4, // blurhash y components
bcc: "#baccae", // background color code
fileId: "image:101", // image ID or URL
sourceHeight: 1200, // image height
sourceWidth: 1600, // image width
});
```



## How it works

A Visionary URL is formatted using 3 or 4 URL segments:
| | base path | | visionary code | | options (optional) | | filename |
| -- | -- | -- | -- | -- | -- | -- | -- |
| `/` | `image` | `/` | `<visionary code, base64url>` | `/` |`<option tokens>` | `/` | `image.jpg` |

### Example URLs

```
https://examplecdn.cloud/image/aW1hZ2U6MTAwMDEhODAwITYwMA/image.jpg
https://examplecdn.cloud/image/aW1hZ2U6MTAwMDEhODAwITYwMA/4k/image.jpg
```

### Visionary code

The **Visionary code** is a base64url'd, exclamation-point separated list of image placeholder data, detailed as the following:


| Attribute | Description |
| -- | -- |
| Image ID | Image URL or internal image ID (required) |
| Image width | Used to compute aspect ratio of image placeholder (required) |
| Image height | Used to compute aspect ratio of image placeholder (required) |
| Background color code | Base layer background color code (e.g. `#BACCAE`) |
| Blurhash code | Blurhash string of the image |
| Blurhash x components | Number of x components the blurhash code represents |
| Blurhash y components | Number of y components the blurhash code represents |


### Image options

Image options are optional and are provided as comma separated tokens.


#### Size token

One of the following tokens may be included in the options string to specify an image size: `xs`, `sm`, `md`, `lg`, `xl`, `xxl`, `4k`, `5k`

#### Download token

| token | description |
| -- | --- |
| `download` | Indication for server to return `content-disposition: attachment;` in response headers |



1 change: 1 addition & 0 deletions lib/constants.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export * from "../src/constants";
8 changes: 8 additions & 0 deletions lib/visionary-url.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
export { generateVisionaryCode, parseVisionaryCode } from "../src/visionary-code";
export { generateVisionaryUrl, parseVisionaryUrl } from "../src/visionary-url";

export * from "../src/enum";
export { parseOptionsString } from "../src/image-options";
export * from "../src/token";
export { formatToContentType, isBase64UrlFormatted } from "../src/util";
export * from "../src/types/visionary.types";
Loading

0 comments on commit ab42573

Please sign in to comment.