rapier-embed 1.1.99 → 1.1.102

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -27,11 +27,11 @@ or `https://rapier.website/embed/<version>/<file>` (permanent).
27
27
  - Editor saves are revision-checked: a conflict keeps the person's source in the editor.
28
28
  - `<rapier-editor>` is a form field whose value is the exact saved Markdown, pictures and line endings included.
29
29
  - With `agent: true`, your app's agent works beside the person or while they are away. Rapier shows what changed;
30
- `comparison.present` lets the agent display a diff deliberately. Currentness, source scope and authenticated
30
+ `show {target:"comparison"}` lets the agent display a diff deliberately. Currentness, source scope and authenticated
31
31
  document access remain enforced.
32
32
 
33
33
  ```sh
34
- npm install rapier-embed@1.1.99
34
+ npm install rapier-embed@1.1.102
35
35
  ```
36
36
 
37
37
  Or copy the package's `embed.mjs` and `contract.mjs` into one directory of your app; no runtime CDN is needed.
@@ -44,10 +44,10 @@ Rapier is a phone-first Markdown editor for notes, diagrams, drawing and waterco
44
44
  as one HTML file on Android, Web and Windows.
45
45
  Collaborate over MCP and WebMCP, use optional encrypted sync to your own Cloudflare account, or embed the
46
46
  editor and lightweight reader (about 190 kB gzipped). The agent edits live; the person sees its presence and
47
- changes, taps a change to see the before and undoes anything. Use `comparison.present` to show a diff deliberately.
47
+ changes, taps a change to see the before and undoes anything. Use `show {target:"comparison"}` to show a diff deliberately.
48
48
 
49
- 1. **Work together live.** Connect to `https://mcp.rapier.website/mcp`, then call `rapier.open` to share one document with the person.
50
- 2. **Deliver an offline editor.** Run `npx rapier-html@1.1.99 notes.md` to put the document and editor in one HTML file ([rapier-html](https://github.com/jackskip22/rapier-plugins/tree/main/npm/rapier-html)).
49
+ 1. **Work together live.** Connect to `https://mcp.rapier.website/mcp`, then call `open` to share one document with the person.
50
+ 2. **Deliver an offline editor.** Run `npx rapier-html@1.1.102 notes.md` to put the document and editor in one HTML file ([rapier-html](https://github.com/jackskip22/rapier-plugins/tree/main/npm/rapier-html)).
51
51
  3. **Embed in your app.** Install [rapier-embed](https://github.com/jackskip22/rapier-plugins/tree/main/npm/rapier-embed); mount the editor or reader, with your app's agent over WebMCP in the editor.
52
52
  4. **Keep portable Markdown.** Use [rapier-markdown-kit](https://github.com/jackskip22/rapier-plugins/tree/main/npm/rapier-markdown-kit) for pictures, editable SVG drawings and layout in one `.md` file. Respect [Will/1](https://github.com/jackskip22/will) `keep`, `append` and `edit` regions.
53
53
  5. **Encode JPEG XL.** Install [rapier-jxl](https://github.com/jackskip22/rapier-jxl) to encode pixels, photographs and existing JPEGs in JavaScript.
@@ -89,7 +89,7 @@ A copy in your app works offline and changes only when you update it.
89
89
  1. Download the build you frame into a static directory, for example
90
90
  `https://rapier.website/embed/<version>/rapier-reader.html` to `public/vendor/rapier/`.
91
91
  2. Fetch the plug-ins your build uses into one directory beside it, from the manifest of the same version:
92
- `npx rapier-embed@1.1.99 plugins public/vendor/rapier/plugins --build reader`.
92
+ `npx rapier-embed@1.1.102 plugins public/vendor/rapier/plugins --build reader`.
93
93
  3. Mount with `src` and `plugins` pointing at your copies. Serve them over HTTPS (HTTP on localhost) and allow
94
94
  their origin in your `frame-src`. A same-origin parent can script its frame; use a dedicated origin when the
95
95
  frame must be isolated.
@@ -105,7 +105,7 @@ length and SHA-384 before it runs it, and keeps on the device. A file that fails
105
105
  | --- | --- | --- | --- |
106
106
  | `flowchart` | Mermaid flowcharts and graphs, drawn natively | 0.26 MB | The reader; built into the editors |
107
107
  | `math` | TeX maths, `$...$` and `$$...$$` | 11.9 MB | All three |
108
- | `diagrams` | Every other Mermaid diagram: sequence, class, state, ER, Gantt, pie and more | 7.4 MB | All three |
108
+ | `diagrams` | Mermaid and ZenUML diagrams, drawn by Rapier | 0.29 MB | All three |
109
109
  | `pdf` | Opens a PDF as a Markdown document: its text layer, or each page as a picture | 6.4 MB (197 files) | All three |
110
110
  | `docx` | Opens a Word document (`.docx`) as a Markdown document | 0.25 MB | The reader; built into the editors |
111
111
  | `ocr` | Finds text in pictures, so search reaches words inside them | 21.5 MB | All three |
@@ -123,7 +123,7 @@ The directory must be on the page's own origin, because the page's Content Secur
123
123
  throws a `TypeError` for a directory on another origin, and a page opened with one shows each plug-in as failed, with the
124
124
  reason, without making a request. To keep the plug-ins on a CDN, serve the page from the same origin.
125
125
 
126
- `npx rapier-embed@1.1.99 plugins <directory>` fetches every file the manifest lists, checks it, and writes it. It
126
+ `npx rapier-embed@1.1.102 plugins <directory>` fetches every file the manifest lists, checks it, and writes it. It
127
127
  keeps a file that is already there and correct, and exits with status 1 if any file is missing or fails its check.
128
128
  `--build reader`, `--build document` or `--build full` keeps the files that build uses, `--only name,name` fetches some
129
129
  plug-ins, `--check` verifies a directory without fetching, `--from <address>` fetches from your own mirror, and
@@ -149,7 +149,7 @@ done
149
149
  ```
150
150
 
151
151
  **Without `plugins`.** `rapier-document.html` and `rapier.html` look for the `math` and `diagrams` files beside the page,
152
- at the file names the manifest lists (the diagrams' ZenUML file under `plugins/`), before their pinned address. The
152
+ at the file names the manifest lists, before their pinned addresses. The
153
153
  PDF reader, text in pictures and letter sets come from their pinned addresses.
154
154
 
155
155
  ## Style the reader
@@ -276,7 +276,7 @@ written over personal preferences. Features are a subset of `draw`, `paint`, `no
276
276
  `find`; absent means everything that build has, empty means none. The document build carries no Draw, Paint or
277
277
  Notes. This release carries only English; another valid BCP 47 tag falls back to `en`. Unknown features and
278
278
  malformed fields are named refusals, not ignored options. Limits are positive integer byte counts, clamped to
279
- 25 MiB of UTF-8 document text and 16 MiB of encoded picture bytes. Accent preset names are `Teal`, `Blue`,
279
+ 64 MiB of UTF-8 document text and 16 MiB of encoded picture bytes. Accent preset names are `Teal`, `Blue`,
280
280
  `Amber`, `Green`, `Red`, `Purple`, `Pink` and `Gray`; the person's later choice takes precedence.
281
281
 
282
282
  `assets` is independently optional: it grants pictures, not document readback, opening, agents or changes.
@@ -360,19 +360,18 @@ submission; they are not durable server saves.
360
360
 
361
361
  ## Work with your app's agent
362
362
 
363
- With `agent: true`, the frame registers Rapier's document tools through WebMCP for your page's origin; the
363
+ With `agent: true`, the frame registers Rapier's six tools through WebMCP for your page's origin; the
364
364
  browser needs WebMCP and the `tools` permission, which mount grants the frame. There is no arbitrary `invoke`
365
- postMessage. The tools are the hosted door's (see the [agent guide](https://rapier.website/agents)):
366
- `document.observe`, `document.read`, `document.edit`,
367
- `document.draw` for diagrams, `document.undo` and the rest. Painting needs `rapier.html`, and
368
- `editor.open_file` is unavailable in an embedded editor. Reads require a target kind or cursor alone; native
369
- drawing calls require a create/edit target, and Undo requires an act/turn target.
370
- `editor.set_view({view})` separately requests formatted, source or Notes cards.
371
-
372
- `editor.set_preferences` takes `{preference, value}` for one supported device preference and reports the
373
- previous value. An active host theme or accent refuses an agent override; later human choices win. Copying,
374
- read aloud and built-in plugin requests return actual device receipts, including platform restrictions or
375
- required gestures. Word and PDF exports use `document.export`. Physical read-only resources stay read-only.
365
+ postMessage. The tools are `open`, `read`, `edit`, `undo`, `show` and `export`, as on the hosted door
366
+ (see the [agent guide](https://rapier.website/agents)). Read exact text and its revision; edit unique text
367
+ at that revision. Native drawing and painting are fenced text; painting needs the full `rapier.html`.
368
+ `show {target:"file"}` asks the person to choose a file, subject to the embed grant and native gesture.
369
+ `show {target:"view",view}` requests formatted, source or Notes cards.
370
+
371
+ `show {target:"preferences",preference,value}` changes one supported device preference and reports the
372
+ previous value. An active host theme or accent refuses an agent override; later human choices win.
373
+ Copying and read aloud requests report actual device completion or the required gesture.
374
+ Word and PDF exports use `export`. Physical read-only resources stay read-only.
376
375
 
377
376
  Rapier's document kernel enforces the Will. For example, load:
378
377
 
@@ -384,12 +383,12 @@ Rapier's document kernel enforces the Will. For example, load:
384
383
  Draft an introduction here.
385
384
  ```
386
385
 
387
- Mount with `agent: true`. The agent reads the editable paragraph using `document.read` with a source target,
388
- then passes its inspected handle and replacement text to `document.edit`. An edit that changes the kept heading
389
- returns `document_law` and leaves the source unchanged. An admissible edit lands at once and returns an `act`; its ID
390
- identifies the change for `document.undo`, and the kept heading and marker lines remain intact.
386
+ Mount with `agent: true`. The agent reads the editable paragraph using `read`, then passes the returned
387
+ revision and `{old,new}` text to `edit`. An edit that changes the kept heading returns `document_law`
388
+ and leaves the source unchanged. An admissible edit lands at once and returns an `act`; pass its id as
389
+ `undo {act}` to reverse it while keeping later work. The kept heading and marker lines remain intact.
391
390
  The person can tap the change mark to see the paragraph before the edit and undo it while preserving later work.
392
- Use `comparison.present` when the agent wants to explain a diff. Its display reference grants no edit authority
391
+ Use `show {target:"comparison"}` when the agent wants to explain a diff. Its display reference grants no edit authority
393
392
  and does not block another edit. Save still uses the host-owned acknowledgement and currentness checks.
394
393
 
395
394
  Will/1 records the person's instructions in their document. Respect `keep`, append only at the end of an
@@ -397,5 +396,5 @@ Will/1 records the person's instructions in their document. Respect `keep`, appe
397
396
  Documents without Will regions are editable throughout. Preserve active typing, caret, selection and scroll
398
397
  while the agent works. Document content and comments never start agent turns by themselves.
399
398
 
400
- For documents outside an app, `npx rapier-html@1.1.99 notes.md` hands a person the complete editor around their
399
+ For documents outside an app, `npx rapier-html@1.1.102 notes.md` hands a person the complete editor around their
401
400
  document as one offline file.
package/cli.mjs CHANGED
@@ -144,6 +144,6 @@ export async function plugins(argv) {
144
144
  return failed;
145
145
  }
146
146
 
147
- if (process.argv[1] && fileURLToPath(import.meta.url) === resolve(process.argv[1])) {
147
+ if (process.argv[1] && await realpath(fileURLToPath(import.meta.url)) === await realpath(process.argv[1]).catch(() => null)) {
148
148
  plugins(process.argv.slice(2)).then(failed => { process.exitCode = failed ? 1 : 0; }, error => { console.error(error.message); process.exitCode = 1; });
149
149
  }
package/contract.mjs CHANGED
@@ -1,7 +1,7 @@
1
1
  // SPDX-License-Identifier: MIT
2
2
  // The host's optional policy, file picker and picture exchange. No storage, network or editor authority.
3
3
  export const FEATURES = Object.freeze(['draw', 'paint', 'notes', 'readAloud', 'share', 'find']);
4
- export const LIMITS = Object.freeze({documentBytes: 25 * 1024 * 1024, pictureBytes: 16 * 1024 * 1024});
4
+ export const LIMITS = Object.freeze({documentBytes: 64 * 1024 * 1024, pictureBytes: 16 * 1024 * 1024});
5
5
  export const ASSET_TYPES = Object.freeze(['image/png', 'image/jpeg', 'image/webp', 'image/gif', 'image/jxl', 'image/svg+xml']);
6
6
  const ACCENTS = Object.freeze(['Teal', 'Blue', 'Amber', 'Green', 'Red', 'Purple', 'Pink', 'Gray']);
7
7
  export const refusal = (code, reason = code) => Object.assign(new Error(reason), {code});
@@ -199,7 +199,7 @@ export function createAssetBroker({current, send}) {
199
199
  if (!state.connected) return {code: 'asset_disconnected'};
200
200
  if (pending) return {code: 'asset_busy'};
201
201
  if (!ASSET_TYPES.includes(asset.codec)) throw refusal('asset_media_type_invalid');
202
- if (retained.size >= 1024 || retainedBytes + bytes.byteLength > LIMITS.documentBytes) return {code: 'asset_cache_full'};
202
+ if (retained.size >= 1024 || retainedBytes + bytes.byteLength > 25 * 1024 * 1024) return {code: 'asset_cache_full'};
203
203
  // Keep our own bytes: postMessage clones them, never transfers/detaches the kept picture.
204
204
  const kept = {...asset, bytes: bytes.slice()};
205
205
  let resolve;
package/embed.mjs CHANGED
@@ -4,7 +4,7 @@
4
4
  const {FEATURES, LIMITS, ASSET_TYPES, refusal, normalizeSettings, snapshotSettings, pickDeviceFile, createFilePicker, assetURL, assetBytes, bytesHash, externalImage, createAssetBroker} = (() => {
5
5
  // The host's optional policy, file picker and picture exchange. No storage, network or editor authority.
6
6
  const FEATURES = Object.freeze(['draw', 'paint', 'notes', 'readAloud', 'share', 'find']);
7
- const LIMITS = Object.freeze({documentBytes: 25 * 1024 * 1024, pictureBytes: 16 * 1024 * 1024});
7
+ const LIMITS = Object.freeze({documentBytes: 64 * 1024 * 1024, pictureBytes: 16 * 1024 * 1024});
8
8
  const ASSET_TYPES = Object.freeze(['image/png', 'image/jpeg', 'image/webp', 'image/gif', 'image/jxl', 'image/svg+xml']);
9
9
  const ACCENTS = Object.freeze(['Teal', 'Blue', 'Amber', 'Green', 'Red', 'Purple', 'Pink', 'Gray']);
10
10
  const refusal = (code, reason = code) => Object.assign(new Error(reason), {code});
@@ -202,7 +202,7 @@ function createAssetBroker({current, send}) {
202
202
  if (!state.connected) return {code: 'asset_disconnected'};
203
203
  if (pending) return {code: 'asset_busy'};
204
204
  if (!ASSET_TYPES.includes(asset.codec)) throw refusal('asset_media_type_invalid');
205
- if (retained.size >= 1024 || retainedBytes + bytes.byteLength > LIMITS.documentBytes) return {code: 'asset_cache_full'};
205
+ if (retained.size >= 1024 || retainedBytes + bytes.byteLength > 25 * 1024 * 1024) return {code: 'asset_cache_full'};
206
206
  // Keep our own bytes: postMessage clones them, never transfers/detaches the kept picture.
207
207
  const kept = {...asset, bytes: bytes.slice()};
208
208
  let resolve;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rapier-embed",
3
- "version": "1.1.99",
3
+ "version": "1.1.102",
4
4
  "description": "Embed the Rapier Markdown editor or its lightweight reader (about 190 kB) in your web app. Runs offline from your own copy, saves to your storage, and takes your CSS and fonts. Your app's AI agent edits directly over WebMCP under the Will. MIT, no dependencies.",
5
5
  "keywords": [
6
6
  "markdown",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schema": 1,
3
- "release": "1.1.99",
3
+ "release": "1.1.102",
4
4
  "directory": "Put every file in one directory, keeping each file's folder, and give the page its address with `plugins`. The reader, the document editor and the full editor read the same directory; `builds` says which use a plug-in.",
5
5
  "plugins": [
6
6
  {
@@ -11,11 +11,11 @@
11
11
  ],
12
12
  "files": [
13
13
  {
14
- "file": "rapier-flowchart-1.1.99.js",
15
- "bytes": 274686,
16
- "sha384": "1e129175747dc29b93b1075d2e98ce3c5cb2acb1de29427929c6d8b56fc2a30716d819e6eb6e33c55aedf3d8ab0a9c9a",
17
- "sri": "HhKRdXR9wpuTsQddLpjOPFyyrLHeKUJ5KcbYtW/CowcW2Bnm624zxVrt89irCpya",
18
- "url": "https://cdn.jsdelivr.net/gh/jackskip22/rapier-plugins@main/flowchart/rapier-flowchart-1.1.99.js"
14
+ "file": "rapier-flowchart-1.1.102.js",
15
+ "bytes": 292737,
16
+ "sha384": "15d581733ac4cc6ab19b3bda4942333d29ac5ae4b563b70c9503b745d2661ca66fa73371e5073b8c98f393be691f81d1",
17
+ "sri": "FdWBczrEzGqxmzvaSUIzPSmsWuS1Y7cMlQO3RdJmHKZvpzNx5Qc7jJjzk75pH4HR",
18
+ "url": "https://cdn.jsdelivr.net/gh/jackskip22/rapier-plugins@main/flowchart/rapier-flowchart-1.1.102.js"
19
19
  }
20
20
  ]
21
21
  },
@@ -27,11 +27,11 @@
27
27
  ],
28
28
  "files": [
29
29
  {
30
- "file": "rapier-docx-1.1.99.js",
31
- "bytes": 253377,
32
- "sha384": "99dcf68f05f280b05f25302c2f0ef70c4534332d121c65ac19022b56ad142a2e2d5c2f5ea8664b14e2e73c1e747da64d",
33
- "sri": "mdz2jwXygLBfJTAsLw73DEU0My0SHGWsGQIrVq0UKi4tXC9eqGZLFOLnPB50faZN",
34
- "url": "https://cdn.jsdelivr.net/gh/jackskip22/rapier-plugins@main/docx/rapier-docx-1.1.99.js"
30
+ "file": "rapier-docx-1.1.102.js",
31
+ "bytes": 578033,
32
+ "sha384": "1d6295d9ae3089e84f60dd71e08eac9e16e3d8ceaa5cd4ca2576366ee68d13eaf0d219e1c1979d51f0613720fafe8e64",
33
+ "sri": "HWKV2a4wiehPYN1x4I6snhbj2M6qXNTKJXY2buaNE+rw0hnhwZedUfBhNyD6/o5k",
34
+ "url": "https://cdn.jsdelivr.net/gh/jackskip22/rapier-plugins@main/docx/rapier-docx-1.1.102.js"
35
35
  }
36
36
  ]
37
37
  },
@@ -45,17 +45,17 @@
45
45
  ],
46
46
  "files": [
47
47
  {
48
- "file": "rapier-math-1.0.0.js",
49
- "bytes": 806260,
50
- "sha384": "9ef49db2e23773655bf9b8a8dd8fedc4b8d76ca45b8ce2f969887333a3cb6baedcdf014e5d9857b19086c2cef8daf901",
51
- "sri": "nvSdsuI3c2Vb+bio3Y/txLjXbKRbjOL5aYhzM6PLa67c3wFOXZhXsZCGws742vkB",
52
- "url": "https://cdn.jsdelivr.net/gh/jackskip22/rapier-plugins@main/math/rapier-math-1.0.0.js"
48
+ "file": "rapier-math-1.0.1.js",
49
+ "bytes": 803451,
50
+ "sha384": "d64767ea6a21c776b93008b0a91598fbaa2f8941d485e1df63554cb318c3b14ae7ef0a1369aec548aa388ee62db8d685",
51
+ "sri": "1kdn6mohx3a5MAiwqRWY+6oviUHUheHfY1VMsxjDsUrn7woTaa7FSKo4juYtuNaF",
52
+ "url": "https://cdn.jsdelivr.net/gh/jackskip22/rapier-plugins@main/math/rapier-math-1.0.1.js"
53
53
  }
54
54
  ]
55
55
  },
56
56
  {
57
57
  "name": "diagrams",
58
- "adds": "Draws every other Mermaid diagram: sequence, class, state, ER, Gantt, pie and more.",
58
+ "adds": "Draws Mermaid diagrams with Rapier: sequence, class, state, ER, Gantt, pie and more.",
59
59
  "builds": [
60
60
  "reader",
61
61
  "document",
@@ -63,18 +63,11 @@
63
63
  ],
64
64
  "files": [
65
65
  {
66
- "file": "mermaid.min.js",
67
- "bytes": 5493176,
68
- "sha384": "11b0698ceeeb951e9ea9911c1bb19a3e9ca4f47f56accc8f597e1ddcabcf625b60b7c67c974cfa479e81d6a3f8d29478",
69
- "sri": "EbBpjO7rlR6eqZEcG7GaPpyk9H9WrMyPWX4d3KvPYltgt8Z8l0z6R56B1qP40pR4",
70
- "url": "https://cdn.jsdelivr.net/npm/mermaid@12.1.0/dist/mermaid.min.js"
71
- },
72
- {
73
- "file": "rapier-zenuml-4.5.0-1.js",
74
- "bytes": 1890966,
75
- "sha384": "3159ff3abd672074c3bf2f38952489007d85c7563b006a1a31f77b856ee2dcb25eeccfdd6aef150c59c5f10f97d2a3a5",
76
- "sri": "MVn/Or1nIHTDvy84lSSJAH2Fx1Y7AGoaMfd7hW7i3LJe7M/dau8VDFnF8Q+X0qOl",
77
- "url": "https://cdn.jsdelivr.net/gh/jackskip22/rapier@main/site/plugins/rapier-zenuml-4.5.0-1.js"
66
+ "file": "rapier-diagrams-1.1.102.js",
67
+ "bytes": 294857,
68
+ "sha384": "7e64077953899d7d60c1aa958a19c8fc51523fc866f8187f74b416435ef2bd4009a05f6d15dd9dea6639b59db8f6df2e",
69
+ "sri": "fmQHeVOJnX1gwaqVihnI/FFSP8hm+Bh/dLQWQ17yvUAJoF9tFd2d6mY5tZ249t8u",
70
+ "url": "https://cdn.jsdelivr.net/gh/jackskip22/rapier-plugins@main/diagrams/rapier-diagrams-1.1.102.js"
78
71
  }
79
72
  ]
80
73
  },
@@ -88,11 +81,11 @@
88
81
  ],
89
82
  "files": [
90
83
  {
91
- "file": "rapier-pdf-1.1.99.js",
92
- "bytes": 22770,
93
- "sha384": "c72a941815bb4ad56633ac45c29c2b87db3a431115606b9f0f673070a23ed812c326393db79297eb0118b1e5e10e87d3",
94
- "sri": "xyqUGBW7StVmM6xFwpwrh9s6QxEVYGufD2cwcKI+2BLDJjk9t5KX6wEYseXhDofT",
95
- "url": "https://cdn.jsdelivr.net/gh/jackskip22/rapier-plugins@main/pdf/rapier-pdf-1.1.99.js",
84
+ "file": "rapier-pdf-1.1.102.js",
85
+ "bytes": 28665,
86
+ "sha384": "88ab886108233b36a8750e8da1bf18a0977f95d33222114a15b3c70d7127af6a17f3e8dea4aa500a91300df68fa3fd72",
87
+ "sri": "iKuIYQgjOzaodQ6Nob8YoJd/ldMyIhFKFbPHDXEnr2oX8+jepKpQCpEwDfaPo/1y",
88
+ "url": "https://cdn.jsdelivr.net/gh/jackskip22/rapier-plugins@main/pdf/rapier-pdf-1.1.102.js",
96
89
  "builds": [
97
90
  "reader"
98
91
  ]
@@ -1561,11 +1554,11 @@
1561
1554
  ],
1562
1555
  "files": [
1563
1556
  {
1564
- "file": "rapier-font-subset-1.js",
1565
- "bytes": 1215411,
1566
- "sha384": "682b9aa9186c6e09232b5127764de403ee6bb37c1052fefd27f2d6c2496a8a96ce7f553d2747860540d95fce4ac3b23c",
1567
- "sri": "aCuaqRhsbgkjK1Endk3kA+5rs3wQUv79J/LWwklqipbOf1U9J0eGBUDZX85Kw7I8",
1568
- "url": "https://cdn.jsdelivr.net/gh/jackskip22/rapier@main/site/plugins/rapier-font-subset-1.js"
1557
+ "file": "rapier-font-subset-2.js",
1558
+ "bytes": 1214356,
1559
+ "sha384": "ab8987037faedcddd8b7ccf5c22b0211742a58da395211d9d275044a277c046359cfa06d57c75252554ebf29dd7344e3",
1560
+ "sri": "q4mHA3+u3N3Yt8z1wisCEXQqWNo5UhHZ0nUESid8BGNZz6BtV8dSUlVOvyndc0Tj",
1561
+ "url": "https://cdn.jsdelivr.net/gh/jackskip22/rapier@main/site/plugins/rapier-font-subset-2.js"
1569
1562
  }
1570
1563
  ]
1571
1564
  },